diff --git a/.github/workflows/android_build.yml b/.github/workflows/android_build.yml new file mode 100644 index 0000000..6215fdf --- /dev/null +++ b/.github/workflows/android_build.yml @@ -0,0 +1,47 @@ +name: Build and Deploy to Google Play + +on: + workflow_dispatch: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +permissions: + checks: write + contents: read + id-token: write + pull-requests: write + +jobs: + build_and_deploy: + runs-on: ubuntu-latest + steps: + - name: Clone repository + uses: actions/checkout@v4 + - name: Set up Flutter + uses: subosito/flutter-action@v2 + with: + channel: stable + flutter-version: 3.38.3 + - run: flutter --version + - run: flutter pub get + - name: Calculate Build Number + run: | + BUILD_NUMBER=$(( ${{ github.run_number }} + 100 )) + echo "BUILD_NUMBER=$BUILD_NUMBER" >> $GITHUB_ENV + - name: Build Prod Release + env: + GRADLE_OPTS: "-Dorg.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=512m" + run: flutter build appbundle --release -t lib/main_prod.dart --flavor prod --build-number=${{ env.BUILD_NUMBER }} + - name: Upload to Google Play Store + uses: r0adkll/upload-google-play@v1 + with: + serviceAccountJsonPlainText: '${{ secrets.GOOGLE_CLOUD_SERVICE_ACCOUNT_SECRET }}' + packageName: com.sealstudios.simple_aac + releaseFiles: build/app/outputs/bundle/prodRelease/app-prod-release.aab + tracks: internal + inAppUpdatePriority: 1 + mappingFile: build/app/outputs/mapping/prodRelease/mapping.txt + debugSymbols: build/app/intermediates/merged_native_libs/prodRelease/mergeProdReleaseNativeLibs/out/lib + changesNotSentForReview: ${{ vars.CHANGES_NOT_SENT_FOR_REVIEW }} diff --git a/.github/workflows/web_build.yml b/.github/workflows/web_build.yml new file mode 100644 index 0000000..94d81b9 --- /dev/null +++ b/.github/workflows/web_build.yml @@ -0,0 +1,39 @@ +name: BuildWeb + +on: + workflow_dispatch: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +permissions: + contents: read + pages: write + id-token: write + +jobs: + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Clone repository + uses: actions/checkout@v4 + - name: Set up Flutter + uses: subosito/flutter-action@v2 + with: + channel: stable + - run: flutter --version + - run: flutter pub get + - run: flutter build web --release -t lib/main_web.dart + - name: Setup Pages + uses: actions/configure-pages@v5 + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: './build/web/' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore index 0fa6b67..09709d2 100644 --- a/.gitignore +++ b/.gitignore @@ -32,7 +32,6 @@ /build/ # Web related -lib/generated_plugin_registrant.dart # Symbolication related app.*.symbols @@ -44,3 +43,21 @@ app.*.map.json /android/app/debug /android/app/profile /android/app/release + +# Secrets +serviceAccountKey.json + +# Node +node_modules/ +package-lock.json +package.json + +# Generated / temp +aac_images/ +temp/ +temp2/ +output.zip + +# Claude +.claude/ + diff --git a/.metadata b/.metadata index 0f055bf..e679346 100644 --- a/.metadata +++ b/.metadata @@ -4,7 +4,27 @@ # This file should be version controlled and should not be manually edited. version: - revision: ffb2ecea5223acdd139a5039be2f9c796962833d - channel: stable + revision: "19074d12f7eaf6a8180cd4036a430c1d76de904e" + channel: "stable" project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 19074d12f7eaf6a8180cd4036a430c1d76de904e + base_revision: 19074d12f7eaf6a8180cd4036a430c1d76de904e + - platform: web + create_revision: 19074d12f7eaf6a8180cd4036a430c1d76de904e + base_revision: 19074d12f7eaf6a8180cd4036a430c1d76de904e + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/README.md b/README.md index e1fb64c..33c1085 100644 --- a/README.md +++ b/README.md @@ -33,3 +33,12 @@ ADD new colors for other themes https://m3.material.io/theme-builder#/custom ADD messaging and sign in + + +//// +Generate images +run +pip install openai requests +then run + + diff --git a/analysis_options.yaml b/analysis_options.yaml new file mode 100644 index 0000000..0d29021 --- /dev/null +++ b/analysis_options.yaml @@ -0,0 +1,28 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/android/SimpleAACKeyStore b/android/SimpleAACKeyStore new file mode 100644 index 0000000..632eba1 Binary files /dev/null and b/android/SimpleAACKeyStore differ diff --git a/android/app/build.gradle b/android/app/build.gradle index 1d8a26d..d0433f5 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,3 +1,11 @@ +plugins { + id "com.android.application" + id "org.jetbrains.kotlin.android" + id "dev.flutter.flutter-gradle-plugin" + id "com.google.gms.google-services" + id "com.google.firebase.crashlytics" +} + def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { @@ -6,9 +14,10 @@ if (localPropertiesFile.exists()) { } } -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +def keystoreProperties = new Properties() +def keystorePropertiesFile = rootProject.file('keystore.properties') +if (keystorePropertiesFile.exists()) { + keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) } def flutterVersionCode = localProperties.getProperty('flutter.versionCode') @@ -21,49 +30,39 @@ if (flutterVersionName == null) { flutterVersionName = '1.0' } -apply plugin: 'com.android.application' -apply plugin: 'com.google.gms.google-services' -apply plugin: 'com.google.firebase.crashlytics' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - android { + namespace "com.sealstudios.simple_aac" - lintOptions { - checkReleaseBuilds false - } - // ----- BEGIN flavorDimensions (autogenerated by flutter_flavorizr) ----- - flavorDimensions "flavor-type" + flavorDimensions += "flavor-type" productFlavors { dev { dimension "flavor-type" - applicationId "com.sealstudios.simpleaac.dev" + applicationId "com.sealstudios.simple_aac.dev" resValue "string", "app_name", "Simple AAC DEV" } uat { dimension "flavor-type" - applicationId "com.sealstudios.simpleaac.uat" + applicationId "com.sealstudios.simple_aac.uat" resValue "string", "app_name", "Simple AAC UAT" } prod { dimension "flavor-type" - applicationId "com.sealstudios.simpleaac.prod" + applicationId "com.sealstudios.simple_aac" resValue "string", "app_name", "Simple AAC" } } - // ----- END flavorDimensions (autogenerated by flutter_flavorizr) ----- - - compileSdkVersion 33 + compileSdk = flutter.compileSdkVersion + ndkVersion = "28.2.13676358" compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { - jvmTarget = '1.8' + jvmTarget = JavaVersion.VERSION_17 } sourceSets { @@ -71,22 +70,34 @@ android { } defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.sealstudios.simpleaac.simple_aac" - minSdkVersion 20 - targetSdkVersion 33 + applicationId "com.sealstudios.simple_aac" + minSdkVersion flutter.minSdkVersion + targetSdk 36 multiDexEnabled true versionCode flutterVersionCode.toInteger() versionName flutterVersionName } + signingConfigs { + release { + keyAlias keystoreProperties['keyAlias'] + keyPassword keystoreProperties['keyPassword'] + storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null + storePassword keystoreProperties['storePassword'] + } + } + buildTypes { release { - signingConfig signingConfigs.debug - minifyEnabled = true - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt') + signingConfig signingConfigs.release + minifyEnabled true + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } + + lint { + checkReleaseBuilds false + } } flutter { @@ -94,5 +105,5 @@ flutter { } dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation "androidx.multidex:multidex:2.0.1" } diff --git a/android/app/google-services.json b/android/app/google-services.json new file mode 100644 index 0000000..cf9c006 --- /dev/null +++ b/android/app/google-services.json @@ -0,0 +1,159 @@ +{ + "project_info": { + "project_number": "997985384352", + "firebase_url": "https://simpleaac-460e6.firebaseio.com", + "project_id": "simpleaac-460e6", + "storage_bucket": "simpleaac-460e6.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:997985384352:android:f8276f74d6d710cae956c5", + "android_client_info": { + "package_name": "com.sealstudios.simple_aac" + } + }, + "oauth_client": [ + { + "client_id": "997985384352-ak53r6arua833dvji3t8sbn8opp6vq2n.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.sealstudios.simple_aac", + "certificate_hash": "11b18e27d28dc55ac58ba2cc6dbac796457a8a26" + } + }, + { + "client_id": "997985384352-ok3i8fgqnja4glpf9huaukgku55kr4s5.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.sealstudios.simple_aac", + "certificate_hash": "f56c13e30f5a60ed34a302698f5916b86e2fdfc8" + } + }, + { + "client_id": "997985384352-v8pggnim5f3esanoj7us91as0l7o498l.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.sealstudios.simple_aac", + "certificate_hash": "e0274f3c04f8b04b2cc678ef1142eb22c85025dc" + } + }, + { + "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDmCr6eOqqXt41McT1I3g447yybMNCRSOM" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "997985384352-1rpmqc97asd8gogs8flt3uo997s99mkb.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.sealstudios.simpleaac.uat" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:997985384352:android:7e3c2549044f4cb7e956c5", + "android_client_info": { + "package_name": "com.sealstudios.simple_aac.dev" + } + }, + "oauth_client": [ + { + "client_id": "997985384352-c73tlap0othqh17oq7v3vqm4fpv0d6l6.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.sealstudios.simple_aac.dev", + "certificate_hash": "11b18e27d28dc55ac58ba2cc6dbac796457a8a26" + } + }, + { + "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDmCr6eOqqXt41McT1I3g447yybMNCRSOM" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "997985384352-1rpmqc97asd8gogs8flt3uo997s99mkb.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.sealstudios.simpleaac.uat" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:997985384352:android:3e6cb26322d31457e956c5", + "android_client_info": { + "package_name": "com.sealstudios.simple_aac.uat" + } + }, + "oauth_client": [ + { + "client_id": "997985384352-rju5gidl440q3v26vdinj1v9vg4s9on7.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.sealstudios.simple_aac.uat", + "certificate_hash": "11b18e27d28dc55ac58ba2cc6dbac796457a8a26" + } + }, + { + "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDmCr6eOqqXt41McT1I3g447yybMNCRSOM" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "997985384352-1rpmqc97asd8gogs8flt3uo997s99mkb.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.sealstudios.simpleaac.uat" + } + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro new file mode 100644 index 0000000..e69de29 diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml index 43d04a5..6b6efa2 100644 --- a/android/app/src/debug/AndroidManifest.xml +++ b/android/app/src/debug/AndroidManifest.xml @@ -1,5 +1,5 @@ + > diff --git a/android/app/src/dev/google-services.json b/android/app/src/dev/google-services.json index f3ca312..944c1b2 100644 --- a/android/app/src/dev/google-services.json +++ b/android/app/src/dev/google-services.json @@ -8,12 +8,72 @@ "client": [ { "client_info": { - "mobilesdk_app_id": "1:997985384352:android:747f808f59bc2f61e956c5", + "mobilesdk_app_id": "1:997985384352:android:f8276f74d6d710cae956c5", "android_client_info": { - "package_name": "com.sealstudios.simpleaac.dev" + "package_name": "com.sealstudios.simple_aac" } }, "oauth_client": [ + { + "client_id": "997985384352-ak53r6arua833dvji3t8sbn8opp6vq2n.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.sealstudios.simple_aac", + "certificate_hash": "11b18e27d28dc55ac58ba2cc6dbac796457a8a26" + } + }, + { + "client_id": "997985384352-ok3i8fgqnja4glpf9huaukgku55kr4s5.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.sealstudios.simple_aac", + "certificate_hash": "f56c13e30f5a60ed34a302698f5916b86e2fdfc8" + } + }, + { + "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDmCr6eOqqXt41McT1I3g447yybMNCRSOM" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "997985384352-1rpmqc97asd8gogs8flt3uo997s99mkb.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.sealstudios.simpleaac.uat" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:997985384352:android:7e3c2549044f4cb7e956c5", + "android_client_info": { + "package_name": "com.sealstudios.simple_aac.dev" + } + }, + "oauth_client": [ + { + "client_id": "997985384352-c73tlap0othqh17oq7v3vqm4fpv0d6l6.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.sealstudios.simple_aac.dev", + "certificate_hash": "11b18e27d28dc55ac58ba2cc6dbac796457a8a26" + } + }, { "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", "client_type": 3 @@ -30,6 +90,57 @@ { "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", "client_type": 3 + }, + { + "client_id": "997985384352-1rpmqc97asd8gogs8flt3uo997s99mkb.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.sealstudios.simpleaac.uat" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:997985384352:android:3e6cb26322d31457e956c5", + "android_client_info": { + "package_name": "com.sealstudios.simple_aac.uat" + } + }, + "oauth_client": [ + { + "client_id": "997985384352-rju5gidl440q3v26vdinj1v9vg4s9on7.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.sealstudios.simple_aac.uat", + "certificate_hash": "11b18e27d28dc55ac58ba2cc6dbac796457a8a26" + } + }, + { + "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDmCr6eOqqXt41McT1I3g447yybMNCRSOM" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "997985384352-1rpmqc97asd8gogs8flt3uo997s99mkb.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.sealstudios.simpleaac.uat" + } } ] } diff --git a/android/app/src/dev/res/drawable-hdpi/ic_launcher_foreground.png b/android/app/src/dev/res/drawable-hdpi/ic_launcher_foreground.png index 427c69a..33d43c7 100644 Binary files a/android/app/src/dev/res/drawable-hdpi/ic_launcher_foreground.png and b/android/app/src/dev/res/drawable-hdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/dev/res/drawable-mdpi/ic_launcher_foreground.png b/android/app/src/dev/res/drawable-mdpi/ic_launcher_foreground.png index 00788c8..67c7887 100644 Binary files a/android/app/src/dev/res/drawable-mdpi/ic_launcher_foreground.png and b/android/app/src/dev/res/drawable-mdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/dev/res/drawable-xhdpi/ic_launcher_foreground.png b/android/app/src/dev/res/drawable-xhdpi/ic_launcher_foreground.png index 1803727..b84aaa3 100644 Binary files a/android/app/src/dev/res/drawable-xhdpi/ic_launcher_foreground.png and b/android/app/src/dev/res/drawable-xhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/dev/res/drawable-xxhdpi/ic_launcher_foreground.png b/android/app/src/dev/res/drawable-xxhdpi/ic_launcher_foreground.png index 49529ee..b39b362 100644 Binary files a/android/app/src/dev/res/drawable-xxhdpi/ic_launcher_foreground.png and b/android/app/src/dev/res/drawable-xxhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/dev/res/drawable-xxxhdpi/ic_launcher_foreground.png b/android/app/src/dev/res/drawable-xxxhdpi/ic_launcher_foreground.png index 2f8dae2..76d070e 100644 Binary files a/android/app/src/dev/res/drawable-xxxhdpi/ic_launcher_foreground.png and b/android/app/src/dev/res/drawable-xxxhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/dev/res/mipmap-anydpi-v26/ic_launcher.xml b/android/app/src/dev/res/mipmap-anydpi-v26/ic_launcher.xml index 5f349f7..c0c204f 100644 --- a/android/app/src/dev/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/android/app/src/dev/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,5 +1,9 @@ - + + + diff --git a/android/app/src/dev/res/mipmap-hdpi/ic_launcher.png b/android/app/src/dev/res/mipmap-hdpi/ic_launcher.png index db77bb4..f7a05b1 100644 Binary files a/android/app/src/dev/res/mipmap-hdpi/ic_launcher.png and b/android/app/src/dev/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/app/src/dev/res/mipmap-mdpi/ic_launcher.png b/android/app/src/dev/res/mipmap-mdpi/ic_launcher.png index 17987b7..a7de73f 100644 Binary files a/android/app/src/dev/res/mipmap-mdpi/ic_launcher.png and b/android/app/src/dev/res/mipmap-mdpi/ic_launcher.png differ diff --git a/android/app/src/dev/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/dev/res/mipmap-xhdpi/ic_launcher.png index 09d4391..05dc9d9 100644 Binary files a/android/app/src/dev/res/mipmap-xhdpi/ic_launcher.png and b/android/app/src/dev/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/android/app/src/dev/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/dev/res/mipmap-xxhdpi/ic_launcher.png index d5f1c8d..8316322 100644 Binary files a/android/app/src/dev/res/mipmap-xxhdpi/ic_launcher.png and b/android/app/src/dev/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/app/src/dev/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/dev/res/mipmap-xxxhdpi/ic_launcher.png index 4d6372e..b5d38e5 100644 Binary files a/android/app/src/dev/res/mipmap-xxxhdpi/ic_launcher.png and b/android/app/src/dev/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index a4fcc9f..219816f 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,4 +1,4 @@ - + @@ -35,5 +35,9 @@ + \ No newline at end of file diff --git a/android/app/src/main/kotlin/com/sealstudios/simpleaac/simple_aac/MainActivity.kt b/android/app/src/main/kotlin/com/sealstudios/simple_aac/MainActivity.kt similarity index 68% rename from android/app/src/main/kotlin/com/sealstudios/simpleaac/simple_aac/MainActivity.kt rename to android/app/src/main/kotlin/com/sealstudios/simple_aac/MainActivity.kt index c8a660b..480a987 100644 --- a/android/app/src/main/kotlin/com/sealstudios/simpleaac/simple_aac/MainActivity.kt +++ b/android/app/src/main/kotlin/com/sealstudios/simple_aac/MainActivity.kt @@ -1,4 +1,4 @@ -package com.sealstudios.simpleaac.simple_aac +package com.sealstudios.simple_aac import io.flutter.embedding.android.FlutterActivity diff --git a/android/app/src/main/res/drawable-hdpi/splash.png b/android/app/src/main/res/drawable-hdpi/splash.png index 6de3953..b5d38e5 100644 Binary files a/android/app/src/main/res/drawable-hdpi/splash.png and b/android/app/src/main/res/drawable-hdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-mdpi/splash.png b/android/app/src/main/res/drawable-mdpi/splash.png index ad5c16a..d83322f 100644 Binary files a/android/app/src/main/res/drawable-mdpi/splash.png and b/android/app/src/main/res/drawable-mdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-v21/background.png b/android/app/src/main/res/drawable-v21/background.png index e29b3b5..8e21404 100644 Binary files a/android/app/src/main/res/drawable-v21/background.png and b/android/app/src/main/res/drawable-v21/background.png differ diff --git a/android/app/src/main/res/drawable-v21/launch_background.xml b/android/app/src/main/res/drawable-v21/launch_background.xml index 3fe6b2e..3cc4948 100644 --- a/android/app/src/main/res/drawable-v21/launch_background.xml +++ b/android/app/src/main/res/drawable-v21/launch_background.xml @@ -6,4 +6,4 @@ - \ No newline at end of file + diff --git a/android/app/src/main/res/drawable-xhdpi/splash.png b/android/app/src/main/res/drawable-xhdpi/splash.png index 5f279bb..92b2b35 100644 Binary files a/android/app/src/main/res/drawable-xhdpi/splash.png and b/android/app/src/main/res/drawable-xhdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-xxhdpi/splash.png b/android/app/src/main/res/drawable-xxhdpi/splash.png index 3fafe2b..27428f4 100644 Binary files a/android/app/src/main/res/drawable-xxhdpi/splash.png and b/android/app/src/main/res/drawable-xxhdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-xxxhdpi/splash.png b/android/app/src/main/res/drawable-xxxhdpi/splash.png index 08bc5fd..a199491 100644 Binary files a/android/app/src/main/res/drawable-xxxhdpi/splash.png and b/android/app/src/main/res/drawable-xxxhdpi/splash.png differ diff --git a/android/app/src/main/res/drawable/background.png b/android/app/src/main/res/drawable/background.png index e29b3b5..8e21404 100644 Binary files a/android/app/src/main/res/drawable/background.png and b/android/app/src/main/res/drawable/background.png differ diff --git a/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml index 3fe6b2e..3cc4948 100644 --- a/android/app/src/main/res/drawable/launch_background.xml +++ b/android/app/src/main/res/drawable/launch_background.xml @@ -6,4 +6,4 @@ - \ No newline at end of file + diff --git a/android/app/src/main/res/values-night-v31/styles.xml b/android/app/src/main/res/values-night-v31/styles.xml new file mode 100644 index 0000000..5fef228 --- /dev/null +++ b/android/app/src/main/res/values-night-v31/styles.xml @@ -0,0 +1,19 @@ + + + + + + + diff --git a/android/app/src/main/res/values-night/styles.xml b/android/app/src/main/res/values-night/styles.xml index 449a9f9..7b20e15 100644 --- a/android/app/src/main/res/values-night/styles.xml +++ b/android/app/src/main/res/values-night/styles.xml @@ -5,6 +5,10 @@ @drawable/launch_background + false + false + false + shortEdges + + + + diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml index c8a5e60..f86ecf4 100644 --- a/android/app/src/main/res/values/styles.xml +++ b/android/app/src/main/res/values/styles.xml @@ -5,7 +5,10 @@ @drawable/launch_background + false false + false + shortEdges diff --git a/android/app/src/uat/google-services.json b/android/app/src/uat/google-services.json index ab88f3c..944c1b2 100644 --- a/android/app/src/uat/google-services.json +++ b/android/app/src/uat/google-services.json @@ -8,12 +8,72 @@ "client": [ { "client_info": { - "mobilesdk_app_id": "1:997985384352:android:747f808f59bc2f61e956c5", + "mobilesdk_app_id": "1:997985384352:android:f8276f74d6d710cae956c5", "android_client_info": { - "package_name": "com.sealstudios.simpleaac.dev" + "package_name": "com.sealstudios.simple_aac" } }, "oauth_client": [ + { + "client_id": "997985384352-ak53r6arua833dvji3t8sbn8opp6vq2n.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.sealstudios.simple_aac", + "certificate_hash": "11b18e27d28dc55ac58ba2cc6dbac796457a8a26" + } + }, + { + "client_id": "997985384352-ok3i8fgqnja4glpf9huaukgku55kr4s5.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.sealstudios.simple_aac", + "certificate_hash": "f56c13e30f5a60ed34a302698f5916b86e2fdfc8" + } + }, + { + "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDmCr6eOqqXt41McT1I3g447yybMNCRSOM" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "997985384352-1rpmqc97asd8gogs8flt3uo997s99mkb.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.sealstudios.simpleaac.uat" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:997985384352:android:7e3c2549044f4cb7e956c5", + "android_client_info": { + "package_name": "com.sealstudios.simple_aac.dev" + } + }, + "oauth_client": [ + { + "client_id": "997985384352-c73tlap0othqh17oq7v3vqm4fpv0d6l6.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.sealstudios.simple_aac.dev", + "certificate_hash": "11b18e27d28dc55ac58ba2cc6dbac796457a8a26" + } + }, { "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", "client_type": 3 @@ -30,6 +90,13 @@ { "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", "client_type": 3 + }, + { + "client_id": "997985384352-1rpmqc97asd8gogs8flt3uo997s99mkb.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.sealstudios.simpleaac.uat" + } } ] } @@ -37,12 +104,20 @@ }, { "client_info": { - "mobilesdk_app_id": "1:997985384352:android:d3f54281f1f161d5e956c5", + "mobilesdk_app_id": "1:997985384352:android:3e6cb26322d31457e956c5", "android_client_info": { - "package_name": "com.sealstudios.simpleaac.uat" + "package_name": "com.sealstudios.simple_aac.uat" } }, "oauth_client": [ + { + "client_id": "997985384352-rju5gidl440q3v26vdinj1v9vg4s9on7.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.sealstudios.simple_aac.uat", + "certificate_hash": "11b18e27d28dc55ac58ba2cc6dbac796457a8a26" + } + }, { "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", "client_type": 3 @@ -59,6 +134,13 @@ { "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", "client_type": 3 + }, + { + "client_id": "997985384352-1rpmqc97asd8gogs8flt3uo997s99mkb.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.sealstudios.simpleaac.uat" + } } ] } diff --git a/android/app/src/uat/res/drawable-hdpi/ic_launcher_foreground.png b/android/app/src/uat/res/drawable-hdpi/ic_launcher_foreground.png index 427c69a..33d43c7 100644 Binary files a/android/app/src/uat/res/drawable-hdpi/ic_launcher_foreground.png and b/android/app/src/uat/res/drawable-hdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/uat/res/drawable-mdpi/ic_launcher_foreground.png b/android/app/src/uat/res/drawable-mdpi/ic_launcher_foreground.png index 00788c8..67c7887 100644 Binary files a/android/app/src/uat/res/drawable-mdpi/ic_launcher_foreground.png and b/android/app/src/uat/res/drawable-mdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/uat/res/drawable-xhdpi/ic_launcher_foreground.png b/android/app/src/uat/res/drawable-xhdpi/ic_launcher_foreground.png index 1803727..b84aaa3 100644 Binary files a/android/app/src/uat/res/drawable-xhdpi/ic_launcher_foreground.png and b/android/app/src/uat/res/drawable-xhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/uat/res/drawable-xxhdpi/ic_launcher_foreground.png b/android/app/src/uat/res/drawable-xxhdpi/ic_launcher_foreground.png index 49529ee..b39b362 100644 Binary files a/android/app/src/uat/res/drawable-xxhdpi/ic_launcher_foreground.png and b/android/app/src/uat/res/drawable-xxhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/uat/res/drawable-xxxhdpi/ic_launcher_foreground.png b/android/app/src/uat/res/drawable-xxxhdpi/ic_launcher_foreground.png index 2f8dae2..76d070e 100644 Binary files a/android/app/src/uat/res/drawable-xxxhdpi/ic_launcher_foreground.png and b/android/app/src/uat/res/drawable-xxxhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/uat/res/mipmap-anydpi-v26/ic_launcher.xml b/android/app/src/uat/res/mipmap-anydpi-v26/ic_launcher.xml index 5f349f7..c0c204f 100644 --- a/android/app/src/uat/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/android/app/src/uat/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,5 +1,9 @@ - + + + diff --git a/android/app/src/uat/res/mipmap-hdpi/ic_launcher.png b/android/app/src/uat/res/mipmap-hdpi/ic_launcher.png index db77bb4..f7a05b1 100644 Binary files a/android/app/src/uat/res/mipmap-hdpi/ic_launcher.png and b/android/app/src/uat/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/app/src/uat/res/mipmap-mdpi/ic_launcher.png b/android/app/src/uat/res/mipmap-mdpi/ic_launcher.png index 17987b7..a7de73f 100644 Binary files a/android/app/src/uat/res/mipmap-mdpi/ic_launcher.png and b/android/app/src/uat/res/mipmap-mdpi/ic_launcher.png differ diff --git a/android/app/src/uat/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/uat/res/mipmap-xhdpi/ic_launcher.png index 09d4391..05dc9d9 100644 Binary files a/android/app/src/uat/res/mipmap-xhdpi/ic_launcher.png and b/android/app/src/uat/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/android/app/src/uat/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/uat/res/mipmap-xxhdpi/ic_launcher.png index d5f1c8d..8316322 100644 Binary files a/android/app/src/uat/res/mipmap-xxhdpi/ic_launcher.png and b/android/app/src/uat/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/app/src/uat/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/uat/res/mipmap-xxxhdpi/ic_launcher.png index 4d6372e..b5d38e5 100644 Binary files a/android/app/src/uat/res/mipmap-xxxhdpi/ic_launcher.png and b/android/app/src/uat/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/android/build.gradle b/android/build.gradle index 8a319f5..b42eb3a 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,24 +1,7 @@ -buildscript { - ext.kotlin_version = '1.8.0' - repositories { - google() - mavenCentral() - jcenter() - } - - dependencies { - classpath 'com.android.tools.build:gradle:4.1.0' - classpath 'com.google.gms:google-services:4.3.10' - classpath 'com.google.firebase:firebase-crashlytics-gradle:2.5.1' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - allprojects { repositories { google() mavenCentral() - jcenter() } } @@ -28,6 +11,6 @@ subprojects { project.evaluationDependsOn(':app') } -task clean(type: Delete) { +tasks.register("clean", Delete) { delete rootProject.buildDir } diff --git a/android/build/reports/problems/problems-report.html b/android/build/reports/problems/problems-report.html new file mode 100644 index 0000000..ea699e5 --- /dev/null +++ b/android/build/reports/problems/problems-report.html @@ -0,0 +1,663 @@ + + + + + + + + + + + + + Gradle Configuration Cache + + + +
+ +
+ Loading... +
+ + + + + + diff --git a/android/gradle.properties b/android/gradle.properties index 94adc3a..91b4bfb 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,3 +1,9 @@ -org.gradle.jvmargs=-Xmx1536M +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=512m +org.gradle.parallel=true +org.gradle.daemon=true android.useAndroidX=true -android.enableJetifier=true +android.enableJetifier=false +# This builtInKotlin flag was added automatically by Flutter migrator +android.builtInKotlin=false +# This newDsl flag was added automatically by Flutter migrator +android.newDsl=false diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 98f029c..6514f91 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ -#Fri Jun 23 08:50:38 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-all.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-all.zip diff --git a/android/keystore.properties b/android/keystore.properties new file mode 100644 index 0000000..843ed52 --- /dev/null +++ b/android/keystore.properties @@ -0,0 +1,4 @@ +storePassword=360Flip360 +keyPassword=360Flip360 +keyAlias=simpleaackey +storeFile=../SimpleAACKeyStore diff --git a/android/settings.gradle b/android/settings.gradle index 44e62bc..9cb9c36 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,11 +1,27 @@ -include ':app' +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + }() -def localPropertiesFile = new File(rootProject.projectDir, "local.properties") -def properties = new Properties() + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") -assert localPropertiesFile.exists() -localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} -def flutterSdkPath = properties.getProperty("flutter.sdk") -assert flutterSdkPath != null, "flutter.sdk not set in local.properties" -apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "8.12.1" apply false + id "com.google.gms.google-services" version "4.4.3" apply false + id "com.google.firebase.crashlytics" version "3.0.3" apply false + id "org.jetbrains.kotlin.android" version "2.2.20" apply false +} + +include ":app" diff --git a/assets/images/simple_aac.png b/assets/images/simple_aac.png index dc6eca6..0bcab28 100644 Binary files a/assets/images/simple_aac.png and b/assets/images/simple_aac.png differ diff --git a/assets/images/simple_aac_launcher_foreground.png b/assets/images/simple_aac_launcher_foreground.png index 061cf2c..4cc09f4 100644 Binary files a/assets/images/simple_aac_launcher_foreground.png and b/assets/images/simple_aac_launcher_foreground.png differ diff --git a/assets/images/simple_aac_new_alignment.png b/assets/images/simple_aac_new_alignment.png new file mode 100644 index 0000000..c2f4871 Binary files /dev/null and b/assets/images/simple_aac_new_alignment.png differ diff --git a/assets/images/simplebanner.png b/assets/images/simplebanner.png index 3aa2c86..3b49165 100644 Binary files a/assets/images/simplebanner.png and b/assets/images/simplebanner.png differ diff --git a/assets/json/initial_word_data.json b/assets/json/initial_word_data.json index f1c4551..3ab72f2 100644 --- a/assets/json/initial_word_data.json +++ b/assets/json/initial_word_data.json @@ -1,2270 +1,6720 @@ { - "languages" : [ + "languages": [ { - "id": "l1", - "displayName" : "Simple English", + "id": "en", + "displayName": "English", "words": [ { - "wordId": "w1", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "the", - "imageList": ["https://picsum.photos/200/300","https://image-url-the"], - "sound": "thē", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w4", "w5", "w14", "w19", "w33"] - }, - { - "wordId": "w2", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "of", - "imageList": ["https://picsum.photos/200/300","https://image-url-of"], - "sound": "əv", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w7", "w15", "w22", "w41"] - }, - { - "wordId": "w3", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "and", - "imageList": ["https://picsum.photos/200/300","https://image-url-and"], - "sound": "ənd", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w8", "w9", "w12", "w23", "w35"] - }, - { - "wordId": "w4", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", + "wordId": "grammar-pronouns-i", + "text": "I", + "phoneticOverride": null, + "type": "grammar", "subType": "pronouns", - "word": "I", - "imageList": ["https://picsum.photos/200/300","https://image-url-I"], - "sound": "ī", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w10", "w15", "w18", "w40"] - }, - { - "wordId": "w5", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "actions-action-want", + "actions-action-go", + "actions-action-see" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "i.png" + }, + { + "wordId": "grammar-pronouns-you", + "text": "you", + "phoneticOverride": null, + "type": "grammar", "subType": "pronouns", - "word": "you", - "imageList": ["https://picsum.photos/200/300","https://image-url-you"], - "sound": "yo͞o", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w11", "w17", "w24", "w49"] - }, - { - "wordId": "w6", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "actions-action-want", + "actions-action-go", + "actions-action-help" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "you.png" + }, + { + "wordId": "grammar-pronouns-he", + "text": "he", + "phoneticOverride": null, + "type": "grammar", "subType": "pronouns", - "word": "he", - "imageList": ["https://picsum.photos/200/300","https://image-url-he"], - "sound": "hē", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w14", "w16", "w20", "w42"] - }, - { - "wordId": "w7", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "actions-helping-is", + "actions-action-go", + "actions-action-play" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "he.png" + }, + { + "wordId": "grammar-pronouns-she", + "text": "she", + "phoneticOverride": null, + "type": "grammar", "subType": "pronouns", - "word": "she", - "imageList": ["https://picsum.photos/200/300","https://image-url-she"], - "sound": "shē", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w13", "w16", "w21", "w45"] - }, - { - "wordId": "w8", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "it", - "imageList": ["https://picsum.photos/200/300","https://image-url-it"], - "sound": "it", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w10", "w19", "w25", "w48"] - }, - { - "wordId": "w9", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "actions-helping-is", + "actions-action-go", + "actions-action-play" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "she.png" + }, + { + "wordId": "grammar-pronouns-it", + "text": "it", + "phoneticOverride": null, + "type": "grammar", "subType": "pronouns", - "word": "we", - "imageList": ["https://picsum.photos/200/300","https://image-url-we"], - "sound": "wē", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w11", "w14", "w28", "w44"] - }, - { - "wordId": "w10", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "actions-helping-is", + "describe-adjectives-good", + "describe-adjectives-broken" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "it.png" + }, + { + "wordId": "grammar-pronouns-we", + "text": "we", + "phoneticOverride": null, + "type": "grammar", "subType": "pronouns", - "word": "they", - "imageList": ["https://picsum.photos/200/300","https://image-url-they"], - "sound": "THā", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w4", "w8", "w9", "w20", "w47"] - }, - { - "wordId": "w11", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "is", - "imageList": ["https://picsum.photos/200/300","https://image-url-is"], - "sound": "iz", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w5", "w9", "w17", "w26", "w43"] - }, - { - "wordId": "w12", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "are", - "imageList": ["https://picsum.photos/200/300","https://image-url-are"], - "sound": "är", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w17", "w18", "w27", "w46"] - }, - { - "wordId": "w13", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "was", - "imageList": ["https://picsum.photos/200/300","https://image-url-was"], - "sound": "wäz", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w7", "w16", "w21", "w29", "w50"] - }, - { - "wordId": "w14", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "verbs", - "subType": "abverb", - "word": "were", - "imageList": ["https://picsum.photos/200/300","https://image-url-were"], - "sound": "wər", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w6", "w9", "w22", "w39"] - }, - { - "wordId": "w15", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "am", - "imageList": ["https://picsum.photos/200/300","https://image-url-am"], - "sound": "am", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w4", "w19", "w30", "w38"] - }, - { - "wordId": "w16", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "have", - "imageList": ["https://picsum.photos/200/300","https://image-url-have"], - "sound": "hav", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w13", "w14", "w31", "w36"] - }, - { - "wordId": "w17", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "has", - "imageList": ["https://picsum.photos/200/300","https://image-url-has"], - "sound": "haz", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w5", "w11", "w32", "w37"] - }, - { - "wordId": "w18", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "had", - "imageList": ["https://picsum.photos/200/300","https://image-url-had"], - "sound": "had", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w4", "w12", "w15", "w33", "w34"] - }, - { - "wordId": "w19", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "that", - "imageList": ["https://picsum.photos/200/300","https://image-url-that"], - "sound": "THat", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w14", "w18", "w40", "w49"] - }, - { - "wordId": "w20", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "with", - "imageList": ["https://picsum.photos/200/300","https://image-url-with"], - "sound": "wiTH", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w10", "w14", "w42", "w48"] - }, - { - "wordId": "w21", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "be", - "imageList": ["https://picsum.photos/200/300","https://image-url-be"], - "sound": "bē", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w13", "w16", "w43", "w50"] - }, - { - "wordId": "w22", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "do", - "imageList": ["https://picsum.photos/200/300","https://image-url-do"], - "sound": "do͞o", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w14", "w39", "w44", "w49"] - }, - { - "wordId": "w23", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "at", - "imageList": ["https://picsum.photos/200/300","https://image-url-at"], - "sound": "at", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w12", "w15", "w29", "w41"] - }, - { - "wordId": "w24", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "this", - "imageList": ["https://picsum.photos/200/300","https://image-url-this"], - "sound": "THis", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w10", "w15", "w35", "w46"] - }, - { - "wordId": "w25", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "not", - "imageList": ["https://picsum.photos/200/300","https://image-url-not"], - "sound": "nat", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w8", "w10", "w30", "w38"] - }, - { - "wordId": "w26", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "actions-action-want", + "actions-action-go", + "social-greetings-hello" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "we.png" + }, + { + "wordId": "grammar-pronouns-they", + "text": "they", + "phoneticOverride": null, + "type": "grammar", "subType": "pronouns", - "word": "we're", - "imageList": ["https://picsum.photos/200/300","https://image-url-we're"], - "sound": "wēr", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w11", "w19", "w27", "w32"] - }, - { - "wordId": "w27", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "will", - "imageList": ["https://picsum.photos/200/300","https://image-url-will"], - "sound": "wil", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w5", "w12", "w19", "w23", "w30"] - }, - { - "wordId": "w28", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "do͞on't", - "imageList": ["https://picsum.photos/200/300","https://image-url-do͞on't"], - "sound": "do͞on't", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w15", "w21", "w33", "w47"] - }, - { - "wordId": "w29", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "me", - "imageList": ["https://picsum.photos/200/300","https://image-url-me"], - "sound": "mē", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w4", "w9", "w23", "w33"] - }, - { - "wordId": "w30", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "my", - "imageList": ["https://picsum.photos/200/300","https://image-url-my"], - "sound": "mī", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w7", "w15", "w25", "w28", "w37"] - }, - { - "wordId": "w31", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "you", - "imageList": ["https://picsum.photos/200/300","https://image-url-you"], - "sound": "yo͞o", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w10", "w14", "w26", "w48"] - }, - { - "wordId": "w32", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "he", - "imageList": ["https://picsum.photos/200/300","https://image-url-he"], - "sound": "hē", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w11", "w14", "w21", "w27"] - }, - { - "wordId": "w33", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "it", - "imageList": ["https://picsum.photos/200/300","https://image-url-it"], - "sound": "it", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w12", "w18", "w29", "w47"] - }, - { - "wordId": "w34", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "we", - "imageList": ["https://picsum.photos/200/300","https://image-url-we"], - "sound": "wē", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w11", "w16", "w26", "w32"] - }, - { - "wordId": "w35", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "they", - "imageList": ["https://picsum.photos/200/300","https://image-url-they"], - "sound": "THā", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w11", "w19", "w34", "w37"] - }, - { - "wordId": "w36", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "them", - "imageList": ["https://picsum.photos/200/300","https://image-url-them"], - "sound": "THem", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w14", "w16", "w26", "w35"] - }, - { - "wordId": "w37", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "actions-helping-are", + "actions-action-go" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "they.png" + }, + { + "wordId": "grammar-pronouns-me", + "text": "me", + "phoneticOverride": null, + "type": "grammar", "subType": "pronouns", - "word": "she", - "imageList": ["https://picsum.photos/200/300","https://image-url-she"], - "sound": "SHē", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w11", "w16", "w32", "w35"] - }, - { - "wordId": "w38", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "actions-action-give", + "actions-strong-help" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "me.png" + }, + { + "wordId": "grammar-pronouns-him", + "text": "him", + "phoneticOverride": null, + "type": "grammar", "subType": "pronouns", - "word": "her", - "imageList": ["https://picsum.photos/200/300","https://image-url-her"], - "sound": "hər", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w14", "w16", "w24", "w36"] - }, - { - "wordId": "w39", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "actions-action-give", + "actions-action-tell" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "him.png" + }, + { + "wordId": "grammar-pronouns-her", + "text": "her", + "phoneticOverride": null, + "type": "grammar", "subType": "pronouns", - "word": "him", - "imageList": ["https://picsum.photos/200/300","https://image-url-him"], - "sound": "him", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w14", "w19", "w29", "w34"] - }, - { - "wordId": "w40", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "actions-action-give", + "actions-action-tell" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "her.png" + }, + { + "wordId": "grammar-pronouns-this", + "text": "this", + "phoneticOverride": null, + "type": "grammar", "subType": "pronouns", - "word": "us", - "imageList": ["https://picsum.photos/200/300","https://image-url-us"], - "sound": "əs", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w16", "w29", "w34", "w37"] - }, - { - "wordId": "w41", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "actions-helping-is", + "describe-adjectives-good" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "this.png" + }, + { + "wordId": "grammar-pronouns-that", + "text": "that", + "phoneticOverride": null, + "type": "grammar", "subType": "pronouns", - "word": "that", - "imageList": ["https://picsum.photos/200/300","https://image-url-that"], - "sound": "THat", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w12", "w15", "w23", "w35"] - }, - { - "wordId": "w42", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "actions-helping-is", + "describe-adjectives-bad" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "that.png" + }, + { + "wordId": "grammar-pronouns-my", + "text": "my", + "phoneticOverride": null, + "type": "grammar", "subType": "pronouns", - "word": "this", - "imageList": ["https://picsum.photos/200/300","https://image-url-this"], - "sound": "THis", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w4", "w12", "w15", "w23", "w33"] - }, - { - "wordId": "w43", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-house", + "things-people-family", + "things-body-head" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "my.png" + }, + { + "wordId": "grammar-pronouns-your", + "text": "your", + "phoneticOverride": null, + "type": "grammar", "subType": "pronouns", - "word": "these", - "imageList": ["https://picsum.photos/200/300","https://image-url-these"], - "sound": "THēz", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w4", "w19", "w28", "w41"] - }, - { - "wordId": "w44", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "those", - "imageList": ["https://picsum.photos/200/300","https://image-url-those"], - "sound": "THōz", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w15", "w19", "w28", "w41"] - }, - { - "wordId": "w45", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "one", - "imageList": ["https://picsum.photos/200/300","https://image-url-one"], - "sound": "wən", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w14", "w21", "w26", "w32"] - }, - { - "wordId": "w46", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "all", - "imageList": ["https://picsum.photos/200/300","https://image-url-all"], - "sound": "ôl", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w14", "w19", "w27", "w35"] - }, - { - "wordId": "w47", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "some", - "imageList": ["https://picsum.photos/200/300","https://image-url-some"], - "sound": "səm", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w16", "w19", "w24", "w34"] - }, - { - "wordId": "w48", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "few", - "imageList": ["https://picsum.photos/200/300","https://image-url-few"], - "sound": "fyo͞o", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w14", "w16", "w24", "w36"] - }, - { - "wordId": "w49", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "many", - "imageList": ["https://picsum.photos/200/300","https://image-url-many"], - "sound": "ˈmenē", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w14", "w16", "w24", "w36"] - }, - { - "wordId": "w50", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "more", - "imageList": ["https://picsum.photos/200/300","https://image-url-more"], - "sound": "môr", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w14", "w16", "w24", "w36"] - } - ] - }, - { - "id": "l2", - "displayName" : "Simple French", - "words": [ - { - "wordId": "w1", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "la", - "imageList": ["https://picsum.photos/200/300","https://image-url-the"], - "sound": "la", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w4", "w5", "w14", "w19", "w33"] - }, - { - "wordId": "w2", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "de", - "imageList": ["https://picsum.photos/200/300","https://image-url-of"], - "sound": "de", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w7", "w15", "w22", "w41"] - }, - { - "wordId": "w3", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "et", - "imageList": ["https://picsum.photos/200/300","https://image-url-and"], - "sound": "et", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w8", "w9", "w12", "w23", "w35"] - }, - { - "wordId": "w4", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "I", - "imageList": ["https://picsum.photos/200/300","https://image-url-I"], - "sound": "ī", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w10", "w15", "w18", "w40"] - }, - { - "wordId": "w5", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "toi", - "imageList": ["https://picsum.photos/200/300","https://image-url-you"], - "sound": "toi", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w11", "w17", "w24", "w49"] - }, - { - "wordId": "w6", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "il", - "imageList": ["https://picsum.photos/200/300","https://image-url-he"], - "sound": "il", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w14", "w16", "w20", "w42"] - }, - { - "wordId": "w7", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "elle", - "imageList": ["https://picsum.photos/200/300","https://image-url-she"], - "sound": "elle", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w13", "w16", "w21", "w45"] - }, - { - "wordId": "w8", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "it", - "imageList": ["https://picsum.photos/200/300","https://image-url-it"], - "sound": "it", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w10", "w19", "w25", "w48"] - }, - { - "wordId": "w9", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "we", - "imageList": ["https://picsum.photos/200/300","https://image-url-we"], - "sound": "wē", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w11", "w14", "w28", "w44"] - }, - { - "wordId": "w10", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "elles", - "imageList": ["https://picsum.photos/200/300","https://image-url-they"], - "sound": "elles", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w4", "w8", "w9", "w20", "w47"] - }, - { - "wordId": "w11", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "is", - "imageList": ["https://picsum.photos/200/300","https://image-url-is"], - "sound": "iz", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w5", "w9", "w17", "w26", "w43"] - }, - { - "wordId": "w12", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "are", - "imageList": ["https://picsum.photos/200/300","https://image-url-are"], - "sound": "är", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w17", "w18", "w27", "w46"] - }, - { - "wordId": "w13", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "was", - "imageList": ["https://picsum.photos/200/300","https://image-url-was"], - "sound": "wäz", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w7", "w16", "w21", "w29", "w50"] - }, - { - "wordId": "w14", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "verbs", - "subType": "abverb", - "word": "were", - "imageList": ["https://picsum.photos/200/300","https://image-url-were"], - "sound": "wər", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w6", "w9", "w22", "w39"] - }, - { - "wordId": "w15", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "am", - "imageList": ["https://picsum.photos/200/300","https://image-url-am"], - "sound": "am", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w4", "w19", "w30", "w38"] - }, - { - "wordId": "w16", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "have", - "imageList": ["https://picsum.photos/200/300","https://image-url-have"], - "sound": "hav", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w13", "w14", "w31", "w36"] - }, - { - "wordId": "w17", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-house", + "grammar-pronouns-your" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "your.png" + }, + { + "wordId": "grammar-conjunctions-and", + "text": "and", + "phoneticOverride": null, + "type": "grammar", "subType": "conjunctions", - "word": "has", - "imageList": ["https://picsum.photos/200/300","https://image-url-has"], - "sound": "haz", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w5", "w11", "w32", "w37"] - }, - { - "wordId": "w18", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "had", - "imageList": ["https://picsum.photos/200/300","https://image-url-had"], - "sound": "had", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w4", "w12", "w15", "w33", "w34"] - }, - { - "wordId": "w19", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "that", - "imageList": ["https://picsum.photos/200/300","https://image-url-that"], - "sound": "THat", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w14", "w18", "w40", "w49"] - }, - { - "wordId": "w20", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "with", - "imageList": ["https://picsum.photos/200/300","https://image-url-with"], - "sound": "wiTH", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w10", "w14", "w42", "w48"] - }, - { - "wordId": "w21", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "be", - "imageList": ["https://picsum.photos/200/300","https://image-url-be"], - "sound": "bē", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w13", "w16", "w43", "w50"] - }, - { - "wordId": "w22", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "do", - "imageList": ["https://picsum.photos/200/300","https://image-url-do"], - "sound": "do͞o", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w14", "w39", "w44", "w49"] - }, - { - "wordId": "w23", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "at", - "imageList": ["https://picsum.photos/200/300","https://image-url-at"], - "sound": "at", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w12", "w15", "w29", "w41"] - }, - { - "wordId": "w24", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "this", - "imageList": ["https://picsum.photos/200/300","https://image-url-this"], - "sound": "THis", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w10", "w15", "w35", "w46"] - }, - { - "wordId": "w25", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "not", - "imageList": ["https://picsum.photos/200/300","https://image-url-not"], - "sound": "nat", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w8", "w10", "w30", "w38"] - }, - { - "wordId": "w26", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "we're", - "imageList": ["https://picsum.photos/200/300","https://image-url-we're"], - "sound": "wēr", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w11", "w19", "w27", "w32"] - }, - { - "wordId": "w27", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "will", - "imageList": ["https://picsum.photos/200/300","https://image-url-will"], - "sound": "wil", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w5", "w12", "w19", "w23", "w30"] - }, - { - "wordId": "w28", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "do͞on't", - "imageList": ["https://picsum.photos/200/300","https://image-url-do͞on't"], - "sound": "do͞on't", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w15", "w21", "w33", "w47"] - }, - { - "wordId": "w29", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "me", - "imageList": ["https://picsum.photos/200/300","https://image-url-me"], - "sound": "mē", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w4", "w9", "w23", "w33"] - }, - { - "wordId": "w30", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "my", - "imageList": ["https://picsum.photos/200/300","https://image-url-my"], - "sound": "mī", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w7", "w15", "w25", "w28", "w37"] - }, - { - "wordId": "w31", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "you", - "imageList": ["https://picsum.photos/200/300","https://image-url-you"], - "sound": "yo͞o", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w10", "w14", "w26", "w48"] - }, - { - "wordId": "w32", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "he", - "imageList": ["https://picsum.photos/200/300","https://image-url-he"], - "sound": "hē", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w11", "w14", "w21", "w27"] - }, - { - "wordId": "w33", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "it", - "imageList": ["https://picsum.photos/200/300","https://image-url-it"], - "sound": "it", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w12", "w18", "w29", "w47"] - }, - { - "wordId": "w34", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "we", - "imageList": ["https://picsum.photos/200/300","https://image-url-we"], - "sound": "wē", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w11", "w16", "w26", "w32"] - }, - { - "wordId": "w35", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "they", - "imageList": ["https://picsum.photos/200/300","https://image-url-they"], - "sound": "THā", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w11", "w19", "w34", "w37"] - }, - { - "wordId": "w36", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "them", - "imageList": ["https://picsum.photos/200/300","https://image-url-them"], - "sound": "THem", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w14", "w16", "w26", "w35"] - }, - { - "wordId": "w37", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "she", - "imageList": ["https://picsum.photos/200/300","https://image-url-she"], - "sound": "SHē", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w11", "w16", "w32", "w35"] - }, - { - "wordId": "w38", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "her", - "imageList": ["https://picsum.photos/200/300","https://image-url-her"], - "sound": "hər", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w14", "w16", "w24", "w36"] - }, - { - "wordId": "w39", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "him", - "imageList": ["https://picsum.photos/200/300","https://image-url-him"], - "sound": "him", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w14", "w19", "w29", "w34"] - }, - { - "wordId": "w40", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "us", - "imageList": ["https://picsum.photos/200/300","https://image-url-us"], - "sound": "əs", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w16", "w29", "w34", "w37"] - }, - { - "wordId": "w41", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "that", - "imageList": ["https://picsum.photos/200/300","https://image-url-that"], - "sound": "THat", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w12", "w15", "w23", "w35"] - }, - { - "wordId": "w42", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "this", - "imageList": ["https://picsum.photos/200/300","https://image-url-this"], - "sound": "THis", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w4", "w12", "w15", "w23", "w33"] - }, - { - "wordId": "w43", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "these", - "imageList": ["https://picsum.photos/200/300","https://image-url-these"], - "sound": "THēz", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w4", "w19", "w28", "w41"] - }, - { - "wordId": "w44", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "those", - "imageList": ["https://picsum.photos/200/300","https://image-url-those"], - "sound": "THōz", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w15", "w19", "w28", "w41"] - }, - { - "wordId": "w45", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "one", - "imageList": ["https://picsum.photos/200/300","https://image-url-one"], - "sound": "wən", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w14", "w21", "w26", "w32"] - }, - { - "wordId": "w46", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "all", - "imageList": ["https://picsum.photos/200/300","https://image-url-all"], - "sound": "ôl", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w14", "w19", "w27", "w35"] - }, - { - "wordId": "w47", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "some", - "imageList": ["https://picsum.photos/200/300","https://image-url-some"], - "sound": "səm", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w16", "w19", "w24", "w34"] - }, - { - "wordId": "w48", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "few", - "imageList": ["https://picsum.photos/200/300","https://image-url-few"], - "sound": "fyo͞o", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w14", "w16", "w24", "w36"] - }, - { - "wordId": "w49", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "many", - "imageList": ["https://picsum.photos/200/300","https://image-url-many"], - "sound": "ˈmenē", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w14", "w16", "w24", "w36"] - }, - { - "wordId": "w50", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "more", - "imageList": ["https://picsum.photos/200/300","https://image-url-more"], - "sound": "môr", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w14", "w16", "w24", "w36"] - } - ] - }, - { - "id": "l3", - "displayName" : "Simple Spanish", - "words": [ + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "and.png" + }, { - "wordId": "w1", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "el", - "imageList": ["https://picsum.photos/200/300","https://image-url-the"], - "sound": "el", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w4", "w5", "w14", "w19", "w33"] - }, - { - "wordId": "w2", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "de", - "imageList": ["https://picsum.photos/200/300","https://image-url-of"], - "sound": "de", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w7", "w15", "w22", "w41"] - }, - { - "wordId": "w3", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "y", - "imageList": ["https://picsum.photos/200/300","https://image-url-and"], - "sound": "ənd", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w8", "w9", "w12", "w23", "w35"] - }, - { - "wordId": "w4", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "I", - "imageList": ["https://picsum.photos/200/300","https://image-url-I"], - "sound": "ī", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w10", "w15", "w18", "w40"] - }, - { - "wordId": "w5", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "tu", - "imageList": ["https://picsum.photos/200/300","https://image-url-you"], - "sound": "tu", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w11", "w17", "w24", "w49"] - }, - { - "wordId": "w6", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "el", - "imageList": ["https://picsum.photos/200/300","https://image-url-he"], - "sound": "el", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w14", "w16", "w20", "w42"] - }, - { - "wordId": "w7", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "ella", - "imageList": ["https://picsum.photos/200/300","https://image-url-she"], - "sound": "ella", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w13", "w16", "w21", "w45"] - }, - { - "wordId": "w8", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "el", - "imageList": ["https://picsum.photos/200/300","https://image-url-it"], - "sound": "el", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w10", "w19", "w25", "w48"] - }, - { - "wordId": "w9", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "nosotras", - "imageList": ["https://picsum.photos/200/300","https://image-url-we"], - "sound": "nosotras", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w11", "w14", "w28", "w44"] - }, - { - "wordId": "w10", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "ellas", - "imageList": ["https://picsum.photos/200/300","https://image-url-they"], - "sound": "ellas", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w4", "w8", "w9", "w20", "w47"] - }, - { - "wordId": "w11", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "is", - "imageList": ["https://picsum.photos/200/300","https://image-url-is"], - "sound": "iz", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w5", "w9", "w17", "w26", "w43"] - }, - { - "wordId": "w12", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "son", - "imageList": ["https://picsum.photos/200/300","https://image-url-are"], - "sound": "son", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w17", "w18", "w27", "w46"] - }, - { - "wordId": "w13", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "era", - "imageList": ["https://picsum.photos/200/300","https://image-url-was"], - "sound": "era", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w7", "w16", "w21", "w29", "w50"] - }, - { - "wordId": "w14", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "verbs", - "subType": "abverb", - "word": "eran", - "imageList": ["https://picsum.photos/200/300","https://image-url-were"], - "sound": "eran", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w6", "w9", "w22", "w39"] - }, - { - "wordId": "w15", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "am", - "imageList": ["https://picsum.photos/200/300","https://image-url-am"], - "sound": "am", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w4", "w19", "w30", "w38"] - }, - { - "wordId": "w16", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "tener", - "imageList": ["https://picsum.photos/200/300","https://image-url-have"], - "sound": "tener", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w13", "w14", "w31", "w36"] - }, - { - "wordId": "w17", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "has", - "imageList": ["https://picsum.photos/200/300","https://image-url-has"], - "sound": "haz", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w5", "w11", "w32", "w37"] - }, - { - "wordId": "w18", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", + "wordId": "grammar-conjunctions-but", + "text": "but", + "phoneticOverride": null, + "type": "grammar", "subType": "conjunctions", - "word": "had", - "imageList": ["https://picsum.photos/200/300","https://image-url-had"], - "sound": "had", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w4", "w12", "w15", "w33", "w34"] - }, - { - "wordId": "w19", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "that", - "imageList": ["https://picsum.photos/200/300","https://image-url-that"], - "sound": "THat", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w14", "w18", "w40", "w49"] - }, - { - "wordId": "w20", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "with", - "imageList": ["https://picsum.photos/200/300","https://image-url-with"], - "sound": "wiTH", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w10", "w14", "w42", "w48"] - }, - { - "wordId": "w21", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "be", - "imageList": ["https://picsum.photos/200/300","https://image-url-be"], - "sound": "bē", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w13", "w16", "w43", "w50"] - }, - { - "wordId": "w22", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "do", - "imageList": ["https://picsum.photos/200/300","https://image-url-do"], - "sound": "do͞o", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w14", "w39", "w44", "w49"] - }, - { - "wordId": "w23", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "conjunctions", - "word": "at", - "imageList": ["https://picsum.photos/200/300","https://image-url-at"], - "sound": "at", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w12", "w15", "w29", "w41"] - }, - { - "wordId": "w24", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "but.png" + }, + { + "wordId": "grammar-conjunctions-or", + "text": "or", + "phoneticOverride": null, + "type": "grammar", "subType": "conjunctions", - "word": "this", - "imageList": ["https://picsum.photos/200/300","https://image-url-this"], - "sound": "THis", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w10", "w15", "w35", "w46"] - }, - { - "wordId": "w25", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "or.png" + }, + { + "wordId": "grammar-conjunctions-because", + "text": "because", + "phoneticOverride": null, + "type": "grammar", "subType": "conjunctions", - "word": "not", - "imageList": ["https://picsum.photos/200/300","https://image-url-not"], - "sound": "nat", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w8", "w10", "w30", "w38"] - }, - { - "wordId": "w26", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "we're", - "imageList": ["https://picsum.photos/200/300","https://image-url-we're"], - "sound": "wēr", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w11", "w19", "w27", "w32"] - }, - { - "wordId": "w27", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "because.png" + }, + { + "wordId": "grammar-conjunctions-if", + "text": "if", + "phoneticOverride": null, + "type": "grammar", "subType": "conjunctions", - "word": "will", - "imageList": ["https://picsum.photos/200/300","https://image-url-will"], - "sound": "wil", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w5", "w12", "w19", "w23", "w30"] - }, - { - "wordId": "w28", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "if.png" + }, + { + "wordId": "grammar-conjunctions-so", + "text": "so", + "phoneticOverride": null, + "type": "grammar", "subType": "conjunctions", - "word": "do͞on't", - "imageList": ["https://picsum.photos/200/300","https://image-url-do͞on't"], - "sound": "do͞on't", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w15", "w21", "w33", "w47"] - }, - { - "wordId": "w29", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "me", - "imageList": ["https://picsum.photos/200/300","https://image-url-me"], - "sound": "mē", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w4", "w9", "w23", "w33"] - }, - { - "wordId": "w30", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "my", - "imageList": ["https://picsum.photos/200/300","https://image-url-my"], - "sound": "mī", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w7", "w15", "w25", "w28", "w37"] - }, - { - "wordId": "w31", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "you", - "imageList": ["https://picsum.photos/200/300","https://image-url-you"], - "sound": "yo͞o", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w10", "w14", "w26", "w48"] - }, - { - "wordId": "w32", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "he", - "imageList": ["https://picsum.photos/200/300","https://image-url-he"], - "sound": "hē", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w11", "w14", "w21", "w27"] - }, - { - "wordId": "w33", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "it", - "imageList": ["https://picsum.photos/200/300","https://image-url-it"], - "sound": "it", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w12", "w18", "w29", "w47"] - }, - { - "wordId": "w34", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "we", - "imageList": ["https://picsum.photos/200/300","https://image-url-we"], - "sound": "wē", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w11", "w16", "w26", "w32"] - }, - { - "wordId": "w35", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "they", - "imageList": ["https://picsum.photos/200/300","https://image-url-they"], - "sound": "THā", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w11", "w19", "w34", "w37"] - }, - { - "wordId": "w36", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "them", - "imageList": ["https://picsum.photos/200/300","https://image-url-them"], - "sound": "THem", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w14", "w16", "w26", "w35"] - }, - { - "wordId": "w37", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "she", - "imageList": ["https://picsum.photos/200/300","https://image-url-she"], - "sound": "SHē", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w11", "w16", "w32", "w35"] - }, - { - "wordId": "w38", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "her", - "imageList": ["https://picsum.photos/200/300","https://image-url-her"], - "sound": "hər", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w14", "w16", "w24", "w36"] - }, - { - "wordId": "w39", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "him", - "imageList": ["https://picsum.photos/200/300","https://image-url-him"], - "sound": "him", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w14", "w19", "w29", "w34"] - }, - { - "wordId": "w40", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "us", - "imageList": ["https://picsum.photos/200/300","https://image-url-us"], - "sound": "əs", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w16", "w29", "w34", "w37"] - }, - { - "wordId": "w41", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "that", - "imageList": ["https://picsum.photos/200/300","https://image-url-that"], - "sound": "THat", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w12", "w15", "w23", "w35"] - }, - { - "wordId": "w42", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "this", - "imageList": ["https://picsum.photos/200/300","https://image-url-this"], - "sound": "THis", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w4", "w12", "w15", "w23", "w33"] - }, - { - "wordId": "w43", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "these", - "imageList": ["https://picsum.photos/200/300","https://image-url-these"], - "sound": "THēz", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w4", "w19", "w28", "w41"] - }, - { - "wordId": "w44", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "those", - "imageList": ["https://picsum.photos/200/300","https://image-url-those"], - "sound": "THōz", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w1", "w15", "w19", "w28", "w41"] - }, - { - "wordId": "w45", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "one", - "imageList": ["https://picsum.photos/200/300","https://image-url-one"], - "sound": "wən", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w14", "w21", "w26", "w32"] - }, - { - "wordId": "w46", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "all", - "imageList": ["https://picsum.photos/200/300","https://image-url-all"], - "sound": "ôl", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w2", "w14", "w19", "w27", "w35"] - }, - { - "wordId": "w47", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "some", - "imageList": ["https://picsum.photos/200/300","https://image-url-some"], - "sound": "səm", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w3", "w16", "w19", "w24", "w34"] - }, - { - "wordId": "w48", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "few", - "imageList": ["https://picsum.photos/200/300","https://image-url-few"], - "sound": "fyo͞o", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w14", "w16", "w24", "w36"] - }, - { - "wordId": "w49", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "many", - "imageList": ["https://picsum.photos/200/300","https://image-url-many"], - "sound": "ˈmenē", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w14", "w16", "w24", "w36"] - }, - { - "wordId": "w50", - "createdDate": "2023-06-11T00:00:00.000Z", - "type": "quicks", - "subType": "pronouns", - "word": "more", - "imageList": ["https://picsum.photos/200/300","https://image-url-more"], - "sound": "môr", - "isFavourite": false, - "usageCount": 0, - "keyStage": 1, - "isUserAdded": false, - "isBackedUp": false, - "extraRelatedWordIds": ["w6", "w14", "w16", "w24", "w36"] + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "so.png" + }, + { + "wordId": "grammar-prepositions-in", + "text": "in", + "phoneticOverride": null, + "type": "grammar", + "subType": "prepositions", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-house", + "things-home-closet" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "in.png" + }, + { + "wordId": "grammar-prepositions-on", + "text": "on", + "phoneticOverride": null, + "type": "grammar", + "subType": "prepositions", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-table", + "things-home-chair" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "on.png" + }, + { + "wordId": "grammar-prepositions-under", + "text": "under", + "phoneticOverride": null, + "type": "grammar", + "subType": "prepositions", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-table", + "things-home-bed" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "under.png" + }, + { + "wordId": "grammar-prepositions-up", + "text": "up", + "phoneticOverride": null, + "type": "grammar", + "subType": "prepositions", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "actions-action-go", + "actions-action-look" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "up.png" + }, + { + "wordId": "grammar-prepositions-down", + "text": "down", + "phoneticOverride": null, + "type": "grammar", + "subType": "prepositions", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "actions-action-sit", + "actions-action-fall" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "down.png" + }, + { + "wordId": "grammar-prepositions-with", + "text": "with", + "phoneticOverride": null, + "type": "grammar", + "subType": "prepositions", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "grammar-pronouns-me", + "grammar-pronouns-you" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "with.png" + }, + { + "wordId": "grammar-prepositions-to", + "text": "to", + "phoneticOverride": null, + "type": "grammar", + "subType": "prepositions", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-places-school", + "things-places-park" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "to.png" + }, + { + "wordId": "grammar-prepositions-from", + "text": "from", + "phoneticOverride": null, + "type": "grammar", + "subType": "prepositions", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-places-home" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "from.png" + }, + { + "wordId": "grammar-prepositions-out", + "text": "out", + "phoneticOverride": null, + "type": "grammar", + "subType": "prepositions", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "actions-action-go" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "out.png" + }, + { + "wordId": "grammar-prepositions-off", + "text": "off", + "phoneticOverride": null, + "type": "grammar", + "subType": "prepositions", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-light", + "things-home-tv" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "off.png" + }, + { + "wordId": "grammar-prepositions-for", + "text": "for", + "phoneticOverride": null, + "type": "grammar", + "subType": "prepositions", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "grammar-pronouns-you", + "grammar-pronouns-me" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "for.png" + }, + { + "wordId": "grammar-prepositions-about", + "text": "about", + "phoneticOverride": null, + "type": "grammar", + "subType": "prepositions", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "about.png" + }, + { + "wordId": "grammar-prepositions-next-to", + "text": "next to", + "phoneticOverride": null, + "type": "grammar", + "subType": "prepositions", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "next-to.png" + }, + { + "wordId": "grammar-prepositions-behind", + "text": "behind", + "phoneticOverride": null, + "type": "grammar", + "subType": "prepositions", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "behind.png" + }, + { + "wordId": "grammar-suffix-ing", + "text": "ing", + "phoneticOverride": null, + "type": "grammar", + "subType": "suffix", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "ing.png" + }, + { + "wordId": "grammar-suffix-ed", + "text": "ed", + "phoneticOverride": null, + "type": "grammar", + "subType": "suffix", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "ed.png" + }, + { + "wordId": "grammar-suffix-s", + "text": "s", + "phoneticOverride": null, + "type": "grammar", + "subType": "suffix", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "s.png" + }, + { + "wordId": "grammar-suffix-er", + "text": "er", + "phoneticOverride": null, + "type": "grammar", + "subType": "suffix", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "er.png" + }, + { + "wordId": "actions-action-eat", + "text": "eat", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-food-apple", + "things-food-banana", + "things-food-cookie", + "things-drink-water" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "eat.png" + }, + { + "wordId": "actions-action-drink", + "text": "drink", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-drink-water", + "things-drink-milk", + "things-drink-juice" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "drink.png" + }, + { + "wordId": "actions-action-go", + "text": "go", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-places-home", + "things-places-park", + "things-places-school" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "go.png" + }, + { + "wordId": "actions-action-want", + "text": "want", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-games-toy", + "things-food-snack", + "things-drink-water" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "want.png" + }, + { + "wordId": "actions-action-see", + "text": "see", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-animals-dog", + "things-animals-bird", + "things-home-tv" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "see.png" + }, + { + "wordId": "actions-action-look", + "text": "look", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-art-picture" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "look.png" + }, + { + "wordId": "actions-action-play", + "text": "play", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-games-game", + "things-games-toy", + "things-games-ball" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "play.png" + }, + { + "wordId": "actions-action-sleep", + "text": "sleep", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-bed", + "describe-adjectives-tired" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "sleep.png" + }, + { + "wordId": "actions-action-stop", + "text": "stop", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "actions-action-go", + "actions-action-play" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "stop.png" + }, + { + "wordId": "actions-action-come", + "text": "come", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "grammar-prepositions-in" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "come.png" + }, + { + "wordId": "actions-action-make", + "text": "make", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-art-picture", + "things-food-snack" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "make.png" + }, + { + "wordId": "actions-action-take", + "text": "take", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-games-toy" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "take.png" + }, + { + "wordId": "actions-action-open", + "text": "open", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-door", + "things-home-window" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "open.png" + }, + { + "wordId": "actions-action-close", + "text": "close", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-door", + "things-home-window" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "close.png" + }, + { + "wordId": "actions-action-sit", + "text": "sit", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-chair", + "grammar-prepositions-down" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "sit.png" + }, + { + "wordId": "actions-action-stand", + "text": "stand", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "grammar-prepositions-up" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "stand.png" + }, + { + "wordId": "actions-action-walk", + "text": "walk", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-places-park" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "walk.png" + }, + { + "wordId": "actions-action-run", + "text": "run", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-places-park" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "run.png" + }, + { + "wordId": "actions-action-jump", + "text": "jump", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-bed" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "jump.png" + }, + { + "wordId": "actions-action-wash", + "text": "wash", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-body-hand", + "things-body-face" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "wash.png" + }, + { + "wordId": "actions-action-clean", + "text": "clean", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-room" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "clean.png" + }, + { + "wordId": "actions-action-read", + "text": "read", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-book" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "read.png" + }, + { + "wordId": "actions-action-write", + "text": "write", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-paper" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "write.png" + }, + { + "wordId": "actions-action-draw", + "text": "draw", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-art-picture" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "draw.png" + }, + { + "wordId": "actions-action-paint", + "text": "paint", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-art-painting" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "paint.png" + }, + { + "wordId": "actions-action-sing", + "text": "sing", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-music-song" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "sing.png" + }, + { + "wordId": "actions-action-dance", + "text": "dance", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-music-music" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "dance.png" + }, + { + "wordId": "actions-action-swim", + "text": "swim", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-places-pool", + "things-places-beach" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "swim.png" + }, + { + "wordId": "actions-action-ride", + "text": "ride", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-travel-bike", + "things-travel-car", + "things-travel-bus" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "ride.png" + }, + { + "wordId": "actions-action-drive", + "text": "drive", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-travel-car" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "drive.png" + }, + { + "wordId": "actions-action-fly", + "text": "fly", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-travel-plane", + "things-animals-bird" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "fly.png" + }, + { + "wordId": "actions-action-climb", + "text": "climb", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-nature-tree" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "climb.png" + }, + { + "wordId": "actions-action-push", + "text": "push", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-door" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "push.png" + }, + { + "wordId": "actions-action-pull", + "text": "pull", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-door" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "pull.png" + }, + { + "wordId": "actions-action-throw", + "text": "throw", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-games-ball" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "throw.png" + }, + { + "wordId": "actions-action-catch", + "text": "catch", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-games-ball" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "catch.png" + }, + { + "wordId": "actions-action-kick", + "text": "kick", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-games-ball" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "kick.png" + }, + { + "wordId": "actions-action-cook", + "text": "cook", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-kitchen", + "things-food-snack" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "cook.png" + }, + { + "wordId": "actions-action-bake", + "text": "bake", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-food-cake", + "things-food-cookie" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "bake.png" + }, + { + "wordId": "actions-action-cut", + "text": "cut", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-paper", + "things-food-snack" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "cut.png" + }, + { + "wordId": "actions-action-glue", + "text": "glue", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-paper" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "glue.png" + }, + { + "wordId": "actions-action-listen", + "text": "listen", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-music-music" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "listen.png" + }, + { + "wordId": "actions-action-talk", + "text": "talk", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "grammar-pronouns-you", + "things-people-friend" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "talk.png" + }, + { + "wordId": "actions-action-say", + "text": "say", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "say.png" + }, + { + "wordId": "actions-action-tell", + "text": "tell", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "tell.png" + }, + { + "wordId": "actions-action-ask", + "text": "ask", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "ask.png" + }, + { + "wordId": "actions-action-share", + "text": "share", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-games-toy", + "things-food-snack" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "share.png" + }, + { + "wordId": "actions-action-buy", + "text": "buy", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-places-store" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "buy.png" + }, + { + "wordId": "actions-action-find", + "text": "find", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-games-toy" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "find.png" + }, + { + "wordId": "actions-action-hide", + "text": "hide", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "grammar-prepositions-under" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "hide.png" + }, + { + "wordId": "actions-action-lose", + "text": "lose", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-games-game" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "lose.png" + }, + { + "wordId": "actions-action-win", + "text": "win", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-games-game" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "win.png" + }, + { + "wordId": "actions-action-smile", + "text": "smile", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "describe-adjectives-happy" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "smile.png" + }, + { + "wordId": "actions-action-cry", + "text": "cry", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "describe-adjectives-sad" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "cry.png" + }, + { + "wordId": "actions-action-laugh", + "text": "laugh", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "describe-adjectives-funny" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "laugh.png" + }, + { + "wordId": "actions-action-cough", + "text": "cough", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "describe-adjectives-sick" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "cough.png" + }, + { + "wordId": "actions-action-sneeze", + "text": "sneeze", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "describe-adjectives-sick" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "sneeze.png" + }, + { + "wordId": "actions-action-hug", + "text": "hug", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-people-mom", + "things-people-dad" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "hug.png" + }, + { + "wordId": "actions-action-kiss", + "text": "kiss", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-people-mom" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "kiss.png" + }, + { + "wordId": "actions-action-think", + "text": "think", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "think.png" + }, + { + "wordId": "actions-action-know", + "text": "know", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "know.png" + }, + { + "wordId": "actions-action-forget", + "text": "forget", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "forget.png" + }, + { + "wordId": "actions-action-remember", + "text": "remember", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "remember.png" + }, + { + "wordId": "actions-action-learn", + "text": "learn", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-places-school" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "learn.png" + }, + { + "wordId": "actions-action-teach", + "text": "teach", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-places-school" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "teach.png" + }, + { + "wordId": "actions-action-work", + "text": "work", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-computer" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "work.png" + }, + { + "wordId": "actions-action-break", + "text": "break", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-games-toy" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "break.png" + }, + { + "wordId": "actions-action-fix", + "text": "fix", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-games-toy", + "things-travel-car" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "fix.png" + }, + { + "wordId": "actions-action-build", + "text": "build", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-games-blocks", + "things-games-lego" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "build.png" + }, + { + "wordId": "actions-action-drop", + "text": "drop", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-cup", + "things-games-ball" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "drop.png" + }, + { + "wordId": "actions-action-lift", + "text": "lift", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "lift.png" + }, + { + "wordId": "actions-action-carry", + "text": "carry", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-backpack" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "carry.png" + }, + { + "wordId": "actions-action-show", + "text": "show", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-art-picture", + "things-games-toy" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "show.png" + }, + { + "wordId": "actions-action-give", + "text": "give", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "grammar-pronouns-me", + "things-games-toy" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "give.png" + }, + { + "wordId": "actions-action-get", + "text": "get", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-drink-water", + "things-games-toy" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "get.png" + }, + { + "wordId": "actions-action-keep", + "text": "keep", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "keep.png" + }, + { + "wordId": "actions-action-hold", + "text": "hold", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-body-hand" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "hold.png" + }, + { + "wordId": "actions-action-wait", + "text": "wait", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "wait.png" + }, + { + "wordId": "actions-action-brush", + "text": "brush", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-body-teeth", + "things-body-hair" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "brush.png" + }, + { + "wordId": "actions-action-tie", + "text": "tie", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-clothes-shoes" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "tie.png" + }, + { + "wordId": "actions-action-dress", + "text": "dress", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-clothes-shirt" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "dress.png" + }, + { + "wordId": "actions-action-pack", + "text": "pack", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-backpack" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "pack.png" + }, + { + "wordId": "actions-action-fall", + "text": "fall", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "fall.png" + }, + { + "wordId": "actions-action-help", + "text": "help", + "phoneticOverride": null, + "type": "actions", + "subType": "action", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "grammar-pronouns-me", + "actions-action-fix" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "help.png" + }, + { + "wordId": "actions-helping-can", + "text": "can", + "phoneticOverride": null, + "type": "actions", + "subType": "helping", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "can.png" + }, + { + "wordId": "actions-helping-will", + "text": "will", + "phoneticOverride": null, + "type": "actions", + "subType": "helping", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "will.png" + }, + { + "wordId": "actions-helping-do", + "text": "do", + "phoneticOverride": null, + "type": "actions", + "subType": "helping", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "do.png" + }, + { + "wordId": "actions-helping-did", + "text": "did", + "phoneticOverride": null, + "type": "actions", + "subType": "helping", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "did.png" + }, + { + "wordId": "actions-helping-is", + "text": "is", + "phoneticOverride": null, + "type": "actions", + "subType": "helping", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "is.png" + }, + { + "wordId": "actions-helping-am", + "text": "am", + "phoneticOverride": null, + "type": "actions", + "subType": "helping", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "am.png" + }, + { + "wordId": "actions-helping-are", + "text": "are", + "phoneticOverride": null, + "type": "actions", + "subType": "helping", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "are.png" + }, + { + "wordId": "actions-helping-was", + "text": "was", + "phoneticOverride": null, + "type": "actions", + "subType": "helping", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "was.png" + }, + { + "wordId": "actions-helping-were", + "text": "were", + "phoneticOverride": null, + "type": "actions", + "subType": "helping", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "were.png" + }, + { + "wordId": "actions-helping-have", + "text": "have", + "phoneticOverride": null, + "type": "actions", + "subType": "helping", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "have.png" + }, + { + "wordId": "actions-helping-has", + "text": "has", + "phoneticOverride": null, + "type": "actions", + "subType": "helping", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "has.png" + }, + { + "wordId": "actions-helping-had", + "text": "had", + "phoneticOverride": null, + "type": "actions", + "subType": "helping", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "had.png" + }, + { + "wordId": "actions-helping-could", + "text": "could", + "phoneticOverride": null, + "type": "actions", + "subType": "helping", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "could.png" + }, + { + "wordId": "actions-helping-would", + "text": "would", + "phoneticOverride": null, + "type": "actions", + "subType": "helping", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "would.png" + }, + { + "wordId": "actions-helping-should", + "text": "should", + "phoneticOverride": null, + "type": "actions", + "subType": "helping", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "should.png" + }, + { + "wordId": "actions-helping-may", + "text": "may", + "phoneticOverride": null, + "type": "actions", + "subType": "helping", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "may.png" + }, + { + "wordId": "actions-helping-must", + "text": "must", + "phoneticOverride": null, + "type": "actions", + "subType": "helping", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "must.png" + }, + { + "wordId": "actions-strong-help", + "text": "help", + "phoneticOverride": null, + "type": "actions", + "subType": "strong", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "grammar-pronouns-me", + "actions-action-fix" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "help.png" + }, + { + "wordId": "actions-strong-stop", + "text": "stop", + "phoneticOverride": null, + "type": "actions", + "subType": "strong", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "stop.png" + }, + { + "wordId": "actions-strong-hurt", + "text": "hurt", + "phoneticOverride": null, + "type": "actions", + "subType": "strong", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-body-arm", + "things-body-leg" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "hurt.png" + }, + { + "wordId": "actions-strong-need", + "text": "need", + "phoneticOverride": null, + "type": "actions", + "subType": "strong", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-drink-water", + "things-places-bathroom", + "actions-strong-help" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "need.png" + }, + { + "wordId": "describe-adjectives-good", + "text": "good", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "good.png" + }, + { + "wordId": "describe-adjectives-bad", + "text": "bad", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "bad.png" + }, + { + "wordId": "describe-adjectives-big", + "text": "big", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "big.png" + }, + { + "wordId": "describe-adjectives-little", + "text": "little", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "little.png" + }, + { + "wordId": "describe-adjectives-hot", + "text": "hot", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-food-snack", + "things-home-oven" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "hot.png" + }, + { + "wordId": "describe-adjectives-cold", + "text": "cold", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-drink-water" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "cold.png" + }, + { + "wordId": "describe-adjectives-fast", + "text": "fast", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "fast.png" + }, + { + "wordId": "describe-adjectives-slow", + "text": "slow", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "slow.png" + }, + { + "wordId": "describe-adjectives-happy", + "text": "happy", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "happy.png" + }, + { + "wordId": "describe-adjectives-sad", + "text": "sad", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "sad.png" + }, + { + "wordId": "describe-adjectives-angry", + "text": "angry", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "angry.png" + }, + { + "wordId": "describe-adjectives-scared", + "text": "scared", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "scared.png" + }, + { + "wordId": "describe-adjectives-tired", + "text": "tired", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "actions-action-sleep" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "tired.png" + }, + { + "wordId": "describe-adjectives-sick", + "text": "sick", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-people-doctor" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "sick.png" + }, + { + "wordId": "describe-adjectives-clean", + "text": "clean", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "clean.png" + }, + { + "wordId": "describe-adjectives-dirty", + "text": "dirty", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "dirty.png" + }, + { + "wordId": "describe-adjectives-wet", + "text": "wet", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-nature-water" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "wet.png" + }, + { + "wordId": "describe-adjectives-dry", + "text": "dry", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "dry.png" + }, + { + "wordId": "describe-adjectives-soft", + "text": "soft", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "soft.png" + }, + { + "wordId": "describe-adjectives-hard", + "text": "hard", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "hard.png" + }, + { + "wordId": "describe-adjectives-heavy", + "text": "heavy", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "heavy.png" + }, + { + "wordId": "describe-adjectives-light", + "text": "light", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "light.png" + }, + { + "wordId": "describe-adjectives-new", + "text": "new", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "new.png" + }, + { + "wordId": "describe-adjectives-old", + "text": "old", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "old.png" + }, + { + "wordId": "describe-adjectives-beautiful", + "text": "beautiful", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "beautiful.png" + }, + { + "wordId": "describe-adjectives-ugly", + "text": "ugly", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "ugly.png" + }, + { + "wordId": "describe-adjectives-sweet", + "text": "sweet", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-food-cookie", + "things-food-candy" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "sweet.png" + }, + { + "wordId": "describe-adjectives-sour", + "text": "sour", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "sour.png" + }, + { + "wordId": "describe-adjectives-salty", + "text": "salty", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-food-chips" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "salty.png" + }, + { + "wordId": "describe-adjectives-loud", + "text": "loud", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-music-music" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "loud.png" + }, + { + "wordId": "describe-adjectives-quiet", + "text": "quiet", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "quiet.png" + }, + { + "wordId": "describe-adjectives-red", + "text": "red", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "red.png" + }, + { + "wordId": "describe-adjectives-blue", + "text": "blue", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "blue.png" + }, + { + "wordId": "describe-adjectives-green", + "text": "green", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "green.png" + }, + { + "wordId": "describe-adjectives-yellow", + "text": "yellow", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "yellow.png" + }, + { + "wordId": "describe-adjectives-black", + "text": "black", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "black.png" + }, + { + "wordId": "describe-adjectives-white", + "text": "white", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "white.png" + }, + { + "wordId": "describe-adjectives-orange", + "text": "orange", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "orange.png" + }, + { + "wordId": "describe-adjectives-purple", + "text": "purple", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "purple.png" + }, + { + "wordId": "describe-adjectives-pink", + "text": "pink", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "pink.png" + }, + { + "wordId": "describe-adjectives-brown", + "text": "brown", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "brown.png" + }, + { + "wordId": "describe-adjectives-gray", + "text": "gray", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "gray.png" + }, + { + "wordId": "describe-adjectives-broken", + "text": "broken", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-games-toy" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "broken.png" + }, + { + "wordId": "describe-adjectives-empty", + "text": "empty", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-cup" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "empty.png" + }, + { + "wordId": "describe-adjectives-full", + "text": "full", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "things-home-cup" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "full.png" + }, + { + "wordId": "describe-adjectives-hungry", + "text": "hungry", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "actions-action-eat" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "hungry.png" + }, + { + "wordId": "describe-adjectives-thirsty", + "text": "thirsty", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "actions-action-drink" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "thirsty.png" + }, + { + "wordId": "describe-adjectives-funny", + "text": "funny", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "funny.png" + }, + { + "wordId": "describe-adjectives-boring", + "text": "boring", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "boring.png" + }, + { + "wordId": "describe-adjectives-scary", + "text": "scary", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "scary.png" + }, + { + "wordId": "describe-adjectives-brave", + "text": "brave", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "brave.png" + }, + { + "wordId": "describe-adjectives-mean", + "text": "mean", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "mean.png" + }, + { + "wordId": "describe-adjectives-kind", + "text": "kind", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "kind.png" + }, + { + "wordId": "describe-adjectives-easy", + "text": "easy", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "easy.png" + }, + { + "wordId": "describe-adjectives-difficult", + "text": "difficult", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "difficult.png" + }, + { + "wordId": "describe-adjectives-wrong", + "text": "wrong", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "wrong.png" + }, + { + "wordId": "describe-adjectives-right", + "text": "right", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "right.png" + }, + { + "wordId": "describe-adjectives-safe", + "text": "safe", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "safe.png" + }, + { + "wordId": "describe-adjectives-dangerous", + "text": "dangerous", + "phoneticOverride": null, + "type": "describe", + "subType": "adjectives", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "dangerous.png" + }, + { + "wordId": "describe-sense-see", + "text": "see", + "phoneticOverride": null, + "type": "describe", + "subType": "sense", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "see.png" + }, + { + "wordId": "describe-sense-hear", + "text": "hear", + "phoneticOverride": null, + "type": "describe", + "subType": "sense", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "hear.png" + }, + { + "wordId": "describe-sense-smell", + "text": "smell", + "phoneticOverride": null, + "type": "describe", + "subType": "sense", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "smell.png" + }, + { + "wordId": "describe-sense-taste", + "text": "taste", + "phoneticOverride": null, + "type": "describe", + "subType": "sense", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "taste.png" + }, + { + "wordId": "describe-sense-touch", + "text": "touch", + "phoneticOverride": null, + "type": "describe", + "subType": "sense", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "touch.png" + }, + { + "wordId": "describe-sense-feel", + "text": "feel", + "phoneticOverride": null, + "type": "describe", + "subType": "sense", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "feel.png" + }, + { + "wordId": "describe-feeling-excited", + "text": "excited", + "phoneticOverride": null, + "type": "describe", + "subType": "feeling", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "excited.png" + }, + { + "wordId": "describe-feeling-bored", + "text": "bored", + "phoneticOverride": null, + "type": "describe", + "subType": "feeling", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "bored.png" + }, + { + "wordId": "describe-feeling-worried", + "text": "worried", + "phoneticOverride": null, + "type": "describe", + "subType": "feeling", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "worried.png" + }, + { + "wordId": "describe-feeling-surprised", + "text": "surprised", + "phoneticOverride": null, + "type": "describe", + "subType": "feeling", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "surprised.png" + }, + { + "wordId": "describe-feeling-proud", + "text": "proud", + "phoneticOverride": null, + "type": "describe", + "subType": "feeling", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "proud.png" + }, + { + "wordId": "describe-feeling-jealous", + "text": "jealous", + "phoneticOverride": null, + "type": "describe", + "subType": "feeling", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "jealous.png" + }, + { + "wordId": "describe-feeling-lonely", + "text": "lonely", + "phoneticOverride": null, + "type": "describe", + "subType": "feeling", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "lonely.png" + }, + { + "wordId": "describe-feeling-nervous", + "text": "nervous", + "phoneticOverride": null, + "type": "describe", + "subType": "feeling", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "nervous.png" + }, + { + "wordId": "describe-feeling-calm", + "text": "calm", + "phoneticOverride": null, + "type": "describe", + "subType": "feeling", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "calm.png" + }, + { + "wordId": "describe-feeling-confused", + "text": "confused", + "phoneticOverride": null, + "type": "describe", + "subType": "feeling", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "confused.png" + }, + { + "wordId": "describe-feeling-frustrated", + "text": "frustrated", + "phoneticOverride": null, + "type": "describe", + "subType": "feeling", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "frustrated.png" + }, + { + "wordId": "describe-feeling-silly", + "text": "silly", + "phoneticOverride": null, + "type": "describe", + "subType": "feeling", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "silly.png" + }, + { + "wordId": "describe-thought-smart", + "text": "smart", + "phoneticOverride": null, + "type": "describe", + "subType": "thought", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "smart.png" + }, + { + "wordId": "describe-thought-silly", + "text": "silly", + "phoneticOverride": null, + "type": "describe", + "subType": "thought", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "silly.png" + }, + { + "wordId": "describe-thought-crazy", + "text": "crazy", + "phoneticOverride": null, + "type": "describe", + "subType": "thought", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "crazy.png" + }, + { + "wordId": "describe-thought-creative", + "text": "creative", + "phoneticOverride": null, + "type": "describe", + "subType": "thought", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "creative.png" + }, + { + "wordId": "describe-thought-wise", + "text": "wise", + "phoneticOverride": null, + "type": "describe", + "subType": "thought", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "wise.png" + }, + { + "wordId": "describe-thought-careful", + "text": "careful", + "phoneticOverride": null, + "type": "describe", + "subType": "thought", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "careful.png" + }, + { + "wordId": "social-phrases-thank-you", + "text": "thank you", + "phoneticOverride": null, + "type": "social", + "subType": "phrases", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "thank-you.png" + }, + { + "wordId": "social-phrases-please", + "text": "please", + "phoneticOverride": null, + "type": "social", + "subType": "phrases", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "please.png" + }, + { + "wordId": "social-phrases-excuse-me", + "text": "excuse me", + "phoneticOverride": null, + "type": "social", + "subType": "phrases", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "excuse-me.png" + }, + { + "wordId": "social-phrases-i-don't-know", + "text": "i don't know", + "phoneticOverride": null, + "type": "social", + "subType": "phrases", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "i-don't-know.png" + }, + { + "wordId": "social-phrases-i'm-sorry", + "text": "i'm sorry", + "phoneticOverride": null, + "type": "social", + "subType": "phrases", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "i'm-sorry.png" + }, + { + "wordId": "social-phrases-no-thank-you", + "text": "no thank you", + "phoneticOverride": null, + "type": "social", + "subType": "phrases", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "no-thank-you.png" + }, + { + "wordId": "social-phrases-your-turn", + "text": "your turn", + "phoneticOverride": null, + "type": "social", + "subType": "phrases", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "your-turn.png" + }, + { + "wordId": "social-phrases-my-turn", + "text": "my turn", + "phoneticOverride": null, + "type": "social", + "subType": "phrases", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "my-turn.png" + }, + { + "wordId": "social-phrases-all-done", + "text": "all done", + "phoneticOverride": null, + "type": "social", + "subType": "phrases", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "all-done.png" + }, + { + "wordId": "social-phrases-help-please", + "text": "help please", + "phoneticOverride": null, + "type": "social", + "subType": "phrases", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "help-please.png" + }, + { + "wordId": "social-phrases-more-please", + "text": "more please", + "phoneticOverride": null, + "type": "social", + "subType": "phrases", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "more-please.png" + }, + { + "wordId": "social-phrases-yes-please", + "text": "yes please", + "phoneticOverride": null, + "type": "social", + "subType": "phrases", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "yes-please.png" + }, + { + "wordId": "social-favourites-like", + "text": "like", + "phoneticOverride": null, + "type": "social", + "subType": "favourites", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "like.png" + }, + { + "wordId": "social-favourites-love", + "text": "love", + "phoneticOverride": null, + "type": "social", + "subType": "favourites", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "love.png" + }, + { + "wordId": "social-favourites-hate", + "text": "hate", + "phoneticOverride": null, + "type": "social", + "subType": "favourites", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "hate.png" + }, + { + "wordId": "social-favourites-favorite", + "text": "favorite", + "phoneticOverride": null, + "type": "social", + "subType": "favourites", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "favorite.png" + }, + { + "wordId": "social-favourites-best", + "text": "best", + "phoneticOverride": null, + "type": "social", + "subType": "favourites", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "best.png" + }, + { + "wordId": "social-favourites-worst", + "text": "worst", + "phoneticOverride": null, + "type": "social", + "subType": "favourites", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "worst.png" + }, + { + "wordId": "social-greetings-hello", + "text": "hello", + "phoneticOverride": null, + "type": "social", + "subType": "greetings", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "hello.png" + }, + { + "wordId": "social-greetings-bye-bye", + "text": "bye bye", + "phoneticOverride": null, + "type": "social", + "subType": "greetings", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "bye-bye.png" + }, + { + "wordId": "social-greetings-good-morning", + "text": "good morning", + "phoneticOverride": null, + "type": "social", + "subType": "greetings", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "good-morning.png" + }, + { + "wordId": "social-greetings-good-night", + "text": "good night", + "phoneticOverride": null, + "type": "social", + "subType": "greetings", + "isCoreVocabulary": true, + "extraRelatedWordIds": [ + "actions-action-sleep" + ], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "good-night.png" + }, + { + "wordId": "social-greetings-hi", + "text": "hi", + "phoneticOverride": null, + "type": "social", + "subType": "greetings", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "hi.png" + }, + { + "wordId": "social-greetings-welcome", + "text": "welcome", + "phoneticOverride": null, + "type": "social", + "subType": "greetings", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "welcome.png" + }, + { + "wordId": "social-greetings-see-you-later", + "text": "see you later", + "phoneticOverride": null, + "type": "social", + "subType": "greetings", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "see-you-later.png" + }, + { + "wordId": "social-greetings-how-are-you", + "text": "how are you", + "phoneticOverride": null, + "type": "social", + "subType": "greetings", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "how-are-you.png" + }, + { + "wordId": "things-people-mom", + "text": "mom", + "phoneticOverride": null, + "type": "things", + "subType": "people", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "mom.png" + }, + { + "wordId": "things-people-dad", + "text": "dad", + "phoneticOverride": null, + "type": "things", + "subType": "people", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "dad.png" + }, + { + "wordId": "things-people-brother", + "text": "brother", + "phoneticOverride": null, + "type": "things", + "subType": "people", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "brother.png" + }, + { + "wordId": "things-people-sister", + "text": "sister", + "phoneticOverride": null, + "type": "things", + "subType": "people", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "sister.png" + }, + { + "wordId": "things-people-baby", + "text": "baby", + "phoneticOverride": null, + "type": "things", + "subType": "people", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "baby.png" + }, + { + "wordId": "things-people-grandma", + "text": "grandma", + "phoneticOverride": null, + "type": "things", + "subType": "people", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "grandma.png" + }, + { + "wordId": "things-people-grandpa", + "text": "grandpa", + "phoneticOverride": null, + "type": "things", + "subType": "people", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "grandpa.png" + }, + { + "wordId": "things-people-teacher", + "text": "teacher", + "phoneticOverride": null, + "type": "things", + "subType": "people", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "teacher.png" + }, + { + "wordId": "things-people-doctor", + "text": "doctor", + "phoneticOverride": null, + "type": "things", + "subType": "people", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "doctor.png" + }, + { + "wordId": "things-people-nurse", + "text": "nurse", + "phoneticOverride": null, + "type": "things", + "subType": "people", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "nurse.png" + }, + { + "wordId": "things-people-friend", + "text": "friend", + "phoneticOverride": null, + "type": "things", + "subType": "people", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "friend.png" + }, + { + "wordId": "things-people-boy", + "text": "boy", + "phoneticOverride": null, + "type": "things", + "subType": "people", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "boy.png" + }, + { + "wordId": "things-people-girl", + "text": "girl", + "phoneticOverride": null, + "type": "things", + "subType": "people", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "girl.png" + }, + { + "wordId": "things-people-man", + "text": "man", + "phoneticOverride": null, + "type": "things", + "subType": "people", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "man.png" + }, + { + "wordId": "things-people-woman", + "text": "woman", + "phoneticOverride": null, + "type": "things", + "subType": "people", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "woman.png" + }, + { + "wordId": "things-people-dentist", + "text": "dentist", + "phoneticOverride": null, + "type": "things", + "subType": "people", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "dentist.png" + }, + { + "wordId": "things-people-firefighter", + "text": "firefighter", + "phoneticOverride": null, + "type": "things", + "subType": "people", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "firefighter.png" + }, + { + "wordId": "things-people-student", + "text": "student", + "phoneticOverride": null, + "type": "things", + "subType": "people", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "student.png" + }, + { + "wordId": "things-people-family", + "text": "family", + "phoneticOverride": null, + "type": "things", + "subType": "people", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "family.png" + }, + { + "wordId": "things-animals-dog", + "text": "dog", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "dog.png" + }, + { + "wordId": "things-animals-cat", + "text": "cat", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "cat.png" + }, + { + "wordId": "things-animals-bird", + "text": "bird", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "bird.png" + }, + { + "wordId": "things-animals-fish", + "text": "fish", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "fish.png" + }, + { + "wordId": "things-animals-horse", + "text": "horse", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "horse.png" + }, + { + "wordId": "things-animals-cow", + "text": "cow", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "cow.png" + }, + { + "wordId": "things-animals-pig", + "text": "pig", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "pig.png" + }, + { + "wordId": "things-animals-sheep", + "text": "sheep", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "sheep.png" + }, + { + "wordId": "things-animals-chicken", + "text": "chicken", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "chicken.png" + }, + { + "wordId": "things-animals-duck", + "text": "duck", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "duck.png" + }, + { + "wordId": "things-animals-lion", + "text": "lion", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "lion.png" + }, + { + "wordId": "things-animals-tiger", + "text": "tiger", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "tiger.png" + }, + { + "wordId": "things-animals-bear", + "text": "bear", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "bear.png" + }, + { + "wordId": "things-animals-elephant", + "text": "elephant", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "elephant.png" + }, + { + "wordId": "things-animals-monkey", + "text": "monkey", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "monkey.png" + }, + { + "wordId": "things-animals-giraffe", + "text": "giraffe", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "giraffe.png" + }, + { + "wordId": "things-animals-rabbit", + "text": "rabbit", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "rabbit.png" + }, + { + "wordId": "things-animals-mouse", + "text": "mouse", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "mouse.png" + }, + { + "wordId": "things-animals-frog", + "text": "frog", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "frog.png" + }, + { + "wordId": "things-animals-snake", + "text": "snake", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "snake.png" + }, + { + "wordId": "things-animals-turtle", + "text": "turtle", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "turtle.png" + }, + { + "wordId": "things-animals-spider", + "text": "spider", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "spider.png" + }, + { + "wordId": "things-animals-bee", + "text": "bee", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "bee.png" + }, + { + "wordId": "things-animals-butterfly", + "text": "butterfly", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "butterfly.png" + }, + { + "wordId": "things-animals-shark", + "text": "shark", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "shark.png" + }, + { + "wordId": "things-animals-whale", + "text": "whale", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "whale.png" + }, + { + "wordId": "things-animals-dolphin", + "text": "dolphin", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "dolphin.png" + }, + { + "wordId": "things-animals-penguin", + "text": "penguin", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "penguin.png" + }, + { + "wordId": "things-animals-owl", + "text": "owl", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "owl.png" + }, + { + "wordId": "things-animals-fox", + "text": "fox", + "phoneticOverride": null, + "type": "things", + "subType": "animals", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "fox.png" + }, + { + "wordId": "things-nature-tree", + "text": "tree", + "phoneticOverride": null, + "type": "things", + "subType": "nature", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "tree.png" + }, + { + "wordId": "things-nature-flower", + "text": "flower", + "phoneticOverride": null, + "type": "things", + "subType": "nature", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "flower.png" + }, + { + "wordId": "things-nature-grass", + "text": "grass", + "phoneticOverride": null, + "type": "things", + "subType": "nature", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "grass.png" + }, + { + "wordId": "things-nature-sun", + "text": "sun", + "phoneticOverride": null, + "type": "things", + "subType": "nature", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "sun.png" + }, + { + "wordId": "things-nature-moon", + "text": "moon", + "phoneticOverride": null, + "type": "things", + "subType": "nature", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "moon.png" + }, + { + "wordId": "things-nature-star", + "text": "star", + "phoneticOverride": null, + "type": "things", + "subType": "nature", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "star.png" + }, + { + "wordId": "things-nature-cloud", + "text": "cloud", + "phoneticOverride": null, + "type": "things", + "subType": "nature", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "cloud.png" + }, + { + "wordId": "things-nature-rain", + "text": "rain", + "phoneticOverride": null, + "type": "things", + "subType": "nature", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "rain.png" + }, + { + "wordId": "things-nature-snow", + "text": "snow", + "phoneticOverride": null, + "type": "things", + "subType": "nature", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "snow.png" + }, + { + "wordId": "things-nature-wind", + "text": "wind", + "phoneticOverride": null, + "type": "things", + "subType": "nature", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "wind.png" + }, + { + "wordId": "things-nature-sky", + "text": "sky", + "phoneticOverride": null, + "type": "things", + "subType": "nature", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "sky.png" + }, + { + "wordId": "things-nature-water", + "text": "water", + "phoneticOverride": null, + "type": "things", + "subType": "nature", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "water.png" + }, + { + "wordId": "things-nature-fire", + "text": "fire", + "phoneticOverride": null, + "type": "things", + "subType": "nature", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "fire.png" + }, + { + "wordId": "things-nature-rock", + "text": "rock", + "phoneticOverride": null, + "type": "things", + "subType": "nature", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "rock.png" + }, + { + "wordId": "things-nature-dirt", + "text": "dirt", + "phoneticOverride": null, + "type": "things", + "subType": "nature", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "dirt.png" + }, + { + "wordId": "things-nature-leaf", + "text": "leaf", + "phoneticOverride": null, + "type": "things", + "subType": "nature", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "leaf.png" + }, + { + "wordId": "things-nature-river", + "text": "river", + "phoneticOverride": null, + "type": "things", + "subType": "nature", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "river.png" + }, + { + "wordId": "things-nature-ocean", + "text": "ocean", + "phoneticOverride": null, + "type": "things", + "subType": "nature", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "ocean.png" + }, + { + "wordId": "things-nature-mountain", + "text": "mountain", + "phoneticOverride": null, + "type": "things", + "subType": "nature", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "mountain.png" + }, + { + "wordId": "things-nature-sand", + "text": "sand", + "phoneticOverride": null, + "type": "things", + "subType": "nature", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "sand.png" + }, + { + "wordId": "things-food-apple", + "text": "apple", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "apple.png" + }, + { + "wordId": "things-food-banana", + "text": "banana", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "banana.png" + }, + { + "wordId": "things-food-orange", + "text": "orange", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "orange.png" + }, + { + "wordId": "things-food-grapes", + "text": "grapes", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "grapes.png" + }, + { + "wordId": "things-food-strawberry", + "text": "strawberry", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "strawberry.png" + }, + { + "wordId": "things-food-watermelon", + "text": "watermelon", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "watermelon.png" + }, + { + "wordId": "things-food-carrot", + "text": "carrot", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "carrot.png" + }, + { + "wordId": "things-food-broccoli", + "text": "broccoli", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "broccoli.png" + }, + { + "wordId": "things-food-potato", + "text": "potato", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "potato.png" + }, + { + "wordId": "things-food-tomato", + "text": "tomato", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "tomato.png" + }, + { + "wordId": "things-food-corn", + "text": "corn", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "corn.png" + }, + { + "wordId": "things-food-cucumber", + "text": "cucumber", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "cucumber.png" + }, + { + "wordId": "things-food-bread", + "text": "bread", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "bread.png" + }, + { + "wordId": "things-food-rice", + "text": "rice", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "rice.png" + }, + { + "wordId": "things-food-pasta", + "text": "pasta", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "pasta.png" + }, + { + "wordId": "things-food-pizza", + "text": "pizza", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "pizza.png" + }, + { + "wordId": "things-food-burger", + "text": "burger", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "burger.png" + }, + { + "wordId": "things-food-sandwich", + "text": "sandwich", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "sandwich.png" + }, + { + "wordId": "things-food-chicken", + "text": "chicken", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "chicken.png" + }, + { + "wordId": "things-food-meat", + "text": "meat", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "meat.png" + }, + { + "wordId": "things-food-fish", + "text": "fish", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "fish.png" + }, + { + "wordId": "things-food-egg", + "text": "egg", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "egg.png" + }, + { + "wordId": "things-food-cheese", + "text": "cheese", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "cheese.png" + }, + { + "wordId": "things-food-yogurt", + "text": "yogurt", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "yogurt.png" + }, + { + "wordId": "things-food-soup", + "text": "soup", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "soup.png" + }, + { + "wordId": "things-food-salad", + "text": "salad", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "salad.png" + }, + { + "wordId": "things-food-cereal", + "text": "cereal", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "cereal.png" + }, + { + "wordId": "things-food-pancakes", + "text": "pancakes", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "pancakes.png" + }, + { + "wordId": "things-food-cookie", + "text": "cookie", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "cookie.png" + }, + { + "wordId": "things-food-cake", + "text": "cake", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "cake.png" + }, + { + "wordId": "things-food-ice-cream", + "text": "ice cream", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "ice-cream.png" + }, + { + "wordId": "things-food-candy", + "text": "candy", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "candy.png" + }, + { + "wordId": "things-food-chocolate", + "text": "chocolate", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "chocolate.png" + }, + { + "wordId": "things-food-chips", + "text": "chips", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "chips.png" + }, + { + "wordId": "things-food-popcorn", + "text": "popcorn", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "popcorn.png" + }, + { + "wordId": "things-food-snack", + "text": "snack", + "phoneticOverride": null, + "type": "things", + "subType": "food", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "snack.png" + }, + { + "wordId": "things-drink-water", + "text": "water", + "phoneticOverride": null, + "type": "things", + "subType": "drink", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "water.png" + }, + { + "wordId": "things-drink-milk", + "text": "milk", + "phoneticOverride": null, + "type": "things", + "subType": "drink", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "milk.png" + }, + { + "wordId": "things-drink-juice", + "text": "juice", + "phoneticOverride": null, + "type": "things", + "subType": "drink", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "juice.png" + }, + { + "wordId": "things-drink-tea", + "text": "tea", + "phoneticOverride": null, + "type": "things", + "subType": "drink", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "tea.png" + }, + { + "wordId": "things-drink-coffee", + "text": "coffee", + "phoneticOverride": null, + "type": "things", + "subType": "drink", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "coffee.png" + }, + { + "wordId": "things-drink-soda", + "text": "soda", + "phoneticOverride": null, + "type": "things", + "subType": "drink", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "soda.png" + }, + { + "wordId": "things-drink-hot-chocolate", + "text": "hot chocolate", + "phoneticOverride": null, + "type": "things", + "subType": "drink", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "hot-chocolate.png" + }, + { + "wordId": "things-drink-smoothie", + "text": "smoothie", + "phoneticOverride": null, + "type": "things", + "subType": "drink", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "smoothie.png" + }, + { + "wordId": "things-body-head", + "text": "head", + "phoneticOverride": null, + "type": "things", + "subType": "body", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "head.png" + }, + { + "wordId": "things-body-hair", + "text": "hair", + "phoneticOverride": null, + "type": "things", + "subType": "body", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "hair.png" + }, + { + "wordId": "things-body-face", + "text": "face", + "phoneticOverride": null, + "type": "things", + "subType": "body", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "face.png" + }, + { + "wordId": "things-body-eye", + "text": "eye", + "phoneticOverride": null, + "type": "things", + "subType": "body", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "eye.png" + }, + { + "wordId": "things-body-ear", + "text": "ear", + "phoneticOverride": null, + "type": "things", + "subType": "body", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "ear.png" + }, + { + "wordId": "things-body-nose", + "text": "nose", + "phoneticOverride": null, + "type": "things", + "subType": "body", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "nose.png" + }, + { + "wordId": "things-body-mouth", + "text": "mouth", + "phoneticOverride": null, + "type": "things", + "subType": "body", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "mouth.png" + }, + { + "wordId": "things-body-teeth", + "text": "teeth", + "phoneticOverride": null, + "type": "things", + "subType": "body", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "teeth.png" + }, + { + "wordId": "things-body-tongue", + "text": "tongue", + "phoneticOverride": null, + "type": "things", + "subType": "body", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "tongue.png" + }, + { + "wordId": "things-body-neck", + "text": "neck", + "phoneticOverride": null, + "type": "things", + "subType": "body", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "neck.png" + }, + { + "wordId": "things-body-shoulder", + "text": "shoulder", + "phoneticOverride": null, + "type": "things", + "subType": "body", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "shoulder.png" + }, + { + "wordId": "things-body-arm", + "text": "arm", + "phoneticOverride": null, + "type": "things", + "subType": "body", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "arm.png" + }, + { + "wordId": "things-body-elbow", + "text": "elbow", + "phoneticOverride": null, + "type": "things", + "subType": "body", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "elbow.png" + }, + { + "wordId": "things-body-hand", + "text": "hand", + "phoneticOverride": null, + "type": "things", + "subType": "body", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "hand.png" + }, + { + "wordId": "things-body-finger", + "text": "finger", + "phoneticOverride": null, + "type": "things", + "subType": "body", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "finger.png" + }, + { + "wordId": "things-body-thumb", + "text": "thumb", + "phoneticOverride": null, + "type": "things", + "subType": "body", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "thumb.png" + }, + { + "wordId": "things-body-stomach", + "text": "stomach", + "phoneticOverride": null, + "type": "things", + "subType": "body", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "stomach.png" + }, + { + "wordId": "things-body-leg", + "text": "leg", + "phoneticOverride": null, + "type": "things", + "subType": "body", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "leg.png" + }, + { + "wordId": "things-body-knee", + "text": "knee", + "phoneticOverride": null, + "type": "things", + "subType": "body", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "knee.png" + }, + { + "wordId": "things-body-foot", + "text": "foot", + "phoneticOverride": null, + "type": "things", + "subType": "body", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "foot.png" + }, + { + "wordId": "things-body-toe", + "text": "toe", + "phoneticOverride": null, + "type": "things", + "subType": "body", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "toe.png" + }, + { + "wordId": "things-body-back", + "text": "back", + "phoneticOverride": null, + "type": "things", + "subType": "body", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "back.png" + }, + { + "wordId": "things-body-heart", + "text": "heart", + "phoneticOverride": null, + "type": "things", + "subType": "body", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "heart.png" + }, + { + "wordId": "things-clothes-shirt", + "text": "shirt", + "phoneticOverride": null, + "type": "things", + "subType": "clothes", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "shirt.png" + }, + { + "wordId": "things-clothes-pants", + "text": "pants", + "phoneticOverride": null, + "type": "things", + "subType": "clothes", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "pants.png" + }, + { + "wordId": "things-clothes-shorts", + "text": "shorts", + "phoneticOverride": null, + "type": "things", + "subType": "clothes", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "shorts.png" + }, + { + "wordId": "things-clothes-skirt", + "text": "skirt", + "phoneticOverride": null, + "type": "things", + "subType": "clothes", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "skirt.png" + }, + { + "wordId": "things-clothes-dress", + "text": "dress", + "phoneticOverride": null, + "type": "things", + "subType": "clothes", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "dress.png" + }, + { + "wordId": "things-clothes-jacket", + "text": "jacket", + "phoneticOverride": null, + "type": "things", + "subType": "clothes", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "jacket.png" + }, + { + "wordId": "things-clothes-coat", + "text": "coat", + "phoneticOverride": null, + "type": "things", + "subType": "clothes", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "coat.png" + }, + { + "wordId": "things-clothes-sweater", + "text": "sweater", + "phoneticOverride": null, + "type": "things", + "subType": "clothes", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "sweater.png" + }, + { + "wordId": "things-clothes-pajamas", + "text": "pajamas", + "phoneticOverride": null, + "type": "things", + "subType": "clothes", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "pajamas.png" + }, + { + "wordId": "things-clothes-underwear", + "text": "underwear", + "phoneticOverride": null, + "type": "things", + "subType": "clothes", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "underwear.png" + }, + { + "wordId": "things-clothes-socks", + "text": "socks", + "phoneticOverride": null, + "type": "things", + "subType": "clothes", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "socks.png" + }, + { + "wordId": "things-clothes-shoes", + "text": "shoes", + "phoneticOverride": null, + "type": "things", + "subType": "clothes", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "shoes.png" + }, + { + "wordId": "things-clothes-boots", + "text": "boots", + "phoneticOverride": null, + "type": "things", + "subType": "clothes", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "boots.png" + }, + { + "wordId": "things-clothes-hat", + "text": "hat", + "phoneticOverride": null, + "type": "things", + "subType": "clothes", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "hat.png" + }, + { + "wordId": "things-clothes-cap", + "text": "cap", + "phoneticOverride": null, + "type": "things", + "subType": "clothes", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "cap.png" + }, + { + "wordId": "things-clothes-gloves", + "text": "gloves", + "phoneticOverride": null, + "type": "things", + "subType": "clothes", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "gloves.png" + }, + { + "wordId": "things-clothes-scarf", + "text": "scarf", + "phoneticOverride": null, + "type": "things", + "subType": "clothes", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "scarf.png" + }, + { + "wordId": "things-clothes-swimsuit", + "text": "swimsuit", + "phoneticOverride": null, + "type": "things", + "subType": "clothes", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "swimsuit.png" + }, + { + "wordId": "things-clothes-belt", + "text": "belt", + "phoneticOverride": null, + "type": "things", + "subType": "clothes", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "belt.png" + }, + { + "wordId": "things-clothes-glasses", + "text": "glasses", + "phoneticOverride": null, + "type": "things", + "subType": "clothes", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "glasses.png" + }, + { + "wordId": "things-home-house", + "text": "house", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "house.png" + }, + { + "wordId": "things-home-room", + "text": "room", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "room.png" + }, + { + "wordId": "things-home-kitchen", + "text": "kitchen", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "kitchen.png" + }, + { + "wordId": "things-home-bathroom", + "text": "bathroom", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "bathroom.png" + }, + { + "wordId": "things-home-bedroom", + "text": "bedroom", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "bedroom.png" + }, + { + "wordId": "things-home-living-room", + "text": "living room", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "living-room.png" + }, + { + "wordId": "things-home-door", + "text": "door", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "door.png" + }, + { + "wordId": "things-home-window", + "text": "window", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "window.png" + }, + { + "wordId": "things-home-wall", + "text": "wall", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "wall.png" + }, + { + "wordId": "things-home-floor", + "text": "floor", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "floor.png" + }, + { + "wordId": "things-home-bed", + "text": "bed", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "bed.png" + }, + { + "wordId": "things-home-pillow", + "text": "pillow", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "pillow.png" + }, + { + "wordId": "things-home-blanket", + "text": "blanket", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "blanket.png" + }, + { + "wordId": "things-home-table", + "text": "table", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "table.png" + }, + { + "wordId": "things-home-chair", + "text": "chair", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "chair.png" + }, + { + "wordId": "things-home-couch", + "text": "couch", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "couch.png" + }, + { + "wordId": "things-home-desk", + "text": "desk", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "desk.png" + }, + { + "wordId": "things-home-shelf", + "text": "shelf", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "shelf.png" + }, + { + "wordId": "things-home-closet", + "text": "closet", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "closet.png" + }, + { + "wordId": "things-home-lamp", + "text": "lamp", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "lamp.png" + }, + { + "wordId": "things-home-light", + "text": "light", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "light.png" + }, + { + "wordId": "things-home-tv", + "text": "tv", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "tv.png" + }, + { + "wordId": "things-home-computer", + "text": "computer", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "computer.png" + }, + { + "wordId": "things-home-phone", + "text": "phone", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "phone.png" + }, + { + "wordId": "things-home-clock", + "text": "clock", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "clock.png" + }, + { + "wordId": "things-home-mirror", + "text": "mirror", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "mirror.png" + }, + { + "wordId": "things-home-sink", + "text": "sink", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "sink.png" + }, + { + "wordId": "things-home-toilet", + "text": "toilet", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "toilet.png" + }, + { + "wordId": "things-home-shower", + "text": "shower", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "shower.png" + }, + { + "wordId": "things-home-bathtub", + "text": "bathtub", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "bathtub.png" + }, + { + "wordId": "things-home-fridge", + "text": "fridge", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "fridge.png" + }, + { + "wordId": "things-home-oven", + "text": "oven", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "oven.png" + }, + { + "wordId": "things-home-microwave", + "text": "microwave", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "microwave.png" + }, + { + "wordId": "things-home-plate", + "text": "plate", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "plate.png" + }, + { + "wordId": "things-home-bowl", + "text": "bowl", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "bowl.png" + }, + { + "wordId": "things-home-cup", + "text": "cup", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "cup.png" + }, + { + "wordId": "things-home-fork", + "text": "fork", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "fork.png" + }, + { + "wordId": "things-home-spoon", + "text": "spoon", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "spoon.png" + }, + { + "wordId": "things-home-knife", + "text": "knife", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "knife.png" + }, + { + "wordId": "things-home-trash-can", + "text": "trash can", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "trash-can.png" + }, + { + "wordId": "things-home-key", + "text": "key", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "key.png" + }, + { + "wordId": "things-home-toy", + "text": "toy", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "toy.png" + }, + { + "wordId": "things-home-book", + "text": "book", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "book.png" + }, + { + "wordId": "things-home-backpack", + "text": "backpack", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "backpack.png" + }, + { + "wordId": "things-home-towel", + "text": "towel", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "towel.png" + }, + { + "wordId": "things-home-soap", + "text": "soap", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "soap.png" + }, + { + "wordId": "things-home-toothbrush", + "text": "toothbrush", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "toothbrush.png" + }, + { + "wordId": "things-home-toothpaste", + "text": "toothpaste", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "toothpaste.png" + }, + { + "wordId": "things-home-shampoo", + "text": "shampoo", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "shampoo.png" + }, + { + "wordId": "things-home-paper", + "text": "paper", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "paper.png" + }, + { + "wordId": "things-home-pencil", + "text": "pencil", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "pencil.png" + }, + { + "wordId": "things-home-pen", + "text": "pen", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "pen.png" + }, + { + "wordId": "things-home-crayons", + "text": "crayons", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "crayons.png" + }, + { + "wordId": "things-home-scissors", + "text": "scissors", + "phoneticOverride": null, + "type": "things", + "subType": "home", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "scissors.png" + }, + { + "wordId": "things-travel-car", + "text": "car", + "phoneticOverride": null, + "type": "things", + "subType": "travel", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "car.png" + }, + { + "wordId": "things-travel-bus", + "text": "bus", + "phoneticOverride": null, + "type": "things", + "subType": "travel", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "bus.png" + }, + { + "wordId": "things-travel-train", + "text": "train", + "phoneticOverride": null, + "type": "things", + "subType": "travel", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "train.png" + }, + { + "wordId": "things-travel-plane", + "text": "plane", + "phoneticOverride": null, + "type": "things", + "subType": "travel", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "plane.png" + }, + { + "wordId": "things-travel-bike", + "text": "bike", + "phoneticOverride": null, + "type": "things", + "subType": "travel", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "bike.png" + }, + { + "wordId": "things-travel-motorcycle", + "text": "motorcycle", + "phoneticOverride": null, + "type": "things", + "subType": "travel", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "motorcycle.png" + }, + { + "wordId": "things-travel-truck", + "text": "truck", + "phoneticOverride": null, + "type": "things", + "subType": "travel", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "truck.png" + }, + { + "wordId": "things-travel-boat", + "text": "boat", + "phoneticOverride": null, + "type": "things", + "subType": "travel", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "boat.png" + }, + { + "wordId": "things-travel-ship", + "text": "ship", + "phoneticOverride": null, + "type": "things", + "subType": "travel", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "ship.png" + }, + { + "wordId": "things-travel-subway", + "text": "subway", + "phoneticOverride": null, + "type": "things", + "subType": "travel", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "subway.png" + }, + { + "wordId": "things-travel-taxi", + "text": "taxi", + "phoneticOverride": null, + "type": "things", + "subType": "travel", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "taxi.png" + }, + { + "wordId": "things-travel-helicopter", + "text": "helicopter", + "phoneticOverride": null, + "type": "things", + "subType": "travel", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "helicopter.png" + }, + { + "wordId": "things-travel-stroller", + "text": "stroller", + "phoneticOverride": null, + "type": "things", + "subType": "travel", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "stroller.png" + }, + { + "wordId": "things-travel-suitcase", + "text": "suitcase", + "phoneticOverride": null, + "type": "things", + "subType": "travel", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "suitcase.png" + }, + { + "wordId": "things-travel-ticket", + "text": "ticket", + "phoneticOverride": null, + "type": "things", + "subType": "travel", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "ticket.png" + }, + { + "wordId": "things-travel-map", + "text": "map", + "phoneticOverride": null, + "type": "things", + "subType": "travel", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "map.png" + }, + { + "wordId": "things-places-home", + "text": "home", + "phoneticOverride": null, + "type": "things", + "subType": "places", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "home.png" + }, + { + "wordId": "things-places-school", + "text": "school", + "phoneticOverride": null, + "type": "things", + "subType": "places", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "school.png" + }, + { + "wordId": "things-places-park", + "text": "park", + "phoneticOverride": null, + "type": "things", + "subType": "places", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "park.png" + }, + { + "wordId": "things-places-store", + "text": "store", + "phoneticOverride": null, + "type": "things", + "subType": "places", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "store.png" + }, + { + "wordId": "things-places-hospital", + "text": "hospital", + "phoneticOverride": null, + "type": "things", + "subType": "places", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "hospital.png" + }, + { + "wordId": "things-places-library", + "text": "library", + "phoneticOverride": null, + "type": "things", + "subType": "places", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "library.png" + }, + { + "wordId": "things-places-restaurant", + "text": "restaurant", + "phoneticOverride": null, + "type": "things", + "subType": "places", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "restaurant.png" + }, + { + "wordId": "things-places-beach", + "text": "beach", + "phoneticOverride": null, + "type": "things", + "subType": "places", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "beach.png" + }, + { + "wordId": "things-places-pool", + "text": "pool", + "phoneticOverride": null, + "type": "things", + "subType": "places", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "pool.png" + }, + { + "wordId": "things-places-playground", + "text": "playground", + "phoneticOverride": null, + "type": "things", + "subType": "places", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "playground.png" + }, + { + "wordId": "things-places-zoo", + "text": "zoo", + "phoneticOverride": null, + "type": "things", + "subType": "places", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "zoo.png" + }, + { + "wordId": "things-places-farm", + "text": "farm", + "phoneticOverride": null, + "type": "things", + "subType": "places", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "farm.png" + }, + { + "wordId": "things-places-garden", + "text": "garden", + "phoneticOverride": null, + "type": "things", + "subType": "places", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "garden.png" + }, + { + "wordId": "things-places-yard", + "text": "yard", + "phoneticOverride": null, + "type": "things", + "subType": "places", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "yard.png" + }, + { + "wordId": "things-places-bathroom", + "text": "bathroom", + "phoneticOverride": null, + "type": "things", + "subType": "places", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "bathroom.png" + }, + { + "wordId": "things-places-airport", + "text": "airport", + "phoneticOverride": null, + "type": "things", + "subType": "places", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "airport.png" + }, + { + "wordId": "things-places-office", + "text": "office", + "phoneticOverride": null, + "type": "things", + "subType": "places", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "office.png" + }, + { + "wordId": "things-places-theater", + "text": "theater", + "phoneticOverride": null, + "type": "things", + "subType": "places", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "theater.png" + }, + { + "wordId": "things-places-museum", + "text": "museum", + "phoneticOverride": null, + "type": "things", + "subType": "places", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "museum.png" + }, + { + "wordId": "things-art-picture", + "text": "picture", + "phoneticOverride": null, + "type": "things", + "subType": "art", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "picture.png" + }, + { + "wordId": "things-art-drawing", + "text": "drawing", + "phoneticOverride": null, + "type": "things", + "subType": "art", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "drawing.png" + }, + { + "wordId": "things-art-painting", + "text": "painting", + "phoneticOverride": null, + "type": "things", + "subType": "art", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "painting.png" + }, + { + "wordId": "things-art-clay", + "text": "clay", + "phoneticOverride": null, + "type": "things", + "subType": "art", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "clay.png" + }, + { + "wordId": "things-art-markers", + "text": "markers", + "phoneticOverride": null, + "type": "things", + "subType": "art", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "markers.png" + }, + { + "wordId": "things-art-chalk", + "text": "chalk", + "phoneticOverride": null, + "type": "things", + "subType": "art", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "chalk.png" + }, + { + "wordId": "things-art-stickers", + "text": "stickers", + "phoneticOverride": null, + "type": "things", + "subType": "art", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "stickers.png" + }, + { + "wordId": "things-art-stamp", + "text": "stamp", + "phoneticOverride": null, + "type": "things", + "subType": "art", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "stamp.png" + }, + { + "wordId": "things-music-music", + "text": "music", + "phoneticOverride": null, + "type": "things", + "subType": "music", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "music.png" + }, + { + "wordId": "things-music-song", + "text": "song", + "phoneticOverride": null, + "type": "things", + "subType": "music", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "song.png" + }, + { + "wordId": "things-music-radio", + "text": "radio", + "phoneticOverride": null, + "type": "things", + "subType": "music", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "radio.png" + }, + { + "wordId": "things-music-piano", + "text": "piano", + "phoneticOverride": null, + "type": "things", + "subType": "music", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "piano.png" + }, + { + "wordId": "things-music-guitar", + "text": "guitar", + "phoneticOverride": null, + "type": "things", + "subType": "music", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "guitar.png" + }, + { + "wordId": "things-music-drums", + "text": "drums", + "phoneticOverride": null, + "type": "things", + "subType": "music", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "drums.png" + }, + { + "wordId": "things-music-flute", + "text": "flute", + "phoneticOverride": null, + "type": "things", + "subType": "music", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "flute.png" + }, + { + "wordId": "things-music-bell", + "text": "bell", + "phoneticOverride": null, + "type": "things", + "subType": "music", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "bell.png" + }, + { + "wordId": "things-games-game", + "text": "game", + "phoneticOverride": null, + "type": "things", + "subType": "games", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "game.png" + }, + { + "wordId": "things-games-toy", + "text": "toy", + "phoneticOverride": null, + "type": "things", + "subType": "games", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "toy.png" + }, + { + "wordId": "things-games-ball", + "text": "ball", + "phoneticOverride": null, + "type": "things", + "subType": "games", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "ball.png" + }, + { + "wordId": "things-games-blocks", + "text": "blocks", + "phoneticOverride": null, + "type": "things", + "subType": "games", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "blocks.png" + }, + { + "wordId": "things-games-puzzle", + "text": "puzzle", + "phoneticOverride": null, + "type": "things", + "subType": "games", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "puzzle.png" + }, + { + "wordId": "things-games-doll", + "text": "doll", + "phoneticOverride": null, + "type": "things", + "subType": "games", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "doll.png" + }, + { + "wordId": "things-games-lego", + "text": "lego", + "phoneticOverride": null, + "type": "things", + "subType": "games", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "lego.png" + }, + { + "wordId": "things-games-cards", + "text": "cards", + "phoneticOverride": null, + "type": "things", + "subType": "games", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "cards.png" + }, + { + "wordId": "things-games-dice", + "text": "dice", + "phoneticOverride": null, + "type": "things", + "subType": "games", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "dice.png" + }, + { + "wordId": "things-games-swing", + "text": "swing", + "phoneticOverride": null, + "type": "things", + "subType": "games", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "swing.png" + }, + { + "wordId": "things-games-slide", + "text": "slide", + "phoneticOverride": null, + "type": "things", + "subType": "games", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "slide.png" + }, + { + "wordId": "things-games-sandbox", + "text": "sandbox", + "phoneticOverride": null, + "type": "things", + "subType": "games", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "sandbox.png" + }, + { + "wordId": "things-games-bubble", + "text": "bubble", + "phoneticOverride": null, + "type": "things", + "subType": "games", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "bubble.png" + }, + { + "wordId": "things-occasions-party", + "text": "party", + "phoneticOverride": null, + "type": "things", + "subType": "occasions", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "party.png" + }, + { + "wordId": "things-occasions-birthday", + "text": "birthday", + "phoneticOverride": null, + "type": "things", + "subType": "occasions", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "birthday.png" + }, + { + "wordId": "things-occasions-holiday", + "text": "holiday", + "phoneticOverride": null, + "type": "things", + "subType": "occasions", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "holiday.png" + }, + { + "wordId": "things-occasions-christmas", + "text": "christmas", + "phoneticOverride": null, + "type": "things", + "subType": "occasions", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "christmas.png" + }, + { + "wordId": "things-occasions-halloween", + "text": "halloween", + "phoneticOverride": null, + "type": "things", + "subType": "occasions", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "halloween.png" + }, + { + "wordId": "things-occasions-wedding", + "text": "wedding", + "phoneticOverride": null, + "type": "things", + "subType": "occasions", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "wedding.png" + }, + { + "wordId": "things-occasions-gift", + "text": "gift", + "phoneticOverride": null, + "type": "things", + "subType": "occasions", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "gift.png" + }, + { + "wordId": "things-occasions-cake", + "text": "cake", + "phoneticOverride": null, + "type": "things", + "subType": "occasions", + "isCoreVocabulary": true, + "extraRelatedWordIds": [], + "aiSuggestedFollowUps": [], + "createdDate": null, + "imagePath": "cake.png" } ] } diff --git a/firebase.json b/firebase.json new file mode 100644 index 0000000..9e6f6df --- /dev/null +++ b/firebase.json @@ -0,0 +1 @@ +{"flutter":{"platforms":{"android":{"default":{"projectId":"simpleaac-460e6","appId":"1:997985384352:android:7e3c2549044f4cb7e956c5","fileOutput":"android/app/google-services.json"}},"ios":{"default":{"projectId":"simpleaac-460e6","appId":"1:997985384352:ios:d49d82dff28391dee956c5","uploadDebugSymbols":true,"fileOutput":"ios/Runner/GoogleService-Info.plist"}},"dart":{"lib/firebase_options.dart":{"projectId":"simpleaac-460e6","configurations":{"android":"1:997985384352:android:7e3c2549044f4cb7e956c5","ios":"1:997985384352:ios:d49d82dff28391dee956c5","web":"1:997985384352:web:c8d66d53bf3710fee956c5"}}}}}} \ No newline at end of file diff --git a/firebase/dev/GoogleService-Info.plist b/firebase/dev/GoogleService-Info.plist deleted file mode 100644 index 4ab4ddd..0000000 --- a/firebase/dev/GoogleService-Info.plist +++ /dev/null @@ -1,38 +0,0 @@ - - - - - CLIENT_ID - 997985384352-5fmg530gr1kru4ulhdjc7ptd3lh163fu.apps.googleusercontent.com - REVERSED_CLIENT_ID - com.googleusercontent.apps.997985384352-5fmg530gr1kru4ulhdjc7ptd3lh163fu - ANDROID_CLIENT_ID - 997985384352-cdb97sss33k0guqsl401b27ns33vijrp.apps.googleusercontent.com - API_KEY - AIzaSyCxVlQSXwse9EE9i8jURkH0d-a_PRo5gzo - GCM_SENDER_ID - 997985384352 - PLIST_VERSION - 1 - BUNDLE_ID - com.sealstudios.simpleaac.dev - PROJECT_ID - simpleaac-460e6 - STORAGE_BUCKET - simpleaac-460e6.appspot.com - IS_ADS_ENABLED - - IS_ANALYTICS_ENABLED - - IS_APPINVITE_ENABLED - - IS_GCM_ENABLED - - IS_SIGNIN_ENABLED - - GOOGLE_APP_ID - 1:997985384352:ios:e85c68514d01bb20e956c5 - DATABASE_URL - https://simpleaac-460e6.firebaseio.com - - \ No newline at end of file diff --git a/firebase/dev/google-services.json b/firebase/dev/google-services.json deleted file mode 100644 index f3ca312..0000000 --- a/firebase/dev/google-services.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "project_info": { - "project_number": "997985384352", - "firebase_url": "https://simpleaac-460e6.firebaseio.com", - "project_id": "simpleaac-460e6", - "storage_bucket": "simpleaac-460e6.appspot.com" - }, - "client": [ - { - "client_info": { - "mobilesdk_app_id": "1:997985384352:android:747f808f59bc2f61e956c5", - "android_client_info": { - "package_name": "com.sealstudios.simpleaac.dev" - } - }, - "oauth_client": [ - { - "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyDmCr6eOqqXt41McT1I3g447yybMNCRSOM" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", - "client_type": 3 - } - ] - } - } - } - ], - "configuration_version": "1" -} \ No newline at end of file diff --git a/firebase/prod/GoogleService-Info.plist b/firebase/prod/GoogleService-Info.plist deleted file mode 100644 index 0cfc6d7..0000000 --- a/firebase/prod/GoogleService-Info.plist +++ /dev/null @@ -1,38 +0,0 @@ - - - - - CLIENT_ID - 997985384352-0u0p5o760tid55ditdo4kmt1jg8qkogv.apps.googleusercontent.com - REVERSED_CLIENT_ID - com.googleusercontent.apps.997985384352-0u0p5o760tid55ditdo4kmt1jg8qkogv - ANDROID_CLIENT_ID - 997985384352-cdb97sss33k0guqsl401b27ns33vijrp.apps.googleusercontent.com - API_KEY - AIzaSyCxVlQSXwse9EE9i8jURkH0d-a_PRo5gzo - GCM_SENDER_ID - 997985384352 - PLIST_VERSION - 1 - BUNDLE_ID - com.sealstudios.simpleaac.prod - PROJECT_ID - simpleaac-460e6 - STORAGE_BUCKET - simpleaac-460e6.appspot.com - IS_ADS_ENABLED - - IS_ANALYTICS_ENABLED - - IS_APPINVITE_ENABLED - - IS_GCM_ENABLED - - IS_SIGNIN_ENABLED - - GOOGLE_APP_ID - 1:997985384352:ios:94cb723559aadb76e956c5 - DATABASE_URL - https://simpleaac-460e6.firebaseio.com - - \ No newline at end of file diff --git a/firebase/prod/google-services.json b/firebase/prod/google-services.json deleted file mode 100644 index 7fcc58e..0000000 --- a/firebase/prod/google-services.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "project_info": { - "project_number": "997985384352", - "firebase_url": "https://simpleaac-460e6.firebaseio.com", - "project_id": "simpleaac-460e6", - "storage_bucket": "simpleaac-460e6.appspot.com" - }, - "client": [ - { - "client_info": { - "mobilesdk_app_id": "1:997985384352:android:747f808f59bc2f61e956c5", - "android_client_info": { - "package_name": "com.sealstudios.simpleaac.dev" - } - }, - "oauth_client": [ - { - "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyDmCr6eOqqXt41McT1I3g447yybMNCRSOM" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", - "client_type": 3 - } - ] - } - } - }, - { - "client_info": { - "mobilesdk_app_id": "1:997985384352:android:e3338caf351ccfd4e956c5", - "android_client_info": { - "package_name": "com.sealstudios.simpleaac.prod" - } - }, - "oauth_client": [ - { - "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyDmCr6eOqqXt41McT1I3g447yybMNCRSOM" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", - "client_type": 3 - } - ] - } - } - }, - { - "client_info": { - "mobilesdk_app_id": "1:997985384352:android:d3f54281f1f161d5e956c5", - "android_client_info": { - "package_name": "com.sealstudios.simpleaac.uat" - } - }, - "oauth_client": [ - { - "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyDmCr6eOqqXt41McT1I3g447yybMNCRSOM" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", - "client_type": 3 - } - ] - } - } - } - ], - "configuration_version": "1" -} \ No newline at end of file diff --git a/firebase/uat/GoogleService-Info.plist b/firebase/uat/GoogleService-Info.plist deleted file mode 100644 index f075a97..0000000 --- a/firebase/uat/GoogleService-Info.plist +++ /dev/null @@ -1,38 +0,0 @@ - - - - - CLIENT_ID - 997985384352-1rpmqc97asd8gogs8flt3uo997s99mkb.apps.googleusercontent.com - REVERSED_CLIENT_ID - com.googleusercontent.apps.997985384352-1rpmqc97asd8gogs8flt3uo997s99mkb - ANDROID_CLIENT_ID - 997985384352-cdb97sss33k0guqsl401b27ns33vijrp.apps.googleusercontent.com - API_KEY - AIzaSyCxVlQSXwse9EE9i8jURkH0d-a_PRo5gzo - GCM_SENDER_ID - 997985384352 - PLIST_VERSION - 1 - BUNDLE_ID - com.sealstudios.simpleaac.uat - PROJECT_ID - simpleaac-460e6 - STORAGE_BUCKET - simpleaac-460e6.appspot.com - IS_ADS_ENABLED - - IS_ANALYTICS_ENABLED - - IS_APPINVITE_ENABLED - - IS_GCM_ENABLED - - IS_SIGNIN_ENABLED - - GOOGLE_APP_ID - 1:997985384352:ios:5f5bde12086d293be956c5 - DATABASE_URL - https://simpleaac-460e6.firebaseio.com - - \ No newline at end of file diff --git a/firebase/uat/google-services.json b/firebase/uat/google-services.json deleted file mode 100644 index ab88f3c..0000000 --- a/firebase/uat/google-services.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "project_info": { - "project_number": "997985384352", - "firebase_url": "https://simpleaac-460e6.firebaseio.com", - "project_id": "simpleaac-460e6", - "storage_bucket": "simpleaac-460e6.appspot.com" - }, - "client": [ - { - "client_info": { - "mobilesdk_app_id": "1:997985384352:android:747f808f59bc2f61e956c5", - "android_client_info": { - "package_name": "com.sealstudios.simpleaac.dev" - } - }, - "oauth_client": [ - { - "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyDmCr6eOqqXt41McT1I3g447yybMNCRSOM" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", - "client_type": 3 - } - ] - } - } - }, - { - "client_info": { - "mobilesdk_app_id": "1:997985384352:android:d3f54281f1f161d5e956c5", - "android_client_info": { - "package_name": "com.sealstudios.simpleaac.uat" - } - }, - "oauth_client": [ - { - "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyDmCr6eOqqXt41McT1I3g447yybMNCRSOM" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com", - "client_type": 3 - } - ] - } - } - } - ], - "configuration_version": "1" -} \ No newline at end of file diff --git a/flutter_launcher_icons-dev.yaml b/flutter_launcher_icons-dev.yaml index af950be..f39e028 100644 --- a/flutter_launcher_icons-dev.yaml +++ b/flutter_launcher_icons-dev.yaml @@ -1,7 +1,14 @@ -flutter_icons: +flutter_launcher_icons: android: true - ios: true + ios: "devAppIcon" + remove_alpha_ios: true + adaptive_icon_foreground_inset: 22 adaptive_icon_background: "#FFFFFF" adaptive_icon_foreground: "assets/images/simple_aac_launcher_foreground.png" image_path_android: "assets/images/simple_aac_launcher_foreground.png" image_path_ios: "assets/images/simple_aac_white_background.png" + web: + generate: true + image_path: "assets/images/simple_aac_white_background.png" + background_color: "#FFFFFF" + theme_color: "#FFFFFF" diff --git a/flutter_launcher_icons-prod.yaml b/flutter_launcher_icons-prod.yaml index af950be..44043aa 100644 --- a/flutter_launcher_icons-prod.yaml +++ b/flutter_launcher_icons-prod.yaml @@ -1,7 +1,14 @@ -flutter_icons: +flutter_launcher_icons: android: true - ios: true + ios: "prodAppIcon" + remove_alpha_ios: true + adaptive_icon_foreground_inset: 22 adaptive_icon_background: "#FFFFFF" adaptive_icon_foreground: "assets/images/simple_aac_launcher_foreground.png" image_path_android: "assets/images/simple_aac_launcher_foreground.png" image_path_ios: "assets/images/simple_aac_white_background.png" + web: + generate: true + image_path: "assets/images/simple_aac_white_background.png" + background_color: "#FFFFFF" + theme_color: "#FFFFFF" diff --git a/flutter_launcher_icons-uat.yaml b/flutter_launcher_icons-uat.yaml index af950be..6c4e53d 100644 --- a/flutter_launcher_icons-uat.yaml +++ b/flutter_launcher_icons-uat.yaml @@ -1,7 +1,14 @@ -flutter_icons: +flutter_launcher_icons: android: true - ios: true + ios: "uatAppIcon" + remove_alpha_ios: true + adaptive_icon_foreground_inset: 22 adaptive_icon_background: "#FFFFFF" adaptive_icon_foreground: "assets/images/simple_aac_launcher_foreground.png" image_path_android: "assets/images/simple_aac_launcher_foreground.png" image_path_ios: "assets/images/simple_aac_white_background.png" + web: + generate: true + image_path: "assets/images/simple_aac_white_background.png" + background_color: "#FFFFFF" + theme_color: "#FFFFFF" diff --git a/generate_icons.py b/generate_icons.py new file mode 100644 index 0000000..2175366 --- /dev/null +++ b/generate_icons.py @@ -0,0 +1,704 @@ +import concurrent.futures +import json +import os +import re +import base64 +import time +from openai import OpenAI + +# ---------------------------------------------------- +# CONFIGURATION +# ---------------------------------------------------- +API_TOKEN = os.environ.get("OPENAI_API_KEY", "") +OUTPUT_DIR = "temp3/aac_images" +MAX_WORKERS = 1 + +client = OpenAI(api_key=API_TOKEN) + +FULL_DATA_JSON = """ +{ + "languages": [ + { + "id": "en", + "displayName": "English", + "words": [ + {"text": "I", "type": "grammar", "subType": "pronouns"}, + {"text": "you", "type": "grammar", "subType": "pronouns"}, + {"text": "he", "type": "grammar", "subType": "pronouns"}, + {"text": "she", "type": "grammar", "subType": "pronouns"}, + {"text": "it", "type": "grammar", "subType": "pronouns"}, + {"text": "we", "type": "grammar", "subType": "pronouns"}, + {"text": "they", "type": "grammar", "subType": "pronouns"}, + {"text": "me", "type": "grammar", "subType": "pronouns"}, + {"text": "him", "type": "grammar", "subType": "pronouns"}, + {"text": "her", "type": "grammar", "subType": "pronouns"}, + {"text": "this", "type": "grammar", "subType": "pronouns"}, + {"text": "that", "type": "grammar", "subType": "pronouns"}, + {"text": "my", "type": "grammar", "subType": "pronouns"}, + {"text": "your", "type": "grammar", "subType": "pronouns"}, + {"text": "and", "type": "grammar", "subType": "conjunctions"}, + {"text": "but", "type": "grammar", "subType": "conjunctions"}, + {"text": "or", "type": "grammar", "subType": "conjunctions"}, + {"text": "because", "type": "grammar", "subType": "conjunctions"}, + {"text": "if", "type": "grammar", "subType": "conjunctions"}, + {"text": "so", "type": "grammar", "subType": "conjunctions"}, + {"text": "in", "type": "grammar", "subType": "prepositions"}, + {"text": "on", "type": "grammar", "subType": "prepositions"}, + {"text": "under", "type": "grammar", "subType": "prepositions"}, + {"text": "up", "type": "grammar", "subType": "prepositions"}, + {"text": "down", "type": "grammar", "subType": "prepositions"}, + {"text": "with", "type": "grammar", "subType": "prepositions"}, + {"text": "to", "type": "grammar", "subType": "prepositions"}, + {"text": "from", "type": "grammar", "subType": "prepositions"}, + {"text": "out", "type": "grammar", "subType": "prepositions"}, + {"text": "off", "type": "grammar", "subType": "prepositions"}, + {"text": "for", "type": "grammar", "subType": "prepositions"}, + {"text": "about", "type": "grammar", "subType": "prepositions"}, + {"text": "next to", "type": "grammar", "subType": "prepositions"}, + {"text": "behind", "type": "grammar", "subType": "prepositions"}, + {"text": "ing", "type": "grammar", "subType": "suffix"}, + {"text": "ed", "type": "grammar", "subType": "suffix"}, + {"text": "s", "type": "grammar", "subType": "suffix"}, + {"text": "er", "type": "grammar", "subType": "suffix"}, + {"text": "eat", "type": "actions", "subType": "action"}, + {"text": "drink", "type": "actions", "subType": "action"}, + {"text": "go", "type": "actions", "subType": "action"}, + {"text": "want", "type": "actions", "subType": "action"}, + {"text": "see", "type": "actions", "subType": "action"}, + {"text": "look", "type": "actions", "subType": "action"}, + {"text": "play", "type": "actions", "subType": "action"}, + {"text": "sleep", "type": "actions", "subType": "action"}, + {"text": "stop", "type": "actions", "subType": "action"}, + {"text": "come", "type": "actions", "subType": "action"}, + {"text": "make", "type": "actions", "subType": "action"}, + {"text": "take", "type": "actions", "subType": "action"}, + {"text": "open", "type": "actions", "subType": "action"}, + {"text": "close", "type": "actions", "subType": "action"}, + {"text": "sit", "type": "actions", "subType": "action"}, + {"text": "stand", "type": "actions", "subType": "action"}, + {"text": "walk", "type": "actions", "subType": "action"}, + {"text": "run", "type": "actions", "subType": "action"}, + {"text": "jump", "type": "actions", "subType": "action"}, + {"text": "wash", "type": "actions", "subType": "action"}, + {"text": "clean", "type": "actions", "subType": "action"}, + {"text": "read", "type": "actions", "subType": "action"}, + {"text": "write", "type": "actions", "subType": "action"}, + {"text": "draw", "type": "actions", "subType": "action"}, + {"text": "paint", "type": "actions", "subType": "action"}, + {"text": "sing", "type": "actions", "subType": "action"}, + {"text": "dance", "type": "actions", "subType": "action"}, + {"text": "swim", "type": "actions", "subType": "action"}, + {"text": "ride", "type": "actions", "subType": "action"}, + {"text": "drive", "type": "actions", "subType": "action"}, + {"text": "fly", "type": "actions", "subType": "action"}, + {"text": "climb", "type": "actions", "subType": "action"}, + {"text": "push", "type": "actions", "subType": "action"}, + {"text": "pull", "type": "actions", "subType": "action"}, + {"text": "throw", "type": "actions", "subType": "action"}, + {"text": "catch", "type": "actions", "subType": "action"}, + {"text": "kick", "type": "actions", "subType": "action"}, + {"text": "cook", "type": "actions", "subType": "action"}, + {"text": "bake", "type": "actions", "subType": "action"}, + {"text": "cut", "type": "actions", "subType": "action"}, + {"text": "glue", "type": "actions", "subType": "action"}, + {"text": "listen", "type": "actions", "subType": "action"}, + {"text": "talk", "type": "actions", "subType": "action"}, + {"text": "say", "type": "actions", "subType": "action"}, + {"text": "tell", "type": "actions", "subType": "action"}, + {"text": "ask", "type": "actions", "subType": "action"}, + {"text": "share", "type": "actions", "subType": "action"}, + {"text": "buy", "type": "actions", "subType": "action"}, + {"text": "find", "type": "actions", "subType": "action"}, + {"text": "hide", "type": "actions", "subType": "action"}, + {"text": "lose", "type": "actions", "subType": "action"}, + {"text": "win", "type": "actions", "subType": "action"}, + {"text": "smile", "type": "actions", "subType": "action"}, + {"text": "cry", "type": "actions", "subType": "action"}, + {"text": "laugh", "type": "actions", "subType": "action"}, + {"text": "cough", "type": "actions", "subType": "action"}, + {"text": "sneeze", "type": "actions", "subType": "action"}, + {"text": "hug", "type": "actions", "subType": "action"}, + {"text": "kiss", "type": "actions", "subType": "action"}, + {"text": "think", "type": "actions", "subType": "action"}, + {"text": "know", "type": "actions", "subType": "action"}, + {"text": "forget", "type": "actions", "subType": "action"}, + {"text": "remember", "type": "actions", "subType": "action"}, + {"text": "learn", "type": "actions", "subType": "action"}, + {"text": "teach", "type": "actions", "subType": "action"}, + {"text": "work", "type": "actions", "subType": "action"}, + {"text": "break", "type": "actions", "subType": "action"}, + {"text": "fix", "type": "actions", "subType": "action"}, + {"text": "build", "type": "actions", "subType": "action"}, + {"text": "drop", "type": "actions", "subType": "action"}, + {"text": "lift", "type": "actions", "subType": "action"}, + {"text": "carry", "type": "actions", "subType": "action"}, + {"text": "show", "type": "actions", "subType": "action"}, + {"text": "give", "type": "actions", "subType": "action"}, + {"text": "get", "type": "actions", "subType": "action"}, + {"text": "keep", "type": "actions", "subType": "action"}, + {"text": "hold", "type": "actions", "subType": "action"}, + {"text": "wait", "type": "actions", "subType": "action"}, + {"text": "brush", "type": "actions", "subType": "action"}, + {"text": "tie", "type": "actions", "subType": "action"}, + {"text": "dress", "type": "actions", "subType": "action"}, + {"text": "pack", "type": "actions", "subType": "action"}, + {"text": "fall", "type": "actions", "subType": "action"}, + {"text": "help", "type": "actions", "subType": "action"}, + {"text": "can", "type": "actions", "subType": "helping"}, + {"text": "will", "type": "actions", "subType": "helping"}, + {"text": "do", "type": "actions", "subType": "helping"}, + {"text": "did", "type": "actions", "subType": "helping"}, + {"text": "is", "type": "actions", "subType": "helping"}, + {"text": "am", "type": "actions", "subType": "helping"}, + {"text": "are", "type": "actions", "subType": "helping"}, + {"text": "was", "type": "actions", "subType": "helping"}, + {"text": "were", "type": "actions", "subType": "helping"}, + {"text": "have", "type": "actions", "subType": "helping"}, + {"text": "has", "type": "actions", "subType": "helping"}, + {"text": "had", "type": "actions", "subType": "helping"}, + {"text": "could", "type": "actions", "subType": "helping"}, + {"text": "would", "type": "actions", "subType": "helping"}, + {"text": "should", "type": "actions", "subType": "helping"}, + {"text": "may", "type": "actions", "subType": "helping"}, + {"text": "must", "type": "actions", "subType": "helping"}, + {"text": "hurt", "type": "actions", "subType": "strong"}, + {"text": "need", "type": "actions", "subType": "strong"}, + {"text": "good", "type": "describe", "subType": "adjectives"}, + {"text": "bad", "type": "describe", "subType": "adjectives"}, + {"text": "big", "type": "describe", "subType": "adjectives"}, + {"text": "little", "type": "describe", "subType": "adjectives"}, + {"text": "hot", "type": "describe", "subType": "adjectives"}, + {"text": "cold", "type": "describe", "subType": "adjectives"}, + {"text": "fast", "type": "describe", "subType": "adjectives"}, + {"text": "slow", "type": "describe", "subType": "adjectives"}, + {"text": "happy", "type": "describe", "subType": "adjectives"}, + {"text": "sad", "type": "describe", "subType": "adjectives"}, + {"text": "angry", "type": "describe", "subType": "adjectives"}, + {"text": "scared", "type": "describe", "subType": "adjectives"}, + {"text": "tired", "type": "describe", "subType": "adjectives"}, + {"text": "sick", "type": "describe", "subType": "adjectives"}, + {"text": "clean", "type": "describe", "subType": "adjectives"}, + {"text": "dirty", "type": "describe", "subType": "adjectives"}, + {"text": "wet", "type": "describe", "subType": "adjectives"}, + {"text": "dry", "type": "describe", "subType": "adjectives"}, + {"text": "soft", "type": "describe", "subType": "adjectives"}, + {"text": "hard", "type": "describe", "subType": "adjectives"}, + {"text": "heavy", "type": "describe", "subType": "adjectives"}, + {"text": "light", "type": "describe", "subType": "adjectives"}, + {"text": "new", "type": "describe", "subType": "adjectives"}, + {"text": "old", "type": "describe", "subType": "adjectives"}, + {"text": "beautiful", "type": "describe", "subType": "adjectives"}, + {"text": "ugly", "type": "describe", "subType": "adjectives"}, + {"text": "sweet", "type": "describe", "subType": "adjectives"}, + {"text": "sour", "type": "describe", "subType": "adjectives"}, + {"text": "salty", "type": "describe", "subType": "adjectives"}, + {"text": "loud", "type": "describe", "subType": "adjectives"}, + {"text": "quiet", "type": "describe", "subType": "adjectives"}, + {"text": "red", "type": "describe", "subType": "adjectives"}, + {"text": "blue", "type": "describe", "subType": "adjectives"}, + {"text": "green", "type": "describe", "subType": "adjectives"}, + {"text": "yellow", "type": "describe", "subType": "adjectives"}, + {"text": "black", "type": "describe", "subType": "adjectives"}, + {"text": "white", "type": "describe", "subType": "adjectives"}, + {"text": "orange", "type": "describe", "subType": "adjectives"}, + {"text": "purple", "type": "describe", "subType": "adjectives"}, + {"text": "pink", "type": "describe", "subType": "adjectives"}, + {"text": "brown", "type": "describe", "subType": "adjectives"}, + {"text": "gray", "type": "describe", "subType": "adjectives"}, + {"text": "broken", "type": "describe", "subType": "adjectives"}, + {"text": "empty", "type": "describe", "subType": "adjectives"}, + {"text": "full", "type": "describe", "subType": "adjectives"}, + {"text": "hungry", "type": "describe", "subType": "adjectives"}, + {"text": "thirsty", "type": "describe", "subType": "adjectives"}, + {"text": "funny", "type": "describe", "subType": "adjectives"}, + {"text": "boring", "type": "describe", "subType": "adjectives"}, + {"text": "scary", "type": "describe", "subType": "adjectives"}, + {"text": "brave", "type": "describe", "subType": "adjectives"}, + {"text": "mean", "type": "describe", "subType": "adjectives"}, + {"text": "kind", "type": "describe", "subType": "adjectives"}, + {"text": "easy", "type": "describe", "subType": "adjectives"}, + {"text": "difficult", "type": "describe", "subType": "adjectives"}, + {"text": "wrong", "type": "describe", "subType": "adjectives"}, + {"text": "right", "type": "describe", "subType": "adjectives"}, + {"text": "safe", "type": "describe", "subType": "adjectives"}, + {"text": "dangerous", "type": "describe", "subType": "adjectives"}, + {"text": "see", "type": "describe", "subType": "sense"}, + {"text": "hear", "type": "describe", "subType": "sense"}, + {"text": "smell", "type": "describe", "subType": "sense"}, + {"text": "taste", "type": "describe", "subType": "sense"}, + {"text": "touch", "type": "describe", "subType": "sense"}, + {"text": "feel", "type": "describe", "subType": "sense"}, + {"text": "excited", "type": "describe", "subType": "feeling"}, + {"text": "bored", "type": "describe", "subType": "feeling"}, + {"text": "worried", "type": "describe", "subType": "feeling"}, + {"text": "surprised", "type": "describe", "subType": "feeling"}, + {"text": "proud", "type": "describe", "subType": "feeling"}, + {"text": "jealous", "type": "describe", "subType": "feeling"}, + {"text": "lonely", "type": "describe", "subType": "feeling"}, + {"text": "nervous", "type": "describe", "subType": "feeling"}, + {"text": "calm", "type": "describe", "subType": "feeling"}, + {"text": "confused", "type": "describe", "subType": "feeling"}, + {"text": "frustrated", "type": "describe", "subType": "feeling"}, + {"text": "silly", "type": "describe", "subType": "feeling"}, + {"text": "smart", "type": "describe", "subType": "thought"}, + {"text": "crazy", "type": "describe", "subType": "thought"}, + {"text": "creative", "type": "describe", "subType": "thought"}, + {"text": "wise", "type": "describe", "subType": "thought"}, + {"text": "careful", "type": "describe", "subType": "thought"}, + {"text": "thank you", "type": "social", "subType": "phrases"}, + {"text": "please", "type": "social", "subType": "phrases"}, + {"text": "excuse me", "type": "social", "subType": "phrases"}, + {"text": "i don't know", "type": "social", "subType": "phrases"}, + {"text": "im sorry", "type": "social", "subType": "phrases"}, + {"text": "no thank you", "type": "social", "subType": "phrases"}, + {"text": "your turn", "type": "social", "subType": "phrases"}, + {"text": "my turn", "type": "social", "subType": "phrases"}, + {"text": "all done", "type": "social", "subType": "phrases"}, + {"text": "help please", "type": "social", "subType": "phrases"}, + {"text": "more please", "type": "social", "subType": "phrases"}, + {"text": "yes please", "type": "social", "subType": "phrases"}, + {"text": "like", "type": "social", "subType": "favourites"}, + {"text": "love", "type": "social", "subType": "favourites"}, + {"text": "hate", "type": "social", "subType": "favourites"}, + {"text": "favorite", "type": "social", "subType": "favourites"}, + {"text": "best", "type": "social", "subType": "favourites"}, + {"text": "worst", "type": "social", "subType": "favourites"}, + {"text": "hello", "type": "social", "subType": "greetings"}, + {"text": "bye bye", "type": "social", "subType": "greetings"}, + {"text": "good morning", "type": "social", "subType": "greetings"}, + {"text": "good night", "type": "social", "subType": "greetings"}, + {"text": "hi", "type": "social", "subType": "greetings"}, + {"text": "welcome", "type": "social", "subType": "greetings"}, + {"text": "see you later", "type": "social", "subType": "greetings"}, + {"text": "how are you", "type": "social", "subType": "greetings"}, + {"text": "mom", "type": "things", "subType": "people"}, + {"text": "dad", "type": "things", "subType": "people"}, + {"text": "brother", "type": "things", "subType": "people"}, + {"text": "sister", "type": "things", "subType": "people"}, + {"text": "baby", "type": "things", "subType": "people"}, + {"text": "grandma", "type": "things", "subType": "people"}, + {"text": "grandpa", "type": "things", "subType": "people"}, + {"text": "teacher", "type": "things", "subType": "people"}, + {"text": "doctor", "type": "things", "subType": "people"}, + {"text": "nurse", "type": "things", "subType": "people"}, + {"text": "friend", "type": "things", "subType": "people"}, + {"text": "boy", "type": "things", "subType": "people"}, + {"text": "girl", "type": "things", "subType": "people"}, + {"text": "man", "type": "things", "subType": "people"}, + {"text": "woman", "type": "things", "subType": "people"}, + {"text": "dentist", "type": "things", "subType": "people"}, + {"text": "firefighter", "type": "things", "subType": "people"}, + {"text": "student", "type": "things", "subType": "people"}, + {"text": "family", "type": "things", "subType": "people"}, + {"text": "dog", "type": "things", "subType": "animals"}, + {"text": "cat", "type": "things", "subType": "animals"}, + {"text": "bird", "type": "things", "subType": "animals"}, + {"text": "fish", "type": "things", "subType": "animals"}, + {"text": "horse", "type": "things", "subType": "animals"}, + {"text": "cow", "type": "things", "subType": "animals"}, + {"text": "pig", "type": "things", "subType": "animals"}, + {"text": "sheep", "type": "things", "subType": "animals"}, + {"text": "chicken", "type": "things", "subType": "animals"}, + {"text": "duck", "type": "things", "subType": "animals"}, + {"text": "lion", "type": "things", "subType": "animals"}, + {"text": "tiger", "type": "things", "subType": "animals"}, + {"text": "bear", "type": "things", "subType": "animals"}, + {"text": "elephant", "type": "things", "subType": "animals"}, + {"text": "monkey", "type": "things", "subType": "animals"}, + {"text": "giraffe", "type": "things", "subType": "animals"}, + {"text": "rabbit", "type": "things", "subType": "animals"}, + {"text": "mouse", "type": "things", "subType": "animals"}, + {"text": "frog", "type": "things", "subType": "animals"}, + {"text": "snake", "type": "things", "subType": "animals"}, + {"text": "turtle", "type": "things", "subType": "animals"}, + {"text": "spider", "type": "things", "subType": "animals"}, + {"text": "bee", "type": "things", "subType": "animals"}, + {"text": "butterfly", "type": "things", "subType": "animals"}, + {"text": "shark", "type": "things", "subType": "animals"}, + {"text": "whale", "type": "things", "subType": "animals"}, + {"text": "dolphin", "type": "things", "subType": "animals"}, + {"text": "penguin", "type": "things", "subType": "animals"}, + {"text": "owl", "type": "things", "subType": "animals"}, + {"text": "fox", "type": "things", "subType": "animals"}, + {"text": "tree", "type": "things", "subType": "nature"}, + {"text": "flower", "type": "things", "subType": "nature"}, + {"text": "grass", "type": "things", "subType": "nature"}, + {"text": "sun", "type": "things", "subType": "nature"}, + {"text": "moon", "type": "things", "subType": "nature"}, + {"text": "star", "type": "things", "subType": "nature"}, + {"text": "cloud", "type": "things", "subType": "nature"}, + {"text": "rain", "type": "things", "subType": "nature"}, + {"text": "snow", "type": "things", "subType": "nature"}, + {"text": "wind", "type": "things", "subType": "nature"}, + {"text": "sky", "type": "things", "subType": "nature"}, + {"text": "water", "type": "things", "subType": "nature"}, + {"text": "fire", "type": "things", "subType": "nature"}, + {"text": "rock", "type": "things", "subType": "nature"}, + {"text": "dirt", "type": "things", "subType": "nature"}, + {"text": "leaf", "type": "things", "subType": "nature"}, + {"text": "river", "type": "things", "subType": "nature"}, + {"text": "ocean", "type": "things", "subType": "nature"}, + {"text": "mountain", "type": "things", "subType": "nature"}, + {"text": "sand", "type": "things", "subType": "nature"}, + {"text": "apple", "type": "things", "subType": "food"}, + {"text": "banana", "type": "things", "subType": "food"}, + {"text": "grapes", "type": "things", "subType": "food"}, + {"text": "strawberry", "type": "things", "subType": "food"}, + {"text": "watermelon", "type": "things", "subType": "food"}, + {"text": "carrot", "type": "things", "subType": "food"}, + {"text": "broccoli", "type": "things", "subType": "food"}, + {"text": "potato", "type": "things", "subType": "food"}, + {"text": "tomato", "type": "things", "subType": "food"}, + {"text": "corn", "type": "things", "subType": "food"}, + {"text": "cucumber", "type": "things", "subType": "food"}, + {"text": "bread", "type": "things", "subType": "food"}, + {"text": "rice", "type": "things", "subType": "food"}, + {"text": "pasta", "type": "things", "subType": "food"}, + {"text": "pizza", "type": "things", "subType": "food"}, + {"text": "burger", "type": "things", "subType": "food"}, + {"text": "sandwich", "type": "things", "subType": "food"}, + {"text": "meat", "type": "things", "subType": "food"}, + {"text": "egg", "type": "things", "subType": "food"}, + {"text": "cheese", "type": "things", "subType": "food"}, + {"text": "yogurt", "type": "things", "subType": "food"}, + {"text": "soup", "type": "things", "subType": "food"}, + {"text": "salad", "type": "things", "subType": "food"}, + {"text": "cereal", "type": "things", "subType": "food"}, + {"text": "pancakes", "type": "things", "subType": "food"}, + {"text": "cookie", "type": "things", "subType": "food"}, + {"text": "cake", "type": "things", "subType": "food"}, + {"text": "ice cream", "type": "things", "subType": "food"}, + {"text": "candy", "type": "things", "subType": "food"}, + {"text": "chocolate", "type": "things", "subType": "food"}, + {"text": "chips", "type": "things", "subType": "food"}, + {"text": "popcorn", "type": "things", "subType": "food"}, + {"text": "snack", "type": "things", "subType": "food"}, + {"text": "milk", "type": "things", "subType": "drink"}, + {"text": "juice", "type": "things", "subType": "drink"}, + {"text": "tea", "type": "things", "subType": "drink"}, + {"text": "coffee", "type": "things", "subType": "drink"}, + {"text": "soda", "type": "things", "subType": "drink"}, + {"text": "hot chocolate", "type": "things", "subType": "drink"}, + {"text": "smoothie", "type": "things", "subType": "drink"}, + {"text": "head", "type": "things", "subType": "body"}, + {"text": "hair", "type": "things", "subType": "body"}, + {"text": "face", "type": "things", "subType": "body"}, + {"text": "eye", "type": "things", "subType": "body"}, + {"text": "ear", "type": "things", "subType": "body"}, + {"text": "nose", "type": "things", "subType": "body"}, + {"text": "mouth", "type": "things", "subType": "body"}, + {"text": "teeth", "type": "things", "subType": "body"}, + {"text": "tongue", "type": "things", "subType": "body"}, + {"text": "neck", "type": "things", "subType": "body"}, + {"text": "shoulder", "type": "things", "subType": "body"}, + {"text": "arm", "type": "things", "subType": "body"}, + {"text": "elbow", "type": "things", "subType": "body"}, + {"text": "hand", "type": "things", "subType": "body"}, + {"text": "finger", "type": "things", "subType": "body"}, + {"text": "thumb", "type": "things", "subType": "body"}, + {"text": "stomach", "type": "things", "subType": "body"}, + {"text": "leg", "type": "things", "subType": "body"}, + {"text": "knee", "type": "things", "subType": "body"}, + {"text": "foot", "type": "things", "subType": "body"}, + {"text": "toe", "type": "things", "subType": "body"}, + {"text": "back", "type": "things", "subType": "body"}, + {"text": "heart", "type": "things", "subType": "body"}, + {"text": "shirt", "type": "things", "subType": "clothes"}, + {"text": "pants", "type": "things", "subType": "clothes"}, + {"text": "shorts", "type": "things", "subType": "clothes"}, + {"text": "skirt", "type": "things", "subType": "clothes"}, + {"text": "dress", "type": "things", "subType": "clothes"}, + {"text": "jacket", "type": "things", "subType": "clothes"}, + {"text": "coat", "type": "things", "subType": "clothes"}, + {"text": "sweater", "type": "things", "subType": "clothes"}, + {"text": "pajamas", "type": "things", "subType": "clothes"}, + {"text": "underwear", "type": "things", "subType": "clothes"}, + {"text": "socks", "type": "things", "subType": "clothes"}, + {"text": "shoes", "type": "things", "subType": "clothes"}, + {"text": "boots", "type": "things", "subType": "clothes"}, + {"text": "hat", "type": "things", "subType": "clothes"}, + {"text": "cap", "type": "things", "subType": "clothes"}, + {"text": "gloves", "type": "things", "subType": "clothes"}, + {"text": "scarf", "type": "things", "subType": "clothes"}, + {"text": "swimsuit", "type": "things", "subType": "clothes"}, + {"text": "belt", "type": "things", "subType": "clothes"}, + {"text": "glasses", "type": "things", "subType": "clothes"}, + {"text": "house", "type": "things", "subType": "home"}, + {"text": "room", "type": "things", "subType": "home"}, + {"text": "kitchen", "type": "things", "subType": "home"}, + {"text": "bathroom", "type": "things", "subType": "home"}, + {"text": "bedroom", "type": "things", "subType": "home"}, + {"text": "living room", "type": "things", "subType": "home"}, + {"text": "door", "type": "things", "subType": "home"}, + {"text": "window", "type": "things", "subType": "home"}, + {"text": "wall", "type": "things", "subType": "home"}, + {"text": "floor", "type": "things", "subType": "home"}, + {"text": "bed", "type": "things", "subType": "home"}, + {"text": "pillow", "type": "things", "subType": "home"}, + {"text": "blanket", "type": "things", "subType": "home"}, + {"text": "table", "type": "things", "subType": "home"}, + {"text": "chair", "type": "things", "subType": "home"}, + {"text": "couch", "type": "things", "subType": "home"}, + {"text": "desk", "type": "things", "subType": "home"}, + {"text": "shelf", "type": "things", "subType": "home"}, + {"text": "closet", "type": "things", "subType": "home"}, + {"text": "lamp", "type": "things", "subType": "home"}, + {"text": "light", "type": "things", "subType": "home"}, + {"text": "tv", "type": "things", "subType": "home"}, + {"text": "computer", "type": "things", "subType": "home"}, + {"text": "phone", "type": "things", "subType": "home"}, + {"text": "clock", "type": "things", "subType": "home"}, + {"text": "mirror", "type": "things", "subType": "home"}, + {"text": "sink", "type": "things", "subType": "home"}, + {"text": "toilet", "type": "things", "subType": "home"}, + {"text": "shower", "type": "things", "subType": "home"}, + {"text": "bathtub", "type": "things", "subType": "home"}, + {"text": "fridge", "type": "things", "subType": "home"}, + {"text": "oven", "type": "things", "subType": "home"}, + {"text": "microwave", "type": "things", "subType": "home"}, + {"text": "plate", "type": "things", "subType": "home"}, + {"text": "bowl", "type": "things", "subType": "home"}, + {"text": "cup", "type": "things", "subType": "home"}, + {"text": "fork", "type": "things", "subType": "home"}, + {"text": "spoon", "type": "things", "subType": "home"}, + {"text": "knife", "type": "things", "subType": "home"}, + {"text": "trash can", "type": "things", "subType": "home"}, + {"text": "key", "type": "things", "subType": "home"}, + {"text": "toy", "type": "things", "subType": "home"}, + {"text": "book", "type": "things", "subType": "home"}, + {"text": "backpack", "type": "things", "subType": "home"}, + {"text": "towel", "type": "things", "subType": "home"}, + {"text": "soap", "type": "things", "subType": "home"}, + {"text": "toothbrush", "type": "things", "subType": "home"}, + {"text": "toothpaste", "type": "things", "subType": "home"}, + {"text": "shampoo", "type": "things", "subType": "home"}, + {"text": "paper", "type": "things", "subType": "home"}, + {"text": "pencil", "type": "things", "subType": "home"}, + {"text": "pen", "type": "things", "subType": "home"}, + {"text": "crayons", "type": "things", "subType": "home"}, + {"text": "scissors", "type": "things", "subType": "home"}, + {"text": "bus", "type": "things", "subType": "travel"}, + {"text": "train", "type": "things", "subType": "travel"}, + {"text": "motorcycle", "type": "things", "subType": "travel"}, + {"text": "truck", "type": "things", "subType": "travel"}, + {"text": "boat", "type": "things", "subType": "travel"}, + {"text": "ship", "type": "things", "subType": "travel"}, + {"text": "subway", "type": "things", "subType": "travel"}, + {"text": "taxi", "type": "things", "subType": "travel"}, + {"text": "helicopter", "type": "things", "subType": "travel"}, + {"text": "stroller", "type": "things", "subType": "travel"}, + {"text": "suitcase", "type": "things", "subType": "travel"}, + {"text": "ticket", "type": "things", "subType": "travel"}, + {"text": "map", "type": "things", "subType": "travel"}, + {"text": "hospital", "type": "things", "subType": "places"}, + {"text": "school", "type": "things", "subType": "places"}, + {"text": "park", "type": "things", "subType": "places"}, + {"text": "store", "type": "things", "subType": "places"}, + {"text": "hospital", "type": "things", "subType": "places"}, + {"text": "library", "type": "things", "subType": "places"}, + {"text": "restaurant", "type": "things", "subType": "places"}, + {"text": "beach", "type": "things", "subType": "places"}, + {"text": "pool", "type": "things", "subType": "places"}, + {"text": "playground", "type": "things", "subType": "places"}, + {"text": "zoo", "type": "things", "subType": "places"}, + {"text": "farm", "type": "things", "subType": "places"}, + {"text": "garden", "type": "things", "subType": "places"}, + {"text": "yard", "type": "things", "subType": "places"}, + {"text": "office", "type": "things", "subType": "places"}, + {"text": "theater", "type": "things", "subType": "places"}, + {"text": "museum", "type": "things", "subType": "places"}, + {"text": "picture", "type": "things", "subType": "art"}, + {"text": "drawing", "type": "things", "subType": "art"}, + {"text": "painting", "type": "things", "subType": "art"}, + {"text": "clay", "type": "things", "subType": "art"}, + {"text": "markers", "type": "things", "subType": "art"}, + {"text": "chalk", "type": "things", "subType": "art"}, + {"text": "stickers", "type": "things", "subType": "art"}, + {"text": "stamp", "type": "things", "subType": "art"}, + {"text": "music", "type": "things", "subType": "music"}, + {"text": "song", "type": "things", "subType": "music"}, + {"text": "radio", "type": "things", "subType": "music"}, + {"text": "piano", "type": "things", "subType": "music"}, + {"text": "guitar", "type": "things", "subType": "music"}, + {"text": "drums", "type": "things", "subType": "music"}, + {"text": "flute", "type": "things", "subType": "music"}, + {"text": "bell", "type": "things", "subType": "music"}, + {"text": "game", "type": "things", "subType": "games"}, + {"text": "ball", "type": "things", "subType": "games"}, + {"text": "blocks", "type": "things", "subType": "games"}, + {"text": "puzzle", "type": "things", "subType": "games"}, + {"text": "doll", "type": "things", "subType": "games"}, + {"text": "lego", "type": "things", "subType": "games"}, + {"text": "cards", "type": "things", "subType": "games"}, + {"text": "dice", "type": "things", "subType": "games"}, + {"text": "swing", "type": "things", "subType": "games"}, + {"text": "slide", "type": "things", "subType": "games"}, + {"text": "sandbox", "type": "things", "subType": "games"}, + {"text": "bubble", "type": "things", "subType": "games"}, + {"text": "party", "type": "things", "subType": "occasions"}, + {"text": "birthday", "type": "things", "subType": "occasions"}, + {"text": "holiday", "type": "things", "subType": "occasions"}, + {"text": "christmas", "type": "things", "subType": "occasions"}, + {"text": "halloween", "type": "things", "subType": "occasions"}, + {"text": "wedding", "type": "things", "subType": "occasions"}, + {"text": "gift", "type": "things", "subType": "occasions"} + ] + } + ] +} +""" + + +def get_explicit_scene_description(word, item_type, sub_type): + w = word.lower().strip() + + colors = ["red", "blue", "green", "yellow", "black", "white", "orange", "purple", "pink", "brown", "gray"] + if w in colors: + return ( + f"One single clean cartoon stick figure character standing and holding out an oversized, prominent, perfectly round circle shape. " + f"The circle shape must be filled completely with a bright, vibrant solid flat coat of the color {w}. " + f"The character itself remains a clean white fill with a black outline, ensuring the colored circle is the main focus." + ) + + if sub_type == "suffix": + return ( + f"A single cartoon stick figure character holding up a large clean speech bubble. " + f"Inside the bubble is a simple visual symbol representing the concept of adding '{w}' to a word — " + f"shown as an arrow pointing to an extended shape or a sequence of two simple shapes joined together. No text or letters." + ) + + exceptions = { + "buy": "A cartoon stick figure character standing at a counter, handing a single clean round coin to another character to purchase a generic item.", + "airport": "A simple exterior line drawing of a large building terminal with a control tower, and one single airplane parked cleanly on the ground outside.", + "store": "A simple building structure with a prominent window display showing generic shapes, and an open front door indicator.", + "wall": "A clean, simple pattern of bricks stacked in alternating rows forming a standard wall section. Entirely static object. No faces, no characters, no heads.", + "soup": "A simple profile view outline of a bowl containing steaming hot soup with a spoon resting inside it. No faces, no human stick figures.", + "and": "Two separate simple geometric shapes (a circle next to a square) connected by a clear plus symbol (+) hovering between them.", + "but": "A line split down the center, on the left a happy character, on the right a sad character, representing a contrasting alternative.", + "because": "A character pointing at a large, prominent question mark, which leads cleanly into a lightbulb shape.", + "if": "A character standing at a fork in a path that splits into two clean branches labeled with simple arrow signs.", + "so": "A character pushing a large heavy block, which cleanly results in the block sliding forward down a slope.", + "in": "A character sitting entirely inside a transparent simple open outline of a box.", + "on": "A character sitting completely on top of a flat table surface outline.", + "under": "A character crouching completely beneath the structure outline of a clean table.", + "this": "A character standing immediately next to a small ball, pointing a finger directly down onto it.", + "that": "A character pointing its arm straight out towards a small ball located far away across the scene.", + } + + if w in exceptions: + return exceptions[w] + + if sub_type == "pronouns": + if w in ["i", "me", "my"]: + return "One single character standing perfectly alone, pointing its index finger directly at its own chest." + if w in ["you", "your"]: + return "One single character standing front-facing, pointing its index finger directly forward out at the viewer." + if w in ["she", "her"]: + return "Two distinct characters side-by-side. The figure on the right clearly wears a clean triangle-skirt dress outline. A separate black arrow points cleanly at the dress figure." + if w in ["he", "him"]: + return "Two distinct characters side-by-side. The figure on the right wears simple pant outlines. A separate black arrow points cleanly at the trouser-wearing figure." + if w in ["we"]: + return "Three friendly characters standing closely together arms-linked, forming a cooperative group." + if w in ["they"]: + return "Two neutral characters standing grouped together on the right side of the frame, with the viewer observing them from a slight distance." + + if item_type == "actions" or sub_type in ["action", "helping", "strong"]: + return f"One single character actively executing the literal movement of '{w}' clearly and simply. The figure has a perfectly round circle head and clean tubular limbs." + + if sub_type in ["food", "animals", "travel", "drink"] and w not in ["soup", "salad", "meat"]: + if sub_type == "travel": + return f"A clean, simple vehicle icon of a '{w}'. The front windshield area features two small solid black dot eyes and an integrated happy smile line across the front bumper." + if w in ["yogurt", "milk", "cereal", "soda"]: + return f"A simple product container cup or carton representing '{w}'. The main front surface wall of the container features two small solid black dot eyes and an integrated happy smile line." + return f"A clean, simple representation of a single '{w}' centered cleanly. The item features two simple solid black dot eyes and a happy smile line embedded directly onto its body surface." + + if item_type == "things" or sub_type in ["nature", "clothes", "home", "body", "places", "art", "music", "games", "occasions"]: + return f"Only one isolated, clean structural graphic object of a '{w}' centered in the canvas. Completely static object layout. Strictly NO eyes, NO smiles, NO faces, and NO human figures." + + return f"A clear, self-explanatory cartoon stick-figure scene explicitly visualizing the concept: '{w}'." + + +def generate_and_save_image(word_obj): + word = word_obj.get("text") + if not word: + return + + item_type = word_obj.get("type", "") + sub_type = word_obj.get("subType", "") + + safe_word = re.sub(r"[^\w\-_]", "_", word.lower()) + filename = os.path.join(OUTPUT_DIR, f"{safe_word}.png") + + # Leave your preferred files (rabbit.png, remember.png) alone in the folder so they are not replaced. + # Manually delete you.png, your.png, and pull.png to force their clean regeneration. + if os.path.exists(filename): + return + + scene_context = get_explicit_scene_description(word, item_type, sub_type) + + style_description = ( + "Strictly standardized minimalist pediatric AAC icon glyph. Purely flat, simple, clean 2D line-art style. " + "The icon features a uniform, single medium-thick black outline with flat solid white fills on a plain, clean flat white canvas. " + "Every single line must have a perfectly consistent, uniform weight throughout the image. " + "CRITICAL COMPOSITION LAW: Absolutely NO background boxes, NO border frames, NO floor surface lines, " + "and NO enclosure lines around characters or objects. The subject must float entirely on a clear white space. " + "STRICTLY NO TEXT, labels, letters, or words of any kind anywhere in the image. " + "CRITICAL ANTHROPOMORPHISM LAW: Faces and expressions are ONLY allowed on standalone living characters, animals, " + "vehicles, or integrated containers (like yogurt cups). Things like clothes, buildings, colors, and landscapes " + "must remain completely blank structural objects with absolutely NO eyes, mouths, or faces. " + "Visual style details: Heads are flat, plain, perfect white circles with NO nose, NO ears, NO hair, and NO eyebrows. " + "Eyes are simple solid black circles, and mouths are clean cheerful smile lines. Hands feature simple tubular shapes. " + "Absolutely NO gradients, NO shading, NO sketchy overlapping lines, and NO perspective depth. " + "Any arrows must be a single clean stroke line with a simple open V-shaped arrowhead — rounded line caps, no filled or outlined arrow shapes. " + "Clear, unshaded symbolic single-item line-art for: " + ) + + prompt = f"{style_description} {scene_context}" + + for attempt in range(5): + try: + response = client.images.generate( + model="gpt-image-1", + prompt=prompt, + n=1, + size="1024x1024", + quality="low", + background="opaque", + ) + + b64_data = response.data[0].b64_json + if not b64_data: + return + + img_bytes = base64.b64decode(b64_data) + with open(filename, "wb") as handler: + handler.write(img_bytes) + print(f"Successfully generated clean single-icon for: '{word}'") + return + + except Exception as e: + if "429" in str(e): + wait = 15 * (attempt + 1) + print(f"Rate limited on '{word}', retrying in {wait}s...") + time.sleep(wait) + else: + print(f"Failed for '{word}': {e}") + return + + +def main(): + if not os.path.exists(OUTPUT_DIR): + os.makedirs(OUTPUT_DIR) + + data = json.loads(FULL_DATA_JSON) + word_objects = data["languages"][0]["words"][20:30] + print(f"Loaded all {len(word_objects)} entries seamlessly.") + + with concurrent.futures.ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor: + executor.map(generate_and_save_image, word_objects) + + print("\nBatch execution complete.") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/generate_icons_cartoon.py b/generate_icons_cartoon.py new file mode 100644 index 0000000..76264a9 --- /dev/null +++ b/generate_icons_cartoon.py @@ -0,0 +1,794 @@ +import concurrent.futures +import json +import os +import re +import base64 +import time +import sys +from openai import OpenAI + +# ---------------------------------------------------- +# CONFIGURATION +# ---------------------------------------------------- +API_TOKEN = os.environ.get("OPENAI_API_KEY", "") +OUTPUT_DIR = "temp3/aac_images_cartoon" +PORTRAITS_DIR = "temp3/family" +MAX_WORKERS = 1 + +FAMILY = [ + { + "name": "boy", + "description": ( + "A small cheerful boy, round face, short dark brown hair, fair skin, " + "wearing a bright yellow t-shirt and blue shorts. Big friendly eyes, rosy cheeks, small button nose." + ), + }, + { + "name": "girl", + "description": ( + "A teenage girl, taller and slimmer build, long dark brown hair worn down, fair skin, " + "wearing a casual hoodie and jeans. Friendly eyes, light smile, relaxed confident pose." + ), + }, + { + "name": "mum", + "description": ( + "A woman in her 30s, warm light brown Indian skin tone, long straight dark hair, bright smile, " + "wearing a modern colourful top and jeans. Medium height, warm expressive dark eyes." + ), + }, + { + "name": "dad", + "description": ( + "A man in his 30s, fair skin, short light brown hair, friendly face, broad shoulders, " + "wearing a plain blue t-shirt. Big warm smile, clean shaven." + ), + }, + { + "name": "nan", + "description": ( + "An older Indian woman, warm golden-brown skin, grey hair in a traditional bun, " + "wearing a bright colourful sari. Round glasses, soft kind eyes, warm gentle smile, slightly shorter stature." + ), + }, + { + "name": "grandad", + "description": ( + "An older Indian man, warm golden-brown skin, white hair and a full white beard, round belly, " + "wearing a traditional kurta shirt. Warm crinkled eyes, big friendly grin." + ), + }, +] + +PORTRAIT_STYLE = ( + "Bright cheerful children's cartoon illustration. Flat 2D cartoon art, thick friendly black outlines, " + "vibrant solid fill colours, no gradients, no shading, no photo-realism. White background, no scene or environment. " + "Full body portrait, character standing upright with arms relaxed at sides, centred in frame, facing slightly toward the viewer. " + "Character has empty hands — NO tablets, NO phones, NO devices, NO props, NO objects of any kind. " + "STRICTLY NO TEXT or labels anywhere in the image." +) + +client = OpenAI(api_key=API_TOKEN) + +FULL_DATA_JSON = """ +{ + "languages": [ + { + "id": "en", + "displayName": "English", + "words": [ + {"text": "I", "type": "grammar", "subType": "pronouns"}, + {"text": "you", "type": "grammar", "subType": "pronouns"}, + {"text": "he", "type": "grammar", "subType": "pronouns"}, + {"text": "she", "type": "grammar", "subType": "pronouns"}, + {"text": "it", "type": "grammar", "subType": "pronouns"}, + {"text": "we", "type": "grammar", "subType": "pronouns"}, + {"text": "they", "type": "grammar", "subType": "pronouns"}, + {"text": "me", "type": "grammar", "subType": "pronouns"}, + {"text": "him", "type": "grammar", "subType": "pronouns"}, + {"text": "her", "type": "grammar", "subType": "pronouns"}, + {"text": "this", "type": "grammar", "subType": "pronouns"}, + {"text": "that", "type": "grammar", "subType": "pronouns"}, + {"text": "my", "type": "grammar", "subType": "pronouns"}, + {"text": "your", "type": "grammar", "subType": "pronouns"}, + {"text": "and", "type": "grammar", "subType": "conjunctions"}, + {"text": "but", "type": "grammar", "subType": "conjunctions"}, + {"text": "or", "type": "grammar", "subType": "conjunctions"}, + {"text": "because", "type": "grammar", "subType": "conjunctions"}, + {"text": "if", "type": "grammar", "subType": "conjunctions"}, + {"text": "so", "type": "grammar", "subType": "conjunctions"}, + {"text": "in", "type": "grammar", "subType": "prepositions"}, + {"text": "on", "type": "grammar", "subType": "prepositions"}, + {"text": "under", "type": "grammar", "subType": "prepositions"}, + {"text": "up", "type": "grammar", "subType": "prepositions"}, + {"text": "down", "type": "grammar", "subType": "prepositions"}, + {"text": "with", "type": "grammar", "subType": "prepositions"}, + {"text": "to", "type": "grammar", "subType": "prepositions"}, + {"text": "from", "type": "grammar", "subType": "prepositions"}, + {"text": "out", "type": "grammar", "subType": "prepositions"}, + {"text": "off", "type": "grammar", "subType": "prepositions"}, + {"text": "for", "type": "grammar", "subType": "prepositions"}, + {"text": "about", "type": "grammar", "subType": "prepositions"}, + {"text": "next to", "type": "grammar", "subType": "prepositions"}, + {"text": "behind", "type": "grammar", "subType": "prepositions"}, + {"text": "ing", "type": "grammar", "subType": "suffix"}, + {"text": "ed", "type": "grammar", "subType": "suffix"}, + {"text": "s", "type": "grammar", "subType": "suffix"}, + {"text": "er", "type": "grammar", "subType": "suffix"}, + {"text": "eat", "type": "actions", "subType": "action"}, + {"text": "drink", "type": "actions", "subType": "action"}, + {"text": "go", "type": "actions", "subType": "action"}, + {"text": "want", "type": "actions", "subType": "action"}, + {"text": "see", "type": "actions", "subType": "action"}, + {"text": "look", "type": "actions", "subType": "action"}, + {"text": "play", "type": "actions", "subType": "action"}, + {"text": "sleep", "type": "actions", "subType": "action"}, + {"text": "stop", "type": "actions", "subType": "action"}, + {"text": "come", "type": "actions", "subType": "action"}, + {"text": "make", "type": "actions", "subType": "action"}, + {"text": "take", "type": "actions", "subType": "action"}, + {"text": "open", "type": "actions", "subType": "action"}, + {"text": "close", "type": "actions", "subType": "action"}, + {"text": "sit", "type": "actions", "subType": "action"}, + {"text": "stand", "type": "actions", "subType": "action"}, + {"text": "walk", "type": "actions", "subType": "action"}, + {"text": "run", "type": "actions", "subType": "action"}, + {"text": "jump", "type": "actions", "subType": "action"}, + {"text": "wash", "type": "actions", "subType": "action"}, + {"text": "clean", "type": "actions", "subType": "action"}, + {"text": "read", "type": "actions", "subType": "action"}, + {"text": "write", "type": "actions", "subType": "action"}, + {"text": "draw", "type": "actions", "subType": "action"}, + {"text": "paint", "type": "actions", "subType": "action"}, + {"text": "sing", "type": "actions", "subType": "action"}, + {"text": "dance", "type": "actions", "subType": "action"}, + {"text": "swim", "type": "actions", "subType": "action"}, + {"text": "ride", "type": "actions", "subType": "action"}, + {"text": "drive", "type": "actions", "subType": "action"}, + {"text": "fly", "type": "actions", "subType": "action"}, + {"text": "climb", "type": "actions", "subType": "action"}, + {"text": "push", "type": "actions", "subType": "action"}, + {"text": "pull", "type": "actions", "subType": "action"}, + {"text": "throw", "type": "actions", "subType": "action"}, + {"text": "catch", "type": "actions", "subType": "action"}, + {"text": "kick", "type": "actions", "subType": "action"}, + {"text": "cook", "type": "actions", "subType": "action"}, + {"text": "bake", "type": "actions", "subType": "action"}, + {"text": "cut", "type": "actions", "subType": "action"}, + {"text": "glue", "type": "actions", "subType": "action"}, + {"text": "listen", "type": "actions", "subType": "action"}, + {"text": "talk", "type": "actions", "subType": "action"}, + {"text": "say", "type": "actions", "subType": "action"}, + {"text": "tell", "type": "actions", "subType": "action"}, + {"text": "ask", "type": "actions", "subType": "action"}, + {"text": "share", "type": "actions", "subType": "action"}, + {"text": "buy", "type": "actions", "subType": "action"}, + {"text": "find", "type": "actions", "subType": "action"}, + {"text": "hide", "type": "actions", "subType": "action"}, + {"text": "lose", "type": "actions", "subType": "action"}, + {"text": "win", "type": "actions", "subType": "action"}, + {"text": "smile", "type": "actions", "subType": "action"}, + {"text": "cry", "type": "actions", "subType": "action"}, + {"text": "laugh", "type": "actions", "subType": "action"}, + {"text": "cough", "type": "actions", "subType": "action"}, + {"text": "sneeze", "type": "actions", "subType": "action"}, + {"text": "hug", "type": "actions", "subType": "action"}, + {"text": "kiss", "type": "actions", "subType": "action"}, + {"text": "think", "type": "actions", "subType": "action"}, + {"text": "know", "type": "actions", "subType": "action"}, + {"text": "forget", "type": "actions", "subType": "action"}, + {"text": "remember", "type": "actions", "subType": "action"}, + {"text": "learn", "type": "actions", "subType": "action"}, + {"text": "teach", "type": "actions", "subType": "action"}, + {"text": "work", "type": "actions", "subType": "action"}, + {"text": "break", "type": "actions", "subType": "action"}, + {"text": "fix", "type": "actions", "subType": "action"}, + {"text": "build", "type": "actions", "subType": "action"}, + {"text": "drop", "type": "actions", "subType": "action"}, + {"text": "lift", "type": "actions", "subType": "action"}, + {"text": "carry", "type": "actions", "subType": "action"}, + {"text": "show", "type": "actions", "subType": "action"}, + {"text": "give", "type": "actions", "subType": "action"}, + {"text": "get", "type": "actions", "subType": "action"}, + {"text": "keep", "type": "actions", "subType": "action"}, + {"text": "hold", "type": "actions", "subType": "action"}, + {"text": "wait", "type": "actions", "subType": "action"}, + {"text": "brush", "type": "actions", "subType": "action"}, + {"text": "tie", "type": "actions", "subType": "action"}, + {"text": "dress", "type": "actions", "subType": "action"}, + {"text": "pack", "type": "actions", "subType": "action"}, + {"text": "fall", "type": "actions", "subType": "action"}, + {"text": "help", "type": "actions", "subType": "action"}, + {"text": "can", "type": "actions", "subType": "helping"}, + {"text": "will", "type": "actions", "subType": "helping"}, + {"text": "do", "type": "actions", "subType": "helping"}, + {"text": "did", "type": "actions", "subType": "helping"}, + {"text": "is", "type": "actions", "subType": "helping"}, + {"text": "am", "type": "actions", "subType": "helping"}, + {"text": "are", "type": "actions", "subType": "helping"}, + {"text": "was", "type": "actions", "subType": "helping"}, + {"text": "were", "type": "actions", "subType": "helping"}, + {"text": "have", "type": "actions", "subType": "helping"}, + {"text": "has", "type": "actions", "subType": "helping"}, + {"text": "had", "type": "actions", "subType": "helping"}, + {"text": "could", "type": "actions", "subType": "helping"}, + {"text": "would", "type": "actions", "subType": "helping"}, + {"text": "should", "type": "actions", "subType": "helping"}, + {"text": "may", "type": "actions", "subType": "helping"}, + {"text": "must", "type": "actions", "subType": "helping"}, + {"text": "hurt", "type": "actions", "subType": "strong"}, + {"text": "need", "type": "actions", "subType": "strong"}, + {"text": "good", "type": "describe", "subType": "adjectives"}, + {"text": "bad", "type": "describe", "subType": "adjectives"}, + {"text": "big", "type": "describe", "subType": "adjectives"}, + {"text": "little", "type": "describe", "subType": "adjectives"}, + {"text": "hot", "type": "describe", "subType": "adjectives"}, + {"text": "cold", "type": "describe", "subType": "adjectives"}, + {"text": "fast", "type": "describe", "subType": "adjectives"}, + {"text": "slow", "type": "describe", "subType": "adjectives"}, + {"text": "happy", "type": "describe", "subType": "adjectives"}, + {"text": "sad", "type": "describe", "subType": "adjectives"}, + {"text": "angry", "type": "describe", "subType": "adjectives"}, + {"text": "scared", "type": "describe", "subType": "adjectives"}, + {"text": "tired", "type": "describe", "subType": "adjectives"}, + {"text": "sick", "type": "describe", "subType": "adjectives"}, + {"text": "clean", "type": "describe", "subType": "adjectives"}, + {"text": "dirty", "type": "describe", "subType": "adjectives"}, + {"text": "wet", "type": "describe", "subType": "adjectives"}, + {"text": "dry", "type": "describe", "subType": "adjectives"}, + {"text": "soft", "type": "describe", "subType": "adjectives"}, + {"text": "hard", "type": "describe", "subType": "adjectives"}, + {"text": "heavy", "type": "describe", "subType": "adjectives"}, + {"text": "light", "type": "describe", "subType": "adjectives"}, + {"text": "new", "type": "describe", "subType": "adjectives"}, + {"text": "old", "type": "describe", "subType": "adjectives"}, + {"text": "beautiful", "type": "describe", "subType": "adjectives"}, + {"text": "ugly", "type": "describe", "subType": "adjectives"}, + {"text": "sweet", "type": "describe", "subType": "adjectives"}, + {"text": "sour", "type": "describe", "subType": "adjectives"}, + {"text": "salty", "type": "describe", "subType": "adjectives"}, + {"text": "loud", "type": "describe", "subType": "adjectives"}, + {"text": "quiet", "type": "describe", "subType": "adjectives"}, + {"text": "red", "type": "describe", "subType": "adjectives"}, + {"text": "blue", "type": "describe", "subType": "adjectives"}, + {"text": "green", "type": "describe", "subType": "adjectives"}, + {"text": "yellow", "type": "describe", "subType": "adjectives"}, + {"text": "black", "type": "describe", "subType": "adjectives"}, + {"text": "white", "type": "describe", "subType": "adjectives"}, + {"text": "orange", "type": "describe", "subType": "adjectives"}, + {"text": "purple", "type": "describe", "subType": "adjectives"}, + {"text": "pink", "type": "describe", "subType": "adjectives"}, + {"text": "brown", "type": "describe", "subType": "adjectives"}, + {"text": "gray", "type": "describe", "subType": "adjectives"}, + {"text": "broken", "type": "describe", "subType": "adjectives"}, + {"text": "empty", "type": "describe", "subType": "adjectives"}, + {"text": "full", "type": "describe", "subType": "adjectives"}, + {"text": "hungry", "type": "describe", "subType": "adjectives"}, + {"text": "thirsty", "type": "describe", "subType": "adjectives"}, + {"text": "funny", "type": "describe", "subType": "adjectives"}, + {"text": "boring", "type": "describe", "subType": "adjectives"}, + {"text": "scary", "type": "describe", "subType": "adjectives"}, + {"text": "brave", "type": "describe", "subType": "adjectives"}, + {"text": "mean", "type": "describe", "subType": "adjectives"}, + {"text": "kind", "type": "describe", "subType": "adjectives"}, + {"text": "easy", "type": "describe", "subType": "adjectives"}, + {"text": "difficult", "type": "describe", "subType": "adjectives"}, + {"text": "wrong", "type": "describe", "subType": "adjectives"}, + {"text": "right", "type": "describe", "subType": "adjectives"}, + {"text": "safe", "type": "describe", "subType": "adjectives"}, + {"text": "dangerous", "type": "describe", "subType": "adjectives"}, + {"text": "see", "type": "describe", "subType": "sense"}, + {"text": "hear", "type": "describe", "subType": "sense"}, + {"text": "smell", "type": "describe", "subType": "sense"}, + {"text": "taste", "type": "describe", "subType": "sense"}, + {"text": "touch", "type": "describe", "subType": "sense"}, + {"text": "feel", "type": "describe", "subType": "sense"}, + {"text": "excited", "type": "describe", "subType": "feeling"}, + {"text": "bored", "type": "describe", "subType": "feeling"}, + {"text": "worried", "type": "describe", "subType": "feeling"}, + {"text": "surprised", "type": "describe", "subType": "feeling"}, + {"text": "proud", "type": "describe", "subType": "feeling"}, + {"text": "jealous", "type": "describe", "subType": "feeling"}, + {"text": "lonely", "type": "describe", "subType": "feeling"}, + {"text": "nervous", "type": "describe", "subType": "feeling"}, + {"text": "calm", "type": "describe", "subType": "feeling"}, + {"text": "confused", "type": "describe", "subType": "feeling"}, + {"text": "frustrated", "type": "describe", "subType": "feeling"}, + {"text": "silly", "type": "describe", "subType": "feeling"}, + {"text": "smart", "type": "describe", "subType": "thought"}, + {"text": "crazy", "type": "describe", "subType": "thought"}, + {"text": "creative", "type": "describe", "subType": "thought"}, + {"text": "wise", "type": "describe", "subType": "thought"}, + {"text": "careful", "type": "describe", "subType": "thought"}, + {"text": "thank you", "type": "social", "subType": "phrases"}, + {"text": "please", "type": "social", "subType": "phrases"}, + {"text": "excuse me", "type": "social", "subType": "phrases"}, + {"text": "i don't know", "type": "social", "subType": "phrases"}, + {"text": "im sorry", "type": "social", "subType": "phrases"}, + {"text": "no thank you", "type": "social", "subType": "phrases"}, + {"text": "your turn", "type": "social", "subType": "phrases"}, + {"text": "my turn", "type": "social", "subType": "phrases"}, + {"text": "all done", "type": "social", "subType": "phrases"}, + {"text": "help please", "type": "social", "subType": "phrases"}, + {"text": "more please", "type": "social", "subType": "phrases"}, + {"text": "yes please", "type": "social", "subType": "phrases"}, + {"text": "like", "type": "social", "subType": "favourites"}, + {"text": "love", "type": "social", "subType": "favourites"}, + {"text": "hate", "type": "social", "subType": "favourites"}, + {"text": "favorite", "type": "social", "subType": "favourites"}, + {"text": "best", "type": "social", "subType": "favourites"}, + {"text": "worst", "type": "social", "subType": "favourites"}, + {"text": "hello", "type": "social", "subType": "greetings"}, + {"text": "bye bye", "type": "social", "subType": "greetings"}, + {"text": "good morning", "type": "social", "subType": "greetings"}, + {"text": "good night", "type": "social", "subType": "greetings"}, + {"text": "hi", "type": "social", "subType": "greetings"}, + {"text": "welcome", "type": "social", "subType": "greetings"}, + {"text": "see you later", "type": "social", "subType": "greetings"}, + {"text": "how are you", "type": "social", "subType": "greetings"}, + {"text": "mom", "type": "things", "subType": "people"}, + {"text": "dad", "type": "things", "subType": "people"}, + {"text": "brother", "type": "things", "subType": "people"}, + {"text": "sister", "type": "things", "subType": "people"}, + {"text": "baby", "type": "things", "subType": "people"}, + {"text": "grandma", "type": "things", "subType": "people"}, + {"text": "grandpa", "type": "things", "subType": "people"}, + {"text": "teacher", "type": "things", "subType": "people"}, + {"text": "doctor", "type": "things", "subType": "people"}, + {"text": "nurse", "type": "things", "subType": "people"}, + {"text": "friend", "type": "things", "subType": "people"}, + {"text": "boy", "type": "things", "subType": "people"}, + {"text": "girl", "type": "things", "subType": "people"}, + {"text": "man", "type": "things", "subType": "people"}, + {"text": "woman", "type": "things", "subType": "people"}, + {"text": "dentist", "type": "things", "subType": "people"}, + {"text": "firefighter", "type": "things", "subType": "people"}, + {"text": "student", "type": "things", "subType": "people"}, + {"text": "family", "type": "things", "subType": "people"}, + {"text": "dog", "type": "things", "subType": "animals"}, + {"text": "cat", "type": "things", "subType": "animals"}, + {"text": "bird", "type": "things", "subType": "animals"}, + {"text": "fish", "type": "things", "subType": "animals"}, + {"text": "horse", "type": "things", "subType": "animals"}, + {"text": "cow", "type": "things", "subType": "animals"}, + {"text": "pig", "type": "things", "subType": "animals"}, + {"text": "sheep", "type": "things", "subType": "animals"}, + {"text": "chicken", "type": "things", "subType": "animals"}, + {"text": "duck", "type": "things", "subType": "animals"}, + {"text": "lion", "type": "things", "subType": "animals"}, + {"text": "tiger", "type": "things", "subType": "animals"}, + {"text": "bear", "type": "things", "subType": "animals"}, + {"text": "elephant", "type": "things", "subType": "animals"}, + {"text": "monkey", "type": "things", "subType": "animals"}, + {"text": "giraffe", "type": "things", "subType": "animals"}, + {"text": "rabbit", "type": "things", "subType": "animals"}, + {"text": "mouse", "type": "things", "subType": "animals"}, + {"text": "frog", "type": "things", "subType": "animals"}, + {"text": "snake", "type": "things", "subType": "animals"}, + {"text": "turtle", "type": "things", "subType": "animals"}, + {"text": "spider", "type": "things", "subType": "animals"}, + {"text": "bee", "type": "things", "subType": "animals"}, + {"text": "butterfly", "type": "things", "subType": "animals"}, + {"text": "shark", "type": "things", "subType": "animals"}, + {"text": "whale", "type": "things", "subType": "animals"}, + {"text": "dolphin", "type": "things", "subType": "animals"}, + {"text": "penguin", "type": "things", "subType": "animals"}, + {"text": "owl", "type": "things", "subType": "animals"}, + {"text": "fox", "type": "things", "subType": "animals"}, + {"text": "tree", "type": "things", "subType": "nature"}, + {"text": "flower", "type": "things", "subType": "nature"}, + {"text": "grass", "type": "things", "subType": "nature"}, + {"text": "sun", "type": "things", "subType": "nature"}, + {"text": "moon", "type": "things", "subType": "nature"}, + {"text": "star", "type": "things", "subType": "nature"}, + {"text": "cloud", "type": "things", "subType": "nature"}, + {"text": "rain", "type": "things", "subType": "nature"}, + {"text": "snow", "type": "things", "subType": "nature"}, + {"text": "wind", "type": "things", "subType": "nature"}, + {"text": "sky", "type": "things", "subType": "nature"}, + {"text": "water", "type": "things", "subType": "nature"}, + {"text": "fire", "type": "things", "subType": "nature"}, + {"text": "rock", "type": "things", "subType": "nature"}, + {"text": "dirt", "type": "things", "subType": "nature"}, + {"text": "leaf", "type": "things", "subType": "nature"}, + {"text": "river", "type": "things", "subType": "nature"}, + {"text": "ocean", "type": "things", "subType": "nature"}, + {"text": "mountain", "type": "things", "subType": "nature"}, + {"text": "sand", "type": "things", "subType": "nature"}, + {"text": "apple", "type": "things", "subType": "food"}, + {"text": "banana", "type": "things", "subType": "food"}, + {"text": "grapes", "type": "things", "subType": "food"}, + {"text": "strawberry", "type": "things", "subType": "food"}, + {"text": "watermelon", "type": "things", "subType": "food"}, + {"text": "carrot", "type": "things", "subType": "food"}, + {"text": "broccoli", "type": "things", "subType": "food"}, + {"text": "potato", "type": "things", "subType": "food"}, + {"text": "tomato", "type": "things", "subType": "food"}, + {"text": "corn", "type": "things", "subType": "food"}, + {"text": "cucumber", "type": "things", "subType": "food"}, + {"text": "bread", "type": "things", "subType": "food"}, + {"text": "rice", "type": "things", "subType": "food"}, + {"text": "pasta", "type": "things", "subType": "food"}, + {"text": "pizza", "type": "things", "subType": "food"}, + {"text": "burger", "type": "things", "subType": "food"}, + {"text": "sandwich", "type": "things", "subType": "food"}, + {"text": "meat", "type": "things", "subType": "food"}, + {"text": "egg", "type": "things", "subType": "food"}, + {"text": "cheese", "type": "things", "subType": "food"}, + {"text": "yogurt", "type": "things", "subType": "food"}, + {"text": "soup", "type": "things", "subType": "food"}, + {"text": "salad", "type": "things", "subType": "food"}, + {"text": "cereal", "type": "things", "subType": "food"}, + {"text": "pancakes", "type": "things", "subType": "food"}, + {"text": "cookie", "type": "things", "subType": "food"}, + {"text": "cake", "type": "things", "subType": "food"}, + {"text": "ice cream", "type": "things", "subType": "food"}, + {"text": "candy", "type": "things", "subType": "food"}, + {"text": "chocolate", "type": "things", "subType": "food"}, + {"text": "chips", "type": "things", "subType": "food"}, + {"text": "popcorn", "type": "things", "subType": "food"}, + {"text": "snack", "type": "things", "subType": "food"}, + {"text": "milk", "type": "things", "subType": "drink"}, + {"text": "juice", "type": "things", "subType": "drink"}, + {"text": "tea", "type": "things", "subType": "drink"}, + {"text": "coffee", "type": "things", "subType": "drink"}, + {"text": "soda", "type": "things", "subType": "drink"}, + {"text": "hot chocolate", "type": "things", "subType": "drink"}, + {"text": "smoothie", "type": "things", "subType": "drink"}, + {"text": "head", "type": "things", "subType": "body"}, + {"text": "hair", "type": "things", "subType": "body"}, + {"text": "face", "type": "things", "subType": "body"}, + {"text": "eye", "type": "things", "subType": "body"}, + {"text": "ear", "type": "things", "subType": "body"}, + {"text": "nose", "type": "things", "subType": "body"}, + {"text": "mouth", "type": "things", "subType": "body"}, + {"text": "teeth", "type": "things", "subType": "body"}, + {"text": "tongue", "type": "things", "subType": "body"}, + {"text": "neck", "type": "things", "subType": "body"}, + {"text": "shoulder", "type": "things", "subType": "body"}, + {"text": "arm", "type": "things", "subType": "body"}, + {"text": "elbow", "type": "things", "subType": "body"}, + {"text": "hand", "type": "things", "subType": "body"}, + {"text": "finger", "type": "things", "subType": "body"}, + {"text": "thumb", "type": "things", "subType": "body"}, + {"text": "stomach", "type": "things", "subType": "body"}, + {"text": "leg", "type": "things", "subType": "body"}, + {"text": "knee", "type": "things", "subType": "body"}, + {"text": "foot", "type": "things", "subType": "body"}, + {"text": "toe", "type": "things", "subType": "body"}, + {"text": "back", "type": "things", "subType": "body"}, + {"text": "heart", "type": "things", "subType": "body"}, + {"text": "shirt", "type": "things", "subType": "clothes"}, + {"text": "pants", "type": "things", "subType": "clothes"}, + {"text": "shorts", "type": "things", "subType": "clothes"}, + {"text": "skirt", "type": "things", "subType": "clothes"}, + {"text": "dress", "type": "things", "subType": "clothes"}, + {"text": "jacket", "type": "things", "subType": "clothes"}, + {"text": "coat", "type": "things", "subType": "clothes"}, + {"text": "sweater", "type": "things", "subType": "clothes"}, + {"text": "pajamas", "type": "things", "subType": "clothes"}, + {"text": "underwear", "type": "things", "subType": "clothes"}, + {"text": "socks", "type": "things", "subType": "clothes"}, + {"text": "shoes", "type": "things", "subType": "clothes"}, + {"text": "boots", "type": "things", "subType": "clothes"}, + {"text": "hat", "type": "things", "subType": "clothes"}, + {"text": "cap", "type": "things", "subType": "clothes"}, + {"text": "gloves", "type": "things", "subType": "clothes"}, + {"text": "scarf", "type": "things", "subType": "clothes"}, + {"text": "swimsuit", "type": "things", "subType": "clothes"}, + {"text": "belt", "type": "things", "subType": "clothes"}, + {"text": "glasses", "type": "things", "subType": "clothes"}, + {"text": "house", "type": "things", "subType": "home"}, + {"text": "room", "type": "things", "subType": "home"}, + {"text": "kitchen", "type": "things", "subType": "home"}, + {"text": "bathroom", "type": "things", "subType": "home"}, + {"text": "bedroom", "type": "things", "subType": "home"}, + {"text": "living room", "type": "things", "subType": "home"}, + {"text": "door", "type": "things", "subType": "home"}, + {"text": "window", "type": "things", "subType": "home"}, + {"text": "wall", "type": "things", "subType": "home"}, + {"text": "floor", "type": "things", "subType": "home"}, + {"text": "bed", "type": "things", "subType": "home"}, + {"text": "pillow", "type": "things", "subType": "home"}, + {"text": "blanket", "type": "things", "subType": "home"}, + {"text": "table", "type": "things", "subType": "home"}, + {"text": "chair", "type": "things", "subType": "home"}, + {"text": "couch", "type": "things", "subType": "home"}, + {"text": "desk", "type": "things", "subType": "home"}, + {"text": "shelf", "type": "things", "subType": "home"}, + {"text": "closet", "type": "things", "subType": "home"}, + {"text": "lamp", "type": "things", "subType": "home"}, + {"text": "light", "type": "things", "subType": "home"}, + {"text": "tv", "type": "things", "subType": "home"}, + {"text": "computer", "type": "things", "subType": "home"}, + {"text": "phone", "type": "things", "subType": "home"}, + {"text": "clock", "type": "things", "subType": "home"}, + {"text": "mirror", "type": "things", "subType": "home"}, + {"text": "sink", "type": "things", "subType": "home"}, + {"text": "toilet", "type": "things", "subType": "home"}, + {"text": "shower", "type": "things", "subType": "home"}, + {"text": "bathtub", "type": "things", "subType": "home"}, + {"text": "fridge", "type": "things", "subType": "home"}, + {"text": "oven", "type": "things", "subType": "home"}, + {"text": "microwave", "type": "things", "subType": "home"}, + {"text": "plate", "type": "things", "subType": "home"}, + {"text": "bowl", "type": "things", "subType": "home"}, + {"text": "cup", "type": "things", "subType": "home"}, + {"text": "fork", "type": "things", "subType": "home"}, + {"text": "spoon", "type": "things", "subType": "home"}, + {"text": "knife", "type": "things", "subType": "home"}, + {"text": "trash can", "type": "things", "subType": "home"}, + {"text": "key", "type": "things", "subType": "home"}, + {"text": "toy", "type": "things", "subType": "home"}, + {"text": "book", "type": "things", "subType": "home"}, + {"text": "backpack", "type": "things", "subType": "home"}, + {"text": "towel", "type": "things", "subType": "home"}, + {"text": "soap", "type": "things", "subType": "home"}, + {"text": "toothbrush", "type": "things", "subType": "home"}, + {"text": "toothpaste", "type": "things", "subType": "home"}, + {"text": "shampoo", "type": "things", "subType": "home"}, + {"text": "paper", "type": "things", "subType": "home"}, + {"text": "pencil", "type": "things", "subType": "home"}, + {"text": "pen", "type": "things", "subType": "home"}, + {"text": "crayons", "type": "things", "subType": "home"}, + {"text": "scissors", "type": "things", "subType": "home"}, + {"text": "bus", "type": "things", "subType": "travel"}, + {"text": "train", "type": "things", "subType": "travel"}, + {"text": "motorcycle", "type": "things", "subType": "travel"}, + {"text": "truck", "type": "things", "subType": "travel"}, + {"text": "boat", "type": "things", "subType": "travel"}, + {"text": "ship", "type": "things", "subType": "travel"}, + {"text": "subway", "type": "things", "subType": "travel"}, + {"text": "taxi", "type": "things", "subType": "travel"}, + {"text": "helicopter", "type": "things", "subType": "travel"}, + {"text": "stroller", "type": "things", "subType": "travel"}, + {"text": "suitcase", "type": "things", "subType": "travel"}, + {"text": "ticket", "type": "things", "subType": "travel"}, + {"text": "map", "type": "things", "subType": "travel"}, + {"text": "hospital", "type": "things", "subType": "places"}, + {"text": "school", "type": "things", "subType": "places"}, + {"text": "park", "type": "things", "subType": "places"}, + {"text": "store", "type": "things", "subType": "places"}, + {"text": "hospital", "type": "things", "subType": "places"}, + {"text": "library", "type": "things", "subType": "places"}, + {"text": "restaurant", "type": "things", "subType": "places"}, + {"text": "beach", "type": "things", "subType": "places"}, + {"text": "pool", "type": "things", "subType": "places"}, + {"text": "playground", "type": "things", "subType": "places"}, + {"text": "zoo", "type": "things", "subType": "places"}, + {"text": "farm", "type": "things", "subType": "places"}, + {"text": "garden", "type": "things", "subType": "places"}, + {"text": "yard", "type": "things", "subType": "places"}, + {"text": "office", "type": "things", "subType": "places"}, + {"text": "theater", "type": "things", "subType": "places"}, + {"text": "museum", "type": "things", "subType": "places"}, + {"text": "picture", "type": "things", "subType": "art"}, + {"text": "drawing", "type": "things", "subType": "art"}, + {"text": "painting", "type": "things", "subType": "art"}, + {"text": "clay", "type": "things", "subType": "art"}, + {"text": "markers", "type": "things", "subType": "art"}, + {"text": "chalk", "type": "things", "subType": "art"}, + {"text": "stickers", "type": "things", "subType": "art"}, + {"text": "stamp", "type": "things", "subType": "art"}, + {"text": "music", "type": "things", "subType": "music"}, + {"text": "song", "type": "things", "subType": "music"}, + {"text": "radio", "type": "things", "subType": "music"}, + {"text": "piano", "type": "things", "subType": "music"}, + {"text": "guitar", "type": "things", "subType": "music"}, + {"text": "drums", "type": "things", "subType": "music"}, + {"text": "flute", "type": "things", "subType": "music"}, + {"text": "bell", "type": "things", "subType": "music"}, + {"text": "game", "type": "things", "subType": "games"}, + {"text": "ball", "type": "things", "subType": "games"}, + {"text": "blocks", "type": "things", "subType": "games"}, + {"text": "puzzle", "type": "things", "subType": "games"}, + {"text": "doll", "type": "things", "subType": "games"}, + {"text": "lego", "type": "things", "subType": "games"}, + {"text": "cards", "type": "things", "subType": "games"}, + {"text": "dice", "type": "things", "subType": "games"}, + {"text": "swing", "type": "things", "subType": "games"}, + {"text": "slide", "type": "things", "subType": "games"}, + {"text": "sandbox", "type": "things", "subType": "games"}, + {"text": "bubble", "type": "things", "subType": "games"}, + {"text": "party", "type": "things", "subType": "occasions"}, + {"text": "birthday", "type": "things", "subType": "occasions"}, + {"text": "holiday", "type": "things", "subType": "occasions"}, + {"text": "christmas", "type": "things", "subType": "occasions"}, + {"text": "halloween", "type": "things", "subType": "occasions"}, + {"text": "wedding", "type": "things", "subType": "occasions"}, + {"text": "gift", "type": "things", "subType": "occasions"} + ] + } + ] +} +""" + + +def get_explicit_scene_description(word, item_type, sub_type): + w = word.lower().strip() + + colors = ["red", "blue", "green", "yellow", "black", "white", "orange", "purple", "pink", "brown", "gray"] + if w in colors: + return ( + f"One single clean cartoon stick figure character standing and holding out an oversized, prominent, perfectly round circle shape. " + f"The circle shape must be filled completely with a bright, vibrant solid flat coat of the color {w}. " + f"The character itself remains a clean white fill with a black outline, ensuring the colored circle is the main focus." + ) + + if sub_type == "suffix": + return ( + f"A single cartoon stick figure character holding up a large clean speech bubble. " + f"Inside the bubble is a simple visual symbol representing the concept of adding '{w}' to a word — " + f"shown as an arrow pointing to an extended shape or a sequence of two simple shapes joined together. No text or letters." + ) + + exceptions = { + "buy": "A cartoon stick figure character standing at a counter, handing a single clean round coin to another character to purchase a generic item.", + "airport": "A simple exterior line drawing of a large building terminal with a control tower, and one single airplane parked cleanly on the ground outside.", + "store": "A simple building structure with a prominent window display showing generic shapes, and an open front door indicator.", + "wall": "A clean, simple pattern of bricks stacked in alternating rows forming a standard wall section. Entirely static object. No faces, no characters, no heads.", + "soup": "A simple profile view outline of a bowl containing steaming hot soup with a spoon resting inside it. No faces, no human stick figures.", + "and": "Two separate simple geometric shapes (a circle next to a square) connected by a clear plus symbol (+) hovering between them.", + "but": "A line split down the center, on the left a happy character, on the right a sad character, representing a contrasting alternative.", + "because": "A character pointing at a large, prominent question mark, which leads cleanly into a lightbulb shape.", + "if": "A character standing at a fork in a path that splits into two clean branches labeled with simple arrow signs.", + "so": "A character pushing a large heavy block, which cleanly results in the block sliding forward down a slope.", + "in": "A character sitting entirely inside a transparent simple open outline of a box.", + "on": "A character sitting completely on top of a flat table surface outline.", + "under": "A character crouching completely beneath the structure outline of a clean table.", + "this": "A character standing immediately next to a small ball, pointing a finger directly down onto it.", + "that": "A character pointing its arm straight out towards a small ball located far away across the scene.", + } + + if w in exceptions: + return exceptions[w] + + if sub_type == "pronouns": + if w in ["i", "me", "my"]: + return "One single character standing perfectly alone, pointing its index finger directly at its own chest." + if w in ["you", "your"]: + return "One single character standing front-facing, pointing its index finger directly forward out at the viewer." + if w in ["she", "her"]: + return "Two distinct characters side-by-side. The figure on the right clearly wears a clean triangle-skirt dress outline. A separate black arrow points cleanly at the dress figure." + if w in ["he", "him"]: + return "Two distinct characters side-by-side. The figure on the right wears simple pant outlines. A separate black arrow points cleanly at the trouser-wearing figure." + if w in ["we"]: + return "Three friendly characters standing closely together arms-linked, forming a cooperative group." + if w in ["they"]: + return "Two neutral characters standing grouped together on the right side of the frame, with the viewer observing them from a slight distance." + + if item_type == "actions" or sub_type in ["action", "helping", "strong"]: + return f"One single character actively executing the literal movement of '{w}' clearly and simply. The figure has a perfectly round circle head and clean tubular limbs." + + if sub_type in ["food", "animals", "travel", "drink"] and w not in ["soup", "salad", "meat"]: + if sub_type == "travel": + return f"A clean, simple vehicle icon of a '{w}'. The front windshield area features two small solid black dot eyes and an integrated happy smile line across the front bumper." + if w in ["yogurt", "milk", "cereal", "soda"]: + return f"A simple product container cup or carton representing '{w}'. The main front surface wall of the container features two small solid black dot eyes and an integrated happy smile line." + return f"A clean, simple representation of a single '{w}' centered cleanly. The item features two simple solid black dot eyes and a happy smile line embedded directly onto its body surface." + + if item_type == "things" or sub_type in ["nature", "clothes", "home", "body", "places", "art", "music", "games", "occasions"]: + return f"Only one isolated, clean structural graphic object of a '{w}' centered in the canvas. Completely static object layout. Strictly NO eyes, NO smiles, NO faces, and NO human figures." + + return f"A clear, self-explanatory cartoon stick-figure scene explicitly visualizing the concept: '{w}'." + + +def generate_and_save_image(word_obj): + word = word_obj.get("text") + if not word: + return + + item_type = word_obj.get("type", "") + sub_type = word_obj.get("subType", "") + + safe_word = re.sub(r"[^\w\-_]", "_", word.lower()) + filename = os.path.join(OUTPUT_DIR, f"{safe_word}.png") + + # Leave your preferred files (rabbit.png, remember.png) alone in the folder so they are not replaced. + # Manually delete you.png, your.png, and pull.png to force their clean regeneration. + if os.path.exists(filename): + return + + scene_context = get_explicit_scene_description(word, item_type, sub_type) + + style_description = ( + "Bright, cheerful children's cartoon icon illustration. " + "Flat 2D cartoon art with thick, friendly black outlines and vibrant solid fill colors — no gradients, no shading, no photo-realism. " + "Characters are expressive round-headed cartoon figures with large friendly eyes, rosy cheeks, and simple cheerful expressions. " + "Use a limited but vivid color palette: warm skin tones, bright primary and secondary colors for clothing and objects. " + "White background — absolutely no scene backgrounds, no ground lines, no sky, no environment. Subject floats on plain white. " + "STRICTLY NO TEXT, labels, letters, or words of any kind anywhere in the image. " + "Objects and animals should be cute, rounded, and friendly in shape — avoid sharp angles. " + "Any arrows must be a single clean rounded stroke with a simple open V-shaped arrowhead — no filled or outlined arrow shapes. " + "CRITICAL: clothes, buildings, and inanimate objects must NOT have faces. Only living characters and animals get expressions. " + "Bold, clear, single focal subject centered in the frame. Fun and engaging for young children. Cartoon icon of: " + ) + + prompt = f"{style_description} {scene_context}" + + for attempt in range(5): + try: + response = client.images.generate( + model="gpt-image-1", + prompt=prompt, + n=1, + size="1024x1024", + quality="low", + background="opaque", + ) + + b64_data = response.data[0].b64_json + if not b64_data: + return + + img_bytes = base64.b64decode(b64_data) + with open(filename, "wb") as handler: + handler.write(img_bytes) + print(f"Successfully generated clean single-icon for: '{word}'") + return + + except Exception as e: + if "429" in str(e): + wait = 15 * (attempt + 1) + print(f"Rate limited on '{word}', retrying in {wait}s...") + time.sleep(wait) + else: + print(f"Failed for '{word}': {e}") + return + + +def generate_portrait(member): + filename = os.path.join(PORTRAITS_DIR, f"{member['name']}.png") + if os.path.exists(filename): + print(f"Skipping {member['name']} — already exists") + return + prompt = f"{PORTRAIT_STYLE} Character: {member['description']}" + for attempt in range(5): + try: + response = client.images.generate( + model="gpt-image-1", + prompt=prompt, + n=1, + size="1024x1024", + quality="low", + background="opaque", + ) + b64_data = response.data[0].b64_json + if not b64_data: + return + img_bytes = base64.b64decode(b64_data) + with open(filename, "wb") as f: + f.write(img_bytes) + print(f"Generated portrait: {member['name']}") + return + except Exception as e: + if "429" in str(e): + wait = 15 * (attempt + 1) + print(f"Rate limited on {member['name']}, retrying in {wait}s...") + time.sleep(wait) + else: + print(f"Failed for {member['name']}: {e}") + return + + +def main(): + if "--portraits" in sys.argv: + os.makedirs(PORTRAITS_DIR, exist_ok=True) + for member in FAMILY: + generate_portrait(member) + print("\nPortraits complete.") + return + + os.makedirs(OUTPUT_DIR, exist_ok=True) + data = json.loads(FULL_DATA_JSON) + word_objects = data["languages"][0]["words"][:10] + print(f"Loaded all {len(word_objects)} entries seamlessly.") + + with concurrent.futures.ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor: + executor.map(generate_and_save_image, word_objects) + + print("\nBatch execution complete.") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/generate_vocabulary.py b/generate_vocabulary.py new file mode 100644 index 0000000..e52f141 --- /dev/null +++ b/generate_vocabulary.py @@ -0,0 +1,396 @@ +import json + +# Define our vocabulary base categorized by type and subType +# Structure: (word, is_core, [related_ids]) +vocabulary_source = { + "grammar": { + "pronouns": [ + ("I", True, ["action-want", "action-go", "action-like", "action-see"]), + ("you", True, ["action-want", "action-go", "action-like", "action-help"]), + ("he", True, ["action-is", "action-go", "action-play"]), + ("she", True, ["action-is", "action-go", "action-play"]), + ("it", True, ["action-is", "describe-good", "describe-broken"]), + ("we", True, ["action-want", "action-go", "social-hello"]), + ("they", True, ["action-are", "action-go"]), + ("me", True, ["action-give", "action-help"]), + ("him", False, ["action-give", "action-tell"]), + ("her", False, ["action-give", "action-tell"]), + ("this", True, ["action-is", "describe-good"]), + ("that", True, ["action-is", "describe-bad"]), + ("my", True, ["thing-home", "thing-family", "thing-body"]), + ("your", True, ["thing-home", "thing-turn"]) + ], + "conjunctions": [ + ("and", True, []), ("but", True, []), ("or", True, []), + ("because", True, []), ("if", True, []), ("so", True, []) + ], + "prepositions": [ + ("in", True, ["thing-home", "thing-box"]), + ("on", True, ["thing-table", "thing-chair"]), + ("under", True, ["thing-table", "thing-bed"]), + ("up", True, ["action-go", "action-look"]), + ("down", True, ["action-sit", "action-fall"]), + ("with", True, ["grammar-me", "grammar-you"]), + ("to", True, ["thing-school", "thing-park"]), + ("from", True, ["thing-home"]), + ("out", True, ["action-go"]), + ("off", True, ["thing-light", "thing-tv"]), + ("for", True, ["grammar-you", "grammar-me"]), + ("about", False, []), ("next to", False, []), ("behind", False, []) + ], + "suffix": [ + ("ing", True, []), ("ed", True, []), ("s", True, []), ("er", False, []) + ] + }, + "actions": { + "action": [ + ("eat", True, ["thing-food", "thing-apple", "thing-banana", "thing-cookie"]), + ("drink", True, ["thing-water", "thing-milk", "thing-juice"]), + ("go", True, ["thing-home", "thing-park", "thing-school", "thing-outside"]), + ("want", True, ["thing-toy", "thing-food", "thing-water"]), + ("see", True, ["thing-animal", "thing-bird", "thing-tv"]), + ("look", True, ["grammar-at", "thing-picture"]), + ("play", True, ["thing-game", "thing-toy", "thing-ball"]), + ("sleep", True, ["thing-bed", "describe-tired"]), + ("stop", True, ["action-go", "action-play"]), + ("come", True, ["prepositions-here", "prepositions-in"]), + ("make", True, ["thing-art", "thing-food"]), + ("take", True, ["thing-toy", "thing-pill"]), + ("open", True, ["thing-door", "thing-box", "thing-window"]), + ("close", True, ["thing-door", "thing-window"]), + ("sit", True, ["thing-chair", "prepositions-down"]), + ("stand", True, ["prepositions-up"]), + ("walk", False, ["thing-park", "thing-outside"]), + ("run", False, ["thing-outside", "thing-park"]), + ("jump", False, ["thing-bed", "thing-trampoline"]), + ("wash", False, ["thing-hands", "thing-body", "thing-face"]), + ("clean", False, ["thing-room", "thing-house"]), + ("read", False, ["thing-book", "thing-story"]), + ("write", False, ["thing-paper", "thing-letter"]), + ("draw", False, ["thing-picture", "thing-art"]), + ("paint", False, ["thing-art", "thing-picture"]), + ("sing", False, ["thing-music", "thing-song"]), + ("dance", False, ["thing-music"]), + ("swim", False, ["thing-pool", "thing-beach"]), + ("ride", False, ["thing-bike", "thing-car", "thing-bus"]), + ("drive", False, ["thing-car"]), + ("fly", False, ["thing-plane", "thing-bird"]), + ("climb", False, ["thing-tree", "thing-stairs"]), + ("push", False, ["thing-door", "thing-swing"]), + ("pull", False, ["thing-door", "thing-wagon"]), + ("throw", False, ["thing-ball"]), + ("catch", False, ["thing-ball"]), + ("kick", False, ["thing-ball"]), + ("cook", False, ["thing-kitchen", "thing-food"]), + ("bake", False, ["thing-cake", "thing-cookie"]), + ("cut", False, ["thing-paper", "thing-food"]), + ("glue", False, ["thing-paper", "thing-art"]), + ("listen", False, ["thing-music", "thing-teacher"]), + ("talk", False, ["grammar-you", "thing-friend"]), + ("say", True, ["thing-word"]), + ("tell", False, ["thing-story", "thing-secret"]), + ("ask", False, ["thing-question"]), + ("share", False, ["thing-toy", "thing-food"]), + ("buy", False, ["thing-store", "thing-toy"]), + ("sell", False, []), + ("find", False, ["thing-toy", "thing-key"]), + ("hide", False, ["prepositions-under", "thing-box"]), + ("lose", False, ["thing-toy", "thing-game"]), + ("win", False, ["thing-game"]), + ("smile", False, ["describe-happy"]), + ("cry", False, ["describe-sad"]), + ("laugh", False, ["describe-funny"]), + ("cough", False, ["describe-sick"]), + ("sneeze", False, ["describe-sick"]), + ("hug", False, ["thing-mom", "thing-dad"]), + ("kiss", False, ["thing-mom"]), + ("think", True, []), + ("know", True, []), + ("forget", False, []), + ("remember", False, []), + ("learn", False, ["thing-school"]), + ("teach", False, ["thing-school"]), + ("work", False, ["thing-office", "thing-computer"]), + ("break", False, ["thing-toy", "thing-glass"]), + ("fix", False, ["thing-toy", "thing-car"]), + ("build", False, ["thing-blocks", "thing-lego"]), + ("drop", False, ["thing-cup", "thing-ball"]), + ("lift", False, ["thing-box"]), + ("carry", False, ["thing-bag"]), + ("show", True, ["thing-picture", "thing-toy"]), + ("give", True, ["grammar-me", "thing-toy"]), + ("get", True, ["thing-water", "thing-toy"]), + ("keep", False, []), + ("hold", False, ["thing-hand"]), + ("wait", True, []), + ("wash", False, ["thing-hands"]), + ("brush", False, ["thing-teeth", "thing-hair"]), + ("comb", False, ["thing-hair"]), + ("tie", False, ["thing-shoes"]), + ("dress", False, ["thing-clothes"]), + ("undress", False, ["thing-clothes"]), + ("pack", False, ["thing-bag", "thing-suitcase"]), + ("unpack", False, ["thing-bag"]) + ], + "helping": [ + ("can", True, []), ("will", True, []), ("do", True, []), + ("did", True, []), ("is", True, []), ("am", True, []), + ("are", True, []), ("was", True, []), ("were", True, []), + ("have", True, []), ("has", True, []), ("had", True, []), + ("could", False, []), ("would", False, []), ("should", False, []), + ("may", False, []), ("must", False, []) + ], + "strong": [ + ("help", True, ["grammar-me", "action-fix"]), + ("stop", True, []), + ("hurt", True, ["thing-body", "thing-arm", "thing-leg"]), + ("need", True, ["thing-water", "thing-bathroom", "action-help"]) + ] + }, + "describe": { + "adjectives": [ + ("good", True, []), ("bad", True, []), ("big", True, []), + ("little", True, []), ("hot", True, ["thing-food", "thing-stove"]), + ("cold", True, ["thing-water", "thing-ice"]), ("fast", False, []), + ("slow", False, []), ("happy", True, []), ("sad", True, []), + ("angry", False, []), ("scared", False, []), ("tired", True, ["action-sleep"]), + ("sick", False, ["thing-doctor"]), ("clean", False, []), ("dirty", False, []), + ("wet", False, ["thing-water"]), ("dry", False, []), ("soft", False, []), + ("hard", False, []), ("heavy", False, []), ("light", False, []), + ("new", False, []), ("old", False, []), ("beautiful", False, []), + ("ugly", False, []), ("sweet", False, ["thing-cookie", "thing-candy"]), + ("sour", False, ["thing-lemon"]), ("salty", False, ["thing-chips"]), + ("loud", False, ["thing-music"]), ("quiet", False, []), + ("red", False, []), ("blue", False, []), ("green", False, []), + ("yellow", False, []), ("black", False, []), ("white", False, []), + ("orange", False, []), ("purple", False, []), ("pink", False, []), + ("brown", False, []), ("gray", False, []), ("bright", False, []), + ("dark", False, []), ("broken", False, ["thing-toy"]), + ("empty", False, ["thing-cup"]), ("full", False, ["thing-cup"]), + ("hungry", True, ["action-eat"]), ("thirsty", True, ["action-drink"]), + ("funny", False, []), ("boring", False, []), ("scary", False, []), + ("brave", False, []), ("mean", False, []), ("kind", False, []), + ("easy", False, []), ("difficult", False, []), ("wrong", False, []), + ("right", False, []), ("safe", False, []), ("dangerous", False, []) + ], + "sense": [ + ("see", True, []), ("hear", True, []), ("smell", False, []), + ("taste", False, []), ("touch", False, []), ("feel", True, []) + ], + "feeling": [ + ("excited", False, []), ("bored", False, []), ("worried", False, []), + ("surprised", False, []), ("proud", False, []), ("jealous", False, []), + ("lonely", False, []), ("nervous", False, []), ("calm", False, []), + ("confused", False, []), ("frustrated", False, []), ("silly", False, []) + ], + "thought": [ + ("smart", False, []), ("silly", False, []), ("crazy", False, []), + ("creative", False, []), ("wise", False, []), ("careful", False, []) + ] + }, + "social": { + "phrases": [ + ("thank you", True, []), ("please", True, []), ("excuse me", False, []), + ("i don't know", True, []), ("i'm sorry", True, []), ("no thank you", True, []), + ("your turn", True, []), ("my turn", True, []), ("all done", True, []), + ("help please", True, []), ("more please", True, []), ("yes please", True, []) + ], + "favourites": [ + ("like", True, []), ("love", False, []), ("hate", False, []), + ("favorite", False, []), ("best", False, []), ("worst", False, []) + ], + "greetings": [ + ("hello", True, []), ("bye bye", True, []), ("good morning", False, []), + ("good night", False, ["action-sleep"]), ("hi", True, []), + ("welcome", False, []), ("see you later", False, []), ("how are you", False, []) + ] + }, + "things": { + "people": [ + ("mom", True, []), ("dad", True, []), ("brother", False, []), + ("sister", False, []), ("baby", False, []), ("grandma", False, []), + ("grandpa", False, []), ("teacher", False, []), ("doctor", False, []), + ("nurse", False, []), ("friend", False, []), ("boy", False, []), + ("girl", False, []), ("man", False, []), ("woman", False, []), + ("dentist", False, []), ("police officer", False, []), + ("firefighter", False, []), ("student", False, []), ("family", False, []) + ], + "animals": [ + ("dog", False, []), ("cat", False, []), ("bird", False, []), + ("fish", False, []), ("horse", False, []), ("cow", False, []), + ("pig", False, []), ("sheep", False, []), ("chicken", False, []), + ("duck", False, []), ("lion", False, []), ("tiger", False, []), + ("bear", False, []), ("elephant", False, []), ("monkey", False, []), + ("giraffe", False, []), ("rabbit", False, []), ("mouse", False, []), + ("frog", False, []), ("snake", False, []), ("turtle", False, []), + ("spider", False, []), ("bee", False, []), ("butterfly", False, []), + ("shark", False, []), ("whale", False, []), ("dolphin", False, []), + ("penguin", False, []), ("owl", False, []), ("fox", False, []) + ], + "nature": [ + ("tree", False, []), ("flower", False, []), ("grass", False, []), + ("sun", False, []), ("moon", False, []), ("star", False, []), + ("cloud", False, []), ("rain", False, []), ("snow", False, []), + ("wind", False, []), ("sky", False, []), ("water", True, []), + ("fire", False, []), ("rock", False, []), ("dirt", False, []), + ("leaf", False, []), ("river", False, []), ("ocean", False, []), + ("mountain", False, []), ("sand", False, []) + ], + "food": [ + ("apple", False, []), ("banana", False, []), ("orange", False, []), + ("grapes", False, []), ("strawberry", False, []), ("watermelon", False, []), + ("carrot", False, []), ("broccoli", False, []), ("potato", False, []), + ("tomato", False, []), ("corn", False, []), ("cucumber", False, []), + ("bread", False, []), ("rice", False, []), ("pasta", False, []), + ("pizza", False, []), ("burger", False, []), ("sandwich", False, []), + ("chicken", False, []), ("meat", False, []), ("fish", False, []), + ("egg", False, []), ("cheese", False, []), ("yogurt", False, []), + ("soup", False, []), ("salad", False, []), ("cereal", False, []), + ("pancakes", False, []), ("cookie", False, []), ("cake", False, []), + ("ice cream", False, []), ("candy", False, []), ("chocolate", False, []), + ("chips", False, []), ("popcorn", False, []), ("snack", True, []) + ], + "drink": [ + ("water", True, []), ("milk", False, []), ("juice", False, []), + ("tea", False, []), ("coffee", False, []), ("soda", False, []), + ("hot chocolate", False, []), ("smoothie", False, []) + ], + "body": [ + ("head", False, []), ("hair", False, []), ("face", False, []), + ("eye", False, []), ("ear", False, []), ("nose", False, []), + ("mouth", False, []), ("teeth", False, []), ("tongue", False, []), + ("neck", False, []), ("shoulder", False, []), ("arm", False, []), + ("elbow", False, []), ("hand", False, []), ("finger", False, []), + ("thumb", False, []), ("stomach", False, []), ("leg", False, []), + ("knee", False, []), ("foot", False, []), ("toe", False, []), + ("back", False, []), ("heart", False, []), ("blood", False, []) + ], + "clothes": [ + ("shirt", False, []), ("pants", False, []), ("shorts", False, []), + ("skirt", False, []), ("dress", False, []), ("jacket", False, []), + ("coat", False, []), ("sweater", False, []), ("pajamas", False, []), + ("underwear", False, []), ("socks", False, []), ("shoes", False, []), + ("boots", False, []), ("hat", False, []), ("cap", False, []), + ("gloves", False, []), ("scarf", False, []), ("swimsuit", False, []), + ("belt", False, []), ("glasses", False, []) + ], + "home": [ + ("house", False, []), ("room", False, []), ("kitchen", False, []), + ("bathroom", False, []), ("bedroom", False, []), ("living room", False, []), + ("door", False, []), ("window", False, []), ("wall", False, []), + ("floor", False, []), ("ceiling", False, []), ("roof", False, []), + ("bed", False, []), ("pillow", False, []), ("blanket", False, []), + ("table", False, []), ("chair", False, []), ("couch", False, []), + ("desk", False, []), ("shelf", False, []), ("closet", False, []), + ("lamp", False, []), ("light", False, []), ("tv", False, []), + ("computer", False, []), ("phone", False, []), ("clock", False, []), + ("mirror", False, []), ("sink", False, []), ("toilet", False, []), + ("shower", False, []), ("bathtub", False, []), ("fridge", False, []), + ("oven", False, []), ("microwave", False, []), ("plate", False, []), + ("bowl", False, []), ("cup", False, []), ("glass", False, []), + ("fork", False, []), ("spoon", False, []), ("knife", False, []), + ("napkin", False, []), ("trash can", False, []), ("key", False, []), + ("toy", True, []), ("book", False, []), ("backpack", False, []), + ("towel", False, []), ("soap", False, []), ("toothbrush", False, []), + ("toothpaste", False, []), ("shampoo", False, []), ("brush", False, []), + ("comb", False, []), ("paper", False, []), ("pencil", False, []), + ("pen", False, []), ("crayons", False, []), ("scissors", False, []) + ], + "travel": [ + ("car", False, []), ("bus", False, []), ("train", False, []), + ("plane", False, []), ("bike", False, []), ("motorcycle", False, []), + ("truck", False, []), ("boat", False, []), ("ship", False, []), + ("subway", False, []), ("taxi", False, []), ("helicopter", False, []), + ("stroller", False, []), ("suitcase", False, []), ("ticket", False, []), + ("map", False, []) + ], + "places": [ + ("home", True, []), ("school", False, []), ("park", False, []), + ("store", False, []), ("shop", False, []), ("hospital", False, []), + ("clinic", False, []), ("library", False, []), ("restaurant", False, []), + ("beach", False, []), ("pool", False, []), ("playground", False, []), + ("zoo", False, []), ("farm", False, []), ("garden", False, []), + ("yard", False, []), ("street", False, []), ("road", False, []), + ("station", False, []), ("airport", False, []), ("bank", False, []), + ("office", False, []), ("theater", False, []), ("museum", False, []) + ], + "art": [ + ("picture", False, []), ("drawing", False, []), ("painting", False, []), + ("clay", False, []), ("markers", False, []), ("chalk", False, []), + ("stickers", False, []), ("stamp", False, []) + ], + "music": [ + ("music", False, []), ("song", False, []), ("radio", False, []), + ("piano", False, []), ("guitar", False, []), ("drums", False, []), + ("flute", False, []), ("bell", False, []) + ], + "games": [ + ("game", False, []), ("toy", False, []), ("ball", False, []), + ("blocks", False, []), ("puzzle", False, []), ("doll", False, []), + ("car toy", False, []), ("train toy", False, []), ("lego", False, []), + ("cards", False, []), ("dice", False, []), ("swing", False, []), + ("slide", False, []), ("sandbox", False, []), ("bubble", False, []) + ], + "occasions": [ + ("party", False, []), ("birthday", False, []), ("holiday", False, []), + ("christmas", False, []), ("halloween", False, []), ("wedding", False, []), + ("gift", False, []), ("cake", False, []) + ] + } +} + +words_database = [] +total_count = 0 + +# Flatten loop to transform sources into valid schemas +for main_type, sub_dict in vocabulary_source.items(): + for sub_type, word_list in sub_dict.items(): + for item in word_list: + text_value = item[0] + is_core = item[1] + related = item[2] + + # Form clean consistent word IDs using prefix pattern + # logic cleans compound words like 'ice cream' to 'ice-cream' + clean_id_text = text_value.lower().replace(" ", "-") + generated_word_id = f"{main_type}-{sub_type}-{clean_id_text}" + + # Process standardized image paths based on requested assets + # (supports stick drawings "simples" and real "photo") + img_filename = f"{clean_id_text}.png" + image_paths = [ + f"simple_aac_core/images/{main_type}/{sub_type}/simples/{img_filename}", + f"simple_aac_core/images/{main_type}/{sub_type}/photo/{img_filename}" + ] + + # Map simplified relative hooks back to proper unique keys + mapped_related_ids = [] + for rel in related: + if "-" in rel: + mapped_related_ids.append(rel) + else: + mapped_related_ids.append(f"{main_type}-{sub_type}-{rel.lower().replace(' ', '-')}") + + card_record = { + "wordId": generated_word_id, + "text": text_value, + "phoneticOverride": None, + "type": main_type, + "subType": sub_type, + "imagePaths": image_paths, + "isCoreVocabulary": is_core, + "extraRelatedWordIds": mapped_related_ids, + "aiSuggestedFollowUps": [], + "createdDate": None # Handled explicitly by Firebase ServerTimestamp on write + } + + words_database.append(card_record) + total_count += 1 + +# Limit target exactly to top 500 records if definitions exceed threshold +final_output_data = words_database[:500] + +with open("words.json", "w", encoding="utf-8") as f: + json.dump(final_output_data, f, indent=2, ensure_ascii=False) + +print(f"Success. Generated exactly {len(final_output_data)} flashcard entries inside 'words.json'.") \ No newline at end of file diff --git a/ios/Flutter/devDebug.xcconfig b/ios/Flutter/devDebug.xcconfig index 03ba6dc..4e00e77 100644 --- a/ios/Flutter/devDebug.xcconfig +++ b/ios/Flutter/devDebug.xcconfig @@ -4,3 +4,4 @@ FLUTTER_TARGET=lib/main-dev.dart ASSET_PREFIX=dev BUNDLE_NAME=Simple AAC DEV +ASSETCATALOG_COMPILER_APPICON_NAME=AppIcon-dev diff --git a/ios/Flutter/devRelease.xcconfig b/ios/Flutter/devRelease.xcconfig index 03ba6dc..4e00e77 100644 --- a/ios/Flutter/devRelease.xcconfig +++ b/ios/Flutter/devRelease.xcconfig @@ -4,3 +4,4 @@ FLUTTER_TARGET=lib/main-dev.dart ASSET_PREFIX=dev BUNDLE_NAME=Simple AAC DEV +ASSETCATALOG_COMPILER_APPICON_NAME=AppIcon-dev diff --git a/ios/Flutter/prodDebug.xcconfig b/ios/Flutter/prodDebug.xcconfig index 9c23bbb..6effd6d 100644 --- a/ios/Flutter/prodDebug.xcconfig +++ b/ios/Flutter/prodDebug.xcconfig @@ -4,3 +4,4 @@ FLUTTER_TARGET=lib/main-prod.dart ASSET_PREFIX=prod BUNDLE_NAME=Simple AAC +ASSETCATALOG_COMPILER_APPICON_NAME=AppIcon-prod diff --git a/ios/Flutter/prodRelease.xcconfig b/ios/Flutter/prodRelease.xcconfig index 9c23bbb..6effd6d 100644 --- a/ios/Flutter/prodRelease.xcconfig +++ b/ios/Flutter/prodRelease.xcconfig @@ -4,3 +4,4 @@ FLUTTER_TARGET=lib/main-prod.dart ASSET_PREFIX=prod BUNDLE_NAME=Simple AAC +ASSETCATALOG_COMPILER_APPICON_NAME=AppIcon-prod diff --git a/ios/Flutter/uatDebug.xcconfig b/ios/Flutter/uatDebug.xcconfig index 1c32433..391ffb5 100644 --- a/ios/Flutter/uatDebug.xcconfig +++ b/ios/Flutter/uatDebug.xcconfig @@ -4,3 +4,4 @@ FLUTTER_TARGET=lib/main-uat.dart ASSET_PREFIX=uat BUNDLE_NAME=Simple AAC UAT +ASSETCATALOG_COMPILER_APPICON_NAME=AppIcon-uat diff --git a/ios/Flutter/uatRelease.xcconfig b/ios/Flutter/uatRelease.xcconfig index 1c32433..391ffb5 100644 --- a/ios/Flutter/uatRelease.xcconfig +++ b/ios/Flutter/uatRelease.xcconfig @@ -4,3 +4,4 @@ FLUTTER_TARGET=lib/main-uat.dart ASSET_PREFIX=uat BUNDLE_NAME=Simple AAC UAT +ASSETCATALOG_COMPILER_APPICON_NAME=AppIcon-uat diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 58e0e53..1c6ac4a 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -171,6 +171,7 @@ 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 85DEB3CCC6DF7B813BF68D84 /* [CP] Embed Pods Frameworks */, + 23A077A19D388FF637A3512D /* FlutterFire: "flutterfire upload-crashlytics-symbols" */, ); buildRules = ( ); @@ -239,6 +240,24 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 23A077A19D388FF637A3512D /* FlutterFire: "flutterfire upload-crashlytics-symbols" */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "FlutterFire: \"flutterfire upload-crashlytics-symbols\""; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\n#!/bin/bash\nPATH=\"${PATH}:$FLUTTER_ROOT/bin:${PUB_CACHE}/bin:$HOME/.pub-cache/bin\"\n\nif [ -z \"$PODS_ROOT\" ] || [ ! -d \"$PODS_ROOT/FirebaseCrashlytics\" ]; then\n # Cannot use \"BUILD_DIR%/Build/*\" as per Firebase documentation, it points to \"flutter-project/build/ios/*\" path which doesn't have run script\n DERIVED_DATA_PATH=$(echo \"$BUILD_ROOT\" | sed -E 's|(.*DerivedData/[^/]+).*|\\1|')\n PATH_TO_CRASHLYTICS_UPLOAD_SCRIPT=\"${DERIVED_DATA_PATH}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run\"\nelse\n PATH_TO_CRASHLYTICS_UPLOAD_SCRIPT=\"$PODS_ROOT/FirebaseCrashlytics/run\"\nfi\n\n# Command to upload symbols script used to upload symbols to Firebase server\nflutterfire upload-crashlytics-symbols --upload-symbols-script-path=\"$PATH_TO_CRASHLYTICS_UPLOAD_SCRIPT\" --platform=ios --apple-project-path=\"${SRCROOT}\" --env-platform-name=\"${PLATFORM_NAME}\" --env-configuration=\"${CONFIGURATION}\" --env-project-dir=\"${PROJECT_DIR}\" --env-built-products-dir=\"${BUILT_PRODUCTS_DIR}\" --env-dwarf-dsym-folder-path=\"${DWARF_DSYM_FOLDER_PATH}\" --env-dwarf-dsym-file-name=\"${DWARF_DSYM_FILE_NAME}\" --env-infoplist-path=\"${INFOPLIST_PATH}\" --default-config=default\n"; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -423,7 +442,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.sealstudios.simpleaac.simpleAac; + PRODUCT_BUNDLE_IDENTIFIER = "com.sealstudios.simple-aac"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -489,7 +508,7 @@ "$(PROJECT_DIR)/Flutter", ); MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = com.sealstudios.simpleaac.prod; + PRODUCT_BUNDLE_IDENTIFIER = "com.sealstudios.simple-aac"; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -558,7 +577,7 @@ "$(PROJECT_DIR)/Flutter", ); MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = com.sealstudios.simpleaac.dev; + PRODUCT_BUNDLE_IDENTIFIER = "com.sealstudios.simple-aac.dev"; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -626,7 +645,7 @@ "$(PROJECT_DIR)/Flutter", ); MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = com.sealstudios.simpleaac.prod; + PRODUCT_BUNDLE_IDENTIFIER = "com.sealstudios.simple-aac"; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -701,7 +720,7 @@ ); MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.sealstudios.simpleaac.uat; + PRODUCT_BUNDLE_IDENTIFIER = "com.sealstudios.simple-aac.uat"; SDKROOT = iphoneos; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -828,7 +847,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.sealstudios.simpleaac.simpleAac; + PRODUCT_BUNDLE_IDENTIFIER = "com.sealstudios.simple-aac"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -850,7 +869,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.sealstudios.simpleaac.simpleAac; + PRODUCT_BUNDLE_IDENTIFIER = "com.sealstudios.simple-aac"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -915,7 +934,7 @@ "$(PROJECT_DIR)/Flutter", ); MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = com.sealstudios.simpleaac.dev; + PRODUCT_BUNDLE_IDENTIFIER = "com.sealstudios.simple-aac.dev"; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -990,7 +1009,7 @@ ); MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.sealstudios.simpleaac.dev; + PRODUCT_BUNDLE_IDENTIFIER = "com.sealstudios.simple-aac.dev"; SDKROOT = iphoneos; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -1063,7 +1082,7 @@ ); MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.sealstudios.simpleaac.prod; + PRODUCT_BUNDLE_IDENTIFIER = "com.sealstudios.simple-aac"; SDKROOT = iphoneos; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -1128,7 +1147,7 @@ "$(PROJECT_DIR)/Flutter", ); MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = com.sealstudios.simpleaac.uat; + PRODUCT_BUNDLE_IDENTIFIER = "com.sealstudios.simple-aac.uat"; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -1196,7 +1215,7 @@ "$(PROJECT_DIR)/Flutter", ); MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = com.sealstudios.simpleaac.uat; + PRODUCT_BUNDLE_IDENTIFIER = "com.sealstudios.simple-aac.uat"; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; diff --git a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-1024x1024@1x.png index 4aa2ecc..db00849 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-1024x1024@1x.png and b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-1024x1024@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-20x20@1x.png index f111925..f57f7d2 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-20x20@1x.png and b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-20x20@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-20x20@2x.png index ca4e207..4a37d16 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-20x20@2x.png and b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-20x20@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-20x20@3x.png index 5273e75..0642221 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-20x20@3x.png and b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-20x20@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-29x29@1x.png index 5c803b4..082b79c 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-29x29@1x.png and b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-29x29@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-29x29@2x.png index c060ffa..7d4dcbc 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-29x29@2x.png and b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-29x29@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-29x29@3x.png index c4aeea5..6ef4baa 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-29x29@3x.png and b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-29x29@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-40x40@1x.png index ca4e207..4a37d16 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-40x40@1x.png and b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-40x40@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-40x40@2x.png index 85ed178..5c28297 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-40x40@2x.png and b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-40x40@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-40x40@3x.png index 0a097e7..b23b377 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-40x40@3x.png and b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-40x40@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-50x50@1x.png b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-50x50@1x.png new file mode 100644 index 0000000..3015cb9 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-50x50@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-50x50@2x.png b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-50x50@2x.png new file mode 100644 index 0000000..aa926c2 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-50x50@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-57x57@1x.png b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-57x57@1x.png new file mode 100644 index 0000000..7fc9484 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-57x57@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-57x57@2x.png b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-57x57@2x.png new file mode 100644 index 0000000..2941006 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-57x57@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-60x60@2x.png index 0a097e7..b23b377 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-60x60@2x.png and b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-60x60@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-60x60@3x.png index 0faf9da..87a0b5a 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-60x60@3x.png and b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-60x60@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-72x72@1x.png b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-72x72@1x.png new file mode 100644 index 0000000..09380f8 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-72x72@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-72x72@2x.png b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-72x72@2x.png new file mode 100644 index 0000000..afa526d Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-72x72@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-76x76@1x.png index b92518c..7c0a66f 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-76x76@1x.png and b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-76x76@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-76x76@2x.png index 85f0465..c9d8049 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-76x76@2x.png and b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-76x76@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-83.5x83.5@2x.png index 7a197d2..ef1fd1c 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-83.5x83.5@2x.png and b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-83.5x83.5@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Contents.json index cc7f1ca..ee34e23 100644 --- a/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Contents.json +++ b/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Contents.json @@ -1 +1 @@ -{"images":[{"size":"20x20","idiom":"iphone","filename":"AppIcon-dev-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"AppIcon-dev-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-dev-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-dev-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-dev-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"AppIcon-dev-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"AppIcon-dev-40x40@3x.png","scale":"3x"},{"size":"60x60","idiom":"iphone","filename":"AppIcon-dev-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"AppIcon-dev-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"AppIcon-dev-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"AppIcon-dev-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"AppIcon-dev-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"AppIcon-dev-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"AppIcon-dev-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"AppIcon-dev-40x40@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"AppIcon-dev-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"AppIcon-dev-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"AppIcon-dev-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"AppIcon-dev-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}} \ No newline at end of file +{"images":[{"size":"20x20","idiom":"iphone","filename":"AppIcon-dev-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"AppIcon-dev-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-dev-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-dev-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-dev-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"AppIcon-dev-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"AppIcon-dev-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"AppIcon-dev-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"AppIcon-dev-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"AppIcon-dev-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"AppIcon-dev-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"AppIcon-dev-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"AppIcon-dev-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"AppIcon-dev-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"AppIcon-dev-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"AppIcon-dev-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"AppIcon-dev-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"AppIcon-dev-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"AppIcon-dev-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"AppIcon-dev-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"AppIcon-dev-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"AppIcon-dev-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"AppIcon-dev-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"AppIcon-dev-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"AppIcon-dev-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}} \ No newline at end of file diff --git a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-1024x1024@1x.png index 4aa2ecc..db00849 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-1024x1024@1x.png and b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-1024x1024@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-20x20@1x.png index f111925..f57f7d2 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-20x20@1x.png and b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-20x20@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-20x20@2x.png index ca4e207..4a37d16 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-20x20@2x.png and b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-20x20@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-20x20@3x.png index 5273e75..0642221 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-20x20@3x.png and b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-20x20@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-29x29@1x.png index 5c803b4..082b79c 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-29x29@1x.png and b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-29x29@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-29x29@2x.png index c060ffa..7d4dcbc 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-29x29@2x.png and b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-29x29@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-29x29@3x.png index c4aeea5..6ef4baa 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-29x29@3x.png and b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-29x29@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-40x40@1x.png index ca4e207..4a37d16 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-40x40@1x.png and b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-40x40@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-40x40@2x.png index 85ed178..5c28297 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-40x40@2x.png and b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-40x40@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-40x40@3x.png index 0a097e7..b23b377 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-40x40@3x.png and b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-40x40@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-50x50@1x.png b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-50x50@1x.png new file mode 100644 index 0000000..3015cb9 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-50x50@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-50x50@2x.png b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-50x50@2x.png new file mode 100644 index 0000000..aa926c2 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-50x50@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-57x57@1x.png b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-57x57@1x.png new file mode 100644 index 0000000..7fc9484 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-57x57@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-57x57@2x.png b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-57x57@2x.png new file mode 100644 index 0000000..2941006 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-57x57@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-60x60@2x.png index 0a097e7..b23b377 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-60x60@2x.png and b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-60x60@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-60x60@3x.png index 0faf9da..87a0b5a 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-60x60@3x.png and b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-60x60@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-72x72@1x.png b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-72x72@1x.png new file mode 100644 index 0000000..09380f8 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-72x72@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-72x72@2x.png b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-72x72@2x.png new file mode 100644 index 0000000..afa526d Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-72x72@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-76x76@1x.png index b92518c..7c0a66f 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-76x76@1x.png and b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-76x76@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-76x76@2x.png index 85f0465..c9d8049 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-76x76@2x.png and b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-76x76@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-83.5x83.5@2x.png index 7a197d2..ef1fd1c 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-83.5x83.5@2x.png and b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-83.5x83.5@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/Contents.json index 0ba00d0..d7a6487 100644 --- a/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/Contents.json +++ b/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/Contents.json @@ -1 +1 @@ -{"images":[{"size":"20x20","idiom":"iphone","filename":"AppIcon-prod-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"AppIcon-prod-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-prod-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-prod-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-prod-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"AppIcon-prod-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"AppIcon-prod-40x40@3x.png","scale":"3x"},{"size":"60x60","idiom":"iphone","filename":"AppIcon-prod-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"AppIcon-prod-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"AppIcon-prod-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"AppIcon-prod-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"AppIcon-prod-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"AppIcon-prod-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"AppIcon-prod-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"AppIcon-prod-40x40@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"AppIcon-prod-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"AppIcon-prod-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"AppIcon-prod-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"AppIcon-prod-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}} \ No newline at end of file +{"images":[{"size":"20x20","idiom":"iphone","filename":"AppIcon-prod-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"AppIcon-prod-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-prod-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-prod-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-prod-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"AppIcon-prod-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"AppIcon-prod-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"AppIcon-prod-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"AppIcon-prod-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"AppIcon-prod-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"AppIcon-prod-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"AppIcon-prod-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"AppIcon-prod-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"AppIcon-prod-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"AppIcon-prod-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"AppIcon-prod-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"AppIcon-prod-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"AppIcon-prod-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"AppIcon-prod-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"AppIcon-prod-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"AppIcon-prod-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"AppIcon-prod-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"AppIcon-prod-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"AppIcon-prod-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"AppIcon-prod-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}} \ No newline at end of file diff --git a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-1024x1024@1x.png index 4aa2ecc..db00849 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-1024x1024@1x.png and b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-1024x1024@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-20x20@1x.png index f111925..f57f7d2 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-20x20@1x.png and b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-20x20@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-20x20@2x.png index ca4e207..4a37d16 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-20x20@2x.png and b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-20x20@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-20x20@3x.png index 5273e75..0642221 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-20x20@3x.png and b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-20x20@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-29x29@1x.png index 5c803b4..082b79c 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-29x29@1x.png and b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-29x29@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-29x29@2x.png index c060ffa..7d4dcbc 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-29x29@2x.png and b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-29x29@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-29x29@3x.png index c4aeea5..6ef4baa 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-29x29@3x.png and b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-29x29@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-40x40@1x.png index ca4e207..4a37d16 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-40x40@1x.png and b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-40x40@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-40x40@2x.png index 85ed178..5c28297 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-40x40@2x.png and b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-40x40@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-40x40@3x.png index 0a097e7..b23b377 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-40x40@3x.png and b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-40x40@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-50x50@1x.png b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-50x50@1x.png new file mode 100644 index 0000000..3015cb9 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-50x50@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-50x50@2x.png b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-50x50@2x.png new file mode 100644 index 0000000..aa926c2 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-50x50@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-57x57@1x.png b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-57x57@1x.png new file mode 100644 index 0000000..7fc9484 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-57x57@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-57x57@2x.png b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-57x57@2x.png new file mode 100644 index 0000000..2941006 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-57x57@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-60x60@2x.png index 0a097e7..b23b377 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-60x60@2x.png and b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-60x60@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-60x60@3x.png index 0faf9da..87a0b5a 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-60x60@3x.png and b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-60x60@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-72x72@1x.png b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-72x72@1x.png new file mode 100644 index 0000000..09380f8 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-72x72@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-72x72@2x.png b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-72x72@2x.png new file mode 100644 index 0000000..afa526d Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-72x72@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-76x76@1x.png index b92518c..7c0a66f 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-76x76@1x.png and b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-76x76@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-76x76@2x.png index 85f0465..c9d8049 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-76x76@2x.png and b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-76x76@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-83.5x83.5@2x.png index 7a197d2..ef1fd1c 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-83.5x83.5@2x.png and b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/AppIcon-uat-83.5x83.5@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/Contents.json index d23c7c3..9f42831 100644 --- a/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/Contents.json +++ b/ios/Runner/Assets.xcassets/AppIcon-uat.appiconset/Contents.json @@ -1 +1 @@ -{"images":[{"size":"20x20","idiom":"iphone","filename":"AppIcon-uat-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"AppIcon-uat-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-uat-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-uat-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-uat-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"AppIcon-uat-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"AppIcon-uat-40x40@3x.png","scale":"3x"},{"size":"60x60","idiom":"iphone","filename":"AppIcon-uat-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"AppIcon-uat-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"AppIcon-uat-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"AppIcon-uat-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"AppIcon-uat-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"AppIcon-uat-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"AppIcon-uat-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"AppIcon-uat-40x40@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"AppIcon-uat-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"AppIcon-uat-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"AppIcon-uat-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"AppIcon-uat-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}} \ No newline at end of file +{"images":[{"size":"20x20","idiom":"iphone","filename":"AppIcon-uat-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"AppIcon-uat-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-uat-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-uat-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-uat-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"AppIcon-uat-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"AppIcon-uat-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"AppIcon-uat-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"AppIcon-uat-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"AppIcon-uat-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"AppIcon-uat-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"AppIcon-uat-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"AppIcon-uat-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"AppIcon-uat-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"AppIcon-uat-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"AppIcon-uat-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"AppIcon-uat-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"AppIcon-uat-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"AppIcon-uat-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"AppIcon-uat-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"AppIcon-uat-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"AppIcon-uat-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"AppIcon-uat-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"AppIcon-uat-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"AppIcon-uat-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}} \ No newline at end of file diff --git a/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png b/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png index e29b3b5..8e21404 100644 Binary files a/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png and b/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png index ad5c16a..d83322f 100644 Binary files a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png index 5f279bb..92b2b35 100644 Binary files a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png index 3fafe2b..27428f4 100644 Binary files a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ diff --git a/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ios/Runner/Base.lproj/LaunchScreen.storyboard index 0430c33..7aa6dfb 100644 --- a/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ b/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -41,4 +41,4 @@ - \ No newline at end of file + diff --git a/ios/Runner/GoogleService-Info.plist b/ios/Runner/GoogleService-Info.plist index e69de29..4cc8c9e 100644 --- a/ios/Runner/GoogleService-Info.plist +++ b/ios/Runner/GoogleService-Info.plist @@ -0,0 +1,38 @@ + + + + + CLIENT_ID + 997985384352-24crsr5g1mf0nfsebleij6oiu14mupg4.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.997985384352-24crsr5g1mf0nfsebleij6oiu14mupg4 + ANDROID_CLIENT_ID + 997985384352-ak53r6arua833dvji3t8sbn8opp6vq2n.apps.googleusercontent.com + API_KEY + AIzaSyCxVlQSXwse9EE9i8jURkH0d-a_PRo5gzo + GCM_SENDER_ID + 997985384352 + PLIST_VERSION + 1 + BUNDLE_ID + com.sealstudios.simple-aac + PROJECT_ID + simpleaac-460e6 + STORAGE_BUCKET + simpleaac-460e6.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:997985384352:ios:d49d82dff28391dee956c5 + DATABASE_URL + https://simpleaac-460e6.firebaseio.com + + \ No newline at end of file diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 8dc4bd1..b782596 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -1,51 +1,51 @@ - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(BUNDLE_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleSignature - ???? - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - UIStatusBarHidden - - CADisableMinimumFrameDurationOnPhone - - UIApplicationSupportsIndirectInputEvents - - + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(BUNDLE_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + UIStatusBarHidden + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + diff --git a/lib/api/hive.dart b/lib/api/hive.dart deleted file mode 100644 index 8a5ab73..0000000 --- a/lib/api/hive.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'dart:convert'; -import 'dart:io'; - -import 'package:flutter/services.dart'; -import 'package:hive_built_value/hive_built_value.dart'; - -import '../dependency_injection_container.dart' as di; -import '../services/language_service.dart'; -import 'models/language.dart'; -import 'models/language_response.dart'; -import 'models/theme_service_hive_adapters.dart'; -import 'models/word.dart'; -import 'models/word_sub_type.dart'; -import 'models/word_type.dart'; - -Future initHive( - Directory appDocumentDir, -) async { - Hive.init(appDocumentDir.path); - Hive - ..registerAdapter(WordAdapter()) - ..registerAdapter(LanguageAdapter()) - ..registerAdapter(WordSubTypeAdapter()) - ..registerAdapter(WordTypeAdapter()) - ..registerAdapter(ThemeModeAdapter()) - ..registerAdapter(ColorAdapter()) - ..registerAdapter(FlexSchemeAdapter()) - ..registerAdapter(FlexSurfaceModeAdapter()) - ..registerAdapter(FlexInputBorderTypeAdapter()) - ..registerAdapter(FlexTabBarStyleAdapter()) - ..registerAdapter(FlexAppBarStyleAdapter()) - ..registerAdapter(FlexSystemNavBarStyleAdapter()) - ..registerAdapter(FlexSchemeColorAdapter()) - ..registerAdapter(NavigationDestinationLabelBehaviorAdapter()) - ..registerAdapter(NavigationRailLabelTypeAdapter()) - ..registerAdapter(FlexSliderIndicatorTypeAdapter()) - ..registerAdapter(ShowValueIndicatorAdapter()) - ..registerAdapter(TabBarIndicatorSizeAdapter()) - ..registerAdapter(AdaptiveThemeAdapter()); -} - -Future populateInitialData() async { - final languageService = di.getIt.get(); - final initialWordData = await rootBundle.loadString( - 'assets/json/initial_word_data.json', - ); - final initialWordDataJson = await jsonDecode(initialWordData); - languageService.putAll( - LanguageResponse.fromJson(initialWordDataJson).languages, - ); -} diff --git a/lib/api/hive_client.dart b/lib/api/hive_client.dart deleted file mode 100644 index 39f78a9..0000000 --- a/lib/api/hive_client.dart +++ /dev/null @@ -1,162 +0,0 @@ -import 'dart:async'; - -import 'package:built_collection/built_collection.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter_image_compress/flutter_image_compress.dart'; -import 'package:hive_built_value_flutter/hive_flutter.dart'; - -const pngFileExtension = '.png'; - -class HiveClient { - /// Private constructor - HiveClient._create(Box box) { - _hiveBox = box; - } - - static Future create(String boxName) async { - final box = await Hive.openBox(boxName); - final hiveClient = HiveClient._create(box); - return hiveClient; - } - - late final Box _hiveBox; - - Future put( - String key, - T? value, - ) async { - return _hiveBox.put(key, value); - } - - Future delete( - String key, - ) async { - return _hiveBox.delete(key); - } - - Future get( - String key, { - T? defaultValue, - }) async { - try { - final loaded = _hiveBox.get(key, defaultValue: defaultValue) as T?; - return loaded; - } catch (e) { - return defaultValue; - } - } - - BuiltList getAll() => _hiveBox.values.whereType().toBuiltList(); - - Future> getAllForKeys(BuiltList keys) async { - try { - final allLoaded = BuiltList(); - for (var key in keys) { - final loaded = _hiveBox.get(key) as T; - allLoaded.rebuild((b) => b.add(loaded)); - } - return allLoaded; - } catch (e) { - return BuiltList(); - } - } - - void addListener(AsyncCallback callback){ - _hiveBox.listenable().addListener(callback); - } - - void removeListener(AsyncCallback callback){ - _hiveBox.listenable().removeListener(callback); - } - - Future getPNGFile( - String key, - ) async { - final path = await get(key); - if (path != null && path.isNotEmpty == true) { - return FlutterImageCompress.compressAndGetFile( - path, - path, - quality: 88, - format: CompressFormat.png, - ); - } - return null; - } - - // Future savePNGFile( - // List points, - // Size size, - // String folderName, - // String key, - // ) async { - // final filePath = await getFilePath( - // extension: pngFileExtension, - // folderName: folderName, - // ); - // final recorder = PictureRecorder(); - // final canvas = Canvas(recorder); - // final painter = MyCustomPainter(points); - // painter.paint(canvas, size); - // final image = await recorder.endRecording().toImage( - // size.width.floor(), - // size.height.floor(), - // ); - // final byteData = await image.toByteData( - // format: ImageByteFormat.png, - // ); - // if (byteData != null) { - // await put(filePath, key); - // return _writeToFile(byteData, filePath); - // } - // return Future.value(null); - // } - // - // Future getFilePath({ - // required String extension, - // required String folderName, - // }) async { - // final _documentsPath = await getApplicationDocumentsDirectory(); - // final _simpleAACFolder = Directory( - // '${_documentsPath.path}/meta/$folderName', - // ); - // - // final now = DateTime.now(); - // final id = '${now.day}' - // '${now.month}' - // '${now.year}' - // '${now.hour}' - // '${now.minute}' - // '${now.second}' - // '${now.millisecond}' - // '${now.microsecond}'; - // - // if (await _simpleAACFolder.exists()) { - // return '${_simpleAACFolder.path}/$id$extension'; - // } else { - // final _simpleAACNewFolder = await _simpleAACFolder.create( - // recursive: true, - // ); - // return '${_simpleAACNewFolder.path}/$id$extension'; - // } - // } - // - // Future _writeToFile( - // ByteData data, - // String path, - // ) { - // final buffer = data.buffer; - // return File(path).writeAsBytes( - // buffer.asUint8List( - // data.offsetInBytes, - // data.lengthInBytes, - // ), - // ); - // } - - Future dispose() async { - if(_hiveBox.isOpen) { - await _hiveBox.close(); - } - } -} diff --git a/lib/api/models/extensions/word_sub_type_extension.dart b/lib/api/models/extensions/word_sub_type_extension.dart index 3f87e9a..24eef28 100644 --- a/lib/api/models/extensions/word_sub_type_extension.dart +++ b/lib/api/models/extensions/word_sub_type_extension.dart @@ -10,41 +10,36 @@ extension WordSubTypeExtension on WordSubType? { case WordSubType.people: case WordSubType.animals: case WordSubType.nature: - case WordSubType.time: - case WordSubType.places: - case WordSubType.things: - case WordSubType.ideas: - case WordSubType.drink: case WordSubType.food: - return AppColor.wordTypeNoun; + case WordSubType.drink: + case WordSubType.body: + case WordSubType.clothes: + case WordSubType.home: + case WordSubType.travel: + case WordSubType.places: + case WordSubType.art: + case WordSubType.music: + case WordSubType.games: + case WordSubType.occasions: + return AppColor.wordTypeNoun; case WordSubType.action: - case WordSubType.feeling: - case WordSubType.thought: - case WordSubType.sense: - case WordSubType.abverb: case WordSubType.helping: case WordSubType.strong: return AppColor.wordTypeVerb; + case WordSubType.adjectives: + case WordSubType.sense: + case WordSubType.feeling: + case WordSubType.thought: + return AppColor.wordTypeOther; + case WordSubType.phrases: case WordSubType.favourites: + case WordSubType.greetings: + return AppColor.wordTypeQuick; case WordSubType.pronouns: case WordSubType.conjunctions: - case WordSubType.adjectives: - case WordSubType.propositionAndSound: - case WordSubType.phrases: + case WordSubType.prepositions: case WordSubType.suffix: - return AppColor.wordTypeQuick; - case WordSubType.home: - case WordSubType.clothes: - case WordSubType.extras: - case WordSubType.travel: - case WordSubType.art: - case WordSubType.games: - case WordSubType.music: - case WordSubType.body: - case WordSubType.love: - case WordSubType.occasion: - case WordSubType.learning: - return AppColor.wordTypeOther; + return AppColor.wordTypeOther; default: return context.themeColors.primary; } @@ -55,49 +50,61 @@ extension WordSubTypeExtension on WordSubType? { case WordSubType.people: return Icons.people_outlined; case WordSubType.animals: - return Icons.blind_outlined; + return Icons.pets_outlined; case WordSubType.nature: return Icons.nature_outlined; - case WordSubType.time: - return Icons.access_time_outlined; - case WordSubType.places: - return Icons.language_outlined; - case WordSubType.things: - return Icons.account_tree_outlined; - case WordSubType.ideas: - return Icons.lightbulb_outlined; - case WordSubType.drink: - return Icons.local_drink_outlined; case WordSubType.food: return Icons.fastfood_outlined; + case WordSubType.drink: + return Icons.local_drink_outlined; + case WordSubType.body: + return Icons.accessibility_new_outlined; + case WordSubType.clothes: + return Icons.checkroom_outlined; + case WordSubType.home: + return Icons.home_outlined; + case WordSubType.travel: + return Icons.flight_outlined; + case WordSubType.places: + return Icons.location_on_outlined; + case WordSubType.art: + return Icons.palette_outlined; + case WordSubType.music: + return Icons.music_note_outlined; + case WordSubType.games: + return Icons.sports_esports_outlined; + case WordSubType.occasions: + return Icons.celebration_outlined; case WordSubType.action: - case WordSubType.feeling: - case WordSubType.thought: - case WordSubType.sense: - case WordSubType.abverb: + return Icons.directions_run_outlined; case WordSubType.helping: + return Icons.volunteer_activism_outlined; case WordSubType.strong: + return Icons.fitness_center; + case WordSubType.adjectives: + return Icons.text_fields_outlined; + case WordSubType.sense: + return Icons.visibility_outlined; + case WordSubType.feeling: + return Icons.mood_outlined; + case WordSubType.thought: + return Icons.lightbulb_outlined; + case WordSubType.phrases: + return Icons.chat_bubble_outline; case WordSubType.favourites: return Icons.favorite_border; + case WordSubType.greetings: + return Icons.waving_hand_outlined; case WordSubType.pronouns: + return Icons.person_outline; case WordSubType.conjunctions: - case WordSubType.adjectives: - case WordSubType.propositionAndSound: - case WordSubType.phrases: + return Icons.link_outlined; + case WordSubType.prepositions: + return Icons.arrow_forward_outlined; case WordSubType.suffix: - case WordSubType.home: - case WordSubType.clothes: - case WordSubType.extras: - case WordSubType.travel: - case WordSubType.art: - case WordSubType.games: - case WordSubType.music: - case WordSubType.body: - case WordSubType.love: - case WordSubType.occasion: - case WordSubType.learning: + return Icons.add_outlined; default: - return Icons.add; + return Icons.label_outline; } } } diff --git a/lib/api/models/extensions/word_type_extension.dart b/lib/api/models/extensions/word_type_extension.dart index eb34506..6abfa23 100644 --- a/lib/api/models/extensions/word_type_extension.dart +++ b/lib/api/models/extensions/word_type_extension.dart @@ -1,4 +1,4 @@ -import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; import '../../../extensions/build_context_extension.dart'; import '../../../ui/theme/app_color.dart'; @@ -8,66 +8,89 @@ import '../word_type.dart'; extension WordTypeExtension on WordType? { Color getColor(BuildContext context) { switch (this) { - case WordType.nouns: - return AppColor.wordTypeNoun; - case WordType.other: - return AppColor.wordTypeOther; - case WordType.quicks: + case WordType.core: return AppColor.wordTypeQuick; - case WordType.verbs: + case WordType.things: + return AppColor.wordTypeNoun; + case WordType.actions: return AppColor.wordTypeVerb; + case WordType.describe: + return AppColor.wordTypeOther; + case WordType.social: + return AppColor.wordTypeOther; + case WordType.grammar: + return AppColor.wordTypeOther; default: return context.themeColors.primary; } } + IconData getIcon() { + switch (this) { + case WordType.core: + return Icons.favorite_border_rounded; + case WordType.things: + return Icons.category_rounded; + case WordType.actions: + return Icons.directions_run_rounded; + case WordType.describe: + return Icons.palette_rounded; + case WordType.social: + return Icons.people_rounded; + case WordType.grammar: + return Icons.spellcheck_rounded; + default: + return Icons.grid_view_rounded; + } + } + List getSubTypes() { switch (this) { - case WordType.nouns: + case WordType.core: + // Core vocabulary is shown flat — no sub-tabs needed. + return []; + case WordType.things: return [ WordSubType.people, WordSubType.animals, WordSubType.nature, - WordSubType.time, - WordSubType.places, - WordSubType.things, - WordSubType.ideas, - WordSubType.drink, WordSubType.food, - ]; - case WordType.other: - return [ - WordSubType.home, + WordSubType.drink, + WordSubType.body, WordSubType.clothes, - WordSubType.extras, + WordSubType.home, WordSubType.travel, + WordSubType.places, WordSubType.art, - WordSubType.games, WordSubType.music, - WordSubType.body, - WordSubType.love, - WordSubType.occasion, - WordSubType.learning, + WordSubType.games, + WordSubType.occasions, ]; - case WordType.quicks: + case WordType.actions: return [ - WordSubType.favourites, - WordSubType.pronouns, - WordSubType.conjunctions, - WordSubType.adjectives, - WordSubType.propositionAndSound, - WordSubType.phrases, - WordSubType.suffix, + WordSubType.action, + WordSubType.helping, + WordSubType.strong, ]; - case WordType.verbs: + case WordType.describe: return [ - WordSubType.action, + WordSubType.adjectives, + WordSubType.sense, WordSubType.feeling, WordSubType.thought, - WordSubType.sense, - WordSubType.abverb, - WordSubType.helping, - WordSubType.strong, + ]; + case WordType.social: + return [ + WordSubType.phrases, + WordSubType.favourites, + WordSubType.greetings, + ]; + case WordType.grammar: + return [ + WordSubType.pronouns, + WordSubType.conjunctions, + WordSubType.prepositions, + WordSubType.suffix, ]; default: return []; diff --git a/lib/api/models/language.dart b/lib/api/models/language.dart index 1cf8a0b..0f4b637 100644 --- a/lib/api/models/language.dart +++ b/lib/api/models/language.dart @@ -1,35 +1,18 @@ -import 'package:built_collection/built_collection.dart'; -import 'package:built_value/built_value.dart'; -import 'package:built_value/serializer.dart'; -import 'package:hive_built_value/hive_built_value.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; -import '../serializers/serializers.dart'; import 'word.dart'; +part 'language.freezed.dart'; part 'language.g.dart'; -@HiveType(typeId: 0) -abstract class Language implements Built { - - factory Language([void Function(LanguageBuilder) updates]) = _$Language; - Language._(); - - @HiveField(0) - String get id; - - @HiveField(1) - String get displayName; - - @HiveField(2) - BuiltList get words; - - Map toJson() { - return serializers.serializeWith(Language.serializer, this) as Map; - } - - static Language fromJson(Map json) { - return serializers.deserializeWith(Language.serializer, json)!; - } - - static Serializer get serializer => _$languageSerializer; -} \ No newline at end of file +@freezed +sealed class Language with _$Language { + const factory Language({ + required String id, + required String displayName, + @Default([]) List words, + }) = _Language; + + factory Language.fromJson(Map json) => + _$LanguageFromJson(json); +} diff --git a/lib/api/models/language.freezed.dart b/lib/api/models/language.freezed.dart new file mode 100644 index 0000000..05ed90e --- /dev/null +++ b/lib/api/models/language.freezed.dart @@ -0,0 +1,283 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND +// coverage:ignore-file +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'language.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +// dart format off +T _$identity(T value) => value; + +/// @nodoc +mixin _$Language { + + String get id; String get displayName; List get words; +/// Create a copy of Language +/// with the given fields replaced by the non-null parameter values. +@JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +$LanguageCopyWith get copyWith => _$LanguageCopyWithImpl(this as Language, _$identity); + + /// Serializes this Language to a JSON map. + Map toJson(); + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is Language&&(identical(other.id, id) || other.id == id)&&(identical(other.displayName, displayName) || other.displayName == displayName)&&const DeepCollectionEquality().equals(other.words, words)); +} + +@JsonKey(includeFromJson: false, includeToJson: false) +@override +int get hashCode => Object.hash(runtimeType,id,displayName,const DeepCollectionEquality().hash(words)); + +@override +String toString() { + return 'Language(id: $id, displayName: $displayName, words: $words)'; +} + + +} + +/// @nodoc +abstract mixin class $LanguageCopyWith<$Res> { + factory $LanguageCopyWith(Language value, $Res Function(Language) _then) = _$LanguageCopyWithImpl; +@useResult +$Res call({ + String id, String displayName, List words +}); + + + + +} +/// @nodoc +class _$LanguageCopyWithImpl<$Res> + implements $LanguageCopyWith<$Res> { + _$LanguageCopyWithImpl(this._self, this._then); + + final Language _self; + final $Res Function(Language) _then; + +/// Create a copy of Language +/// with the given fields replaced by the non-null parameter values. +@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? displayName = null,Object? words = null,}) { + return _then(_self.copyWith( +id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable +as String,displayName: null == displayName ? _self.displayName : displayName // ignore: cast_nullable_to_non_nullable +as String,words: null == words ? _self.words : words // ignore: cast_nullable_to_non_nullable +as List, + )); +} + +} + + +/// Adds pattern-matching-related methods to [Language]. +extension LanguagePatterns on Language { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap(TResult Function( _Language value)? $default,{required TResult orElse(),}){ +final _that = this; +switch (_that) { +case _Language() when $default != null: +return $default(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map(TResult Function( _Language value) $default,){ +final _that = this; +switch (_that) { +case _Language(): +return $default(_that);} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull(TResult? Function( _Language value)? $default,){ +final _that = this; +switch (_that) { +case _Language() when $default != null: +return $default(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen(TResult Function( String id, String displayName, List words)? $default,{required TResult orElse(),}) {final _that = this; +switch (_that) { +case _Language() when $default != null: +return $default(_that.id,_that.displayName,_that.words);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when(TResult Function( String id, String displayName, List words) $default,) {final _that = this; +switch (_that) { +case _Language(): +return $default(_that.id,_that.displayName,_that.words);} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull(TResult? Function( String id, String displayName, List words)? $default,) {final _that = this; +switch (_that) { +case _Language() when $default != null: +return $default(_that.id,_that.displayName,_that.words);case _: + return null; + +} +} + +} + +/// @nodoc +@JsonSerializable() + +class _Language implements Language { + const _Language({required this.id, required this.displayName, final List words = const []}): _words = words; + factory _Language.fromJson(Map json) => _$LanguageFromJson(json); + +@override final String id; +@override final String displayName; + final List _words; +@override@JsonKey() List get words { + if (_words is EqualUnmodifiableListView) return _words; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_words); +} + + +/// Create a copy of Language +/// with the given fields replaced by the non-null parameter values. +@override @JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +_$LanguageCopyWith<_Language> get copyWith => __$LanguageCopyWithImpl<_Language>(this, _$identity); + +@override +Map toJson() { + return _$LanguageToJson(this, ); +} + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is _Language&&(identical(other.id, id) || other.id == id)&&(identical(other.displayName, displayName) || other.displayName == displayName)&&const DeepCollectionEquality().equals(other._words, _words)); +} + +@JsonKey(includeFromJson: false, includeToJson: false) +@override +int get hashCode => Object.hash(runtimeType,id,displayName,const DeepCollectionEquality().hash(_words)); + +@override +String toString() { + return 'Language(id: $id, displayName: $displayName, words: $words)'; +} + + +} + +/// @nodoc +abstract mixin class _$LanguageCopyWith<$Res> implements $LanguageCopyWith<$Res> { + factory _$LanguageCopyWith(_Language value, $Res Function(_Language) _then) = __$LanguageCopyWithImpl; +@override @useResult +$Res call({ + String id, String displayName, List words +}); + + + + +} +/// @nodoc +class __$LanguageCopyWithImpl<$Res> + implements _$LanguageCopyWith<$Res> { + __$LanguageCopyWithImpl(this._self, this._then); + + final _Language _self; + final $Res Function(_Language) _then; + +/// Create a copy of Language +/// with the given fields replaced by the non-null parameter values. +@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? displayName = null,Object? words = null,}) { + return _then(_Language( +id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable +as String,displayName: null == displayName ? _self.displayName : displayName // ignore: cast_nullable_to_non_nullable +as String,words: null == words ? _self._words : words // ignore: cast_nullable_to_non_nullable +as List, + )); +} + + +} + +// dart format on diff --git a/lib/api/models/language.g.dart b/lib/api/models/language.g.dart index 3a193a0..99ea272 100644 --- a/lib/api/models/language.g.dart +++ b/lib/api/models/language.g.dart @@ -3,235 +3,21 @@ part of 'language.dart'; // ************************************************************************** -// BuiltValueGenerator +// JsonSerializableGenerator // ************************************************************************** -Serializer _$languageSerializer = new _$LanguageSerializer(); - -class _$LanguageSerializer implements StructuredSerializer { - @override - final Iterable types = const [Language, _$Language]; - @override - final String wireName = 'Language'; - - @override - Iterable serialize(Serializers serializers, Language object, - {FullType specifiedType = FullType.unspecified}) { - final result = [ - 'id', - serializers.serialize(object.id, specifiedType: const FullType(String)), - 'displayName', - serializers.serialize(object.displayName, - specifiedType: const FullType(String)), - 'words', - serializers.serialize(object.words, - specifiedType: - const FullType(BuiltList, const [const FullType(Word)])), - ]; - - return result; - } - - @override - Language deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { - final result = new LanguageBuilder(); - - final iterator = serialized.iterator; - while (iterator.moveNext()) { - final key = iterator.current! as String; - iterator.moveNext(); - final Object? value = iterator.current; - switch (key) { - case 'id': - result.id = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; - break; - case 'displayName': - result.displayName = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; - break; - case 'words': - result.words.replace(serializers.deserialize(value, - specifiedType: - const FullType(BuiltList, const [const FullType(Word)]))! - as BuiltList); - break; - } - } - - return result.build(); - } -} - -class _$Language extends Language { - @override - final String id; - @override - final String displayName; - @override - final BuiltList words; - - factory _$Language([void Function(LanguageBuilder)? updates]) => - (new LanguageBuilder()..update(updates))._build(); - - _$Language._( - {required this.id, required this.displayName, required this.words}) - : super._() { - BuiltValueNullFieldError.checkNotNull(id, r'Language', 'id'); - BuiltValueNullFieldError.checkNotNull( - displayName, r'Language', 'displayName'); - BuiltValueNullFieldError.checkNotNull(words, r'Language', 'words'); - } - - @override - Language rebuild(void Function(LanguageBuilder) updates) => - (toBuilder()..update(updates)).build(); - - @override - LanguageBuilder toBuilder() => new LanguageBuilder()..replace(this); - - @override - bool operator ==(Object other) { - if (identical(other, this)) return true; - return other is Language && - id == other.id && - displayName == other.displayName && - words == other.words; - } - - @override - int get hashCode { - var _$hash = 0; - _$hash = $jc(_$hash, id.hashCode); - _$hash = $jc(_$hash, displayName.hashCode); - _$hash = $jc(_$hash, words.hashCode); - _$hash = $jf(_$hash); - return _$hash; - } - - @override - String toString() { - return (newBuiltValueToStringHelper(r'Language') - ..add('id', id) - ..add('displayName', displayName) - ..add('words', words)) - .toString(); - } -} - -class LanguageBuilder implements Builder { - _$Language? _$v; - - String? _id; - String? get id => _$this._id; - set id(String? id) => _$this._id = id; - - String? _displayName; - String? get displayName => _$this._displayName; - set displayName(String? displayName) => _$this._displayName = displayName; - - ListBuilder? _words; - ListBuilder get words => _$this._words ??= new ListBuilder(); - set words(ListBuilder? words) => _$this._words = words; - - LanguageBuilder(); - - LanguageBuilder get _$this { - final $v = _$v; - if ($v != null) { - _id = $v.id; - _displayName = $v.displayName; - _words = $v.words.toBuilder(); - _$v = null; - } - return this; - } - - @override - void replace(Language other) { - ArgumentError.checkNotNull(other, 'other'); - _$v = other as _$Language; - } - - @override - void update(void Function(LanguageBuilder)? updates) { - if (updates != null) updates(this); - } - - @override - Language build() => _build(); - - _$Language _build() { - _$Language _$result; - try { - _$result = _$v ?? - new _$Language._( - id: BuiltValueNullFieldError.checkNotNull(id, r'Language', 'id'), - displayName: BuiltValueNullFieldError.checkNotNull( - displayName, r'Language', 'displayName'), - words: words.build()); - } catch (_) { - late String _$failedField; - try { - _$failedField = 'words'; - words.build(); - } catch (e) { - throw new BuiltValueNestedFieldError( - r'Language', _$failedField, e.toString()); - } - rethrow; - } - replace(_$result); - return _$result; - } -} - -// ignore_for_file: deprecated_member_use_from_same_package,type=lint - -// ************************************************************************** -// TypeAdapterGenerator -// ************************************************************************** - -class LanguageAdapter extends TypeAdapter { - @override - final int typeId = 0; - - @override - Language read(BinaryReader reader) { - final numOfFields = reader.readByte(); - final fields = { - for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), - }; - - return (LanguageBuilder() - ..id = fields[0] as String - ..displayName = fields[1] as String - ..words = fields[2] == null - ? null - : ListBuilder(fields[2] as Iterable)) - .build(); - } - - @override - void write(BinaryWriter writer, Language obj) { - writer - ..writeByte(3) - ..writeByte(0) - ..write(obj.id) - ..writeByte(1) - ..write(obj.displayName) - ..writeByte(2) - ..write(obj.words.toList()); - } - - @override - int get hashCode => typeId.hashCode; - - @override - bool operator ==(Object other) => - identical(this, other) || - other is LanguageAdapter && - runtimeType == other.runtimeType && - typeId == other.typeId; -} +_Language _$LanguageFromJson(Map json) => _Language( + id: json['id'] as String, + displayName: json['displayName'] as String, + words: + (json['words'] as List?) + ?.map((e) => Word.fromJson(e as Map)) + .toList() ?? + const [], +); + +Map _$LanguageToJson(_Language instance) => { + 'id': instance.id, + 'displayName': instance.displayName, + 'words': instance.words, +}; diff --git a/lib/api/models/language_response.dart b/lib/api/models/language_response.dart index 9389870..f032901 100644 --- a/lib/api/models/language_response.dart +++ b/lib/api/models/language_response.dart @@ -1,26 +1,16 @@ -import 'package:built_collection/built_collection.dart'; -import 'package:built_value/built_value.dart'; -import 'package:built_value/serializer.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; -import '../serializers/serializers.dart'; import 'language.dart'; +part 'language_response.freezed.dart'; part 'language_response.g.dart'; -abstract class LanguageResponse implements Built { +@freezed +sealed class LanguageResponse with _$LanguageResponse { + const factory LanguageResponse({ + @Default([]) List languages, + }) = _LanguageResponse; - factory LanguageResponse([void Function(LanguageResponseBuilder) updates]) = _$LanguageResponse; - LanguageResponse._(); - - BuiltList get languages; - - Map toJson() { - return serializers.serializeWith(LanguageResponse.serializer, this) as Map; - } - - static LanguageResponse fromJson(Map json) { - return serializers.deserializeWith(LanguageResponse.serializer, json)!; - } - - static Serializer get serializer => _$languageResponseSerializer; -} \ No newline at end of file + factory LanguageResponse.fromJson(Map json) => + _$LanguageResponseFromJson(json); +} diff --git a/lib/api/models/language_response.freezed.dart b/lib/api/models/language_response.freezed.dart new file mode 100644 index 0000000..1752fec --- /dev/null +++ b/lib/api/models/language_response.freezed.dart @@ -0,0 +1,277 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND +// coverage:ignore-file +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'language_response.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +// dart format off +T _$identity(T value) => value; + +/// @nodoc +mixin _$LanguageResponse { + + List get languages; +/// Create a copy of LanguageResponse +/// with the given fields replaced by the non-null parameter values. +@JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +$LanguageResponseCopyWith get copyWith => _$LanguageResponseCopyWithImpl(this as LanguageResponse, _$identity); + + /// Serializes this LanguageResponse to a JSON map. + Map toJson(); + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is LanguageResponse&&const DeepCollectionEquality().equals(other.languages, languages)); +} + +@JsonKey(includeFromJson: false, includeToJson: false) +@override +int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(languages)); + +@override +String toString() { + return 'LanguageResponse(languages: $languages)'; +} + + +} + +/// @nodoc +abstract mixin class $LanguageResponseCopyWith<$Res> { + factory $LanguageResponseCopyWith(LanguageResponse value, $Res Function(LanguageResponse) _then) = _$LanguageResponseCopyWithImpl; +@useResult +$Res call({ + List languages +}); + + + + +} +/// @nodoc +class _$LanguageResponseCopyWithImpl<$Res> + implements $LanguageResponseCopyWith<$Res> { + _$LanguageResponseCopyWithImpl(this._self, this._then); + + final LanguageResponse _self; + final $Res Function(LanguageResponse) _then; + +/// Create a copy of LanguageResponse +/// with the given fields replaced by the non-null parameter values. +@pragma('vm:prefer-inline') @override $Res call({Object? languages = null,}) { + return _then(_self.copyWith( +languages: null == languages ? _self.languages : languages // ignore: cast_nullable_to_non_nullable +as List, + )); +} + +} + + +/// Adds pattern-matching-related methods to [LanguageResponse]. +extension LanguageResponsePatterns on LanguageResponse { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap(TResult Function( _LanguageResponse value)? $default,{required TResult orElse(),}){ +final _that = this; +switch (_that) { +case _LanguageResponse() when $default != null: +return $default(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map(TResult Function( _LanguageResponse value) $default,){ +final _that = this; +switch (_that) { +case _LanguageResponse(): +return $default(_that);} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull(TResult? Function( _LanguageResponse value)? $default,){ +final _that = this; +switch (_that) { +case _LanguageResponse() when $default != null: +return $default(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen(TResult Function( List languages)? $default,{required TResult orElse(),}) {final _that = this; +switch (_that) { +case _LanguageResponse() when $default != null: +return $default(_that.languages);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when(TResult Function( List languages) $default,) {final _that = this; +switch (_that) { +case _LanguageResponse(): +return $default(_that.languages);} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull(TResult? Function( List languages)? $default,) {final _that = this; +switch (_that) { +case _LanguageResponse() when $default != null: +return $default(_that.languages);case _: + return null; + +} +} + +} + +/// @nodoc +@JsonSerializable() + +class _LanguageResponse implements LanguageResponse { + const _LanguageResponse({final List languages = const []}): _languages = languages; + factory _LanguageResponse.fromJson(Map json) => _$LanguageResponseFromJson(json); + + final List _languages; +@override@JsonKey() List get languages { + if (_languages is EqualUnmodifiableListView) return _languages; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_languages); +} + + +/// Create a copy of LanguageResponse +/// with the given fields replaced by the non-null parameter values. +@override @JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +_$LanguageResponseCopyWith<_LanguageResponse> get copyWith => __$LanguageResponseCopyWithImpl<_LanguageResponse>(this, _$identity); + +@override +Map toJson() { + return _$LanguageResponseToJson(this, ); +} + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is _LanguageResponse&&const DeepCollectionEquality().equals(other._languages, _languages)); +} + +@JsonKey(includeFromJson: false, includeToJson: false) +@override +int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(_languages)); + +@override +String toString() { + return 'LanguageResponse(languages: $languages)'; +} + + +} + +/// @nodoc +abstract mixin class _$LanguageResponseCopyWith<$Res> implements $LanguageResponseCopyWith<$Res> { + factory _$LanguageResponseCopyWith(_LanguageResponse value, $Res Function(_LanguageResponse) _then) = __$LanguageResponseCopyWithImpl; +@override @useResult +$Res call({ + List languages +}); + + + + +} +/// @nodoc +class __$LanguageResponseCopyWithImpl<$Res> + implements _$LanguageResponseCopyWith<$Res> { + __$LanguageResponseCopyWithImpl(this._self, this._then); + + final _LanguageResponse _self; + final $Res Function(_LanguageResponse) _then; + +/// Create a copy of LanguageResponse +/// with the given fields replaced by the non-null parameter values. +@override @pragma('vm:prefer-inline') $Res call({Object? languages = null,}) { + return _then(_LanguageResponse( +languages: null == languages ? _self._languages : languages // ignore: cast_nullable_to_non_nullable +as List, + )); +} + + +} + +// dart format on diff --git a/lib/api/models/language_response.g.dart b/lib/api/models/language_response.g.dart index 9e87512..1100505 100644 --- a/lib/api/models/language_response.g.dart +++ b/lib/api/models/language_response.g.dart @@ -3,153 +3,17 @@ part of 'language_response.dart'; // ************************************************************************** -// BuiltValueGenerator +// JsonSerializableGenerator // ************************************************************************** -Serializer _$languageResponseSerializer = - new _$LanguageResponseSerializer(); - -class _$LanguageResponseSerializer - implements StructuredSerializer { - @override - final Iterable types = const [LanguageResponse, _$LanguageResponse]; - @override - final String wireName = 'LanguageResponse'; - - @override - Iterable serialize(Serializers serializers, LanguageResponse object, - {FullType specifiedType = FullType.unspecified}) { - final result = [ - 'languages', - serializers.serialize(object.languages, - specifiedType: - const FullType(BuiltList, const [const FullType(Language)])), - ]; - - return result; - } - - @override - LanguageResponse deserialize( - Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { - final result = new LanguageResponseBuilder(); - - final iterator = serialized.iterator; - while (iterator.moveNext()) { - final key = iterator.current! as String; - iterator.moveNext(); - final Object? value = iterator.current; - switch (key) { - case 'languages': - result.languages.replace(serializers.deserialize(value, - specifiedType: const FullType( - BuiltList, const [const FullType(Language)]))! - as BuiltList); - break; - } - } - - return result.build(); - } -} - -class _$LanguageResponse extends LanguageResponse { - @override - final BuiltList languages; - - factory _$LanguageResponse( - [void Function(LanguageResponseBuilder)? updates]) => - (new LanguageResponseBuilder()..update(updates))._build(); - - _$LanguageResponse._({required this.languages}) : super._() { - BuiltValueNullFieldError.checkNotNull( - languages, r'LanguageResponse', 'languages'); - } - - @override - LanguageResponse rebuild(void Function(LanguageResponseBuilder) updates) => - (toBuilder()..update(updates)).build(); - - @override - LanguageResponseBuilder toBuilder() => - new LanguageResponseBuilder()..replace(this); - - @override - bool operator ==(Object other) { - if (identical(other, this)) return true; - return other is LanguageResponse && languages == other.languages; - } - - @override - int get hashCode { - var _$hash = 0; - _$hash = $jc(_$hash, languages.hashCode); - _$hash = $jf(_$hash); - return _$hash; - } - - @override - String toString() { - return (newBuiltValueToStringHelper(r'LanguageResponse') - ..add('languages', languages)) - .toString(); - } -} - -class LanguageResponseBuilder - implements Builder { - _$LanguageResponse? _$v; - - ListBuilder? _languages; - ListBuilder get languages => - _$this._languages ??= new ListBuilder(); - set languages(ListBuilder? languages) => - _$this._languages = languages; - - LanguageResponseBuilder(); - - LanguageResponseBuilder get _$this { - final $v = _$v; - if ($v != null) { - _languages = $v.languages.toBuilder(); - _$v = null; - } - return this; - } - - @override - void replace(LanguageResponse other) { - ArgumentError.checkNotNull(other, 'other'); - _$v = other as _$LanguageResponse; - } - - @override - void update(void Function(LanguageResponseBuilder)? updates) { - if (updates != null) updates(this); - } - - @override - LanguageResponse build() => _build(); - - _$LanguageResponse _build() { - _$LanguageResponse _$result; - try { - _$result = _$v ?? new _$LanguageResponse._(languages: languages.build()); - } catch (_) { - late String _$failedField; - try { - _$failedField = 'languages'; - languages.build(); - } catch (e) { - throw new BuiltValueNestedFieldError( - r'LanguageResponse', _$failedField, e.toString()); - } - rethrow; - } - replace(_$result); - return _$result; - } -} - -// ignore_for_file: deprecated_member_use_from_same_package,type=lint +_LanguageResponse _$LanguageResponseFromJson(Map json) => + _LanguageResponse( + languages: + (json['languages'] as List?) + ?.map((e) => Language.fromJson(e as Map)) + .toList() ?? + const [], + ); + +Map _$LanguageResponseToJson(_LanguageResponse instance) => + {'languages': instance.languages}; diff --git a/lib/api/models/theme_service_hive_adapters.dart b/lib/api/models/theme_service_hive_adapters.dart deleted file mode 100644 index fc8d7af..0000000 --- a/lib/api/models/theme_service_hive_adapters.dart +++ /dev/null @@ -1,309 +0,0 @@ -import 'package:flex_color_scheme/flex_color_scheme.dart'; -import 'package:flutter/material.dart'; -import 'package:hive_built_value/hive_built_value.dart'; - -import '../../ui/theme/adaptive_theme.dart'; - -/// A Hive data type adapter for enum [ThemeMode]. -class ThemeModeAdapter extends TypeAdapter { - @override - ThemeMode read(BinaryReader reader) { - final index = reader.readInt(); - return ThemeMode.values[index]; - } - - @override - void write(BinaryWriter writer, ThemeMode obj) { - writer.writeInt(obj.index); - } - - @override - int get typeId => 150; -} - -/// A Hive data type adapter for class [Color]. -class ColorAdapter extends TypeAdapter { - @override - Color read(BinaryReader reader) { - final value = reader.readInt(); - return Color(value); - } - - @override - void write(BinaryWriter writer, Color obj) { - writer.writeInt(obj.value); - } - - @override - int get typeId => 151; -} - -/// A Hive data type adapter for enum [FlexScheme]. -class FlexSchemeAdapter extends TypeAdapter { - @override - FlexScheme read(BinaryReader reader) { - final index = reader.readInt(); - return FlexScheme.values[index]; - } - - @override - void write(BinaryWriter writer, FlexScheme obj) { - writer.writeInt(obj.index); - } - - @override - int get typeId => 152; -} - -/// A Hive data type adapter for enum [FlexSurfaceMode]. -class FlexSurfaceModeAdapter extends TypeAdapter { - @override - FlexSurfaceMode read(BinaryReader reader) { - final index = reader.readInt(); - return FlexSurfaceMode.values[index]; - } - - @override - void write(BinaryWriter writer, FlexSurfaceMode obj) { - writer.writeInt(obj.index); - } - - @override - int get typeId => 153; -} - -/// A Hive data type adapter for enum [FlexInputBorderType]. -class FlexInputBorderTypeAdapter extends TypeAdapter { - @override - FlexInputBorderType read(BinaryReader reader) { - final index = reader.readInt(); - return FlexInputBorderType.values[index]; - } - - @override - void write(BinaryWriter writer, FlexInputBorderType obj) { - writer.writeInt(obj.index); - } - - @override - int get typeId => 154; -} - -/// A Hive data type adapter for enum [FlexAppBarStyle]. -class FlexAppBarStyleAdapter extends TypeAdapter { - @override - FlexAppBarStyle read(BinaryReader reader) { - final index = reader.readInt(); - return FlexAppBarStyle.values[index]; - } - - @override - void write(BinaryWriter writer, FlexAppBarStyle obj) { - writer.writeInt(obj.index); - } - - @override - int get typeId => 155; -} - -/// A Hive data type adapter for enum [FlexTabBarStyle], nullable. -/// -/// Handles storing value as -1 and returns anything out of enum -/// index range as null value. -class FlexTabBarStyleAdapter extends TypeAdapter { - @override - FlexTabBarStyle? read(BinaryReader reader) { - final index = reader.readInt(); - if (index < 0 || index >= FlexTabBarStyle.values.length) { - return null; - } else { - return FlexTabBarStyle.values[index]; - } - } - - @override - void write(BinaryWriter writer, FlexTabBarStyle? obj) { - writer.writeInt(obj?.index ?? -1); - } - - @override - int get typeId => 156; -} - -/// A Hive data type adapter for enum [FlexSystemNavBarStyle]. -class FlexSystemNavBarStyleAdapter extends TypeAdapter { - @override - FlexSystemNavBarStyle read(BinaryReader reader) { - final index = reader.readInt(); - return FlexSystemNavBarStyle.values[index]; - } - - @override - void write(BinaryWriter writer, FlexSystemNavBarStyle obj) { - writer.writeInt(obj.index); - } - - @override - int get typeId => 157; -} - -/// A Hive data type adapter for enum [SchemeColor], nullable. -/// -/// Handles storing value as -1 and returns anything out of enum -/// index range as null value. -class FlexSchemeColorAdapter extends TypeAdapter { - @override - SchemeColor? read(BinaryReader reader) { - final index = reader.readInt(); - if (index < 0 || index >= SchemeColor.values.length) { - return null; - } else { - return SchemeColor.values[index]; - } - } - - @override - void write(BinaryWriter writer, SchemeColor? obj) { - writer.writeInt(obj?.index ?? -1); - } - - @override - int get typeId => 158; -} - -/// A Hive data type adapter for enum [NavigationDestinationLabelBehavior]. -class NavigationDestinationLabelBehaviorAdapter - extends TypeAdapter { - @override - NavigationDestinationLabelBehavior read(BinaryReader reader) { - final index = reader.readInt(); - return NavigationDestinationLabelBehavior.values[index]; - } - - @override - void write(BinaryWriter writer, NavigationDestinationLabelBehavior obj) { - writer.writeInt(obj.index); - } - - @override - int get typeId => 159; -} - -/// A Hive data type adapter for enum [NavigationRailLabelType]. -class NavigationRailLabelTypeAdapter - extends TypeAdapter { - @override - NavigationRailLabelType read(BinaryReader reader) { - final index = reader.readInt(); - return NavigationRailLabelType.values[index]; - } - - @override - void write(BinaryWriter writer, NavigationRailLabelType obj) { - writer.writeInt(obj.index); - } - - @override - int get typeId => 160; -} - -/// A Hive data type adapter for enum [FlexSliderIndicatorType], nullable. -/// -/// Handles storing value as -1 and returns anything out of enum -/// index range as null value. -class FlexSliderIndicatorTypeAdapter - extends TypeAdapter { - @override - FlexSliderIndicatorType? read(BinaryReader reader) { - final index = reader.readInt(); - if (index < 0 || index >= FlexSliderIndicatorType.values.length) { - return null; - } else { - return FlexSliderIndicatorType.values[index]; - } - } - - @override - void write(BinaryWriter writer, FlexSliderIndicatorType? obj) { - writer.writeInt(obj?.index ?? -1); - } - - @override - int get typeId => 161; -} - -/// A Hive data type adapter for enum [ShowValueIndicator], nullable. -/// -/// Handles storing value as -1 and returns anything out of enum -/// index range as null value. -class ShowValueIndicatorAdapter extends TypeAdapter { - @override - ShowValueIndicator? read(BinaryReader reader) { - final index = reader.readInt(); - if (index < 0 || index >= ShowValueIndicator.values.length) { - return null; - } else { - return ShowValueIndicator.values[index]; - } - } - - @override - void write(BinaryWriter writer, ShowValueIndicator? obj) { - writer.writeInt(obj?.index ?? -1); - } - - @override - int get typeId => 162; -} - -// Value typeId => 163 was used before for enum FlexTint that was removed. -// Value typeId => 164 was used before for enum FlexShadow that was removed. -// Not using them to avoid type conversion issues with previous file data. - -/// A Hive data type adapter for enum [TabBarIndicatorSize], nullable. -/// -/// Handles storing value as -1 and returns anything out of enum -/// index range as null value. -class TabBarIndicatorSizeAdapter extends TypeAdapter { - @override - TabBarIndicatorSize? read(BinaryReader reader) { - final index = reader.readInt(); - if (index < 0 || index >= TabBarIndicatorSize.values.length) { - return null; - } else { - return TabBarIndicatorSize.values[index]; - } - } - - @override - void write(BinaryWriter writer, TabBarIndicatorSize? obj) { - writer.writeInt(obj?.index ?? -1); - } - - @override - int get typeId => 165; -} - -/// A Hive data type adapter for enum [AdaptiveTheme], nullable. -/// -/// Handles storing value as -1 and returns anything out of enum -/// index range as null value. -class AdaptiveThemeAdapter extends TypeAdapter { - @override - AdaptiveTheme? read(BinaryReader reader) { - final index = reader.readInt(); - if (index < 0 || index >= AdaptiveTheme.values.length) { - return null; - } else { - return AdaptiveTheme.values[index]; - } - } - - @override - void write(BinaryWriter writer, AdaptiveTheme? obj) { - writer.writeInt(obj?.index ?? -1); - } - - @override - int get typeId => 166; -} diff --git a/lib/api/models/user_profile.dart b/lib/api/models/user_profile.dart new file mode 100644 index 0000000..4f5f07d --- /dev/null +++ b/lib/api/models/user_profile.dart @@ -0,0 +1,18 @@ +import 'package:freezed_annotation/freezed_annotation.dart'; + +part 'user_profile.freezed.dart'; +part 'user_profile.g.dart'; + +/// Per-user profile stored in Firestore. +/// Firestore path: users/{uid} +@freezed +sealed class UserProfile with _$UserProfile { + const factory UserProfile({ + required String userId, + @Default('l1') String currentLanguageId, + @Default([]) List favouriteWordIds, + }) = _UserProfile; + + factory UserProfile.fromJson(Map json) => + _$UserProfileFromJson(json); +} diff --git a/lib/api/models/user_profile.freezed.dart b/lib/api/models/user_profile.freezed.dart new file mode 100644 index 0000000..2c8a70d --- /dev/null +++ b/lib/api/models/user_profile.freezed.dart @@ -0,0 +1,283 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND +// coverage:ignore-file +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'user_profile.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +// dart format off +T _$identity(T value) => value; + +/// @nodoc +mixin _$UserProfile { + + String get userId; String get currentLanguageId; List get favouriteWordIds; +/// Create a copy of UserProfile +/// with the given fields replaced by the non-null parameter values. +@JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +$UserProfileCopyWith get copyWith => _$UserProfileCopyWithImpl(this as UserProfile, _$identity); + + /// Serializes this UserProfile to a JSON map. + Map toJson(); + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is UserProfile&&(identical(other.userId, userId) || other.userId == userId)&&(identical(other.currentLanguageId, currentLanguageId) || other.currentLanguageId == currentLanguageId)&&const DeepCollectionEquality().equals(other.favouriteWordIds, favouriteWordIds)); +} + +@JsonKey(includeFromJson: false, includeToJson: false) +@override +int get hashCode => Object.hash(runtimeType,userId,currentLanguageId,const DeepCollectionEquality().hash(favouriteWordIds)); + +@override +String toString() { + return 'UserProfile(userId: $userId, currentLanguageId: $currentLanguageId, favouriteWordIds: $favouriteWordIds)'; +} + + +} + +/// @nodoc +abstract mixin class $UserProfileCopyWith<$Res> { + factory $UserProfileCopyWith(UserProfile value, $Res Function(UserProfile) _then) = _$UserProfileCopyWithImpl; +@useResult +$Res call({ + String userId, String currentLanguageId, List favouriteWordIds +}); + + + + +} +/// @nodoc +class _$UserProfileCopyWithImpl<$Res> + implements $UserProfileCopyWith<$Res> { + _$UserProfileCopyWithImpl(this._self, this._then); + + final UserProfile _self; + final $Res Function(UserProfile) _then; + +/// Create a copy of UserProfile +/// with the given fields replaced by the non-null parameter values. +@pragma('vm:prefer-inline') @override $Res call({Object? userId = null,Object? currentLanguageId = null,Object? favouriteWordIds = null,}) { + return _then(_self.copyWith( +userId: null == userId ? _self.userId : userId // ignore: cast_nullable_to_non_nullable +as String,currentLanguageId: null == currentLanguageId ? _self.currentLanguageId : currentLanguageId // ignore: cast_nullable_to_non_nullable +as String,favouriteWordIds: null == favouriteWordIds ? _self.favouriteWordIds : favouriteWordIds // ignore: cast_nullable_to_non_nullable +as List, + )); +} + +} + + +/// Adds pattern-matching-related methods to [UserProfile]. +extension UserProfilePatterns on UserProfile { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap(TResult Function( _UserProfile value)? $default,{required TResult orElse(),}){ +final _that = this; +switch (_that) { +case _UserProfile() when $default != null: +return $default(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map(TResult Function( _UserProfile value) $default,){ +final _that = this; +switch (_that) { +case _UserProfile(): +return $default(_that);} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull(TResult? Function( _UserProfile value)? $default,){ +final _that = this; +switch (_that) { +case _UserProfile() when $default != null: +return $default(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen(TResult Function( String userId, String currentLanguageId, List favouriteWordIds)? $default,{required TResult orElse(),}) {final _that = this; +switch (_that) { +case _UserProfile() when $default != null: +return $default(_that.userId,_that.currentLanguageId,_that.favouriteWordIds);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when(TResult Function( String userId, String currentLanguageId, List favouriteWordIds) $default,) {final _that = this; +switch (_that) { +case _UserProfile(): +return $default(_that.userId,_that.currentLanguageId,_that.favouriteWordIds);} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull(TResult? Function( String userId, String currentLanguageId, List favouriteWordIds)? $default,) {final _that = this; +switch (_that) { +case _UserProfile() when $default != null: +return $default(_that.userId,_that.currentLanguageId,_that.favouriteWordIds);case _: + return null; + +} +} + +} + +/// @nodoc +@JsonSerializable() + +class _UserProfile implements UserProfile { + const _UserProfile({required this.userId, this.currentLanguageId = 'l1', final List favouriteWordIds = const []}): _favouriteWordIds = favouriteWordIds; + factory _UserProfile.fromJson(Map json) => _$UserProfileFromJson(json); + +@override final String userId; +@override@JsonKey() final String currentLanguageId; + final List _favouriteWordIds; +@override@JsonKey() List get favouriteWordIds { + if (_favouriteWordIds is EqualUnmodifiableListView) return _favouriteWordIds; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_favouriteWordIds); +} + + +/// Create a copy of UserProfile +/// with the given fields replaced by the non-null parameter values. +@override @JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +_$UserProfileCopyWith<_UserProfile> get copyWith => __$UserProfileCopyWithImpl<_UserProfile>(this, _$identity); + +@override +Map toJson() { + return _$UserProfileToJson(this, ); +} + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is _UserProfile&&(identical(other.userId, userId) || other.userId == userId)&&(identical(other.currentLanguageId, currentLanguageId) || other.currentLanguageId == currentLanguageId)&&const DeepCollectionEquality().equals(other._favouriteWordIds, _favouriteWordIds)); +} + +@JsonKey(includeFromJson: false, includeToJson: false) +@override +int get hashCode => Object.hash(runtimeType,userId,currentLanguageId,const DeepCollectionEquality().hash(_favouriteWordIds)); + +@override +String toString() { + return 'UserProfile(userId: $userId, currentLanguageId: $currentLanguageId, favouriteWordIds: $favouriteWordIds)'; +} + + +} + +/// @nodoc +abstract mixin class _$UserProfileCopyWith<$Res> implements $UserProfileCopyWith<$Res> { + factory _$UserProfileCopyWith(_UserProfile value, $Res Function(_UserProfile) _then) = __$UserProfileCopyWithImpl; +@override @useResult +$Res call({ + String userId, String currentLanguageId, List favouriteWordIds +}); + + + + +} +/// @nodoc +class __$UserProfileCopyWithImpl<$Res> + implements _$UserProfileCopyWith<$Res> { + __$UserProfileCopyWithImpl(this._self, this._then); + + final _UserProfile _self; + final $Res Function(_UserProfile) _then; + +/// Create a copy of UserProfile +/// with the given fields replaced by the non-null parameter values. +@override @pragma('vm:prefer-inline') $Res call({Object? userId = null,Object? currentLanguageId = null,Object? favouriteWordIds = null,}) { + return _then(_UserProfile( +userId: null == userId ? _self.userId : userId // ignore: cast_nullable_to_non_nullable +as String,currentLanguageId: null == currentLanguageId ? _self.currentLanguageId : currentLanguageId // ignore: cast_nullable_to_non_nullable +as String,favouriteWordIds: null == favouriteWordIds ? _self._favouriteWordIds : favouriteWordIds // ignore: cast_nullable_to_non_nullable +as List, + )); +} + + +} + +// dart format on diff --git a/lib/api/models/user_profile.g.dart b/lib/api/models/user_profile.g.dart new file mode 100644 index 0000000..0101336 --- /dev/null +++ b/lib/api/models/user_profile.g.dart @@ -0,0 +1,24 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'user_profile.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +_UserProfile _$UserProfileFromJson(Map json) => _UserProfile( + userId: json['userId'] as String, + currentLanguageId: json['currentLanguageId'] as String? ?? 'l1', + favouriteWordIds: + (json['favouriteWordIds'] as List?) + ?.map((e) => e as String) + .toList() ?? + const [], +); + +Map _$UserProfileToJson(_UserProfile instance) => + { + 'userId': instance.userId, + 'currentLanguageId': instance.currentLanguageId, + 'favouriteWordIds': instance.favouriteWordIds, + }; diff --git a/lib/api/models/word.dart b/lib/api/models/word.dart index 83518fc..947ae1f 100644 --- a/lib/api/models/word.dart +++ b/lib/api/models/word.dart @@ -1,66 +1,47 @@ -import 'package:built_collection/built_collection.dart'; -import 'package:built_value/built_value.dart'; -import 'package:built_value/serializer.dart'; -import 'package:hive_built_value/hive_built_value.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; -import '../serializers/serializers.dart'; import 'word_sub_type.dart'; import 'word_type.dart'; +part 'word.freezed.dart'; part 'word.g.dart'; -@HiveType(typeId: 1) -abstract class Word implements Built { +@freezed +sealed class Word with _$Word { + const factory Word({ + required String wordId, - factory Word([void Function(WordBuilder) updates]) = _$Word; - Word._(); + /// Text shown on the card. + required String text, - @HiveField(0) - String get wordId; + /// What the TTS engine speaks. If null, [text] is used directly. + /// Supports SSML/IPA for precise phonetic control. + String? phoneticOverride, - @HiveField(1) - DateTime? get createdDate; + required WordType type, + required WordSubType subType, - @HiveField(2) - WordType get type; + /// Filename only for core vocabulary (e.g. `bowl.png`), resolved to a + /// full Firebase Storage path at display time via [ImagePathService]. + /// User-added words store the full path directly. + String? imagePath, - @HiveField(3) - WordSubType get subType; + /// False for user-created words. + @Default(true) bool isCoreVocabulary, - @HiveField(4) - String get word; + @Default(false) bool isFavourite, - @HiveField(5) - BuiltList get imageList; + /// Manually curated follow-up word IDs. + @Default([]) List extraRelatedWordIds, - @HiveField(6) - String get sound; + /// Cached AI-suggested follow-up word IDs (offline predictions). + @Default([]) List aiSuggestedFollowUps, - @HiveField(7) - bool? get isFavourite; + /// Float32 vector for offline semantic search. + List? localEmbedding, - @HiveField(8) - double? get usageCount; + DateTime? createdDate, + }) = _Word; - @HiveField(9) - double? get keyStage; - - @HiveField(10) - bool? get isUserAdded; - - @HiveField(11) - bool? get isBackedUp; - - @HiveField(12) - BuiltList get extraRelatedWordIds; - - Map toJson() { - return serializers.serializeWith(Word.serializer, this) as Map; - } - - static Word fromJson(Map json) { - return serializers.deserializeWith(Word.serializer, json)!; - } - - static Serializer get serializer => _$wordSerializer; -} \ No newline at end of file + factory Word.fromJson(Map json) => _$WordFromJson(json); +} diff --git a/lib/api/models/word.freezed.dart b/lib/api/models/word.freezed.dart new file mode 100644 index 0000000..90ef75d --- /dev/null +++ b/lib/api/models/word.freezed.dart @@ -0,0 +1,347 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND +// coverage:ignore-file +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'word.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +// dart format off +T _$identity(T value) => value; + +/// @nodoc +mixin _$Word { + + String get wordId;/// Text shown on the card. + String get text;/// What the TTS engine speaks. If null, [text] is used directly. +/// Supports SSML/IPA for precise phonetic control. + String? get phoneticOverride; WordType get type; WordSubType get subType;/// Filename only for core vocabulary (e.g. `bowl.png`), resolved to a +/// full Firebase Storage path at display time via [ImagePathService]. +/// User-added words store the full path directly. + String? get imagePath;/// False for user-created words. + bool get isCoreVocabulary; bool get isFavourite;/// Manually curated follow-up word IDs. + List get extraRelatedWordIds;/// Cached AI-suggested follow-up word IDs (offline predictions). + List get aiSuggestedFollowUps;/// Float32 vector for offline semantic search. + List? get localEmbedding; DateTime? get createdDate; +/// Create a copy of Word +/// with the given fields replaced by the non-null parameter values. +@JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +$WordCopyWith get copyWith => _$WordCopyWithImpl(this as Word, _$identity); + + /// Serializes this Word to a JSON map. + Map toJson(); + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is Word&&(identical(other.wordId, wordId) || other.wordId == wordId)&&(identical(other.text, text) || other.text == text)&&(identical(other.phoneticOverride, phoneticOverride) || other.phoneticOverride == phoneticOverride)&&(identical(other.type, type) || other.type == type)&&(identical(other.subType, subType) || other.subType == subType)&&(identical(other.imagePath, imagePath) || other.imagePath == imagePath)&&(identical(other.isCoreVocabulary, isCoreVocabulary) || other.isCoreVocabulary == isCoreVocabulary)&&(identical(other.isFavourite, isFavourite) || other.isFavourite == isFavourite)&&const DeepCollectionEquality().equals(other.extraRelatedWordIds, extraRelatedWordIds)&&const DeepCollectionEquality().equals(other.aiSuggestedFollowUps, aiSuggestedFollowUps)&&const DeepCollectionEquality().equals(other.localEmbedding, localEmbedding)&&(identical(other.createdDate, createdDate) || other.createdDate == createdDate)); +} + +@JsonKey(includeFromJson: false, includeToJson: false) +@override +int get hashCode => Object.hash(runtimeType,wordId,text,phoneticOverride,type,subType,imagePath,isCoreVocabulary,isFavourite,const DeepCollectionEquality().hash(extraRelatedWordIds),const DeepCollectionEquality().hash(aiSuggestedFollowUps),const DeepCollectionEquality().hash(localEmbedding),createdDate); + +@override +String toString() { + return 'Word(wordId: $wordId, text: $text, phoneticOverride: $phoneticOverride, type: $type, subType: $subType, imagePath: $imagePath, isCoreVocabulary: $isCoreVocabulary, isFavourite: $isFavourite, extraRelatedWordIds: $extraRelatedWordIds, aiSuggestedFollowUps: $aiSuggestedFollowUps, localEmbedding: $localEmbedding, createdDate: $createdDate)'; +} + + +} + +/// @nodoc +abstract mixin class $WordCopyWith<$Res> { + factory $WordCopyWith(Word value, $Res Function(Word) _then) = _$WordCopyWithImpl; +@useResult +$Res call({ + String wordId, String text, String? phoneticOverride, WordType type, WordSubType subType, String? imagePath, bool isCoreVocabulary, bool isFavourite, List extraRelatedWordIds, List aiSuggestedFollowUps, List? localEmbedding, DateTime? createdDate +}); + + + + +} +/// @nodoc +class _$WordCopyWithImpl<$Res> + implements $WordCopyWith<$Res> { + _$WordCopyWithImpl(this._self, this._then); + + final Word _self; + final $Res Function(Word) _then; + +/// Create a copy of Word +/// with the given fields replaced by the non-null parameter values. +@pragma('vm:prefer-inline') @override $Res call({Object? wordId = null,Object? text = null,Object? phoneticOverride = freezed,Object? type = null,Object? subType = null,Object? imagePath = freezed,Object? isCoreVocabulary = null,Object? isFavourite = null,Object? extraRelatedWordIds = null,Object? aiSuggestedFollowUps = null,Object? localEmbedding = freezed,Object? createdDate = freezed,}) { + return _then(_self.copyWith( +wordId: null == wordId ? _self.wordId : wordId // ignore: cast_nullable_to_non_nullable +as String,text: null == text ? _self.text : text // ignore: cast_nullable_to_non_nullable +as String,phoneticOverride: freezed == phoneticOverride ? _self.phoneticOverride : phoneticOverride // ignore: cast_nullable_to_non_nullable +as String?,type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable +as WordType,subType: null == subType ? _self.subType : subType // ignore: cast_nullable_to_non_nullable +as WordSubType,imagePath: freezed == imagePath ? _self.imagePath : imagePath // ignore: cast_nullable_to_non_nullable +as String?,isCoreVocabulary: null == isCoreVocabulary ? _self.isCoreVocabulary : isCoreVocabulary // ignore: cast_nullable_to_non_nullable +as bool,isFavourite: null == isFavourite ? _self.isFavourite : isFavourite // ignore: cast_nullable_to_non_nullable +as bool,extraRelatedWordIds: null == extraRelatedWordIds ? _self.extraRelatedWordIds : extraRelatedWordIds // ignore: cast_nullable_to_non_nullable +as List,aiSuggestedFollowUps: null == aiSuggestedFollowUps ? _self.aiSuggestedFollowUps : aiSuggestedFollowUps // ignore: cast_nullable_to_non_nullable +as List,localEmbedding: freezed == localEmbedding ? _self.localEmbedding : localEmbedding // ignore: cast_nullable_to_non_nullable +as List?,createdDate: freezed == createdDate ? _self.createdDate : createdDate // ignore: cast_nullable_to_non_nullable +as DateTime?, + )); +} + +} + + +/// Adds pattern-matching-related methods to [Word]. +extension WordPatterns on Word { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap(TResult Function( _Word value)? $default,{required TResult orElse(),}){ +final _that = this; +switch (_that) { +case _Word() when $default != null: +return $default(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map(TResult Function( _Word value) $default,){ +final _that = this; +switch (_that) { +case _Word(): +return $default(_that);} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull(TResult? Function( _Word value)? $default,){ +final _that = this; +switch (_that) { +case _Word() when $default != null: +return $default(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen(TResult Function( String wordId, String text, String? phoneticOverride, WordType type, WordSubType subType, String? imagePath, bool isCoreVocabulary, bool isFavourite, List extraRelatedWordIds, List aiSuggestedFollowUps, List? localEmbedding, DateTime? createdDate)? $default,{required TResult orElse(),}) {final _that = this; +switch (_that) { +case _Word() when $default != null: +return $default(_that.wordId,_that.text,_that.phoneticOverride,_that.type,_that.subType,_that.imagePath,_that.isCoreVocabulary,_that.isFavourite,_that.extraRelatedWordIds,_that.aiSuggestedFollowUps,_that.localEmbedding,_that.createdDate);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when(TResult Function( String wordId, String text, String? phoneticOverride, WordType type, WordSubType subType, String? imagePath, bool isCoreVocabulary, bool isFavourite, List extraRelatedWordIds, List aiSuggestedFollowUps, List? localEmbedding, DateTime? createdDate) $default,) {final _that = this; +switch (_that) { +case _Word(): +return $default(_that.wordId,_that.text,_that.phoneticOverride,_that.type,_that.subType,_that.imagePath,_that.isCoreVocabulary,_that.isFavourite,_that.extraRelatedWordIds,_that.aiSuggestedFollowUps,_that.localEmbedding,_that.createdDate);} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull(TResult? Function( String wordId, String text, String? phoneticOverride, WordType type, WordSubType subType, String? imagePath, bool isCoreVocabulary, bool isFavourite, List extraRelatedWordIds, List aiSuggestedFollowUps, List? localEmbedding, DateTime? createdDate)? $default,) {final _that = this; +switch (_that) { +case _Word() when $default != null: +return $default(_that.wordId,_that.text,_that.phoneticOverride,_that.type,_that.subType,_that.imagePath,_that.isCoreVocabulary,_that.isFavourite,_that.extraRelatedWordIds,_that.aiSuggestedFollowUps,_that.localEmbedding,_that.createdDate);case _: + return null; + +} +} + +} + +/// @nodoc +@JsonSerializable() + +class _Word implements Word { + const _Word({required this.wordId, required this.text, this.phoneticOverride, required this.type, required this.subType, this.imagePath, this.isCoreVocabulary = true, this.isFavourite = false, final List extraRelatedWordIds = const [], final List aiSuggestedFollowUps = const [], final List? localEmbedding, this.createdDate}): _extraRelatedWordIds = extraRelatedWordIds,_aiSuggestedFollowUps = aiSuggestedFollowUps,_localEmbedding = localEmbedding; + factory _Word.fromJson(Map json) => _$WordFromJson(json); + +@override final String wordId; +/// Text shown on the card. +@override final String text; +/// What the TTS engine speaks. If null, [text] is used directly. +/// Supports SSML/IPA for precise phonetic control. +@override final String? phoneticOverride; +@override final WordType type; +@override final WordSubType subType; +/// Filename only for core vocabulary (e.g. `bowl.png`), resolved to a +/// full Firebase Storage path at display time via [ImagePathService]. +/// User-added words store the full path directly. +@override final String? imagePath; +/// False for user-created words. +@override@JsonKey() final bool isCoreVocabulary; +@override@JsonKey() final bool isFavourite; +/// Manually curated follow-up word IDs. + final List _extraRelatedWordIds; +/// Manually curated follow-up word IDs. +@override@JsonKey() List get extraRelatedWordIds { + if (_extraRelatedWordIds is EqualUnmodifiableListView) return _extraRelatedWordIds; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_extraRelatedWordIds); +} + +/// Cached AI-suggested follow-up word IDs (offline predictions). + final List _aiSuggestedFollowUps; +/// Cached AI-suggested follow-up word IDs (offline predictions). +@override@JsonKey() List get aiSuggestedFollowUps { + if (_aiSuggestedFollowUps is EqualUnmodifiableListView) return _aiSuggestedFollowUps; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_aiSuggestedFollowUps); +} + +/// Float32 vector for offline semantic search. + final List? _localEmbedding; +/// Float32 vector for offline semantic search. +@override List? get localEmbedding { + final value = _localEmbedding; + if (value == null) return null; + if (_localEmbedding is EqualUnmodifiableListView) return _localEmbedding; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(value); +} + +@override final DateTime? createdDate; + +/// Create a copy of Word +/// with the given fields replaced by the non-null parameter values. +@override @JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +_$WordCopyWith<_Word> get copyWith => __$WordCopyWithImpl<_Word>(this, _$identity); + +@override +Map toJson() { + return _$WordToJson(this, ); +} + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is _Word&&(identical(other.wordId, wordId) || other.wordId == wordId)&&(identical(other.text, text) || other.text == text)&&(identical(other.phoneticOverride, phoneticOverride) || other.phoneticOverride == phoneticOverride)&&(identical(other.type, type) || other.type == type)&&(identical(other.subType, subType) || other.subType == subType)&&(identical(other.imagePath, imagePath) || other.imagePath == imagePath)&&(identical(other.isCoreVocabulary, isCoreVocabulary) || other.isCoreVocabulary == isCoreVocabulary)&&(identical(other.isFavourite, isFavourite) || other.isFavourite == isFavourite)&&const DeepCollectionEquality().equals(other._extraRelatedWordIds, _extraRelatedWordIds)&&const DeepCollectionEquality().equals(other._aiSuggestedFollowUps, _aiSuggestedFollowUps)&&const DeepCollectionEquality().equals(other._localEmbedding, _localEmbedding)&&(identical(other.createdDate, createdDate) || other.createdDate == createdDate)); +} + +@JsonKey(includeFromJson: false, includeToJson: false) +@override +int get hashCode => Object.hash(runtimeType,wordId,text,phoneticOverride,type,subType,imagePath,isCoreVocabulary,isFavourite,const DeepCollectionEquality().hash(_extraRelatedWordIds),const DeepCollectionEquality().hash(_aiSuggestedFollowUps),const DeepCollectionEquality().hash(_localEmbedding),createdDate); + +@override +String toString() { + return 'Word(wordId: $wordId, text: $text, phoneticOverride: $phoneticOverride, type: $type, subType: $subType, imagePath: $imagePath, isCoreVocabulary: $isCoreVocabulary, isFavourite: $isFavourite, extraRelatedWordIds: $extraRelatedWordIds, aiSuggestedFollowUps: $aiSuggestedFollowUps, localEmbedding: $localEmbedding, createdDate: $createdDate)'; +} + + +} + +/// @nodoc +abstract mixin class _$WordCopyWith<$Res> implements $WordCopyWith<$Res> { + factory _$WordCopyWith(_Word value, $Res Function(_Word) _then) = __$WordCopyWithImpl; +@override @useResult +$Res call({ + String wordId, String text, String? phoneticOverride, WordType type, WordSubType subType, String? imagePath, bool isCoreVocabulary, bool isFavourite, List extraRelatedWordIds, List aiSuggestedFollowUps, List? localEmbedding, DateTime? createdDate +}); + + + + +} +/// @nodoc +class __$WordCopyWithImpl<$Res> + implements _$WordCopyWith<$Res> { + __$WordCopyWithImpl(this._self, this._then); + + final _Word _self; + final $Res Function(_Word) _then; + +/// Create a copy of Word +/// with the given fields replaced by the non-null parameter values. +@override @pragma('vm:prefer-inline') $Res call({Object? wordId = null,Object? text = null,Object? phoneticOverride = freezed,Object? type = null,Object? subType = null,Object? imagePath = freezed,Object? isCoreVocabulary = null,Object? isFavourite = null,Object? extraRelatedWordIds = null,Object? aiSuggestedFollowUps = null,Object? localEmbedding = freezed,Object? createdDate = freezed,}) { + return _then(_Word( +wordId: null == wordId ? _self.wordId : wordId // ignore: cast_nullable_to_non_nullable +as String,text: null == text ? _self.text : text // ignore: cast_nullable_to_non_nullable +as String,phoneticOverride: freezed == phoneticOverride ? _self.phoneticOverride : phoneticOverride // ignore: cast_nullable_to_non_nullable +as String?,type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable +as WordType,subType: null == subType ? _self.subType : subType // ignore: cast_nullable_to_non_nullable +as WordSubType,imagePath: freezed == imagePath ? _self.imagePath : imagePath // ignore: cast_nullable_to_non_nullable +as String?,isCoreVocabulary: null == isCoreVocabulary ? _self.isCoreVocabulary : isCoreVocabulary // ignore: cast_nullable_to_non_nullable +as bool,isFavourite: null == isFavourite ? _self.isFavourite : isFavourite // ignore: cast_nullable_to_non_nullable +as bool,extraRelatedWordIds: null == extraRelatedWordIds ? _self._extraRelatedWordIds : extraRelatedWordIds // ignore: cast_nullable_to_non_nullable +as List,aiSuggestedFollowUps: null == aiSuggestedFollowUps ? _self._aiSuggestedFollowUps : aiSuggestedFollowUps // ignore: cast_nullable_to_non_nullable +as List,localEmbedding: freezed == localEmbedding ? _self._localEmbedding : localEmbedding // ignore: cast_nullable_to_non_nullable +as List?,createdDate: freezed == createdDate ? _self.createdDate : createdDate // ignore: cast_nullable_to_non_nullable +as DateTime?, + )); +} + + +} + +// dart format on diff --git a/lib/api/models/word.g.dart b/lib/api/models/word.g.dart index 68a56d9..76997ce 100644 --- a/lib/api/models/word.g.dart +++ b/lib/api/models/word.g.dart @@ -3,501 +3,87 @@ part of 'word.dart'; // ************************************************************************** -// BuiltValueGenerator +// JsonSerializableGenerator // ************************************************************************** -Serializer _$wordSerializer = new _$WordSerializer(); - -class _$WordSerializer implements StructuredSerializer { - @override - final Iterable types = const [Word, _$Word]; - @override - final String wireName = 'Word'; - - @override - Iterable serialize(Serializers serializers, Word object, - {FullType specifiedType = FullType.unspecified}) { - final result = [ - 'wordId', - serializers.serialize(object.wordId, - specifiedType: const FullType(String)), - 'type', - serializers.serialize(object.type, - specifiedType: const FullType(WordType)), - 'subType', - serializers.serialize(object.subType, - specifiedType: const FullType(WordSubType)), - 'word', - serializers.serialize(object.word, specifiedType: const FullType(String)), - 'imageList', - serializers.serialize(object.imageList, - specifiedType: - const FullType(BuiltList, const [const FullType(String)])), - 'sound', - serializers.serialize(object.sound, - specifiedType: const FullType(String)), - 'extraRelatedWordIds', - serializers.serialize(object.extraRelatedWordIds, - specifiedType: - const FullType(BuiltList, const [const FullType(String)])), - ]; - Object? value; - value = object.createdDate; - if (value != null) { - result - ..add('createdDate') - ..add(serializers.serialize(value, - specifiedType: const FullType(DateTime))); - } - value = object.isFavourite; - if (value != null) { - result - ..add('isFavourite') - ..add( - serializers.serialize(value, specifiedType: const FullType(bool))); - } - value = object.usageCount; - if (value != null) { - result - ..add('usageCount') - ..add(serializers.serialize(value, - specifiedType: const FullType(double))); - } - value = object.keyStage; - if (value != null) { - result - ..add('keyStage') - ..add(serializers.serialize(value, - specifiedType: const FullType(double))); - } - value = object.isUserAdded; - if (value != null) { - result - ..add('isUserAdded') - ..add( - serializers.serialize(value, specifiedType: const FullType(bool))); - } - value = object.isBackedUp; - if (value != null) { - result - ..add('isBackedUp') - ..add( - serializers.serialize(value, specifiedType: const FullType(bool))); - } - return result; - } - - @override - Word deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { - final result = new WordBuilder(); - - final iterator = serialized.iterator; - while (iterator.moveNext()) { - final key = iterator.current! as String; - iterator.moveNext(); - final Object? value = iterator.current; - switch (key) { - case 'wordId': - result.wordId = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; - break; - case 'createdDate': - result.createdDate = serializers.deserialize(value, - specifiedType: const FullType(DateTime)) as DateTime?; - break; - case 'type': - result.type = serializers.deserialize(value, - specifiedType: const FullType(WordType))! as WordType; - break; - case 'subType': - result.subType = serializers.deserialize(value, - specifiedType: const FullType(WordSubType))! as WordSubType; - break; - case 'word': - result.word = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; - break; - case 'imageList': - result.imageList.replace(serializers.deserialize(value, - specifiedType: const FullType( - BuiltList, const [const FullType(String)]))! - as BuiltList); - break; - case 'sound': - result.sound = serializers.deserialize(value, - specifiedType: const FullType(String))! as String; - break; - case 'isFavourite': - result.isFavourite = serializers.deserialize(value, - specifiedType: const FullType(bool)) as bool?; - break; - case 'usageCount': - result.usageCount = serializers.deserialize(value, - specifiedType: const FullType(double)) as double?; - break; - case 'keyStage': - result.keyStage = serializers.deserialize(value, - specifiedType: const FullType(double)) as double?; - break; - case 'isUserAdded': - result.isUserAdded = serializers.deserialize(value, - specifiedType: const FullType(bool)) as bool?; - break; - case 'isBackedUp': - result.isBackedUp = serializers.deserialize(value, - specifiedType: const FullType(bool)) as bool?; - break; - case 'extraRelatedWordIds': - result.extraRelatedWordIds.replace(serializers.deserialize(value, - specifiedType: const FullType( - BuiltList, const [const FullType(String)]))! - as BuiltList); - break; - } - } - - return result.build(); - } -} - -class _$Word extends Word { - @override - final String wordId; - @override - final DateTime? createdDate; - @override - final WordType type; - @override - final WordSubType subType; - @override - final String word; - @override - final BuiltList imageList; - @override - final String sound; - @override - final bool? isFavourite; - @override - final double? usageCount; - @override - final double? keyStage; - @override - final bool? isUserAdded; - @override - final bool? isBackedUp; - @override - final BuiltList extraRelatedWordIds; - - factory _$Word([void Function(WordBuilder)? updates]) => - (new WordBuilder()..update(updates))._build(); - - _$Word._( - {required this.wordId, - this.createdDate, - required this.type, - required this.subType, - required this.word, - required this.imageList, - required this.sound, - this.isFavourite, - this.usageCount, - this.keyStage, - this.isUserAdded, - this.isBackedUp, - required this.extraRelatedWordIds}) - : super._() { - BuiltValueNullFieldError.checkNotNull(wordId, r'Word', 'wordId'); - BuiltValueNullFieldError.checkNotNull(type, r'Word', 'type'); - BuiltValueNullFieldError.checkNotNull(subType, r'Word', 'subType'); - BuiltValueNullFieldError.checkNotNull(word, r'Word', 'word'); - BuiltValueNullFieldError.checkNotNull(imageList, r'Word', 'imageList'); - BuiltValueNullFieldError.checkNotNull(sound, r'Word', 'sound'); - BuiltValueNullFieldError.checkNotNull( - extraRelatedWordIds, r'Word', 'extraRelatedWordIds'); - } - - @override - Word rebuild(void Function(WordBuilder) updates) => - (toBuilder()..update(updates)).build(); - - @override - WordBuilder toBuilder() => new WordBuilder()..replace(this); - - @override - bool operator ==(Object other) { - if (identical(other, this)) return true; - return other is Word && - wordId == other.wordId && - createdDate == other.createdDate && - type == other.type && - subType == other.subType && - word == other.word && - imageList == other.imageList && - sound == other.sound && - isFavourite == other.isFavourite && - usageCount == other.usageCount && - keyStage == other.keyStage && - isUserAdded == other.isUserAdded && - isBackedUp == other.isBackedUp && - extraRelatedWordIds == other.extraRelatedWordIds; - } - - @override - int get hashCode { - var _$hash = 0; - _$hash = $jc(_$hash, wordId.hashCode); - _$hash = $jc(_$hash, createdDate.hashCode); - _$hash = $jc(_$hash, type.hashCode); - _$hash = $jc(_$hash, subType.hashCode); - _$hash = $jc(_$hash, word.hashCode); - _$hash = $jc(_$hash, imageList.hashCode); - _$hash = $jc(_$hash, sound.hashCode); - _$hash = $jc(_$hash, isFavourite.hashCode); - _$hash = $jc(_$hash, usageCount.hashCode); - _$hash = $jc(_$hash, keyStage.hashCode); - _$hash = $jc(_$hash, isUserAdded.hashCode); - _$hash = $jc(_$hash, isBackedUp.hashCode); - _$hash = $jc(_$hash, extraRelatedWordIds.hashCode); - _$hash = $jf(_$hash); - return _$hash; - } - - @override - String toString() { - return (newBuiltValueToStringHelper(r'Word') - ..add('wordId', wordId) - ..add('createdDate', createdDate) - ..add('type', type) - ..add('subType', subType) - ..add('word', word) - ..add('imageList', imageList) - ..add('sound', sound) - ..add('isFavourite', isFavourite) - ..add('usageCount', usageCount) - ..add('keyStage', keyStage) - ..add('isUserAdded', isUserAdded) - ..add('isBackedUp', isBackedUp) - ..add('extraRelatedWordIds', extraRelatedWordIds)) - .toString(); - } -} - -class WordBuilder implements Builder { - _$Word? _$v; - - String? _wordId; - String? get wordId => _$this._wordId; - set wordId(String? wordId) => _$this._wordId = wordId; - - DateTime? _createdDate; - DateTime? get createdDate => _$this._createdDate; - set createdDate(DateTime? createdDate) => _$this._createdDate = createdDate; - - WordType? _type; - WordType? get type => _$this._type; - set type(WordType? type) => _$this._type = type; - - WordSubType? _subType; - WordSubType? get subType => _$this._subType; - set subType(WordSubType? subType) => _$this._subType = subType; - - String? _word; - String? get word => _$this._word; - set word(String? word) => _$this._word = word; - - ListBuilder? _imageList; - ListBuilder get imageList => - _$this._imageList ??= new ListBuilder(); - set imageList(ListBuilder? imageList) => - _$this._imageList = imageList; - - String? _sound; - String? get sound => _$this._sound; - set sound(String? sound) => _$this._sound = sound; - - bool? _isFavourite; - bool? get isFavourite => _$this._isFavourite; - set isFavourite(bool? isFavourite) => _$this._isFavourite = isFavourite; - - double? _usageCount; - double? get usageCount => _$this._usageCount; - set usageCount(double? usageCount) => _$this._usageCount = usageCount; - - double? _keyStage; - double? get keyStage => _$this._keyStage; - set keyStage(double? keyStage) => _$this._keyStage = keyStage; - - bool? _isUserAdded; - bool? get isUserAdded => _$this._isUserAdded; - set isUserAdded(bool? isUserAdded) => _$this._isUserAdded = isUserAdded; - - bool? _isBackedUp; - bool? get isBackedUp => _$this._isBackedUp; - set isBackedUp(bool? isBackedUp) => _$this._isBackedUp = isBackedUp; - - ListBuilder? _extraRelatedWordIds; - ListBuilder get extraRelatedWordIds => - _$this._extraRelatedWordIds ??= new ListBuilder(); - set extraRelatedWordIds(ListBuilder? extraRelatedWordIds) => - _$this._extraRelatedWordIds = extraRelatedWordIds; - - WordBuilder(); - - WordBuilder get _$this { - final $v = _$v; - if ($v != null) { - _wordId = $v.wordId; - _createdDate = $v.createdDate; - _type = $v.type; - _subType = $v.subType; - _word = $v.word; - _imageList = $v.imageList.toBuilder(); - _sound = $v.sound; - _isFavourite = $v.isFavourite; - _usageCount = $v.usageCount; - _keyStage = $v.keyStage; - _isUserAdded = $v.isUserAdded; - _isBackedUp = $v.isBackedUp; - _extraRelatedWordIds = $v.extraRelatedWordIds.toBuilder(); - _$v = null; - } - return this; - } - - @override - void replace(Word other) { - ArgumentError.checkNotNull(other, 'other'); - _$v = other as _$Word; - } - - @override - void update(void Function(WordBuilder)? updates) { - if (updates != null) updates(this); - } - - @override - Word build() => _build(); - - _$Word _build() { - _$Word _$result; - try { - _$result = _$v ?? - new _$Word._( - wordId: BuiltValueNullFieldError.checkNotNull( - wordId, r'Word', 'wordId'), - createdDate: createdDate, - type: - BuiltValueNullFieldError.checkNotNull(type, r'Word', 'type'), - subType: BuiltValueNullFieldError.checkNotNull( - subType, r'Word', 'subType'), - word: - BuiltValueNullFieldError.checkNotNull(word, r'Word', 'word'), - imageList: imageList.build(), - sound: BuiltValueNullFieldError.checkNotNull( - sound, r'Word', 'sound'), - isFavourite: isFavourite, - usageCount: usageCount, - keyStage: keyStage, - isUserAdded: isUserAdded, - isBackedUp: isBackedUp, - extraRelatedWordIds: extraRelatedWordIds.build()); - } catch (_) { - late String _$failedField; - try { - _$failedField = 'imageList'; - imageList.build(); - - _$failedField = 'extraRelatedWordIds'; - extraRelatedWordIds.build(); - } catch (e) { - throw new BuiltValueNestedFieldError( - r'Word', _$failedField, e.toString()); - } - rethrow; - } - replace(_$result); - return _$result; - } -} - -// ignore_for_file: deprecated_member_use_from_same_package,type=lint - -// ************************************************************************** -// TypeAdapterGenerator -// ************************************************************************** - -class WordAdapter extends TypeAdapter { - @override - final int typeId = 1; - - @override - Word read(BinaryReader reader) { - final numOfFields = reader.readByte(); - final fields = { - for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), - }; - - return (WordBuilder() - ..wordId = fields[0] as String - ..createdDate = fields[1] as DateTime? - ..type = fields[2] as WordType - ..subType = fields[3] as WordSubType - ..word = fields[4] as String - ..imageList = fields[5] == null - ? null - : ListBuilder(fields[5] as Iterable) - ..sound = fields[6] as String - ..isFavourite = fields[7] as bool? - ..usageCount = fields[8] as double? - ..keyStage = fields[9] as double? - ..isUserAdded = fields[10] as bool? - ..isBackedUp = fields[11] as bool? - ..extraRelatedWordIds = fields[12] == null - ? null - : ListBuilder(fields[12] as Iterable)) - .build(); - } - - @override - void write(BinaryWriter writer, Word obj) { - writer - ..writeByte(13) - ..writeByte(0) - ..write(obj.wordId) - ..writeByte(1) - ..write(obj.createdDate) - ..writeByte(2) - ..write(obj.type) - ..writeByte(3) - ..write(obj.subType) - ..writeByte(4) - ..write(obj.word) - ..writeByte(5) - ..write(obj.imageList.toList()) - ..writeByte(6) - ..write(obj.sound) - ..writeByte(7) - ..write(obj.isFavourite) - ..writeByte(8) - ..write(obj.usageCount) - ..writeByte(9) - ..write(obj.keyStage) - ..writeByte(10) - ..write(obj.isUserAdded) - ..writeByte(11) - ..write(obj.isBackedUp) - ..writeByte(12) - ..write(obj.extraRelatedWordIds.toList()); - } - - @override - int get hashCode => typeId.hashCode; - - @override - bool operator ==(Object other) => - identical(this, other) || - other is WordAdapter && - runtimeType == other.runtimeType && - typeId == other.typeId; -} +_Word _$WordFromJson(Map json) => _Word( + wordId: json['wordId'] as String, + text: json['text'] as String, + phoneticOverride: json['phoneticOverride'] as String?, + type: $enumDecode(_$WordTypeEnumMap, json['type']), + subType: $enumDecode(_$WordSubTypeEnumMap, json['subType']), + imagePath: json['imagePath'] as String?, + isCoreVocabulary: json['isCoreVocabulary'] as bool? ?? true, + isFavourite: json['isFavourite'] as bool? ?? false, + extraRelatedWordIds: + (json['extraRelatedWordIds'] as List?) + ?.map((e) => e as String) + .toList() ?? + const [], + aiSuggestedFollowUps: + (json['aiSuggestedFollowUps'] as List?) + ?.map((e) => e as String) + .toList() ?? + const [], + localEmbedding: (json['localEmbedding'] as List?) + ?.map((e) => (e as num).toDouble()) + .toList(), + createdDate: json['createdDate'] == null + ? null + : DateTime.parse(json['createdDate'] as String), +); + +Map _$WordToJson(_Word instance) => { + 'wordId': instance.wordId, + 'text': instance.text, + 'phoneticOverride': instance.phoneticOverride, + 'type': _$WordTypeEnumMap[instance.type]!, + 'subType': _$WordSubTypeEnumMap[instance.subType]!, + 'imagePath': instance.imagePath, + 'isCoreVocabulary': instance.isCoreVocabulary, + 'isFavourite': instance.isFavourite, + 'extraRelatedWordIds': instance.extraRelatedWordIds, + 'aiSuggestedFollowUps': instance.aiSuggestedFollowUps, + 'localEmbedding': instance.localEmbedding, + 'createdDate': instance.createdDate?.toIso8601String(), +}; + +const _$WordTypeEnumMap = { + WordType.core: 'core', + WordType.things: 'things', + WordType.actions: 'actions', + WordType.describe: 'describe', + WordType.social: 'social', + WordType.grammar: 'grammar', +}; + +const _$WordSubTypeEnumMap = { + WordSubType.people: 'people', + WordSubType.animals: 'animals', + WordSubType.nature: 'nature', + WordSubType.food: 'food', + WordSubType.drink: 'drink', + WordSubType.body: 'body', + WordSubType.clothes: 'clothes', + WordSubType.home: 'home', + WordSubType.travel: 'travel', + WordSubType.places: 'places', + WordSubType.art: 'art', + WordSubType.music: 'music', + WordSubType.games: 'games', + WordSubType.occasions: 'occasions', + WordSubType.action: 'action', + WordSubType.helping: 'helping', + WordSubType.strong: 'strong', + WordSubType.adjectives: 'adjectives', + WordSubType.sense: 'sense', + WordSubType.feeling: 'feeling', + WordSubType.thought: 'thought', + WordSubType.phrases: 'phrases', + WordSubType.favourites: 'favourites', + WordSubType.greetings: 'greetings', + WordSubType.pronouns: 'pronouns', + WordSubType.conjunctions: 'conjunctions', + WordSubType.prepositions: 'prepositions', + WordSubType.suffix: 'suffix', +}; diff --git a/lib/api/models/word_group.dart b/lib/api/models/word_group.dart new file mode 100644 index 0000000..052da14 --- /dev/null +++ b/lib/api/models/word_group.dart @@ -0,0 +1,32 @@ +import 'package:freezed_annotation/freezed_annotation.dart'; + +part 'word_group.freezed.dart'; +part 'word_group.g.dart'; + +/// A user-created phrase card — an ordered sequence of words saved as one tile. +/// Firestore path: users/{uid}/wordGroups/{groupId} +@freezed +sealed class WordGroup with _$WordGroup { + const factory WordGroup({ + required String id, + + /// Display label on the group tile. + required String title, + + /// Ordered word IDs that make up this phrase. + required List wordIds, + + /// Override what TTS speaks for the whole phrase. + String? phoneticOverride, + + /// Custom image path, or auto-derived from the first word. + String? imagePath, + + @Default(false) bool isFavourite, + @Default(0) int usageCount, + DateTime? createdDate, + }) = _WordGroup; + + factory WordGroup.fromJson(Map json) => + _$WordGroupFromJson(json); +} diff --git a/lib/api/models/word_group.freezed.dart b/lib/api/models/word_group.freezed.dart new file mode 100644 index 0000000..663c126 --- /dev/null +++ b/lib/api/models/word_group.freezed.dart @@ -0,0 +1,307 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND +// coverage:ignore-file +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'word_group.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +// dart format off +T _$identity(T value) => value; + +/// @nodoc +mixin _$WordGroup { + + String get id;/// Display label on the group tile. + String get title;/// Ordered word IDs that make up this phrase. + List get wordIds;/// Override what TTS speaks for the whole phrase. + String? get phoneticOverride;/// Custom image path, or auto-derived from the first word. + String? get imagePath; bool get isFavourite; int get usageCount; DateTime? get createdDate; +/// Create a copy of WordGroup +/// with the given fields replaced by the non-null parameter values. +@JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +$WordGroupCopyWith get copyWith => _$WordGroupCopyWithImpl(this as WordGroup, _$identity); + + /// Serializes this WordGroup to a JSON map. + Map toJson(); + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is WordGroup&&(identical(other.id, id) || other.id == id)&&(identical(other.title, title) || other.title == title)&&const DeepCollectionEquality().equals(other.wordIds, wordIds)&&(identical(other.phoneticOverride, phoneticOverride) || other.phoneticOverride == phoneticOverride)&&(identical(other.imagePath, imagePath) || other.imagePath == imagePath)&&(identical(other.isFavourite, isFavourite) || other.isFavourite == isFavourite)&&(identical(other.usageCount, usageCount) || other.usageCount == usageCount)&&(identical(other.createdDate, createdDate) || other.createdDate == createdDate)); +} + +@JsonKey(includeFromJson: false, includeToJson: false) +@override +int get hashCode => Object.hash(runtimeType,id,title,const DeepCollectionEquality().hash(wordIds),phoneticOverride,imagePath,isFavourite,usageCount,createdDate); + +@override +String toString() { + return 'WordGroup(id: $id, title: $title, wordIds: $wordIds, phoneticOverride: $phoneticOverride, imagePath: $imagePath, isFavourite: $isFavourite, usageCount: $usageCount, createdDate: $createdDate)'; +} + + +} + +/// @nodoc +abstract mixin class $WordGroupCopyWith<$Res> { + factory $WordGroupCopyWith(WordGroup value, $Res Function(WordGroup) _then) = _$WordGroupCopyWithImpl; +@useResult +$Res call({ + String id, String title, List wordIds, String? phoneticOverride, String? imagePath, bool isFavourite, int usageCount, DateTime? createdDate +}); + + + + +} +/// @nodoc +class _$WordGroupCopyWithImpl<$Res> + implements $WordGroupCopyWith<$Res> { + _$WordGroupCopyWithImpl(this._self, this._then); + + final WordGroup _self; + final $Res Function(WordGroup) _then; + +/// Create a copy of WordGroup +/// with the given fields replaced by the non-null parameter values. +@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? title = null,Object? wordIds = null,Object? phoneticOverride = freezed,Object? imagePath = freezed,Object? isFavourite = null,Object? usageCount = null,Object? createdDate = freezed,}) { + return _then(_self.copyWith( +id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable +as String,title: null == title ? _self.title : title // ignore: cast_nullable_to_non_nullable +as String,wordIds: null == wordIds ? _self.wordIds : wordIds // ignore: cast_nullable_to_non_nullable +as List,phoneticOverride: freezed == phoneticOverride ? _self.phoneticOverride : phoneticOverride // ignore: cast_nullable_to_non_nullable +as String?,imagePath: freezed == imagePath ? _self.imagePath : imagePath // ignore: cast_nullable_to_non_nullable +as String?,isFavourite: null == isFavourite ? _self.isFavourite : isFavourite // ignore: cast_nullable_to_non_nullable +as bool,usageCount: null == usageCount ? _self.usageCount : usageCount // ignore: cast_nullable_to_non_nullable +as int,createdDate: freezed == createdDate ? _self.createdDate : createdDate // ignore: cast_nullable_to_non_nullable +as DateTime?, + )); +} + +} + + +/// Adds pattern-matching-related methods to [WordGroup]. +extension WordGroupPatterns on WordGroup { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap(TResult Function( _WordGroup value)? $default,{required TResult orElse(),}){ +final _that = this; +switch (_that) { +case _WordGroup() when $default != null: +return $default(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map(TResult Function( _WordGroup value) $default,){ +final _that = this; +switch (_that) { +case _WordGroup(): +return $default(_that);} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull(TResult? Function( _WordGroup value)? $default,){ +final _that = this; +switch (_that) { +case _WordGroup() when $default != null: +return $default(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen(TResult Function( String id, String title, List wordIds, String? phoneticOverride, String? imagePath, bool isFavourite, int usageCount, DateTime? createdDate)? $default,{required TResult orElse(),}) {final _that = this; +switch (_that) { +case _WordGroup() when $default != null: +return $default(_that.id,_that.title,_that.wordIds,_that.phoneticOverride,_that.imagePath,_that.isFavourite,_that.usageCount,_that.createdDate);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when(TResult Function( String id, String title, List wordIds, String? phoneticOverride, String? imagePath, bool isFavourite, int usageCount, DateTime? createdDate) $default,) {final _that = this; +switch (_that) { +case _WordGroup(): +return $default(_that.id,_that.title,_that.wordIds,_that.phoneticOverride,_that.imagePath,_that.isFavourite,_that.usageCount,_that.createdDate);} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull(TResult? Function( String id, String title, List wordIds, String? phoneticOverride, String? imagePath, bool isFavourite, int usageCount, DateTime? createdDate)? $default,) {final _that = this; +switch (_that) { +case _WordGroup() when $default != null: +return $default(_that.id,_that.title,_that.wordIds,_that.phoneticOverride,_that.imagePath,_that.isFavourite,_that.usageCount,_that.createdDate);case _: + return null; + +} +} + +} + +/// @nodoc +@JsonSerializable() + +class _WordGroup implements WordGroup { + const _WordGroup({required this.id, required this.title, required final List wordIds, this.phoneticOverride, this.imagePath, this.isFavourite = false, this.usageCount = 0, this.createdDate}): _wordIds = wordIds; + factory _WordGroup.fromJson(Map json) => _$WordGroupFromJson(json); + +@override final String id; +/// Display label on the group tile. +@override final String title; +/// Ordered word IDs that make up this phrase. + final List _wordIds; +/// Ordered word IDs that make up this phrase. +@override List get wordIds { + if (_wordIds is EqualUnmodifiableListView) return _wordIds; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_wordIds); +} + +/// Override what TTS speaks for the whole phrase. +@override final String? phoneticOverride; +/// Custom image path, or auto-derived from the first word. +@override final String? imagePath; +@override@JsonKey() final bool isFavourite; +@override@JsonKey() final int usageCount; +@override final DateTime? createdDate; + +/// Create a copy of WordGroup +/// with the given fields replaced by the non-null parameter values. +@override @JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +_$WordGroupCopyWith<_WordGroup> get copyWith => __$WordGroupCopyWithImpl<_WordGroup>(this, _$identity); + +@override +Map toJson() { + return _$WordGroupToJson(this, ); +} + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is _WordGroup&&(identical(other.id, id) || other.id == id)&&(identical(other.title, title) || other.title == title)&&const DeepCollectionEquality().equals(other._wordIds, _wordIds)&&(identical(other.phoneticOverride, phoneticOverride) || other.phoneticOverride == phoneticOverride)&&(identical(other.imagePath, imagePath) || other.imagePath == imagePath)&&(identical(other.isFavourite, isFavourite) || other.isFavourite == isFavourite)&&(identical(other.usageCount, usageCount) || other.usageCount == usageCount)&&(identical(other.createdDate, createdDate) || other.createdDate == createdDate)); +} + +@JsonKey(includeFromJson: false, includeToJson: false) +@override +int get hashCode => Object.hash(runtimeType,id,title,const DeepCollectionEquality().hash(_wordIds),phoneticOverride,imagePath,isFavourite,usageCount,createdDate); + +@override +String toString() { + return 'WordGroup(id: $id, title: $title, wordIds: $wordIds, phoneticOverride: $phoneticOverride, imagePath: $imagePath, isFavourite: $isFavourite, usageCount: $usageCount, createdDate: $createdDate)'; +} + + +} + +/// @nodoc +abstract mixin class _$WordGroupCopyWith<$Res> implements $WordGroupCopyWith<$Res> { + factory _$WordGroupCopyWith(_WordGroup value, $Res Function(_WordGroup) _then) = __$WordGroupCopyWithImpl; +@override @useResult +$Res call({ + String id, String title, List wordIds, String? phoneticOverride, String? imagePath, bool isFavourite, int usageCount, DateTime? createdDate +}); + + + + +} +/// @nodoc +class __$WordGroupCopyWithImpl<$Res> + implements _$WordGroupCopyWith<$Res> { + __$WordGroupCopyWithImpl(this._self, this._then); + + final _WordGroup _self; + final $Res Function(_WordGroup) _then; + +/// Create a copy of WordGroup +/// with the given fields replaced by the non-null parameter values. +@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? title = null,Object? wordIds = null,Object? phoneticOverride = freezed,Object? imagePath = freezed,Object? isFavourite = null,Object? usageCount = null,Object? createdDate = freezed,}) { + return _then(_WordGroup( +id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable +as String,title: null == title ? _self.title : title // ignore: cast_nullable_to_non_nullable +as String,wordIds: null == wordIds ? _self._wordIds : wordIds // ignore: cast_nullable_to_non_nullable +as List,phoneticOverride: freezed == phoneticOverride ? _self.phoneticOverride : phoneticOverride // ignore: cast_nullable_to_non_nullable +as String?,imagePath: freezed == imagePath ? _self.imagePath : imagePath // ignore: cast_nullable_to_non_nullable +as String?,isFavourite: null == isFavourite ? _self.isFavourite : isFavourite // ignore: cast_nullable_to_non_nullable +as bool,usageCount: null == usageCount ? _self.usageCount : usageCount // ignore: cast_nullable_to_non_nullable +as int,createdDate: freezed == createdDate ? _self.createdDate : createdDate // ignore: cast_nullable_to_non_nullable +as DateTime?, + )); +} + + +} + +// dart format on diff --git a/lib/api/models/word_group.g.dart b/lib/api/models/word_group.g.dart new file mode 100644 index 0000000..2a3fc59 --- /dev/null +++ b/lib/api/models/word_group.g.dart @@ -0,0 +1,32 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'word_group.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +_WordGroup _$WordGroupFromJson(Map json) => _WordGroup( + id: json['id'] as String, + title: json['title'] as String, + wordIds: (json['wordIds'] as List).map((e) => e as String).toList(), + phoneticOverride: json['phoneticOverride'] as String?, + imagePath: json['imagePath'] as String?, + isFavourite: json['isFavourite'] as bool? ?? false, + usageCount: (json['usageCount'] as num?)?.toInt() ?? 0, + createdDate: json['createdDate'] == null + ? null + : DateTime.parse(json['createdDate'] as String), +); + +Map _$WordGroupToJson(_WordGroup instance) => + { + 'id': instance.id, + 'title': instance.title, + 'wordIds': instance.wordIds, + 'phoneticOverride': instance.phoneticOverride, + 'imagePath': instance.imagePath, + 'isFavourite': instance.isFavourite, + 'usageCount': instance.usageCount, + 'createdDate': instance.createdDate?.toIso8601String(), + }; diff --git a/lib/api/models/word_sub_type.dart b/lib/api/models/word_sub_type.dart index fe1bf40..64625fd 100644 --- a/lib/api/models/word_sub_type.dart +++ b/lib/api/models/word_sub_type.dart @@ -1,61 +1,39 @@ -import 'package:built_collection/built_collection.dart'; -import 'package:built_value/built_value.dart'; -import 'package:built_value/serializer.dart'; -import 'package:hive_built_value/hive_built_value.dart'; - -import '../serializers/serializers.dart'; - -part 'word_sub_type.g.dart'; - -@HiveType(typeId: 3) -class WordSubType extends EnumClass { - const WordSubType._(String name) : super(name); - - static const WordSubType people = _$people; - static const WordSubType animals = _$animals; - static const WordSubType nature = _$nature; - static const WordSubType time = _$time; - static const WordSubType places = _$places; - static const WordSubType things = _$things; - static const WordSubType ideas = _$ideas; - static const WordSubType drink = _$drink; - static const WordSubType food = _$food; - static const WordSubType action = _$action; - static const WordSubType feeling = _$feeling; - static const WordSubType thought = _$thought; - static const WordSubType sense = _$sense; - static const WordSubType abverb = _$abverb; - static const WordSubType helping = _$helping; - static const WordSubType strong = _$strong; - static const WordSubType favourites = _$favourites; - static const WordSubType pronouns = _$pronouns; - static const WordSubType conjunctions = _$conjunctions; - static const WordSubType adjectives = _$adjectives; - static const WordSubType propositionAndSound = _$propositionandsound; - static const WordSubType phrases = _$phrases; - static const WordSubType suffix = _$suffix; - static const WordSubType home = _$home; - static const WordSubType clothes = _$clothes; - static const WordSubType extras = _$extras; - static const WordSubType travel = _$travel; - static const WordSubType art = _$art; - static const WordSubType games = _$games; - static const WordSubType music = _$music; - static const WordSubType body = _$body; - static const WordSubType love = _$love; - static const WordSubType occasion = _$occasion; - static const WordSubType learning = _$learning; - - static BuiltSet get values => _$wordSubTypeValues; - static WordSubType valueOf(String name) => _$wordSubTypeValueOf(name); - - String serialize() { - return serializers.serializeWith(WordSubType.serializer, this) as String; - } - - static WordSubType deserialize(String string) { - return serializers.deserializeWith(WordSubType.serializer, string)!; - } - - static Serializer get serializer => _$wordSubTypeSerializer; -} \ No newline at end of file +enum WordSubType { + // things + people, + animals, + nature, + food, + drink, + body, + clothes, + home, + travel, + places, + art, + music, + games, + occasions, + + // actions + action, + helping, + strong, + + // describe + adjectives, + sense, + feeling, + thought, + + // social + phrases, + favourites, + greetings, + + // grammar + pronouns, + conjunctions, + prepositions, + suffix, +} diff --git a/lib/api/models/word_sub_type.g.dart b/lib/api/models/word_sub_type.g.dart deleted file mode 100644 index 35bb680..0000000 --- a/lib/api/models/word_sub_type.g.dart +++ /dev/null @@ -1,206 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'word_sub_type.dart'; - -// ************************************************************************** -// BuiltValueGenerator -// ************************************************************************** - -const WordSubType _$people = const WordSubType._('people'); -const WordSubType _$animals = const WordSubType._('animals'); -const WordSubType _$nature = const WordSubType._('nature'); -const WordSubType _$time = const WordSubType._('time'); -const WordSubType _$places = const WordSubType._('places'); -const WordSubType _$things = const WordSubType._('things'); -const WordSubType _$ideas = const WordSubType._('ideas'); -const WordSubType _$drink = const WordSubType._('drink'); -const WordSubType _$food = const WordSubType._('food'); -const WordSubType _$action = const WordSubType._('action'); -const WordSubType _$feeling = const WordSubType._('feeling'); -const WordSubType _$thought = const WordSubType._('thought'); -const WordSubType _$sense = const WordSubType._('sense'); -const WordSubType _$abverb = const WordSubType._('abverb'); -const WordSubType _$helping = const WordSubType._('helping'); -const WordSubType _$strong = const WordSubType._('strong'); -const WordSubType _$favourites = const WordSubType._('favourites'); -const WordSubType _$pronouns = const WordSubType._('pronouns'); -const WordSubType _$conjunctions = const WordSubType._('conjunctions'); -const WordSubType _$adjectives = const WordSubType._('adjectives'); -const WordSubType _$propositionandsound = - const WordSubType._('propositionAndSound'); -const WordSubType _$phrases = const WordSubType._('phrases'); -const WordSubType _$suffix = const WordSubType._('suffix'); -const WordSubType _$home = const WordSubType._('home'); -const WordSubType _$clothes = const WordSubType._('clothes'); -const WordSubType _$extras = const WordSubType._('extras'); -const WordSubType _$travel = const WordSubType._('travel'); -const WordSubType _$art = const WordSubType._('art'); -const WordSubType _$games = const WordSubType._('games'); -const WordSubType _$music = const WordSubType._('music'); -const WordSubType _$body = const WordSubType._('body'); -const WordSubType _$love = const WordSubType._('love'); -const WordSubType _$occasion = const WordSubType._('occasion'); -const WordSubType _$learning = const WordSubType._('learning'); - -WordSubType _$wordSubTypeValueOf(String name) { - switch (name) { - case 'people': - return _$people; - case 'animals': - return _$animals; - case 'nature': - return _$nature; - case 'time': - return _$time; - case 'places': - return _$places; - case 'things': - return _$things; - case 'ideas': - return _$ideas; - case 'drink': - return _$drink; - case 'food': - return _$food; - case 'action': - return _$action; - case 'feeling': - return _$feeling; - case 'thought': - return _$thought; - case 'sense': - return _$sense; - case 'abverb': - return _$abverb; - case 'helping': - return _$helping; - case 'strong': - return _$strong; - case 'favourites': - return _$favourites; - case 'pronouns': - return _$pronouns; - case 'conjunctions': - return _$conjunctions; - case 'adjectives': - return _$adjectives; - case 'propositionAndSound': - return _$propositionandsound; - case 'phrases': - return _$phrases; - case 'suffix': - return _$suffix; - case 'home': - return _$home; - case 'clothes': - return _$clothes; - case 'extras': - return _$extras; - case 'travel': - return _$travel; - case 'art': - return _$art; - case 'games': - return _$games; - case 'music': - return _$music; - case 'body': - return _$body; - case 'love': - return _$love; - case 'occasion': - return _$occasion; - case 'learning': - return _$learning; - default: - throw new ArgumentError(name); - } -} - -final BuiltSet _$wordSubTypeValues = - new BuiltSet(const [ - _$people, - _$animals, - _$nature, - _$time, - _$places, - _$things, - _$ideas, - _$drink, - _$food, - _$action, - _$feeling, - _$thought, - _$sense, - _$abverb, - _$helping, - _$strong, - _$favourites, - _$pronouns, - _$conjunctions, - _$adjectives, - _$propositionandsound, - _$phrases, - _$suffix, - _$home, - _$clothes, - _$extras, - _$travel, - _$art, - _$games, - _$music, - _$body, - _$love, - _$occasion, - _$learning, -]); - -Serializer _$wordSubTypeSerializer = new _$WordSubTypeSerializer(); - -class _$WordSubTypeSerializer implements PrimitiveSerializer { - @override - final Iterable types = const [WordSubType]; - @override - final String wireName = 'WordSubType'; - - @override - Object serialize(Serializers serializers, WordSubType object, - {FullType specifiedType = FullType.unspecified}) => - object.name; - - @override - WordSubType deserialize(Serializers serializers, Object serialized, - {FullType specifiedType = FullType.unspecified}) => - WordSubType.valueOf(serialized as String); -} - -// ignore_for_file: deprecated_member_use_from_same_package,type=lint - -// ************************************************************************** -// TypeAdapterGenerator -// ************************************************************************** - -class WordSubTypeAdapter extends TypeAdapter { - @override - final int typeId = 3; - - @override - WordSubType read(BinaryReader reader) { - return WordSubType.valueOf(reader.read() as String); - } - - @override - void write(BinaryWriter writer, WordSubType obj) { - writer.write(obj.name); - } - - @override - int get hashCode => typeId.hashCode; - - @override - bool operator ==(Object other) => - identical(this, other) || - other is WordSubTypeAdapter && - runtimeType == other.runtimeType && - typeId == other.typeId; -} diff --git a/lib/api/models/word_type.dart b/lib/api/models/word_type.dart index 9756ab1..aacc349 100644 --- a/lib/api/models/word_type.dart +++ b/lib/api/models/word_type.dart @@ -1,30 +1,19 @@ -import 'package:built_collection/built_collection.dart'; -import 'package:built_value/built_value.dart'; -import 'package:built_value/serializer.dart'; -import 'package:hive_built_value/hive_built_value.dart'; +enum WordType { + /// High-frequency core vocabulary — I, want, help, stop, yes, no, more... + core, -import '../serializers/serializers.dart'; + /// Nouns organised by sub-category — food, animals, places, people... + things, -part 'word_type.g.dart'; + /// Verbs — eat, drink, play, sleep, go, help... + actions, -@HiveType(typeId: 2) -class WordType extends EnumClass { - const WordType._(String name) : super(name); - static const WordType quicks = _$quicks; - static const WordType nouns = _$nouns; - static const WordType verbs = _$verbs; - static const WordType other = _$other; + /// Adjectives and adverbs — big, red, happy, fast... + describe, - static BuiltSet get values => _$wordTypeValues; - static WordType valueOf(String name) => _$wordTypeValueOf(name); + /// Feelings, greetings, phrases, questions + social, - String serialize() { - return serializers.serializeWith(WordType.serializer, this) as String; - } - - static WordType deserialize(String string) { - return serializers.deserializeWith(WordType.serializer, string)!; - } - - static Serializer get serializer => _$wordTypeSerializer; + /// Pronouns, conjunctions, prepositions, suffixes + grammar, } diff --git a/lib/api/models/word_type.g.dart b/lib/api/models/word_type.g.dart deleted file mode 100644 index 9f69c5b..0000000 --- a/lib/api/models/word_type.g.dart +++ /dev/null @@ -1,85 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'word_type.dart'; - -// ************************************************************************** -// BuiltValueGenerator -// ************************************************************************** - -const WordType _$quicks = const WordType._('quicks'); -const WordType _$nouns = const WordType._('nouns'); -const WordType _$verbs = const WordType._('verbs'); -const WordType _$other = const WordType._('other'); - -WordType _$wordTypeValueOf(String name) { - switch (name) { - case 'quicks': - return _$quicks; - case 'nouns': - return _$nouns; - case 'verbs': - return _$verbs; - case 'other': - return _$other; - default: - throw new ArgumentError(name); - } -} - -final BuiltSet _$wordTypeValues = - new BuiltSet(const [ - _$quicks, - _$nouns, - _$verbs, - _$other, -]); - -Serializer _$wordTypeSerializer = new _$WordTypeSerializer(); - -class _$WordTypeSerializer implements PrimitiveSerializer { - @override - final Iterable types = const [WordType]; - @override - final String wireName = 'WordType'; - - @override - Object serialize(Serializers serializers, WordType object, - {FullType specifiedType = FullType.unspecified}) => - object.name; - - @override - WordType deserialize(Serializers serializers, Object serialized, - {FullType specifiedType = FullType.unspecified}) => - WordType.valueOf(serialized as String); -} - -// ignore_for_file: deprecated_member_use_from_same_package,type=lint - -// ************************************************************************** -// TypeAdapterGenerator -// ************************************************************************** - -class WordTypeAdapter extends TypeAdapter { - @override - final int typeId = 2; - - @override - WordType read(BinaryReader reader) { - return WordType.valueOf(reader.read() as String); - } - - @override - void write(BinaryWriter writer, WordType obj) { - writer.write(obj.name); - } - - @override - int get hashCode => typeId.hashCode; - - @override - bool operator ==(Object other) => - identical(this, other) || - other is WordTypeAdapter && - runtimeType == other.runtimeType && - typeId == other.typeId; -} diff --git a/lib/api/models/word_usage.dart b/lib/api/models/word_usage.dart new file mode 100644 index 0000000..6b32fe3 --- /dev/null +++ b/lib/api/models/word_usage.dart @@ -0,0 +1,18 @@ +import 'package:freezed_annotation/freezed_annotation.dart'; + +part 'word_usage.freezed.dart'; +part 'word_usage.g.dart'; + +/// Per-user usage record stored in Firestore. +/// Firestore path: users/{uid}/wordUsage/{wordId} +@freezed +sealed class WordUsage with _$WordUsage { + const factory WordUsage({ + required String wordId, + @Default(0) int count, + DateTime? lastUsed, + }) = _WordUsage; + + factory WordUsage.fromJson(Map json) => + _$WordUsageFromJson(json); +} diff --git a/lib/api/models/word_usage.freezed.dart b/lib/api/models/word_usage.freezed.dart new file mode 100644 index 0000000..02124c6 --- /dev/null +++ b/lib/api/models/word_usage.freezed.dart @@ -0,0 +1,277 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND +// coverage:ignore-file +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'word_usage.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +// dart format off +T _$identity(T value) => value; + +/// @nodoc +mixin _$WordUsage { + + String get wordId; int get count; DateTime? get lastUsed; +/// Create a copy of WordUsage +/// with the given fields replaced by the non-null parameter values. +@JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +$WordUsageCopyWith get copyWith => _$WordUsageCopyWithImpl(this as WordUsage, _$identity); + + /// Serializes this WordUsage to a JSON map. + Map toJson(); + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is WordUsage&&(identical(other.wordId, wordId) || other.wordId == wordId)&&(identical(other.count, count) || other.count == count)&&(identical(other.lastUsed, lastUsed) || other.lastUsed == lastUsed)); +} + +@JsonKey(includeFromJson: false, includeToJson: false) +@override +int get hashCode => Object.hash(runtimeType,wordId,count,lastUsed); + +@override +String toString() { + return 'WordUsage(wordId: $wordId, count: $count, lastUsed: $lastUsed)'; +} + + +} + +/// @nodoc +abstract mixin class $WordUsageCopyWith<$Res> { + factory $WordUsageCopyWith(WordUsage value, $Res Function(WordUsage) _then) = _$WordUsageCopyWithImpl; +@useResult +$Res call({ + String wordId, int count, DateTime? lastUsed +}); + + + + +} +/// @nodoc +class _$WordUsageCopyWithImpl<$Res> + implements $WordUsageCopyWith<$Res> { + _$WordUsageCopyWithImpl(this._self, this._then); + + final WordUsage _self; + final $Res Function(WordUsage) _then; + +/// Create a copy of WordUsage +/// with the given fields replaced by the non-null parameter values. +@pragma('vm:prefer-inline') @override $Res call({Object? wordId = null,Object? count = null,Object? lastUsed = freezed,}) { + return _then(_self.copyWith( +wordId: null == wordId ? _self.wordId : wordId // ignore: cast_nullable_to_non_nullable +as String,count: null == count ? _self.count : count // ignore: cast_nullable_to_non_nullable +as int,lastUsed: freezed == lastUsed ? _self.lastUsed : lastUsed // ignore: cast_nullable_to_non_nullable +as DateTime?, + )); +} + +} + + +/// Adds pattern-matching-related methods to [WordUsage]. +extension WordUsagePatterns on WordUsage { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap(TResult Function( _WordUsage value)? $default,{required TResult orElse(),}){ +final _that = this; +switch (_that) { +case _WordUsage() when $default != null: +return $default(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map(TResult Function( _WordUsage value) $default,){ +final _that = this; +switch (_that) { +case _WordUsage(): +return $default(_that);} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull(TResult? Function( _WordUsage value)? $default,){ +final _that = this; +switch (_that) { +case _WordUsage() when $default != null: +return $default(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen(TResult Function( String wordId, int count, DateTime? lastUsed)? $default,{required TResult orElse(),}) {final _that = this; +switch (_that) { +case _WordUsage() when $default != null: +return $default(_that.wordId,_that.count,_that.lastUsed);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when(TResult Function( String wordId, int count, DateTime? lastUsed) $default,) {final _that = this; +switch (_that) { +case _WordUsage(): +return $default(_that.wordId,_that.count,_that.lastUsed);} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull(TResult? Function( String wordId, int count, DateTime? lastUsed)? $default,) {final _that = this; +switch (_that) { +case _WordUsage() when $default != null: +return $default(_that.wordId,_that.count,_that.lastUsed);case _: + return null; + +} +} + +} + +/// @nodoc +@JsonSerializable() + +class _WordUsage implements WordUsage { + const _WordUsage({required this.wordId, this.count = 0, this.lastUsed}); + factory _WordUsage.fromJson(Map json) => _$WordUsageFromJson(json); + +@override final String wordId; +@override@JsonKey() final int count; +@override final DateTime? lastUsed; + +/// Create a copy of WordUsage +/// with the given fields replaced by the non-null parameter values. +@override @JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +_$WordUsageCopyWith<_WordUsage> get copyWith => __$WordUsageCopyWithImpl<_WordUsage>(this, _$identity); + +@override +Map toJson() { + return _$WordUsageToJson(this, ); +} + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is _WordUsage&&(identical(other.wordId, wordId) || other.wordId == wordId)&&(identical(other.count, count) || other.count == count)&&(identical(other.lastUsed, lastUsed) || other.lastUsed == lastUsed)); +} + +@JsonKey(includeFromJson: false, includeToJson: false) +@override +int get hashCode => Object.hash(runtimeType,wordId,count,lastUsed); + +@override +String toString() { + return 'WordUsage(wordId: $wordId, count: $count, lastUsed: $lastUsed)'; +} + + +} + +/// @nodoc +abstract mixin class _$WordUsageCopyWith<$Res> implements $WordUsageCopyWith<$Res> { + factory _$WordUsageCopyWith(_WordUsage value, $Res Function(_WordUsage) _then) = __$WordUsageCopyWithImpl; +@override @useResult +$Res call({ + String wordId, int count, DateTime? lastUsed +}); + + + + +} +/// @nodoc +class __$WordUsageCopyWithImpl<$Res> + implements _$WordUsageCopyWith<$Res> { + __$WordUsageCopyWithImpl(this._self, this._then); + + final _WordUsage _self; + final $Res Function(_WordUsage) _then; + +/// Create a copy of WordUsage +/// with the given fields replaced by the non-null parameter values. +@override @pragma('vm:prefer-inline') $Res call({Object? wordId = null,Object? count = null,Object? lastUsed = freezed,}) { + return _then(_WordUsage( +wordId: null == wordId ? _self.wordId : wordId // ignore: cast_nullable_to_non_nullable +as String,count: null == count ? _self.count : count // ignore: cast_nullable_to_non_nullable +as int,lastUsed: freezed == lastUsed ? _self.lastUsed : lastUsed // ignore: cast_nullable_to_non_nullable +as DateTime?, + )); +} + + +} + +// dart format on diff --git a/lib/api/models/word_usage.g.dart b/lib/api/models/word_usage.g.dart new file mode 100644 index 0000000..20d4b06 --- /dev/null +++ b/lib/api/models/word_usage.g.dart @@ -0,0 +1,22 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'word_usage.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +_WordUsage _$WordUsageFromJson(Map json) => _WordUsage( + wordId: json['wordId'] as String, + count: (json['count'] as num?)?.toInt() ?? 0, + lastUsed: json['lastUsed'] == null + ? null + : DateTime.parse(json['lastUsed'] as String), +); + +Map _$WordUsageToJson(_WordUsage instance) => + { + 'wordId': instance.wordId, + 'count': instance.count, + 'lastUsed': instance.lastUsed?.toIso8601String(), + }; diff --git a/lib/api/repositories/user_repository.dart b/lib/api/repositories/user_repository.dart new file mode 100644 index 0000000..a744471 --- /dev/null +++ b/lib/api/repositories/user_repository.dart @@ -0,0 +1,57 @@ +import 'package:cloud_firestore/cloud_firestore.dart'; + +import '../models/user_profile.dart'; + +/// Manages the user profile document and favourites list. +/// Firestore path: users/{uid} +class UserRepository { + UserRepository(this._firestore); + + final FirebaseFirestore _firestore; + + DocumentReference> _ref(String uid) => + _firestore.collection('users').doc(uid); + + Stream watchProfile(String uid) { + return _ref(uid).snapshots().map((snap) { + if (!snap.exists || snap.data() == null) { + return UserProfile(userId: uid); + } + return UserProfile.fromJson({...snap.data()!, 'userId': uid}); + }); + } + + Future getProfile(String uid) async { + final snap = await _ref(uid).get(); + if (!snap.exists || snap.data() == null) { + return UserProfile(userId: uid); + } + return UserProfile.fromJson({...snap.data()!, 'userId': uid}); + } + + Future createProfile(UserProfile profile) async { + await _ref(profile.userId).set( + profile.toJson()..remove('userId'), + SetOptions(merge: true), + ); + } + + Future addFavourite(String uid, String wordId) async { + await _ref(uid).update({ + 'favouriteWordIds': FieldValue.arrayUnion([wordId]), + }); + } + + Future removeFavourite(String uid, String wordId) async { + await _ref(uid).update({ + 'favouriteWordIds': FieldValue.arrayRemove([wordId]), + }); + } + + Future setLanguage(String uid, String languageId) async { + await _ref(uid).set( + {'currentLanguageId': languageId}, + SetOptions(merge: true), + ); + } +} diff --git a/lib/api/repositories/vocabulary_repository.dart b/lib/api/repositories/vocabulary_repository.dart new file mode 100644 index 0000000..0ca6b20 --- /dev/null +++ b/lib/api/repositories/vocabulary_repository.dart @@ -0,0 +1,158 @@ +import 'dart:convert'; + +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:flutter/services.dart'; +import 'package:rxdart/rxdart.dart'; + +import '../models/language.dart'; +import '../models/language_response.dart'; +import '../models/word.dart'; +import '../models/word_sub_type.dart'; +import '../models/word_type.dart'; + +/// Loads core vocabulary from bundled JSON assets. +/// User-added custom words are stored per-user in Firestore. +class VocabularyRepository { + VocabularyRepository(this._firestore); + + final FirebaseFirestore _firestore; + + // In-memory cache of the bundled word library, keyed by languageId. + final Map _coreCache = {}; + + // --------------------------------------------------------------------------- + // Core vocabulary (bundled asset) + // --------------------------------------------------------------------------- + + Future loadCoreVocabulary() async { + if (_coreCache.isNotEmpty) return; + final raw = + await rootBundle.loadString('assets/json/initial_word_data.json'); + final response = LanguageResponse.fromJson( + jsonDecode(raw) as Map, + ); + for (final language in response.languages) { + _coreCache[language.id] = language; + } + } + + List getCoreWordsForSubType(String languageId, WordSubType subType) { + final language = _coreCache[languageId]; + if (language == null) return []; + return language.words.where((w) => w.subType == subType).toList(); + } + + List getCoreWordsForType(String languageId, WordType type) { + final language = _coreCache[languageId]; + if (language == null) return []; + return language.words.where((w) => w.type == type).toList(); + } + + List getCoreWordsForIds(String languageId, List ids) { + final language = _coreCache[languageId]; + if (language == null) return []; + final idSet = ids.toSet(); + return language.words.where((w) => idSet.contains(w.wordId)).toList(); + } + + List getAllLanguages() => _coreCache.values.toList(); + + List getAllCoreWordsForLanguage(String languageId) => + _coreCache[languageId]?.words ?? []; + + List searchWords(String languageId, String query) { + final language = _coreCache[languageId]; + if (language == null) return []; + return language.words + .where((w) => w.text.toLowerCase().contains(query)) + .toList(); + } + + // --------------------------------------------------------------------------- + // Custom words (Firestore, per user) + // Firestore path: users/{uid}/customWords/{wordId} + // --------------------------------------------------------------------------- + + CollectionReference> _customWordsRef(String uid) => + _firestore.collection('users').doc(uid).collection('customWords'); + + Future saveCustomWord(String uid, Word word) async { + await _customWordsRef(uid).doc(word.wordId).set(word.toJson()); + } + + Future deleteCustomWord(String uid, String wordId) async { + await _customWordsRef(uid).doc(wordId).delete(); + } + + Stream> watchCustomWords(String uid) { + return _customWordsRef(uid).snapshots().map( + (snap) => snap.docs + .map((d) => Word.fromJson(d.data())) + .toList(), + ); + } + + // --------------------------------------------------------------------------- + // Combined stream (core + custom) for a given subType + // --------------------------------------------------------------------------- + + Stream> watchFavourites(String uid, String languageId) { + final allCore = _coreCache[languageId]?.words ?? []; + final coreFavs = BehaviorSubject>.seeded( + allCore.where((w) => w.isFavourite).toList(), + ); + return Rx.combineLatest2, List, List>( + coreFavs, + watchCustomWords(uid).map((all) => all.where((w) => w.isFavourite).toList()), + (core, custom) { + // Custom words override core words of the same ID + final customIds = custom.map((w) => w.wordId).toSet(); + return [...core.where((w) => !customIds.contains(w.wordId)), ...custom]; + }, + ); + } + + Stream> watchWordsForSubType( + String uid, + String languageId, + WordSubType subType, + ) { + if (subType == WordSubType.favourites) { + return watchFavourites(uid, languageId); + } + + final coreWords = + BehaviorSubject>.seeded(getCoreWordsForSubType(languageId, subType)); + + return Rx.combineLatest2, List, List>( + coreWords, + watchCustomWords(uid).map( + (all) => all.where((w) => w.subType == subType).toList(), + ), + (core, custom) { + final customIds = custom.map((w) => w.wordId).toSet(); + return [...core.where((w) => !customIds.contains(w.wordId)), ...custom]; + }, + ); + } + + Stream> watchWordsForType( + String uid, + String languageId, + WordType type, + ) { + final coreWords = + BehaviorSubject>.seeded(getCoreWordsForType(languageId, type)); + + return Rx.combineLatest2, List, List>( + coreWords, + watchCustomWords(uid).map( + (all) => all.where((w) => w.type == type).toList(), + ), + (core, custom) { + final customIds = custom.map((w) => w.wordId).toSet(); + return [...core.where((w) => !customIds.contains(w.wordId)), ...custom]; + }, + ); + } +} diff --git a/lib/api/repositories/word_group_repository.dart b/lib/api/repositories/word_group_repository.dart new file mode 100644 index 0000000..85ca9fc --- /dev/null +++ b/lib/api/repositories/word_group_repository.dart @@ -0,0 +1,36 @@ +import 'package:cloud_firestore/cloud_firestore.dart'; + +import '../models/word_group.dart'; + +/// User-created phrase cards (word groups). +/// Firestore path: users/{uid}/wordGroups/{groupId} +class WordGroupRepository { + WordGroupRepository(this._firestore); + + final FirebaseFirestore _firestore; + + CollectionReference> _ref(String uid) => + _firestore.collection('users').doc(uid).collection('wordGroups'); + + Stream> watchAll(String uid) { + return _ref(uid) + .orderBy('createdDate', descending: true) + .snapshots() + .map((snap) => + snap.docs.map((d) => WordGroup.fromJson(d.data())).toList()); + } + + Future save(String uid, WordGroup group) async { + await _ref(uid).doc(group.id).set(group.toJson()); + } + + Future delete(String uid, String groupId) async { + await _ref(uid).doc(groupId).delete(); + } + + Future incrementUsage(String uid, String groupId) { + return _ref(uid).doc(groupId).update({ + 'usageCount': FieldValue.increment(1), + }); + } +} diff --git a/lib/api/repositories/word_usage_repository.dart b/lib/api/repositories/word_usage_repository.dart new file mode 100644 index 0000000..4f76d2c --- /dev/null +++ b/lib/api/repositories/word_usage_repository.dart @@ -0,0 +1,46 @@ +import 'package:cloud_firestore/cloud_firestore.dart'; + +import '../models/word_usage.dart'; + +/// Stores per-user word usage counts in Firestore. +/// Firestore path: users/{uid}/wordUsage/{wordId} +/// +/// Uses FieldValue.increment so writes are atomic and work offline — +/// Firestore queues them and applies when connectivity is restored. +class WordUsageRepository { + WordUsageRepository(this._firestore); + + final FirebaseFirestore _firestore; + + CollectionReference> _ref(String uid) => + _firestore.collection('users').doc(uid).collection('wordUsage'); + + /// Increments the count for [wordId] by 1. Fire-and-forget. + Future increment(String uid, String wordId) { + return _ref(uid).doc(wordId).set( + { + 'wordId': wordId, + 'count': FieldValue.increment(1), + 'lastUsed': FieldValue.serverTimestamp(), + }, + SetOptions(merge: true), + ); + } + + /// Top [limit] most-used words, ordered by count descending. + Stream> watchTopWords(String uid, {int limit = 20}) { + return _ref(uid) + .orderBy('count', descending: true) + .limit(limit) + .snapshots() + .map((snap) => + snap.docs.map((d) => WordUsage.fromJson(d.data())).toList()); + } + + Stream> watchAll(String uid) { + return _ref(uid) + .snapshots() + .map((snap) => + snap.docs.map((d) => WordUsage.fromJson(d.data())).toList()); + } +} diff --git a/lib/api/serializers/date_time_serializer.dart b/lib/api/serializers/date_time_serializer.dart deleted file mode 100755 index 3439ef0..0000000 --- a/lib/api/serializers/date_time_serializer.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:built_value/serializer.dart'; - -class DateTimeSerializer implements PrimitiveSerializer { - @override - DateTime? deserialize(Serializers serializers, Object? serialized, {FullType specifiedType = FullType.unspecified}) { - if (serialized != null && serialized is String && serialized.isNotEmpty) { - return DateTime.parse(serialized).toLocal(); - } else { - //TODO this should return null - return DateTime.now(); - } - } - - @override - Object serialize(Serializers serializers, DateTime? object, {FullType specifiedType = FullType.unspecified}) { - if (object != null) { - return object.toUtc().toIso8601String(); - } else { - return Object(); - } - } - - @override - Iterable get types => [DateTime]; - - @override - String get wireName => 'DateTime'; -} diff --git a/lib/api/serializers/serializers.dart b/lib/api/serializers/serializers.dart deleted file mode 100644 index 2fadb07..0000000 --- a/lib/api/serializers/serializers.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; -import 'package:built_value/standard_json_plugin.dart'; - -import '../models/language.dart'; -import '../models/language_response.dart'; -import '../models/word.dart'; -import '../models/word_sub_type.dart'; -import '../models/word_type.dart'; -import 'date_time_serializer.dart'; - -part 'serializers.g.dart'; - -@SerializersFor( - [ - Language, - LanguageResponse, - Word, - WordSubType, - WordType, - ], -) -final Serializers serializers = (_$serializers.toBuilder() - ..add(DateTimeSerializer()) - ..addPlugin(StandardJsonPlugin())) - .build(); diff --git a/lib/api/serializers/serializers.g.dart b/lib/api/serializers/serializers.g.dart deleted file mode 100644 index 38682a6..0000000 --- a/lib/api/serializers/serializers.g.dart +++ /dev/null @@ -1,29 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'serializers.dart'; - -// ************************************************************************** -// BuiltValueGenerator -// ************************************************************************** - -Serializers _$serializers = (new Serializers().toBuilder() - ..add(Language.serializer) - ..add(LanguageResponse.serializer) - ..add(Word.serializer) - ..add(WordSubType.serializer) - ..add(WordType.serializer) - ..addBuilderFactory( - const FullType(BuiltList, const [const FullType(Language)]), - () => new ListBuilder()) - ..addBuilderFactory( - const FullType(BuiltList, const [const FullType(String)]), - () => new ListBuilder()) - ..addBuilderFactory( - const FullType(BuiltList, const [const FullType(String)]), - () => new ListBuilder()) - ..addBuilderFactory( - const FullType(BuiltList, const [const FullType(Word)]), - () => new ListBuilder())) - .build(); - -// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/lib/crash_reporting.dart b/lib/crash_reporting.dart new file mode 100644 index 0000000..24b968b --- /dev/null +++ b/lib/crash_reporting.dart @@ -0,0 +1 @@ +export 'crash_reporting_stub.dart' if (dart.library.io) 'crash_reporting_native.dart'; diff --git a/lib/crash_reporting_native.dart b/lib/crash_reporting_native.dart new file mode 100644 index 0000000..70962fc --- /dev/null +++ b/lib/crash_reporting_native.dart @@ -0,0 +1,13 @@ +import 'package:firebase_crashlytics/firebase_crashlytics.dart'; +import 'package:flutter/foundation.dart'; + +Future setupCrashReporting() async { + FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError; + if (kDebugMode) { + await FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(false); + } +} + +void recordZonedError(Object error, StackTrace stack) { + FirebaseCrashlytics.instance.recordError(error, stack, reason: 'Zoned Error'); +} diff --git a/lib/crash_reporting_stub.dart b/lib/crash_reporting_stub.dart new file mode 100644 index 0000000..c7c9f37 --- /dev/null +++ b/lib/crash_reporting_stub.dart @@ -0,0 +1,3 @@ +Future setupCrashReporting() async {} + +void recordZonedError(Object error, StackTrace stack) {} diff --git a/lib/database/app_database.dart b/lib/database/app_database.dart new file mode 100644 index 0000000..2c75e6b --- /dev/null +++ b/lib/database/app_database.dart @@ -0,0 +1,52 @@ +import 'package:drift/drift.dart'; +import 'package:drift_flutter/drift_flutter.dart'; +import 'package:flutter/foundation.dart'; + +import '../api/models/word_sub_type.dart'; +import '../api/models/word_type.dart'; +import 'daos/sync_dao.dart'; +import 'daos/word_groups_dao.dart'; +import 'daos/word_usage_dao.dart'; +import 'daos/words_dao.dart'; +import 'tables.dart'; + +export 'daos/sync_dao.dart'; +export 'daos/word_groups_dao.dart'; +export 'daos/word_usage_dao.dart'; +export 'daos/words_dao.dart'; +export 'tables.dart'; + +part 'app_database.g.dart'; + +@DriftDatabase( + tables: [ + WordsTable, + WordOverridesTable, + WordGroupsTable, + WordUsageTable, + SyncMetadataTable, + ], + daos: [ + WordsDao, + WordGroupsDao, + WordUsageDao, + SyncDao, + ], +) +class AppDatabase extends _$AppDatabase { + AppDatabase() : super(driftDatabase( + name: 'simple_aac', + web: kIsWeb + ? DriftWebOptions( + sqlite3Wasm: Uri.parse('sqlite3.wasm'), + driftWorker: Uri.parse('drift_worker.js'), + ) + : null, + )); + + /// Only used in tests — accepts an in-memory executor. + AppDatabase.forTesting(super.executor); + + @override + int get schemaVersion => 1; +} diff --git a/lib/database/app_database.g.dart b/lib/database/app_database.g.dart new file mode 100644 index 0000000..5dab1a0 --- /dev/null +++ b/lib/database/app_database.g.dart @@ -0,0 +1,3575 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'app_database.dart'; + +// ignore_for_file: type=lint +class $WordsTableTable extends WordsTable + with TableInfo<$WordsTableTable, WordRow> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $WordsTableTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _wordIdMeta = const VerificationMeta('wordId'); + @override + late final GeneratedColumn wordId = GeneratedColumn( + 'word_id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _languageIdMeta = const VerificationMeta( + 'languageId', + ); + @override + late final GeneratedColumn languageId = GeneratedColumn( + 'language_id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _wordTextMeta = const VerificationMeta( + 'wordText', + ); + @override + late final GeneratedColumn wordText = GeneratedColumn( + 'word_text', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _phoneticOverrideMeta = const VerificationMeta( + 'phoneticOverride', + ); + @override + late final GeneratedColumn phoneticOverride = GeneratedColumn( + 'phonetic_override', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + @override + late final GeneratedColumnWithTypeConverter type = + GeneratedColumn( + 'type', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ).withConverter($WordsTableTable.$convertertype); + @override + late final GeneratedColumnWithTypeConverter subType = + GeneratedColumn( + 'sub_type', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ).withConverter($WordsTableTable.$convertersubType); + static const VerificationMeta _imagePathMeta = const VerificationMeta( + 'imagePath', + ); + @override + late final GeneratedColumn imagePath = GeneratedColumn( + 'image_path', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + @override + late final GeneratedColumnWithTypeConverter, String> + extraRelatedWordIds = GeneratedColumn( + 'extra_related_word_ids', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const Constant('[]'), + ).withConverter>($WordsTableTable.$converterextraRelatedWordIds); + @override + late final GeneratedColumnWithTypeConverter, String> + aiSuggestedFollowUps = + GeneratedColumn( + 'ai_suggested_follow_ups', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const Constant('[]'), + ).withConverter>( + $WordsTableTable.$converteraiSuggestedFollowUps, + ); + @override + late final GeneratedColumnWithTypeConverter?, String> + localEmbedding = GeneratedColumn( + 'local_embedding', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ).withConverter?>($WordsTableTable.$converterlocalEmbedding); + static const VerificationMeta _createdDateMeta = const VerificationMeta( + 'createdDate', + ); + @override + late final GeneratedColumn createdDate = GeneratedColumn( + 'created_date', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + @override + List get $columns => [ + wordId, + languageId, + wordText, + phoneticOverride, + type, + subType, + imagePath, + extraRelatedWordIds, + aiSuggestedFollowUps, + localEmbedding, + createdDate, + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'words'; + @override + VerificationContext validateIntegrity( + Insertable instance, { + bool isInserting = false, + }) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('word_id')) { + context.handle( + _wordIdMeta, + wordId.isAcceptableOrUnknown(data['word_id']!, _wordIdMeta), + ); + } else if (isInserting) { + context.missing(_wordIdMeta); + } + if (data.containsKey('language_id')) { + context.handle( + _languageIdMeta, + languageId.isAcceptableOrUnknown(data['language_id']!, _languageIdMeta), + ); + } else if (isInserting) { + context.missing(_languageIdMeta); + } + if (data.containsKey('word_text')) { + context.handle( + _wordTextMeta, + wordText.isAcceptableOrUnknown(data['word_text']!, _wordTextMeta), + ); + } else if (isInserting) { + context.missing(_wordTextMeta); + } + if (data.containsKey('phonetic_override')) { + context.handle( + _phoneticOverrideMeta, + phoneticOverride.isAcceptableOrUnknown( + data['phonetic_override']!, + _phoneticOverrideMeta, + ), + ); + } + if (data.containsKey('image_path')) { + context.handle( + _imagePathMeta, + imagePath.isAcceptableOrUnknown(data['image_path']!, _imagePathMeta), + ); + } + if (data.containsKey('created_date')) { + context.handle( + _createdDateMeta, + createdDate.isAcceptableOrUnknown( + data['created_date']!, + _createdDateMeta, + ), + ); + } + return context; + } + + @override + Set get $primaryKey => {wordId}; + @override + WordRow map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return WordRow( + wordId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}word_id'], + )!, + languageId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}language_id'], + )!, + wordText: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}word_text'], + )!, + phoneticOverride: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}phonetic_override'], + ), + type: $WordsTableTable.$convertertype.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}type'], + )!, + ), + subType: $WordsTableTable.$convertersubType.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}sub_type'], + )!, + ), + imagePath: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}image_path'], + ), + extraRelatedWordIds: $WordsTableTable.$converterextraRelatedWordIds + .fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}extra_related_word_ids'], + )!, + ), + aiSuggestedFollowUps: $WordsTableTable.$converteraiSuggestedFollowUps + .fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}ai_suggested_follow_ups'], + )!, + ), + localEmbedding: $WordsTableTable.$converterlocalEmbedding.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}local_embedding'], + ), + ), + createdDate: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}created_date'], + ), + ); + } + + @override + $WordsTableTable createAlias(String alias) { + return $WordsTableTable(attachedDatabase, alias); + } + + static TypeConverter $convertertype = + const WordTypeConverter(); + static TypeConverter $convertersubType = + const WordSubTypeConverter(); + static TypeConverter, String> $converterextraRelatedWordIds = + const StringListConverter(); + static TypeConverter, String> $converteraiSuggestedFollowUps = + const StringListConverter(); + static TypeConverter?, String?> $converterlocalEmbedding = + const NullableDoubleListConverter(); +} + +class WordRow extends DataClass implements Insertable { + final String wordId; + final String languageId; + final String wordText; + final String? phoneticOverride; + final WordType type; + final WordSubType subType; + final String? imagePath; + final List extraRelatedWordIds; + final List aiSuggestedFollowUps; + final List? localEmbedding; + final DateTime? createdDate; + const WordRow({ + required this.wordId, + required this.languageId, + required this.wordText, + this.phoneticOverride, + required this.type, + required this.subType, + this.imagePath, + required this.extraRelatedWordIds, + required this.aiSuggestedFollowUps, + this.localEmbedding, + this.createdDate, + }); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['word_id'] = Variable(wordId); + map['language_id'] = Variable(languageId); + map['word_text'] = Variable(wordText); + if (!nullToAbsent || phoneticOverride != null) { + map['phonetic_override'] = Variable(phoneticOverride); + } + { + map['type'] = Variable( + $WordsTableTable.$convertertype.toSql(type), + ); + } + { + map['sub_type'] = Variable( + $WordsTableTable.$convertersubType.toSql(subType), + ); + } + if (!nullToAbsent || imagePath != null) { + map['image_path'] = Variable(imagePath); + } + { + map['extra_related_word_ids'] = Variable( + $WordsTableTable.$converterextraRelatedWordIds.toSql( + extraRelatedWordIds, + ), + ); + } + { + map['ai_suggested_follow_ups'] = Variable( + $WordsTableTable.$converteraiSuggestedFollowUps.toSql( + aiSuggestedFollowUps, + ), + ); + } + if (!nullToAbsent || localEmbedding != null) { + map['local_embedding'] = Variable( + $WordsTableTable.$converterlocalEmbedding.toSql(localEmbedding), + ); + } + if (!nullToAbsent || createdDate != null) { + map['created_date'] = Variable(createdDate); + } + return map; + } + + WordsTableCompanion toCompanion(bool nullToAbsent) { + return WordsTableCompanion( + wordId: Value(wordId), + languageId: Value(languageId), + wordText: Value(wordText), + phoneticOverride: phoneticOverride == null && nullToAbsent + ? const Value.absent() + : Value(phoneticOverride), + type: Value(type), + subType: Value(subType), + imagePath: imagePath == null && nullToAbsent + ? const Value.absent() + : Value(imagePath), + extraRelatedWordIds: Value(extraRelatedWordIds), + aiSuggestedFollowUps: Value(aiSuggestedFollowUps), + localEmbedding: localEmbedding == null && nullToAbsent + ? const Value.absent() + : Value(localEmbedding), + createdDate: createdDate == null && nullToAbsent + ? const Value.absent() + : Value(createdDate), + ); + } + + factory WordRow.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return WordRow( + wordId: serializer.fromJson(json['wordId']), + languageId: serializer.fromJson(json['languageId']), + wordText: serializer.fromJson(json['wordText']), + phoneticOverride: serializer.fromJson(json['phoneticOverride']), + type: serializer.fromJson(json['type']), + subType: serializer.fromJson(json['subType']), + imagePath: serializer.fromJson(json['imagePath']), + extraRelatedWordIds: serializer.fromJson>( + json['extraRelatedWordIds'], + ), + aiSuggestedFollowUps: serializer.fromJson>( + json['aiSuggestedFollowUps'], + ), + localEmbedding: serializer.fromJson?>( + json['localEmbedding'], + ), + createdDate: serializer.fromJson(json['createdDate']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'wordId': serializer.toJson(wordId), + 'languageId': serializer.toJson(languageId), + 'wordText': serializer.toJson(wordText), + 'phoneticOverride': serializer.toJson(phoneticOverride), + 'type': serializer.toJson(type), + 'subType': serializer.toJson(subType), + 'imagePath': serializer.toJson(imagePath), + 'extraRelatedWordIds': serializer.toJson>( + extraRelatedWordIds, + ), + 'aiSuggestedFollowUps': serializer.toJson>( + aiSuggestedFollowUps, + ), + 'localEmbedding': serializer.toJson?>(localEmbedding), + 'createdDate': serializer.toJson(createdDate), + }; + } + + WordRow copyWith({ + String? wordId, + String? languageId, + String? wordText, + Value phoneticOverride = const Value.absent(), + WordType? type, + WordSubType? subType, + Value imagePath = const Value.absent(), + List? extraRelatedWordIds, + List? aiSuggestedFollowUps, + Value?> localEmbedding = const Value.absent(), + Value createdDate = const Value.absent(), + }) => WordRow( + wordId: wordId ?? this.wordId, + languageId: languageId ?? this.languageId, + wordText: wordText ?? this.wordText, + phoneticOverride: phoneticOverride.present + ? phoneticOverride.value + : this.phoneticOverride, + type: type ?? this.type, + subType: subType ?? this.subType, + imagePath: imagePath.present ? imagePath.value : this.imagePath, + extraRelatedWordIds: extraRelatedWordIds ?? this.extraRelatedWordIds, + aiSuggestedFollowUps: aiSuggestedFollowUps ?? this.aiSuggestedFollowUps, + localEmbedding: localEmbedding.present + ? localEmbedding.value + : this.localEmbedding, + createdDate: createdDate.present ? createdDate.value : this.createdDate, + ); + WordRow copyWithCompanion(WordsTableCompanion data) { + return WordRow( + wordId: data.wordId.present ? data.wordId.value : this.wordId, + languageId: data.languageId.present + ? data.languageId.value + : this.languageId, + wordText: data.wordText.present ? data.wordText.value : this.wordText, + phoneticOverride: data.phoneticOverride.present + ? data.phoneticOverride.value + : this.phoneticOverride, + type: data.type.present ? data.type.value : this.type, + subType: data.subType.present ? data.subType.value : this.subType, + imagePath: data.imagePath.present ? data.imagePath.value : this.imagePath, + extraRelatedWordIds: data.extraRelatedWordIds.present + ? data.extraRelatedWordIds.value + : this.extraRelatedWordIds, + aiSuggestedFollowUps: data.aiSuggestedFollowUps.present + ? data.aiSuggestedFollowUps.value + : this.aiSuggestedFollowUps, + localEmbedding: data.localEmbedding.present + ? data.localEmbedding.value + : this.localEmbedding, + createdDate: data.createdDate.present + ? data.createdDate.value + : this.createdDate, + ); + } + + @override + String toString() { + return (StringBuffer('WordRow(') + ..write('wordId: $wordId, ') + ..write('languageId: $languageId, ') + ..write('wordText: $wordText, ') + ..write('phoneticOverride: $phoneticOverride, ') + ..write('type: $type, ') + ..write('subType: $subType, ') + ..write('imagePath: $imagePath, ') + ..write('extraRelatedWordIds: $extraRelatedWordIds, ') + ..write('aiSuggestedFollowUps: $aiSuggestedFollowUps, ') + ..write('localEmbedding: $localEmbedding, ') + ..write('createdDate: $createdDate') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + wordId, + languageId, + wordText, + phoneticOverride, + type, + subType, + imagePath, + extraRelatedWordIds, + aiSuggestedFollowUps, + localEmbedding, + createdDate, + ); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is WordRow && + other.wordId == this.wordId && + other.languageId == this.languageId && + other.wordText == this.wordText && + other.phoneticOverride == this.phoneticOverride && + other.type == this.type && + other.subType == this.subType && + other.imagePath == this.imagePath && + other.extraRelatedWordIds == this.extraRelatedWordIds && + other.aiSuggestedFollowUps == this.aiSuggestedFollowUps && + other.localEmbedding == this.localEmbedding && + other.createdDate == this.createdDate); +} + +class WordsTableCompanion extends UpdateCompanion { + final Value wordId; + final Value languageId; + final Value wordText; + final Value phoneticOverride; + final Value type; + final Value subType; + final Value imagePath; + final Value> extraRelatedWordIds; + final Value> aiSuggestedFollowUps; + final Value?> localEmbedding; + final Value createdDate; + final Value rowid; + const WordsTableCompanion({ + this.wordId = const Value.absent(), + this.languageId = const Value.absent(), + this.wordText = const Value.absent(), + this.phoneticOverride = const Value.absent(), + this.type = const Value.absent(), + this.subType = const Value.absent(), + this.imagePath = const Value.absent(), + this.extraRelatedWordIds = const Value.absent(), + this.aiSuggestedFollowUps = const Value.absent(), + this.localEmbedding = const Value.absent(), + this.createdDate = const Value.absent(), + this.rowid = const Value.absent(), + }); + WordsTableCompanion.insert({ + required String wordId, + required String languageId, + required String wordText, + this.phoneticOverride = const Value.absent(), + required WordType type, + required WordSubType subType, + this.imagePath = const Value.absent(), + this.extraRelatedWordIds = const Value.absent(), + this.aiSuggestedFollowUps = const Value.absent(), + this.localEmbedding = const Value.absent(), + this.createdDate = const Value.absent(), + this.rowid = const Value.absent(), + }) : wordId = Value(wordId), + languageId = Value(languageId), + wordText = Value(wordText), + type = Value(type), + subType = Value(subType); + static Insertable custom({ + Expression? wordId, + Expression? languageId, + Expression? wordText, + Expression? phoneticOverride, + Expression? type, + Expression? subType, + Expression? imagePath, + Expression? extraRelatedWordIds, + Expression? aiSuggestedFollowUps, + Expression? localEmbedding, + Expression? createdDate, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (wordId != null) 'word_id': wordId, + if (languageId != null) 'language_id': languageId, + if (wordText != null) 'word_text': wordText, + if (phoneticOverride != null) 'phonetic_override': phoneticOverride, + if (type != null) 'type': type, + if (subType != null) 'sub_type': subType, + if (imagePath != null) 'image_path': imagePath, + if (extraRelatedWordIds != null) + 'extra_related_word_ids': extraRelatedWordIds, + if (aiSuggestedFollowUps != null) + 'ai_suggested_follow_ups': aiSuggestedFollowUps, + if (localEmbedding != null) 'local_embedding': localEmbedding, + if (createdDate != null) 'created_date': createdDate, + if (rowid != null) 'rowid': rowid, + }); + } + + WordsTableCompanion copyWith({ + Value? wordId, + Value? languageId, + Value? wordText, + Value? phoneticOverride, + Value? type, + Value? subType, + Value? imagePath, + Value>? extraRelatedWordIds, + Value>? aiSuggestedFollowUps, + Value?>? localEmbedding, + Value? createdDate, + Value? rowid, + }) { + return WordsTableCompanion( + wordId: wordId ?? this.wordId, + languageId: languageId ?? this.languageId, + wordText: wordText ?? this.wordText, + phoneticOverride: phoneticOverride ?? this.phoneticOverride, + type: type ?? this.type, + subType: subType ?? this.subType, + imagePath: imagePath ?? this.imagePath, + extraRelatedWordIds: extraRelatedWordIds ?? this.extraRelatedWordIds, + aiSuggestedFollowUps: aiSuggestedFollowUps ?? this.aiSuggestedFollowUps, + localEmbedding: localEmbedding ?? this.localEmbedding, + createdDate: createdDate ?? this.createdDate, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (wordId.present) { + map['word_id'] = Variable(wordId.value); + } + if (languageId.present) { + map['language_id'] = Variable(languageId.value); + } + if (wordText.present) { + map['word_text'] = Variable(wordText.value); + } + if (phoneticOverride.present) { + map['phonetic_override'] = Variable(phoneticOverride.value); + } + if (type.present) { + map['type'] = Variable( + $WordsTableTable.$convertertype.toSql(type.value), + ); + } + if (subType.present) { + map['sub_type'] = Variable( + $WordsTableTable.$convertersubType.toSql(subType.value), + ); + } + if (imagePath.present) { + map['image_path'] = Variable(imagePath.value); + } + if (extraRelatedWordIds.present) { + map['extra_related_word_ids'] = Variable( + $WordsTableTable.$converterextraRelatedWordIds.toSql( + extraRelatedWordIds.value, + ), + ); + } + if (aiSuggestedFollowUps.present) { + map['ai_suggested_follow_ups'] = Variable( + $WordsTableTable.$converteraiSuggestedFollowUps.toSql( + aiSuggestedFollowUps.value, + ), + ); + } + if (localEmbedding.present) { + map['local_embedding'] = Variable( + $WordsTableTable.$converterlocalEmbedding.toSql(localEmbedding.value), + ); + } + if (createdDate.present) { + map['created_date'] = Variable(createdDate.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('WordsTableCompanion(') + ..write('wordId: $wordId, ') + ..write('languageId: $languageId, ') + ..write('wordText: $wordText, ') + ..write('phoneticOverride: $phoneticOverride, ') + ..write('type: $type, ') + ..write('subType: $subType, ') + ..write('imagePath: $imagePath, ') + ..write('extraRelatedWordIds: $extraRelatedWordIds, ') + ..write('aiSuggestedFollowUps: $aiSuggestedFollowUps, ') + ..write('localEmbedding: $localEmbedding, ') + ..write('createdDate: $createdDate, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class $WordOverridesTableTable extends WordOverridesTable + with TableInfo<$WordOverridesTableTable, WordOverrideRow> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $WordOverridesTableTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _wordIdMeta = const VerificationMeta('wordId'); + @override + late final GeneratedColumn wordId = GeneratedColumn( + 'word_id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _isFavouriteMeta = const VerificationMeta( + 'isFavourite', + ); + @override + late final GeneratedColumn isFavourite = GeneratedColumn( + 'is_favourite', + aliasedName, + true, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_favourite" IN (0, 1))', + ), + ); + static const VerificationMeta _wordTextMeta = const VerificationMeta( + 'wordText', + ); + @override + late final GeneratedColumn wordText = GeneratedColumn( + 'word_text', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _phoneticOverrideMeta = const VerificationMeta( + 'phoneticOverride', + ); + @override + late final GeneratedColumn phoneticOverride = GeneratedColumn( + 'phonetic_override', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _typeMeta = const VerificationMeta('type'); + @override + late final GeneratedColumn type = GeneratedColumn( + 'type', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _subTypeMeta = const VerificationMeta( + 'subType', + ); + @override + late final GeneratedColumn subType = GeneratedColumn( + 'sub_type', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _imagePathMeta = const VerificationMeta( + 'imagePath', + ); + @override + late final GeneratedColumn imagePath = GeneratedColumn( + 'image_path', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _updatedAtMeta = const VerificationMeta( + 'updatedAt', + ); + @override + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + @override + List get $columns => [ + wordId, + isFavourite, + wordText, + phoneticOverride, + type, + subType, + imagePath, + updatedAt, + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'word_overrides'; + @override + VerificationContext validateIntegrity( + Insertable instance, { + bool isInserting = false, + }) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('word_id')) { + context.handle( + _wordIdMeta, + wordId.isAcceptableOrUnknown(data['word_id']!, _wordIdMeta), + ); + } else if (isInserting) { + context.missing(_wordIdMeta); + } + if (data.containsKey('is_favourite')) { + context.handle( + _isFavouriteMeta, + isFavourite.isAcceptableOrUnknown( + data['is_favourite']!, + _isFavouriteMeta, + ), + ); + } + if (data.containsKey('word_text')) { + context.handle( + _wordTextMeta, + wordText.isAcceptableOrUnknown(data['word_text']!, _wordTextMeta), + ); + } + if (data.containsKey('phonetic_override')) { + context.handle( + _phoneticOverrideMeta, + phoneticOverride.isAcceptableOrUnknown( + data['phonetic_override']!, + _phoneticOverrideMeta, + ), + ); + } + if (data.containsKey('type')) { + context.handle( + _typeMeta, + type.isAcceptableOrUnknown(data['type']!, _typeMeta), + ); + } + if (data.containsKey('sub_type')) { + context.handle( + _subTypeMeta, + subType.isAcceptableOrUnknown(data['sub_type']!, _subTypeMeta), + ); + } + if (data.containsKey('image_path')) { + context.handle( + _imagePathMeta, + imagePath.isAcceptableOrUnknown(data['image_path']!, _imagePathMeta), + ); + } + if (data.containsKey('updated_at')) { + context.handle( + _updatedAtMeta, + updatedAt.isAcceptableOrUnknown(data['updated_at']!, _updatedAtMeta), + ); + } + return context; + } + + @override + Set get $primaryKey => {wordId}; + @override + WordOverrideRow map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return WordOverrideRow( + wordId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}word_id'], + )!, + isFavourite: attachedDatabase.typeMapping.read( + DriftSqlType.bool, + data['${effectivePrefix}is_favourite'], + ), + wordText: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}word_text'], + ), + phoneticOverride: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}phonetic_override'], + ), + type: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}type'], + ), + subType: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}sub_type'], + ), + imagePath: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}image_path'], + ), + updatedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}updated_at'], + ), + ); + } + + @override + $WordOverridesTableTable createAlias(String alias) { + return $WordOverridesTableTable(attachedDatabase, alias); + } +} + +class WordOverrideRow extends DataClass implements Insertable { + final String wordId; + final bool? isFavourite; + final String? wordText; + final String? phoneticOverride; + final String? type; + final String? subType; + final String? imagePath; + final DateTime? updatedAt; + const WordOverrideRow({ + required this.wordId, + this.isFavourite, + this.wordText, + this.phoneticOverride, + this.type, + this.subType, + this.imagePath, + this.updatedAt, + }); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['word_id'] = Variable(wordId); + if (!nullToAbsent || isFavourite != null) { + map['is_favourite'] = Variable(isFavourite); + } + if (!nullToAbsent || wordText != null) { + map['word_text'] = Variable(wordText); + } + if (!nullToAbsent || phoneticOverride != null) { + map['phonetic_override'] = Variable(phoneticOverride); + } + if (!nullToAbsent || type != null) { + map['type'] = Variable(type); + } + if (!nullToAbsent || subType != null) { + map['sub_type'] = Variable(subType); + } + if (!nullToAbsent || imagePath != null) { + map['image_path'] = Variable(imagePath); + } + if (!nullToAbsent || updatedAt != null) { + map['updated_at'] = Variable(updatedAt); + } + return map; + } + + WordOverridesTableCompanion toCompanion(bool nullToAbsent) { + return WordOverridesTableCompanion( + wordId: Value(wordId), + isFavourite: isFavourite == null && nullToAbsent + ? const Value.absent() + : Value(isFavourite), + wordText: wordText == null && nullToAbsent + ? const Value.absent() + : Value(wordText), + phoneticOverride: phoneticOverride == null && nullToAbsent + ? const Value.absent() + : Value(phoneticOverride), + type: type == null && nullToAbsent ? const Value.absent() : Value(type), + subType: subType == null && nullToAbsent + ? const Value.absent() + : Value(subType), + imagePath: imagePath == null && nullToAbsent + ? const Value.absent() + : Value(imagePath), + updatedAt: updatedAt == null && nullToAbsent + ? const Value.absent() + : Value(updatedAt), + ); + } + + factory WordOverrideRow.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return WordOverrideRow( + wordId: serializer.fromJson(json['wordId']), + isFavourite: serializer.fromJson(json['isFavourite']), + wordText: serializer.fromJson(json['wordText']), + phoneticOverride: serializer.fromJson(json['phoneticOverride']), + type: serializer.fromJson(json['type']), + subType: serializer.fromJson(json['subType']), + imagePath: serializer.fromJson(json['imagePath']), + updatedAt: serializer.fromJson(json['updatedAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'wordId': serializer.toJson(wordId), + 'isFavourite': serializer.toJson(isFavourite), + 'wordText': serializer.toJson(wordText), + 'phoneticOverride': serializer.toJson(phoneticOverride), + 'type': serializer.toJson(type), + 'subType': serializer.toJson(subType), + 'imagePath': serializer.toJson(imagePath), + 'updatedAt': serializer.toJson(updatedAt), + }; + } + + WordOverrideRow copyWith({ + String? wordId, + Value isFavourite = const Value.absent(), + Value wordText = const Value.absent(), + Value phoneticOverride = const Value.absent(), + Value type = const Value.absent(), + Value subType = const Value.absent(), + Value imagePath = const Value.absent(), + Value updatedAt = const Value.absent(), + }) => WordOverrideRow( + wordId: wordId ?? this.wordId, + isFavourite: isFavourite.present ? isFavourite.value : this.isFavourite, + wordText: wordText.present ? wordText.value : this.wordText, + phoneticOverride: phoneticOverride.present + ? phoneticOverride.value + : this.phoneticOverride, + type: type.present ? type.value : this.type, + subType: subType.present ? subType.value : this.subType, + imagePath: imagePath.present ? imagePath.value : this.imagePath, + updatedAt: updatedAt.present ? updatedAt.value : this.updatedAt, + ); + WordOverrideRow copyWithCompanion(WordOverridesTableCompanion data) { + return WordOverrideRow( + wordId: data.wordId.present ? data.wordId.value : this.wordId, + isFavourite: data.isFavourite.present + ? data.isFavourite.value + : this.isFavourite, + wordText: data.wordText.present ? data.wordText.value : this.wordText, + phoneticOverride: data.phoneticOverride.present + ? data.phoneticOverride.value + : this.phoneticOverride, + type: data.type.present ? data.type.value : this.type, + subType: data.subType.present ? data.subType.value : this.subType, + imagePath: data.imagePath.present ? data.imagePath.value : this.imagePath, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + ); + } + + @override + String toString() { + return (StringBuffer('WordOverrideRow(') + ..write('wordId: $wordId, ') + ..write('isFavourite: $isFavourite, ') + ..write('wordText: $wordText, ') + ..write('phoneticOverride: $phoneticOverride, ') + ..write('type: $type, ') + ..write('subType: $subType, ') + ..write('imagePath: $imagePath, ') + ..write('updatedAt: $updatedAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + wordId, + isFavourite, + wordText, + phoneticOverride, + type, + subType, + imagePath, + updatedAt, + ); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is WordOverrideRow && + other.wordId == this.wordId && + other.isFavourite == this.isFavourite && + other.wordText == this.wordText && + other.phoneticOverride == this.phoneticOverride && + other.type == this.type && + other.subType == this.subType && + other.imagePath == this.imagePath && + other.updatedAt == this.updatedAt); +} + +class WordOverridesTableCompanion extends UpdateCompanion { + final Value wordId; + final Value isFavourite; + final Value wordText; + final Value phoneticOverride; + final Value type; + final Value subType; + final Value imagePath; + final Value updatedAt; + final Value rowid; + const WordOverridesTableCompanion({ + this.wordId = const Value.absent(), + this.isFavourite = const Value.absent(), + this.wordText = const Value.absent(), + this.phoneticOverride = const Value.absent(), + this.type = const Value.absent(), + this.subType = const Value.absent(), + this.imagePath = const Value.absent(), + this.updatedAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + WordOverridesTableCompanion.insert({ + required String wordId, + this.isFavourite = const Value.absent(), + this.wordText = const Value.absent(), + this.phoneticOverride = const Value.absent(), + this.type = const Value.absent(), + this.subType = const Value.absent(), + this.imagePath = const Value.absent(), + this.updatedAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : wordId = Value(wordId); + static Insertable custom({ + Expression? wordId, + Expression? isFavourite, + Expression? wordText, + Expression? phoneticOverride, + Expression? type, + Expression? subType, + Expression? imagePath, + Expression? updatedAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (wordId != null) 'word_id': wordId, + if (isFavourite != null) 'is_favourite': isFavourite, + if (wordText != null) 'word_text': wordText, + if (phoneticOverride != null) 'phonetic_override': phoneticOverride, + if (type != null) 'type': type, + if (subType != null) 'sub_type': subType, + if (imagePath != null) 'image_path': imagePath, + if (updatedAt != null) 'updated_at': updatedAt, + if (rowid != null) 'rowid': rowid, + }); + } + + WordOverridesTableCompanion copyWith({ + Value? wordId, + Value? isFavourite, + Value? wordText, + Value? phoneticOverride, + Value? type, + Value? subType, + Value? imagePath, + Value? updatedAt, + Value? rowid, + }) { + return WordOverridesTableCompanion( + wordId: wordId ?? this.wordId, + isFavourite: isFavourite ?? this.isFavourite, + wordText: wordText ?? this.wordText, + phoneticOverride: phoneticOverride ?? this.phoneticOverride, + type: type ?? this.type, + subType: subType ?? this.subType, + imagePath: imagePath ?? this.imagePath, + updatedAt: updatedAt ?? this.updatedAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (wordId.present) { + map['word_id'] = Variable(wordId.value); + } + if (isFavourite.present) { + map['is_favourite'] = Variable(isFavourite.value); + } + if (wordText.present) { + map['word_text'] = Variable(wordText.value); + } + if (phoneticOverride.present) { + map['phonetic_override'] = Variable(phoneticOverride.value); + } + if (type.present) { + map['type'] = Variable(type.value); + } + if (subType.present) { + map['sub_type'] = Variable(subType.value); + } + if (imagePath.present) { + map['image_path'] = Variable(imagePath.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('WordOverridesTableCompanion(') + ..write('wordId: $wordId, ') + ..write('isFavourite: $isFavourite, ') + ..write('wordText: $wordText, ') + ..write('phoneticOverride: $phoneticOverride, ') + ..write('type: $type, ') + ..write('subType: $subType, ') + ..write('imagePath: $imagePath, ') + ..write('updatedAt: $updatedAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class $WordGroupsTableTable extends WordGroupsTable + with TableInfo<$WordGroupsTableTable, WordGroupRow> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $WordGroupsTableTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _idMeta = const VerificationMeta('id'); + @override + late final GeneratedColumn id = GeneratedColumn( + 'id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _titleMeta = const VerificationMeta('title'); + @override + late final GeneratedColumn title = GeneratedColumn( + 'title', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + @override + late final GeneratedColumnWithTypeConverter, String> wordIds = + GeneratedColumn( + 'word_ids', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const Constant('[]'), + ).withConverter>($WordGroupsTableTable.$converterwordIds); + static const VerificationMeta _phoneticOverrideMeta = const VerificationMeta( + 'phoneticOverride', + ); + @override + late final GeneratedColumn phoneticOverride = GeneratedColumn( + 'phonetic_override', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _imagePathMeta = const VerificationMeta( + 'imagePath', + ); + @override + late final GeneratedColumn imagePath = GeneratedColumn( + 'image_path', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _isFavouriteMeta = const VerificationMeta( + 'isFavourite', + ); + @override + late final GeneratedColumn isFavourite = GeneratedColumn( + 'is_favourite', + aliasedName, + false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_favourite" IN (0, 1))', + ), + defaultValue: const Constant(false), + ); + static const VerificationMeta _usageCountMeta = const VerificationMeta( + 'usageCount', + ); + @override + late final GeneratedColumn usageCount = GeneratedColumn( + 'usage_count', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultValue: const Constant(0), + ); + static const VerificationMeta _createdDateMeta = const VerificationMeta( + 'createdDate', + ); + @override + late final GeneratedColumn createdDate = GeneratedColumn( + 'created_date', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + static const VerificationMeta _updatedAtMeta = const VerificationMeta( + 'updatedAt', + ); + @override + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + @override + List get $columns => [ + id, + title, + wordIds, + phoneticOverride, + imagePath, + isFavourite, + usageCount, + createdDate, + updatedAt, + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'word_groups'; + @override + VerificationContext validateIntegrity( + Insertable instance, { + bool isInserting = false, + }) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } else if (isInserting) { + context.missing(_idMeta); + } + if (data.containsKey('title')) { + context.handle( + _titleMeta, + title.isAcceptableOrUnknown(data['title']!, _titleMeta), + ); + } else if (isInserting) { + context.missing(_titleMeta); + } + if (data.containsKey('phonetic_override')) { + context.handle( + _phoneticOverrideMeta, + phoneticOverride.isAcceptableOrUnknown( + data['phonetic_override']!, + _phoneticOverrideMeta, + ), + ); + } + if (data.containsKey('image_path')) { + context.handle( + _imagePathMeta, + imagePath.isAcceptableOrUnknown(data['image_path']!, _imagePathMeta), + ); + } + if (data.containsKey('is_favourite')) { + context.handle( + _isFavouriteMeta, + isFavourite.isAcceptableOrUnknown( + data['is_favourite']!, + _isFavouriteMeta, + ), + ); + } + if (data.containsKey('usage_count')) { + context.handle( + _usageCountMeta, + usageCount.isAcceptableOrUnknown(data['usage_count']!, _usageCountMeta), + ); + } + if (data.containsKey('created_date')) { + context.handle( + _createdDateMeta, + createdDate.isAcceptableOrUnknown( + data['created_date']!, + _createdDateMeta, + ), + ); + } + if (data.containsKey('updated_at')) { + context.handle( + _updatedAtMeta, + updatedAt.isAcceptableOrUnknown(data['updated_at']!, _updatedAtMeta), + ); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + WordGroupRow map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return WordGroupRow( + id: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}id'], + )!, + title: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}title'], + )!, + wordIds: $WordGroupsTableTable.$converterwordIds.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}word_ids'], + )!, + ), + phoneticOverride: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}phonetic_override'], + ), + imagePath: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}image_path'], + ), + isFavourite: attachedDatabase.typeMapping.read( + DriftSqlType.bool, + data['${effectivePrefix}is_favourite'], + )!, + usageCount: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}usage_count'], + )!, + createdDate: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}created_date'], + ), + updatedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}updated_at'], + ), + ); + } + + @override + $WordGroupsTableTable createAlias(String alias) { + return $WordGroupsTableTable(attachedDatabase, alias); + } + + static TypeConverter, String> $converterwordIds = + const StringListConverter(); +} + +class WordGroupRow extends DataClass implements Insertable { + final String id; + final String title; + final List wordIds; + final String? phoneticOverride; + final String? imagePath; + final bool isFavourite; + final int usageCount; + final DateTime? createdDate; + final DateTime? updatedAt; + const WordGroupRow({ + required this.id, + required this.title, + required this.wordIds, + this.phoneticOverride, + this.imagePath, + required this.isFavourite, + required this.usageCount, + this.createdDate, + this.updatedAt, + }); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['title'] = Variable(title); + { + map['word_ids'] = Variable( + $WordGroupsTableTable.$converterwordIds.toSql(wordIds), + ); + } + if (!nullToAbsent || phoneticOverride != null) { + map['phonetic_override'] = Variable(phoneticOverride); + } + if (!nullToAbsent || imagePath != null) { + map['image_path'] = Variable(imagePath); + } + map['is_favourite'] = Variable(isFavourite); + map['usage_count'] = Variable(usageCount); + if (!nullToAbsent || createdDate != null) { + map['created_date'] = Variable(createdDate); + } + if (!nullToAbsent || updatedAt != null) { + map['updated_at'] = Variable(updatedAt); + } + return map; + } + + WordGroupsTableCompanion toCompanion(bool nullToAbsent) { + return WordGroupsTableCompanion( + id: Value(id), + title: Value(title), + wordIds: Value(wordIds), + phoneticOverride: phoneticOverride == null && nullToAbsent + ? const Value.absent() + : Value(phoneticOverride), + imagePath: imagePath == null && nullToAbsent + ? const Value.absent() + : Value(imagePath), + isFavourite: Value(isFavourite), + usageCount: Value(usageCount), + createdDate: createdDate == null && nullToAbsent + ? const Value.absent() + : Value(createdDate), + updatedAt: updatedAt == null && nullToAbsent + ? const Value.absent() + : Value(updatedAt), + ); + } + + factory WordGroupRow.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return WordGroupRow( + id: serializer.fromJson(json['id']), + title: serializer.fromJson(json['title']), + wordIds: serializer.fromJson>(json['wordIds']), + phoneticOverride: serializer.fromJson(json['phoneticOverride']), + imagePath: serializer.fromJson(json['imagePath']), + isFavourite: serializer.fromJson(json['isFavourite']), + usageCount: serializer.fromJson(json['usageCount']), + createdDate: serializer.fromJson(json['createdDate']), + updatedAt: serializer.fromJson(json['updatedAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'title': serializer.toJson(title), + 'wordIds': serializer.toJson>(wordIds), + 'phoneticOverride': serializer.toJson(phoneticOverride), + 'imagePath': serializer.toJson(imagePath), + 'isFavourite': serializer.toJson(isFavourite), + 'usageCount': serializer.toJson(usageCount), + 'createdDate': serializer.toJson(createdDate), + 'updatedAt': serializer.toJson(updatedAt), + }; + } + + WordGroupRow copyWith({ + String? id, + String? title, + List? wordIds, + Value phoneticOverride = const Value.absent(), + Value imagePath = const Value.absent(), + bool? isFavourite, + int? usageCount, + Value createdDate = const Value.absent(), + Value updatedAt = const Value.absent(), + }) => WordGroupRow( + id: id ?? this.id, + title: title ?? this.title, + wordIds: wordIds ?? this.wordIds, + phoneticOverride: phoneticOverride.present + ? phoneticOverride.value + : this.phoneticOverride, + imagePath: imagePath.present ? imagePath.value : this.imagePath, + isFavourite: isFavourite ?? this.isFavourite, + usageCount: usageCount ?? this.usageCount, + createdDate: createdDate.present ? createdDate.value : this.createdDate, + updatedAt: updatedAt.present ? updatedAt.value : this.updatedAt, + ); + WordGroupRow copyWithCompanion(WordGroupsTableCompanion data) { + return WordGroupRow( + id: data.id.present ? data.id.value : this.id, + title: data.title.present ? data.title.value : this.title, + wordIds: data.wordIds.present ? data.wordIds.value : this.wordIds, + phoneticOverride: data.phoneticOverride.present + ? data.phoneticOverride.value + : this.phoneticOverride, + imagePath: data.imagePath.present ? data.imagePath.value : this.imagePath, + isFavourite: data.isFavourite.present + ? data.isFavourite.value + : this.isFavourite, + usageCount: data.usageCount.present + ? data.usageCount.value + : this.usageCount, + createdDate: data.createdDate.present + ? data.createdDate.value + : this.createdDate, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + ); + } + + @override + String toString() { + return (StringBuffer('WordGroupRow(') + ..write('id: $id, ') + ..write('title: $title, ') + ..write('wordIds: $wordIds, ') + ..write('phoneticOverride: $phoneticOverride, ') + ..write('imagePath: $imagePath, ') + ..write('isFavourite: $isFavourite, ') + ..write('usageCount: $usageCount, ') + ..write('createdDate: $createdDate, ') + ..write('updatedAt: $updatedAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + id, + title, + wordIds, + phoneticOverride, + imagePath, + isFavourite, + usageCount, + createdDate, + updatedAt, + ); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is WordGroupRow && + other.id == this.id && + other.title == this.title && + other.wordIds == this.wordIds && + other.phoneticOverride == this.phoneticOverride && + other.imagePath == this.imagePath && + other.isFavourite == this.isFavourite && + other.usageCount == this.usageCount && + other.createdDate == this.createdDate && + other.updatedAt == this.updatedAt); +} + +class WordGroupsTableCompanion extends UpdateCompanion { + final Value id; + final Value title; + final Value> wordIds; + final Value phoneticOverride; + final Value imagePath; + final Value isFavourite; + final Value usageCount; + final Value createdDate; + final Value updatedAt; + final Value rowid; + const WordGroupsTableCompanion({ + this.id = const Value.absent(), + this.title = const Value.absent(), + this.wordIds = const Value.absent(), + this.phoneticOverride = const Value.absent(), + this.imagePath = const Value.absent(), + this.isFavourite = const Value.absent(), + this.usageCount = const Value.absent(), + this.createdDate = const Value.absent(), + this.updatedAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + WordGroupsTableCompanion.insert({ + required String id, + required String title, + this.wordIds = const Value.absent(), + this.phoneticOverride = const Value.absent(), + this.imagePath = const Value.absent(), + this.isFavourite = const Value.absent(), + this.usageCount = const Value.absent(), + this.createdDate = const Value.absent(), + this.updatedAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : id = Value(id), + title = Value(title); + static Insertable custom({ + Expression? id, + Expression? title, + Expression? wordIds, + Expression? phoneticOverride, + Expression? imagePath, + Expression? isFavourite, + Expression? usageCount, + Expression? createdDate, + Expression? updatedAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (title != null) 'title': title, + if (wordIds != null) 'word_ids': wordIds, + if (phoneticOverride != null) 'phonetic_override': phoneticOverride, + if (imagePath != null) 'image_path': imagePath, + if (isFavourite != null) 'is_favourite': isFavourite, + if (usageCount != null) 'usage_count': usageCount, + if (createdDate != null) 'created_date': createdDate, + if (updatedAt != null) 'updated_at': updatedAt, + if (rowid != null) 'rowid': rowid, + }); + } + + WordGroupsTableCompanion copyWith({ + Value? id, + Value? title, + Value>? wordIds, + Value? phoneticOverride, + Value? imagePath, + Value? isFavourite, + Value? usageCount, + Value? createdDate, + Value? updatedAt, + Value? rowid, + }) { + return WordGroupsTableCompanion( + id: id ?? this.id, + title: title ?? this.title, + wordIds: wordIds ?? this.wordIds, + phoneticOverride: phoneticOverride ?? this.phoneticOverride, + imagePath: imagePath ?? this.imagePath, + isFavourite: isFavourite ?? this.isFavourite, + usageCount: usageCount ?? this.usageCount, + createdDate: createdDate ?? this.createdDate, + updatedAt: updatedAt ?? this.updatedAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (title.present) { + map['title'] = Variable(title.value); + } + if (wordIds.present) { + map['word_ids'] = Variable( + $WordGroupsTableTable.$converterwordIds.toSql(wordIds.value), + ); + } + if (phoneticOverride.present) { + map['phonetic_override'] = Variable(phoneticOverride.value); + } + if (imagePath.present) { + map['image_path'] = Variable(imagePath.value); + } + if (isFavourite.present) { + map['is_favourite'] = Variable(isFavourite.value); + } + if (usageCount.present) { + map['usage_count'] = Variable(usageCount.value); + } + if (createdDate.present) { + map['created_date'] = Variable(createdDate.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('WordGroupsTableCompanion(') + ..write('id: $id, ') + ..write('title: $title, ') + ..write('wordIds: $wordIds, ') + ..write('phoneticOverride: $phoneticOverride, ') + ..write('imagePath: $imagePath, ') + ..write('isFavourite: $isFavourite, ') + ..write('usageCount: $usageCount, ') + ..write('createdDate: $createdDate, ') + ..write('updatedAt: $updatedAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class $WordUsageTableTable extends WordUsageTable + with TableInfo<$WordUsageTableTable, WordUsageRow> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $WordUsageTableTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _wordIdMeta = const VerificationMeta('wordId'); + @override + late final GeneratedColumn wordId = GeneratedColumn( + 'word_id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _countMeta = const VerificationMeta('count'); + @override + late final GeneratedColumn count = GeneratedColumn( + 'count', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultValue: const Constant(0), + ); + static const VerificationMeta _lastUsedMeta = const VerificationMeta( + 'lastUsed', + ); + @override + late final GeneratedColumn lastUsed = GeneratedColumn( + 'last_used', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + @override + List get $columns => [wordId, count, lastUsed]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'word_usage'; + @override + VerificationContext validateIntegrity( + Insertable instance, { + bool isInserting = false, + }) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('word_id')) { + context.handle( + _wordIdMeta, + wordId.isAcceptableOrUnknown(data['word_id']!, _wordIdMeta), + ); + } else if (isInserting) { + context.missing(_wordIdMeta); + } + if (data.containsKey('count')) { + context.handle( + _countMeta, + count.isAcceptableOrUnknown(data['count']!, _countMeta), + ); + } + if (data.containsKey('last_used')) { + context.handle( + _lastUsedMeta, + lastUsed.isAcceptableOrUnknown(data['last_used']!, _lastUsedMeta), + ); + } + return context; + } + + @override + Set get $primaryKey => {wordId}; + @override + WordUsageRow map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return WordUsageRow( + wordId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}word_id'], + )!, + count: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}count'], + )!, + lastUsed: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}last_used'], + ), + ); + } + + @override + $WordUsageTableTable createAlias(String alias) { + return $WordUsageTableTable(attachedDatabase, alias); + } +} + +class WordUsageRow extends DataClass implements Insertable { + final String wordId; + final int count; + final DateTime? lastUsed; + const WordUsageRow({ + required this.wordId, + required this.count, + this.lastUsed, + }); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['word_id'] = Variable(wordId); + map['count'] = Variable(count); + if (!nullToAbsent || lastUsed != null) { + map['last_used'] = Variable(lastUsed); + } + return map; + } + + WordUsageTableCompanion toCompanion(bool nullToAbsent) { + return WordUsageTableCompanion( + wordId: Value(wordId), + count: Value(count), + lastUsed: lastUsed == null && nullToAbsent + ? const Value.absent() + : Value(lastUsed), + ); + } + + factory WordUsageRow.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return WordUsageRow( + wordId: serializer.fromJson(json['wordId']), + count: serializer.fromJson(json['count']), + lastUsed: serializer.fromJson(json['lastUsed']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'wordId': serializer.toJson(wordId), + 'count': serializer.toJson(count), + 'lastUsed': serializer.toJson(lastUsed), + }; + } + + WordUsageRow copyWith({ + String? wordId, + int? count, + Value lastUsed = const Value.absent(), + }) => WordUsageRow( + wordId: wordId ?? this.wordId, + count: count ?? this.count, + lastUsed: lastUsed.present ? lastUsed.value : this.lastUsed, + ); + WordUsageRow copyWithCompanion(WordUsageTableCompanion data) { + return WordUsageRow( + wordId: data.wordId.present ? data.wordId.value : this.wordId, + count: data.count.present ? data.count.value : this.count, + lastUsed: data.lastUsed.present ? data.lastUsed.value : this.lastUsed, + ); + } + + @override + String toString() { + return (StringBuffer('WordUsageRow(') + ..write('wordId: $wordId, ') + ..write('count: $count, ') + ..write('lastUsed: $lastUsed') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(wordId, count, lastUsed); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is WordUsageRow && + other.wordId == this.wordId && + other.count == this.count && + other.lastUsed == this.lastUsed); +} + +class WordUsageTableCompanion extends UpdateCompanion { + final Value wordId; + final Value count; + final Value lastUsed; + final Value rowid; + const WordUsageTableCompanion({ + this.wordId = const Value.absent(), + this.count = const Value.absent(), + this.lastUsed = const Value.absent(), + this.rowid = const Value.absent(), + }); + WordUsageTableCompanion.insert({ + required String wordId, + this.count = const Value.absent(), + this.lastUsed = const Value.absent(), + this.rowid = const Value.absent(), + }) : wordId = Value(wordId); + static Insertable custom({ + Expression? wordId, + Expression? count, + Expression? lastUsed, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (wordId != null) 'word_id': wordId, + if (count != null) 'count': count, + if (lastUsed != null) 'last_used': lastUsed, + if (rowid != null) 'rowid': rowid, + }); + } + + WordUsageTableCompanion copyWith({ + Value? wordId, + Value? count, + Value? lastUsed, + Value? rowid, + }) { + return WordUsageTableCompanion( + wordId: wordId ?? this.wordId, + count: count ?? this.count, + lastUsed: lastUsed ?? this.lastUsed, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (wordId.present) { + map['word_id'] = Variable(wordId.value); + } + if (count.present) { + map['count'] = Variable(count.value); + } + if (lastUsed.present) { + map['last_used'] = Variable(lastUsed.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('WordUsageTableCompanion(') + ..write('wordId: $wordId, ') + ..write('count: $count, ') + ..write('lastUsed: $lastUsed, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class $SyncMetadataTableTable extends SyncMetadataTable + with TableInfo<$SyncMetadataTableTable, SyncMetadataRow> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $SyncMetadataTableTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _collectionMeta = const VerificationMeta( + 'collection', + ); + @override + late final GeneratedColumn collection = GeneratedColumn( + 'collection', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _lastSyncedAtMeta = const VerificationMeta( + 'lastSyncedAt', + ); + @override + late final GeneratedColumn lastSyncedAt = GeneratedColumn( + 'last_synced_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + @override + List get $columns => [collection, lastSyncedAt]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'sync_metadata'; + @override + VerificationContext validateIntegrity( + Insertable instance, { + bool isInserting = false, + }) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('collection')) { + context.handle( + _collectionMeta, + collection.isAcceptableOrUnknown(data['collection']!, _collectionMeta), + ); + } else if (isInserting) { + context.missing(_collectionMeta); + } + if (data.containsKey('last_synced_at')) { + context.handle( + _lastSyncedAtMeta, + lastSyncedAt.isAcceptableOrUnknown( + data['last_synced_at']!, + _lastSyncedAtMeta, + ), + ); + } + return context; + } + + @override + Set get $primaryKey => {collection}; + @override + SyncMetadataRow map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return SyncMetadataRow( + collection: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}collection'], + )!, + lastSyncedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}last_synced_at'], + ), + ); + } + + @override + $SyncMetadataTableTable createAlias(String alias) { + return $SyncMetadataTableTable(attachedDatabase, alias); + } +} + +class SyncMetadataRow extends DataClass implements Insertable { + final String collection; + final DateTime? lastSyncedAt; + const SyncMetadataRow({required this.collection, this.lastSyncedAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['collection'] = Variable(collection); + if (!nullToAbsent || lastSyncedAt != null) { + map['last_synced_at'] = Variable(lastSyncedAt); + } + return map; + } + + SyncMetadataTableCompanion toCompanion(bool nullToAbsent) { + return SyncMetadataTableCompanion( + collection: Value(collection), + lastSyncedAt: lastSyncedAt == null && nullToAbsent + ? const Value.absent() + : Value(lastSyncedAt), + ); + } + + factory SyncMetadataRow.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return SyncMetadataRow( + collection: serializer.fromJson(json['collection']), + lastSyncedAt: serializer.fromJson(json['lastSyncedAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'collection': serializer.toJson(collection), + 'lastSyncedAt': serializer.toJson(lastSyncedAt), + }; + } + + SyncMetadataRow copyWith({ + String? collection, + Value lastSyncedAt = const Value.absent(), + }) => SyncMetadataRow( + collection: collection ?? this.collection, + lastSyncedAt: lastSyncedAt.present ? lastSyncedAt.value : this.lastSyncedAt, + ); + SyncMetadataRow copyWithCompanion(SyncMetadataTableCompanion data) { + return SyncMetadataRow( + collection: data.collection.present + ? data.collection.value + : this.collection, + lastSyncedAt: data.lastSyncedAt.present + ? data.lastSyncedAt.value + : this.lastSyncedAt, + ); + } + + @override + String toString() { + return (StringBuffer('SyncMetadataRow(') + ..write('collection: $collection, ') + ..write('lastSyncedAt: $lastSyncedAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(collection, lastSyncedAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is SyncMetadataRow && + other.collection == this.collection && + other.lastSyncedAt == this.lastSyncedAt); +} + +class SyncMetadataTableCompanion extends UpdateCompanion { + final Value collection; + final Value lastSyncedAt; + final Value rowid; + const SyncMetadataTableCompanion({ + this.collection = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + SyncMetadataTableCompanion.insert({ + required String collection, + this.lastSyncedAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : collection = Value(collection); + static Insertable custom({ + Expression? collection, + Expression? lastSyncedAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (collection != null) 'collection': collection, + if (lastSyncedAt != null) 'last_synced_at': lastSyncedAt, + if (rowid != null) 'rowid': rowid, + }); + } + + SyncMetadataTableCompanion copyWith({ + Value? collection, + Value? lastSyncedAt, + Value? rowid, + }) { + return SyncMetadataTableCompanion( + collection: collection ?? this.collection, + lastSyncedAt: lastSyncedAt ?? this.lastSyncedAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (collection.present) { + map['collection'] = Variable(collection.value); + } + if (lastSyncedAt.present) { + map['last_synced_at'] = Variable(lastSyncedAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('SyncMetadataTableCompanion(') + ..write('collection: $collection, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +abstract class _$AppDatabase extends GeneratedDatabase { + _$AppDatabase(QueryExecutor e) : super(e); + $AppDatabaseManager get managers => $AppDatabaseManager(this); + late final $WordsTableTable wordsTable = $WordsTableTable(this); + late final $WordOverridesTableTable wordOverridesTable = + $WordOverridesTableTable(this); + late final $WordGroupsTableTable wordGroupsTable = $WordGroupsTableTable( + this, + ); + late final $WordUsageTableTable wordUsageTable = $WordUsageTableTable(this); + late final $SyncMetadataTableTable syncMetadataTable = + $SyncMetadataTableTable(this); + late final WordsDao wordsDao = WordsDao(this as AppDatabase); + late final WordGroupsDao wordGroupsDao = WordGroupsDao(this as AppDatabase); + late final WordUsageDao wordUsageDao = WordUsageDao(this as AppDatabase); + late final SyncDao syncDao = SyncDao(this as AppDatabase); + @override + Iterable> get allTables => + allSchemaEntities.whereType>(); + @override + List get allSchemaEntities => [ + wordsTable, + wordOverridesTable, + wordGroupsTable, + wordUsageTable, + syncMetadataTable, + ]; +} + +typedef $$WordsTableTableCreateCompanionBuilder = + WordsTableCompanion Function({ + required String wordId, + required String languageId, + required String wordText, + Value phoneticOverride, + required WordType type, + required WordSubType subType, + Value imagePath, + Value> extraRelatedWordIds, + Value> aiSuggestedFollowUps, + Value?> localEmbedding, + Value createdDate, + Value rowid, + }); +typedef $$WordsTableTableUpdateCompanionBuilder = + WordsTableCompanion Function({ + Value wordId, + Value languageId, + Value wordText, + Value phoneticOverride, + Value type, + Value subType, + Value imagePath, + Value> extraRelatedWordIds, + Value> aiSuggestedFollowUps, + Value?> localEmbedding, + Value createdDate, + Value rowid, + }); + +class $$WordsTableTableFilterComposer + extends Composer<_$AppDatabase, $WordsTableTable> { + $$WordsTableTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get wordId => $composableBuilder( + column: $table.wordId, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get languageId => $composableBuilder( + column: $table.languageId, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get wordText => $composableBuilder( + column: $table.wordText, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get phoneticOverride => $composableBuilder( + column: $table.phoneticOverride, + builder: (column) => ColumnFilters(column), + ); + + ColumnWithTypeConverterFilters get type => + $composableBuilder( + column: $table.type, + builder: (column) => ColumnWithTypeConverterFilters(column), + ); + + ColumnWithTypeConverterFilters + get subType => $composableBuilder( + column: $table.subType, + builder: (column) => ColumnWithTypeConverterFilters(column), + ); + + ColumnFilters get imagePath => $composableBuilder( + column: $table.imagePath, + builder: (column) => ColumnFilters(column), + ); + + ColumnWithTypeConverterFilters, List, String> + get extraRelatedWordIds => $composableBuilder( + column: $table.extraRelatedWordIds, + builder: (column) => ColumnWithTypeConverterFilters(column), + ); + + ColumnWithTypeConverterFilters, List, String> + get aiSuggestedFollowUps => $composableBuilder( + column: $table.aiSuggestedFollowUps, + builder: (column) => ColumnWithTypeConverterFilters(column), + ); + + ColumnWithTypeConverterFilters?, List, String> + get localEmbedding => $composableBuilder( + column: $table.localEmbedding, + builder: (column) => ColumnWithTypeConverterFilters(column), + ); + + ColumnFilters get createdDate => $composableBuilder( + column: $table.createdDate, + builder: (column) => ColumnFilters(column), + ); +} + +class $$WordsTableTableOrderingComposer + extends Composer<_$AppDatabase, $WordsTableTable> { + $$WordsTableTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get wordId => $composableBuilder( + column: $table.wordId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get languageId => $composableBuilder( + column: $table.languageId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get wordText => $composableBuilder( + column: $table.wordText, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get phoneticOverride => $composableBuilder( + column: $table.phoneticOverride, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get type => $composableBuilder( + column: $table.type, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get subType => $composableBuilder( + column: $table.subType, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get imagePath => $composableBuilder( + column: $table.imagePath, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get extraRelatedWordIds => $composableBuilder( + column: $table.extraRelatedWordIds, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get aiSuggestedFollowUps => $composableBuilder( + column: $table.aiSuggestedFollowUps, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get localEmbedding => $composableBuilder( + column: $table.localEmbedding, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get createdDate => $composableBuilder( + column: $table.createdDate, + builder: (column) => ColumnOrderings(column), + ); +} + +class $$WordsTableTableAnnotationComposer + extends Composer<_$AppDatabase, $WordsTableTable> { + $$WordsTableTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get wordId => + $composableBuilder(column: $table.wordId, builder: (column) => column); + + GeneratedColumn get languageId => $composableBuilder( + column: $table.languageId, + builder: (column) => column, + ); + + GeneratedColumn get wordText => + $composableBuilder(column: $table.wordText, builder: (column) => column); + + GeneratedColumn get phoneticOverride => $composableBuilder( + column: $table.phoneticOverride, + builder: (column) => column, + ); + + GeneratedColumnWithTypeConverter get type => + $composableBuilder(column: $table.type, builder: (column) => column); + + GeneratedColumnWithTypeConverter get subType => + $composableBuilder(column: $table.subType, builder: (column) => column); + + GeneratedColumn get imagePath => + $composableBuilder(column: $table.imagePath, builder: (column) => column); + + GeneratedColumnWithTypeConverter, String> + get extraRelatedWordIds => $composableBuilder( + column: $table.extraRelatedWordIds, + builder: (column) => column, + ); + + GeneratedColumnWithTypeConverter, String> + get aiSuggestedFollowUps => $composableBuilder( + column: $table.aiSuggestedFollowUps, + builder: (column) => column, + ); + + GeneratedColumnWithTypeConverter?, String> get localEmbedding => + $composableBuilder( + column: $table.localEmbedding, + builder: (column) => column, + ); + + GeneratedColumn get createdDate => $composableBuilder( + column: $table.createdDate, + builder: (column) => column, + ); +} + +class $$WordsTableTableTableManager + extends + RootTableManager< + _$AppDatabase, + $WordsTableTable, + WordRow, + $$WordsTableTableFilterComposer, + $$WordsTableTableOrderingComposer, + $$WordsTableTableAnnotationComposer, + $$WordsTableTableCreateCompanionBuilder, + $$WordsTableTableUpdateCompanionBuilder, + (WordRow, BaseReferences<_$AppDatabase, $WordsTableTable, WordRow>), + WordRow, + PrefetchHooks Function() + > { + $$WordsTableTableTableManager(_$AppDatabase db, $WordsTableTable table) + : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$WordsTableTableFilterComposer($db: db, $table: table), + createOrderingComposer: () => + $$WordsTableTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: () => + $$WordsTableTableAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value wordId = const Value.absent(), + Value languageId = const Value.absent(), + Value wordText = const Value.absent(), + Value phoneticOverride = const Value.absent(), + Value type = const Value.absent(), + Value subType = const Value.absent(), + Value imagePath = const Value.absent(), + Value> extraRelatedWordIds = const Value.absent(), + Value> aiSuggestedFollowUps = const Value.absent(), + Value?> localEmbedding = const Value.absent(), + Value createdDate = const Value.absent(), + Value rowid = const Value.absent(), + }) => WordsTableCompanion( + wordId: wordId, + languageId: languageId, + wordText: wordText, + phoneticOverride: phoneticOverride, + type: type, + subType: subType, + imagePath: imagePath, + extraRelatedWordIds: extraRelatedWordIds, + aiSuggestedFollowUps: aiSuggestedFollowUps, + localEmbedding: localEmbedding, + createdDate: createdDate, + rowid: rowid, + ), + createCompanionCallback: + ({ + required String wordId, + required String languageId, + required String wordText, + Value phoneticOverride = const Value.absent(), + required WordType type, + required WordSubType subType, + Value imagePath = const Value.absent(), + Value> extraRelatedWordIds = const Value.absent(), + Value> aiSuggestedFollowUps = const Value.absent(), + Value?> localEmbedding = const Value.absent(), + Value createdDate = const Value.absent(), + Value rowid = const Value.absent(), + }) => WordsTableCompanion.insert( + wordId: wordId, + languageId: languageId, + wordText: wordText, + phoneticOverride: phoneticOverride, + type: type, + subType: subType, + imagePath: imagePath, + extraRelatedWordIds: extraRelatedWordIds, + aiSuggestedFollowUps: aiSuggestedFollowUps, + localEmbedding: localEmbedding, + createdDate: createdDate, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map((e) => (e.readTable(table), BaseReferences(db, table, e))) + .toList(), + prefetchHooksCallback: null, + ), + ); +} + +typedef $$WordsTableTableProcessedTableManager = + ProcessedTableManager< + _$AppDatabase, + $WordsTableTable, + WordRow, + $$WordsTableTableFilterComposer, + $$WordsTableTableOrderingComposer, + $$WordsTableTableAnnotationComposer, + $$WordsTableTableCreateCompanionBuilder, + $$WordsTableTableUpdateCompanionBuilder, + (WordRow, BaseReferences<_$AppDatabase, $WordsTableTable, WordRow>), + WordRow, + PrefetchHooks Function() + >; +typedef $$WordOverridesTableTableCreateCompanionBuilder = + WordOverridesTableCompanion Function({ + required String wordId, + Value isFavourite, + Value wordText, + Value phoneticOverride, + Value type, + Value subType, + Value imagePath, + Value updatedAt, + Value rowid, + }); +typedef $$WordOverridesTableTableUpdateCompanionBuilder = + WordOverridesTableCompanion Function({ + Value wordId, + Value isFavourite, + Value wordText, + Value phoneticOverride, + Value type, + Value subType, + Value imagePath, + Value updatedAt, + Value rowid, + }); + +class $$WordOverridesTableTableFilterComposer + extends Composer<_$AppDatabase, $WordOverridesTableTable> { + $$WordOverridesTableTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get wordId => $composableBuilder( + column: $table.wordId, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get isFavourite => $composableBuilder( + column: $table.isFavourite, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get wordText => $composableBuilder( + column: $table.wordText, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get phoneticOverride => $composableBuilder( + column: $table.phoneticOverride, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get type => $composableBuilder( + column: $table.type, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get subType => $composableBuilder( + column: $table.subType, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get imagePath => $composableBuilder( + column: $table.imagePath, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get updatedAt => $composableBuilder( + column: $table.updatedAt, + builder: (column) => ColumnFilters(column), + ); +} + +class $$WordOverridesTableTableOrderingComposer + extends Composer<_$AppDatabase, $WordOverridesTableTable> { + $$WordOverridesTableTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get wordId => $composableBuilder( + column: $table.wordId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get isFavourite => $composableBuilder( + column: $table.isFavourite, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get wordText => $composableBuilder( + column: $table.wordText, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get phoneticOverride => $composableBuilder( + column: $table.phoneticOverride, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get type => $composableBuilder( + column: $table.type, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get subType => $composableBuilder( + column: $table.subType, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get imagePath => $composableBuilder( + column: $table.imagePath, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get updatedAt => $composableBuilder( + column: $table.updatedAt, + builder: (column) => ColumnOrderings(column), + ); +} + +class $$WordOverridesTableTableAnnotationComposer + extends Composer<_$AppDatabase, $WordOverridesTableTable> { + $$WordOverridesTableTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get wordId => + $composableBuilder(column: $table.wordId, builder: (column) => column); + + GeneratedColumn get isFavourite => $composableBuilder( + column: $table.isFavourite, + builder: (column) => column, + ); + + GeneratedColumn get wordText => + $composableBuilder(column: $table.wordText, builder: (column) => column); + + GeneratedColumn get phoneticOverride => $composableBuilder( + column: $table.phoneticOverride, + builder: (column) => column, + ); + + GeneratedColumn get type => + $composableBuilder(column: $table.type, builder: (column) => column); + + GeneratedColumn get subType => + $composableBuilder(column: $table.subType, builder: (column) => column); + + GeneratedColumn get imagePath => + $composableBuilder(column: $table.imagePath, builder: (column) => column); + + GeneratedColumn get updatedAt => + $composableBuilder(column: $table.updatedAt, builder: (column) => column); +} + +class $$WordOverridesTableTableTableManager + extends + RootTableManager< + _$AppDatabase, + $WordOverridesTableTable, + WordOverrideRow, + $$WordOverridesTableTableFilterComposer, + $$WordOverridesTableTableOrderingComposer, + $$WordOverridesTableTableAnnotationComposer, + $$WordOverridesTableTableCreateCompanionBuilder, + $$WordOverridesTableTableUpdateCompanionBuilder, + ( + WordOverrideRow, + BaseReferences< + _$AppDatabase, + $WordOverridesTableTable, + WordOverrideRow + >, + ), + WordOverrideRow, + PrefetchHooks Function() + > { + $$WordOverridesTableTableTableManager( + _$AppDatabase db, + $WordOverridesTableTable table, + ) : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$WordOverridesTableTableFilterComposer($db: db, $table: table), + createOrderingComposer: () => + $$WordOverridesTableTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: () => + $$WordOverridesTableTableAnnotationComposer( + $db: db, + $table: table, + ), + updateCompanionCallback: + ({ + Value wordId = const Value.absent(), + Value isFavourite = const Value.absent(), + Value wordText = const Value.absent(), + Value phoneticOverride = const Value.absent(), + Value type = const Value.absent(), + Value subType = const Value.absent(), + Value imagePath = const Value.absent(), + Value updatedAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => WordOverridesTableCompanion( + wordId: wordId, + isFavourite: isFavourite, + wordText: wordText, + phoneticOverride: phoneticOverride, + type: type, + subType: subType, + imagePath: imagePath, + updatedAt: updatedAt, + rowid: rowid, + ), + createCompanionCallback: + ({ + required String wordId, + Value isFavourite = const Value.absent(), + Value wordText = const Value.absent(), + Value phoneticOverride = const Value.absent(), + Value type = const Value.absent(), + Value subType = const Value.absent(), + Value imagePath = const Value.absent(), + Value updatedAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => WordOverridesTableCompanion.insert( + wordId: wordId, + isFavourite: isFavourite, + wordText: wordText, + phoneticOverride: phoneticOverride, + type: type, + subType: subType, + imagePath: imagePath, + updatedAt: updatedAt, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map((e) => (e.readTable(table), BaseReferences(db, table, e))) + .toList(), + prefetchHooksCallback: null, + ), + ); +} + +typedef $$WordOverridesTableTableProcessedTableManager = + ProcessedTableManager< + _$AppDatabase, + $WordOverridesTableTable, + WordOverrideRow, + $$WordOverridesTableTableFilterComposer, + $$WordOverridesTableTableOrderingComposer, + $$WordOverridesTableTableAnnotationComposer, + $$WordOverridesTableTableCreateCompanionBuilder, + $$WordOverridesTableTableUpdateCompanionBuilder, + ( + WordOverrideRow, + BaseReferences< + _$AppDatabase, + $WordOverridesTableTable, + WordOverrideRow + >, + ), + WordOverrideRow, + PrefetchHooks Function() + >; +typedef $$WordGroupsTableTableCreateCompanionBuilder = + WordGroupsTableCompanion Function({ + required String id, + required String title, + Value> wordIds, + Value phoneticOverride, + Value imagePath, + Value isFavourite, + Value usageCount, + Value createdDate, + Value updatedAt, + Value rowid, + }); +typedef $$WordGroupsTableTableUpdateCompanionBuilder = + WordGroupsTableCompanion Function({ + Value id, + Value title, + Value> wordIds, + Value phoneticOverride, + Value imagePath, + Value isFavourite, + Value usageCount, + Value createdDate, + Value updatedAt, + Value rowid, + }); + +class $$WordGroupsTableTableFilterComposer + extends Composer<_$AppDatabase, $WordGroupsTableTable> { + $$WordGroupsTableTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get title => $composableBuilder( + column: $table.title, + builder: (column) => ColumnFilters(column), + ); + + ColumnWithTypeConverterFilters, List, String> + get wordIds => $composableBuilder( + column: $table.wordIds, + builder: (column) => ColumnWithTypeConverterFilters(column), + ); + + ColumnFilters get phoneticOverride => $composableBuilder( + column: $table.phoneticOverride, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get imagePath => $composableBuilder( + column: $table.imagePath, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get isFavourite => $composableBuilder( + column: $table.isFavourite, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get usageCount => $composableBuilder( + column: $table.usageCount, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get createdDate => $composableBuilder( + column: $table.createdDate, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get updatedAt => $composableBuilder( + column: $table.updatedAt, + builder: (column) => ColumnFilters(column), + ); +} + +class $$WordGroupsTableTableOrderingComposer + extends Composer<_$AppDatabase, $WordGroupsTableTable> { + $$WordGroupsTableTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get title => $composableBuilder( + column: $table.title, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get wordIds => $composableBuilder( + column: $table.wordIds, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get phoneticOverride => $composableBuilder( + column: $table.phoneticOverride, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get imagePath => $composableBuilder( + column: $table.imagePath, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get isFavourite => $composableBuilder( + column: $table.isFavourite, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get usageCount => $composableBuilder( + column: $table.usageCount, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get createdDate => $composableBuilder( + column: $table.createdDate, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get updatedAt => $composableBuilder( + column: $table.updatedAt, + builder: (column) => ColumnOrderings(column), + ); +} + +class $$WordGroupsTableTableAnnotationComposer + extends Composer<_$AppDatabase, $WordGroupsTableTable> { + $$WordGroupsTableTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get id => + $composableBuilder(column: $table.id, builder: (column) => column); + + GeneratedColumn get title => + $composableBuilder(column: $table.title, builder: (column) => column); + + GeneratedColumnWithTypeConverter, String> get wordIds => + $composableBuilder(column: $table.wordIds, builder: (column) => column); + + GeneratedColumn get phoneticOverride => $composableBuilder( + column: $table.phoneticOverride, + builder: (column) => column, + ); + + GeneratedColumn get imagePath => + $composableBuilder(column: $table.imagePath, builder: (column) => column); + + GeneratedColumn get isFavourite => $composableBuilder( + column: $table.isFavourite, + builder: (column) => column, + ); + + GeneratedColumn get usageCount => $composableBuilder( + column: $table.usageCount, + builder: (column) => column, + ); + + GeneratedColumn get createdDate => $composableBuilder( + column: $table.createdDate, + builder: (column) => column, + ); + + GeneratedColumn get updatedAt => + $composableBuilder(column: $table.updatedAt, builder: (column) => column); +} + +class $$WordGroupsTableTableTableManager + extends + RootTableManager< + _$AppDatabase, + $WordGroupsTableTable, + WordGroupRow, + $$WordGroupsTableTableFilterComposer, + $$WordGroupsTableTableOrderingComposer, + $$WordGroupsTableTableAnnotationComposer, + $$WordGroupsTableTableCreateCompanionBuilder, + $$WordGroupsTableTableUpdateCompanionBuilder, + ( + WordGroupRow, + BaseReferences<_$AppDatabase, $WordGroupsTableTable, WordGroupRow>, + ), + WordGroupRow, + PrefetchHooks Function() + > { + $$WordGroupsTableTableTableManager( + _$AppDatabase db, + $WordGroupsTableTable table, + ) : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$WordGroupsTableTableFilterComposer($db: db, $table: table), + createOrderingComposer: () => + $$WordGroupsTableTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: () => + $$WordGroupsTableTableAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value id = const Value.absent(), + Value title = const Value.absent(), + Value> wordIds = const Value.absent(), + Value phoneticOverride = const Value.absent(), + Value imagePath = const Value.absent(), + Value isFavourite = const Value.absent(), + Value usageCount = const Value.absent(), + Value createdDate = const Value.absent(), + Value updatedAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => WordGroupsTableCompanion( + id: id, + title: title, + wordIds: wordIds, + phoneticOverride: phoneticOverride, + imagePath: imagePath, + isFavourite: isFavourite, + usageCount: usageCount, + createdDate: createdDate, + updatedAt: updatedAt, + rowid: rowid, + ), + createCompanionCallback: + ({ + required String id, + required String title, + Value> wordIds = const Value.absent(), + Value phoneticOverride = const Value.absent(), + Value imagePath = const Value.absent(), + Value isFavourite = const Value.absent(), + Value usageCount = const Value.absent(), + Value createdDate = const Value.absent(), + Value updatedAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => WordGroupsTableCompanion.insert( + id: id, + title: title, + wordIds: wordIds, + phoneticOverride: phoneticOverride, + imagePath: imagePath, + isFavourite: isFavourite, + usageCount: usageCount, + createdDate: createdDate, + updatedAt: updatedAt, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map((e) => (e.readTable(table), BaseReferences(db, table, e))) + .toList(), + prefetchHooksCallback: null, + ), + ); +} + +typedef $$WordGroupsTableTableProcessedTableManager = + ProcessedTableManager< + _$AppDatabase, + $WordGroupsTableTable, + WordGroupRow, + $$WordGroupsTableTableFilterComposer, + $$WordGroupsTableTableOrderingComposer, + $$WordGroupsTableTableAnnotationComposer, + $$WordGroupsTableTableCreateCompanionBuilder, + $$WordGroupsTableTableUpdateCompanionBuilder, + ( + WordGroupRow, + BaseReferences<_$AppDatabase, $WordGroupsTableTable, WordGroupRow>, + ), + WordGroupRow, + PrefetchHooks Function() + >; +typedef $$WordUsageTableTableCreateCompanionBuilder = + WordUsageTableCompanion Function({ + required String wordId, + Value count, + Value lastUsed, + Value rowid, + }); +typedef $$WordUsageTableTableUpdateCompanionBuilder = + WordUsageTableCompanion Function({ + Value wordId, + Value count, + Value lastUsed, + Value rowid, + }); + +class $$WordUsageTableTableFilterComposer + extends Composer<_$AppDatabase, $WordUsageTableTable> { + $$WordUsageTableTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get wordId => $composableBuilder( + column: $table.wordId, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get count => $composableBuilder( + column: $table.count, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get lastUsed => $composableBuilder( + column: $table.lastUsed, + builder: (column) => ColumnFilters(column), + ); +} + +class $$WordUsageTableTableOrderingComposer + extends Composer<_$AppDatabase, $WordUsageTableTable> { + $$WordUsageTableTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get wordId => $composableBuilder( + column: $table.wordId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get count => $composableBuilder( + column: $table.count, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get lastUsed => $composableBuilder( + column: $table.lastUsed, + builder: (column) => ColumnOrderings(column), + ); +} + +class $$WordUsageTableTableAnnotationComposer + extends Composer<_$AppDatabase, $WordUsageTableTable> { + $$WordUsageTableTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get wordId => + $composableBuilder(column: $table.wordId, builder: (column) => column); + + GeneratedColumn get count => + $composableBuilder(column: $table.count, builder: (column) => column); + + GeneratedColumn get lastUsed => + $composableBuilder(column: $table.lastUsed, builder: (column) => column); +} + +class $$WordUsageTableTableTableManager + extends + RootTableManager< + _$AppDatabase, + $WordUsageTableTable, + WordUsageRow, + $$WordUsageTableTableFilterComposer, + $$WordUsageTableTableOrderingComposer, + $$WordUsageTableTableAnnotationComposer, + $$WordUsageTableTableCreateCompanionBuilder, + $$WordUsageTableTableUpdateCompanionBuilder, + ( + WordUsageRow, + BaseReferences<_$AppDatabase, $WordUsageTableTable, WordUsageRow>, + ), + WordUsageRow, + PrefetchHooks Function() + > { + $$WordUsageTableTableTableManager( + _$AppDatabase db, + $WordUsageTableTable table, + ) : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$WordUsageTableTableFilterComposer($db: db, $table: table), + createOrderingComposer: () => + $$WordUsageTableTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: () => + $$WordUsageTableTableAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value wordId = const Value.absent(), + Value count = const Value.absent(), + Value lastUsed = const Value.absent(), + Value rowid = const Value.absent(), + }) => WordUsageTableCompanion( + wordId: wordId, + count: count, + lastUsed: lastUsed, + rowid: rowid, + ), + createCompanionCallback: + ({ + required String wordId, + Value count = const Value.absent(), + Value lastUsed = const Value.absent(), + Value rowid = const Value.absent(), + }) => WordUsageTableCompanion.insert( + wordId: wordId, + count: count, + lastUsed: lastUsed, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map((e) => (e.readTable(table), BaseReferences(db, table, e))) + .toList(), + prefetchHooksCallback: null, + ), + ); +} + +typedef $$WordUsageTableTableProcessedTableManager = + ProcessedTableManager< + _$AppDatabase, + $WordUsageTableTable, + WordUsageRow, + $$WordUsageTableTableFilterComposer, + $$WordUsageTableTableOrderingComposer, + $$WordUsageTableTableAnnotationComposer, + $$WordUsageTableTableCreateCompanionBuilder, + $$WordUsageTableTableUpdateCompanionBuilder, + ( + WordUsageRow, + BaseReferences<_$AppDatabase, $WordUsageTableTable, WordUsageRow>, + ), + WordUsageRow, + PrefetchHooks Function() + >; +typedef $$SyncMetadataTableTableCreateCompanionBuilder = + SyncMetadataTableCompanion Function({ + required String collection, + Value lastSyncedAt, + Value rowid, + }); +typedef $$SyncMetadataTableTableUpdateCompanionBuilder = + SyncMetadataTableCompanion Function({ + Value collection, + Value lastSyncedAt, + Value rowid, + }); + +class $$SyncMetadataTableTableFilterComposer + extends Composer<_$AppDatabase, $SyncMetadataTableTable> { + $$SyncMetadataTableTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get collection => $composableBuilder( + column: $table.collection, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get lastSyncedAt => $composableBuilder( + column: $table.lastSyncedAt, + builder: (column) => ColumnFilters(column), + ); +} + +class $$SyncMetadataTableTableOrderingComposer + extends Composer<_$AppDatabase, $SyncMetadataTableTable> { + $$SyncMetadataTableTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get collection => $composableBuilder( + column: $table.collection, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get lastSyncedAt => $composableBuilder( + column: $table.lastSyncedAt, + builder: (column) => ColumnOrderings(column), + ); +} + +class $$SyncMetadataTableTableAnnotationComposer + extends Composer<_$AppDatabase, $SyncMetadataTableTable> { + $$SyncMetadataTableTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get collection => $composableBuilder( + column: $table.collection, + builder: (column) => column, + ); + + GeneratedColumn get lastSyncedAt => $composableBuilder( + column: $table.lastSyncedAt, + builder: (column) => column, + ); +} + +class $$SyncMetadataTableTableTableManager + extends + RootTableManager< + _$AppDatabase, + $SyncMetadataTableTable, + SyncMetadataRow, + $$SyncMetadataTableTableFilterComposer, + $$SyncMetadataTableTableOrderingComposer, + $$SyncMetadataTableTableAnnotationComposer, + $$SyncMetadataTableTableCreateCompanionBuilder, + $$SyncMetadataTableTableUpdateCompanionBuilder, + ( + SyncMetadataRow, + BaseReferences< + _$AppDatabase, + $SyncMetadataTableTable, + SyncMetadataRow + >, + ), + SyncMetadataRow, + PrefetchHooks Function() + > { + $$SyncMetadataTableTableTableManager( + _$AppDatabase db, + $SyncMetadataTableTable table, + ) : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$SyncMetadataTableTableFilterComposer($db: db, $table: table), + createOrderingComposer: () => + $$SyncMetadataTableTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: () => + $$SyncMetadataTableTableAnnotationComposer( + $db: db, + $table: table, + ), + updateCompanionCallback: + ({ + Value collection = const Value.absent(), + Value lastSyncedAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => SyncMetadataTableCompanion( + collection: collection, + lastSyncedAt: lastSyncedAt, + rowid: rowid, + ), + createCompanionCallback: + ({ + required String collection, + Value lastSyncedAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => SyncMetadataTableCompanion.insert( + collection: collection, + lastSyncedAt: lastSyncedAt, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map((e) => (e.readTable(table), BaseReferences(db, table, e))) + .toList(), + prefetchHooksCallback: null, + ), + ); +} + +typedef $$SyncMetadataTableTableProcessedTableManager = + ProcessedTableManager< + _$AppDatabase, + $SyncMetadataTableTable, + SyncMetadataRow, + $$SyncMetadataTableTableFilterComposer, + $$SyncMetadataTableTableOrderingComposer, + $$SyncMetadataTableTableAnnotationComposer, + $$SyncMetadataTableTableCreateCompanionBuilder, + $$SyncMetadataTableTableUpdateCompanionBuilder, + ( + SyncMetadataRow, + BaseReferences<_$AppDatabase, $SyncMetadataTableTable, SyncMetadataRow>, + ), + SyncMetadataRow, + PrefetchHooks Function() + >; + +class $AppDatabaseManager { + final _$AppDatabase _db; + $AppDatabaseManager(this._db); + $$WordsTableTableTableManager get wordsTable => + $$WordsTableTableTableManager(_db, _db.wordsTable); + $$WordOverridesTableTableTableManager get wordOverridesTable => + $$WordOverridesTableTableTableManager(_db, _db.wordOverridesTable); + $$WordGroupsTableTableTableManager get wordGroupsTable => + $$WordGroupsTableTableTableManager(_db, _db.wordGroupsTable); + $$WordUsageTableTableTableManager get wordUsageTable => + $$WordUsageTableTableTableManager(_db, _db.wordUsageTable); + $$SyncMetadataTableTableTableManager get syncMetadataTable => + $$SyncMetadataTableTableTableManager(_db, _db.syncMetadataTable); +} diff --git a/lib/database/daos/sync_dao.dart b/lib/database/daos/sync_dao.dart new file mode 100644 index 0000000..3c2428d --- /dev/null +++ b/lib/database/daos/sync_dao.dart @@ -0,0 +1,40 @@ +import 'package:drift/drift.dart'; + +import '../app_database.dart'; + +part 'sync_dao.g.dart'; + +/// Well-known collection keys — match Firebase path segments. +class SyncCollection { + SyncCollection._(); + + static String vocabulary(String languageId) => 'vocabulary_$languageId'; + static const wordOverrides = 'word_overrides'; + static const wordGroups = 'word_groups'; + static const wordUsage = 'word_usage'; +} + +@DriftAccessor(tables: [SyncMetadataTable]) +class SyncDao extends DatabaseAccessor with _$SyncDaoMixin { + SyncDao(super.db); + + Future getLastSyncedAt(String collection) async { + final row = await (select(syncMetadataTable) + ..where((s) => s.collection.equals(collection))) + .getSingleOrNull(); + return row?.lastSyncedAt; + } + + Future markSynced(String collection) => + into(syncMetadataTable).insertOnConflictUpdate( + SyncMetadataTableCompanion( + collection: Value(collection), + lastSyncedAt: Value(DateTime.now()), + ), + ); + + Future clearSyncedAt(String collection) => + (delete(syncMetadataTable) + ..where((s) => s.collection.equals(collection))) + .go(); +} diff --git a/lib/database/daos/sync_dao.g.dart b/lib/database/daos/sync_dao.g.dart new file mode 100644 index 0000000..a8778f1 --- /dev/null +++ b/lib/database/daos/sync_dao.g.dart @@ -0,0 +1,20 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'sync_dao.dart'; + +// ignore_for_file: type=lint +mixin _$SyncDaoMixin on DatabaseAccessor { + $SyncMetadataTableTable get syncMetadataTable => + attachedDatabase.syncMetadataTable; + SyncDaoManager get managers => SyncDaoManager(this); +} + +class SyncDaoManager { + final _$SyncDaoMixin _db; + SyncDaoManager(this._db); + $$SyncMetadataTableTableTableManager get syncMetadataTable => + $$SyncMetadataTableTableTableManager( + _db.attachedDatabase, + _db.syncMetadataTable, + ); +} diff --git a/lib/database/daos/word_groups_dao.dart b/lib/database/daos/word_groups_dao.dart new file mode 100644 index 0000000..ef77b34 --- /dev/null +++ b/lib/database/daos/word_groups_dao.dart @@ -0,0 +1,67 @@ +import 'package:drift/drift.dart'; + +import '../../api/models/word_group.dart'; +import '../app_database.dart'; + +part 'word_groups_dao.g.dart'; + +@DriftAccessor(tables: [WordGroupsTable]) +class WordGroupsDao extends DatabaseAccessor + with _$WordGroupsDaoMixin { + WordGroupsDao(super.db); + + // ── Reads ───────────────────────────────────────────────────────────────── + + Stream> watchAll() => + (select(wordGroupsTable) + ..orderBy([(g) => OrderingTerm.desc(g.createdDate)])) + .watch() + .map((rows) => rows.map(_toModel).toList()); + + // ── Writes ──────────────────────────────────────────────────────────────── + + Future upsert(WordGroup group) => + into(wordGroupsTable).insertOnConflictUpdate(_toCompanion(group)); + + Future deleteGroup(String id) => + (delete(wordGroupsTable)..where((g) => g.id.equals(id))).go(); + + Future incrementUsage(String id) => customStatement( + 'UPDATE word_groups ' + 'SET usage_count = usage_count + 1, updated_at = ? ' + 'WHERE id = ?', + [DateTime.now().millisecondsSinceEpoch, id], + ); + + Future upsertAll(List groups) => batch( + (b) => b.insertAllOnConflictUpdate( + wordGroupsTable, + groups.map(_toCompanion).toList(), + ), + ); + + // ── Mapping ─────────────────────────────────────────────────────────────── + + WordGroup _toModel(WordGroupRow row) => WordGroup( + id: row.id, + title: row.title, + wordIds: row.wordIds, + phoneticOverride: row.phoneticOverride, + imagePath: row.imagePath, + isFavourite: row.isFavourite, + usageCount: row.usageCount, + createdDate: row.createdDate, + ); + + WordGroupsTableCompanion _toCompanion(WordGroup g) => WordGroupsTableCompanion( + id: Value(g.id), + title: Value(g.title), + wordIds: Value(g.wordIds), + phoneticOverride: Value(g.phoneticOverride), + imagePath: Value(g.imagePath), + isFavourite: Value(g.isFavourite), + usageCount: Value(g.usageCount), + createdDate: Value(g.createdDate), + updatedAt: Value(DateTime.now()), + ); +} diff --git a/lib/database/daos/word_groups_dao.g.dart b/lib/database/daos/word_groups_dao.g.dart new file mode 100644 index 0000000..3fe2668 --- /dev/null +++ b/lib/database/daos/word_groups_dao.g.dart @@ -0,0 +1,19 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'word_groups_dao.dart'; + +// ignore_for_file: type=lint +mixin _$WordGroupsDaoMixin on DatabaseAccessor { + $WordGroupsTableTable get wordGroupsTable => attachedDatabase.wordGroupsTable; + WordGroupsDaoManager get managers => WordGroupsDaoManager(this); +} + +class WordGroupsDaoManager { + final _$WordGroupsDaoMixin _db; + WordGroupsDaoManager(this._db); + $$WordGroupsTableTableTableManager get wordGroupsTable => + $$WordGroupsTableTableTableManager( + _db.attachedDatabase, + _db.wordGroupsTable, + ); +} diff --git a/lib/database/daos/word_usage_dao.dart b/lib/database/daos/word_usage_dao.dart new file mode 100644 index 0000000..fc7ad30 --- /dev/null +++ b/lib/database/daos/word_usage_dao.dart @@ -0,0 +1,56 @@ +import 'package:drift/drift.dart'; + +import '../../api/models/word_usage.dart'; +import '../app_database.dart'; + +part 'word_usage_dao.g.dart'; + +@DriftAccessor(tables: [WordUsageTable]) +class WordUsageDao extends DatabaseAccessor + with _$WordUsageDaoMixin { + WordUsageDao(super.db); + + // ── Reads ───────────────────────────────────────────────────────────────── + + Stream> watchTopWords({int limit = 20}) => + (select(wordUsageTable) + ..orderBy([(u) => OrderingTerm.desc(u.count)]) + ..limit(limit)) + .watch() + .map((rows) => rows.map(_toModel).toList()); + + Stream> watchAll() => select(wordUsageTable) + .watch() + .map((rows) => rows.map(_toModel).toList()); + + // ── Writes ──────────────────────────────────────────────────────────────── + + /// Atomic increment — safe to call without reading first. + Future increment(String wordId) => customStatement( + 'INSERT INTO word_usage (word_id, count, last_used) VALUES (?, 1, ?) ' + 'ON CONFLICT(word_id) DO UPDATE SET ' + 'count = count + 1, last_used = excluded.last_used', + [wordId, DateTime.now().millisecondsSinceEpoch], + ); + + Future upsertAll(List records) => batch( + (b) => b.insertAllOnConflictUpdate( + wordUsageTable, + records.map(_toCompanion).toList(), + ), + ); + + // ── Mapping ─────────────────────────────────────────────────────────────── + + WordUsage _toModel(WordUsageRow row) => WordUsage( + wordId: row.wordId, + count: row.count, + lastUsed: row.lastUsed, + ); + + WordUsageTableCompanion _toCompanion(WordUsage u) => WordUsageTableCompanion( + wordId: Value(u.wordId), + count: Value(u.count), + lastUsed: Value(u.lastUsed), + ); +} diff --git a/lib/database/daos/word_usage_dao.g.dart b/lib/database/daos/word_usage_dao.g.dart new file mode 100644 index 0000000..57d2cf9 --- /dev/null +++ b/lib/database/daos/word_usage_dao.g.dart @@ -0,0 +1,19 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'word_usage_dao.dart'; + +// ignore_for_file: type=lint +mixin _$WordUsageDaoMixin on DatabaseAccessor { + $WordUsageTableTable get wordUsageTable => attachedDatabase.wordUsageTable; + WordUsageDaoManager get managers => WordUsageDaoManager(this); +} + +class WordUsageDaoManager { + final _$WordUsageDaoMixin _db; + WordUsageDaoManager(this._db); + $$WordUsageTableTableTableManager get wordUsageTable => + $$WordUsageTableTableTableManager( + _db.attachedDatabase, + _db.wordUsageTable, + ); +} diff --git a/lib/database/daos/words_dao.dart b/lib/database/daos/words_dao.dart new file mode 100644 index 0000000..5f2c1df --- /dev/null +++ b/lib/database/daos/words_dao.dart @@ -0,0 +1,207 @@ +import 'dart:convert'; + +import 'package:drift/drift.dart'; + +import '../../api/models/word.dart'; +import '../../api/models/word_sub_type.dart'; +import '../../api/models/word_type.dart'; +import '../app_database.dart'; + +part 'words_dao.g.dart'; + +@DriftAccessor(tables: [WordsTable, WordOverridesTable]) +class WordsDao extends DatabaseAccessor with _$WordsDaoMixin { + WordsDao(super.db); + + // ── Writes ──────────────────────────────────────────────────────────────── + + Future upsertCoreWords(List rows) => + batch((b) => b.insertAllOnConflictUpdate(wordsTable, rows)); + + Future upsertOverride(WordOverridesTableCompanion row) => + into(wordOverridesTable).insertOnConflictUpdate(row); + + Future deleteOverride(String wordId) => + (delete(wordOverridesTable) + ..where((o) => o.wordId.equals(wordId))) + .go(); + + Future deleteWord(String wordId) => + (delete(wordsTable)..where((w) => w.wordId.equals(wordId))).go(); + + Future clearCoreWords(String languageId) => + (delete(wordsTable) + ..where((w) => w.languageId.equals(languageId))) + .go(); + + // ── Reads (merged core + override) ──────────────────────────────────────── + + Stream> watchWordsForSubType( + String languageId, + WordSubType subType, + ) => + _mergedQuery(languageId, subType: subType).watch().map(_toWords); + + Stream> watchWordsForType( + String languageId, + WordType type, + ) => + _mergedQuery(languageId, type: type).watch().map(_toWords); + + Stream> watchFavourites(String languageId) => + _mergedQuery(languageId, favouritesOnly: true).watch().map(_toWords); + + Stream> watchAll(String languageId) => + _mergedQuery(languageId).watch().map(_toWords); + + Future> searchWords(String languageId, String query) => + _mergedQuery(languageId, search: query).get().then(_toWords); + + Future> getByIds(String languageId, List ids) => + _mergedQuery(languageId, ids: ids).get().then(_toWords); + + // ── Merge query ─────────────────────────────────────────────────────────── + // + // The SQL LEFT JOIN merges core words with the user's sparse overrides. + // COALESCE picks the override value when present, otherwise falls back to + // the core value. isFavourite defaults to 0 (false) since core words + // never carry that flag. + + static const _select = ''' + SELECT + w.word_id, + w.language_id, + COALESCE(o.word_text, w.word_text) AS word_text, + COALESCE(o.phonetic_override, w.phonetic_override) AS phonetic_override, + COALESCE(o.type, w.type) AS type, + COALESCE(o.sub_type, w.sub_type) AS sub_type, + COALESCE(o.image_path, w.image_path) AS image_path, + COALESCE(o.is_favourite, 0) AS is_favourite, + w.extra_related_word_ids, + w.ai_suggested_follow_ups, + w.local_embedding, + w.created_date + FROM words w + LEFT JOIN word_overrides o ON w.word_id = o.word_id + '''; + + Selectable _mergedQuery( + String languageId, { + WordSubType? subType, + WordType? type, + bool favouritesOnly = false, + String? search, + List? ids, + }) { + final clauses = ['w.language_id = ?']; + final vars = [Variable.withString(languageId)]; + + if (subType != null) { + clauses.add('w.sub_type = ?'); + vars.add(Variable.withString(subType.name)); + } + if (type != null) { + clauses.add('w.type = ?'); + vars.add(Variable.withString(type.name)); + } + if (favouritesOnly) { + clauses.add('COALESCE(o.is_favourite, 0) = 1'); + } + if (search != null && search.isNotEmpty) { + clauses.add('LOWER(w.word_text) LIKE ?'); + vars.add(Variable.withString('%${search.toLowerCase()}%')); + } + if (ids != null && ids.isNotEmpty) { + final placeholders = List.filled(ids.length, '?').join(', '); + clauses.add('w.word_id IN ($placeholders)'); + vars.addAll(ids.map(Variable.withString)); + } + + final where = clauses.join(' AND '); + return customSelect( + '$_select WHERE $where', + variables: vars, + readsFrom: {wordsTable, wordOverridesTable}, + ); + } + + // ── Mapping ─────────────────────────────────────────────────────────────── + + List _toWords(List rows) => rows.map(_rowToWord).toList(); + + Word _rowToWord(QueryRow r) { + final extraRaw = r.readNullable('extra_related_word_ids'); + final aiRaw = r.readNullable('ai_suggested_follow_ups'); + final embeddingRaw = r.readNullable('local_embedding'); + final createdMs = r.readNullable('created_date'); + + return Word( + wordId: r.read('word_id'), + text: r.read('word_text'), + phoneticOverride: r.readNullable('phonetic_override'), + type: WordType.values.byName(r.read('type')), + subType: WordSubType.values.byName(r.read('sub_type')), + imagePath: r.readNullable('image_path'), + isFavourite: r.read('is_favourite') == 1, + extraRelatedWordIds: extraRaw != null + ? (jsonDecode(extraRaw) as List).cast() + : [], + aiSuggestedFollowUps: aiRaw != null + ? (jsonDecode(aiRaw) as List).cast() + : [], + localEmbedding: embeddingRaw != null + ? (jsonDecode(embeddingRaw) as List) + .map((e) => (e as num).toDouble()) + .toList() + : null, + createdDate: createdMs != null + ? DateTime.fromMillisecondsSinceEpoch(createdMs) + : null, + ); + } + + // ── Companion helpers ───────────────────────────────────────────────────── + + static WordsTableCompanion coreWordToCompanion( + Word word, + String languageId, + ) => + WordsTableCompanion( + wordId: Value(word.wordId), + languageId: Value(languageId), + wordText: Value(word.text), + phoneticOverride: Value(word.phoneticOverride), + type: Value(word.type), + subType: Value(word.subType), + imagePath: Value(word.imagePath), + extraRelatedWordIds: Value(word.extraRelatedWordIds), + aiSuggestedFollowUps: Value(word.aiSuggestedFollowUps), + localEmbedding: Value(word.localEmbedding), + createdDate: Value(word.createdDate), + ); + + /// Builds an override companion from only the fields that differ from the + /// core word. Callers pass non-null values only for fields they want to + /// persist; everything else stays absent (null = not overridden). + static WordOverridesTableCompanion overrideCompanion({ + required String wordId, + bool? isFavourite, + String? text, + String? phoneticOverride, + WordType? type, + WordSubType? subType, + String? imagePath, + }) => + WordOverridesTableCompanion( + wordId: Value(wordId), + isFavourite: isFavourite != null ? Value(isFavourite) : const Value.absent(), + wordText: text != null ? Value(text) : const Value.absent(), + phoneticOverride: + phoneticOverride != null ? Value(phoneticOverride) : const Value.absent(), + // type/subType stored as raw enum name strings in the DB. + type: type != null ? Value(type.name) : const Value.absent(), + subType: subType != null ? Value(subType.name) : const Value.absent(), + imagePath: imagePath != null ? Value(imagePath) : const Value.absent(), + updatedAt: Value(DateTime.now()), + ); +} diff --git a/lib/database/daos/words_dao.g.dart b/lib/database/daos/words_dao.g.dart new file mode 100644 index 0000000..3672299 --- /dev/null +++ b/lib/database/daos/words_dao.g.dart @@ -0,0 +1,23 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'words_dao.dart'; + +// ignore_for_file: type=lint +mixin _$WordsDaoMixin on DatabaseAccessor { + $WordsTableTable get wordsTable => attachedDatabase.wordsTable; + $WordOverridesTableTable get wordOverridesTable => + attachedDatabase.wordOverridesTable; + WordsDaoManager get managers => WordsDaoManager(this); +} + +class WordsDaoManager { + final _$WordsDaoMixin _db; + WordsDaoManager(this._db); + $$WordsTableTableTableManager get wordsTable => + $$WordsTableTableTableManager(_db.attachedDatabase, _db.wordsTable); + $$WordOverridesTableTableTableManager get wordOverridesTable => + $$WordOverridesTableTableTableManager( + _db.attachedDatabase, + _db.wordOverridesTable, + ); +} diff --git a/lib/database/tables.dart b/lib/database/tables.dart new file mode 100644 index 0000000..3aec2f2 --- /dev/null +++ b/lib/database/tables.dart @@ -0,0 +1,155 @@ +import 'dart:convert'; + +import 'package:drift/drift.dart'; + +import '../api/models/word_sub_type.dart'; +import '../api/models/word_type.dart'; + +// ── Type converters ─────────────────────────────────────────────────────────── + +class WordTypeConverter extends TypeConverter { + const WordTypeConverter(); + @override + WordType fromSql(String s) => WordType.values.byName(s); + @override + String toSql(WordType v) => v.name; +} + +class WordSubTypeConverter extends TypeConverter { + const WordSubTypeConverter(); + @override + WordSubType fromSql(String s) => WordSubType.values.byName(s); + @override + String toSql(WordSubType v) => v.name; +} + +class StringListConverter extends TypeConverter, String> { + const StringListConverter(); + @override + List fromSql(String s) => (jsonDecode(s) as List).cast(); + @override + String toSql(List v) => jsonEncode(v); +} + +// Nullable variant for optional List columns. +class NullableDoubleListConverter extends TypeConverter?, String?> { + const NullableDoubleListConverter(); + @override + List? fromSql(String? s) => s == null + ? null + : (jsonDecode(s) as List).map((e) => (e as num).toDouble()).toList(); + @override + String? toSql(List? v) => v == null ? null : jsonEncode(v); +} + +// ── Tables ──────────────────────────────────────────────────────────────────── + +/// Core vocabulary — admin-owned, never modified per-user. +/// Seeded from Firebase /vocabulary/{langId}/words on first launch / refresh. +@DataClassName('WordRow') +class WordsTable extends Table { + @override + String get tableName => 'words'; + + TextColumn get wordId => text()(); + TextColumn get languageId => text()(); + // Named 'wordText' to avoid conflicting with Drift's text() builder method. + // SQL column name: word_text + TextColumn get wordText => text()(); + TextColumn get phoneticOverride => text().nullable()(); + // Non-nullable enum columns: withDefault/nullable not needed, map() last. + TextColumn get type => text().map(const WordTypeConverter())(); + TextColumn get subType => text().map(const WordSubTypeConverter())(); + TextColumn get imagePath => text().nullable()(); + // withDefault must come before map() in the builder chain. + TextColumn get extraRelatedWordIds => + text().withDefault(const Constant('[]')).map(const StringListConverter())(); + TextColumn get aiSuggestedFollowUps => + text().withDefault(const Constant('[]')).map(const StringListConverter())(); + // Nullable mapped column: use a nullable-aware TypeConverter. + TextColumn get localEmbedding => + text().nullable().map(const NullableDoubleListConverter())(); + DateTimeColumn get createdDate => dateTime().nullable()(); + + @override + Set get primaryKey => {wordId}; +} + +/// Sparse per-user overrides — only the fields the user has actually changed. +/// A null field means "not overridden; use the core word value". +/// Enum fields (type, subType) are stored as plain nullable text to avoid +/// Drift generator issues with nullable TypeConverters; conversion is done +/// in the DAO. +/// Synced from Firebase /users/{uid}/wordOverrides. +@DataClassName('WordOverrideRow') +class WordOverridesTable extends Table { + @override + String get tableName => 'word_overrides'; + + TextColumn get wordId => text()(); + BoolColumn get isFavourite => boolean().nullable()(); + // Named 'wordText' to avoid conflicting with Drift's text() builder method. + // SQL column name: word_text + TextColumn get wordText => text().nullable()(); + TextColumn get phoneticOverride => text().nullable()(); + // Stored as raw enum name strings; converted to WordType/WordSubType in DAO. + TextColumn get type => text().nullable()(); + TextColumn get subType => text().nullable()(); + TextColumn get imagePath => text().nullable()(); + DateTimeColumn get updatedAt => dateTime().nullable()(); + + @override + Set get primaryKey => {wordId}; +} + +/// User-created phrase cards. +/// Synced from Firebase /users/{uid}/wordGroups. +@DataClassName('WordGroupRow') +class WordGroupsTable extends Table { + @override + String get tableName => 'word_groups'; + + TextColumn get id => text()(); + TextColumn get title => text()(); + TextColumn get wordIds => + text().withDefault(const Constant('[]')).map(const StringListConverter())(); + TextColumn get phoneticOverride => text().nullable()(); + TextColumn get imagePath => text().nullable()(); + BoolColumn get isFavourite => + boolean().withDefault(const Constant(false))(); + IntColumn get usageCount => + integer().withDefault(const Constant(0))(); + DateTimeColumn get createdDate => dateTime().nullable()(); + DateTimeColumn get updatedAt => dateTime().nullable()(); + + @override + Set get primaryKey => {id}; +} + +/// Per-word usage counts, incremented on every tap. +@DataClassName('WordUsageRow') +class WordUsageTable extends Table { + @override + String get tableName => 'word_usage'; + + TextColumn get wordId => text()(); + IntColumn get count => integer().withDefault(const Constant(0))(); + DateTimeColumn get lastUsed => dateTime().nullable()(); + + @override + Set get primaryKey => {wordId}; +} + +/// Tracks the last sync timestamp per Firebase collection. +/// collection key examples: 'vocabulary_en', 'word_overrides', 'word_groups' +@DataClassName('SyncMetadataRow') +class SyncMetadataTable extends Table { + @override + String get tableName => 'sync_metadata'; + + TextColumn get collection => text()(); + DateTimeColumn get lastSyncedAt => dateTime().nullable()(); + + @override + Set get primaryKey => {collection}; +} diff --git a/lib/dependency_injection_container.dart b/lib/dependency_injection_container.dart index 1db7916..b9a49b2 100644 --- a/lib/dependency_injection_container.dart +++ b/lib/dependency_injection_container.dart @@ -1,56 +1,145 @@ +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:get_it/get_it.dart'; import 'package:image_picker/image_picker.dart'; -import 'package:package_info/package_info.dart'; +import 'package:package_info_plus/package_info_plus.dart'; import 'package:shared_preferences/shared_preferences.dart'; -import 'package:simple_aac/view_models/language_view_model.dart'; -import 'api/hive_client.dart'; -import 'api/models/language.dart'; +import 'api/repositories/user_repository.dart'; +import 'database/app_database.dart'; +import 'services/ai_prediction_service.dart'; +import 'services/auth_service.dart'; +import 'services/image_path_service.dart'; import 'services/language_service.dart'; import 'services/navigation_service.dart'; import 'services/shared_preferences_service.dart'; import 'services/theme_service.dart'; +import 'services/tts_service.dart'; +import 'services/word_group_service.dart'; import 'services/word_service.dart'; +import 'services/sync_mediator.dart'; +import 'services/word_usage_service.dart'; import 'ui/theme/theme_controller.dart'; import 'view_models/create_word/manage_word_view_model.dart'; import 'view_models/file_picker/file_picker_view_model.dart'; import 'view_models/intro/intro_view_model.dart'; +import 'view_models/language_view_model.dart'; import 'view_models/selected_words_view_model.dart'; import 'view_models/theme_view_model.dart'; import 'view_models/utils/tab_bar_view_model.dart'; +import 'view_models/word_group_view_model.dart'; import 'view_models/words_view_model.dart'; final getIt = GetIt.instance; Future init() async { + // Firebase + final firestore = FirebaseFirestore.instance; + final auth = FirebaseAuth.instance; + + // Configure Firestore offline persistence + firestore.settings = const Settings( + persistenceEnabled: true, + cacheSizeBytes: Settings.CACHE_SIZE_UNLIMITED, + ); + + getIt.registerSingleton(firestore); + getIt.registerSingleton(auth); + + // Platform services getIt.registerLazySingletonAsync(SharedPreferences.getInstance); getIt.registerLazySingletonAsync(PackageInfo.fromPlatform); - getIt.registerSingletonAsync(() => HiveClient.create(kThemeBox), instanceName: kThemeBox); - getIt.registerSingletonAsync(() => HiveClient.create(kLanguageBox), instanceName: kLanguageBox); - await getIt.isReady(instanceName: kThemeBox); - await getIt.isReady(instanceName: kLanguageBox); await getIt.isReady(); await getIt.isReady(); - await getIt.isReady(); - getIt.registerLazySingleton(() => LanguageService(getIt(instanceName: kLanguageBox), getIt())); - getIt.registerLazySingleton(() => WordService(getIt())); - getIt.registerLazySingleton(() => SharedPreferencesService(getIt())); + + // Local database + final db = AppDatabase(); + getIt.registerSingleton(db); + getIt.registerSingleton(db.wordsDao); + getIt.registerSingleton(db.wordGroupsDao); + getIt.registerSingleton(db.wordUsageDao); + getIt.registerSingleton(db.syncDao); + + // Repositories (legacy — only UserRepository remains; others replaced by Drift DAOs) + getIt.registerLazySingleton( + () => UserRepository(getIt()), + ); + + // Services + getIt.registerLazySingleton(() => AuthService(getIt())); + getIt.registerLazySingleton( + () => SharedPreferencesService(getIt()), + ); + getIt.registerLazySingleton( + () => LanguageService(getIt()), + ); + getIt.registerLazySingleton( + () => WordService( + getIt(), + getIt(), + getIt(), + ), + ); + getIt.registerLazySingleton( + () => WordUsageService( + getIt(), + getIt(), + ), + ); + getIt.registerLazySingleton( + () => WordGroupService( + getIt(), + getIt(), + getIt(), + ), + ); + getIt.registerLazySingleton( + () => SyncMediator( + firestore: getIt(), + auth: getIt(), + prefs: getIt(), + wordsDao: getIt(), + wordGroupsDao: getIt(), + wordUsageDao: getIt(), + syncDao: getIt(), + ), + ); getIt.registerLazySingleton(() => const FlutterSecureStorage()); getIt.registerLazySingleton(NavigationService.new); + getIt.registerLazySingleton(() => ImagePathService(getIt())); + getIt.registerLazySingleton(() => TtsService(getIt(), getIt())); + getIt.registerLazySingleton(() => AiPredictionService(getIt())); getIt.registerLazySingleton(ImagePicker.new); - getIt.registerLazySingleton(() => SelectedWordsViewModel(getIt())); - getIt.registerFactory(() => ThemeService(getIt(instanceName: kThemeBox))); - getIt.registerFactory(() => ThemeController(getIt())); - getIt.registerFactory(() => WordsViewModel(getIt())); - getIt.registerFactory(() => LanguageViewModel(getIt())); + + // ViewModels (singletons for shared state, factories for per-screen) + getIt.registerLazySingleton( + () => SelectedWordsViewModel( + getIt(), + getIt(), + getIt(), + getIt(), + getIt(), + ), + ); + getIt.registerFactory( + () => ThemeService(getIt()), + ); + getIt.registerFactory(() => ThemeController(getIt())); + getIt.registerFactory(() => WordsViewModel(getIt(), getIt())); + getIt.registerFactory(() => LanguageViewModel(getIt())); getIt.registerFactory(IntroViewModel.new); getIt.registerFactory(TabBarViewModel.new); - getIt.registerFactory(() => ManageWordViewModel(getIt())); - getIt.registerFactory(() => ThemeViewModel(getIt(), getIt())); + getIt.registerFactory( + () => ManageWordViewModel(getIt()), + ); + getIt.registerFactory( + () => ThemeViewModel(getIt(), getIt()), + ); getIt.registerFactory(() => FilePickerViewModel(getIt())); + getIt.registerFactory( + () => WordGroupViewModel(getIt()), + ); } -Future allReady() { - return getIt.allReady(); -} +Future allReady() => getIt.allReady(); diff --git a/lib/extensions/build_context_extension.dart b/lib/extensions/build_context_extension.dart index 306e64e..7630188 100644 --- a/lib/extensions/build_context_extension.dart +++ b/lib/extensions/build_context_extension.dart @@ -1,10 +1,11 @@ import 'dart:ui' as ui; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import '../l10n/app_localizations.dart'; import '../ui/theme/theme_builder_widget.dart'; import '../view_models/theme_view_model.dart'; +import 'media_query_extension.dart'; extension BuildContextExt on BuildContext { double get screenWidth => MediaQuery.of(this).size.width; @@ -26,6 +27,8 @@ extension BuildContextExt on BuildContext { bool get isDark => Theme.of(this).colorScheme.brightness == Brightness.dark; + bool get isWideScreen => MediaQuery.of(this).isWideScreen; + ThemeViewModel get themeViewModel => ThemeBuilderWidget.of(this).themeViewModel; void nextEditableTextFocus() { diff --git a/lib/extensions/media_query_extension.dart b/lib/extensions/media_query_extension.dart new file mode 100644 index 0000000..c613c53 --- /dev/null +++ b/lib/extensions/media_query_extension.dart @@ -0,0 +1,19 @@ +import 'dart:math' as math; + +import 'package:flutter/material.dart'; + +import '../utils/constants.dart'; + +extension MediaQueryDataExtension on MediaQueryData { + bool get isPortrait => size.width < size.height; + bool get isLandscape => size.width > size.height; + + double get shortestSide => math.min(size.width, size.height); + + double get maxContentWidth => math.min(size.width, kMaxScreenWidth); + bool get isNarrowScreen => size.width < kMinScreenWidth; + bool get isWideScreen => size.width > kMaxScreenWidth; + + double get maxContentWidthInset => math.max((size.width - maxContentWidth) / 2, 1); + double get minContentWidthInset => math.max((size.width - maxContentWidth) / 4, 1); +} diff --git a/lib/extensions/string_extension.dart b/lib/extensions/string_extension.dart index f212bb7..9d73cfa 100644 --- a/lib/extensions/string_extension.dart +++ b/lib/extensions/string_extension.dart @@ -17,6 +17,11 @@ extension StringExtension on String? { } } + String toTitleCase() { + if (this == null || this!.isEmpty) return ''; + return this!.split(' ').map((w) => w.isEmpty ? '' : '${w[0].toUpperCase()}${w.substring(1).toLowerCase()}').join(' '); + } + String removeLastCharacter() { if (this != null && this!.isNotEmpty) { return this!.substring(0, this!.length - 1); diff --git a/lib/firebase_options.dart b/lib/firebase_options.dart new file mode 100644 index 0000000..f313c87 --- /dev/null +++ b/lib/firebase_options.dart @@ -0,0 +1,119 @@ +// File generated by FlutterFire CLI and extended for multi-flavor support. +// ignore_for_file: type=lint +import 'package:firebase_core/firebase_core.dart' show FirebaseOptions; +import 'package:flutter/foundation.dart' + show defaultTargetPlatform, kIsWeb, TargetPlatform; +import 'package:simple_aac/flavors.dart'; + +class DefaultFirebaseOptions { + static FirebaseOptions get currentPlatform { + if (kIsWeb) return web; + switch (defaultTargetPlatform) { + case TargetPlatform.iOS: + switch (F.appFlavor) { + case Flavor.dev: + return iosDev; + case Flavor.uat: + return iosUat; + case Flavor.prod: + case Flavor.web: + case null: + return iosProd; + } + case TargetPlatform.android: + switch (F.appFlavor) { + case Flavor.dev: + return androidDev; + case Flavor.uat: + return androidUat; + case Flavor.prod: + case Flavor.web: + case null: + return androidProd; + } + default: + throw UnsupportedError( + 'DefaultFirebaseOptions are not supported for this platform.', + ); + } + } + + // ─── Web ──────────────────────────────────────────────────────────────────── + + static const FirebaseOptions web = FirebaseOptions( + apiKey: 'AIzaSyDM74_g5TwPiJ5ZoTeqxwPSbPnbf7dfyWk', + appId: '1:997985384352:web:c8d66d53bf3710fee956c5', + messagingSenderId: '997985384352', + projectId: 'simpleaac-460e6', + authDomain: 'simpleaac-460e6.firebaseapp.com', + databaseURL: 'https://simpleaac-460e6.firebaseio.com', + storageBucket: 'simpleaac-460e6.appspot.com', + ); + + // ─── iOS ──────────────────────────────────────────────────────────────────── + + static const FirebaseOptions iosDev = FirebaseOptions( + apiKey: 'AIzaSyCxVlQSXwse9EE9i8jURkH0d-a_PRo5gzo', + appId: '1:997985384352:ios:e85c68514d01bb20e956c5', + messagingSenderId: '997985384352', + projectId: 'simpleaac-460e6', + authDomain: 'simpleaac-460e6.firebaseapp.com', + databaseURL: 'https://simpleaac-460e6.firebaseio.com', + storageBucket: 'simpleaac-460e6.appspot.com', + iosBundleId: 'com.sealstudios.simpleaac.dev', + ); + + static const FirebaseOptions iosUat = FirebaseOptions( + apiKey: 'AIzaSyCxVlQSXwse9EE9i8jURkH0d-a_PRo5gzo', + appId: '1:997985384352:ios:5f5bde12086d293be956c5', + messagingSenderId: '997985384352', + projectId: 'simpleaac-460e6', + authDomain: 'simpleaac-460e6.firebaseapp.com', + databaseURL: 'https://simpleaac-460e6.firebaseio.com', + storageBucket: 'simpleaac-460e6.appspot.com', + iosBundleId: 'com.sealstudios.simpleaac.uat', + ); + + static const FirebaseOptions iosProd = FirebaseOptions( + apiKey: 'AIzaSyCxVlQSXwse9EE9i8jURkH0d-a_PRo5gzo', + appId: '1:997985384352:ios:94cb723559aadb76e956c5', + messagingSenderId: '997985384352', + projectId: 'simpleaac-460e6', + authDomain: 'simpleaac-460e6.firebaseapp.com', + databaseURL: 'https://simpleaac-460e6.firebaseio.com', + storageBucket: 'simpleaac-460e6.appspot.com', + iosBundleId: 'com.sealstudios.simpleaac.prod', + ); + + // ─── Android ──────────────────────────────────────────────────────────────── + + static const FirebaseOptions androidDev = FirebaseOptions( + apiKey: 'AIzaSyDmCr6eOqqXt41McT1I3g447yybMNCRSOM', + appId: '1:997985384352:android:7e3c2549044f4cb7e956c5', + messagingSenderId: '997985384352', + projectId: 'simpleaac-460e6', + authDomain: 'simpleaac-460e6.firebaseapp.com', + databaseURL: 'https://simpleaac-460e6.firebaseio.com', + storageBucket: 'simpleaac-460e6.appspot.com', + ); + + static const FirebaseOptions androidUat = FirebaseOptions( + apiKey: 'AIzaSyDmCr6eOqqXt41McT1I3g447yybMNCRSOM', + appId: '1:997985384352:android:3e6cb26322d31457e956c5', + messagingSenderId: '997985384352', + projectId: 'simpleaac-460e6', + authDomain: 'simpleaac-460e6.firebaseapp.com', + databaseURL: 'https://simpleaac-460e6.firebaseio.com', + storageBucket: 'simpleaac-460e6.appspot.com', + ); + + static const FirebaseOptions androidProd = FirebaseOptions( + apiKey: 'AIzaSyDmCr6eOqqXt41McT1I3g447yybMNCRSOM', + appId: '1:997985384352:android:f8276f74d6d710cae956c5', + messagingSenderId: '997985384352', + projectId: 'simpleaac-460e6', + authDomain: 'simpleaac-460e6.firebaseapp.com', + databaseURL: 'https://simpleaac-460e6.firebaseio.com', + storageBucket: 'simpleaac-460e6.appspot.com', + ); +} diff --git a/lib/flavors.dart b/lib/flavors.dart index 3e4a55d..cba9736 100644 --- a/lib/flavors.dart +++ b/lib/flavors.dart @@ -2,6 +2,7 @@ enum Flavor { dev, uat, prod, + web, } // ignore_for_file: avoid_classes_with_only_static_members @@ -16,6 +17,8 @@ class F { return 'Simple AAC UAT'; case Flavor.prod: return 'Simple AAC'; + case Flavor.web: + return 'Simple AAC Web'; default: return 'Simple AAC'; } diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart new file mode 100644 index 0000000..feea1cc --- /dev/null +++ b/lib/l10n/app_localizations.dart @@ -0,0 +1,152 @@ +import 'dart:async'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; +import 'package:intl/intl.dart' as intl; + +import 'app_localizations_en.dart'; +import 'app_localizations_es.dart'; + +// ignore_for_file: type=lint + +/// Callers can lookup localized strings with an instance of AppLocalizations +/// returned by `AppLocalizations.of(context)`. +/// +/// Applications need to include `AppLocalizations.delegate()` in their app's +/// `localizationDelegates` list, and the locales they support in the app's +/// `supportedLocales` list. For example: +/// +/// ```dart +/// import 'l10n/app_localizations.dart'; +/// +/// return MaterialApp( +/// localizationsDelegates: AppLocalizations.localizationsDelegates, +/// supportedLocales: AppLocalizations.supportedLocales, +/// home: MyApplicationHome(), +/// ); +/// ``` +/// +/// ## Update pubspec.yaml +/// +/// Please make sure to update your pubspec.yaml to include the following +/// packages: +/// +/// ```yaml +/// dependencies: +/// # Internationalization support. +/// flutter_localizations: +/// sdk: flutter +/// intl: any # Use the pinned version from flutter_localizations +/// +/// # Rest of dependencies +/// ``` +/// +/// ## iOS Applications +/// +/// iOS applications define key application metadata, including supported +/// locales, in an Info.plist file that is built into the application bundle. +/// To configure the locales supported by your app, you’ll need to edit this +/// file. +/// +/// First, open your project’s ios/Runner.xcworkspace Xcode workspace file. +/// Then, in the Project Navigator, open the Info.plist file under the Runner +/// project’s Runner folder. +/// +/// Next, select the Information Property List item, select Add Item from the +/// Editor menu, then select Localizations from the pop-up menu. +/// +/// Select and expand the newly-created Localizations item then, for each +/// locale your application supports, add a new item and select the locale +/// you wish to add from the pop-up menu in the Value field. This list should +/// be consistent with the languages listed in the AppLocalizations.supportedLocales +/// property. +abstract class AppLocalizations { + AppLocalizations(String locale) + : localeName = intl.Intl.canonicalizedLocale(locale.toString()); + + final String localeName; + + static AppLocalizations? of(BuildContext context) { + return Localizations.of(context, AppLocalizations); + } + + static const LocalizationsDelegate delegate = + _AppLocalizationsDelegate(); + + /// A list of this localizations delegate along with the default localizations + /// delegates. + /// + /// Returns a list of localizations delegates containing this delegate along with + /// GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, + /// and GlobalWidgetsLocalizations.delegate. + /// + /// Additional delegates can be added by appending to this list in + /// MaterialApp. This list does not have to be used at all if a custom list + /// of delegates is preferred or required. + static const List> localizationsDelegates = + >[ + delegate, + GlobalMaterialLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + ]; + + /// A list of this localizations delegate's supported locales. + static const List supportedLocales = [ + Locale('en'), + Locale('es'), + ]; + + /// No description provided for @app_name. + /// + /// In en, this message translates to: + /// **'Simple AAC'** + String get app_name; + + /// No description provided for @use_biometrics_message. + /// + /// In en, this message translates to: + /// **'Would you like to enable fingerprint / facial recognition for fast sign in?'** + String get use_biometrics_message; + + /// No description provided for @welcome. + /// + /// In en, this message translates to: + /// **'Welcome'** + String get welcome; +} + +class _AppLocalizationsDelegate + extends LocalizationsDelegate { + const _AppLocalizationsDelegate(); + + @override + Future load(Locale locale) { + return SynchronousFuture(lookupAppLocalizations(locale)); + } + + @override + bool isSupported(Locale locale) => + ['en', 'es'].contains(locale.languageCode); + + @override + bool shouldReload(_AppLocalizationsDelegate old) => false; +} + +AppLocalizations lookupAppLocalizations(Locale locale) { + // Lookup logic when only language code is specified. + switch (locale.languageCode) { + case 'en': + return AppLocalizationsEn(); + case 'es': + return AppLocalizationsEs(); + } + + throw FlutterError( + 'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely ' + 'an issue with the localizations generation tool. Please file an issue ' + 'on GitHub with a reproducible sample app and the gen-l10n configuration ' + 'that was used.', + ); +} diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart new file mode 100644 index 0000000..0113c8a --- /dev/null +++ b/lib/l10n/app_localizations_en.dart @@ -0,0 +1,20 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for English (`en`). +class AppLocalizationsEn extends AppLocalizations { + AppLocalizationsEn([String locale = 'en']) : super(locale); + + @override + String get app_name => 'Simple AAC'; + + @override + String get use_biometrics_message => + 'Would you like to enable fingerprint / facial recognition for fast sign in?'; + + @override + String get welcome => 'Welcome'; +} diff --git a/lib/l10n/app_localizations_es.dart b/lib/l10n/app_localizations_es.dart new file mode 100644 index 0000000..0088a3e --- /dev/null +++ b/lib/l10n/app_localizations_es.dart @@ -0,0 +1,20 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Spanish Castilian (`es`). +class AppLocalizationsEs extends AppLocalizations { + AppLocalizationsEs([String locale = 'es']) : super(locale); + + @override + String get app_name => 'Simple AAC'; + + @override + String get use_biometrics_message => + 'Would you like to enable fingerprint / facial recognition for fast sign in?'; + + @override + String get welcome => 'Welcome'; +} diff --git a/lib/main_web.dart b/lib/main_web.dart new file mode 100644 index 0000000..24cf0c2 --- /dev/null +++ b/lib/main_web.dart @@ -0,0 +1,7 @@ +import 'flavors.dart'; +import 'simple_aac_app_wrapper.dart'; + +void main() async { + F.appFlavor = Flavor.web; + SimpleAACAppWrapper.init(); +} diff --git a/lib/services/ai_prediction_service.dart b/lib/services/ai_prediction_service.dart new file mode 100644 index 0000000..a91d55c --- /dev/null +++ b/lib/services/ai_prediction_service.dart @@ -0,0 +1,198 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:dart_openai/dart_openai.dart'; +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:google_generative_ai/google_generative_ai.dart'; +import 'package:path_provider/path_provider.dart'; + +import '../api/models/word.dart'; +import '../utils/constants.dart'; + +enum AiPredictionProvider { gemini, openai } + +class AiPredictionService { + AiPredictionService(this._secureStorage); + + final FlutterSecureStorage _secureStorage; + + // ── Gemini key ────────────────────────────────────────────────────────────── + + Future getGeminiKey() => + _secureStorage.read(key: Constants.GEMINI_API_KEY); + + Future hasGeminiKey() async => + ((await getGeminiKey())?.isNotEmpty) == true; + + Future setGeminiKey(String key) => + _secureStorage.write(key: Constants.GEMINI_API_KEY, value: key); + + Future clearGeminiKey() => + _secureStorage.delete(key: Constants.GEMINI_API_KEY); + + // ── OpenAI key (shared with TTS) ──────────────────────────────────────────── + + Future getOpenAiKey() => + _secureStorage.read(key: Constants.OPENAI_API_KEY); + + Future hasOpenAiKey() async => + ((await getOpenAiKey())?.isNotEmpty) == true; + + // ── Image generation ──────────────────────────────────────────────────────── + + /// Generates an image for [prompt] using DALL-E 3 (OpenAI key required). + /// Returns a local file path on success, null on failure. + Future generateImage(String prompt) async { + final key = await getOpenAiKey(); + if (key == null || key.isEmpty) return null; + + try { + OpenAI.apiKey = key; + final response = await OpenAI.instance.image.create( + prompt: 'AAC communication symbol for: $prompt. ' + 'Simple, clear, flat illustration style, suitable for children, white background.', + model: 'dall-e-3', + n: 1, + size: OpenAIImageSize.size1024, + responseFormat: OpenAIImageResponseFormat.b64Json, + ); + final b64 = response.data.first.b64Json; + if (b64 == null) return null; + final bytes = base64Decode(b64); + final tempDir = await getTemporaryDirectory(); + final file = File( + '${tempDir.path}/ai_image_${DateTime.now().millisecondsSinceEpoch}.png', + ); + await file.writeAsBytes(bytes); + return file.path; + } catch (e) { + print('AI image generation error: $e'); + return null; + } + } + + // ── Predictions ───────────────────────────────────────────────────────────── + + Future> getPredictions( + List sentence, + List vocabulary, + AiPredictionProvider provider, + ) async { + if (sentence.isEmpty) return []; + return switch (provider) { + AiPredictionProvider.gemini => _predictWithGemini(sentence, vocabulary), + AiPredictionProvider.openai => _predictWithOpenAi(sentence, vocabulary), + }; + } + + Future> _predictWithGemini( + List sentence, List vocabulary) async { + final key = await getGeminiKey(); + if (key == null || key.isEmpty) return []; + + try { + final model = GenerativeModel( + model: 'gemini-2.0-flash', + apiKey: key, + generationConfig: GenerationConfig(maxOutputTokens: 64), + ); + final response = await model.generateContent( + [Content.text(_buildGeminiPrompt(sentence, vocabulary))], + ); + return _parseResponse(response.text?.trim() ?? '', vocabulary); + } catch (e) { + print('AI prediction (Gemini) error: $e'); + return []; + } + } + + Future> _predictWithOpenAi( + List sentence, List vocabulary) async { + final key = await getOpenAiKey(); + if (key == null || key.isEmpty) return []; + + try { + OpenAI.apiKey = key; + final vocabTexts = vocabulary.map((w) => w.text).take(300).join(', '); + final wordList = sentence.map((w) => '"${w.text}"').join(', '); + final response = await OpenAI.instance.chat.create( + model: 'gpt-4o-mini', + messages: [ + // System message establishes the role unambiguously + OpenAIChatCompletionChoiceMessageModel( + content: [ + OpenAIChatCompletionChoiceMessageContentItemModel.text( + 'You are an AAC (Augmentative and Alternative Communication) next-word predictor. ' + 'A user builds a sentence by tapping words one at a time, left to right. ' + 'You are given the words tapped SO FAR and a word bank. ' + 'You must return up to 5 words from the word bank that the user should tap NEXT — ' + 'i.e. words that would follow after ALL the words already tapped. ' + 'Never return words that belong before the existing words. ' + 'Return ONLY a raw JSON array with no markdown, e.g. ["water","more","please"].', + ), + ], + role: OpenAIChatMessageRole.system, + ), + OpenAIChatCompletionChoiceMessageModel( + content: [ + OpenAIChatCompletionChoiceMessageContentItemModel.text( + 'Words tapped so far: [$wordList]\n' + 'Word bank: $vocabTexts\n' + 'What word comes next?', + ), + ], + role: OpenAIChatMessageRole.user, + ), + ], + maxTokens: 64, + ); + final text = + response.choices.first.message.content?.first.text?.trim() ?? ''; + return _parseResponse(text, vocabulary); + } catch (e) { + print('AI prediction (OpenAI) error: $e'); + return []; + } + } + + String _buildGeminiPrompt(List sentence, List vocabulary) { + final vocabTexts = vocabulary.map((w) => w.text).take(300).join(', '); + final wordList = sentence.map((w) => '"${w.text}"').join(', '); + return '''You predict the NEXT word an AAC user will tap. The user builds sentences left-to-right. + +Examples of correct next-word prediction: +- Words so far: ["drink"] → next: ["water","milk","juice","more","please"] +- Words so far: ["I","want"] → next: ["to","more","food","drink","it"] +- Words so far: ["go","to","the"] → next: ["park","school","shop","beach","pool"] + +Now predict for: +Words so far: [$wordList] +Word bank (only use words from this list): $vocabTexts + +Output ONLY a raw JSON array of up to 5 words that come AFTER [$wordList], no markdown:'''; + } + + List _parseResponse(String text, List vocabulary) { + print('AI prediction raw response: $text'); + final start = text.indexOf('['); + final end = text.lastIndexOf(']'); + if (start == -1 || end == -1) { + print('AI prediction: no JSON array found in response'); + return []; + } + try { + final List suggested = + jsonDecode(text.substring(start, end + 1)); + final suggestedSet = + suggested.cast().map((s) => s.toLowerCase().trim()).toSet(); + print('AI prediction suggested: $suggestedSet'); + return vocabulary + .where((w) => suggestedSet.contains(w.text.toLowerCase().trim())) + .take(5) + .toList(); + } catch (e) { + print('AI prediction parse error: $e'); + return []; + } + } +} diff --git a/lib/services/auth_service.dart b/lib/services/auth_service.dart new file mode 100644 index 0000000..d51bb2d --- /dev/null +++ b/lib/services/auth_service.dart @@ -0,0 +1,43 @@ +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:google_sign_in/google_sign_in.dart'; + +class AuthService { + AuthService(this._auth); + + final FirebaseAuth _auth; + final _googleSignIn = GoogleSignIn(); + + String? get currentUserId => _auth.currentUser?.uid; + + bool get isSignedIn => _auth.currentUser != null; + + bool get isAnonymous => _auth.currentUser?.isAnonymous ?? true; + + bool get isSignedInWithGoogle => + _auth.currentUser?.providerData.any((p) => p.providerId == 'google.com') ?? false; + + String? get displayName => _auth.currentUser?.displayName; + + String? get email => _auth.currentUser?.email; + + String? get photoUrl => _auth.currentUser?.photoURL; + + Stream get authStateChanges => _auth.authStateChanges(); + + Stream get idTokenChanges => _auth.idTokenChanges(); + + /// Signs in anonymously if not already signed in. + Future ensureSignedIn() async { + if (_auth.currentUser != null) return _auth.currentUser!.uid; + final credential = await _auth.signInAnonymously(); + return credential.user!.uid; + } + + /// Signs out and immediately re-establishes an anonymous session so the + /// app always has a valid UID for local DB and Firestore rules. + Future signOut() async { + await _googleSignIn.signOut(); + await _auth.signOut(); + await ensureSignedIn(); + } +} diff --git a/lib/services/image_path_service.dart b/lib/services/image_path_service.dart new file mode 100644 index 0000000..b00aba1 --- /dev/null +++ b/lib/services/image_path_service.dart @@ -0,0 +1,52 @@ +import '../api/models/word.dart'; +import 'shared_preferences_service.dart'; + +/// Resolves a [Word]'s stored [imagePath] to a full Firebase Storage path. +/// +/// Core vocabulary words store only a filename (e.g. `bowl.png`). The active +/// album is an app-level setting, so switching albums updates every word at +/// once without touching word data. +/// +/// User-added words store a full path directly and are never album-switched. +/// +/// Firebase Storage layout: +/// Core: simple_aac/images/{album}/{filename} e.g. simple_aac/images/core/bowl.png +/// User: users/{userId}/images/{filename} +class ImagePathService { + static const _coreBase = 'simple_aac/images'; + + /// The album name used for the bundled line-drawing vocabulary. + static const defaultAlbum = 'core'; + + ImagePathService(this._prefs); + + final SharedPreferencesService _prefs; + + String get selectedAlbum => _prefs.imageAlbum; + + /// Returns the resolved Firebase Storage path for [word], or null if the + /// word has no image. + /// + /// A bare filename (no slashes, not a URL) means the word is part of the + /// bundled vocabulary — resolve it against the active album. + /// A path that already contains slashes or is a URL is returned as-is + /// (user-uploaded image or full Firebase Storage path). + String? resolve(Word word) { + final path = word.imagePath; + if (path == null || path.isEmpty) return null; + + if (_isFullPath(path)) return path; + + return '$_coreBase/$selectedAlbum/$path'; + } + + static bool _isFullPath(String path) => + path.contains('/') || + path.startsWith('http') || + path.startsWith('file://'); + + /// Returns the Firebase Storage path to use when uploading a new image for + /// a user-created word. + String userImageStoragePath(String userId, String filename) => + 'users/$userId/images/$filename'; +} diff --git a/lib/services/language_service.dart b/lib/services/language_service.dart index 5b5e603..2762b8d 100644 --- a/lib/services/language_service.dart +++ b/lib/services/language_service.dart @@ -1,87 +1,41 @@ -import 'dart:async'; +import 'dart:convert'; -import 'package:built_collection/built_collection.dart'; -import 'package:flutter/foundation.dart'; +import 'package:flutter/services.dart'; -import '../api/hive_client.dart'; import '../api/models/language.dart'; +import '../api/models/language_response.dart'; import 'shared_preferences_service.dart'; -const kLanguageBox = 'language'; - -typedef LanguageCallBack = void Function(Language language); +const kDefaultLanguageId = 'en'; class LanguageService { - LanguageService( - this.hiveClient, - this.sharedPreferencesService, - ); - - final HiveClient hiveClient; - final SharedPreferencesService sharedPreferencesService; + LanguageService(this._prefs); - String currentLanguageId() { - return sharedPreferencesService.currentLanguageId; - } + final SharedPreferencesService _prefs; - Future put(Language language) { - return hiveClient.put( - language.id, - language, - ); - } + List _languages = []; - Future putAll(BuiltList languages) async { - for (var language in languages) { - await hiveClient.put( - language.id, - language, - ); - } - } + String get currentLanguageId => _prefs.currentLanguageId; - Future delete(Language language) { - return hiveClient.delete(language.id); - } - - Future getCurrentLanguage() async { - final languageId = sharedPreferencesService.currentLanguageId; - final language = await hiveClient.get(languageId); - return language!; - } - - void setCurrentLanguage(Language language) { - sharedPreferencesService.setLanguageId(language.id); - } - - Future get(String languageId) { - return hiveClient.get(languageId); - } - - Future> getAll() async { - return hiveClient.getAll(); - } - - void addListener(LanguageCallBack callBack) { - sharedPreferencesService.addListener( - _getLanguageCallbackWrapper(callBack), + /// Load language metadata from the bundled asset. Call once at startup. + Future init() async { + if (_languages.isNotEmpty) return; + final raw = await rootBundle.loadString('assets/json/initial_word_data.json'); + final response = LanguageResponse.fromJson( + jsonDecode(raw) as Map, ); + // Keep only a preview slice of words — the full list lives in Drift. + _languages = response.languages + .map((l) => l.copyWith(words: l.words.take(10).toList())) + .toList(); } - void removeListener(LanguageCallBack callBack) { - sharedPreferencesService.removeListener( - _getLanguageCallbackWrapper(callBack), - ); - } + Language? getCurrentLanguage() => + _languages.where((l) => l.id == currentLanguageId).firstOrNull; - AsyncCallback _getLanguageCallbackWrapper(LanguageCallBack callBack) { - return () async { - final currentLanguage = await getCurrentLanguage(); - callBack.call(currentLanguage); - }; - } + List getAllLanguages() => _languages; - void dispose() { - hiveClient.dispose(); + void setCurrentLanguage(Language language) { + _prefs.setLanguageId(language.id); } } diff --git a/lib/services/shared_preferences_service.dart b/lib/services/shared_preferences_service.dart index b6dbdb1..300be4d 100644 --- a/lib/services/shared_preferences_service.dart +++ b/lib/services/shared_preferences_service.dart @@ -1,15 +1,19 @@ import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../utils/constants.dart'; -const defaultLanguageId = 'l1'; +const defaultLanguageId = 'en'; class SharedPreferencesService extends ChangeNotifier { SharedPreferencesService(this.sharedPreferences); final SharedPreferences sharedPreferences; + /// Exposed for ThemeService JSON storage. + SharedPreferences get preferences => sharedPreferences; + bool get isFirstTime => sharedPreferences.getBool(Constants.FIRST_TIME) ?? true; bool get hasRelatedWordsEnabled => sharedPreferences.getBool(Constants.RELATED_WORDS) ?? true; @@ -22,10 +26,37 @@ class SharedPreferencesService extends ChangeNotifier { String get themeName => sharedPreferences.getString(Constants.THEME_NAME) ?? 'red'; + ThemeMode get themeMode { + final stored = sharedPreferences.getString(Constants.THEME_MODE); + return ThemeMode.values.firstWhere( + (m) => m.name == stored, + orElse: () => ThemeMode.system, + ); + } + String get currentLanguageId => sharedPreferences.getString(Constants.LANGUAGE_ID) ?? defaultLanguageId; bool get useBiometrics => sharedPreferences.getBool(Constants.BIOMETRIC_KEY) == true; + double get ttsPitch => sharedPreferences.getDouble(Constants.TTS_PITCH) ?? 1.05; + + double get ttsSpeechRate => sharedPreferences.getDouble(Constants.TTS_SPEECH_RATE) ?? 0.44; + + String? get ttsVoiceName => sharedPreferences.getString(Constants.TTS_VOICE_NAME); + + String? get ttsVoiceLocale => sharedPreferences.getString(Constants.TTS_VOICE_LOCALE); + + String get ttsOpenAiVoice => sharedPreferences.getString(Constants.TTS_OPENAI_VOICE) ?? 'nova'; + + bool get highlightWordsEnabled => sharedPreferences.getBool(Constants.TTS_HIGHLIGHT_WORDS) ?? true; + + bool get useAiVoice => sharedPreferences.getBool(Constants.TTS_USE_AI_VOICE) ?? true; + + bool get aiPredictionsEnabled => sharedPreferences.getBool(Constants.AI_PREDICTIONS_ENABLED) ?? false; + + String get aiPredictionProvider => + sharedPreferences.getString(Constants.AI_PREDICTION_PROVIDER) ?? 'gemini'; + void setFirstTime({required bool isFirstTime}) { sharedPreferences.setBool(Constants.FIRST_TIME, isFirstTime); notifyListeners(); @@ -62,11 +93,70 @@ class SharedPreferencesService extends ChangeNotifier { notifyListeners(); } + void setThemeMode(ThemeMode mode) { + sharedPreferences.setString(Constants.THEME_MODE, mode.name); + notifyListeners(); + } + void setLanguageId(String languageId) { sharedPreferences.setString(Constants.LANGUAGE_ID, languageId); notifyListeners(); } + void setTtsPitch(double pitch) { + sharedPreferences.setDouble(Constants.TTS_PITCH, pitch); + notifyListeners(); + } + + void setTtsSpeechRate(double rate) { + sharedPreferences.setDouble(Constants.TTS_SPEECH_RATE, rate); + notifyListeners(); + } + + void setTtsVoice(String name, String locale) { + sharedPreferences.setString(Constants.TTS_VOICE_NAME, name); + sharedPreferences.setString(Constants.TTS_VOICE_LOCALE, locale); + notifyListeners(); + } + + void clearTtsVoice() { + sharedPreferences.remove(Constants.TTS_VOICE_NAME); + sharedPreferences.remove(Constants.TTS_VOICE_LOCALE); + notifyListeners(); + } + + void setTtsOpenAiVoice(String voice) { + sharedPreferences.setString(Constants.TTS_OPENAI_VOICE, voice); + notifyListeners(); + } + + void setHighlightWordsEnabled(bool value) { + sharedPreferences.setBool(Constants.TTS_HIGHLIGHT_WORDS, value); + notifyListeners(); + } + + void setUseAiVoice(bool value) { + sharedPreferences.setBool(Constants.TTS_USE_AI_VOICE, value); + notifyListeners(); + } + + void setAiPredictionsEnabled(bool value) { + sharedPreferences.setBool(Constants.AI_PREDICTIONS_ENABLED, value); + notifyListeners(); + } + + void setAiPredictionProvider(String provider) { + sharedPreferences.setString(Constants.AI_PREDICTION_PROVIDER, provider); + notifyListeners(); + } + + String get imageAlbum => sharedPreferences.getString(Constants.IMAGE_ALBUM) ?? 'core'; + + void setImageAlbum(String album) { + sharedPreferences.setString(Constants.IMAGE_ALBUM, album); + notifyListeners(); + } + static Future get firstTime => SharedPreferences.getInstance().then( (sharedPreferences) => sharedPreferences.getBool(Constants.FIRST_TIME) ?? true, ); diff --git a/lib/services/sync_mediator.dart b/lib/services/sync_mediator.dart new file mode 100644 index 0000000..57765c8 --- /dev/null +++ b/lib/services/sync_mediator.dart @@ -0,0 +1,377 @@ +import 'dart:async'; + +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:drift/drift.dart' show Value; +import 'package:firebase_auth/firebase_auth.dart'; + +import '../api/models/word.dart'; +import '../api/models/word_group.dart'; +import '../api/models/word_usage.dart'; +import '../api/models/word_sub_type.dart'; +import '../api/models/word_type.dart'; +import '../database/app_database.dart'; +import '../database/daos/sync_dao.dart'; +import 'auth_service.dart'; +import 'shared_preferences_service.dart'; + +/// How long cached core vocabulary is considered fresh before re-fetching. +const _vocabCacheTtl = Duration(days: 7); + +/// Bridges Firebase (two remote sources) and the local Drift database. +/// +/// Data flow: +/// Firebase core vocab ──┐ +/// ├─► SyncMediator ─► Local DB ─► UI +/// Firebase user data ───┘ +/// +/// The UI never reads from Firebase directly. All writes go to local DB +/// first (immediate UI update), then propagate to Firebase asynchronously. +class SyncMediator { + SyncMediator({ + required FirebaseFirestore firestore, + required AuthService auth, + required SharedPreferencesService prefs, + required WordsDao wordsDao, + required WordGroupsDao wordGroupsDao, + required WordUsageDao wordUsageDao, + required SyncDao syncDao, + }) : _firestore = firestore, + _auth = auth, + _prefs = prefs, + _wordsDao = wordsDao, + _wordGroupsDao = wordGroupsDao, + _wordUsageDao = wordUsageDao, + _syncDao = syncDao; + + final FirebaseFirestore _firestore; + final AuthService _auth; + final SharedPreferencesService _prefs; + final WordsDao _wordsDao; + final WordGroupsDao _wordGroupsDao; + final WordUsageDao _wordUsageDao; + final SyncDao _syncDao; + + StreamSubscription? _authSub; + StreamSubscription? _overridesSub; + StreamSubscription? _groupsSub; + + // ── Lifecycle ───────────────────────────────────────────────────────────── + + /// Call once from app startup. Reacts to auth state changes automatically. + Future start() async { + // Ensure we have an anonymous session so Firestore rules allow core vocab reads. + await _auth.ensureSignedIn(); + + // Sync core vocab for current language immediately using whatever auth we have. + await _ensureCoreVocabFresh(_prefs.currentLanguageId); + + // React to auth changes (anonymous → linked, sign-out, etc.) + _authSub = _auth.authStateChanges.listen(_onAuthChanged); + + // If already authenticated, start user sync now. + final uid = _auth.currentUserId; + if (uid != null) _startUserSync(uid); + } + + /// Call when the user selects a different language. + Future onLanguageChanged(String languageId) => + _ensureCoreVocabFresh(languageId); + + void dispose() { + _authSub?.cancel(); + _stopUserSync(); + } + + // ── Auth handling ───────────────────────────────────────────────────────── + + void _onAuthChanged(User? user) { + if (user == null) { + _stopUserSync(); + } else { + _startUserSync(user.uid); + } + } + + // ── Core vocabulary ─────────────────────────────────────────────────────── + + Future _ensureCoreVocabFresh(String languageId) async { + final key = SyncCollection.vocabulary(languageId); + final lastSync = await _syncDao.getLastSyncedAt(key); + final isFresh = lastSync != null && + DateTime.now().difference(lastSync) < _vocabCacheTtl; + + if (isFresh) return; + + await _fetchCoreVocabulary(languageId); + } + + Future _fetchCoreVocabulary(String languageId) async { + final snap = await _firestore + .collection('vocabulary') + .doc(languageId) + .collection('words') + .get(); + + if (snap.docs.isEmpty) return; + + final companions = snap.docs + .map((doc) => _coreWordCompanion(doc.data(), languageId)) + .whereType() + .toList(); + + await _wordsDao.upsertCoreWords(companions); + await _syncDao.markSynced(SyncCollection.vocabulary(languageId)); + } + + WordsTableCompanion? _coreWordCompanion( + Map data, + String languageId, + ) { + try { + return WordsTableCompanion( + wordId: Value(data['wordId'] as String), + languageId: Value(languageId), + wordText: Value(data['text'] as String), + phoneticOverride: Value(data['phoneticOverride'] as String?), + type: Value(WordType.values.byName(data['type'] as String)), + subType: Value(WordSubType.values.byName(data['subType'] as String)), + imagePath: Value(data['imagePath'] as String?), + extraRelatedWordIds: Value( + (data['extraRelatedWordIds'] as List?)?.cast() ?? [], + ), + aiSuggestedFollowUps: Value( + (data['aiSuggestedFollowUps'] as List?)?.cast() ?? [], + ), + createdDate: Value(null), + ); + } catch (_) { + // Skip malformed documents rather than crashing the whole sync. + return null; + } + } + + // ── User data (real-time) ───────────────────────────────────────────────── + + void _startUserSync(String uid) { + _stopUserSync(); + + _overridesSub = _firestore + .collection('users') + .doc(uid) + .collection('wordOverrides') + .snapshots() + .listen(_onOverridesSnapshot); + + _groupsSub = _firestore + .collection('users') + .doc(uid) + .collection('wordGroups') + .snapshots() + .listen(_onGroupsSnapshot); + } + + void _stopUserSync() { + _overridesSub?.cancel(); + _groupsSub?.cancel(); + _overridesSub = null; + _groupsSub = null; + } + + void _onOverridesSnapshot(QuerySnapshot snap) { + for (final change in snap.docChanges) { + final wordId = change.doc.id; + switch (change.type) { + case DocumentChangeType.added: + case DocumentChangeType.modified: + final data = change.doc.data()! as Map; + _wordsDao.upsertOverride(_overrideCompanion(wordId, data)); + // Usage is stored on the same document alongside override fields. + final count = (data['count'] as num?)?.toInt(); + if (count != null) { + _wordUsageDao.upsertAll([ + WordUsage( + wordId: wordId, + count: count, + lastUsed: _tsToDateTime(data['lastUsed']), + ), + ]); + } + case DocumentChangeType.removed: + _wordsDao.deleteOverride(wordId); + } + } + } + + void _onGroupsSnapshot(QuerySnapshot snap) { + for (final change in snap.docChanges) { + switch (change.type) { + case DocumentChangeType.added: + case DocumentChangeType.modified: + final data = change.doc.data()! as Map; + final group = WordGroup.fromJson(data); + _wordGroupsDao.upsert(group); + case DocumentChangeType.removed: + _wordGroupsDao.deleteGroup(change.doc.id); + } + } + } + + // ── Write operations (local-first, then Firebase) ───────────────────────── + + /// Marks or unmarks a word as a favourite. + Future setWordFavourite(String wordId, {required bool isFavourite}) async { + // Local DB: sparse upsert — only touch isFavourite. + await _wordsDao.upsertOverride( + WordOverridesTableCompanion( + wordId: Value(wordId), + isFavourite: Value(isFavourite), + updatedAt: Value(DateTime.now()), + ), + ); + + // Firebase: merge so other override fields are untouched. + _userOverridesRef(wordId) + ?.set({'isFavourite': isFavourite}, SetOptions(merge: true)); + } + + /// Sentinel exposed so callers can signal "field unchanged — do not write". + static const absent = Object(); + + /// Applies one or more field overrides to a core word. + /// Pass [absent] for a field to leave it untouched. + /// Pass null for a field to explicitly clear that override (revert to core). + Future applyWordOverride( + String wordId, { + Object? wordText = absent, + Object? phoneticOverride = absent, + Object? type = absent, + Object? subType = absent, + Object? imagePath = absent, + }) async { + final companion = WordOverridesTableCompanion( + wordId: Value(wordId), + wordText: wordText == absent + ? const Value.absent() + : Value(wordText as String?), + phoneticOverride: phoneticOverride == absent + ? const Value.absent() + : Value(phoneticOverride as String?), + type: type == absent ? const Value.absent() : Value(type as String?), + subType: + subType == absent ? const Value.absent() : Value(subType as String?), + imagePath: imagePath == absent + ? const Value.absent() + : Value(imagePath as String?), + updatedAt: Value(DateTime.now()), + ); + + await _wordsDao.upsertOverride(companion); + + // Build the Firestore patch — only the fields that were explicitly passed. + final patch = {}; + if (wordText != absent) patch['text'] = wordText; + if (phoneticOverride != absent) patch['phoneticOverride'] = phoneticOverride; + if (type != absent) patch['type'] = type; + if (subType != absent) patch['subType'] = subType; + if (imagePath != absent) patch['imagePath'] = imagePath; + + if (patch.isNotEmpty) { + _userOverridesRef(wordId)?.set(patch, SetOptions(merge: true)); + } + } + + Future saveWordGroup(WordGroup group) async { + await _wordGroupsDao.upsert(group); + _userRef() + ?.collection('wordGroups') + .doc(group.id) + .set(group.toJson()); + } + + Future deleteWordGroup(String groupId) async { + await _wordGroupsDao.deleteGroup(groupId); + _userRef()?.collection('wordGroups').doc(groupId).delete(); + } + + /// Upserts a user-created word into the local DB and propagates to Firebase. + Future saveWord(Word word, String languageId) async { + final companion = WordsTableCompanion( + wordId: Value(word.wordId), + languageId: Value(languageId), + wordText: Value(word.text), + phoneticOverride: Value(word.phoneticOverride), + type: Value(word.type), + subType: Value(word.subType), + imagePath: Value(word.imagePath), + extraRelatedWordIds: Value(word.extraRelatedWordIds), + aiSuggestedFollowUps: Value(word.aiSuggestedFollowUps), + localEmbedding: Value(word.localEmbedding), + createdDate: Value(word.createdDate ?? DateTime.now()), + ); + await _wordsDao.upsertCoreWords([companion]); + + _userRef()?.collection('customWords').doc(word.wordId).set({ + 'wordId': word.wordId, + 'languageId': languageId, + 'text': word.text, + 'phoneticOverride': word.phoneticOverride, + 'type': word.type.name, + 'subType': word.subType.name, + 'imagePath': word.imagePath, + }, SetOptions(merge: true)); + } + + /// Removes a user-created word from the local DB and Firebase. + Future deleteWord(String wordId) async { + await _wordsDao.deleteWord(wordId); + await _wordsDao.deleteOverride(wordId); + _userRef()?.collection('customWords').doc(wordId).delete(); + } + + Future incrementWordUsage(String wordId) async { + await _wordUsageDao.increment(wordId); + // Usage lives on the same wordOverrides document — merge so override fields are untouched. + _userOverridesRef(wordId)?.set( + { + 'count': FieldValue.increment(1), + 'lastUsed': FieldValue.serverTimestamp(), + }, + SetOptions(merge: true), + ); + } + + // ── Helpers ─────────────────────────────────────────────────────────────── + + + DocumentReference? _userRef() { + final uid = _auth.currentUserId; + if (uid == null) return null; + return _firestore.collection('users').doc(uid); + } + + DocumentReference? _userOverridesRef(String wordId) => + _userRef()?.collection('wordOverrides').doc(wordId); + + WordOverridesTableCompanion _overrideCompanion( + String wordId, + Map data, + ) { + // The Firestore document is the canonical state for this word's overrides. + // A field absent from the document means "no override" (null in local DB). + return WordOverridesTableCompanion( + wordId: Value(wordId), + isFavourite: Value(data['isFavourite'] as bool?), + wordText: Value(data['text'] as String?), + phoneticOverride: Value(data['phoneticOverride'] as String?), + type: Value(data['type'] as String?), + subType: Value(data['subType'] as String?), + imagePath: Value(data['imagePath'] as String?), + updatedAt: Value(_tsToDateTime(data['updatedAt']) ?? DateTime.now()), + ); + } + + DateTime? _tsToDateTime(dynamic value) { + if (value is Timestamp) return value.toDate(); + return null; + } +} diff --git a/lib/services/theme_service.dart b/lib/services/theme_service.dart index 6a9a18d..aca4018 100644 --- a/lib/services/theme_service.dart +++ b/lib/services/theme_service.dart @@ -1,32 +1,57 @@ -import '../api/hive_client.dart'; +import 'dart:convert'; -const kThemeBox = 'themes'; +import 'shared_preferences_service.dart'; -class ThemeService { +const kThemeKey = 'theme_settings'; - ThemeService(this.hiveClient); +/// Stores theme settings as a JSON map in SharedPreferences. +/// Only JSON primitives (bool, int, double, String) and enums (stored as name) +/// are persisted. All other types (Color, complex objects) are silently ignored +/// and fall back to the default value on load. +class ThemeService { + ThemeService(this._prefs); - final HiveClient hiveClient; + final SharedPreferencesService _prefs; Future put(String key, T value) async { - return hiveClient.put( - key, - value, - ); + final storable = _toStorable(value); + if (storable == null) return; // non-serializable — skip silently + final map = await _loadMap(); + map[key] = storable; + await _saveMap(map); + } + + Future get(String key, T defaultValue) async { + final map = await _loadMap(); + final stored = map[key]; + if (stored == null) return defaultValue; + if (stored is T) return stored; + return defaultValue; } - Future get( - String key, - T defaultValue, - ) async { - final value = await hiveClient.get( - key, - defaultValue: defaultValue, - ); - return value ?? defaultValue; + /// Converts a value to a JSON-safe primitive, or null if not possible. + dynamic _toStorable(dynamic value) { + if (value == null) return null; + if (value is bool || value is int || value is double || value is String) { + return value; + } + if (value is Enum) return value.name; + return null; // Color, complex objects — skip } - Future dispose() async { - hiveClient.dispose(); + Future> _loadMap() async { + final raw = _prefs.preferences.getString(kThemeKey); + if (raw == null) return {}; + try { + return Map.from(jsonDecode(raw) as Map); + } catch (_) { + return {}; + } } + + Future _saveMap(Map map) async { + await _prefs.preferences.setString(kThemeKey, jsonEncode(map)); + } + + void dispose() {} } diff --git a/lib/services/tts_service.dart b/lib/services/tts_service.dart new file mode 100644 index 0000000..6041866 --- /dev/null +++ b/lib/services/tts_service.dart @@ -0,0 +1,393 @@ +import 'dart:async'; + +import 'package:audioplayers/audioplayers.dart'; +import 'package:dart_openai/dart_openai.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:flutter_tts/flutter_tts.dart'; +import 'package:rxdart/rxdart.dart'; + +import '../utils/native_file_utils.dart'; + +import '../services/shared_preferences_service.dart'; +import '../ui/dashboard/sentence_builder.dart'; +import '../utils/constants.dart'; + +enum TtsVoiceQuality { premium, enhanced, standard } + +class TtsVoice { + const TtsVoice({ + required this.name, + required this.locale, + required this.displayName, + required this.quality, + }); + + final String name; + final String locale; + final String displayName; + final TtsVoiceQuality quality; + + static TtsVoice fromMap(Map raw) { + final name = raw['name'] as String? ?? ''; + final locale = raw['locale'] as String? ?? ''; + final quality = _quality(name, raw['quality'] as String? ?? ''); + return TtsVoice( + name: name, + locale: locale, + displayName: _displayName(name, locale), + quality: quality, + ); + } + + static String _displayName(String name, String locale) { + // iOS: "com.apple.voice.premium.en-US.Zoe" → "Zoe" + if (name.contains('.')) return name.split('.').last; + // Android: derive a readable name from the locale, e.g. "en-US" → "English (US)" + final parts = locale.split('-'); + if (parts.length >= 2) { + return '${_languageName(parts[0])} (${parts[1]})'; + } + return locale.isNotEmpty ? locale : name; + } + + static String _languageName(String code) => switch (code.toLowerCase()) { + 'en' => 'English', + 'es' => 'Spanish', + 'fr' => 'French', + 'de' => 'German', + 'it' => 'Italian', + 'pt' => 'Portuguese', + 'nl' => 'Dutch', + 'ja' => 'Japanese', + 'ko' => 'Korean', + 'zh' => 'Chinese', + 'ar' => 'Arabic', + _ => code.toUpperCase(), + }; + + static TtsVoiceQuality _quality(String name, String qualityField) { + final combined = '${name.toLowerCase()} ${qualityField.toLowerCase()}'; + if (combined.contains('premium')) return TtsVoiceQuality.premium; + if (combined.contains('enhanced') || combined.contains('neural')) { + return TtsVoiceQuality.enhanced; + } + return TtsVoiceQuality.standard; + } + + @override + bool operator ==(Object other) => + other is TtsVoice && other.name == name && other.locale == locale; + + @override + int get hashCode => Object.hash(name, locale); +} + +class TtsService { + TtsService(this._prefs, this._secureStorage) { + _init(); + } + + final SharedPreferencesService _prefs; + final FlutterSecureStorage _secureStorage; + + final _tts = FlutterTts(); + final _audioPlayer = AudioPlayer(); + final _highlightTimers = []; + + SentencePlan? _currentPlan; + bool _available = false; + bool _usingAiVoice = false; + + final _highlightedSlotIds = BehaviorSubject>.seeded({}); + final _isSpeaking = BehaviorSubject.seeded(false); + + Stream> get highlightedSlotIds => _highlightedSlotIds.stream; + Stream get isSpeaking => _isSpeaking.stream; + bool get isSpeakingNow => _isSpeaking.value; + + Future _init() async { + try { + if (!kIsWeb && defaultTargetPlatform == TargetPlatform.iOS) { + await _tts.setSharedInstance(true); + await _tts.setIosAudioCategory( + IosTextToSpeechAudioCategory.playback, + [ + IosTextToSpeechAudioCategoryOptions.allowBluetooth, + IosTextToSpeechAudioCategoryOptions.allowBluetoothA2DP, + IosTextToSpeechAudioCategoryOptions.mixWithOthers, + ], + IosTextToSpeechAudioMode.defaultMode, + ); + } + + await _tts.setSpeechRate(_prefs.ttsSpeechRate); + await _tts.setVolume(1.0); + await _tts.setPitch(_prefs.ttsPitch); + + await _restoreOrSelectVoice(); + + // Prime the OpenAI key if one is already saved. + final savedKey = await getOpenAiKey(); + if (savedKey != null && savedKey.isNotEmpty) { + OpenAI.apiKey = savedKey; + } + + _tts.setCompletionHandler(() { if (!_usingAiVoice) _onDone(); }); + _tts.setCancelHandler(() { if (!_usingAiVoice) _onDone(); }); + _tts.setErrorHandler((_) { if (!_usingAiVoice) _onDone(); }); + + _available = true; + } on MissingPluginException { + // Plugin not linked — TTS silently unavailable (e.g. during testing). + } catch (_) { + // Any other init failure; TTS unavailable but app continues. + } + + // Audioplayers setup is separate so a MissingPluginException there + // doesn't prevent platform TTS from working. + try { + _audioPlayer.onPlayerComplete.listen((_) { if (_usingAiVoice) _onDone(); }); + } catch (_) {} + } + + void _onDone() { + _cancelHighlightTimers(); + _isSpeaking.add(false); + _highlightedSlotIds.add({}); + _currentPlan = null; + _usingAiVoice = false; + } + + // ── OpenAI key management ───────────────────────────────────────────────── + + Future getOpenAiKey() => + _secureStorage.read(key: Constants.OPENAI_API_KEY); + + Future setOpenAiKey(String key) async { + await _secureStorage.write(key: Constants.OPENAI_API_KEY, value: key); + OpenAI.apiKey = key; + _prefs.setUseAiVoice(true); + } + + Future clearOpenAiKey() async { + await _secureStorage.delete(key: Constants.OPENAI_API_KEY); + _prefs.setUseAiVoice(false); + } + + Future hasOpenAiKey() async => + ((await getOpenAiKey())?.isNotEmpty) == true; + + // ── Platform voice management ───────────────────────────────────────────── + + Future _restoreOrSelectVoice() async { + try { + final savedName = _prefs.ttsVoiceName; + final savedLocale = _prefs.ttsVoiceLocale; + if (savedName != null && savedLocale != null) { + await _tts.setVoice({'name': savedName, 'locale': savedLocale}); + return; + } + final voices = await getVoices(); + if (voices.isNotEmpty) { + final preferred = voices + .where((v) => v.locale.toLowerCase() == 'en-gb') + .firstOrNull ?? + voices + .where((v) => v.locale.toLowerCase().startsWith('en')) + .firstOrNull ?? + voices.first; + await _tts.setVoice({'name': preferred.name, 'locale': preferred.locale}); + } + } catch (_) {} + } + + Future> getVoices() async { + try { + final raw = await _tts.getVoices as List?; + if (raw == null || raw.isEmpty) return []; + final voices = raw.cast().map(TtsVoice.fromMap).toList(); + voices.sort((a, b) => a.quality.index.compareTo(b.quality.index)); + return voices; + } catch (_) { + return []; + } + } + + Future setVoice(TtsVoice voice) async { + if (!_available) return; + try { + await _tts.setVoice({'name': voice.name, 'locale': voice.locale}); + _prefs.setTtsVoice(voice.name, voice.locale); + } catch (_) {} + } + + Future resetVoice() async { + _prefs.clearTtsVoice(); + await _restoreOrSelectVoice(); + final savedName = _prefs.ttsVoiceName; + if (savedName == null) return null; + final voices = await getVoices(); + return voices.where((v) => v.name == savedName).firstOrNull; + } + + // ── Speak ───────────────────────────────────────────────────────────────── + + Future speak(SentencePlan plan) async { + if (!_available) return; + try { + _currentPlan = plan; + _cancelHighlightTimers(); + await _tts.stop(); + await _audioPlayer.stop(); + _highlightedSlotIds.add({}); + _isSpeaking.add(true); + + final key = await getOpenAiKey(); + if (_prefs.useAiVoice && key != null && key.isNotEmpty) { + _usingAiVoice = true; + await _speakWithOpenAi(plan.ttsText, key, plan: plan); + } else { + _usingAiVoice = false; + if (_prefs.highlightWordsEnabled) { + _startEstimatedHighlighting(plan); + } + await _tts.speak(plan.ttsText); + } + } on MissingPluginException { + _onDone(); + } catch (_) { + _onDone(); + } + } + + Future speakWord(String text) async { + if (!_available || text.trim().isEmpty) return; + try { + _currentPlan = null; + _cancelHighlightTimers(); + await _tts.stop(); + await _audioPlayer.stop(); + _isSpeaking.add(true); + + final key = await getOpenAiKey(); + if (_prefs.useAiVoice && key != null && key.isNotEmpty) { + _usingAiVoice = true; + await _speakWithOpenAi(text.trim(), key); + } else { + _usingAiVoice = false; + await _tts.speak(text.trim()); + } + } on MissingPluginException { + _onDone(); + } catch (_) { + _onDone(); + } + } + + Future _speakWithOpenAi(String text, String apiKey, {SentencePlan? plan}) async { + try { + final speed = (_prefs.ttsSpeechRate / 0.44).clamp(0.25, 4.0); + + if (kIsWeb) { + final bytes = await createOpenAiSpeechBytes( + text, _prefs.ttsOpenAiVoice, speed, apiKey, + ); + if (bytes != null) { + if (plan != null && _prefs.highlightWordsEnabled) { + _startEstimatedHighlighting(plan); + } + await _audioPlayer.play(BytesSource(bytes)); + return; + } + // API unavailable — fall back to platform TTS. + _usingAiVoice = false; + await _tts.speak(text); + return; + } + + final path = await createOpenAiSpeechFile(text, _prefs.ttsOpenAiVoice, speed); + + if (path == null) { + _usingAiVoice = false; + await _tts.speak(text); + return; + } + + if (plan != null && _prefs.highlightWordsEnabled) { + _startEstimatedHighlighting(plan); + } + + await _audioPlayer.play(DeviceFileSource(path)); + } catch (_) { + // API error or no connectivity — fall back to platform TTS silently. + _usingAiVoice = false; + await _tts.speak(text); + } + } + + + // ── Estimated word highlighting ─────────────────────────────────────────── + + /// Schedules highlight updates based on each group's character position + /// relative to the total text length and estimated speech rate. + void _startEstimatedHighlighting(SentencePlan plan) { + final totalChars = plan.ttsText.length; + if (totalChars == 0 || plan.groups.isEmpty) return; + + // At rate=0.44 (normal), empirically ~12 chars/second. + final charsPerSecond = 12.0 * (_prefs.ttsSpeechRate / 0.44); + final totalMs = (totalChars / charsPerSecond * 1000).round(); + + for (final group in plan.groups) { + final delayMs = ((group.charStart / totalChars) * totalMs).round(); + _highlightTimers.add( + Timer(Duration(milliseconds: delayMs), () { + if (_isSpeaking.value) { + _highlightedSlotIds.add(group.slotIds.toSet()); + } + }), + ); + } + } + + void _cancelHighlightTimers() { + for (final t in _highlightTimers) t.cancel(); + _highlightTimers.clear(); + } + + // ── Controls ────────────────────────────────────────────────────────────── + + Future updatePitch(double pitch) async { + if (!_available) return; + try { await _tts.setPitch(pitch); } catch (_) {} + } + + Future updateSpeechRate(double rate) async { + if (!_available) return; + try { await _tts.setSpeechRate(rate); } catch (_) {} + } + + Future stop() async { + _cancelHighlightTimers(); + if (!_available) return; + try { + await _tts.stop(); + await _audioPlayer.stop(); + } on MissingPluginException { + // Nothing to stop. + } catch (_) { + // Ignore. + } finally { + _onDone(); + } + } + + void dispose() { + _cancelHighlightTimers(); + _audioPlayer.dispose(); + _highlightedSlotIds.close(); + _isSpeaking.close(); + } +} diff --git a/lib/services/word_group_service.dart b/lib/services/word_group_service.dart new file mode 100644 index 0000000..67f27af --- /dev/null +++ b/lib/services/word_group_service.dart @@ -0,0 +1,22 @@ +import '../api/models/word.dart'; +import '../api/models/word_group.dart'; +import '../database/app_database.dart'; +import 'sync_mediator.dart'; +import 'word_service.dart'; + +class WordGroupService { + WordGroupService(this._wordGroupsDao, this._mediator, this._wordService); + + final WordGroupsDao _wordGroupsDao; + final SyncMediator _mediator; + final WordService _wordService; + + Stream> watchAll() => _wordGroupsDao.watchAll(); + + Future save(WordGroup group) => _mediator.saveWordGroup(group); + + Future delete(String groupId) => _mediator.deleteWordGroup(groupId); + + Future> getWordsForGroup(WordGroup group) => + _wordService.getWordsForIds(group.wordIds); +} diff --git a/lib/services/word_service.dart b/lib/services/word_service.dart index 1d43d60..ba948b6 100644 --- a/lib/services/word_service.dart +++ b/lib/services/word_service.dart @@ -1,71 +1,71 @@ -import 'package:built_collection/built_collection.dart'; -import 'package:simple_aac/ui/dashboard/related_words_widget.dart'; - import '../api/models/word.dart'; import '../api/models/word_sub_type.dart'; +import '../api/models/word_type.dart'; +import '../database/app_database.dart'; import 'language_service.dart'; +import 'sync_mediator.dart'; class WordService { - WordService(this.languageService); + WordService(this._wordsDao, this._mediator, this._language); - final LanguageService languageService; + final WordsDao _wordsDao; + final SyncMediator _mediator; + final LanguageService _language; - Future> getAllForType(WordSubType wordSubType) async { - final currentLanguage = await languageService.getCurrentLanguage(); - final words = currentLanguage.words; - return words.where((w) => w.subType == wordSubType).toBuiltList(); - } + String get _languageId => _language.currentLanguageId; - Future> getExtraRelatedWords(Word word) async { - final currentLanguage = await languageService.getCurrentLanguage(); - return currentLanguage.words - .where( - (lw) => word.extraRelatedWordIds.any( - (w) => w == lw.wordId, - ), - ) - .toBuiltList(); - } + Stream> watchSubType(WordSubType subType) => + _wordsDao.watchWordsForSubType(_languageId, subType); + + Stream> watchType(WordType type) => + _wordsDao.watchWordsForType(_languageId, type); - Future> getRelatedWords(Word word) async { - final currentLanguage = await languageService.getCurrentLanguage(); - final words = currentLanguage.words; - final extraRelatedWords = await getExtraRelatedWords(word); - //TODO make this actually get related words not just the related words on the word - final relatedWords = words.where( - (lw) => word.extraRelatedWordIds.any( - (w) => w == lw.wordId, - ), - ); - return {...extraRelatedWords, ...relatedWords}.toBuiltList(); + Stream> watchFavourites() => + _wordsDao.watchFavourites(_languageId); + + Future> getWordsForIds(List ids) { + if (ids.isEmpty) return Future.value([]); + return _wordsDao.getByIds(_languageId, ids); } - Future> getWordsForIds(BuiltList wordIds) async { - final currentLanguage = await languageService.getCurrentLanguage(); - return currentLanguage.words - .where( - (word) => wordIds.any( - (id) => word.wordId == id, - ), - ) - .toBuiltList(); + Future> getRelatedWords(Word word) { + final ids = {...word.extraRelatedWordIds, ...word.aiSuggestedFollowUps}.toList(); + if (ids.isEmpty) return Future.value([]); + return getWordsForIds(ids); } - void addListener(WordListCallBack wordListCallBack) { - languageService.addListener( - _getWordListCallbackWrapper(wordListCallBack), - ); + Future saveCustomWord(Word word, {Word? original}) { + if (word.isCoreVocabulary && original != null) { + // Only send fields that actually changed relative to the original. + return _mediator.applyWordOverride( + word.wordId, + wordText: word.text != original.text ? word.text : SyncMediator.absent, + phoneticOverride: word.phoneticOverride != original.phoneticOverride + ? word.phoneticOverride + : SyncMediator.absent, + type: word.type != original.type ? word.type.name : SyncMediator.absent, + subType: word.subType != original.subType ? word.subType.name : SyncMediator.absent, + imagePath: word.imagePath != original.imagePath ? word.imagePath : SyncMediator.absent, + ); + } + // Brand-new user-created word — full upsert. + return _mediator.saveWord(word, _languageId); } - void removeListener(WordListCallBack wordListCallBack) { - languageService.removeListener( - _getWordListCallbackWrapper(wordListCallBack), - ); + Future toggleFavourite(Word word) async { + final toggled = !word.isFavourite; + await _mediator.setWordFavourite(word.wordId, isFavourite: toggled); + return word.copyWith(isFavourite: toggled); } - LanguageCallBack _getWordListCallbackWrapper(WordListCallBack wordListCallBack) { - return (language) { - wordListCallBack.call(language.words); - }; + Future deleteCustomWord(String wordId) => + _mediator.deleteWord(wordId); + + Future> searchWords(String query) { + if (query.isEmpty) return Future.value([]); + return _wordsDao.searchWords(_languageId, query); } + + Future> getAllWords() => + _wordsDao.watchAll(_languageId).first; } diff --git a/lib/services/word_usage_service.dart b/lib/services/word_usage_service.dart new file mode 100644 index 0000000..8b562cb --- /dev/null +++ b/lib/services/word_usage_service.dart @@ -0,0 +1,19 @@ +import '../api/models/word_usage.dart'; +import '../database/app_database.dart'; +import 'sync_mediator.dart'; + +class WordUsageService { + WordUsageService(this._wordUsageDao, this._mediator); + + final WordUsageDao _wordUsageDao; + final SyncMediator _mediator; + + /// Call whenever a word tile is tapped. Atomic, works offline. + Future increment(String wordId) => _mediator.incrementWordUsage(wordId); + + /// Stream of the user's most-used words for AI predictions. + Stream> watchTopWords({int limit = 20}) => + _wordUsageDao.watchTopWords(limit: limit); + + Stream> watchAll() => _wordUsageDao.watchAll(); +} diff --git a/lib/simple_aac_app.dart b/lib/simple_aac_app.dart index 29f5046..27d1c13 100644 --- a/lib/simple_aac_app.dart +++ b/lib/simple_aac_app.dart @@ -1,18 +1,22 @@ import 'package:flex_color_scheme/flex_color_scheme.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'l10n/app_localizations.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'dependency_injection_container.dart'; import 'services/navigation_service.dart'; +import 'ui/auth/sign_in_view.dart'; +import 'ui/create_word_group_view.dart'; import 'ui/dashboard/app_shell.dart'; -import 'ui/language_view.dart'; import 'ui/manage_word_view.dart'; import 'ui/settings_view.dart'; +import 'ui/tts_settings_view.dart'; import 'ui/theme/theme_controller.dart'; import 'ui/theme/theme_view.dart'; import 'ui/word_detail_view.dart'; +import 'ui/word_group_detail_view.dart'; +import 'ui/word_groups_view.dart'; final navigatorKey = GlobalKey(); @@ -78,7 +82,13 @@ class _SimpleAACAppState extends State { ManageWordView.routeName: (context) => ManageWordView(), SettingsView.routeName: (context) => SettingsView(), ThemeView.routeName: (context) => ThemeView(), - LanguageView.routeName: (context) => LanguageView(), + TtsSettingsView.routeName: (context) => const TtsSettingsView(), + WordGroupsView.routeName: (context) => const WordGroupsView(), + WordGroupDetailView.routeName: (context) => + const WordGroupDetailView(), + CreateWordGroupView.routeName: (context) => + const CreateWordGroupView(), + SignInView.routeName: (context) => const SignInView(), }, ); } diff --git a/lib/simple_aac_app_wrapper.dart b/lib/simple_aac_app_wrapper.dart index a2755fd..196069d 100644 --- a/lib/simple_aac_app_wrapper.dart +++ b/lib/simple_aac_app_wrapper.dart @@ -1,19 +1,24 @@ import 'dart:async'; import 'package:firebase_core/firebase_core.dart'; -import 'package:firebase_crashlytics/firebase_crashlytics.dart'; +import 'package:firebase_ui_auth/firebase_ui_auth.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:path_provider/path_provider.dart'; -import 'api/hive.dart'; +import 'crash_reporting.dart'; +import 'firebase_options.dart'; + +import 'package:firebase_ui_oauth_google/firebase_ui_oauth_google.dart'; + import 'dependency_injection_container.dart' as di; +import 'services/auth_service.dart'; +import 'services/language_service.dart'; import 'services/shared_preferences_service.dart'; +import 'services/sync_mediator.dart'; import 'simple_aac_app.dart'; import 'ui/theme/theme_builder_widget.dart'; import 'view_models/theme_view_model.dart'; -// ignore: avoid_classes_with_only_static_members class SimpleAACAppWrapper extends StatefulWidget { const SimpleAACAppWrapper({ super.key, @@ -22,47 +27,49 @@ class SimpleAACAppWrapper extends StatefulWidget { final ThemeViewModel themeViewModel; - static void init() async { + static void init() { runZonedGuarded>( () async { WidgetsFlutterBinding.ensureInitialized(); - await initializeFirebase(); - FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError; - if (kDebugMode) { - await FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(false); - } + await Firebase.initializeApp( + options: DefaultFirebaseOptions.currentPlatform, + ); + FirebaseUIAuth.configureProviders([ + GoogleProvider(clientId: '997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com', iOSPreferPlist: true), + ]); + + await setupCrashReporting(); - final appDocumentDir = await getApplicationDocumentsDirectory(); - await initHive(appDocumentDir); await di.init(); await di.allReady(); + // Load language metadata (id, displayName, preview words) from bundled asset. + await di.getIt().init(); + + // Start sync: ensures anonymous auth, seeds core vocab from Firebase, + // and wires up real-time user data listeners. + await di.getIt().start(); + + // Refresh token whenever Firebase issues a new one (e.g. after sign-in). + di.getIt().idTokenChanges.listen((user) async { + if (user != null) await user.getIdToken(); + }); + + // Populate initial data only on first launch. final isFirstTime = await SharedPreferencesService.firstTime; - if(isFirstTime) { - await populateInitialData(); + if (isFirstTime) { + di.getIt().setFirstTime(isFirstTime: false); } - final themeViewModel = di.getIt.get(); + final themeViewModel = di.getIt(); await themeViewModel.init(); - runApp( - SimpleAACAppWrapper( - themeViewModel: themeViewModel, - ), - ); + runApp(SimpleAACAppWrapper(themeViewModel: themeViewModel)); }, - (error, stack) => FirebaseCrashlytics.instance.recordError( - error, - stack, - reason: 'Zoned Error', - ), + (error, stack) => recordZonedError(error, stack), ); } - static Future initializeFirebase() async { - await Firebase.initializeApp(); - } - @override State createState() => _SimpleAACAppWrapperState(); } @@ -72,11 +79,8 @@ class _SimpleAACAppWrapperState extends State { Widget build(BuildContext context) { return ThemeBuilderWidget( themeViewModel: widget.themeViewModel, - themeBuilder: (themeController) { - return SimpleAACApp( - themeController: themeController, - ); - }, + themeBuilder: (themeController) => + SimpleAACApp(themeController: themeController), ); } } diff --git a/lib/ui/auth/sign_in_view.dart b/lib/ui/auth/sign_in_view.dart new file mode 100644 index 0000000..f292f3e --- /dev/null +++ b/lib/ui/auth/sign_in_view.dart @@ -0,0 +1,199 @@ +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:firebase_ui_oauth_google/firebase_ui_oauth_google.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:google_sign_in/google_sign_in.dart'; + +import '../../dependency_injection_container.dart'; +import '../dashboard/app_shell.dart'; +import '../../extensions/build_context_extension.dart'; +import '../../services/auth_service.dart'; +import '../shared_widgets/view_constraint.dart'; +import '../theme/simple_aac_text.dart'; + +class SignInView extends StatefulWidget { + static const String routeName = '/sign-in'; + + const SignInView({super.key}); + + @override + State createState() => _SignInViewState(); +} + +class _SignInViewState extends State { + final _authService = getIt.get(); + final _googleSignIn = GoogleSignIn(); + bool _isLoading = false; + String? _errorMessage; + + Future _handleGoogleSignIn() async { + setState(() { + _isLoading = true; + _errorMessage = null; + }); + + try { + if (kIsWeb) { + await _signInWithGoogleWeb(); + } else { + await _signInWithGoogleNative(); + } + if (mounted) { + if (Navigator.of(context).canPop()) { + Navigator.of(context).pop(); + } else { + Navigator.of(context).pushReplacementNamed(AppShell.routeName); + } + } + } on FirebaseAuthException catch (e) { + setState(() { + _isLoading = false; + _errorMessage = e.message; + }); + } catch (e) { + setState(() { + _isLoading = false; + _errorMessage = e.toString(); + }); + } + } + + /// Web: Firebase's popup flow handles everything natively in the browser. + Future _signInWithGoogleWeb() async { + final provider = GoogleAuthProvider(); + final currentUser = FirebaseAuth.instance.currentUser; + if (currentUser != null && currentUser.isAnonymous) { + try { + await currentUser.linkWithPopup(provider); + } on FirebaseAuthException catch (e) { + if (e.code == 'credential-already-in-use') { + await FirebaseAuth.instance.signInWithPopup(provider); + } else { + rethrow; + } + } + } else { + await FirebaseAuth.instance.signInWithPopup(provider); + } + } + + /// Mobile: use the google_sign_in package to get a credential then hand it + /// to Firebase Auth, linking to the existing anonymous account if present. + Future _signInWithGoogleNative() async { + final googleUser = await _googleSignIn.signIn(); + if (googleUser == null) { + // User cancelled. + setState(() => _isLoading = false); + return; + } + + final googleAuth = await googleUser.authentication; + final credential = GoogleAuthProvider.credential( + accessToken: googleAuth.accessToken, + idToken: googleAuth.idToken, + ); + + final currentUser = FirebaseAuth.instance.currentUser; + if (currentUser != null && currentUser.isAnonymous) { + try { + await currentUser.linkWithCredential(credential); + } on FirebaseAuthException catch (e) { + if (e.code == 'credential-already-in-use') { + await FirebaseAuth.instance.signInWithCredential(credential); + } else { + rethrow; + } + } + } else { + await FirebaseAuth.instance.signInWithCredential(credential); + } + } + + @override + Widget build(BuildContext context) { + final isAnonymous = _authService.isAnonymous; + final colors = context.themeColors; + + return Scaffold( + appBar: AppBar( + title: Text( + 'Sign in', + style: SimpleAACText.subtitle2Style.copyWith( + color: colors.onPrimaryContainer, + ), + ), + ), + body: SafeArea( + child: ViewConstraint( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 32), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + const Spacer(), + Image.asset( + 'assets/images/simple_aac.png', + height: 100, + fit: BoxFit.contain, + ), + const SizedBox(height: 24), + Text( + 'Simple AAC', + textAlign: TextAlign.center, + style: SimpleAACText.h3Style.copyWith( + color: colors.onSurface, + ), + ), + const SizedBox(height: 8), + Text( + isAnonymous + ? 'Sign in with Google to sync your words across\ndevices. Your existing data will be preserved.' + : 'Sign in to access your words across devices.', + textAlign: TextAlign.center, + style: SimpleAACText.body2Style.copyWith( + color: colors.onSurfaceVariant, + ), + ), + const Spacer(), + if (_errorMessage != null) ...[ + Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: colors.errorContainer, + borderRadius: BorderRadius.circular(8), + ), + child: Text( + _errorMessage!, + textAlign: TextAlign.center, + style: SimpleAACText.body3Style.copyWith( + color: colors.onErrorContainer, + ), + ), + ), + const SizedBox(height: 16), + ], + GoogleSignInButton( + clientId: '997985384352-02mb3cdet5u3uoljhr4jmj7i9al610sd.apps.googleusercontent.com', + loadingIndicator: const CircularProgressIndicator.adaptive(), + isLoading: _isLoading, + overrideDefaultTapAction: true, + onTap: _handleGoogleSignIn, + ), + const SizedBox(height: 16), + Text( + 'By signing in you agree to our Terms of Service.', + textAlign: TextAlign.center, + style: SimpleAACText.captionStyle.copyWith( + color: colors.onSurfaceVariant, + ), + ), + const SizedBox(height: 32), + ], + ), + ), + ), + ), + ); + } +} diff --git a/lib/ui/create_word_group_view.dart b/lib/ui/create_word_group_view.dart new file mode 100644 index 0000000..d0eea8c --- /dev/null +++ b/lib/ui/create_word_group_view.dart @@ -0,0 +1,266 @@ +import 'dart:ui'; + +import 'package:flutter/material.dart'; + +import '../api/models/word.dart'; +import '../api/models/word_group.dart'; +import '../api/models/word_type.dart'; +import '../api/models/extensions/word_type_extension.dart'; +import '../dependency_injection_container.dart'; +import '../extensions/build_context_extension.dart'; +import '../extensions/string_extension.dart'; +import '../services/word_group_service.dart'; +import '../view_models/word_group_view_model.dart'; +import 'shared_widgets/app_bar.dart'; +import 'shared_widgets/view_constraint.dart'; +import 'shared_widgets/word_tile.dart'; +import 'word_type_views/word_type_view.dart'; + +class CreateWordGroupViewArguments { + const CreateWordGroupViewArguments({this.existingGroup}); + final WordGroup? existingGroup; +} + +class CreateWordGroupView extends StatefulWidget { + static const routeName = '/create-word-group'; + + const CreateWordGroupView({super.key}); + + @override + State createState() => _CreateWordGroupViewState(); +} + +const _pickerWordTypes = [ + WordType.things, + WordType.actions, + WordType.describe, + WordType.social, + WordType.grammar, +]; + +class _CreateWordGroupViewState extends State { + final _viewModel = getIt.get(); + final _titleController = TextEditingController(); + final _scrollController = ScrollController(); + final List _selectedWords = []; + int _selectedTypeIndex = 0; + + WordGroup? _existingGroup; + bool _isLoading = false; + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + final args = context.routeArguments as CreateWordGroupViewArguments?; + if (args?.existingGroup != null && _existingGroup == null) { + _existingGroup = args!.existingGroup; + _titleController.text = _existingGroup!.title; + _loadExistingWords(_existingGroup!); + } + } + + Future _loadExistingWords(WordGroup group) async { + final words = + await getIt.get().getWordsForGroup(group); + if (mounted) { + setState(() { + _selectedWords.addAll(words); + }); + } + } + + @override + void dispose() { + _titleController.dispose(); + _scrollController.dispose(); + _viewModel.dispose(); + super.dispose(); + } + + void _onWordTapped(Word word) { + setState(() { + final idx = + _selectedWords.indexWhere((w) => w.wordId == word.wordId); + if (idx >= 0) { + _selectedWords.removeAt(idx); + } else { + _selectedWords.add(word); + } + }); + _scrollToEnd(); + } + + void _scrollToEnd() { + const duration = Duration(milliseconds: 200); + Future.delayed(duration).then((_) { + if (_scrollController.hasClients) { + _scrollController.animateTo( + _scrollController.position.maxScrollExtent, + duration: duration, + curve: Curves.fastOutSlowIn, + ); + } + }); + } + + bool get _canSave => + _titleController.text.trim().isNotEmpty && _selectedWords.isNotEmpty; + + Future _save() async { + if (!_canSave) return; + setState(() => _isLoading = true); + final now = DateTime.now(); + final group = WordGroup( + id: _existingGroup?.id ?? 'group_${now.millisecondsSinceEpoch}', + title: _titleController.text.trim(), + wordIds: _selectedWords.map((w) => w.wordId).toList(), + createdDate: _existingGroup?.createdDate ?? now, + ); + await _viewModel.save(group); + if (mounted) Navigator.of(context).pop(group); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: SimpleAACAppBar( + label: _existingGroup == null ? 'New Group' : 'Edit Group', + actions: [ + ValueListenableBuilder( + valueListenable: _titleController, + builder: (context, _, __) => TextButton( + onPressed: _canSave && !_isLoading ? _save : null, + child: const Text('Save'), + ), + ), + ], + ), + body: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + _buildTitleField(), + _buildSentenceBar(), + const Divider(height: 1), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + WordTypeView( + key: ValueKey(_selectedTypeIndex), + wordType: _pickerWordTypes[_selectedTypeIndex], + wordTapCallBack: _onWordTapped, + selectedWordIds: + _selectedWords.map((w) => w.wordId).toSet(), + ), + ], + ), + ), + _buildTypeSelector(), + ], + ), + ); + } + + Widget _buildTitleField() { + return ViewConstraint( + child: Padding( + padding: const EdgeInsets.fromLTRB(16, 12, 16, 8), + child: TextField( + controller: _titleController, + textCapitalization: TextCapitalization.sentences, + decoration: InputDecoration( + hintText: 'Group name…', + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(8), + ), + contentPadding: + const EdgeInsets.symmetric(horizontal: 12, vertical: 10), + isDense: true, + ), + onChanged: (_) => setState(() {}), + ), + ), + ); + } + + Widget _buildSentenceBar() { + if (_selectedWords.isEmpty) { + return SizedBox( + height: 100, + child: Center( + child: Text( + 'Tap words below to build your sentence', + style: TextStyle(color: context.themeColors.onSurface.withOpacity(0.4)), + ), + ), + ); + } + return SizedBox( + height: 160, + child: ReorderableListView.builder( + scrollDirection: Axis.horizontal, + buildDefaultDragHandles: false, + proxyDecorator: _proxyDecorator, + scrollController: _scrollController, + padding: const EdgeInsets.fromLTRB(8, 8, 8, 8), + itemCount: _selectedWords.length, + onReorder: (oldIndex, newIndex) { + setState(() { + if (newIndex > oldIndex) newIndex--; + final word = _selectedWords.removeAt(oldIndex); + _selectedWords.insert(newIndex, word); + }); + }, + itemBuilder: (context, index) { + final word = _selectedWords[index]; + return WordTile( + key: ValueKey('sentence-${word.wordId}'), + word: word, + closeButtonOnTap: (_) => + setState(() => _selectedWords.removeAt(index)), + hasReOrderButton: true, + reorderIndex: index, + ); + }, + ), + ); + } + + Widget _proxyDecorator( + Widget child, int index, Animation animation) { + return AnimatedBuilder( + animation: animation, + builder: (context, child) { + final elevation = lerpDouble( + 0, + 8, + Curves.easeInOut.transform(animation.value), + )!; + return Material( + elevation: elevation, + color: Colors.transparent, + shadowColor: Colors.grey.withOpacity(0.1), + child: child, + ); + }, + child: child, + ); + } + + Widget _buildTypeSelector() { + return BottomNavigationBar( + type: BottomNavigationBarType.fixed, + showUnselectedLabels: false, + currentIndex: _selectedTypeIndex, + onTap: (i) => setState(() => _selectedTypeIndex = i), + items: _pickerWordTypes + .map( + (e) => BottomNavigationBarItem( + icon: Icon(e.getIcon()), + label: e.name.capitalize(), + ), + ) + .toList(), + ); + } +} diff --git a/lib/ui/dashboard/app_shell.dart b/lib/ui/dashboard/app_shell.dart index 70b6ea3..6f3a73e 100644 --- a/lib/ui/dashboard/app_shell.dart +++ b/lib/ui/dashboard/app_shell.dart @@ -1,10 +1,16 @@ -import 'package:built_collection/built_collection.dart'; import 'package:flutter/material.dart'; import 'package:flutter_speed_dial/flutter_speed_dial.dart'; +import 'package:shimmer/shimmer.dart'; +import '../../api/models/extensions/word_type_extension.dart'; import '../../api/models/word.dart'; +import '../../api/models/word_sub_type.dart'; import '../../api/models/word_type.dart'; import '../../dependency_injection_container.dart'; +import '../../extensions/build_context_extension.dart'; +import '../../extensions/iterable_extension.dart'; +import '../../extensions/media_query_extension.dart'; +import '../../services/image_path_service.dart'; import '../../extensions/string_extension.dart'; import '../../flavors.dart'; import '../../services/shared_preferences_service.dart'; @@ -12,8 +18,14 @@ import '../../view_models/selected_words_view_model.dart'; import '../intro/intro_page.dart'; import '../manage_word_view.dart'; import '../settings_view.dart'; +import '../create_word_group_view.dart'; +import '../word_groups_view.dart'; +import '../search/word_search_delegate.dart'; import '../shared_widgets/app_bar.dart'; +import '../shared_widgets/simple_aac_chip.dart'; +import '../shared_widgets/word_image.dart'; import '../theme/simple_aac_text.dart'; +import '../word_type_views/group_word_view.dart'; import '../word_type_views/word_type_view.dart'; import 'related_words_widget.dart'; import 'sentence_widget.dart'; @@ -41,12 +53,13 @@ class _AppShellState extends State { final selectedWordsViewModel = getIt.get(); var _selectedIndex = 0; + WordSubType? _pendingSubType; @override void initState() { super.initState(); selectedWordsViewModel.selectedWords.listen((value) { - print('selectedWordsStream WORD $value'); + print('selectedWordsStream WORD ${value.map((s) => s.word)}'); }); selectedWordsViewModel.relatedWords.listen((value) { print('predictionsForSelectedWord WORD $value'); @@ -84,13 +97,14 @@ class _AppShellState extends State { crossAxisAlignment: CrossAxisAlignment.stretch, children: [ _buildHeroHolder(), - WordType.values - .map( - (wordType) => WordTypeView( - wordType: wordType, - ), - ) - .elementAt(_selectedIndex) + if (_selectedIndex >= WordType.values.length) + const Expanded(child: GroupWordView()) + else + WordTypeView( + key: ValueKey('$_selectedIndex-$_pendingSubType'), + wordType: WordType.values[_selectedIndex], + initialSubType: _pendingSubType, + ), ], ); } @@ -103,13 +117,19 @@ class _AppShellState extends State { children: [ SentenceWidget(), _buildRelatedWords(), + _buildAiPredictions(), ], ), Positioned.fill( child: Align( alignment: Alignment.bottomRight, child: Padding( - padding: const EdgeInsets.all(16.0), + padding: EdgeInsets.only( + right: context.isWideScreen + ? MediaQuery.of(context).minContentWidthInset + 16 + : 16, + bottom: 16, + ), child: _buildPlaySentenceActionButton(), ), ), @@ -119,10 +139,10 @@ class _AppShellState extends State { } Widget _buildRelatedWords() { - return StreamBuilder>( + return StreamBuilder>( stream: selectedWordsViewModel.relatedWords, builder: (context, snapshot) { - final relatedWords = snapshot.data ?? BuiltList(); + final relatedWords = snapshot.data ?? []; return SizedBox( height: 48, child: RelatedWordsWidget( @@ -135,59 +155,173 @@ class _AppShellState extends State { ); } - Widget _buildPlaySentenceActionButton() { - return Hero( - tag: kPlayButtonHeroTag, - transitionOnUserGestures: true, - child: FloatingActionButton( - heroTag: null, - onPressed: () {}, - child: const Icon( - Icons.play_arrow, - ), + Widget _buildAiPredictions() { + return ListenableBuilder( + listenable: sharedPreferences, + builder: (context, _) { + if (!sharedPreferences.aiPredictionsEnabled) return const SizedBox.shrink(); + return StreamBuilder>( + stream: selectedWordsViewModel.selectedWords, + builder: (context, sentenceSnap) { + final hasWords = sentenceSnap.data?.isNotEmpty ?? false; + if (!hasWords) return const SizedBox.shrink(); + return StreamBuilder?>( + stream: selectedWordsViewModel.aiPredictions, + builder: (context, predSnap) { + final predictions = predSnap.data; // null=loading, []=no results, [...]= results + return _buildAiRow(context, predictions); + }, + ); + }, + ); + }, + ); + } + + Widget _buildAiRow(BuildContext context, List? predictions) { + return SizedBox( + height: 48, + child: Row( + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 8), + child: Icon( + Icons.auto_awesome_rounded, + size: 16, + color: context.themeColors.primary.withOpacity(0.7), + ), + ), + Expanded( + child: predictions == null + ? _buildAiLoadingShimmer(context) + : predictions.isEmpty + ? Align( + alignment: Alignment.centerLeft, + child: Text( + 'No AI predictions', + style: TextStyle( + color: context.themeColors.onSurface.withOpacity(0.4), + fontSize: 13, + ), + ), + ) + : ListView.separated( + scrollDirection: Axis.horizontal, + padding: const EdgeInsets.only(right: 96), + itemCount: predictions.length, + separatorBuilder: (_, __) => const SizedBox(width: 8), + itemBuilder: (context, index) { + final word = predictions[index]; + return SimpleAACChip( + label: word.text, + icon: ClipOval( + child: WordImage( + imagePath: getIt().resolve(word), + width: 24, + height: 24, + fit: BoxFit.cover, + ), + ), + chipType: ChipType.normal, + onTap: () => selectedWordsViewModel.addSelectedWord(word), + ); + }, + ), + ), + ], ), ); } - Widget _buildAddWordActionButton() { - return SpeedDial( - spaceBetweenChildren: 4, - buttonSize: const Size(48, 48), - childrenButtonSize: const Size(46, 46), - spacing: 4, - children: [ - SpeedDialChild( - onTap: () { - Navigator.of(context).pushNamed( - ManageWordView.routeName, - arguments: ManageWordViewArguments(), - ); - }, - child: const FloatingActionButton( - onPressed: null, - heroTag: null, - child: Icon(Icons.add), + Widget _buildAiLoadingShimmer(BuildContext context) { + final base = context.themeColors.surfaceContainerHighest; + final highlight = context.themeColors.surfaceContainerLow; + return Shimmer.fromColors( + baseColor: base, + highlightColor: highlight, + child: ListView.separated( + scrollDirection: Axis.horizontal, + padding: const EdgeInsets.symmetric(vertical: 8), + itemCount: 4, + separatorBuilder: (_, __) => const SizedBox(width: 8), + itemBuilder: (_, __) => Container( + width: 72, + height: 32, + decoration: BoxDecoration( + color: base, + borderRadius: BorderRadius.circular(16), ), ), - SpeedDialChild( - onTap: () { - Navigator.of(context).pushNamed( - ManageWordView.routeName, - arguments: ManageWordViewArguments( - word: null, - ), - ); - }, - child: const FloatingActionButton( - onPressed: null, + ), + ); + } + + Widget _buildPlaySentenceActionButton() { + return StreamBuilder( + stream: selectedWordsViewModel.isSpeaking, + builder: (context, snapshot) { + final speaking = snapshot.data ?? false; + return Hero( + tag: kPlayButtonHeroTag, + transitionOnUserGestures: true, + child: FloatingActionButton( heroTag: null, - child: Icon(Icons.group_add_rounded), + onPressed: selectedWordsViewModel.toggleSpeak, + child: AnimatedSwitcher( + duration: const Duration(milliseconds: 200), + child: Icon( + speaking ? Icons.stop_rounded : Icons.play_arrow_rounded, + key: ValueKey(speaking), + ), + ), ), - ), - ], - useRotationAnimation: true, - icon: Icons.add, - activeIcon: Icons.close, + ); + }, + ); + } + + Widget _buildAddWordActionButton() { + final isWideScreen = context.isWideScreen; + final rightPadding = MediaQuery.of(context).minContentWidthInset; + return Padding( + padding: EdgeInsets.only( + right: isWideScreen ? rightPadding : 0, + ), + child: SpeedDial( + spaceBetweenChildren: 4, + buttonSize: const Size(48, 48), + childrenButtonSize: const Size(46, 46), + spacing: 4, + children: [ + SpeedDialChild( + label: 'Add group', + child: const Icon(Icons.playlist_add), + onTap: () => Navigator.of(context).pushNamed( + CreateWordGroupView.routeName, + arguments: const CreateWordGroupViewArguments(), + ), + ), + SpeedDialChild( + label: 'Add word', + child: const Icon(Icons.add_photo_alternate_outlined), + onTap: () async { + final word = await Navigator.of(context).pushNamed( + ManageWordView.routeName, + arguments: ManageWordViewArguments(), + ) as Word?; + if (word != null && mounted) { + setState(() { + _selectedIndex = WordType.values.indexOf(word.type); + _pendingSubType = word.subType; + }); + } + }, + ), + ], + useRotationAnimation: true, + icon: Icons.add, + activeIcon: Icons.close, + ), ); } @@ -214,9 +348,13 @@ class _AppShellState extends State { return IconButton( padding: EdgeInsets.zero, visualDensity: VisualDensity.compact, - onPressed: () {}, - icon: const Icon( - Icons.search_rounded, + icon: const Icon(Icons.search_rounded), + onPressed: () => showSearch( + context: context, + delegate: WordSearchDelegate( + getIt.get(), + selectedWordsViewModel, + ), ), ); } @@ -239,14 +377,18 @@ class _AppShellState extends State { } List _bottomNavigationBarItems() { - return WordType.values - .map( - (e) => BottomNavigationBarItem( - icon: const Icon(Icons.add), - label: e.name.capitalize(), - ), - ) - .toList(); + return [ + ...WordType.values.map( + (e) => BottomNavigationBarItem( + icon: Icon(e.getIcon()), + label: e.name.capitalize(), + ), + ), + const BottomNavigationBarItem( + icon: Icon(Icons.playlist_play_rounded), + label: 'Groups', + ), + ]; } Widget _buildMenuButton() { @@ -254,6 +396,8 @@ class _AppShellState extends State { onSelected: (index) { if (index == 0) { Navigator.of(context).pushNamed(SettingsView.routeName); + } else if (index == 1) { + Navigator.of(context).pushNamed(WordGroupsView.routeName); } }, itemBuilder: (context) { @@ -266,6 +410,14 @@ class _AppShellState extends State { Icons.settings, ), ), + PopupMenuItem( + value: 1, + child: _buildMenuItem( + context, + 'My groups', + Icons.playlist_play_rounded, + ), + ), PopupMenuItem( onTap: () {}, child: _buildMenuItem( diff --git a/lib/ui/dashboard/related_words_widget.dart b/lib/ui/dashboard/related_words_widget.dart index e9ccd62..db5d802 100644 --- a/lib/ui/dashboard/related_words_widget.dart +++ b/lib/ui/dashboard/related_words_widget.dart @@ -1,29 +1,29 @@ -import 'package:built_collection/built_collection.dart'; -import 'package:change_notifier_builder/change_notifier_builder.dart'; import 'package:flutter/material.dart'; import '../../api/models/word.dart'; import '../../dependency_injection_container.dart'; import '../../extensions/iterable_extension.dart'; +import '../../services/image_path_service.dart'; import '../../services/shared_preferences_service.dart'; import '../shared_widgets/chip_group.dart'; import '../shared_widgets/simple_aac_chip.dart'; -import '../shared_widgets/word_tile.dart'; +import '../shared_widgets/word_image.dart'; -typedef WordListCallBack = void Function(BuiltList word); -typedef WordIDListCallBack = void Function(BuiltList word); +typedef WordCallBack = void Function(Word word); +typedef WordListCallback = void Function(List words); +typedef WordIDListCallback = void Function(List ids); class RelatedWordsWidget extends StatelessWidget { RelatedWordsWidget({ - Key? key, + super.key, required this.relatedWords, required this.onRelatedWordSelected, this.onRelatedWordIdsChanged, this.isExpanded = false, - }) : super(key: key); + }); - final BuiltList relatedWords; - final WordIDListCallBack? onRelatedWordIdsChanged; + final List relatedWords; + final WordIDListCallback? onRelatedWordIdsChanged; final WordCallBack onRelatedWordSelected; final bool isExpanded; @@ -31,15 +31,15 @@ class RelatedWordsWidget extends StatelessWidget { @override Widget build(BuildContext context) { - return ChangeNotifierBuilder( - notifier: _sharedPreferencesService, - builder: (context, _, __) { - final hasRelatedWordsEnabled = _sharedPreferencesService.hasRelatedWordsEnabled; - if (hasRelatedWordsEnabled) { - return isExpanded ? _buildExpandedChipGroup() : _buildRelatedWordListView(); - } else { - return const SizedBox(); + return ListenableBuilder( + listenable: _sharedPreferencesService, + builder: (context, _) { + if (!_sharedPreferencesService.hasRelatedWordsEnabled) { + return const SizedBox.shrink(); } + return isExpanded + ? _buildExpandedChipGroup() + : _buildRelatedWordListView(); }, ); } @@ -47,81 +47,53 @@ class RelatedWordsWidget extends StatelessWidget { Widget _buildRelatedWordListView() { return ListView.separated( shrinkWrap: true, - padding: const EdgeInsets.only( - left: 4, - right: 96, - ), + padding: const EdgeInsets.only(left: 16, right: 96), scrollDirection: Axis.horizontal, itemCount: relatedWords.length, itemBuilder: (context, index) { final word = relatedWords[index]; - return _buildRelatedWordChip( - word, - onDeleteWordFunction(word), - ); - }, - separatorBuilder: (context, index) { - return const SizedBox( - width: 12, - ); + return _buildRelatedWordChip(word, _onDeleteWord(word)); }, + separatorBuilder: (_, __) => const SizedBox(width: 12), ); } Widget _buildExpandedChipGroup() { return ChipGroup( chips: relatedWords - .map( - (word) => _buildRelatedWordChip( - word, - onDeleteWordFunction(word), - ), - ) + .map((word) => _buildRelatedWordChip(word, _onDeleteWord(word))) .toList(), ); } - Widget _buildRelatedWordChip( - Word word, - VoidCallback? onDelete, - ) { + Widget _buildRelatedWordChip(Word word, VoidCallback? onDelete) { return SimpleAACChip( - label: word.word, - icon: Padding( - padding: const EdgeInsets.all(4.0), - child: ClipOval( - clipBehavior: Clip.hardEdge, - child: Image.asset( - word.imageList.firstOrNull() ?? 'assets/images/simple_aac_white_background.png', - fit: BoxFit.contain, - ), - ), + label: word.text, + icon: ClipOval( + child: _buildWordImage(word), ), chipType: ChipType.normal, - onTap: () { - onRelatedWordSelected.call(word); - }, + onTap: () => onRelatedWordSelected(word), onDelete: onDelete, ); } - VoidCallback? onDeleteWordFunction( - Word word, - ) { - final onDeleteWord = onRelatedWordIdsChanged; - if (onDeleteWord != null) { - return () { - onDeleteWord.call( - relatedWords - .rebuild( - (pb) => pb.remove(word), - ) - .map((p0) => p0.wordId) - .toBuiltList(), - ); - }; - } else { - return null; - } + Widget _buildWordImage(Word word) => WordImage( + imagePath: getIt().resolve(word), + fit: BoxFit.cover, + width: 24, + height: 24, + ); + + VoidCallback? _onDeleteWord(Word word) { + final callback = onRelatedWordIdsChanged; + if (callback == null) return null; + return () { + final remaining = relatedWords + .where((w) => w.wordId != word.wordId) + .map((w) => w.wordId) + .toList(); + callback(remaining); + }; } } diff --git a/lib/ui/dashboard/sentence_builder.dart b/lib/ui/dashboard/sentence_builder.dart new file mode 100644 index 0000000..cbd0e18 --- /dev/null +++ b/lib/ui/dashboard/sentence_builder.dart @@ -0,0 +1,94 @@ +import '../../api/models/word_sub_type.dart'; +import '../../view_models/selected_words_view_model.dart'; + +/// One "spoken token" in the sentence — may represent multiple tiles. +/// e.g. ["mom", "s"] → SpeechGroup(spokenText:"moms", slotIds:[0,1]) +class SpeechGroup { + const SpeechGroup({ + required this.spokenText, + required this.slotIds, + required this.charStart, + required this.charEnd, + }); + + /// What the TTS engine will speak for this token. + final String spokenText; + + /// SlotIds of all tiles that highlight together during this token. + final List slotIds; + + /// Inclusive character start in [SentencePlan.ttsText]. + final int charStart; + + /// Exclusive character end in [SentencePlan.ttsText]. + final int charEnd; +} + +class SentencePlan { + const SentencePlan({required this.ttsText, required this.groups}); + + /// Full text sent to the TTS engine. + final String ttsText; + + /// Groups in sentence order, with character ranges set. + final List groups; +} + +class SentenceBuilder { + SentenceBuilder._(); + + /// Converts a slot list into a [SentencePlan]: + /// - Suffix words (subType == WordSubType.suffix) are appended to the + /// preceding word without a space, e.g. "mom"+"s" → "moms". + /// - Both tiles in such a merge are highlighted simultaneously. + static SentencePlan build(List slots) { + // Phase 1: group slots — collect (spokenText, slotIds) pairs. + final raw = <({String text, List ids})>[]; + + for (final slot in slots) { + final isSuffix = slot.word.subType == WordSubType.suffix; + if (isSuffix && raw.isNotEmpty) { + final prev = raw.removeLast(); + raw.add(( + text: prev.text + slot.word.text, + ids: [...prev.ids, slot.slotId], + )); + } else { + raw.add((text: slot.word.text, ids: [slot.slotId])); + } + } + + // Phase 2: build ttsText and calculate character ranges. + final buffer = StringBuffer(); + final groups = []; + + for (var i = 0; i < raw.length; i++) { + final entry = raw[i]; + final start = buffer.length; + buffer.write(entry.text); + final end = buffer.length; + if (i < raw.length - 1) buffer.write(' '); + + groups.add(SpeechGroup( + spokenText: entry.text, + slotIds: entry.ids, + charStart: start, + charEnd: end, + )); + } + + return SentencePlan(ttsText: buffer.toString(), groups: groups); + } + + /// Returns the slot IDs that should be highlighted for the token whose + /// spoken text starts at [charOffset] in [plan.ttsText]. + /// Returns an empty set if no match. + static Set findSlotIdsAtOffset(SentencePlan plan, int charOffset) { + for (final group in plan.groups) { + if (charOffset >= group.charStart && charOffset < group.charEnd) { + return group.slotIds.toSet(); + } + } + return {}; + } +} diff --git a/lib/ui/dashboard/sentence_widget.dart b/lib/ui/dashboard/sentence_widget.dart index d513834..1978c08 100644 --- a/lib/ui/dashboard/sentence_widget.dart +++ b/lib/ui/dashboard/sentence_widget.dart @@ -1,129 +1,155 @@ +import 'dart:async'; import 'dart:ui'; -import 'package:built_collection/built_collection.dart'; import 'package:flutter/material.dart'; +import 'package:rxdart/rxdart.dart'; import '../../api/models/extensions/word_extension.dart'; -import '../../api/models/word.dart'; import '../../dependency_injection_container.dart'; import '../../view_models/selected_words_view_model.dart'; import '../shared_widgets/word_tile.dart'; class SentenceWidget extends StatefulWidget { + const SentenceWidget({super.key}); + @override State createState() => _SentenceWidgetState(); } class _SentenceWidgetState extends State { - final selectedWordsViewModel = getIt.get(); - final scrollController = ScrollController(); + final _viewModel = getIt.get(); + final _scrollController = ScrollController(); + + /// GlobalKey per slot — lets Scrollable.ensureVisible locate each tile. + final _tileKeys = {}; + + late final Stream<(List, Set)> _combined; + late final StreamSubscription _speakingSub; + late final StreamSubscription> _highlightSub; + late final StreamSubscription> _wordsSub; @override void initState() { super.initState(); - WidgetsBinding.instance.addPostFrameCallback( - (_) { - _addSelectedFilterListener(); - }, + + _combined = CombineLatestStream.combine2( + _viewModel.selectedWords, + _viewModel.highlightedSlotIds, + (slots, ids) => (slots, ids), ); - } - void _addSelectedFilterListener() { - const duration = Duration(milliseconds: 200); - selectedWordsViewModel.selectedWords.listen( - (selectedTypes) { - Future.delayed(duration).then( - (value) { - if (scrollController.hasClients) { - scrollController.animateTo( - scrollController.position.maxScrollExtent, - duration: duration, - curve: Curves.fastOutSlowIn, - ); - } - }, + // Scroll to start when playback begins. + _speakingSub = _viewModel.isSpeaking.distinct().listen((speaking) { + if (speaking && _scrollController.hasClients) { + _scrollController.animateTo( + 0, + duration: const Duration(milliseconds: 300), + curve: Curves.easeOut, ); - }, - ); + } + }); + + // Keep the active word visible while speaking. + _highlightSub = _viewModel.highlightedSlotIds.listen((ids) { + if (ids.isEmpty) return; + final key = _tileKeys[ids.first]; + final ctx = key?.currentContext; + if (ctx != null) { + Scrollable.ensureVisible( + ctx, + duration: const Duration(milliseconds: 200), + curve: Curves.easeInOut, + alignment: 0.0, + ); + } + }); + + // Scroll to end when a new word is added (only when not speaking). + _wordsSub = _viewModel.selectedWords.listen((_) { + if (_viewModel.isSpeakingNow) return; + const duration = Duration(milliseconds: 200); + Future.delayed(duration).then((_) { + if (_scrollController.hasClients) { + _scrollController.animateTo( + _scrollController.position.maxScrollExtent, + duration: duration, + curve: Curves.fastOutSlowIn, + ); + } + }); + }); + } + + @override + void dispose() { + _speakingSub.cancel(); + _highlightSub.cancel(); + _wordsSub.cancel(); + _scrollController.dispose(); + super.dispose(); } @override Widget build(BuildContext context) { - return StreamBuilder>( - stream: selectedWordsViewModel.selectedWords, + return StreamBuilder<(List, Set)>( + stream: _combined, builder: (context, snapshot) { - final words = snapshot.data ?? BuiltList(); + final slots = snapshot.data?.$1 ?? []; + final highlightedIds = snapshot.data?.$2 ?? {}; return SizedBox( height: 150, - child: words.isEmpty - ? const Center( - child: Text( - 'EMPTY SENTENCE', - ), - ) - : _buildListView(words), + child: slots.isEmpty + ? const Center(child: Text('EMPTY SENTENCE')) + : _buildListView(slots, highlightedIds), ); }, ); } - Widget _buildListView( - BuiltList words, - ) { + Widget _buildListView(List slots, Set highlightedIds) { return ReorderableListView.builder( scrollDirection: Axis.horizontal, + buildDefaultDragHandles: false, proxyDecorator: _proxyDecorator, - itemCount: words.length, - onReorder: selectedWordsViewModel.updatePositionSelectedWordList, + itemCount: slots.length, + onReorder: _viewModel.updatePositionSelectedWordList, padding: const EdgeInsets.fromLTRB(8, 8, 64, 8), - scrollController: scrollController, + scrollController: _scrollController, itemBuilder: (context, index) { - return _buildWordTile( - words[index], - index, + final slot = slots[index]; + final tileKey = _tileKeys.putIfAbsent(slot.slotId, GlobalKey.new); + return WordTile( + key: tileKey, + word: slot.word, + heroTag: slot.word.getHeroTag('sentence-${slot.slotId}-'), + isHighlighted: highlightedIds.contains(slot.slotId), + closeButtonOnTap: (word) => + _viewModel.removeSelectedWord(word, slot.slotId), + closeButtonOnLongPress: (_) => _viewModel.clearSelectedWordList(), + hasReOrderButton: true, + reorderIndex: index, ); }, ); } - Widget _proxyDecorator( - Widget child, - int index, - Animation animation, - ) { + Widget _proxyDecorator(Widget child, int index, Animation animation) { return AnimatedBuilder( animation: animation, builder: (context, child) { - final animValue = Curves.easeInOut.transform( - animation.value, - ); - final elevation = lerpDouble(0, 8, animValue)!; + final elevation = lerpDouble( + 0, + 8, + Curves.easeInOut.transform(animation.value), + )!; return Material( elevation: elevation, color: Colors.transparent, - shadowColor: Colors.grey.withOpacity( - 0.1, - ), + shadowColor: Colors.grey.withOpacity(0.1), child: child, ); }, child: child, ); } - - Widget _buildWordTile( - Word word, - int index, - ) { - return WordTile( - key: ValueKey(index), - word: word, - heroTag: word.getHeroTag('sentence-$index-'), - closeButtonOnTap: selectedWordsViewModel.removeSelectedWord, - closeButtonOnLongPress: (_) { - selectedWordsViewModel.clearSelectedWordList(); - }, - hasReOrderButton: true, - ); - } } diff --git a/lib/ui/draw_word_view.dart b/lib/ui/draw_word_view.dart new file mode 100644 index 0000000..2f9f2ff --- /dev/null +++ b/lib/ui/draw_word_view.dart @@ -0,0 +1,265 @@ +import 'dart:convert'; +import 'dart:typed_data'; +import 'dart:ui' as ui; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; +import 'package:image_picker/image_picker.dart'; + +import '../dependency_injection_container.dart'; +import '../utils/native_file_utils.dart'; +import 'shared_widgets/my_custom_painter.dart'; + +class DrawWordView extends StatefulWidget { + const DrawWordView({super.key}); + + static Future show(BuildContext context) { + return Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => const DrawWordView(), + fullscreenDialog: true, + ), + ); + } + + @override + State createState() => _DrawWordViewState(); +} + +class _DrawWordViewState extends State { + final _repaintKey = GlobalKey(); + final _picker = getIt.get(); + final List> _strokes = []; + List _currentStroke = []; + XFile? _backgroundImage; + + Color _selectedColor = Colors.black; + double _strokeWidth = 4; + + static const _colors = [ + Colors.black, + Colors.red, + Colors.orange, + Colors.yellow, + Colors.green, + Colors.blue, + Colors.purple, + Colors.pink, + Colors.brown, + Colors.white, + ]; + + static const _strokeWidths = [2.0, 4.0, 8.0, 14.0]; + + List get _allPoints { + final points = []; + for (final stroke in _strokes) { + points.addAll(stroke); + points.add(null); // separator + } + return points; + } + + void _onPanStart(DragStartDetails d) { + _currentStroke = [d.localPosition]; + setState(() {}); + } + + void _onPanUpdate(DragUpdateDetails d) { + _currentStroke.add(d.localPosition); + setState(() {}); + } + + void _onPanEnd(DragEndDetails _) { + _strokes.add([..._currentStroke, null]); + _currentStroke = []; + setState(() {}); + } + + void _undo() { + if (_strokes.isNotEmpty) setState(() => _strokes.removeLast()); + } + + void _clear() => setState(() { + _strokes.clear(); + _currentStroke = []; + }); + + Future _pickBackground(ImageSource source) async { + final file = await _picker.pickImage(source: source, imageQuality: 100); + if (file != null) setState(() => _backgroundImage = file); + } + + Future _save() async { + final boundary = _repaintKey.currentContext!.findRenderObject() as RenderRepaintBoundary; + final image = await boundary.toImage(pixelRatio: 3.0); + final byteData = await image.toByteData(format: ui.ImageByteFormat.png); + if (byteData == null) return; + final pngBytes = byteData.buffer.asUint8List(); + + if (kIsWeb) { + final dataUrl = 'data:image/png;base64,${base64Encode(pngBytes)}'; + if (mounted) Navigator.of(context).pop(dataUrl); + } else { + final path = await savePngBytesToTemp(pngBytes); + if (mounted) Navigator.of(context).pop(path); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text('Draw'), + actions: [ + IconButton(icon: const Icon(Icons.undo), onPressed: _strokes.isEmpty ? null : _undo), + IconButton(icon: const Icon(Icons.delete_outline), onPressed: _strokes.isEmpty ? null : _clear), + FilledButton( + onPressed: _strokes.isEmpty ? null : _save, + child: const Text('Done'), + ), + const SizedBox(width: 8), + ], + ), + body: Column( + children: [ + Expanded( + child: GestureDetector( + onPanStart: _onPanStart, + onPanUpdate: _onPanUpdate, + onPanEnd: _onPanEnd, + child: RepaintBoundary( + key: _repaintKey, + child: Stack( + fit: StackFit.expand, + children: [ + _backgroundImage != null + ? FutureBuilder( + future: _backgroundImage!.readAsBytes(), + builder: (_, snap) => snap.hasData + ? Image.memory(snap.data!, fit: BoxFit.cover) + : const ColoredBox(color: Colors.white), + ) + : const ColoredBox(color: Colors.white), + CustomPaint( + painter: MyCustomPainter( + [..._allPoints, ..._currentStroke], + color: _selectedColor, + strokeWidth: _strokeWidth, + hasBackground: _backgroundImage != null, + ), + child: const SizedBox.expand(), + ), + ], + ), + ), + ), + ), + _buildToolbar(), + ], + ), + ); + } + + Widget _buildToolbar() { + return SafeArea( + child: Container( + color: Theme.of(context).colorScheme.surfaceContainerLow, + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + _buildColorRow(), + const SizedBox(height: 8), + _buildStrokeRow(), + const SizedBox(height: 8), + _buildBackgroundRow(), + ], + ), + ), + ); + } + + Widget _buildColorRow() { + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: _colors.map((color) { + final selected = _selectedColor == color; + return GestureDetector( + onTap: () => setState(() => _selectedColor = color), + child: AnimatedContainer( + duration: const Duration(milliseconds: 150), + margin: const EdgeInsets.symmetric(horizontal: 4), + width: selected ? 34 : 28, + height: selected ? 34 : 28, + decoration: BoxDecoration( + color: color, + shape: BoxShape.circle, + border: Border.all( + color: selected ? Theme.of(context).colorScheme.primary : Colors.grey.shade400, + width: selected ? 3 : 1, + ), + ), + ), + ); + }).toList(), + ); + } + + Widget _buildBackgroundRow() { + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + OutlinedButton.icon( + onPressed: () => _pickBackground(ImageSource.gallery), + icon: const Icon(Icons.photo_library_rounded, size: 18), + label: const Text('Background from gallery'), + ), + if (_backgroundImage != null) ...[ + const SizedBox(width: 8), + IconButton( + tooltip: 'Remove background', + icon: const Icon(Icons.close), + onPressed: () => setState(() => _backgroundImage = null), + ), + ], + ], + ); + } + + Widget _buildStrokeRow() { + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: _strokeWidths.map((width) { + final selected = _strokeWidth == width; + return GestureDetector( + onTap: () => setState(() => _strokeWidth = width), + child: AnimatedContainer( + duration: const Duration(milliseconds: 150), + margin: const EdgeInsets.symmetric(horizontal: 8), + width: 36, + height: 36, + decoration: BoxDecoration( + shape: BoxShape.circle, + border: Border.all( + color: selected ? Theme.of(context).colorScheme.primary : Colors.transparent, + width: 2, + ), + ), + child: Center( + child: Container( + width: width * 1.8, + height: width * 1.8, + decoration: BoxDecoration( + color: _selectedColor == Colors.white ? Colors.grey : _selectedColor, + shape: BoxShape.circle, + ), + ), + ), + ), + ); + }).toList(), + ); + } +} diff --git a/lib/ui/intro/intro_view.dart b/lib/ui/intro/intro_view.dart index 2baaa5e..c8745a2 100644 --- a/lib/ui/intro/intro_view.dart +++ b/lib/ui/intro/intro_view.dart @@ -66,7 +66,6 @@ class IntroView extends StatelessWidget { width: 200, child: RoundedButton( label: actionButtonLabel ?? '', - fillColor: actionButtonFillColor, onPressed: actionButtonCallback, ), ), diff --git a/lib/ui/language_view.dart b/lib/ui/language_view.dart index 479f810..a315af7 100644 --- a/lib/ui/language_view.dart +++ b/lib/ui/language_view.dart @@ -1,15 +1,13 @@ -import 'package:built_collection/built_collection.dart'; -import 'package:change_notifier_builder/change_notifier_builder.dart'; import 'package:flutter/material.dart'; -import 'package:simple_aac/api/models/word.dart'; -import 'package:simple_aac/ui/shared_widgets/app_bar.dart'; -import 'package:simple_aac/ui/shared_widgets/expansion_card.dart'; -import 'package:simple_aac/ui/shared_widgets/simple_aac_loading_widget.dart'; -import 'package:simple_aac/ui/shared_widgets/word_tile.dart'; import '../api/models/language.dart'; +import '../api/models/word.dart'; import '../dependency_injection_container.dart'; import '../view_models/language_view_model.dart'; +import 'shared_widgets/app_bar.dart'; +import 'shared_widgets/expansion_card.dart'; +import 'shared_widgets/simple_aac_loading_widget.dart'; +import 'shared_widgets/word_tile.dart'; class LanguageView extends StatefulWidget { static const String routeName = '/language'; @@ -19,55 +17,32 @@ class LanguageView extends StatefulWidget { } class _LanguageViewState extends State { - final languageViewModel = getIt.get(); + final _languageViewModel = getIt.get(); @override Widget build(BuildContext context) { return Scaffold( - appBar: SimpleAACAppBar( - label: 'Choose a Language', - ), - body: ChangeNotifierBuilder( - notifier: languageViewModel.languageService.sharedPreferencesService, - builder: (context, _, __) { - return FutureBuilder>( - future: languageViewModel.allLanguages(), - builder: (context, allLanguagesSnapshot) { - return FutureBuilder( - future: languageViewModel.getCurrentLanguage(), - builder: (context, currentLanguagesSnapshot) { - final _currentLanguage = currentLanguagesSnapshot.data; - final _allLanguages = allLanguagesSnapshot.data ?? BuiltList(); - if (_currentLanguage != null) { - return SingleChildScrollView( - padding: const EdgeInsets.all(8), - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: _allLanguages - .map( - (language) => _buildLanguageCard( - language, - _currentLanguage.id, - ), - ) - .toList(), - ), - ); - } - return _buildLoading(); - }, - ); - }, + appBar: SimpleAACAppBar(label: 'Choose a Language'), + body: Builder( + builder: (context) { + final all = _languageViewModel.allLanguages(); + final current = _languageViewModel.getCurrentLanguage(); + if (current == null) return _buildLoading(); + return SingleChildScrollView( + padding: const EdgeInsets.all(8), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: all + .map((l) => _buildLanguageCard(l, current.id)) + .toList(), + ), ); }, ), ); } - Widget _buildLanguageCard( - Language language, - String currentLanguageId, - ) { + Widget _buildLanguageCard(Language language, String currentId) { return Padding( padding: const EdgeInsets.only(bottom: 4.0), child: ExpansionCard( @@ -80,38 +55,23 @@ class _LanguageViewState extends State { child: Row( children: language.words .take(10) - .map( - (word) => _buildWordTile(word), - ) + .map(_buildWordTile) .toList(), ), ), - ) + ), ], - onTap: () { - languageViewModel.setLanguage(language); - }, - borderSide: language.id == currentLanguageId ? _buildSelectedBorderSide() : null, + onTap: () => _languageViewModel.setLanguage(language), + borderSide: language.id == currentId + ? const BorderSide(color: Colors.green, width: 2) + : null, ), ); } - BorderSide _buildSelectedBorderSide() { - return BorderSide( - color: Colors.green, - width: 2, - ); - } - WordTile _buildWordTile(Word word) { - return WordTile( - word: word, - key: UniqueKey(), - heroTag: null, - ); + return WordTile(word: word, key: UniqueKey(), heroTag: null); } - Widget _buildLoading() => Center( - child: SimpleAACLoadingWidget(), - ); + Widget _buildLoading() => const Center(child: SimpleAACLoadingWidget()); } diff --git a/lib/ui/manage_word_view.dart b/lib/ui/manage_word_view.dart index 7907bc2..0b42be3 100644 --- a/lib/ui/manage_word_view.dart +++ b/lib/ui/manage_word_view.dart @@ -1,20 +1,23 @@ -import 'package:built_collection/built_collection.dart'; import 'package:flutter/material.dart'; +import 'package:shimmer/shimmer.dart'; import '../api/models/extensions/word_type_extension.dart'; import '../api/models/word.dart'; import '../dependency_injection_container.dart'; import '../extensions/build_context_extension.dart'; -import '../extensions/iterable_extension.dart'; +import '../services/image_path_service.dart'; +import '../services/tts_service.dart'; import '../view_models/create_word/manage_word_view_model.dart'; import 'dashboard/app_shell.dart'; import 'dashboard/related_words_widget.dart'; import 'pick_image_dialog.dart'; +import 'word_picker_bottom_sheet.dart' show WordPickerView; import 'shared_widgets/app_bar.dart'; import 'shared_widgets/bottom_button_holder.dart'; import 'shared_widgets/rounded_button.dart'; import 'shared_widgets/simple_aac_text_field.dart'; import 'shared_widgets/simple_aac_tile.dart'; +import 'shared_widgets/word_image.dart'; import 'shared_widgets/word_sub_type_picker.dart'; import 'shared_widgets/word_type_picker.dart'; @@ -36,27 +39,32 @@ class ManageWordView extends StatefulWidget { } class _ManageWordViewState extends State { - ManageWordViewArguments get _createWordViewArguments => context.routeArguments as ManageWordViewArguments; - - String? get heroTag => _createWordViewArguments.heroTag; - - bool get isEditing => _createWordViewArguments.word != null; + ManageWordViewArguments get _args => + (context.routeArguments as ManageWordViewArguments?) ?? ManageWordViewArguments(); + late final _wordViewModel = getIt.get(); + final _ttsService = getIt.get(); final _formKey = GlobalKey(); - final _wordViewModel = getIt.get(); - final _wordWordController = TextEditingController(); final _wordSoundController = TextEditingController(); + bool _isGeneratingAiImage = false; @override void initState() { super.initState(); - _addTextListeners(); - Future.delayed(Duration.zero).then( - (value) => _wordViewModel.setWord( - _createWordViewArguments.word, - ), - ); + WidgetsBinding.instance.addPostFrameCallback((_) { + if (!mounted) return; + final args = _args; + _wordWordController.text = args.word?.text ?? ''; + _wordSoundController.text = args.word?.phoneticOverride ?? ''; + _wordWordController.addListener( + () => _wordViewModel.setWordText(_wordWordController.text), + ); + _wordSoundController.addListener( + () => _wordViewModel.setPhoneticOverride(_wordSoundController.text), + ); + _wordViewModel.setWord(args.word); + }); } @override @@ -67,347 +75,371 @@ class _ManageWordViewState extends State { super.dispose(); } - void _addTextListeners() { - Future.delayed(Duration.zero).then( - (value) { - _wordWordController.text = _createWordViewArguments.word?.word ?? ''; - _wordSoundController.text = _createWordViewArguments.word?.sound ?? ''; - _wordWordController.addListener( - () { - _wordViewModel.setWordWord( - _wordWordController.text, - ); - }, - ); - _wordSoundController.addListener( - () { - _wordViewModel.setWordSound( - _wordSoundController.text, - ); - }, - ); - }, - ); - } - @override Widget build(BuildContext context) { + final args = _args; return StreamBuilder( stream: _wordViewModel.wordStream, builder: (context, snapshot) { - final _word = snapshot.data; + final word = snapshot.data; + final isLoading = !snapshot.hasData; return Scaffold( appBar: SimpleAACAppBar( - label: isEditing ? 'Edit ${_word?.word ?? ''}' : 'Create', + label: args.word != null ? 'Edit ${word?.text ?? ''}' : 'Create Word', + ), + body: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Center( + child: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 480), + child: SizedBox( + width: double.infinity, + child: Padding( + padding: const EdgeInsets.fromLTRB(16, 16, 16, 12), + child: isLoading + ? _buildPickerShimmer(context) + : _buildPickerBar(word), + ), + ), + ), + ), + Expanded( + child: SingleChildScrollView( + child: Center( + child: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 480), + child: SizedBox( + width: double.infinity, + child: Padding( + padding: const EdgeInsets.fromLTRB(12, 0, 12, 12), + child: Form( + key: _formKey, + child: SimpleAACTile( + border: RoundedRectangleBorder( + side: BorderSide( + color: word?.type.getColor(context) ?? + context.themeColors.primary, + width: 2, + ), + borderRadius: BorderRadius.circular(4), + ), + child: _buildWordTileContent(word, args.heroTag), + ), + ), + ), + ), + ), + ), + ), + ), + ], ), - body: _buildCreateWordViewBody( - _word, + bottomNavigationBar: _buildBottomButtonBar( + isLoading: isLoading, + args: args, ), - bottomNavigationBar: _buildBottomButtonBar(), ); }, ); } - Widget _buildCreateWordViewBody( - Word? _word, - ) { - return Form( - key: _formKey, - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - _buildMediumMargin(), - Padding( - padding: const EdgeInsets.symmetric( - horizontal: 16.0, - ), - child: _buildPickerBar( - _word, - ), - ), - const SizedBox( - height: 12, - ), - Expanded( - child: _buildSimpleAACTile( - context, - _word, - ), - ), - ], - ), - ); - } - - Widget _buildPickerBar( - Word? _word, - ) { + Widget _buildPickerBar(Word? word) { return Row( children: [ Expanded( child: WordTypePicker( wordTypePickerCallBack: _wordViewModel.setWordType, - wordType: _word?.type, + wordType: word?.type, ), ), - _buildMediumMargin(), + const SizedBox(width: 16), Expanded( child: WordSubTypePicker( wordSubTypePickerCallBack: _wordViewModel.setWordSubType, - wordType: _word?.type, - wordSubType: _word?.subType, + wordType: word?.type, + wordSubType: word?.subType, ), ), ], ); } - Widget _buildSimpleAACTile( - BuildContext context, - Word? _word, - ) { - return SingleChildScrollView( - padding: const EdgeInsets.symmetric( - horizontal: 12.0, - ), - child: Column( + Widget _buildPickerShimmer(BuildContext context) { + final base = context.themeColors.surfaceContainerHighest; + final highlight = context.themeColors.surfaceContainerLow; + return Shimmer.fromColors( + baseColor: base, + highlightColor: highlight, + child: Row( children: [ - SimpleAACTile( - border: RoundedRectangleBorder( - side: BorderSide( - color: _word?.type.getColor(context) ?? context.themeColors.primary, - width: 2, + Expanded( + child: Container( + height: 56, + decoration: BoxDecoration( + color: base, + borderRadius: BorderRadius.circular(4), ), - borderRadius: BorderRadius.circular(4), ), - child: _buildWordTileContent( - _word, + ), + const SizedBox(width: 16), + Expanded( + child: Container( + height: 56, + decoration: BoxDecoration( + color: base, + borderRadius: BorderRadius.circular(4), + ), ), ), - _buildMediumMargin(), ], ), ); } - Widget _buildWordTileContent(Word? _word) { + Widget _buildWordTileContent(Word? word, String? heroTag) { return Padding( padding: const EdgeInsets.all(12.0), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - _buildImageAndButtonStack(_word), - _buildCreateWordWordLabel(_word), - _buildCreateWordWordSound(_word), - _buildMediumMargin(), - _buildExtraRelatedWords(_word), + _buildImageAndButtonStack(word, heroTag), + const SizedBox(height: 16), + _buildCreateWordWordLabel(), + const SizedBox(height: 16), + _buildCreateWordWordSound(), + const SizedBox(height: 16), + _buildExtraRelatedWords(word), ], ), ); } - Widget _buildImageAndButtonStack( - Word? _word, - ) { + Widget _buildImageAndButtonStack(Word? word, String? heroTag) { return Stack( children: [ Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - _buildCreateWordImage( - _word, - ), - const SizedBox( - height: 24, - ), + _buildCreateWordImage(word, heroTag), + const SizedBox(height: 24), ], ), Positioned( bottom: 0, right: 0, - child: _buildSpeechButton(), + child: _buildSpeechButton(word), ), ], ); } - Widget _buildSpeechButton() { - return Hero( - tag: kPlayButtonHeroTag, - transitionOnUserGestures: true, - child: FloatingActionButton( - heroTag: null, - onPressed: () {}, - child: const Icon( - Icons.play_arrow, + Widget _buildCreateWordImage(Word? word, String? heroTag) { + final imageUri = word != null ? getIt().resolve(word) : null; + final hasImage = imageUri?.isNotEmpty ?? false; + return AspectRatio( + aspectRatio: 1 / 1.3, + child: ClipRRect( + borderRadius: const BorderRadius.all(Radius.circular(4)), + clipBehavior: Clip.hardEdge, + child: Material( + type: MaterialType.transparency, + child: InkWell( + onTap: () async { + final path = await PickImageDialog.show( + context, + wordText: word?.text, + onAiGenerating: (future) async { + setState(() => _isGeneratingAiImage = true); + final generated = await future; + if (!mounted) return; + setState(() => _isGeneratingAiImage = false); + if (generated != null) _wordViewModel.setImagePath(generated); + }, + ); + if (path != null) _wordViewModel.setImagePath(path); + }, + child: _isGeneratingAiImage + ? Shimmer.fromColors( + baseColor: Colors.grey.shade300, + highlightColor: Colors.grey.shade100, + child: Container(color: Colors.grey.shade300), + ) + : hasImage && heroTag != null + ? Hero( + tag: heroTag, + transitionOnUserGestures: true, + // Empty placeholder so the image doesn't show twice during transition + placeholderBuilder: (_, __, ___) => const SizedBox.shrink(), + child: WordImage(imagePath: imageUri, fit: BoxFit.cover), + ) + : hasImage + ? WordImage(imagePath: imageUri, fit: BoxFit.cover) + : Center( + child: Icon( + Icons.add_a_photo_outlined, + size: 48, + color: context.themeColors.onSurface, + ), + ), + ), ), ), ); } - Widget _buildMediumMargin() { - return const SizedBox( - height: 16, - width: 16, + Widget _buildSpeechButton(Word? word) { + return StreamBuilder( + stream: _ttsService.isSpeaking, + builder: (context, snapshot) { + final speaking = snapshot.data ?? false; + return FloatingActionButton( + heroTag: null, + onPressed: word == null + ? null + : () { + if (speaking) { + _ttsService.stop(); + } else { + _ttsService.speakWord( + word.phoneticOverride ?? word.text, + ); + } + }, + child: AnimatedSwitcher( + duration: const Duration(milliseconds: 200), + child: Icon( + speaking ? Icons.stop_rounded : Icons.play_arrow_rounded, + key: ValueKey(speaking), + ), + ), + ); + }, ); } - Widget _buildCreateWordWordSound( - Word? _word, - ) { + Widget _buildCreateWordWordLabel() { return Padding( - padding: const EdgeInsets.symmetric( - horizontal: 4.0, - ), + padding: const EdgeInsets.symmetric(horizontal: 4.0), child: SimpleAACTextField( - labelText: _word?.sound ?? 'Word Sound', - textController: _wordSoundController, - validatorMessage: 'Please input a valid word sound.', + labelText: 'Word Label', + textController: _wordWordController, + validatorMessage: 'Please input a valid word', maxLines: 1, ), ); } - Widget _buildCreateWordWordLabel( - Word? _word, - ) { + Widget _buildCreateWordWordSound() { return Padding( - padding: const EdgeInsets.symmetric( - horizontal: 4.0, - ), + padding: const EdgeInsets.symmetric(horizontal: 4.0), child: SimpleAACTextField( - labelText: _word?.word ?? 'Word Label', - textController: _wordWordController, - validatorMessage: 'Please input a valid word', + labelText: 'Phonetic Override', + textController: _wordSoundController, + validatorMessage: 'Please input a valid word sound.', maxLines: 1, ), ); } - Widget _buildCreateWordImage( - Word? _word, - ) { - final imageUri = _word?.imageList.firstOrNull() ?? ''; - return Flexible( - child: ClipRRect( - borderRadius: const BorderRadius.all( - Radius.circular(4), - ), - clipBehavior: Clip.hardEdge, - child: AspectRatio( - aspectRatio: 1.0 / 1.0, - child: Material( - type: MaterialType.transparency, - child: InkWell( - onTap: () { - PickImageDialog.show(context); - }, - child: imageUri.isNotEmpty - ? Hero( - tag: heroTag ?? '', - transitionOnUserGestures: true, - child: Image.asset( - imageUri, - fit: BoxFit.contain, - ), - ) - : FittedBox( - child: Padding( - padding: const EdgeInsets.all(16), - child: Icon( - Icons.add_a_photo_outlined, - color: context.themeColors.onBackground, - ), - ), - ), - ), - ), - ), - ), - ); - } - - Widget _buildExtraRelatedWords( - Word? word, - ) { - return StreamBuilder>( + Widget _buildExtraRelatedWords(Word? word) { + return StreamBuilder>( stream: _wordViewModel.relatedWords, builder: (context, snapshot) { - final relatedWords = snapshot.data ?? BuiltList(); - return Stack( + final relatedWords = snapshot.data ?? []; + return Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - Padding( - padding: const EdgeInsets.only( - top: 8.0, + if (word?.extraRelatedWordIds.isNotEmpty == true) + RelatedWordsWidget( + relatedWords: relatedWords, + onRelatedWordSelected: (_) {}, + onRelatedWordIdsChanged: _wordViewModel.setExtraRelatedWords, + isExpanded: true, ), - child: SizedBox( - height: 32, - child: word?.extraRelatedWordIds.isNotEmpty == true - ? RelatedWordsWidget( - relatedWords: relatedWords, - onRelatedWordSelected: (_){}, - onRelatedWordIdsChanged: _wordViewModel.setExtraRelatedWords, - isExpanded: true, - ) - : null, + TextButton.icon( + onPressed: () async { + final current = + _wordViewModel.wordStream.valueOrNull?.extraRelatedWordIds ?? []; + final result = + await WordPickerView.show(context, existingWordIds: current); + if (result != null) _wordViewModel.setExtraRelatedWords(result); + }, + icon: const Icon(Icons.add, size: 18), + label: const Text('Add prediction'), + style: TextButton.styleFrom( + padding: const EdgeInsets.symmetric(horizontal: 8), ), ), - Align( - alignment: Alignment.centerRight, - child: _buildAddPredictionButton(), - ), ], ); - } - ); - } - - Widget _buildAddPredictionButton() { - return FloatingActionButton.small( - heroTag: null, - onPressed: () {}, - child: const Icon(Icons.add), + }, ); } - Widget _buildBottomButtonBar() { - return BottomButtonHolder( - hasShadow: true, - child: Row( - children: [ - Expanded( - child: _buildCancelButton(context), - ), - const SizedBox( - width: 16, - ), - Expanded( - child: _buildSaveButton(), + Widget _buildBottomButtonBar({ + required bool isLoading, + required ManageWordViewArguments args, + }) { + final isEditing = args.word != null; + return Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + mainAxisSize: MainAxisSize.min, + children: [ + BottomButtonHolder( + hasShadow: true, + child: Row( + children: [ + Expanded( + child: RoundedButton( + label: 'Cancel', + isFilled: false, + onPressed: () { + if (isEditing) { + Navigator.of(context).popUntil( + (route) => route.settings.name == AppShell.routeName, + ); + } else { + Navigator.of(context).pop(); + } + }, + ), + ), + const SizedBox(width: 16), + Expanded( + child: isLoading + ? const RoundedButton(label: 'Save', onPressed: null) + : StreamBuilder( + stream: _wordViewModel.isValid, + builder: (context, snapshot) { + final valid = snapshot.data ?? false; + return RoundedButton( + label: 'Save', + onPressed: valid + ? () async { + await _wordViewModel.saveWord(); + if (!context.mounted) return; + if (isEditing) { + Navigator.of(context).popUntil( + (route) => + route.settings.name == AppShell.routeName, + ); + } else { + Navigator.of(context) + .pop(_wordViewModel.wordStream.valueOrNull); + } + } + : null, + ); + }, + ), + ), + ], ), - ], - ), - ); - } - - Widget _buildSaveButton() { - return RoundedButton( - label: 'SAVE', - onPressed: () {}, - ); - } - - Widget _buildCancelButton( - BuildContext context, - ) { - return RoundedButton( - label: 'Cancel', - fillColor: context.themeColors.secondary, - onPressed: () { - Navigator.of(context).pop(); - }, + ), + ], ); } } diff --git a/lib/ui/pick_image_dialog.dart b/lib/ui/pick_image_dialog.dart index 987cdf8..5f75b6f 100644 --- a/lib/ui/pick_image_dialog.dart +++ b/lib/ui/pick_image_dialog.dart @@ -1,25 +1,38 @@ +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:image_cropper/image_cropper.dart'; +import 'package:image_picker/image_picker.dart'; -import '../extensions/build_context_extension.dart'; -import 'theme/simple_aac_text.dart'; +import '../dependency_injection_container.dart'; +import '../services/ai_prediction_service.dart'; +import 'draw_word_view.dart'; class PickImageDialog extends StatefulWidget { - PickImageDialog({ + const PickImageDialog({ Key? key, + this.wordText, + this.onAiGenerating, }) : super(key: key); - static Future show( - BuildContext context, - ) { - return showModalBottomSheet( + final String? wordText; + + /// Called when AI generation starts. Receives the generation [Future] so the + /// caller can show a loading state while the sheet is dismissed. + final void Function(Future future)? onAiGenerating; + + static Future show( + BuildContext context, { + String? wordText, + void Function(Future future)? onAiGenerating, + }) { + return showModalBottomSheet( context: context, - builder: (context) { - return PickImageDialog(); - }, + builder: (context) => PickImageDialog( + wordText: wordText, + onAiGenerating: onAiGenerating, + ), shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.vertical( - top: Radius.circular(20), - ), + borderRadius: BorderRadius.vertical(top: Radius.circular(24)), ), enableDrag: true, isScrollControlled: true, @@ -31,63 +44,200 @@ class PickImageDialog extends StatefulWidget { } class _PickImageDialogState extends State { + final _picker = getIt.get(); + final _cropper = ImageCropper(); + final _aiService = getIt.get(); + + Future _pickFromCamera() async { + final file = await _picker.pickImage(source: ImageSource.camera, imageQuality: 100); + if (file == null) return; + await _cropAndReturn(file.path); + } + + Future _pickFromDraw() async { + final path = await DrawWordView.show(context); + if (path == null) { + if (mounted) Navigator.of(context).pop(null); + return; + } + await _cropAndReturn(path); + } + + Future _pickFromGallery() async { + final file = await _picker.pickImage(source: ImageSource.gallery, imageQuality: 100); + if (file == null) return; + await _cropAndReturn(file.path); + } + + Future _generateWithAi() async { + final hasKey = await _aiService.hasOpenAiKey(); + if (!hasKey) { + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: Text('Add an OpenAI key in Settings → Speech to generate images with AI'), + ), + ); + } + return; + } + + final controller = TextEditingController(text: widget.wordText ?? ''); + final prompt = await showDialog( + context: context, + builder: (ctx) => AlertDialog( + title: const Text('Generate with AI'), + content: TextField( + controller: controller, + decoration: const InputDecoration( + labelText: 'Describe the image', + hintText: 'e.g. happy, eat, school bus', + ), + autofocus: true, + textCapitalization: TextCapitalization.sentences, + onSubmitted: (_) => Navigator.of(ctx).pop(controller.text.trim()), + ), + actions: [ + TextButton( + onPressed: () => Navigator.of(ctx).pop(null), + child: const Text('Cancel'), + ), + TextButton( + onPressed: () => Navigator.of(ctx).pop(controller.text.trim()), + child: const Text('Generate'), + ), + ], + ), + ); + controller.dispose(); + + if (prompt == null || prompt.isEmpty || !mounted) return; + + // Hand the generation future to the parent, then dismiss the sheet so the + // parent can show a shimmer on the image while generation runs in the background. + widget.onAiGenerating?.call(_aiService.generateImage(prompt)); + Navigator.of(context).pop(null); + } + + Future _cropAndReturn(String sourcePath) async { + if (kIsWeb) { + // image_cropper doesn't support web; return the image path as-is. + if (mounted) Navigator.of(context).pop(sourcePath); + return; + } + final cropped = await _cropper.cropImage( + sourcePath: sourcePath, + aspectRatio: const CropAspectRatio(ratioX: 1, ratioY: 1), + uiSettings: [ + AndroidUiSettings(lockAspectRatio: true), + IOSUiSettings(aspectRatioLockEnabled: true, resetAspectRatioEnabled: false), + ], + ); + if (mounted) Navigator.of(context).pop(cropped?.path); + } + @override Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.all(16.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - mainAxisSize: MainAxisSize.min, - children: [ - Row( - children: [ - _buildIconButton( - iconData: Icons.camera_alt, - label: 'Camera', - ), - _buildIconButton( - iconData: Icons.image_rounded, - label: 'Gallery', - ), - _buildIconButton( - iconData: Icons.brush_rounded, - label: 'Draw', + return SafeArea( + child: Padding( + padding: const EdgeInsets.fromLTRB(20, 12, 20, 24), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + width: 40, + height: 4, + decoration: BoxDecoration( + color: Colors.grey.shade300, + borderRadius: BorderRadius.circular(2), ), - ], - ) - ], + ), + const SizedBox(height: 20), + Text( + 'Add a picture!', + style: Theme.of(context).textTheme.titleLarge?.copyWith( + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 20), + LayoutBuilder( + builder: (context, constraints) { + final itemWidth = (constraints.maxWidth - 12) / 2; + return Wrap( + spacing: 12, + runSpacing: 12, + children: [ + _buildOption( + width: itemWidth, + icon: Icons.camera_alt_rounded, + label: 'Camera', + color: const Color(0xFF4FC3F7), + onTap: _pickFromCamera, + ), + _buildOption( + width: itemWidth, + icon: Icons.photo_library_rounded, + label: 'Gallery', + color: const Color(0xFF81C784), + onTap: _pickFromGallery, + ), + _buildOption( + width: itemWidth, + icon: Icons.brush_rounded, + label: 'Draw', + color: const Color(0xFFFFB74D), + onTap: _pickFromDraw, + ), + _buildOption( + width: itemWidth, + icon: Icons.auto_awesome_rounded, + label: 'Generate', + color: const Color(0xFFBA68C8), + onTap: _generateWithAi, + ), + ], + ); + }, + ), + ], + ), ), ); } - Widget _buildIconButton({ - required IconData iconData, + Widget _buildOption({ + required double width, + required IconData icon, required String label, + required Color color, + required VoidCallback onTap, }) { - return Expanded( - child: Padding( - padding: const EdgeInsets.all(24.0), - child: TextButton( + return SizedBox( + width: width, + child: GestureDetector( + onTap: onTap, + child: Container( + decoration: BoxDecoration( + color: color.withOpacity(0.15), + borderRadius: BorderRadius.circular(20), + border: Border.all(color: color, width: 2), + ), + padding: const EdgeInsets.symmetric(vertical: 20), child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, mainAxisSize: MainAxisSize.min, children: [ - FittedBox( - child: Icon( - iconData, - color: context.themeColors.onBackground, - ), - ), + Icon(icon, size: 40, color: color), + const SizedBox(height: 10), Text( label, - style: SimpleAACText.body1Style, - textAlign: TextAlign.center, + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 14, + color: color.withOpacity(0.9), + ), ), ], ), - onPressed: () { - - }, ), ), ); diff --git a/lib/ui/search/word_search_delegate.dart b/lib/ui/search/word_search_delegate.dart new file mode 100644 index 0000000..03cee1f --- /dev/null +++ b/lib/ui/search/word_search_delegate.dart @@ -0,0 +1,93 @@ +import 'package:flutter/material.dart'; + +import '../../api/models/word.dart'; +import '../../services/word_service.dart'; +import '../../view_models/selected_words_view_model.dart'; +import '../shared_widgets/word_tile.dart'; + +class WordSearchDelegate extends SearchDelegate { + WordSearchDelegate(this._wordService, this._selectedWordsViewModel); + + final WordService _wordService; + final SelectedWordsViewModel _selectedWordsViewModel; + + @override + String get searchFieldLabel => 'Search words…'; + + @override + List buildActions(BuildContext context) => [ + if (query.isNotEmpty) + IconButton( + icon: const Icon(Icons.clear), + onPressed: () => query = '', + ), + ]; + + @override + Widget buildLeading(BuildContext context) => IconButton( + icon: const Icon(Icons.arrow_back), + onPressed: () => close(context, null), + ); + + @override + Widget buildResults(BuildContext context) => _buildGrid(context); + + @override + Widget buildSuggestions(BuildContext context) => _buildGrid(context); + + int _crossAxisCount(double width) { + if (width > 1200) return 8; + if (width > 800) return 6; + return 4; + } + + Widget _buildGrid(BuildContext context) { + final trimmed = query.trim(); + if (trimmed.isEmpty) { + return const Center( + child: Icon(Icons.search, size: 64, color: Colors.grey), + ); + } + + return FutureBuilder>( + future: _wordService.searchWords(trimmed), + builder: (context, snapshot) { + final words = snapshot.data ?? []; + if (snapshot.connectionState == ConnectionState.waiting) { + return const Center(child: CircularProgressIndicator()); + } + if (words.isEmpty) { + return Center( + child: Text( + 'No results for "$trimmed"', + style: const TextStyle(color: Colors.grey), + ), + ); + } + return Padding( + padding: const EdgeInsets.all(4), + child: GridView.builder( + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: _crossAxisCount(MediaQuery.of(context).size.width), + crossAxisSpacing: 4, + mainAxisSpacing: 4, + childAspectRatio: 0.86, + ), + itemCount: words.length, + itemBuilder: (context, index) { + final word = words[index]; + return WordTile( + key: ValueKey(word.wordId), + word: word, + wordTapCallBack: (w) { + _selectedWordsViewModel.addSelectedWord(w); + close(context, w); + }, + ); + }, + ), + ); + }, + ); + } +} diff --git a/lib/ui/settings_view.dart b/lib/ui/settings_view.dart index 9659fbb..3859625 100644 --- a/lib/ui/settings_view.dart +++ b/lib/ui/settings_view.dart @@ -1,15 +1,17 @@ -import 'package:change_notifier_builder/change_notifier_builder.dart'; import 'package:flutter/material.dart'; -import 'package:settings_ui/settings_ui.dart'; -import '../api/models/language.dart'; import '../dependency_injection_container.dart'; import '../extensions/build_context_extension.dart'; +import '../services/ai_prediction_service.dart'; +import '../services/auth_service.dart'; import '../services/shared_preferences_service.dart'; -import '../view_models/language_view_model.dart'; -import 'language_view.dart'; +import '../services/tts_service.dart'; +import 'auth/sign_in_view.dart'; +import 'dashboard/app_shell.dart'; +import 'shared_widgets/view_constraint.dart'; import 'theme/simple_aac_text.dart'; import 'theme/theme_view.dart'; +import 'tts_settings_view.dart'; class SettingsView extends StatefulWidget { static const String routeName = '/settings'; @@ -20,151 +22,278 @@ class SettingsView extends StatefulWidget { class _SettingsViewState extends State { final _sharedPreferenceService = getIt.get(); - final _languageViewModel = getIt.get(); + final _authService = getIt.get(); + final _ttsService = getIt.get(); + final _aiService = getIt.get(); + bool _hasAiKey = false; + bool _hasGeminiKey = false; + + @override + void initState() { + super.initState(); + _refreshKeyStatus(); + } + + Future _refreshKeyStatus() async { + final hasOpenAi = await _ttsService.hasOpenAiKey(); + final hasGemini = await _aiService.hasGeminiKey(); + if (mounted) { + setState(() { + _hasAiKey = hasOpenAi; + _hasGeminiKey = hasGemini; + }); + } + } @override Widget build(BuildContext context) { - return ChangeNotifierBuilder( - notifier: _sharedPreferenceService, - builder: (context, _, __) { - final _hasRelatedWordsEnabled = _sharedPreferenceService.hasRelatedWordsEnabled; + return ListenableBuilder( + listenable: _sharedPreferenceService, + builder: (context, _) { + final hasRelatedWordsEnabled = _sharedPreferenceService.hasRelatedWordsEnabled; + final aiPredictionsEnabled = _sharedPreferenceService.aiPredictionsEnabled; + final highlightWordsEnabled = _sharedPreferenceService.highlightWordsEnabled; + final isDark = context.isDark; + final currentThemeName = context.themeViewModel.themeName; + return Scaffold( - appBar: _settingsAppBar(), - body: FutureBuilder( - future: _languageViewModel.getCurrentLanguage(), - builder: (context, snapshot) { - final _currentLanguage = snapshot.data; - return _buildSettingsList( - _currentLanguage, - _hasRelatedWordsEnabled, - ); - } + appBar: AppBar( + automaticallyImplyLeading: false, + leading: IconButton( + icon: const Icon(Icons.arrow_back), + onPressed: () { + if (Navigator.of(context).canPop()) { + Navigator.of(context).pop(); + } else { + Navigator.of(context).pushReplacementNamed(AppShell.routeName); + } + }, + ), + title: Text( + 'Settings', + style: SimpleAACText.subtitle2Style.copyWith( + color: context.themeColors.onPrimaryContainer, + ), + ), + ), + body: ViewConstraint( + child: ListView( + children: [ + _sectionHeader('Account'), + _buildAccountTile(context), + const Divider(), + _sectionHeader('Speech'), + ListTile( + title: const Text('Speech settings', style: SimpleAACText.body1Style), + subtitle: const Text('Voice, speed and pitch', style: SimpleAACText.body2Style), + trailing: const Icon(Icons.chevron_right), + onTap: () async { + await Navigator.of(context).pushNamed(TtsSettingsView.routeName); + _refreshKeyStatus(); + }, + ), + SwitchListTile( + value: _hasAiKey ? false : highlightWordsEnabled, + onChanged: _hasAiKey + ? null + : _sharedPreferenceService.setHighlightWordsEnabled, + title: const Text( + 'Highlight words while speaking', + style: SimpleAACText.body1Style, + ), + subtitle: _hasAiKey + ? const Text( + 'Not available with AI voice', + style: SimpleAACText.body2Style, + ) + : null, + ), + const Divider(), + _sectionHeader('Predictions'), + SwitchListTile( + value: hasRelatedWordsEnabled, + onChanged: _sharedPreferenceService.setRelatedWordsEnabled, + title: const Text( + 'Show related words when selecting a word', + style: SimpleAACText.body1Style, + ), + ), + SwitchListTile( + value: aiPredictionsEnabled, + onChanged: _sharedPreferenceService.setAiPredictionsEnabled, + title: const Text( + 'AI next-word predictions', + style: SimpleAACText.body1Style, + ), + ), + if (aiPredictionsEnabled) ...[ + Padding( + padding: const EdgeInsets.fromLTRB(16, 4, 16, 4), + child: SegmentedButton( + segments: const [ + ButtonSegment(value: 'gemini', label: Text('Gemini')), + ButtonSegment(value: 'openai', label: Text('OpenAI')), + ], + selected: {_sharedPreferenceService.aiPredictionProvider}, + onSelectionChanged: (s) => + _sharedPreferenceService.setAiPredictionProvider(s.first), + ), + ), + if (_sharedPreferenceService.aiPredictionProvider == 'gemini') + ListTile( + title: const Text('Gemini API key', style: SimpleAACText.body1Style), + subtitle: Text( + _hasGeminiKey ? 'Key saved' : 'Not set — tap to add', + style: SimpleAACText.body2Style, + ), + trailing: _hasGeminiKey + ? const Icon(Icons.check_circle_outline, color: Colors.green) + : const Icon(Icons.chevron_right), + onTap: _showGeminiKeyDialog, + ) + else + ListTile( + title: const Text('OpenAI API key', style: SimpleAACText.body1Style), + subtitle: Text( + _hasAiKey ? 'Key saved (shared with TTS)' : 'Not set — configure in Speech settings', + style: SimpleAACText.body2Style, + ), + trailing: _hasAiKey + ? const Icon(Icons.check_circle_outline, color: Colors.green) + : const Icon(Icons.chevron_right), + onTap: _hasAiKey + ? null + : () => Navigator.of(context).pushNamed(TtsSettingsView.routeName), + ), + ], + const Divider(), + _sectionHeader('Theme'), + ListTile( + title: Text( + 'Current theme: $currentThemeName', + style: SimpleAACText.body1Style, + ), + trailing: const Icon(Icons.chevron_right), + onTap: () => Navigator.of(context).pushNamed(ThemeView.routeName), + ), + SwitchListTile( + value: isDark, + onChanged: (_) => context.themeViewModel.setThemeMode( + isDark ? ThemeMode.light : ThemeMode.dark, + ), + title: Text( + 'Current theme mode is ${isDark ? 'Dark' : 'Light'}', + style: SimpleAACText.body1Style, + ), + ), + ], + ), ), ); }, ); } - Widget _buildSettingsList( - Language? currentLanguage, - bool _hasRelatedWordsEnabled, - ) { - return SettingsList( - sections: [ - _buildLanguageSettingsSection( - currentLanguage, - ), - _buildPredictionsSettingsSection( - _hasRelatedWordsEnabled, + Future _showGeminiKeyDialog() async { + if (_hasGeminiKey) { + final clear = await showDialog( + context: context, + builder: (ctx) => AlertDialog( + title: const Text('Gemini API key'), + content: const Text('Remove the saved Gemini API key?'), + actions: [ + TextButton( + onPressed: () => Navigator.of(ctx).pop(false), + child: const Text('Cancel'), + ), + TextButton( + onPressed: () => Navigator.of(ctx).pop(true), + child: const Text('Remove', style: TextStyle(color: Colors.red)), + ), + ], ), - _buildThemeModeSettingsSection(), - _buildThemeSettingsSection(), - ], - ); - } + ); + if (clear == true) { + await _aiService.clearGeminiKey(); + _refreshKeyStatus(); + } + return; + } - SettingsSection _buildThemeModeSettingsSection() { - final isDark = context.isDark; - - return SettingsSection( - title: const Text( - 'Dark Mode', - style: SimpleAACText.body1Style, - ), - tiles: [ - SettingsTile.switchTile( - initialValue: isDark, - onToggle: (_) { - if (isDark) { - context.themeViewModel.setThemeMode(ThemeMode.light); - } else { - context.themeViewModel.setThemeMode(ThemeMode.dark); - } - }, - title: Text( - 'Current theme mode is ${isDark ? 'Dark' : 'Light'}', - style: SimpleAACText.body1Style, + final controller = TextEditingController(); + final saved = await showDialog( + context: context, + builder: (ctx) => AlertDialog( + title: const Text('Gemini API key'), + content: TextField( + controller: controller, + decoration: const InputDecoration( + hintText: 'Paste your API key here', ), + obscureText: true, + autocorrect: false, ), - ], - ); - } - - SettingsSection _buildThemeSettingsSection() { - final currentThemeName = context.themeViewModel.themeName; - return SettingsSection( - title: const Text( - 'Theme', - style: SimpleAACText.body1Style, - ), - tiles: [ - SettingsTile.navigation( - title: Text( - 'Current theme $currentThemeName', - style: SimpleAACText.body1Style, + actions: [ + TextButton( + onPressed: () => Navigator.of(ctx).pop(false), + child: const Text('Cancel'), ), - onPressed: (_) { - Navigator.of(context).pushNamed(ThemeView.routeName); - }, - ), - ], + TextButton( + onPressed: () => Navigator.of(ctx).pop(true), + child: const Text('Save'), + ), + ], + ), ); + if (saved == true && controller.text.trim().isNotEmpty) { + await _aiService.setGeminiKey(controller.text.trim()); + _refreshKeyStatus(); + } + controller.dispose(); } - SettingsSection _buildLanguageSettingsSection( - Language? currentLanguage, - ) { - return SettingsSection( - title: const Text( - 'Language', - style: SimpleAACText.body1Style, - ), - tiles: [ - SettingsTile( - title: Text( - 'Current Language is ${currentLanguage?.displayName ?? 'Default'}', - style: SimpleAACText.body1Style, - ), - onPressed: (_) { - Navigator.of(context).pushNamed( - LanguageView.routeName, - ); + Widget _buildAccountTile(BuildContext context) { + if (_authService.isSignedInWithGoogle) { + return ListTile( + leading: _authService.photoUrl != null + ? CircleAvatar(backgroundImage: NetworkImage(_authService.photoUrl!)) + : const CircleAvatar(child: Icon(Icons.person)), + title: Text( + _authService.displayName ?? 'Signed in', + style: SimpleAACText.body1Style, + ), + subtitle: Text( + _authService.email ?? '', + style: SimpleAACText.body2Style, + ), + trailing: TextButton( + onPressed: () async { + await _authService.signOut(); + if (context.mounted) setState(() {}); }, + child: const Text('Sign out'), ), - ], - ); - } - - SettingsSection _buildPredictionsSettingsSection( - bool _hasRelatedWordsEnabled, - ) { - return SettingsSection( - title: const Text( - 'Predictions', - style: SimpleAACText.body1Style, + ); + } + return ListTile( + leading: const CircleAvatar(child: Icon(Icons.person_outline)), + title: const Text('Not signed in', style: SimpleAACText.body1Style), + subtitle: const Text( + 'Sign in to sync across devices', + style: SimpleAACText.body2Style, ), - tiles: [ - SettingsTile.switchTile( - initialValue: _hasRelatedWordsEnabled, - onToggle: _sharedPreferenceService.setRelatedWordsEnabled, - title: const Text( - 'Show related words when selecting a word', - style: SimpleAACText.body1Style, - ), - ), - ], + trailing: const Icon(Icons.chevron_right), + onTap: () async { + await Navigator.of(context).pushNamed(SignInView.routeName); + if (context.mounted) setState(() {}); + }, ); } - PreferredSizeWidget _settingsAppBar() { - return AppBar( - automaticallyImplyLeading: true, - title: Text( - 'Settings', - style: SimpleAACText.subtitle2Style.copyWith( - color: context.themeColors.onPrimaryContainer, - ), - ), + Widget _sectionHeader(String title) { + return Padding( + padding: const EdgeInsets.fromLTRB(16, 16, 16, 4), + child: Text(title, style: SimpleAACText.body1Style), ); } } diff --git a/lib/ui/shared_widgets/adaptive_position_floating_action_button.dart b/lib/ui/shared_widgets/adaptive_position_floating_action_button.dart new file mode 100644 index 0000000..a1b3b8d --- /dev/null +++ b/lib/ui/shared_widgets/adaptive_position_floating_action_button.dart @@ -0,0 +1,33 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; + +import '../../extensions/build_context_extension.dart'; +import '../../extensions/media_query_extension.dart'; + +class AdaptivePositionFloatingActionButton extends StatelessWidget { + const AdaptivePositionFloatingActionButton({ + super.key, + required this.onPressed, + required this.child, + }); + + final VoidCallback onPressed; + final Widget child; + + @override + Widget build(BuildContext context) { + final isWideScreen = context.isWideScreen; + final rightPadding = MediaQuery.of(context).minContentWidthInset; + return Padding( + padding: EdgeInsets.only( + right: isWideScreen ? rightPadding : 0, + bottom: MediaQuery.of(context).isNarrowScreen ? 0 : kIsWeb ? kBottomNavigationBarHeight : 0, + ), + child: FloatingActionButton( + heroTag: null, + onPressed: onPressed, + child: child, + ), + ); + } +} diff --git a/lib/ui/shared_widgets/app_bar.dart b/lib/ui/shared_widgets/app_bar.dart index e51641c..730d9fd 100644 --- a/lib/ui/shared_widgets/app_bar.dart +++ b/lib/ui/shared_widgets/app_bar.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import '../theme/simple_aac_text.dart'; +import '../../extensions/string_extension.dart'; class SimpleAACAppBar extends StatelessWidget implements PreferredSizeWidget { SimpleAACAppBar({ @@ -21,8 +21,7 @@ class SimpleAACAppBar extends StatelessWidget implements PreferredSizeWidget { Widget build(BuildContext context) { return AppBar( title: Text( - label.toUpperCase(), - style: SimpleAACText.subtitle2Style, + label, maxLines: 1, overflow: TextOverflow.ellipsis, ), diff --git a/lib/ui/shared_widgets/bottom_button_holder.dart b/lib/ui/shared_widgets/bottom_button_holder.dart index be8cfa6..1b922c3 100644 --- a/lib/ui/shared_widgets/bottom_button_holder.dart +++ b/lib/ui/shared_widgets/bottom_button_holder.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import '../../extensions/build_context_extension.dart'; +import 'view_constraint.dart'; class BottomButtonHolder extends StatelessWidget { const BottomButtonHolder({ @@ -35,7 +36,7 @@ class BottomButtonHolder extends StatelessWidget { blurRadius: 6, ), ], - color: color ?? context.themeColors.background, + color: color ?? context.themeColors.surfaceContainerLow, ) : null, child: Material( @@ -53,7 +54,7 @@ class BottomButtonHolder extends StatelessWidget { left: padding?.left ?? 16, top: padding?.top ?? 14, ), - child: child, + child: ViewConstraint(child: child), ), ), ), diff --git a/lib/ui/shared_widgets/file_picker.dart b/lib/ui/shared_widgets/file_picker.dart index ee5abd8..3613525 100644 --- a/lib/ui/shared_widgets/file_picker.dart +++ b/lib/ui/shared_widgets/file_picker.dart @@ -1,4 +1,4 @@ -import 'dart:io'; +import 'dart:typed_data'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -179,11 +179,17 @@ class _FilePickerState extends State { return ClipRRect( borderRadius: const BorderRadius.all(Radius.circular(8)), clipBehavior: Clip.hardEdge, - child: Image.file( - File(imageFile.path), - height: 70, - width: 70, - fit: BoxFit.cover, + child: FutureBuilder( + future: imageFile.readAsBytes(), + builder: (_, snap) { + if (!snap.hasData) return const SizedBox(width: 70, height: 70); + return Image.memory( + snap.data!, + height: 70, + width: 70, + fit: BoxFit.cover, + ); + }, ), ); } @@ -213,11 +219,8 @@ class _FilePickerState extends State { height: 36, child: RoundedButton( label: widget.buttonLabel ?? 'CHOOSE FILES', - textStyle: widget.buttonLabelStyle, isFilled: false, - disableShadow: true, onPressed: _filePickerViewModel.openImagePicker, - elevation: 0, ), ); } diff --git a/lib/ui/shared_widgets/my_custom_painter.dart b/lib/ui/shared_widgets/my_custom_painter.dart index a426549..4142846 100644 --- a/lib/ui/shared_widgets/my_custom_painter.dart +++ b/lib/ui/shared_widgets/my_custom_painter.dart @@ -4,19 +4,25 @@ import 'dart:ui'; import 'package:flutter/material.dart'; class MyCustomPainter extends CustomPainter { - MyCustomPainter(this.points); + MyCustomPainter(this.points, {this.color = Colors.black, this.strokeWidth = 4, this.hasBackground = false}); final List points; + final Color color; + final double strokeWidth; + final bool hasBackground; @override void paint(Canvas canvas, Size size) { - final background = Paint()..color = Colors.white; - final rect = Rect.fromLTWH(0, 0, size.width, size.height); - canvas.drawRect(rect, background); + if (!hasBackground) { + canvas.drawRect( + Rect.fromLTWH(0, 0, size.width, size.height), + Paint()..color = Colors.white, + ); + } final brush = Paint() - ..color = Colors.black - ..strokeWidth = 2 + ..color = color + ..strokeWidth = strokeWidth ..isAntiAlias = true ..strokeCap = StrokeCap.round; diff --git a/lib/ui/shared_widgets/rounded_button.dart b/lib/ui/shared_widgets/rounded_button.dart index c47fdb8..b0f869f 100644 --- a/lib/ui/shared_widgets/rounded_button.dart +++ b/lib/ui/shared_widgets/rounded_button.dart @@ -1,171 +1,70 @@ import 'package:flutter/material.dart'; -import '../../extensions/build_context_extension.dart'; -import '../theme/simple_aac_text.dart'; import 'simple_aac_loading_widget.dart'; class RoundedButton extends StatelessWidget { const RoundedButton({ Key? key, this.onPressed, - this.fillColor, this.isLoading = false, this.isFilled = true, - this.disableShadow = false, required this.label, this.leadingIcon, this.trailingIcon, - this.outlineColor, - this.textStyle, - this.elevation, }) : super(key: key); final VoidCallback? onPressed; - final Color? fillColor; - final Color? outlineColor; final bool isLoading; final bool isFilled; - final bool disableShadow; - final double? elevation; final String label; final IconData? leadingIcon; final IconData? trailingIcon; - final TextStyle? textStyle; + + static const _shape = RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(18)), + ); @override Widget build(BuildContext context) { - return Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(18.0), - ), - child: TextButton( - style: ButtonStyle( - textStyle: MaterialStateProperty.all( - _getTextStyle(context), - ), - elevation: MaterialStateProperty.all( - onPressed != null && !disableShadow ? elevation ?? 2 : 0, - ), - padding: MaterialStateProperty.all( - const EdgeInsets.symmetric( - horizontal: 16, - ), - ), - backgroundColor: MaterialStateProperty.all( - _getFillColor(context), - ), - shape: MaterialStateProperty.all( - RoundedRectangleBorder( - borderRadius: BorderRadius.circular(18.0), - ), - ), - side: MaterialStateProperty.all( - BorderSide( - color: _getOutlineColor(context), - ), - ), - overlayColor: MaterialStateProperty.all(Colors.black12), - ), - onPressed: _handleOnPressed(), - child: Builder( - builder: (context) { - if (isLoading) return _buildLoading(context); - return _buildButtonContent(context); - }, - ), - ), + final child = isLoading ? _buildLoading() : _buildContent(); + if (isFilled) { + return FilledButton( + onPressed: isLoading ? null : onPressed, + style: FilledButton.styleFrom(shape: _shape), + child: child, + ); + } + return OutlinedButton( + onPressed: isLoading ? null : onPressed, + style: OutlinedButton.styleFrom(shape: _shape), + child: child, ); } - Widget _buildButtonContent(BuildContext context) { - var textStyle = _getTextStyle(context); + Widget _buildContent() { return Row( mainAxisSize: MainAxisSize.min, children: [ if (leadingIcon != null) Padding( padding: const EdgeInsets.only(right: 8.0), - child: Icon( - leadingIcon, - color: textStyle.color, - size: textStyle.fontSize! + 2, - ), - ), - Flexible( - child: Text( - label, - style: textStyle, + child: Icon(leadingIcon, size: 18), ), - ), + Flexible(child: Text(label)), if (trailingIcon != null) Padding( padding: const EdgeInsets.only(left: 8.0), - child: Icon( - trailingIcon, - color: textStyle.color, - size: textStyle.fontSize! + 2, - ), + child: Icon(trailingIcon, size: 18), ), ], ); } - Color _getFillColor(BuildContext context) { - if (isFilled && onPressed != null) { - return fillColor ?? context.themeColors.primary; - } else if (!isFilled && onPressed != null) { - return context.themeColors.background; - } else if (!isFilled && onPressed == null) { - return context.themeColors.shadow; - } else { - return context.themeColors.primary; - } - } - - Color _getOutlineColor(BuildContext context) { - if (onPressed != null) { - return outlineColor ?? fillColor ?? context.themeColors.primary; - } else { - return context.themeColors.shadow; - } - } - - TextStyle _getTextStyle(BuildContext context) { - if (isFilled && onPressed != null) { - return textStyle ?? SimpleAACText.body1Style.copyWith(color: context.themeColors.onPrimary); - } else if (!isFilled && onPressed != null) { - return SimpleAACText.body1Style.copyWith(color: context.themeColors.onBackground); - } else if (isFilled && onPressed == null) { - return SimpleAACText.body1Style.copyWith(color: Colors.black12); - } else { - return SimpleAACText.body1Style.copyWith(color: context.themeColors.onPrimary); - } - } - - Color _getLoadingColor(BuildContext context) { - if (!isFilled && onPressed != null) { - return context.themeColors.onBackground; - } else { - return context.themeColors.onPrimary; - } - } - - Widget _buildLoading(BuildContext context) { - return SizedBox( + Widget _buildLoading() { + return const SizedBox( height: 16, width: 16, - child: SimpleAACLoadingWidget( - width: 2, - valueColor: _getLoadingColor(context), - ), + child: SimpleAACLoadingWidget(width: 2), ); } - - VoidCallback? _handleOnPressed() { - if (!isLoading) { - return onPressed; - } else { - return null; - } - } } diff --git a/lib/ui/shared_widgets/simple_aac_chip.dart b/lib/ui/shared_widgets/simple_aac_chip.dart index 39169cf..da14eee 100644 --- a/lib/ui/shared_widgets/simple_aac_chip.dart +++ b/lib/ui/shared_widgets/simple_aac_chip.dart @@ -50,22 +50,13 @@ class SimpleAACChip extends StatelessWidget { ) { return InputChip( avatar: icon, - label: Text( - label, - style: SimpleAACText.body1Style, - ), - padding: EdgeInsets.zero, - labelStyle: SimpleAACText.body1Style, + label: Text(label), onPressed: onTap ?? () {}, isEnabled: true, deleteButtonTooltipMessage: 'Remove', deleteIconColor: context.themeColors.onBackground, onDeleted: onDelete, - deleteIcon: isRemovable - ? const Icon( - Icons.close, - ) - : null, + deleteIcon: isRemovable ? const Icon(Icons.close) : null, ); } diff --git a/lib/ui/shared_widgets/simple_aac_dialog.dart b/lib/ui/shared_widgets/simple_aac_dialog.dart index afb6700..a299972 100644 --- a/lib/ui/shared_widgets/simple_aac_dialog.dart +++ b/lib/ui/shared_widgets/simple_aac_dialog.dart @@ -44,56 +44,29 @@ class SimpleAACDialog extends StatelessWidget { mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - Container( - color: context.themeColors.primary, - height: 50, + Padding( + padding: const EdgeInsets.fromLTRB(16, 16, 8, 0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - title != null - ? Padding( - padding: const EdgeInsets.only( - left: 16.0, - ), - child: Text( - title!, - style: SimpleAACText.subtitle1Style, - ), - ) - : const SizedBox(), - Padding( - padding: const EdgeInsets.symmetric( - horizontal: 8.0, - ), - child: IconButton( - splashRadius: 12, - constraints: const BoxConstraints( - minWidth: 12, - minHeight: 12, - ), - icon: const Icon( - Icons.close, - ), - onPressed: () { - Navigator.of(context).pop(); - }, - ), - ) + if (title != null) + Text(title!, style: SimpleAACText.subtitle1Style) + else + const SizedBox(), + IconButton( + icon: const Icon(Icons.close), + onPressed: () => Navigator.of(context).pop(), + ), ], ), ), - const SizedBox( - height: 8, - ), + const Divider(height: 1), + const SizedBox(height: 12), Padding( - padding: const EdgeInsets.symmetric( - horizontal: 16.0, - ), + padding: const EdgeInsets.symmetric(horizontal: 16.0), child: content, ), - const SizedBox( - height: 24, - ), + const SizedBox(height: 24), if (showOkButton) _buildPickerButtons( context, @@ -161,13 +134,14 @@ class SimpleAACDialog extends StatelessWidget { DialogAction action, BuildContext context, ) { - return TextButton( + final color = action.color ?? context.themeColors.primary; + return OutlinedButton( onPressed: action.actionVoidCallback, - child: Text( - action.actionText, - style: SimpleAACText.body3Style, - textAlign: TextAlign.end, + style: OutlinedButton.styleFrom( + foregroundColor: color, + side: BorderSide(color: color), ), + child: Text(action.actionText, style: SimpleAACText.body3Style), ); } } @@ -176,8 +150,10 @@ class DialogAction { DialogAction({ required this.actionText, required this.actionVoidCallback, + this.color, }); final String actionText; final VoidCallback actionVoidCallback; + final Color? color; } diff --git a/lib/ui/shared_widgets/simple_aac_text_field.dart b/lib/ui/shared_widgets/simple_aac_text_field.dart index 91ed9e8..c4401cf 100644 --- a/lib/ui/shared_widgets/simple_aac_text_field.dart +++ b/lib/ui/shared_widgets/simple_aac_text_field.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import '../../extensions/build_context_extension.dart'; -import '../theme/simple_aac_text.dart'; import 'simple_aac_loading_widget.dart'; typedef Validator = String? Function(dynamic value); @@ -41,7 +40,7 @@ class SimpleAACTextField extends StatelessWidget { return TextFormField( controller: textController, maxLines: maxLines, - style: textStyle ?? SimpleAACText.body1Style, + style: textStyle, textInputAction: textInputAction, autovalidateMode: AutovalidateMode.onUserInteraction, keyboardType: textInputType, @@ -65,7 +64,6 @@ class SimpleAACTextField extends StatelessWidget { InputDecoration _buildInputDecoration(BuildContext context) { return InputDecoration( labelText: labelText, - labelStyle: SimpleAACText.body1Style, floatingLabelBehavior: FloatingLabelBehavior.never, enabled: isEnabled, isDense: isDense, diff --git a/lib/ui/shared_widgets/simple_aac_tile.dart b/lib/ui/shared_widgets/simple_aac_tile.dart index 165e522..dbeaba2 100644 --- a/lib/ui/shared_widgets/simple_aac_tile.dart +++ b/lib/ui/shared_widgets/simple_aac_tile.dart @@ -9,20 +9,24 @@ class SimpleAACTile extends StatelessWidget { this.border, required this.child, this.isSelected = false, + this.isHighlighted = false, this.closeButtonOnTap, this.closeButtonOnLongPress, this.hasReOrderButton = false, + this.reorderIndex, this.tapCallBack, this.longTapCallBack, }) : super(key: key); final Widget child; final bool isSelected; + final bool isHighlighted; final VoidCallback? closeButtonOnTap; final VoidCallback? closeButtonOnLongPress; final VoidCallback? tapCallBack; final VoidCallback? longTapCallBack; final bool hasReOrderButton; + final int? reorderIndex; final RoundedRectangleBorder? border; @override @@ -31,7 +35,15 @@ class SimpleAACTile extends StatelessWidget { key: key, elevation: isSelected ? 0 : 2, color: isSelected ? context.themeColors.surfaceVariant : null, - shape: border ?? defaultBorder, + shape: isHighlighted + ? RoundedRectangleBorder( + side: BorderSide( + color: context.themeColors.primary.withOpacity(0.5), + width: 1.5, + ), + borderRadius: BorderRadius.circular(4), + ) + : (border ?? defaultBorder), clipBehavior: Clip.hardEdge, child: Material( type: MaterialType.transparency, @@ -41,11 +53,40 @@ class SimpleAACTile extends StatelessWidget { child: Stack( children: [ child, + if (isHighlighted) + Positioned.fill( + child: IgnorePointer( + child: ColoredBox( + color: context.themeColors.primary.withOpacity(0.08), + ), + ), + ), + if (isSelected) + Positioned.fill( + child: IgnorePointer( + child: ColoredBox( + color: context.themeColors.primary.withOpacity(0.18), + ), + ), + ), + if (isSelected) + Positioned.fill( + child: Align( + alignment: Alignment.center, + child: IgnorePointer( + child: Icon( + Icons.check_circle, + color: context.themeColors.primary, + size: 28, + ), + ), + ), + ), if (closeButtonOnTap != null) buildCloseButton( closeButtonOnLongPress, ), - if (hasReOrderButton) buildReOrderButton(), + if (hasReOrderButton) buildReOrderButton(reorderIndex), ], ), ), @@ -64,11 +105,25 @@ class SimpleAACTile extends StatelessWidget { ); } - Widget buildReOrderButton() { - return _buildTileOverlapButton( - alignment: Alignment.topLeft, + Widget buildReOrderButton(int? index) { + Widget button = OverlayButton( iconData: Icons.menu, - onTap: () {}, + onTap: null, + ); + if (index != null) { + button = ReorderableDragStartListener( + index: index, + child: button, + ); + } + return Positioned.fill( + child: Align( + alignment: Alignment.topLeft, + child: Padding( + padding: const EdgeInsets.all(4.0), + child: button, + ), + ), ); } diff --git a/lib/ui/shared_widgets/view_constraint.dart b/lib/ui/shared_widgets/view_constraint.dart new file mode 100644 index 0000000..18804b6 --- /dev/null +++ b/lib/ui/shared_widgets/view_constraint.dart @@ -0,0 +1,30 @@ +import 'package:flutter/material.dart'; + +import '../../utils/constants.dart'; + +class ViewConstraint extends StatelessWidget { + const ViewConstraint({ + super.key, + required this.child, + this.constraints, + }); + + final Widget child; + final BoxConstraints? constraints; + + @override + Widget build(BuildContext context) { + return Center( + child: Container( + clipBehavior: Clip.hardEdge, + decoration: const BoxDecoration(), + width: double.infinity, + constraints: constraints ?? + const BoxConstraints( + maxWidth: kMaxScreenWidth, + ), + child: child, + ), + ); + } +} diff --git a/lib/ui/shared_widgets/word_group_tile.dart b/lib/ui/shared_widgets/word_group_tile.dart new file mode 100644 index 0000000..fd62741 --- /dev/null +++ b/lib/ui/shared_widgets/word_group_tile.dart @@ -0,0 +1,130 @@ +import 'package:flutter/material.dart'; + +import '../../api/models/word.dart'; +import '../../api/models/word_group.dart'; +import '../../dependency_injection_container.dart'; +import '../../extensions/build_context_extension.dart'; +import '../../extensions/iterable_extension.dart'; +import '../../services/image_path_service.dart'; +import '../theme/simple_aac_text.dart'; +import 'simple_aac_tile.dart'; +import 'word_image.dart'; + +class WordGroupTile extends StatelessWidget { + const WordGroupTile({ + super.key, + required this.group, + required this.words, + this.onTap, + this.onLongPress, + }); + + final WordGroup group; + final List words; + final VoidCallback? onTap; + final VoidCallback? onLongPress; + + @override + Widget build(BuildContext context) { + return AspectRatio( + aspectRatio: 1 / 1.3, + child: SimpleAACTile( + tapCallBack: onTap, + longTapCallBack: onLongPress, + child: _buildContent(context), + ), + ); + } + + Widget _buildContent(BuildContext context) { + return Padding( + padding: const EdgeInsets.all(4.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Flexible( + child: ClipRRect( + borderRadius: const BorderRadius.all(Radius.circular(4)), + clipBehavior: Clip.hardEdge, + child: _buildMosaic(), + ), + ), + const SizedBox(height: 4), + Text( + group.title, + maxLines: 2, + textAlign: TextAlign.center, + overflow: TextOverflow.ellipsis, + style: SimpleAACText.body1Style.copyWith( + color: context.themeColors.onSurface, + ), + ), + ], + ), + ); + } + + Widget _buildMosaic() { + final paths = words + .take(4) + .map((w) => getIt().resolve(w)) + .toList(); + + if (paths.isEmpty) { + return WordImage(imagePath: null); + } + if (paths.length == 1) { + return WordImage(imagePath: paths[0]); + } + if (paths.length == 2) { + return Row( + children: [ + Expanded(child: WordImage(imagePath: paths[0])), + const SizedBox(width: 1), + Expanded(child: WordImage(imagePath: paths[1])), + ], + ); + } + if (paths.length == 3) { + return Row( + children: [ + Expanded( + child: Column( + children: [ + Expanded(child: WordImage(imagePath: paths[0])), + const SizedBox(height: 1), + Expanded(child: WordImage(imagePath: paths[1])), + ], + ), + ), + const SizedBox(width: 1), + Expanded(child: WordImage(imagePath: paths[2])), + ], + ); + } + // 4 images: 2×2 grid + return Column( + children: [ + Expanded( + child: Row( + children: [ + Expanded(child: WordImage(imagePath: paths[0])), + const SizedBox(width: 1), + Expanded(child: WordImage(imagePath: paths[1])), + ], + ), + ), + const SizedBox(height: 1), + Expanded( + child: Row( + children: [ + Expanded(child: WordImage(imagePath: paths[2])), + const SizedBox(width: 1), + Expanded(child: WordImage(imagePath: paths[3])), + ], + ), + ), + ], + ); + } +} diff --git a/lib/ui/shared_widgets/word_image.dart b/lib/ui/shared_widgets/word_image.dart new file mode 100644 index 0000000..ebdbc68 --- /dev/null +++ b/lib/ui/shared_widgets/word_image.dart @@ -0,0 +1,192 @@ +import 'dart:convert'; +import 'dart:typed_data'; + +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:firebase_storage/firebase_storage.dart'; +import 'package:image_picker/image_picker.dart'; +import 'package:flutter/material.dart'; +import 'package:shimmer/shimmer.dart'; + +/// Displays a word image from any of four sources: +/// - HTTP/HTTPS URL → CachedNetworkImage (disk-cached) +/// - Local file path → Image.file +/// - Firebase Storage path → resolves to download URL then CachedNetworkImage +/// - Local asset path → Image.asset +/// - null / empty → fallback placeholder +class WordImage extends StatefulWidget { + static final _urlCache = {}; + + const WordImage({ + super.key, + required this.imagePath, + this.fit = BoxFit.cover, + this.width, + this.height, + }); + + final String? imagePath; + final BoxFit fit; + final double? width; + final double? height; + + static const _fallbackAsset = + 'assets/images/simple_aac_white_background.png'; + + @override + State createState() => _WordImageState(); +} + +class _WordImageState extends State { + Future? _storageFuture; + String? _activePath; + + @override + void initState() { + super.initState(); + _syncFuture(); + } + + @override + void didUpdateWidget(WordImage oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.imagePath != widget.imagePath) { + _syncFuture(); + } + } + + void _syncFuture() { + final path = widget.imagePath; + if (path == null || + path.isEmpty || + path.startsWith('http') || + path.startsWith('data:') || + path.startsWith('/') || + path.startsWith('file://') || + path.startsWith('assets/')) { + _storageFuture = null; + _activePath = null; + return; + } + // Firebase Storage path — only create a new future if the path changed. + if (path != _activePath) { + _activePath = path; + _storageFuture = + FirebaseStorage.instance.ref(path).getDownloadURL().then((url) { + WordImage._urlCache[path] = url; + return url; + }); + } + } + + @override + Widget build(BuildContext context) { + final path = widget.imagePath; + + if (path == null || path.isEmpty) { + return _asset(WordImage._fallbackAsset); + } + + if (path.startsWith('http')) { + return _cached(path); + } + + if (path.startsWith('data:')) { + return _dataUrl(path); + } + + if (path.startsWith('/') || path.startsWith('file://')) { + return _file(path.replaceFirst('file://', '')); + } + + if (!path.startsWith('assets/')) { + return FutureBuilder( + future: _storageFuture, + initialData: WordImage._urlCache[path], + builder: (context, snapshot) { + if (snapshot.hasError) return _asset(WordImage._fallbackAsset); + if (!snapshot.hasData) return _shimmer(); + return _cached(snapshot.data!); + }, + ); + } + + return _asset(path); + } + + Widget _dataUrl(String dataUrl) { + try { + final base64Str = dataUrl.split(',').last; + final bytes = base64Decode(base64Str); + return Image.memory( + bytes, + fit: widget.fit, + width: widget.width ?? double.infinity, + height: widget.height ?? double.infinity, + errorBuilder: (_, __, ___) => _asset(WordImage._fallbackAsset), + ); + } catch (_) { + return _asset(WordImage._fallbackAsset); + } + } + + Widget _file(String path) { + final cleanPath = path.replaceFirst('file://', ''); + return FutureBuilder( + future: XFile(cleanPath).readAsBytes(), + builder: (context, snap) { + if (snap.hasError) return _asset(WordImage._fallbackAsset); + if (!snap.hasData) return _shimmer(); + return Image.memory( + snap.data!, + fit: widget.fit, + width: widget.width ?? double.infinity, + height: widget.height ?? double.infinity, + errorBuilder: (_, __, ___) => _asset(WordImage._fallbackAsset), + ); + }, + ); + } + + Widget _cached(String url) => CachedNetworkImage( + imageUrl: url, + fit: widget.fit, + width: widget.width ?? double.infinity, + height: widget.height ?? double.infinity, + fadeInDuration: Duration.zero, + fadeOutDuration: Duration.zero, + placeholder: (context, url) => _shimmer(), + errorWidget: (_, __, ___) => _asset(WordImage._fallbackAsset), + ); + + Widget _asset(String assetPath) => Image.asset( + assetPath, + fit: widget.fit, + width: widget.width ?? double.infinity, + height: widget.height ?? double.infinity, + errorBuilder: (_, __, ___) => _placeholder(), + ); + + Widget _shimmer() { + final colorScheme = Theme.of(context).colorScheme; + final baseColor = colorScheme.surfaceContainerHighest; + final highlightColor = colorScheme.surfaceContainerLow; + return Shimmer.fromColors( + baseColor: baseColor, + highlightColor: highlightColor, + child: SizedBox( + width: widget.width ?? double.infinity, + height: widget.height ?? double.infinity, + child: ColoredBox(color: baseColor), + ), + ); + } + + Widget _placeholder() => SizedBox( + width: widget.width, + height: widget.height, + child: const ColoredBox( + color: Colors.black12, + child: Icon(Icons.image_not_supported, color: Colors.black38), + ), + ); +} diff --git a/lib/ui/shared_widgets/word_sub_type_picker.dart b/lib/ui/shared_widgets/word_sub_type_picker.dart index 216ccc9..366664e 100644 --- a/lib/ui/shared_widgets/word_sub_type_picker.dart +++ b/lib/ui/shared_widgets/word_sub_type_picker.dart @@ -4,75 +4,49 @@ import '../../api/models/extensions/word_sub_type_extension.dart'; import '../../api/models/extensions/word_type_extension.dart'; import '../../api/models/word_sub_type.dart'; import '../../api/models/word_type.dart'; -import '../../extensions/build_context_extension.dart'; -import '../theme/simple_aac_text.dart'; typedef WordSubTypePickerCallBack = void Function(WordSubType? wordSubType); -typedef WordSubTypePickerValidator = String Function(WordSubType? wordSubType); class WordSubTypePicker extends StatelessWidget { const WordSubTypePicker({ required this.wordSubTypePickerCallBack, - this.wordSubTypePickerValidator, this.wordSubType, this.wordType, }); final WordSubTypePickerCallBack wordSubTypePickerCallBack; - final WordSubTypePickerValidator? wordSubTypePickerValidator; final WordSubType? wordSubType; final WordType? wordType; - @override - Widget build(BuildContext context) { - return _buildReasonPicker(context); - } + List get _subTypes => wordType?.getSubTypes() ?? []; - Widget _buildReasonPicker( - BuildContext context, - ) { - return DropdownButtonFormField( - hint: Text( - wordSubType?.name.toUpperCase() ?? 'WordSub Type', - style: SimpleAACText.body3Style, - ), - isDense: true, - isExpanded: true, - decoration: InputDecoration( - isDense: true, - enabledBorder: OutlineInputBorder( - borderSide: BorderSide( - color: wordType?.getSubTypes().first.getColor(context) ?? context.themeColors.primary, - width: 2.0, - ), - ), - focusedBorder: OutlineInputBorder( - borderSide: BorderSide( - color: wordType.getColor(context), - width: 2.0, - ), - ), - ), - value: wordType?.getSubTypes().first, - validator: wordSubTypePickerValidator, - items: _getDropdownMenuItems(), - onChanged: wordSubTypePickerCallBack, - ); + WordSubType? get _resolvedSelection { + if (wordSubType != null && _subTypes.contains(wordSubType)) return wordSubType; + return _subTypes.isNotEmpty ? _subTypes.first : null; } - List> _getDropdownMenuItems() { - return wordType - ?.getSubTypes() - .map( - (e) => DropdownMenuItem( - value: e, - child: Text( - e.name.toUpperCase(), - style: SimpleAACText.body1Style, - ), - ), - ) - .toList() ?? - []; + @override + Widget build(BuildContext context) { + return DropdownMenu( + key: ValueKey(wordType), + initialSelection: _resolvedSelection, + label: const Text('Category'), + expandedInsets: EdgeInsets.zero, + requestFocusOnTap: false, + enableFilter: false, + enableSearch: false, + enabled: _subTypes.isNotEmpty, + textStyle: Theme.of(context).textTheme.bodyMedium, + onSelected: wordSubTypePickerCallBack, + dropdownMenuEntries: _subTypes + .map( + (e) => DropdownMenuEntry( + value: e, + label: e.name[0].toUpperCase() + e.name.substring(1), + leadingIcon: Icon(e.getIcon(), size: 18), + ), + ) + .toList(), + ); } } diff --git a/lib/ui/shared_widgets/word_tile.dart b/lib/ui/shared_widgets/word_tile.dart index c531677..3c3ecef 100644 --- a/lib/ui/shared_widgets/word_tile.dart +++ b/lib/ui/shared_widgets/word_tile.dart @@ -2,11 +2,14 @@ import 'package:flutter/material.dart'; import '../../api/models/extensions/word_type_extension.dart'; import '../../api/models/word.dart'; +import '../../dependency_injection_container.dart'; import '../../extensions/build_context_extension.dart'; import '../../extensions/iterable_extension.dart'; +import '../../services/image_path_service.dart'; import '../theme/simple_aac_text.dart'; import '../word_detail_view.dart'; import 'simple_aac_tile.dart'; +import 'word_image.dart'; typedef WordCallBack = void Function(Word word); @@ -17,7 +20,9 @@ class WordTile extends StatelessWidget { this.heroTag, this.wordTapCallBack, this.hasReOrderButton = false, + this.reorderIndex, this.isSelected = false, + this.isHighlighted = false, this.closeButtonOnTap, this.closeButtonOnLongPress, }); @@ -31,14 +36,15 @@ class WordTile extends StatelessWidget { final WordCallBack? closeButtonOnLongPress; final bool hasReOrderButton; + final int? reorderIndex; final bool isSelected; + final bool isHighlighted; @override Widget build(BuildContext context) { return AspectRatio( aspectRatio: 1 / 1.3, child: SimpleAACTile( - key: key, tapCallBack: () { wordTapCallBack?.call(word); }, @@ -58,6 +64,7 @@ class WordTile extends StatelessWidget { borderRadius: BorderRadius.circular(4), ), isSelected: isSelected, + isHighlighted: isHighlighted, closeButtonOnTap: closeButtonOnTap != null ? () { closeButtonOnTap?.call(word); @@ -69,6 +76,7 @@ class WordTile extends StatelessWidget { } : null, hasReOrderButton: hasReOrderButton, + reorderIndex: reorderIndex, child: _buildWordTileContent(context), ), ); @@ -83,24 +91,20 @@ class WordTile extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Flexible( - child: ClipRRect( - borderRadius: const BorderRadius.all( - Radius.circular(4), - ), - clipBehavior: Clip.hardEdge, - child: heroTag != null - ? wrapWithHero( - _buildImage(), - heroTag!, - ) - : _buildImage(), - ), + child: heroTag != null + ? Hero( + tag: heroTag!, + transitionOnUserGestures: true, + placeholderBuilder: (_, __, child) => child, + child: _buildClippedImage(), + ) + : _buildClippedImage(), ), const SizedBox( height: 4, ), Text( - word.word, + word.text, maxLines: 2, textAlign: TextAlign.center, overflow: TextOverflow.ellipsis, @@ -113,17 +117,14 @@ class WordTile extends StatelessWidget { ); } - Widget wrapWithHero(Widget child, String heroTag) { - return Hero( - tag: heroTag, - child: child, - ); - } + Widget _buildClippedImage() => ClipRRect( + borderRadius: const BorderRadius.all(Radius.circular(4)), + clipBehavior: Clip.hardEdge, + child: _buildImage(), + ); - Widget _buildImage() { - return Image.network( - word.imageList.firstOrNull() ?? 'assets/images/simple_aac_white_background.png', - fit: BoxFit.cover, - ); - } + Widget _buildImage() => WordImage( + imagePath: getIt().resolve(word), + fit: BoxFit.cover, + ); } diff --git a/lib/ui/shared_widgets/word_type_picker.dart b/lib/ui/shared_widgets/word_type_picker.dart index e367d45..df09bf3 100644 --- a/lib/ui/shared_widgets/word_type_picker.dart +++ b/lib/ui/shared_widgets/word_type_picker.dart @@ -1,70 +1,40 @@ import 'package:flutter/material.dart'; -import '../../api/models/extensions/word_type_extension.dart'; +import '../../api/models/extensions/word_type_extension.dart'; import '../../api/models/word_type.dart'; -import '../theme/simple_aac_text.dart'; typedef WordTypePickerCallBack = void Function(WordType? wordType); -typedef WordTypePickerValidator = String Function(WordType? wordType); class WordTypePicker extends StatelessWidget { const WordTypePicker({ required this.wordTypePickerCallBack, - this.wordTypePickerValidator, this.wordType, }); final WordTypePickerCallBack wordTypePickerCallBack; - final WordTypePickerValidator? wordTypePickerValidator; final WordType? wordType; @override Widget build(BuildContext context) { - return _buildReasonPicker(context); - } - - Widget _buildReasonPicker( - BuildContext context, - ) { - return DropdownButtonFormField( - hint: Text( - wordType?.name.toUpperCase() ?? 'Word Type', - style: SimpleAACText.body3Style, - ), - isDense: true, - decoration: InputDecoration( - isDense: true, - enabledBorder: OutlineInputBorder( - borderSide: BorderSide( - color: wordType.getColor(context), - width: 2.0, - ), - ), - focusedBorder: OutlineInputBorder( - borderSide: BorderSide( - color: wordType.getColor(context), - width: 2.0, - ), - ), - ), - isExpanded: true, - validator: wordTypePickerValidator, - items: _getDropdownMenuItems(), - onChanged: wordTypePickerCallBack, - ); - } - - List> _getDropdownMenuItems() { - return WordType.values - .map( - (e) => DropdownMenuItem( - value: e, - child: Text( - e.name.toUpperCase(), - style: SimpleAACText.body1Style, + return DropdownMenu( + key: ValueKey(wordType), + initialSelection: wordType, + label: const Text('Type'), + expandedInsets: EdgeInsets.zero, + requestFocusOnTap: false, + enableFilter: false, + enableSearch: false, + textStyle: Theme.of(context).textTheme.bodyMedium, + onSelected: wordTypePickerCallBack, + dropdownMenuEntries: WordType.values + .map( + (e) => DropdownMenuEntry( + value: e, + label: e.name[0].toUpperCase() + e.name.substring(1), + leadingIcon: Icon(e.getIcon(), size: 18), ), - ), - ) - .toList(); + ) + .toList(), + ); } } diff --git a/lib/ui/theme/theme_builder_widget.dart b/lib/ui/theme/theme_builder_widget.dart index 4aedce1..2a7181a 100644 --- a/lib/ui/theme/theme_builder_widget.dart +++ b/lib/ui/theme/theme_builder_widget.dart @@ -1,4 +1,3 @@ -import 'package:change_notifier_builder/change_notifier_builder.dart'; import 'package:flutter/material.dart'; import '../../view_models/theme_view_model.dart'; @@ -12,13 +11,9 @@ class ThemeBuilderWidget extends InheritedWidget { required this.themeViewModel, super.key, }) : super( - child: ChangeNotifierBuilder( - notifier: themeViewModel.themeController, - builder: (context, _, child) { - return themeBuilder.call( - themeViewModel.themeController, - ); - }, + child: ListenableBuilder( + listenable: themeViewModel.themeController, + builder: (context, _) => themeBuilder(themeViewModel.themeController), ), ); @@ -33,8 +28,5 @@ class ThemeBuilderWidget extends InheritedWidget { } @override - bool updateShouldNotify(ThemeBuilderWidget old) { - return false; - } + bool updateShouldNotify(ThemeBuilderWidget old) => false; } - diff --git a/lib/ui/theme/theme_controller.dart b/lib/ui/theme/theme_controller.dart index 1d1ef58..7538d65 100644 --- a/lib/ui/theme/theme_controller.dart +++ b/lib/ui/theme/theme_controller.dart @@ -1534,7 +1534,7 @@ class ThemeController with ChangeNotifier { setBottomNavBarMuteUnselected(true, false); // NavigationBar settings setNavBarIndicatorSchemeColor(SchemeColor.secondary, false); - setNavBarBackgroundSchemeColor(SchemeColor.surfaceVariant, false); + setNavBarBackgroundSchemeColor(SchemeColor.surfaceContainerHighest, false); setNavBarSelectedIconSchemeColor(SchemeColor.onSurface, false); setNavBarSelectedLabelSchemeColor(SchemeColor.onSurface, false); setNavBarUnselectedSchemeColor(SchemeColor.onSurface, false); @@ -1619,18 +1619,18 @@ class ThemeController with ChangeNotifier { setDrawerIndicatorSchemeColor(SchemeColor.primary, false); // BottomNavigationBar setBottomNavBarMuteUnselected(false, false); - setBottomNavBarBackgroundSchemeColor(SchemeColor.surfaceVariant, false); + setBottomNavBarBackgroundSchemeColor(SchemeColor.surfaceContainerHighest, false); // NavigationBar settings - setNavBarBackgroundSchemeColor(SchemeColor.background, false); + setNavBarBackgroundSchemeColor(SchemeColor.surface, false); setNavBarMuteUnselected(false, false); - setNavBarSelectedIconSchemeColor(SchemeColor.background, false); + setNavBarSelectedIconSchemeColor(SchemeColor.surface, false); setNavBarSelectedLabelSchemeColor(SchemeColor.primary, false); setNavBarElevation(1, false); setNavBarIndicatorSchemeColor(SchemeColor.primary, false); setNavBarIndicatorOpacity(1.0, false); // NavigationRail settings setNavRailMuteUnselected(false, false); - setNavRailSelectedIconSchemeColor(SchemeColor.background, false); + setNavRailSelectedIconSchemeColor(SchemeColor.surface, false); setNavRailSelectedLabelSchemeColor(SchemeColor.primary, false); setNavRailIndicatorSchemeColor(SchemeColor.primary, false); setNavRailIndicatorOpacity(1.0, false); @@ -1693,7 +1693,7 @@ class ThemeController with ChangeNotifier { // BottomNavigationBar setBottomNavBarMuteUnselected(false, false); // NavigationBar settings - setNavBarBackgroundSchemeColor(SchemeColor.background, false); + setNavBarBackgroundSchemeColor(SchemeColor.surface, false); setNavBarMuteUnselected(false, false); setNavBarSelectedIconSchemeColor(SchemeColor.onPrimary, false); setNavBarSelectedLabelSchemeColor(SchemeColor.primary, false); diff --git a/lib/ui/theme/theme_preview.dart b/lib/ui/theme/theme_preview.dart index b0ef640..a5a130a 100644 --- a/lib/ui/theme/theme_preview.dart +++ b/lib/ui/theme/theme_preview.dart @@ -25,17 +25,27 @@ class ThemePreview extends StatefulWidget { } class _ThemePreviewState extends State { + bool _isInitialized = false; + @override void initState() { super.initState(); - WidgetsBinding.instance.addPostFrameCallback((_) async { + _init(); + } + + Future _init() async { + try { await widget.themeViewModel.init(doSetInitialTheme: false); widget.themeViewModel.setTheme(widget.theme); - }); + } catch (e) { + debugPrint('ThemePreview._init error: $e'); + } + if (mounted) setState(() => _isInitialized = true); } @override Widget build(BuildContext context) { + if (!_isInitialized) return const SizedBox.shrink(); return _buildConstrainedSizeAppWrapper( widget.themeViewModel, widget.theme, diff --git a/lib/ui/theme/theme_view.dart b/lib/ui/theme/theme_view.dart index 669b4c2..8d89703 100644 --- a/lib/ui/theme/theme_view.dart +++ b/lib/ui/theme/theme_view.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; import 'package:simple_aac/ui/theme/theme_preview.dart'; -import 'package:tuple/tuple.dart'; import '../../dependency_injection_container.dart'; import '../../extensions/build_context_extension.dart'; import '../../extensions/iterable_extension.dart'; import '../../view_models/theme_view_model.dart'; +import '../shared_widgets/adaptive_position_floating_action_button.dart'; import '../shared_widgets/app_bar.dart'; import '../shared_widgets/bottom_button_holder.dart'; import '../shared_widgets/rounded_button.dart'; @@ -58,8 +58,8 @@ class _ThemeViewState extends State { children: _themePages() .map( (themeViewModelAndTheme) => ThemePreview( - themeViewModel: themeViewModelAndTheme.item1, - theme: themeViewModelAndTheme.item2, + themeViewModel: themeViewModelAndTheme.$1, + theme: themeViewModelAndTheme.$2, isDark: isDark, ), ) @@ -70,49 +70,29 @@ class _ThemeViewState extends State { ); } - List _themePages() { + List<(ThemeViewModel, SimpleAACTheme)> _themePages() { return [ - Tuple2( - _themeViewModelRed, - SimpleAACTheme.red, - ), - Tuple2( - _themeViewModelBlue, - SimpleAACTheme.blue, - ), - Tuple2( - _themeViewModelYellow, - SimpleAACTheme.yellow, - ), - Tuple2( - _themeViewModelGreen, - SimpleAACTheme.green, - ), - Tuple2( - _themeViewModelPink, - SimpleAACTheme.pink, - ), - Tuple2( - _themeViewModelPurple, - SimpleAACTheme.purple, - ), + (_themeViewModelRed, SimpleAACTheme.red), + (_themeViewModelBlue, SimpleAACTheme.blue), + (_themeViewModelYellow, SimpleAACTheme.yellow), + (_themeViewModelGreen, SimpleAACTheme.green), + (_themeViewModelPink, SimpleAACTheme.pink), + (_themeViewModelPurple, SimpleAACTheme.purple), ]; } Widget _buildDarkSwitchButton() { - return FloatingActionButton( - child: Icon( - isDark ? Icons.light_mode_rounded : Icons.dark_mode_rounded, - ), + return AdaptivePositionFloatingActionButton( onPressed: () { if (mounted) { - setState( - () { - isDark = !isDark; - }, - ); + setState(() { + isDark = !isDark; + }); } }, + child: Icon( + isDark ? Icons.light_mode_rounded : Icons.dark_mode_rounded, + ), ); } @@ -125,8 +105,9 @@ class _ThemeViewState extends State { isDark ? ThemeMode.dark : ThemeMode.light, ); context.themeViewModel.setTheme( - _themePages().get(_themePageIndex).item2, + _themePages().get(_themePageIndex).$2, ); + Navigator.of(context).pop(); }, ), ); diff --git a/lib/ui/tts_settings_view.dart b/lib/ui/tts_settings_view.dart new file mode 100644 index 0000000..8126657 --- /dev/null +++ b/lib/ui/tts_settings_view.dart @@ -0,0 +1,467 @@ +import 'package:flutter/material.dart'; + +import '../dependency_injection_container.dart'; +import '../services/shared_preferences_service.dart'; +import '../services/tts_service.dart'; +import 'shared_widgets/app_bar.dart'; +import 'shared_widgets/view_constraint.dart'; +import 'theme/simple_aac_text.dart'; + +const _openAiVoices = [ + (name: 'alloy', description: 'Balanced, versatile'), + (name: 'echo', description: 'Warm, rich'), + (name: 'fable', description: 'Expressive, British'), + (name: 'onyx', description: 'Deep, authoritative'), + (name: 'nova', description: 'Friendly, upbeat'), + (name: 'shimmer', description: 'Clear, bright'), +]; + +class TtsSettingsView extends StatefulWidget { + static const String routeName = '/tts-settings'; + + const TtsSettingsView({super.key}); + + @override + State createState() => _TtsSettingsViewState(); +} + +class _TtsSettingsViewState extends State { + final _prefs = getIt.get(); + final _tts = getIt.get(); + + late double _pitch; + late double _rate; + late Future> _voicesFuture; + String? _selectedVoiceName; + late String _openAiVoice; + late bool _useAiVoice; + + bool _hasKey = false; + bool _keyLoading = true; + final _keyController = TextEditingController(); + bool _keyObscured = true; + + @override + void initState() { + super.initState(); + _pitch = _prefs.ttsPitch; + _rate = _prefs.ttsSpeechRate; + _selectedVoiceName = _prefs.ttsVoiceName; + _openAiVoice = _prefs.ttsOpenAiVoice; + _useAiVoice = _prefs.useAiVoice; + _voicesFuture = _tts.getVoices(); + _loadKeyStatus(); + } + + @override + void dispose() { + _keyController.dispose(); + super.dispose(); + } + + Future _loadKeyStatus() async { + final key = await _tts.getOpenAiKey(); + if (!mounted) return; + setState(() { + _hasKey = key?.isNotEmpty == true; + if (_hasKey) _keyController.text = key!; + _keyLoading = false; + }); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: SimpleAACAppBar(label: 'Speech Settings'), + body: _keyLoading + ? const Center(child: CircularProgressIndicator()) + : ViewConstraint( + child: ListView( + padding: const EdgeInsets.symmetric(vertical: 8), + children: [ + _sectionHeader('Device Voice'), + _buildDeviceVoiceSelector(), + const Divider(), + _sectionHeader('AI Voice'), + _buildAiVoiceSection(), + const Divider(), + _sectionHeader('Speed'), + _buildSliderTile( + value: _rate, + min: 0.1, + max: 1.0, + divisions: 18, + label: _rateLabel(_rate), + onChanged: (v) { + setState(() => _rate = v); + _prefs.setTtsSpeechRate(v); + _tts.updateSpeechRate(v); + }, + ), + if (!_useAiVoice) ...[ + const Divider(), + _sectionHeader('Pitch'), + _buildSliderTile( + value: _pitch, + min: 0.5, + max: 2.0, + divisions: 15, + label: _pitchLabel(_pitch), + onChanged: (v) { + setState(() => _pitch = v); + _prefs.setTtsPitch(v); + _tts.updatePitch(v); + }, + ), + ], + const Divider(), + const SizedBox(height: 16), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: FilledButton.icon( + onPressed: () => _tts.speakWord( + 'Hello, this is a test of the speech settings.'), + icon: const Icon(Icons.play_arrow), + label: const Text('Test voice'), + ), + ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: TextButton( + onPressed: _resetDefaults, + child: const Text('Reset to defaults'), + ), + ), + ], + ), + ), + ); + } + + // ── Device Voice ─────────────────────────────────────────────────────────── + + Widget _buildDeviceVoiceSelector() { + final active = !_useAiVoice; + return FutureBuilder>( + future: _voicesFuture, + builder: (context, snapshot) { + if (snapshot.connectionState != ConnectionState.done) { + return const ListTile( + title: Text('Loading voices…', style: SimpleAACText.body1Style), + trailing: SizedBox( + width: 20, + height: 20, + child: CircularProgressIndicator(strokeWidth: 2), + ), + ); + } + + final voices = (snapshot.data ?? []) + .where((v) => v.locale.toLowerCase().startsWith('en')) + .toList(); + final selected = + voices.where((v) => v.name == _selectedVoiceName).firstOrNull; + + return ListTile( + enabled: active, + title: Text( + selected?.displayName ?? 'Default', + style: SimpleAACText.body1Style, + ), + subtitle: active + ? null + : const Text( + 'Inactive while AI voice is on', + style: SimpleAACText.body2Style, + ), + trailing: Row( + mainAxisSize: MainAxisSize.min, + children: [ + if (selected != null && selected.quality != TtsVoiceQuality.standard) + _qualityChip(selected.quality), + const SizedBox(width: 8), + const Icon(Icons.chevron_right), + ], + ), + onTap: active && voices.isNotEmpty + ? () => _showVoicePicker(voices, selected) + : null, + ); + }, + ); + } + + void _showVoicePicker(List voices, TtsVoice? current) { + showModalBottomSheet( + context: context, + isScrollControlled: true, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.vertical(top: Radius.circular(16)), + ), + builder: (context) => DraggableScrollableSheet( + initialChildSize: 0.6, + minChildSize: 0.4, + maxChildSize: 0.9, + expand: false, + builder: (context, scrollController) => Column( + children: [ + const SizedBox(height: 12), + Container( + width: 40, + height: 4, + decoration: BoxDecoration( + color: Theme.of(context).colorScheme.outlineVariant, + borderRadius: BorderRadius.circular(2), + ), + ), + const SizedBox(height: 12), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: Text('Choose a voice', style: SimpleAACText.subtitle2Style), + ), + const SizedBox(height: 8), + const Divider(height: 1), + Expanded( + child: ListView.builder( + controller: scrollController, + itemCount: voices.length, + itemBuilder: (context, i) { + final voice = voices[i]; + final isSelected = voice.name == _selectedVoiceName; + return ListTile( + title: Text(voice.displayName, + style: SimpleAACText.body1Style), + subtitle: Text(voice.locale, + style: SimpleAACText.body2Style), + trailing: Row( + mainAxisSize: MainAxisSize.min, + children: [ + if (voice.quality != TtsVoiceQuality.standard) + _qualityChip(voice.quality), + const SizedBox(width: 8), + Icon( + isSelected + ? Icons.check_circle + : Icons.circle_outlined, + color: isSelected + ? Theme.of(context).colorScheme.primary + : Theme.of(context).colorScheme.outlineVariant, + ), + ], + ), + onTap: () { + setState(() => _selectedVoiceName = voice.name); + _tts.setVoice(voice); + Navigator.of(context).pop(); + }, + ); + }, + ), + ), + ], + ), + ), + ); + } + + // ── AI Voice ─────────────────────────────────────────────────────────────── + + Widget _buildAiVoiceSection() { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: Text( + _hasKey + ? 'Update your OpenAI API key below.' + : 'Enter an OpenAI API key to use high-quality AI voices.', + style: SimpleAACText.body2Style, + ), + ), + const SizedBox(height: 8), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: Row( + children: [ + Expanded( + child: TextField( + controller: _keyController, + obscureText: _keyObscured, + decoration: InputDecoration( + hintText: 'sk-...', + border: const OutlineInputBorder(), + suffixIcon: IconButton( + icon: Icon( + _keyObscured ? Icons.visibility : Icons.visibility_off), + onPressed: () => + setState(() => _keyObscured = !_keyObscured), + ), + ), + style: SimpleAACText.body1Style, + ), + ), + const SizedBox(width: 8), + FilledButton( + onPressed: _saveKey, + child: const Text('Save'), + ), + ], + ), + ), + if (_hasKey) ...[ + const SizedBox(height: 4), + SwitchListTile( + value: _useAiVoice, + onChanged: (v) { + setState(() => _useAiVoice = v); + _prefs.setUseAiVoice(v); + }, + title: const Text('Use AI voice', style: SimpleAACText.body1Style), + ), + if (_useAiVoice) ...[ + const Padding( + padding: EdgeInsets.symmetric(horizontal: 16), + child: Divider(height: 1), + ), + ..._openAiVoices.map(_buildOpenAiVoiceTile), + ], + ListTile( + dense: true, + title: const Text('Remove AI key', style: SimpleAACText.body2Style), + textColor: Theme.of(context).colorScheme.error, + onTap: _removeKey, + ), + ], + ], + ); + } + + Widget _buildOpenAiVoiceTile(({String name, String description}) voice) { + final isSelected = _openAiVoice == voice.name; + return ListTile( + title: Text( + voice.name[0].toUpperCase() + voice.name.substring(1), + style: SimpleAACText.body1Style, + ), + subtitle: Text(voice.description, style: SimpleAACText.body2Style), + trailing: Icon( + isSelected ? Icons.check_circle : Icons.circle_outlined, + color: isSelected + ? Theme.of(context).colorScheme.primary + : Theme.of(context).colorScheme.outlineVariant, + ), + onTap: () { + setState(() => _openAiVoice = voice.name); + _prefs.setTtsOpenAiVoice(voice.name); + }, + ); + } + + Future _saveKey() async { + final key = _keyController.text.trim(); + if (key.isEmpty) return; + await _tts.setOpenAiKey(key); + setState(() { + _hasKey = true; + _useAiVoice = true; + }); + } + + Future _removeKey() async { + await _tts.clearOpenAiKey(); + _keyController.clear(); + setState(() { + _hasKey = false; + _useAiVoice = false; + }); + } + + // ── Shared ───────────────────────────────────────────────────────────────── + + Widget _qualityChip(TtsVoiceQuality quality) { + final (label, color) = switch (quality) { + TtsVoiceQuality.premium => ('Premium', Colors.purple), + TtsVoiceQuality.enhanced => ('Enhanced', Colors.blue), + TtsVoiceQuality.standard => ('Standard', Colors.grey), + }; + return Container( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 2), + decoration: BoxDecoration( + color: color.withAlpha(30), + border: Border.all(color: color.withAlpha(100)), + borderRadius: BorderRadius.circular(12), + ), + child: Text( + label, + style: SimpleAACText.body2Style.copyWith(color: color, fontSize: 11), + ), + ); + } + + Widget _buildSliderTile({ + required double value, + required double min, + required double max, + required int divisions, + required String label, + required ValueChanged onChanged, + }) { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: Row( + children: [ + SizedBox( + width: 72, + child: Text(label, style: SimpleAACText.body2Style), + ), + Expanded( + child: Slider( + value: value, + min: min, + max: max, + divisions: divisions, + onChanged: onChanged, + ), + ), + ], + ), + ); + } + + String _rateLabel(double v) { + if (v < 0.3) return 'Slow'; + if (v < 0.55) return 'Normal'; + if (v < 0.75) return 'Fast'; + return 'Very fast'; + } + + String _pitchLabel(double v) { + if (v < 0.8) return 'Low'; + if (v < 1.2) return 'Normal'; + if (v < 1.6) return 'High'; + return 'Very high'; + } + + Future _resetDefaults() async { + const defaultRate = 0.44; + const defaultPitch = 1.05; + _prefs.setTtsSpeechRate(defaultRate); + _prefs.setTtsPitch(defaultPitch); + _tts.updateSpeechRate(defaultRate); + _tts.updatePitch(defaultPitch); + final autoVoice = await _tts.resetVoice(); + setState(() { + _rate = defaultRate; + _pitch = defaultPitch; + _selectedVoiceName = autoVoice?.name; + }); + } + + Widget _sectionHeader(String title) { + return Padding( + padding: const EdgeInsets.fromLTRB(16, 8, 16, 4), + child: Text(title, style: SimpleAACText.body1Style), + ); + } +} diff --git a/lib/ui/word_detail_view.dart b/lib/ui/word_detail_view.dart index 0dc4e3f..12313f0 100644 --- a/lib/ui/word_detail_view.dart +++ b/lib/ui/word_detail_view.dart @@ -1,25 +1,24 @@ -import 'package:built_collection/built_collection.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import '../../extensions/build_context_extension.dart'; import '../api/models/word.dart'; import '../dependency_injection_container.dart'; import '../extensions/iterable_extension.dart'; +import '../services/image_path_service.dart'; +import '../services/tts_service.dart'; import '../view_models/words_view_model.dart'; +import '../extensions/string_extension.dart'; import 'dashboard/app_shell.dart'; import 'dashboard/related_words_widget.dart'; import 'manage_word_view.dart'; -import 'shared_widgets/overlay_button.dart'; import 'shared_widgets/simple_aac_dialog.dart'; +import 'shared_widgets/view_constraint.dart'; import 'shared_widgets/simple_aac_table.dart'; +import 'shared_widgets/word_image.dart'; import 'theme/simple_aac_text.dart'; class WordDetailViewArguments { - WordDetailViewArguments({ - required this.word, - this.heroTag, - }); + WordDetailViewArguments({required this.word, this.heroTag}); final Word word; final String? heroTag; @@ -27,6 +26,8 @@ class WordDetailViewArguments { const kImageHeight = 350.0; +enum _DetailAction { edit, delete } + class WordDetailView extends StatefulWidget { static const String routeName = '/word-detail'; @@ -35,17 +36,54 @@ class WordDetailView extends StatefulWidget { } class _WordDetailViewState extends State { - final wordViewModel = getIt.get(); + final _wordsViewModel = getIt.get(); + final _ttsService = getIt.get(); - WordDetailViewArguments get _wordDetailViewArguments => context.routeArguments as WordDetailViewArguments; + WordDetailViewArguments get _args => + context.routeArguments as WordDetailViewArguments; - Word get _word => _wordDetailViewArguments.word; + late Word _word = _args.word; + String? get _heroTag => _args.heroTag; - String? get heroTag => _wordDetailViewArguments.heroTag; + Future _toggleFavourite() async { + final updated = await _wordsViewModel.toggleFavourite(_word); + if (mounted) setState(() => _word = updated); + } @override Widget build(BuildContext context) { return Scaffold( + extendBodyBehindAppBar: true, + appBar: AppBar( + backgroundColor: Colors.black.withOpacity(0.25), + elevation: 0, + scrolledUnderElevation: 0, + title: Text(_word.text.toTitleCase()), + actions: [ + PopupMenuButton<_DetailAction>( + iconColor: Colors.white, + onSelected: (action) => _handleAction(action, _word), + itemBuilder: (_) => const [ + PopupMenuItem( + value: _DetailAction.edit, + child: ListTile( + leading: Icon(Icons.edit_outlined), + title: Text('Edit'), + contentPadding: EdgeInsets.zero, + ), + ), + PopupMenuItem( + value: _DetailAction.delete, + child: ListTile( + leading: Icon(Icons.delete_outline, color: Colors.red), + title: Text('Delete', style: TextStyle(color: Colors.red)), + contentPadding: EdgeInsets.zero, + ), + ), + ], + ), + ], + ), body: SingleChildScrollView( child: Column( mainAxisSize: MainAxisSize.min, @@ -55,135 +93,108 @@ class _WordDetailViewState extends State { children: [ _buildWordDetailImage(_word), _buildSpeechActionButton(), - Padding( - padding: EdgeInsets.only(top: context.topPadding), - child: SizedBox( - height: kToolbarHeight, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - OverlayButton( - onTap: Navigator.of(context).pop, - iconData: Icons.arrow_back, - size: const Size( - kToolbarHeight, - kToolbarHeight, - ), - ), - OverlayButton( - onTap: Navigator.of(context).pop, - iconData: _word.isFavourite == true ? Icons.favorite_rounded : Icons.favorite_outline_rounded, - size: const Size( - kToolbarHeight, - kToolbarHeight, - ), - ), - ], - ), - ), - ) ], ), - Padding( - padding: const EdgeInsets.all( - 16.0, - ), + ViewConstraint( + child: Padding( + padding: const EdgeInsets.all(16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Text( 'Details', style: SimpleAACText.subtitle3Style.copyWith( - color: context.themeColors.onBackground, + color: context.themeColors.onSurface, ), ), - const SizedBox( - height: 8, - ), + const SizedBox(height: 8), SimpleAACTable( wordskiiTableRowInfoList: [ SimpleAACTableRowInfo( - _word.word, + _word.text, Icons.title, 'Word : ', ), SimpleAACTableRowInfo( - _word.sound, + _word.phoneticOverride ?? _word.text, Icons.volume_up, 'Speak : ', ), SimpleAACTableRowInfo( _word.subType.name, - Icons.title, - 'Description : ', + Icons.category, + 'Category : ', ), SimpleAACTableRowInfo( _word.type.name, - Icons.title, + Icons.label, 'Type : ', ), - SimpleAACTableRowInfo( - _word.usageCount != null ? '${_word.usageCount?.toString()} times' : '0 times', - Icons.title, - 'Used : ', - ), - SimpleAACTableRowInfo( - '', - Icons.star_rounded, - 'Keystage : ', - child: Row( - children: [ - Icon( - Icons.star_rounded, - color: context.themeColors.onBackground, - ), - Icon( - Icons.star_rounded, - color: context.themeColors.onBackground, - ), - Icon( - Icons.star_rounded, - color: context.themeColors.onBackground, - ), - ], - ), - ), ], ), - const SizedBox( - height: 8, - ), + const SizedBox(height: 8), Text( - 'Predictions : ', + 'Related Words', style: SimpleAACText.subtitle3Style.copyWith( - color: context.themeColors.onBackground, + color: context.themeColors.onSurface, ), ), - const SizedBox( - height: 8, + const SizedBox(height: 8), + FutureBuilder>( + future: _wordsViewModel.getWordsForIds(_word.extraRelatedWordIds), + builder: (context, snapshot) { + return RelatedWordsWidget( + onRelatedWordSelected: (_) {}, + relatedWords: snapshot.data ?? [], + isExpanded: true, + ); + }, ), - FutureBuilder>( - future: wordViewModel.getWordsForIds(_word.extraRelatedWordIds), - builder: (context, snapshot) { - final extraRelatedWords = snapshot.data ?? BuiltList(); - return RelatedWordsWidget( - onRelatedWordSelected: (_) {}, - relatedWords: extraRelatedWords, - isExpanded: true, - ); - }), ], ), ), + ), ], ), ), - floatingActionButton: _buildEditDeleteWordActionButton( - _word, + floatingActionButton: FloatingActionButton( + heroTag: null, + onPressed: _toggleFavourite, + child: Icon( + _word.isFavourite ? Icons.favorite_rounded : Icons.favorite_outline_rounded, + ), ), ); } + Future _handleAction(_DetailAction action, Word word) async { + switch (action) { + case _DetailAction.edit: + await Navigator.of(context).pushNamed( + ManageWordView.routeName, + arguments: ManageWordViewArguments(word: word, heroTag: _heroTag), + ); + case _DetailAction.delete: + final confirm = await SimpleAACDialog( + title: 'Delete word', + content: const Text('Are you sure you want to delete this word?'), + dialogActions: [ + DialogAction( + actionText: 'Cancel', + color: Colors.green, + actionVoidCallback: () => Navigator.of(context).pop(false), + ), + DialogAction( + actionText: 'Delete', + color: Colors.red, + actionVoidCallback: () => Navigator.of(context).pop(true), + ), + ], + ).show(context); + if (confirm == true && mounted) Navigator.of(context).pop(); + } + } + Widget _buildSpeechActionButton() { return Positioned.fill( child: Align( @@ -193,12 +204,30 @@ class _WordDetailViewState extends State { child: Hero( tag: kPlayButtonHeroTag, transitionOnUserGestures: true, - child: FloatingActionButton( - heroTag: null, - onPressed: () {}, - child: const Icon( - Icons.play_arrow, - ), + child: StreamBuilder( + stream: _ttsService.isSpeaking, + builder: (context, snapshot) { + final speaking = snapshot.data ?? false; + return FloatingActionButton( + heroTag: null, + onPressed: () { + if (speaking) { + _ttsService.stop(); + } else { + _ttsService.speakWord( + _word.phoneticOverride ?? _word.text, + ); + } + }, + child: AnimatedSwitcher( + duration: const Duration(milliseconds: 200), + child: Icon( + speaking ? Icons.stop_rounded : Icons.play_arrow_rounded, + key: ValueKey(speaking), + ), + ), + ); + }, ), ), ), @@ -206,104 +235,28 @@ class _WordDetailViewState extends State { ); } - Widget _buildWordDetailImage(Word _word) { + Widget _buildWordDetailImage(Word word) { + final image = _buildImage(word); return Padding( - padding: const EdgeInsets.only( - bottom: 24, - ), - child: heroTag != null - ? _wrapWithHero( - _buildImage(_word), - heroTag!, - ) - : _buildImage(_word)); - } - - Widget _wrapWithHero( - Widget child, - String heroTag, - ) { - return Hero( - tag: heroTag, - transitionOnUserGestures: true, - child: child, - ); - } - - Widget _buildImage(Word _word) { - return Image.asset( - _word.imageList.firstOrNull() ?? 'assets/images/sealstudioslogocenter.png', - fit: BoxFit.cover, - height: kImageHeight, - width: context.screenWidth, + padding: const EdgeInsets.only(bottom: 24), + child: _heroTag != null + ? Hero( + tag: _heroTag!, + transitionOnUserGestures: true, + placeholderBuilder: (_, __, child) => child, + child: image, + ) + : image, ); } - Widget _buildEditDeleteWordActionButton( - Word word, - ) { - return SpeedDial( - spaceBetweenChildren: 4, - buttonSize: const Size(48, 48), - childrenButtonSize: const Size(46, 46), - spacing: 4, - children: [ - SpeedDialChild( - onTap: () { - Navigator.of(context).pushReplacementNamed( - ManageWordView.routeName, - arguments: ManageWordViewArguments( - word: word, - heroTag: heroTag, - ), - ); - }, - child: const FloatingActionButton( - onPressed: null, - heroTag: null, - child: Icon(Icons.edit), - ), + Widget _buildImage(Word word) => SizedBox( + height: kImageHeight, + width: double.infinity, + child: WordImage( + imagePath: getIt().resolve(word), + fit: BoxFit.cover, ), - SpeedDialChild( - onTap: () async { - final delete = await SimpleAACDialog( - title: 'Delete', - content: const Padding( - padding: EdgeInsets.only(top: 8.0), - child: Text( - 'Are you sure you want to delete this word?', - style: SimpleAACText.body1Style, - ), - ), - dialogActions: [ - DialogAction( - actionText: 'Cancel', - actionVoidCallback: () { - Navigator.of(context).pop(false); - }, - ), - DialogAction( - actionText: 'Delete', - actionVoidCallback: () { - Navigator.of(context).pop(true); - }, - ), - ], - ).show(context); - if (delete == true) { - //TODO delete card - } - }, - child: const FloatingActionButton( - onPressed: null, - heroTag: null, - child: Icon(Icons.delete), - ), - ), - ], - useRotationAnimation: true, - icon: Icons.edit, - activeIcon: Icons.close, - ); - } + ); + } diff --git a/lib/ui/word_group_detail_view.dart b/lib/ui/word_group_detail_view.dart new file mode 100644 index 0000000..cc40efa --- /dev/null +++ b/lib/ui/word_group_detail_view.dart @@ -0,0 +1,154 @@ +import 'package:flutter/material.dart'; + +import '../api/models/word.dart'; +import '../api/models/word_group.dart'; +import '../dependency_injection_container.dart'; +import '../extensions/build_context_extension.dart'; +import '../services/word_group_service.dart'; +import '../view_models/word_group_view_model.dart'; +import 'create_word_group_view.dart'; +import 'shared_widgets/app_bar.dart'; +import 'shared_widgets/word_tile.dart'; + +class WordGroupDetailViewArguments { + const WordGroupDetailViewArguments({required this.group}); + final WordGroup group; +} + +class WordGroupDetailView extends StatefulWidget { + static const routeName = '/word-group-detail'; + + const WordGroupDetailView({super.key}); + + @override + State createState() => _WordGroupDetailViewState(); +} + +class _WordGroupDetailViewState extends State { + late WordGroup _group; + List? _words; + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + final args = + context.routeArguments as WordGroupDetailViewArguments; + if (_words == null) { + _group = args.group; + _loadWords(); + } + } + + Future _loadWords() async { + final words = await getIt + .get() + .getWordsForGroup(_group); + if (mounted) setState(() => _words = words); + } + + Future _delete() async { + final confirmed = await showDialog( + context: context, + builder: (ctx) => AlertDialog( + title: const Text('Delete group?'), + content: Text('Remove "${_group.title}" permanently?'), + actions: [ + TextButton( + onPressed: () => Navigator.of(ctx).pop(false), + child: const Text('Cancel'), + ), + TextButton( + onPressed: () => Navigator.of(ctx).pop(true), + child: const Text('Delete'), + ), + ], + ), + ); + if (confirmed == true && mounted) { + await getIt.get().delete(_group.id); + Navigator.of(context).pop(); + } + } + + Future _edit() async { + final updated = await Navigator.of(context).pushNamed( + CreateWordGroupView.routeName, + arguments: CreateWordGroupViewArguments(existingGroup: _group), + ) as WordGroup?; + if (updated != null && mounted) { + setState(() { + _group = updated; + _words = null; + }); + _loadWords(); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: SimpleAACAppBar( + label: _group.title, + actions: [ + IconButton( + icon: const Icon(Icons.edit_outlined), + onPressed: _edit, + ), + IconButton( + icon: const Icon(Icons.delete_outline), + onPressed: _delete, + ), + ], + ), + body: _words == null + ? const Center(child: CircularProgressIndicator()) + : _buildBody(), + floatingActionButton: FloatingActionButton( + onPressed: () { + // TODO: play the group sentence via TTS + }, + child: const Icon(Icons.play_arrow), + ), + ); + } + + Widget _buildBody() { + final words = _words!; + return Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + _buildWordStrip(words), + const Divider(height: 1), + Padding( + padding: const EdgeInsets.fromLTRB(16, 12, 16, 0), + child: Text( + '${words.length} word${words.length == 1 ? '' : 's'}', + style: TextStyle( + color: context.themeColors.onSurface.withOpacity(0.55), + fontSize: 13, + ), + ), + ), + ], + ); + } + + Widget _buildWordStrip(List words) { + return SizedBox( + height: 160, + child: ListView.separated( + scrollDirection: Axis.horizontal, + padding: const EdgeInsets.all(8), + itemCount: words.length, + separatorBuilder: (_, __) => const SizedBox(width: 4), + itemBuilder: (context, index) { + final word = words[index]; + return WordTile( + key: ValueKey(word.wordId), + word: word, + ); + }, + ), + ); + } +} diff --git a/lib/ui/word_groups_view.dart b/lib/ui/word_groups_view.dart new file mode 100644 index 0000000..f5a2c58 --- /dev/null +++ b/lib/ui/word_groups_view.dart @@ -0,0 +1,117 @@ +import 'package:flutter/material.dart'; + +import '../dependency_injection_container.dart'; +import '../view_models/word_group_view_model.dart'; +import 'create_word_group_view.dart'; +import 'shared_widgets/adaptive_position_floating_action_button.dart'; +import 'shared_widgets/app_bar.dart'; +import 'shared_widgets/view_constraint.dart'; +import 'shared_widgets/word_group_tile.dart'; +import 'word_group_detail_view.dart'; + +class WordGroupsView extends StatefulWidget { + static const String routeName = '/word-groups'; + + const WordGroupsView({super.key}); + + @override + State createState() => _WordGroupsViewState(); +} + +class _WordGroupsViewState extends State { + final _viewModel = getIt.get(); + + @override + void initState() { + super.initState(); + _viewModel.init(); + } + + @override + void dispose() { + _viewModel.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: SimpleAACAppBar(label: 'Groups'), + body: ViewConstraint( + child: StreamBuilder( + stream: _viewModel.resolvedGroups, + builder: (context, snapshot) { + final groups = snapshot.data ?? []; + if (groups.isEmpty) { + return _buildEmptyState(); + } + return _buildGrid(groups); + }, + ), + ), + floatingActionButton: AdaptivePositionFloatingActionButton( + onPressed: _createGroup, + child: const Icon(Icons.add), + ), + ); + } + + Widget _buildEmptyState() { + return const Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(Icons.grid_view_rounded, size: 64, color: Colors.grey), + SizedBox(height: 16), + Text( + 'No groups yet', + style: TextStyle(fontSize: 18, color: Colors.grey), + ), + SizedBox(height: 8), + Text( + 'Tap + to build and save a sentence.', + textAlign: TextAlign.center, + style: TextStyle(color: Colors.grey), + ), + ], + ), + ); + } + + Widget _buildGrid(List resolvedGroups) { + return LayoutBuilder( + builder: (context, constraints) { + final crossAxisCount = (constraints.maxWidth / 200).floor().clamp(2, 6); + return GridView.builder( + padding: const EdgeInsets.all(8), + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: crossAxisCount, + crossAxisSpacing: 8, + mainAxisSpacing: 8, + childAspectRatio: 1 / 1.3, + ), + itemCount: resolvedGroups.length, + itemBuilder: (context, index) { + final (group, words) = resolvedGroups[index]; + return WordGroupTile( + key: ValueKey(group.id), + group: group, + words: words, + onTap: () => Navigator.of(context).pushNamed( + WordGroupDetailView.routeName, + arguments: WordGroupDetailViewArguments(group: group), + ), + ); + }, + ); + }, + ); + } + + Future _createGroup() async { + await Navigator.of(context).pushNamed( + CreateWordGroupView.routeName, + arguments: const CreateWordGroupViewArguments(), + ); + } +} diff --git a/lib/ui/word_picker_bottom_sheet.dart b/lib/ui/word_picker_bottom_sheet.dart new file mode 100644 index 0000000..68f385b --- /dev/null +++ b/lib/ui/word_picker_bottom_sheet.dart @@ -0,0 +1,100 @@ +import 'package:flutter/material.dart'; + +import '../api/models/word.dart'; +import '../api/models/word_type.dart'; +import '../api/models/extensions/word_type_extension.dart'; +import '../extensions/string_extension.dart'; +import 'shared_widgets/word_tile.dart'; +import 'word_type_views/word_type_view.dart'; + +class WordPickerView extends StatefulWidget { + const WordPickerView({super.key, this.existingWordIds = const []}); + + final List existingWordIds; + + static Future?> show(BuildContext context, {List existingWordIds = const []}) { + return Navigator.of(context).push>( + MaterialPageRoute( + builder: (_) => WordPickerView(existingWordIds: existingWordIds), + fullscreenDialog: true, + ), + ); + } + + @override + State createState() => _WordPickerViewState(); +} + +const _pickerWordTypes = [ + WordType.things, + WordType.actions, + WordType.describe, + WordType.social, + WordType.grammar, +]; + +class _WordPickerViewState extends State { + int _selectedIndex = 0; + late final Set _selectedIds; + + @override + void initState() { + super.initState(); + _selectedIds = Set.of(widget.existingWordIds); + } + + void _onWordTapped(Word word) { + setState(() { + if (_selectedIds.contains(word.wordId)) { + _selectedIds.remove(word.wordId); + } else { + _selectedIds.add(word.wordId); + } + }); + } + + @override + Widget build(BuildContext context) { + final addedCount = _selectedIds.length - widget.existingWordIds.length; + return Scaffold( + appBar: AppBar( + title: const Text('Add Predictions'), + actions: [ + if (_selectedIds.isNotEmpty) + TextButton( + onPressed: () => Navigator.of(context).pop(_selectedIds.toList()), + child: Text( + addedCount > 0 ? 'Done ($addedCount)' : 'Done', + ), + ), + ], + ), + body: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Expanded( + child: WordTypeView( + wordType: _pickerWordTypes[_selectedIndex], + wordTapCallBack: _onWordTapped, + selectedWordIds: _selectedIds, + ), + ), + ], + ), + bottomNavigationBar: BottomNavigationBar( + type: BottomNavigationBarType.fixed, + showUnselectedLabels: false, + currentIndex: _selectedIndex, + onTap: (i) => setState(() => _selectedIndex = i), + items: _pickerWordTypes + .map( + (e) => BottomNavigationBarItem( + icon: Icon(e.getIcon()), + label: e.name.capitalize(), + ), + ) + .toList(), + ), + ); + } +} diff --git a/lib/ui/word_type_views/core_word_view.dart b/lib/ui/word_type_views/core_word_view.dart new file mode 100644 index 0000000..6d0c29c --- /dev/null +++ b/lib/ui/word_type_views/core_word_view.dart @@ -0,0 +1,100 @@ +import 'package:flutter/material.dart'; + +import 'package:rxdart/rxdart.dart'; + +import '../../api/models/extensions/word_extension.dart'; +import '../../api/models/word.dart'; +import '../../dependency_injection_container.dart'; +import '../../extensions/build_context_extension.dart'; +import '../../services/word_service.dart'; +import '../../services/word_usage_service.dart'; +import '../../view_models/selected_words_view_model.dart'; +import '../shared_widgets/word_tile.dart'; + +class CoreWordView extends StatefulWidget { + const CoreWordView({super.key}); + + @override + State createState() => _CoreWordViewState(); +} + +class _CoreWordViewState extends State + with AutomaticKeepAliveClientMixin { + final _wordService = getIt.get(); + final _usageService = getIt.get(); + final _selectedWordsViewModel = getIt.get(); + + late final Stream> _words = CombineLatestStream.combine2( + _wordService.watchFavourites(), + _usageService + .watchAll() + .startWith([]) + .onErrorReturn([]) + .map((usages) => {for (final u in usages) u.wordId: u.count}), + (words, counts) => [...words] + ..sort((a, b) => (counts[b.wordId] ?? 0).compareTo(counts[a.wordId] ?? 0)), + ); + + @override + Widget build(BuildContext context) { + super.build(context); + return StreamBuilder>( + stream: _words, + builder: (context, snapshot) { + final words = snapshot.data ?? []; + if (words.isEmpty) { + return Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Icon( + Icons.favorite_border_rounded, + size: 64, + color: context.themeColors.onSurface.withOpacity(0.3), + ), + const SizedBox(height: 16), + Text( + 'No favourites yet', + style: TextStyle( + fontSize: 18, + color: context.themeColors.onSurface.withOpacity(0.4), + ), + ), + const SizedBox(height: 8), + Text( + 'Long-press a word and heart it\nto pin it here.', + textAlign: TextAlign.center, + style: TextStyle( + color: context.themeColors.onSurface.withOpacity(0.35), + ), + ), + ], + ), + ); + } + return Padding( + padding: const EdgeInsets.all(4.0), + child: GridView.count( + crossAxisCount: 4, + mainAxisSpacing: 4, + crossAxisSpacing: 4, + childAspectRatio: 0.86, + children: words + .map( + (word) => WordTile( + word: word, + key: ValueKey(word.wordId), + heroTag: word.getHeroTag('favourites-${word.wordId}'), + wordTapCallBack: _selectedWordsViewModel.addSelectedWord, + ), + ) + .toList(), + ), + ); + }, + ); + } + + @override + bool get wantKeepAlive => true; +} diff --git a/lib/ui/word_type_views/group_word_view.dart b/lib/ui/word_type_views/group_word_view.dart new file mode 100644 index 0000000..56e546c --- /dev/null +++ b/lib/ui/word_type_views/group_word_view.dart @@ -0,0 +1,96 @@ +import 'package:flutter/material.dart'; + +import '../../dependency_injection_container.dart'; +import '../../view_models/selected_words_view_model.dart'; +import '../../view_models/word_group_view_model.dart'; +import '../shared_widgets/word_group_tile.dart'; +import '../word_group_detail_view.dart'; + +class GroupWordView extends StatefulWidget { + const GroupWordView({super.key}); + + @override + State createState() => _GroupWordViewState(); +} + +class _GroupWordViewState extends State + with AutomaticKeepAliveClientMixin { + final _viewModel = getIt.get(); + final _selectedWordsViewModel = getIt.get(); + + @override + void initState() { + super.initState(); + _viewModel.init(); + } + + @override + void dispose() { + _viewModel.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + super.build(context); + return StreamBuilder( + stream: _viewModel.resolvedGroups, + builder: (context, snapshot) { + final groups = snapshot.data ?? []; + if (groups.isEmpty) { + return _buildEmptyState(); + } + return Padding( + padding: const EdgeInsets.all(4), + child: GridView.builder( + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 3, + crossAxisSpacing: 4, + mainAxisSpacing: 4, + childAspectRatio: 1 / 1.3, + ), + itemCount: groups.length, + itemBuilder: (context, index) { + final (group, words) = groups[index]; + return WordGroupTile( + key: ValueKey(group.id), + group: group, + words: words, + onTap: () => _selectedWordsViewModel.addAllWords(words), + onLongPress: () => Navigator.of(context).pushNamed( + WordGroupDetailView.routeName, + arguments: WordGroupDetailViewArguments(group: group), + ), + ); + }, + ), + ); + }, + ); + } + + Widget _buildEmptyState() { + return const Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(Icons.playlist_play_rounded, size: 64, color: Colors.grey), + SizedBox(height: 16), + Text( + 'No groups yet', + style: TextStyle(fontSize: 18, color: Colors.grey), + ), + SizedBox(height: 8), + Text( + 'Use + to build and save a sentence group.', + textAlign: TextAlign.center, + style: TextStyle(color: Colors.grey), + ), + ], + ), + ); + } + + @override + bool get wantKeepAlive => true; +} diff --git a/lib/ui/word_type_views/word_sub_type_view.dart b/lib/ui/word_type_views/word_sub_type_view.dart index 8acfb84..4a7e6a6 100644 --- a/lib/ui/word_type_views/word_sub_type_view.dart +++ b/lib/ui/word_type_views/word_sub_type_view.dart @@ -1,6 +1,4 @@ -import 'package:built_collection/built_collection.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import '../../../api/models/extensions/word_extension.dart'; import '../../../api/models/word.dart'; @@ -11,45 +9,75 @@ import '../../../view_models/words_view_model.dart'; import '../shared_widgets/word_tile.dart'; class WordSubTypeView extends StatefulWidget { - const WordSubTypeView({ - super.key, - required this.wordSubType, - }); + const WordSubTypeView({super.key, required this.wordSubType, this.wordTapCallBack, this.selectedWordIds}); final WordSubType wordSubType; + final WordCallBack? wordTapCallBack; + final Set? selectedWordIds; @override State createState() => _WordSubTypeViewState(); } -class _WordSubTypeViewState extends State with AutomaticKeepAliveClientMixin { - final selectedWordsViewModel = getIt.get(); - final wordsViewModel = getIt.get(); +class _WordSubTypeViewState extends State + with AutomaticKeepAliveClientMixin { + final _selectedWordsViewModel = getIt.get(); + final _wordsViewModel = getIt.get(); + final _scrollController = ScrollController(); + int _previousWordCount = 0; @override void initState() { super.initState(); - wordsViewModel.init(widget.wordSubType); + _wordsViewModel.init(widget.wordSubType); + } + + @override + void didUpdateWidget(WordSubTypeView oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.wordSubType != widget.wordSubType) { + _previousWordCount = 0; + _wordsViewModel.reinit(widget.wordSubType); + } } @override void dispose() { - wordsViewModel.dispose(); + _scrollController.dispose(); + _wordsViewModel.dispose(); super.dispose(); } + void _scrollToEnd() { + WidgetsBinding.instance.addPostFrameCallback((_) { + if (_scrollController.hasClients) { + _scrollController.animateTo( + _scrollController.position.maxScrollExtent, + duration: const Duration(milliseconds: 300), + curve: Curves.easeOut, + ); + } + }); + } + @override Widget build(BuildContext context) { super.build(context); - return StreamBuilder>( - stream: wordsViewModel.wordsOfType, + return StreamBuilder>( + stream: _wordsViewModel.sortedWordsOfType, builder: (context, snapshot) { - final words = snapshot.data ?? BuiltList(); - return Padding( - padding: const EdgeInsets.all(4.0), - child: GridView.count( - crossAxisCount: 4, - // calculate screen width + final words = snapshot.data ?? []; + if (words.length > _previousWordCount && _previousWordCount > 0) { + _scrollToEnd(); + } + _previousWordCount = words.length; + return LayoutBuilder( + builder: (context, constraints) { + final crossAxisCount = (constraints.maxWidth / 120).floor().clamp(4, 12); + return GridView.count( + controller: _scrollController, + padding: const EdgeInsets.fromLTRB(4, 4, 4, 80), + crossAxisCount: crossAxisCount, mainAxisSpacing: 4, crossAxisSpacing: 4, childAspectRatio: 0.86, @@ -59,13 +87,15 @@ class _WordSubTypeViewState extends State with AutomaticKeepAli word: word, key: ValueKey(word.wordId), heroTag: word.getHeroTag( - '${word.type}-${word.subType}-${word.wordId}', + '${word.type.name}-${word.subType.name}-${word.wordId}', ), - wordTapCallBack: selectedWordsViewModel.addSelectedWord, + isSelected: widget.selectedWordIds?.contains(word.wordId) ?? false, + wordTapCallBack: widget.wordTapCallBack ?? _selectedWordsViewModel.addSelectedWord, ), ) .toList(), - ), + ); + }, ); }, ); diff --git a/lib/ui/word_type_views/word_type_view.dart b/lib/ui/word_type_views/word_type_view.dart index 9144881..a1aa37d 100644 --- a/lib/ui/word_type_views/word_type_view.dart +++ b/lib/ui/word_type_views/word_type_view.dart @@ -7,18 +7,23 @@ import '../../api/models/word_type.dart'; import '../../dependency_injection_container.dart'; import '../../extensions/build_context_extension.dart'; import '../../view_models/utils/tab_bar_view_model.dart'; +import '../shared_widgets/word_tile.dart'; +import 'core_word_view.dart'; import 'word_sub_type_view.dart'; class WordTypeView extends StatefulWidget { - const WordTypeView({super.key, required this.wordType}); + const WordTypeView({super.key, required this.wordType, this.wordTapCallBack, this.selectedWordIds, this.initialSubType}); final WordType wordType; + final WordCallBack? wordTapCallBack; + final Set? selectedWordIds; + final WordSubType? initialSubType; @override State createState() => _WordTypeViewState(); } -class _WordTypeViewState extends State with SingleTickerProviderStateMixin { +class _WordTypeViewState extends State with TickerProviderStateMixin { List get subTypes => widget.wordType.getSubTypes(); final _tabBarViewModel = getIt.get(); @@ -27,22 +32,41 @@ class _WordTypeViewState extends State with SingleTickerProviderSt @override void initState() { super.initState(); - _tabController = TabController(length: subTypes.length, vsync: this); - _tabController.addListener( - () { - _tabBarViewModel.setCurrentTabIndex(_tabController.index); - }, - ); + _tabController = _buildController(); + } + + @override + void didUpdateWidget(WordTypeView oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.wordType != widget.wordType) { + _tabController.dispose(); + _tabController = _buildController(); + } + } + + TabController _buildController() { + final initialIndex = widget.initialSubType != null + ? subTypes.indexOf(widget.initialSubType!).clamp(0, subTypes.length - 1) + : 0; + final controller = TabController(length: subTypes.length, vsync: this, initialIndex: initialIndex < 0 ? 0 : initialIndex); + controller.addListener(() { + _tabBarViewModel.setCurrentTabIndex(controller.index); + }); + return controller; } @override void dispose() { + _tabController.dispose(); _tabBarViewModel.dispose(); super.dispose(); } @override Widget build(BuildContext context) { + if (subTypes.isEmpty) { + return const Expanded(child: CoreWordView()); + } return StreamBuilder( stream: _tabBarViewModel.currentTabIndex, builder: (context, snapshot) { @@ -54,6 +78,8 @@ class _WordTypeViewState extends State with SingleTickerProviderSt child: TabBar( controller: _tabController, isScrollable: true, + tabAlignment: TabAlignment.start, + padding: EdgeInsets.zero, indicatorColor: context.themeColors.secondary, tabs: subTypes .map( @@ -71,7 +97,10 @@ class _WordTypeViewState extends State with SingleTickerProviderSt children: subTypes .map( (e) => WordSubTypeView( + key: ValueKey('${widget.wordType.name}-${e.name}'), wordSubType: e, + wordTapCallBack: widget.wordTapCallBack, + selectedWordIds: widget.selectedWordIds, ), ) .toList(), diff --git a/lib/utils/constants.dart b/lib/utils/constants.dart index a2df350..4da94b2 100644 --- a/lib/utils/constants.dart +++ b/lib/utils/constants.dart @@ -1,3 +1,6 @@ +const double kMaxScreenWidth = 960; +const double kMinScreenWidth = 720; + class Constants { // ignore_for_file: constant_identifier_names static const USER_TOKEN_KEY = 'user_key'; @@ -6,10 +9,25 @@ class Constants { static const USER_FIRST_NAME = 'user_first_name'; static const USER_LAST_NAME = 'user_last_name'; static const THEME_NAME = 'theme_name'; + static const THEME_MODE = 'theme_mode'; static const PASSWORD_KEY = 'password_key'; static const EMAIL_KEY = 'EMAIL_KEY'; static const BIOMETRIC_KEY = 'use_biometric_key'; static const FIRST_TIME = 'first_time'; static const RELATED_WORDS = 'relatedWords'; static const LANGUAGE_ID = 'languageId'; + static const TTS_PITCH = 'ttsPitch'; + static const TTS_SPEECH_RATE = 'ttsSpeechRate'; + static const TTS_VOICE_NAME = 'ttsVoiceName'; + static const TTS_VOICE_LOCALE = 'ttsVoiceLocale'; + static const TTS_OPENAI_VOICE = 'ttsOpenAiVoice'; + static const TTS_HIGHLIGHT_WORDS = 'ttsHighlightWords'; + static const TTS_USE_AI_VOICE = 'ttsUseAiVoice'; + // Stored in FlutterSecureStorage, not SharedPreferences. + static const OPENAI_API_KEY = 'openai_api_key'; + static const GEMINI_API_KEY = 'gemini_api_key'; + // AI predictions toggle + static const AI_PREDICTIONS_ENABLED = 'aiPredictionsEnabled'; + static const AI_PREDICTION_PROVIDER = 'aiPredictionProvider'; + static const IMAGE_ALBUM = 'imageAlbum'; } diff --git a/lib/utils/native_file_utils.dart b/lib/utils/native_file_utils.dart new file mode 100644 index 0000000..74e8c93 --- /dev/null +++ b/lib/utils/native_file_utils.dart @@ -0,0 +1 @@ +export 'native_file_utils_web.dart' if (dart.library.io) 'native_file_utils_native.dart'; diff --git a/lib/utils/native_file_utils_native.dart b/lib/utils/native_file_utils_native.dart new file mode 100644 index 0000000..18d2e99 --- /dev/null +++ b/lib/utils/native_file_utils_native.dart @@ -0,0 +1,40 @@ +import 'dart:io'; +import 'dart:typed_data'; + +import 'package:dart_openai/dart_openai.dart'; +import 'package:path_provider/path_provider.dart'; + +Future savePngBytesToTemp(Uint8List bytes) async { + final dir = await getTemporaryDirectory(); + final file = File( + '${dir.path}/draw_${DateTime.now().millisecondsSinceEpoch}.png', + ); + await file.writeAsBytes(bytes); + return file.path; +} + +Future createOpenAiSpeechFile( + String text, + String voice, + double speed, +) async { + final tempDir = await getTemporaryDirectory(); + final file = await OpenAI.instance.audio.createSpeech( + model: 'tts-1-hd', + input: text, + voice: voice, + outputDirectory: tempDir, + outputFileName: 'tts_${DateTime.now().millisecondsSinceEpoch}', + speed: speed, + ); + return file.path; +} + +/// Not used on native — always returns null; use [createOpenAiSpeechFile]. +Future createOpenAiSpeechBytes( + String text, + String voice, + double speed, + String apiKey, +) async => + null; diff --git a/lib/utils/native_file_utils_web.dart b/lib/utils/native_file_utils_web.dart new file mode 100644 index 0000000..73bf238 --- /dev/null +++ b/lib/utils/native_file_utils_web.dart @@ -0,0 +1,53 @@ +import 'dart:async'; +import 'dart:convert'; +import 'dart:typed_data'; + +// ignore: avoid_web_libraries_in_flutter +import 'dart:html' as html; +import 'dart:typed_data' as html; + +/// On web, writing to the native filesystem is not possible. +/// [savePngBytesToTemp] returns null; callers should handle this +/// by encoding bytes as a data URL instead. +Future savePngBytesToTemp(Uint8List bytes) async => null; + +/// Not used on web — returns null. Use [createOpenAiSpeechBytes] instead. +Future createOpenAiSpeechFile( + String text, + String voice, + double speed, +) async => + null; + +/// Calls the OpenAI TTS API directly from the browser and returns the +/// raw MP3 bytes, which can be played with audioplayers' [BytesSource]. +Future createOpenAiSpeechBytes( + String text, + String voice, + double speed, + String apiKey, +) async { + final completer = Completer(); + final xhr = html.HttpRequest(); + xhr.open('POST', 'https://api.openai.com/v1/audio/speech'); + xhr.setRequestHeader('Authorization', 'Bearer $apiKey'); + xhr.setRequestHeader('Content-Type', 'application/json'); + xhr.responseType = 'arraybuffer'; + xhr.onLoad.listen((_) { + if (xhr.status == 200) { + completer.complete( + Uint8List.view(xhr.response as html.ByteBuffer), + ); + } else { + completer.complete(null); + } + }); + xhr.onError.listen((_) => completer.complete(null)); + xhr.send(json.encode({ + 'model': 'tts-1-hd', + 'input': text, + 'voice': voice, + 'speed': speed, + })); + return completer.future; +} diff --git a/lib/utils/stream_helper.dart b/lib/utils/stream_helper.dart index c0c0bc0..8cbebab 100644 --- a/lib/utils/stream_helper.dart +++ b/lib/utils/stream_helper.dart @@ -1,25 +1,24 @@ import 'package:rxdart/rxdart.dart'; -import 'package:tuple/tuple.dart'; -Stream> combine3( +Stream<(A, B, C)> combine3( Stream streamOne, Stream streamTwo, Stream streamThree, { Duration? debounceTime, }) { - return CombineLatestStream>( + return CombineLatestStream( [streamOne, streamTwo, streamThree], - (values) => Tuple3(values[0] as A, values[1] as B, values[2] as C), + (values) => (values[0] as A, values[1] as B, values[2] as C), ).debounceTime(debounceTime ?? Duration.zero); } -Stream> combine2( +Stream<(A, B)> combine2( Stream streamOne, Stream streamTwo, { Duration? debounceTime, }) { - return CombineLatestStream>( + return CombineLatestStream( [streamOne, streamTwo], - (values) => Tuple2(values[0] as A, values[1] as B), + (values) => (values[0] as A, values[1] as B), ).debounceTime(debounceTime ?? Duration.zero); } diff --git a/lib/view_models/create_word/manage_word_view_model.dart b/lib/view_models/create_word/manage_word_view_model.dart index fca4346..3e3fe01 100644 --- a/lib/view_models/create_word/manage_word_view_model.dart +++ b/lib/view_models/create_word/manage_word_view_model.dart @@ -1,6 +1,6 @@ -import 'package:built_collection/built_collection.dart'; import 'package:rxdart/rxdart.dart'; +import '../../api/models/extensions/word_type_extension.dart'; import '../../api/models/word.dart'; import '../../api/models/word_sub_type.dart'; import '../../api/models/word_type.dart'; @@ -12,102 +12,81 @@ class ManageWordViewModel { final WordService wordService; final wordStream = BehaviorSubject(); + Word? _originalWord; void setWord(Word? word) { - wordStream.add(word); + _originalWord = word; + wordStream.add( + word ?? + Word( + wordId: DateTime.now().millisecondsSinceEpoch.toString(), + text: '', + type: WordType.things, + subType: WordSubType.people, + imagePath: null, + isCoreVocabulary: false, + ), + ); } - void setWordSubType(WordSubType? wordSubType) { - final word = wordStream.value; + void setWordSubType(WordSubType? subType) { + final word = wordStream.valueOrNull; if (word != null) { - wordStream.add( - word.rebuild((p0) => p0.subType = wordSubType), - ); - } else { - wordStream.add( - Word((p0) => p0.subType = wordSubType), - ); + wordStream.add(word.copyWith(subType: subType ?? word.subType)); } } - void setWordType(WordType? wordType) { + void setWordType(WordType? type) { final word = wordStream.valueOrNull; - if (word != null) { - wordStream.add( - word.rebuild((p0) => p0.type = wordType), - ); - } else { - wordStream.add( - Word((p0) => p0.type = wordType), - ); - } + if (word == null || type == null) return; + final subTypes = type.getSubTypes(); + final subType = subTypes.isNotEmpty ? subTypes.first : word.subType; + wordStream.add(word.copyWith(type: type, subType: subType)); } - void setWordWord(String? wordWord) { + void setWordText(String text) { final word = wordStream.valueOrNull; if (word != null) { - wordStream.add( - word.rebuild((p0) => p0.word = wordWord), - ); - } else { - wordStream.add( - Word((p0) => p0.word = wordWord), - ); + wordStream.add(word.copyWith(text: text)); } } - void setWordDescription(String? wordWord) { + void setPhoneticOverride(String? phonetic) { final word = wordStream.valueOrNull; if (word != null) { - wordStream.add( - word.rebuild((p0) => p0.word = wordWord), - ); - } else { - wordStream.add( - Word((p0) => p0.word = wordWord), - ); + wordStream.add(word.copyWith(phoneticOverride: phonetic)); } } - void setWordSound(String? sound) { + void setImagePath(String path) { final word = wordStream.valueOrNull; if (word != null) { - wordStream.add( - word.rebuild((p0) => p0.sound = sound), - ); - } else { - wordStream.add( - Word((p0) => p0.sound = sound), - ); + wordStream.add(word.copyWith(imagePath: path)); } } - void setExtraRelatedWords(BuiltList relatedWordIds) { + void setExtraRelatedWords(List relatedWordIds) { final word = wordStream.valueOrNull; if (word != null) { - wordStream.add( - word.rebuild( - (p0) => p0.extraRelatedWordIds.replace(relatedWordIds), - ), - ); - } else { - wordStream.add( - Word( - (p0) => p0.extraRelatedWordIds.replace(relatedWordIds), - ), - ); + wordStream.add(word.copyWith(extraRelatedWordIds: relatedWordIds)); } } - Stream> get relatedWords => wordStream.whereType().switchMap((word) { - return wordService.getRelatedWords(word).asStream(); - }); + Stream get isValid => wordStream.map( + (word) => word != null && word.text.trim().isNotEmpty && (word.imagePath?.isNotEmpty ?? false), + ); - Stream> get extraRelatedWords => wordStream.whereType().switchMap((word) { - return wordService.getExtraRelatedWords(word).asStream(); - }); + Stream> get relatedWords => + wordStream.whereType().switchMap( + (word) => wordService.getRelatedWords(word).asStream(), + ); - void dispose() { - wordStream.close(); + Future saveWord() async { + final word = wordStream.valueOrNull; + if (word != null) { + await wordService.saveCustomWord(word, original: _originalWord); + } } + + void dispose() => wordStream.close(); } diff --git a/lib/view_models/language_view_model.dart b/lib/view_models/language_view_model.dart index 343698f..b833f3f 100644 --- a/lib/view_models/language_view_model.dart +++ b/lib/view_models/language_view_model.dart @@ -1,5 +1,3 @@ -import 'package:built_collection/built_collection.dart'; - import '../api/models/language.dart'; import '../services/language_service.dart'; @@ -8,15 +6,9 @@ class LanguageViewModel { final LanguageService languageService; - Future getCurrentLanguage() async { - return languageService.getCurrentLanguage(); - } + Language? getCurrentLanguage() => languageService.getCurrentLanguage(); - void setLanguage(Language language) { - languageService.setCurrentLanguage(language); - } + void setLanguage(Language language) => languageService.setCurrentLanguage(language); - Future> allLanguages() async { - return await languageService.getAll(); - } + List allLanguages() => languageService.getAllLanguages(); } diff --git a/lib/view_models/selected_words_view_model.dart b/lib/view_models/selected_words_view_model.dart index 8175c3a..95e20ae 100644 --- a/lib/view_models/selected_words_view_model.dart +++ b/lib/view_models/selected_words_view_model.dart @@ -1,84 +1,140 @@ -import 'package:built_collection/built_collection.dart'; +import 'dart:async'; + import 'package:rxdart/rxdart.dart'; import '../api/models/word.dart'; +import '../services/ai_prediction_service.dart' show AiPredictionService, AiPredictionProvider; +import '../services/shared_preferences_service.dart'; +import '../services/tts_service.dart'; import '../services/word_service.dart'; +import '../services/word_usage_service.dart'; +import '../ui/dashboard/sentence_builder.dart'; -// enum SelectedWordListAction { -// add, remove, -// } +/// A word occupying one slot in the sentence. +/// [slotId] is unique per insertion, allowing the same word to appear multiple +/// times with distinct identities. +typedef WordSlot = ({int slotId, Word word}); class SelectedWordsViewModel { - SelectedWordsViewModel(this.wordService); + SelectedWordsViewModel( + this._wordService, + this._usageService, + this._ttsService, + this._aiService, + this._prefs, + ) { + _aiSub = selectedWords + .debounceTime(const Duration(milliseconds: 900)) + .listen(_updateAiPredictions); + } + + final WordService _wordService; + final WordUsageService _usageService; + final TtsService _ttsService; + final AiPredictionService _aiService; + final SharedPreferencesService _prefs; - final WordService wordService; + int _nextSlotId = 0; - final selectedWords = BehaviorSubject>.seeded( - BuiltList.of([]), - ); + StreamSubscription>? _aiSub; - final relatedWords = BehaviorSubject>.seeded( - BuiltList.of([]), - ); + final selectedWords = BehaviorSubject>.seeded([]); + final relatedWords = BehaviorSubject>.seeded([]); + // null = loading, [] = done with no results, [...] = predictions ready + final aiPredictions = BehaviorSubject?>.seeded(null); + + Stream> get highlightedSlotIds => _ttsService.highlightedSlotIds; + Stream get isSpeaking => _ttsService.isSpeaking; + bool get isSpeakingNow => _ttsService.isSpeakingNow; void dispose() { + _aiSub?.cancel(); selectedWords.close(); relatedWords.close(); + aiPredictions.close(); } Future addSelectedWord(Word word) async { - final words = selectedWords.valueOrNull; - if (words != null) { - selectedWords.add( - words.rebuild( - (wb) => wb.add(word), - ), - ); - final relatedWords = await wordService.getRelatedWords(word); - setRelatedWords(relatedWords); + final slot = (slotId: _nextSlotId++, word: word); + final updatedSlots = [...selectedWords.value, slot]; + selectedWords.add(updatedSlots); + // Fire-and-forget: increment usage count in Firestore. + _usageService.increment(word.wordId); + // Update related words using the full sentence for context-aware AI suggestions. + if (_prefs.aiPredictionsEnabled) { + final allWords = updatedSlots.map((s) => s.word).toList(); + final vocab = await _wordService.getAllWords(); + final provider = _prefs.aiPredictionProvider == 'openai' + ? AiPredictionProvider.openai + : AiPredictionProvider.gemini; + final suggestions = await _aiService.getPredictions(allWords, vocab, provider); + if (!relatedWords.isClosed) relatedWords.add(suggestions); + } else { + final related = await _wordService.getRelatedWords(word); + relatedWords.add(related); } } - void removeSelectedWord(Word word) { - final words = selectedWords.valueOrNull; - if (words != null) { - selectedWords.add( - words.rebuild( - (wb) => wb.remove(word), - ), - ); - } + void addAllWords(List words) { + final newSlots = + words.map((w) => (slotId: _nextSlotId++, word: w)).toList(); + selectedWords.add([...selectedWords.value, ...newSlots]); } - void setRelatedWords(BuiltList relatedWords) { - this.relatedWords.add(relatedWords); + void removeSelectedWord(Word word, int slotId) { + selectedWords.add( + selectedWords.value.where((s) => s.slotId != slotId).toList(), + ); } - void setRelatedWordsForWordIds(BuiltList relatedWords) async { - final words = await wordService.getWordsForIds(relatedWords); - setRelatedWords(words); + void setRelatedWords(List words) => relatedWords.add(words); + + Future setRelatedWordsForWordIds(List ids) async { + final words = await _wordService.getWordsForIds(ids); + relatedWords.add(words); } - void updatePositionSelectedWordList( - int oldIndex, - int newIndex, - ) { - final words = selectedWords.valueOrNull; - if (words != null) { - if (oldIndex < words.length && newIndex < words.length - 1) { - final word = words[oldIndex]; - selectedWords.add( - words.rebuild( - (wb) => wb - ..remove(word) - ..insert(newIndex, word), - ), - ); - } - } + void updatePositionSelectedWordList(int oldIndex, int newIndex) { + final slots = [...selectedWords.value]; + if (newIndex > oldIndex) newIndex--; + final slot = slots.removeAt(oldIndex); + slots.insert(newIndex, slot); + selectedWords.add(slots); } void clearSelectedWordList() { - selectedWords.add(BuiltList()); + _ttsService.stop(); + selectedWords.add([]); + } + + /// Speaks the sentence, merging suffix words for natural TTS. + /// If already speaking, stops playback instead. + Future toggleSpeak() async { + if (_ttsService.isSpeakingNow) { + await _ttsService.stop(); + return; + } + final slots = selectedWords.value; + if (slots.isEmpty) return; + final plan = SentenceBuilder.build(slots); + await _ttsService.speak(plan); + } + + Future _updateAiPredictions(List slots) async { + if (!_prefs.aiPredictionsEnabled || slots.isEmpty) { + aiPredictions.add(null); + return; + } + aiPredictions.add(null); // signal loading + print('AI predictions: fetching for sentence "${slots.map((s) => s.word.text).join(' ')}"'); + final words = slots.map((s) => s.word).toList(); + final vocab = await _wordService.getAllWords(); + print('AI predictions: vocab size = ${vocab.length}'); + final provider = _prefs.aiPredictionProvider == 'openai' + ? AiPredictionProvider.openai + : AiPredictionProvider.gemini; + final predictions = await _aiService.getPredictions(words, vocab, provider); + print('AI predictions: got ${predictions.length} results: ${predictions.map((w) => w.text)}'); + if (!aiPredictions.isClosed) aiPredictions.add(predictions); } } diff --git a/lib/view_models/theme_view_model.dart b/lib/view_models/theme_view_model.dart index b822288..3f72c7c 100644 --- a/lib/view_models/theme_view_model.dart +++ b/lib/view_models/theme_view_model.dart @@ -24,19 +24,17 @@ class ThemeViewModel { final themeName = sharedPreferencesService.themeName; final theme = SimpleAACTheme.getTheme(themeName); setTheme(theme); + themeController.setThemeMode(sharedPreferencesService.themeMode, false); } void setTheme(SimpleAACTheme simpleAACTheme) { sharedPreferencesService.setThemeName(simpleAACTheme.name); - themeController.setUsedScheme( - simpleAACTheme.color, - ); + themeController.setUsedScheme(simpleAACTheme.color); } void setThemeMode(ThemeMode themeMode) { - themeController.setThemeMode( - themeMode, - ); + sharedPreferencesService.setThemeMode(themeMode); + themeController.setThemeMode(themeMode); } String? get themeName => FlexColor.schemes[themeController.usedScheme]?.name; diff --git a/lib/view_models/word_group_view_model.dart b/lib/view_models/word_group_view_model.dart new file mode 100644 index 0000000..5ab5180 --- /dev/null +++ b/lib/view_models/word_group_view_model.dart @@ -0,0 +1,41 @@ +import 'dart:async'; + +import 'package:rxdart/rxdart.dart'; + +import '../api/models/word.dart'; +import '../api/models/word_group.dart'; +import '../services/word_group_service.dart'; + +typedef ResolvedGroup = (WordGroup, List); + +class WordGroupViewModel { + WordGroupViewModel(this._service); + + final WordGroupService _service; + StreamSubscription>? _sub; + + final resolvedGroups = BehaviorSubject>.seeded([]); + + void init() { + _sub = _service + .watchAll() + .asyncMap( + (groups) => Future.wait( + groups.map((g) async { + final words = await _service.getWordsForGroup(g); + return (g, words) as ResolvedGroup; + }), + ), + ) + .listen(resolvedGroups.add, onError: resolvedGroups.addError); + } + + Future save(WordGroup group) => _service.save(group); + + Future delete(String groupId) => _service.delete(groupId); + + void dispose() { + _sub?.cancel(); + resolvedGroups.close(); + } +} diff --git a/lib/view_models/words_view_model.dart b/lib/view_models/words_view_model.dart index 6e8d674..935b6ee 100644 --- a/lib/view_models/words_view_model.dart +++ b/lib/view_models/words_view_model.dart @@ -1,64 +1,55 @@ import 'dart:async'; -import 'package:built_collection/built_collection.dart'; import 'package:rxdart/rxdart.dart'; -import 'package:simple_aac/ui/dashboard/related_words_widget.dart'; import '../api/models/word.dart'; import '../api/models/word_sub_type.dart'; import '../services/word_service.dart'; +import '../services/word_usage_service.dart'; class WordsViewModel { - WordsViewModel(this.wordService); + WordsViewModel(this.wordService, this._usageService); final WordService wordService; + final WordUsageService _usageService; - late final WordSubType wordSubType; + StreamSubscription>? _subscription; - final wordsOfType = BehaviorSubject>(); + final wordsOfType = BehaviorSubject>.seeded([]); - void init(WordSubType wordSubType) { - this.wordSubType = wordSubType; - _addWords(wordSubType); - addWordsOfTypeListener(wordSubType); - } - - Future> getWordsForIds( - BuiltList wordIds, - ) async { - return wordService.getWordsForIds(wordIds); - } + /// Words sorted by usage count descending, updating live. + /// Falls back to original order if usage data is unavailable (e.g. unauthenticated). + late final Stream> sortedWordsOfType = CombineLatestStream.combine2( + wordsOfType, + _usageService + .watchAll() + .startWith([]) + .onErrorReturn([]) + .map((usages) => {for (final u in usages) u.wordId: u.count}), + (words, counts) => [...words] + ..sort((a, b) => (counts[b.wordId] ?? 0).compareTo(counts[a.wordId] ?? 0)), + ); - void addWordsOfTypeListener(WordSubType wordSubType) { - wordService.addListener( - _getWordListCallBackWrapper(wordSubType), - ); - } - - void removeWordsOfTypeListener(WordSubType wordSubType) { - wordService.removeListener( - _getWordListCallBackWrapper(wordSubType), - ); + void init(WordSubType wordSubType) { + _subscription = wordService.watchSubType(wordSubType).listen( + wordsOfType.add, + onError: wordsOfType.addError, + ); } - Future _addWords(WordSubType wordSubType) async { - final words = await wordService.getAllForType(wordSubType); - wordsOfType.add(words); + void reinit(WordSubType wordSubType) { + _subscription?.cancel(); + init(wordSubType); } - Future> getWordsOfType( - WordSubType wordSubType, - ) async { - return wordService.getAllForType(wordSubType); + Future> getWordsForIds(List wordIds) async { + return wordService.getWordsForIds(wordIds); } - WordListCallBack _getWordListCallBackWrapper(WordSubType wordSubType) { - return (_) { - _addWords(wordSubType); - }; - } + Future toggleFavourite(Word word) => wordService.toggleFavourite(word); void dispose() { - removeWordsOfTypeListener(wordSubType); + _subscription?.cancel(); + wordsOfType.close(); } } diff --git a/pubspec.lock b/pubspec.lock index c6fa168..6ebbc41 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,106 +5,186 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: "8880b4cfe7b5b17d57c052a5a3a8cc1d4f546261c7cc8fbd717bd53f48db0568" + sha256: "8d7ff3948166b8ec5da0fbb5962000926b8e02f2ed9b3e51d1738905fbd4c98d" url: "https://pub.dev" source: hosted - version: "59.0.0" + version: "93.0.0" _flutterfire_internals: dependency: transitive description: name: _flutterfire_internals - sha256: "867b77e2367bc502dcd4d5a66302615409f04eb20ed82ba1c0ba073f9107e018" + sha256: "0d1f0adfabbab9f46a1a80ce84a4d8b852b6e4dbf53ce413b30e0cf7d3631b71" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.3.72" analyzer: dependency: transitive description: name: analyzer - sha256: a89627f49b0e70e068130a36571409726b04dab12da7e5625941d2c8ec278b96 + sha256: de7148ed2fcec579b19f122c1800933dfa028f6d9fd38a152b04b1516cec120b url: "https://pub.dev" source: hosted - version: "5.11.1" + version: "10.0.1" + ansicolor: + dependency: transitive + description: + name: ansicolor + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" + url: "https://pub.dev" + source: hosted + version: "2.0.3" + app_links: + dependency: transitive + description: + name: app_links + sha256: "5f88447519add627fe1cbcab4fd1da3d4fed15b9baf29f28b22535c95ecee3e8" + url: "https://pub.dev" + source: hosted + version: "6.4.1" + app_links_linux: + dependency: transitive + description: + name: app_links_linux + sha256: f5f7173a78609f3dfd4c2ff2c95bd559ab43c80a87dc6a095921d96c05688c81 + url: "https://pub.dev" + source: hosted + version: "1.0.3" + app_links_platform_interface: + dependency: transitive + description: + name: app_links_platform_interface + sha256: "05f5379577c513b534a29ddea68176a4d4802c46180ee8e2e966257158772a3f" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + app_links_web: + dependency: transitive + description: + name: app_links_web + sha256: af060ed76183f9e2b87510a9480e56a5352b6c249778d07bd2c95fc35632a555 + url: "https://pub.dev" + source: hosted + version: "1.0.4" archive: dependency: transitive description: name: archive - sha256: "0c8368c9b3f0abbc193b9d6133649a614204b528982bebc7026372d61677ce3a" + sha256: a96e8b390886ee8abb49b7bd3ac8df6f451c621619f52a26e815fdcf568959ff url: "https://pub.dev" source: hosted - version: "3.3.7" + version: "4.0.9" args: dependency: transitive description: name: args - sha256: c372bb384f273f0c2a8aaaa226dad84dc27c8519a691b888725dec59518ad53a + sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.7.0" async: dependency: transitive description: name: async - sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37 + url: "https://pub.dev" + source: hosted + version: "2.13.1" + audioplayers: + dependency: "direct main" + description: + name: audioplayers + sha256: "1d0c1b1f2095e59080e2d5046639096417a86687d89778da41b0c9a06d683dfd" + url: "https://pub.dev" + source: hosted + version: "6.7.0" + audioplayers_android: + dependency: transitive + description: + name: audioplayers_android + sha256: "60a6728277228413a85755bd3ffd6fab98f6555608923813ce383b190a360605" url: "https://pub.dev" source: hosted - version: "2.10.0" + version: "5.2.1" + audioplayers_darwin: + dependency: transitive + description: + name: audioplayers_darwin + sha256: c994b3bb3a921e4904ac40e013fbc94488e824fd7c1de6326f549943b0b44a91 + url: "https://pub.dev" + source: hosted + version: "6.4.0" + audioplayers_linux: + dependency: transitive + description: + name: audioplayers_linux + sha256: f75bce1ce864170ef5e6a2c6a61cd3339e1a17ce11e99a25bae4474ea491d001 + url: "https://pub.dev" + source: hosted + version: "4.2.1" + audioplayers_platform_interface: + dependency: transitive + description: + name: audioplayers_platform_interface + sha256: "0e2f6a919ab56d0fec272e801abc07b26ae7f31980f912f24af4748763e5a656" + url: "https://pub.dev" + source: hosted + version: "7.1.1" + audioplayers_web: + dependency: transitive + description: + name: audioplayers_web + sha256: "24a6f258062bd7da8cb2157e83fccb9816a08dd306cbaaa24f9813d071470545" + url: "https://pub.dev" + source: hosted + version: "5.2.1" + audioplayers_windows: + dependency: transitive + description: + name: audioplayers_windows + sha256: "95f875a96c88c3dbbcb608d4f8288e300b0113d256a81d0b3197fcc18f0dc91a" + url: "https://pub.dev" + source: hosted + version: "4.3.1" boolean_selector: dependency: transitive description: name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" build: dependency: transitive description: name: build - sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777" + sha256: a156715e7cd728130c592f30552575908aae5b100005fbc1f0fb16b3c03a3d10 url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "4.0.6" build_config: dependency: transitive description: name: build_config - sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + sha256: "4070d2a59f8eec34c97c86ceb44403834899075f66e8a9d59706f8e7834f6f71" url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.3.0" build_daemon: dependency: transitive description: name: build_daemon - sha256: "757153e5d9cd88253cb13f28c2fb55a537dc31fefd98137549895b5beb7c6169" - url: "https://pub.dev" - source: hosted - version: "3.1.1" - build_resolvers: - dependency: transitive - description: - name: build_resolvers - sha256: db49b8609ef8c81cca2b310618c3017c00f03a92af44c04d310b907b2d692d95 + sha256: bf05f6e12cfea92d3c09308d7bcdab1906cd8a179b023269eed00c071004b957 url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "4.1.1" build_runner: dependency: "direct dev" description: name: build_runner - sha256: b0a8a7b8a76c493e85f1b84bffa0588859a06197863dba8c9036b15581fd9727 + sha256: "1523ce62448ebac2c15a8ba5fbad8acac169788658a7dd2a1c2d9c2a9318b9a6" url: "https://pub.dev" source: hosted - version: "2.3.3" - build_runner_core: - dependency: transitive - description: - name: build_runner_core - sha256: "14febe0f5bac5ae474117a36099b4de6f1dbc52df6c5e55534b3da9591bf4292" - url: "https://pub.dev" - source: hosted - version: "7.2.7" + version: "2.15.0" built_collection: dependency: transitive description: @@ -117,138 +197,170 @@ packages: dependency: transitive description: name: built_value - sha256: "2f17434bd5d52a26762043d6b43bb53b3acd029b4d9071a329f46d67ef297e6d" + sha256: "34e4067d30ce212937df995f03b69992eea683539ceeac7f679a1f1eba055b56" url: "https://pub.dev" source: hosted - version: "8.5.0" - built_value_generator: - dependency: "direct dev" + version: "8.12.6" + cached_network_image: + dependency: "direct main" description: - name: built_value_generator - sha256: "4db7a90cb52abfe4ce0e55e0cfb68db85d65ca8d9bdf9d4f57a87fbaaebe3602" + name: cached_network_image + sha256: "7c1183e361e5c8b0a0f21a28401eecdbde252441106a9816400dd4c2b2424916" url: "https://pub.dev" source: hosted - version: "8.5.0" - change_notifier_builder: - dependency: "direct main" + version: "3.4.1" + cached_network_image_platform_interface: + dependency: transitive description: - name: change_notifier_builder - sha256: b86d482f6a10ad966ab226dd48adc16e8b3a3d5aaba3f4719d84480a4eaeca93 + name: cached_network_image_platform_interface + sha256: "35814b016e37fbdc91f7ae18c8caf49ba5c88501813f73ce8a07027a395e2829" url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "4.1.1" + cached_network_image_web: + dependency: transitive + description: + name: cached_network_image_web + sha256: "980842f4e8e2535b8dbd3d5ca0b1f0ba66bf61d14cc3a17a9b4788a3685ba062" + url: "https://pub.dev" + source: hosted + version: "1.3.1" characters: dependency: transitive description: name: characters - sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.4.0" + charcode: + dependency: transitive + description: + name: charcode + sha256: fb0f1107cac15a5ea6ef0a6ef71a807b9e4267c713bb93e00e92d737cc8dbd8a + url: "https://pub.dev" + source: hosted + version: "1.4.0" checked_yaml: dependency: transitive description: name: checked_yaml - sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f" url: "https://pub.dev" source: hosted - version: "2.0.3" + version: "2.0.4" cli_util: dependency: transitive description: name: cli_util - sha256: b8db3080e59b2503ca9e7922c3df2072cf13992354d5e944074ffa836fba43b7 + sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c url: "https://pub.dev" source: hosted - version: "0.4.0" + version: "0.4.2" clock: dependency: transitive description: name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b url: "https://pub.dev" source: hosted - version: "1.1.1" - code_builder: + version: "1.1.2" + cloud_firestore: + dependency: "direct main" + description: + name: cloud_firestore + sha256: df9a5377365860699a96b1810a5bb37ef56db43f8e250e9f758a520f8bf8625a + url: "https://pub.dev" + source: hosted + version: "6.5.0" + cloud_firestore_platform_interface: dependency: transitive description: - name: code_builder - sha256: "0d43dd1288fd145de1ecc9a3948ad4a6d5a82f0a14c4fdd0892260787d975cbe" + name: cloud_firestore_platform_interface + sha256: "26e3c7f192c6b58d95d69d006f5abb722a7df11835568473438a8631041b7468" url: "https://pub.dev" source: hosted - version: "4.4.0" - collection: + version: "8.0.2" + cloud_firestore_web: dependency: transitive description: - name: collection - sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + name: cloud_firestore_web + sha256: "0cdc8205feb73a779730782f885aaa8c23fa2e02ab57caec6076bbdcef473a41" url: "https://pub.dev" source: hosted - version: "1.17.0" - convert: + version: "5.5.0" + collection: dependency: transitive description: - name: convert - sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + name: collection + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" url: "https://pub.dev" source: hosted - version: "3.1.1" - coverage: + version: "1.19.1" + convert: dependency: transitive description: - name: coverage - sha256: "2fb815080e44a09b85e0f2ca8a820b15053982b2e714b59267719e8a9ff17097" + name: convert + sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 url: "https://pub.dev" source: hosted - version: "1.6.3" + version: "3.1.2" cross_file: dependency: transitive description: name: cross_file - sha256: "0b0036e8cccbfbe0555fd83c1d31a6f30b77a96b598b35a5d36dd41f718695e9" + sha256: "28bb3ae56f117b5aec029d702a90f57d285cd975c3c5c281eaca38dbc47c5937" url: "https://pub.dev" source: hosted - version: "0.3.3+4" + version: "0.3.5+2" crypto: dependency: transitive description: name: crypto - sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.7" csslib: dependency: transitive description: name: csslib - sha256: b36c7f7e24c0bdf1bf9a3da461c837d1de64b9f8beb190c9011d8c72a3dfd745 + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" url: "https://pub.dev" source: hosted - version: "0.17.2" + version: "1.0.2" cupertino_icons: dependency: "direct main" description: name: cupertino_icons - sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be + sha256: "41e005c33bd814be4d3096aff55b1908d419fde52ca656c8c47719ec745873cd" url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.0.9" + dart_openai: + dependency: "direct main" + description: + name: dart_openai + sha256: b63cbabf41f2a7d7f8092415b513b9984863d9c4c34196de4b4732099e8cc5c9 + url: "https://pub.dev" + source: hosted + version: "4.1.4" dart_style: dependency: transitive description: name: dart_style - sha256: f4f1f73ab3fd2afcbcca165ee601fe980d966af6a21b5970c6c9376955c528ad + sha256: "29f7ecc274a86d32920b1d9cfc7502fa87220da41ec60b55f329559d5732e2b2" url: "https://pub.dev" source: hosted - version: "2.3.1" - dartx: + version: "3.1.7" + desktop_webview_auth: dependency: transitive description: - name: dartx - sha256: "45d7176701f16c5a5e00a4798791c1964bc231491b879369c818dd9a9c764871" + name: desktop_webview_auth + sha256: cd47d8cc97e2121adda213ea600470fd3e8d0e0967ed260b7d9362fc9df38c5c url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "0.0.16" diffutil_dart: dependency: "direct main" description: @@ -265,6 +377,38 @@ packages: url: "https://pub.dev" source: hosted version: "0.5.1" + drift: + dependency: "direct main" + description: + name: drift + sha256: "970cd188fddb111b26ea6a9b07a62bf5c2432d74147b8122c67044ae3b97e99e" + url: "https://pub.dev" + source: hosted + version: "2.31.0" + drift_dev: + dependency: "direct dev" + description: + name: drift_dev + sha256: "917184b2fb867b70a548a83bf0d36268423b38d39968c06cce4905683da49587" + url: "https://pub.dev" + source: hosted + version: "2.31.0" + drift_flutter: + dependency: "direct main" + description: + name: drift_flutter + sha256: "0bc2f1dde59e59cedde0df67a4ff7bd8f0d42274f18b50bf7e7dae7ca3d77801" + url: "https://pub.dev" + source: hosted + version: "0.1.0" + email_validator: + dependency: transitive + description: + name: email_validator + sha256: e9a90f27ab2b915a27d7f9c2a7ddda5dd752d6942616ee83529b686fc086221b + url: "https://pub.dev" + source: hosted + version: "2.1.17" expandable: dependency: "direct main" description: @@ -277,143 +421,303 @@ packages: dependency: transitive description: name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.3" + fetch_api: + dependency: transitive + description: + name: fetch_api + sha256: "24cbd5616f3d4008c335c197bb90bfa0eb43b9e55c6de5c60d1f805092636034" + url: "https://pub.dev" + source: hosted + version: "2.3.1" + fetch_client: + dependency: transitive + description: + name: fetch_client + sha256: "2125ffb6325e0045cc3cbfca1a87e6defe9afa27d85dc14857c1cf3835a9a636" + url: "https://pub.dev" + source: hosted + version: "1.2.1" ffi: dependency: transitive description: name: ffi - sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 + sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.2.0" + ffi_leak_tracker: + dependency: transitive + description: + name: ffi_leak_tracker + sha256: "4093d4ef9ca06ffe2786e73bfb25e22aa92112b9bb4ec941f11e3e6b61489a97" + url: "https://pub.dev" + source: hosted + version: "0.1.2" file: dependency: transitive description: name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 + url: "https://pub.dev" + source: hosted + version: "7.0.1" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "2567f398e06ac72dcf2e98a0c95df2a9edd03c2c2e0cacd4780f20cdf56263a0" + url: "https://pub.dev" + source: hosted + version: "0.9.4" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: "5e0bbe9c312416f1787a68259ea1505b52f258c587f12920422671807c4d618a" + url: "https://pub.dev" + source: hosted + version: "0.9.5" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: "35e0bd61ebcdb91a3505813b055b09b79dfdc7d0aee9c09a7ba59ae4bb13dc85" + url: "https://pub.dev" + source: hosted + version: "2.7.0" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "62197474ae75893a62df75939c777763d39c2bc5f73ce5b88497208bc269abfd" + url: "https://pub.dev" + source: hosted + version: "0.9.3+5" + firebase_auth: + dependency: "direct main" + description: + name: firebase_auth + sha256: "9905a315f1235a649e29df19b246adde7350a11234837cd605254b8e25144711" + url: "https://pub.dev" + source: hosted + version: "6.5.2" + firebase_auth_platform_interface: + dependency: transitive + description: + name: firebase_auth_platform_interface + sha256: f757dc5636ce2b204a82383f7246ef0d9c925f9e96c8c9a4a6c315d673d662bb + url: "https://pub.dev" + source: hosted + version: "9.0.2" + firebase_auth_web: + dependency: transitive + description: + name: firebase_auth_web + sha256: "1c44330eef3c82068e0c2919b6b015897d49211dcccdf64f90a2ed73ce216ecb" url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "6.2.2" firebase_core: dependency: "direct main" description: name: firebase_core - sha256: dcf54c170c5371ad0e79229d0fb372c58262ae0968b7de222bf28e51dd236be0 + sha256: ec46a100a560d3bd5f97f2d89ba7492cb09b6dd0a4a28753d1258f360d6bd9f9 url: "https://pub.dev" source: hosted - version: "2.11.0" + version: "4.10.0" firebase_core_platform_interface: dependency: transitive description: name: firebase_core_platform_interface - sha256: ae79f335f6c7f2dadb00c98c429da2ca905d265e0225fb5e7dfa62ac3accad48 + sha256: "4a120366dbf7d5a8ee9438978530b664b855728fb8dcc3a201017660817e555b" url: "https://pub.dev" source: hosted - version: "4.7.0" + version: "7.0.1" firebase_core_web: dependency: transitive description: name: firebase_core_web - sha256: e57ef862257a0d977c1308d02e2fbb9b68525e6d85711b08f3df8cec836fb444 + sha256: "5ad1be848692ec148f2d6a8ad2a3838cb852ea5f3c9e6479a7afce479e1854f8" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "3.8.0" firebase_crashlytics: dependency: "direct main" description: name: firebase_crashlytics - sha256: e8424f75c0fd466a6ae4d069b313ec84133ef275c00a5a3a416b75b99fb3e831 + sha256: "5d111db2b40426e76e2da95d133c19a9dbcf6500c4e9b3785c68da51fb3f6602" url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "5.2.3" firebase_crashlytics_platform_interface: dependency: transitive description: name: firebase_crashlytics_platform_interface - sha256: "381e28f33d5255a698ac7755c3c4fdff42382be0154f375564e6852aa46f9d8f" + sha256: "5bf4a83a1b9e0a5218f6d6491227440dd659242a55b16c279de0b8839791539a" + url: "https://pub.dev" + source: hosted + version: "3.8.23" + firebase_storage: + dependency: "direct main" + description: + name: firebase_storage + sha256: "540a2eb9b622ad7a173809a215ba3b2ba2a7a56a88d35dd7d9f392abeec45dbf" + url: "https://pub.dev" + source: hosted + version: "13.4.2" + firebase_storage_platform_interface: + dependency: transitive + description: + name: firebase_storage_platform_interface + sha256: f5fd1181f6cc7dcf7ea85fddb8ce32a0e8ebf09a1dfe3c70c4ae7e540cb57be3 + url: "https://pub.dev" + source: hosted + version: "6.0.2" + firebase_storage_web: + dependency: transitive + description: + name: firebase_storage_web + sha256: a4387d657b09dfa1bcd52d3a1ba276b5a22b3f5dffa9fce8a0e0bd8aa734d43f + url: "https://pub.dev" + source: hosted + version: "3.11.8" + firebase_ui_auth: + dependency: "direct main" + description: + name: firebase_ui_auth + sha256: "980dec84aabb6d2845381a517a225392244aea08a10a458a5242b0344cae914e" url: "https://pub.dev" source: hosted - version: "3.5.0" + version: "3.0.1" + firebase_ui_localizations: + dependency: transitive + description: + name: firebase_ui_localizations + sha256: "53a44bd518a34bf0830229ff7edc1b360b77741d85b1801f24846637a3440e0b" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + firebase_ui_oauth: + dependency: transitive + description: + name: firebase_ui_oauth + sha256: "4321f8aa4655fa0731da13a49c53357239d2aeff0deef599bf06fec072284a51" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + firebase_ui_oauth_google: + dependency: "direct main" + description: + name: firebase_ui_oauth_google + sha256: "7baf0c5349bdb35bb25696a05e8e7ed1d4c91c65a96472ddd421d50c3b87de18" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + firebase_ui_shared: + dependency: transitive + description: + name: firebase_ui_shared + sha256: "468fce5ba061f4443a5d382a9fef9f98e0fed02352118d5e3fd5279878d4261d" + url: "https://pub.dev" + source: hosted + version: "1.4.2" fixnum: dependency: transitive description: name: fixnum - sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" flex_color_scheme: dependency: "direct main" description: name: flex_color_scheme - sha256: "92e55a32cb0cbcde333c2169612785ed236a7b136534de983b3037b39d06e96c" + sha256: ab854146f201d2d62cc251fd525ef023b84182c4a0bfe4ae4c18ffc505b412d3 url: "https://pub.dev" source: hosted - version: "7.0.5" + version: "8.4.0" flex_seed_scheme: dependency: transitive description: name: flex_seed_scheme - sha256: b3678d82403c13dec2ee2721e078b26f14577712411b6aa981b0f4269df3fabb + sha256: a3183753bbcfc3af106224bff3ab3e1844b73f58062136b7499919f49f3667e7 url: "https://pub.dev" source: hosted - version: "1.2.4" + version: "4.0.1" flutter: dependency: "direct main" description: flutter source: sdk version: "0.0.0" - flutter_flavorizr: - dependency: "direct main" + flutter_cache_manager: + dependency: transitive description: - name: flutter_flavorizr - sha256: b732147abf4101e82b1f4663d905d8bd74fb9963451e7f40203d7b1757ec0573 + name: flutter_cache_manager + sha256: "400b6592f16a4409a7f2bb929a9a7e38c72cceb8ffb99ee57bbf2cb2cecf8386" url: "https://pub.dev" source: hosted - version: "2.1.6" + version: "3.4.1" flutter_image_compress: dependency: "direct main" description: name: flutter_image_compress - sha256: a82fef35676d770c2fd0a133bdf75d7ddad4f170e8a98a6318e458dbe91628bf + sha256: "51d23be39efc2185e72e290042a0da41aed70b14ef97db362a6b5368d0523b27" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.4.0" flutter_image_compress_common: dependency: transitive description: name: flutter_image_compress_common - sha256: "8a846f03d645fb77370b2a89b9aefe9e1f3b52cf8f9f7787b1c32f57a12b15d5" + sha256: c5c5d50c15e97dd7dc72ff96bd7077b9f791932f2076c5c5b6c43f2c88607bfb url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.0.6" + flutter_image_compress_macos: + dependency: transitive + description: + name: flutter_image_compress_macos + sha256: "20019719b71b743aba0ef874ed29c50747461e5e8438980dfa5c2031898f7337" + url: "https://pub.dev" + source: hosted + version: "1.0.3" + flutter_image_compress_ohos: + dependency: transitive + description: + name: flutter_image_compress_ohos + sha256: e76b92bbc830ee08f5b05962fc78a532011fcd2041f620b5400a593e96da3f51 + url: "https://pub.dev" + source: hosted + version: "0.0.3" flutter_image_compress_platform_interface: dependency: transitive description: name: flutter_image_compress_platform_interface - sha256: "06f9bf98fd076b2706ab04fdec5f19759e73e159a54ba5c59940303d092399f3" + sha256: "579cb3947fd4309103afe6442a01ca01e1e6f93dc53bb4cbd090e8ce34a41889" url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.0.5" flutter_image_compress_web: dependency: transitive description: name: flutter_image_compress_web - sha256: "00db5f6b4be354c3453707b59af0cd96fe30988b7aac0ac6a98f3ef6fdf10d56" + sha256: b9b141ac7c686a2ce7bb9a98176321e1182c9074650e47bb140741a44b6f5a96 url: "https://pub.dev" source: hosted - version: "0.1.1" + version: "0.1.5" flutter_launcher_icons: dependency: "direct dev" description: name: flutter_launcher_icons - sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea" + sha256: "10f13781741a2e3972126fae08393d3c4e01fa4cd7473326b94b72cf594195e7" url: "https://pub.dev" source: hosted - version: "0.13.1" + version: "0.14.4" flutter_localizations: dependency: "direct main" description: flutter @@ -423,452 +727,628 @@ packages: dependency: "direct dev" description: name: flutter_native_splash - sha256: af665ef80a213a9ed502845a3d7a61b9acca4100ee7e9f067a7440bc3acd6730 + sha256: "4fb9f4113350d3a80841ce05ebf1976a36de622af7d19aca0ca9a9911c7ff002" url: "https://pub.dev" source: hosted - version: "2.2.19" + version: "2.4.7" flutter_plugin_android_lifecycle: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: "96af49aa6b57c10a312106ad6f71deed5a754029c24789bbf620ba784f0bd0b0" + sha256: "38d1c268de9097ff59cf0e844ac38759fc78f76836d37edad06fa21e182055a0" url: "https://pub.dev" source: hosted - version: "2.0.14" + version: "2.0.34" flutter_secure_storage: dependency: "direct main" description: name: flutter_secure_storage - sha256: "98352186ee7ad3639ccc77ad7924b773ff6883076ab952437d20f18a61f0a7c5" + sha256: "7686b1d6a29985dcbb808c59518226e603e3bfa7c0ddfd1a0d00e4cda77c868e" url: "https://pub.dev" source: hosted - version: "8.0.0" - flutter_secure_storage_linux: + version: "10.3.1" + flutter_secure_storage_darwin: dependency: transitive description: - name: flutter_secure_storage_linux - sha256: "0912ae29a572230ad52d8a4697e5518d7f0f429052fd51df7e5a7952c7efe2a3" + name: flutter_secure_storage_darwin + sha256: "82329fa5cdf343773b1b6897dea959105a29f092454259edff92f9f6637e8149" url: "https://pub.dev" source: hosted - version: "1.1.3" - flutter_secure_storage_macos: + version: "0.3.2" + flutter_secure_storage_linux: dependency: transitive description: - name: flutter_secure_storage_macos - sha256: "083add01847fc1c80a07a08e1ed6927e9acd9618a35e330239d4422cd2a58c50" + name: flutter_secure_storage_linux + sha256: a5f35ddab43cf5c8215d2feb4ce1957851f28c5c37e6f04335066a0602087bf5 url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "3.0.1" flutter_secure_storage_platform_interface: dependency: transitive description: name: flutter_secure_storage_platform_interface - sha256: b3773190e385a3c8a382007893d678ae95462b3c2279e987b55d140d3b0cb81b + sha256: "8ceea1223bee3c6ac1a22dabd8feefc550e4729b3675de4b5900f55afcb435d6" url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "2.0.1" flutter_secure_storage_web: dependency: transitive description: name: flutter_secure_storage_web - sha256: "42938e70d4b872e856e678c423cc0e9065d7d294f45bc41fc1981a4eb4beaffe" + sha256: "073a62b3aeb866ab4ce795f960413948e51e5a42a9b0c8333b6daf5bb3208a1c" url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "2.1.1" flutter_secure_storage_windows: dependency: transitive description: name: flutter_secure_storage_windows - sha256: fc2910ec9b28d60598216c29ea763b3a96c401f0ce1d13cdf69ccb0e5c93c3ee + sha256: "471951813a97006d899db4948acc654a4f28c440083ea08178935ce20b173ec1" url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "4.2.2" flutter_speed_dial: dependency: "direct main" description: name: flutter_speed_dial - sha256: "41d7ad0bc224248637b3a5e0b9083e912a75445bdb450cf82b8ed06d7af7c61d" + sha256: "698a037274a66dbae8697c265440e6acb6ab6cae9ac5f95c749e7944d8f28d41" url: "https://pub.dev" source: hosted - version: "6.2.0" + version: "7.0.0" + flutter_svg: + dependency: transitive + description: + name: flutter_svg + sha256: "35882981abcbfb8c15b286f0cd690ff25bac12d95eff3e25ee207f37d4c42e7f" + url: "https://pub.dev" + source: hosted + version: "2.3.0" flutter_test: dependency: "direct dev" description: flutter source: sdk version: "0.0.0" + flutter_tts: + dependency: "direct main" + description: + name: flutter_tts + sha256: ce5eb209b40e95f2f4a1397116c87ab2fcdff32257d04ed7a764e75894c03775 + url: "https://pub.dev" + source: hosted + version: "4.2.5" flutter_web_plugins: dependency: transitive description: flutter source: sdk version: "0.0.0" - frontend_server_client: - dependency: transitive + freezed: + dependency: "direct dev" description: - name: frontend_server_client - sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + name: freezed + sha256: f23ea33b3863f119b58ed1b586e881a46bd28715ddcc4dbc33104524e3434131 url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "3.2.5" + freezed_annotation: + dependency: "direct main" + description: + name: freezed_annotation + sha256: "7294967ff0a6d98638e7acb774aac3af2550777accd8149c90af5b014e6d44d8" + url: "https://pub.dev" + source: hosted + version: "3.1.0" get_it: dependency: "direct main" description: name: get_it - sha256: ca77bd0c23e609e09a70989726295a92978589745e129c27d354e61e4070f804 + sha256: "568d62f0e68666fb5d95519743b3c24a34c7f19d834b0658c46e26d778461f66" url: "https://pub.dev" source: hosted - version: "7.4.1" + version: "9.2.1" glob: dependency: transitive description: name: glob - sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" + sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de url: "https://pub.dev" source: hosted - version: "2.1.1" - graphs: - dependency: transitive + version: "2.1.3" + go_router: + dependency: "direct main" description: - name: graphs - sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2 + name: go_router + sha256: "92d8cee7c57dff0a6c409c05597b460002434eccf7424a712283225b3962d03f" url: "https://pub.dev" source: hosted - version: "2.2.0" - hive_built_value: + version: "17.2.3" + google_generative_ai: dependency: "direct main" description: - name: hive_built_value - sha256: "1889771acc941410a8c1513a9b0c1efa92bf3f7f672293e9c8d00d04006c6f41" + name: google_generative_ai + sha256: "71f613d0247968992ad87a0eb21650a566869757442ba55a31a81be6746e0d1f" url: "https://pub.dev" source: hosted - version: "2.3.0" - hive_built_value_flutter: + version: "0.4.7" + google_identity_services_web: + dependency: transitive + description: + name: google_identity_services_web + sha256: "5d187c46dc59e02646e10fe82665fc3884a9b71bc1c90c2b8b749316d33ee454" + url: "https://pub.dev" + source: hosted + version: "0.3.3+1" + google_sign_in: dependency: "direct main" description: - name: hive_built_value_flutter - sha256: a01bda0fe40dbef7e7d24a2782dab7187646e36ddb50fc11d3c9fa31127b16e6 + name: google_sign_in + sha256: d0a2c3bcb06e607bb11e4daca48bd4b6120f0bbc4015ccebbe757d24ea60ed2a url: "https://pub.dev" source: hosted - version: "2.3.0" - hive_built_value_generator: - dependency: "direct dev" + version: "6.3.0" + google_sign_in_android: + dependency: transitive description: - name: hive_built_value_generator - sha256: "2faff3194498b0dc390ff3fd1bc17e6f52e85fcffe44cfd636e8406a8cd3ac8e" + name: google_sign_in_android + sha256: d5e23c56a4b84b6427552f1cf3f98f716db3b1d1a647f16b96dbb5b93afa2805 url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "6.2.1" + google_sign_in_ios: + dependency: transitive + description: + name: google_sign_in_ios + sha256: "102005f498ce18442e7158f6791033bbc15ad2dcc0afa4cf4752e2722a516c96" + url: "https://pub.dev" + source: hosted + version: "5.9.0" + google_sign_in_platform_interface: + dependency: transitive + description: + name: google_sign_in_platform_interface + sha256: "5f6f79cf139c197261adb6ac024577518ae48fdff8e53205c5373b5f6430a8aa" + url: "https://pub.dev" + source: hosted + version: "2.5.0" + google_sign_in_web: + dependency: transitive + description: + name: google_sign_in_web + sha256: "460547beb4962b7623ac0fb8122d6b8268c951cf0b646dd150d60498430e4ded" + url: "https://pub.dev" + source: hosted + version: "0.12.4+4" + graphs: + dependency: transitive + description: + name: graphs + sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + gtk: + dependency: transitive + description: + name: gtk + sha256: "4ff85b2a16724029dd9e5bbb5a94b6918f9973f74ba571c949d2002801879cf5" + url: "https://pub.dev" + source: hosted + version: "2.2.0" html: dependency: transitive description: name: html - sha256: "58e3491f7bf0b6a4ea5110c0c688877460d1a6366731155c4a4580e7ded773e8" + sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602" url: "https://pub.dev" source: hosted - version: "0.15.3" + version: "0.15.6" http: dependency: transitive description: name: http - sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412" url: "https://pub.dev" source: hosted - version: "0.13.6" + version: "1.6.0" http_multi_server: dependency: transitive description: name: http_multi_server - sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8 url: "https://pub.dev" source: hosted - version: "3.2.1" + version: "3.2.2" http_parser: dependency: transitive description: name: http_parser - sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" url: "https://pub.dev" source: hosted - version: "4.0.2" + version: "4.1.2" image: dependency: transitive description: name: image - sha256: a72242c9a0ffb65d03de1b7113bc4e189686fc07c7147b8b41811d0dd0e0d9bf + sha256: f9881ff4998044947ec38d098bc7c8316ae1186fa786eddffdb867b9bc94dfce + url: "https://pub.dev" + source: hosted + version: "4.8.0" + image_cropper: + dependency: "direct main" + description: + name: image_cropper + sha256: "4e9c96c029eb5a23798da1b6af39787f964da6ffc78fd8447c140542a9f7c6fc" + url: "https://pub.dev" + source: hosted + version: "9.1.0" + image_cropper_for_web: + dependency: transitive + description: + name: image_cropper_for_web + sha256: fd81ebe36f636576094377aab32673c4e5d1609b32dec16fad98d2b71f1250a9 + url: "https://pub.dev" + source: hosted + version: "6.1.0" + image_cropper_platform_interface: + dependency: transitive + description: + name: image_cropper_platform_interface + sha256: "2d8db8f4b638e448fa89a1e77cd8f053b4547472bd3ae073169e86626d03afef" url: "https://pub.dev" source: hosted - version: "4.0.17" + version: "7.2.0" image_picker: dependency: "direct main" description: name: image_picker - sha256: "3da954c3b8906d82ecb50fd5e2b5401758f06d5678904eed6cbc06172283a263" + sha256: "91c025426c2881c551100bce834e201c835a170151545f58d17da5180ca7d9ac" url: "https://pub.dev" source: hosted - version: "0.8.7+4" + version: "1.2.2" image_picker_android: dependency: transitive description: name: image_picker_android - sha256: "271e0448e82268b3fa1cb2a48e4a911cbc2135587123d7df8e7ca703c5b10da2" + sha256: d5b3e1774af29c9ab00103afb0d4614070f924d2e0057ac867ec98800114793f url: "https://pub.dev" source: hosted - version: "0.8.6+11" + version: "0.8.13+17" image_picker_for_web: dependency: transitive description: name: image_picker_for_web - sha256: "98f50d6b9f294c8ba35e25cc0d13b04bfddd25dbc8d32fa9d566a6572f2c081c" + sha256: "66257a3191ab360d23a55c8241c91a6e329d31e94efa7be9cf7a212e65850214" url: "https://pub.dev" source: hosted - version: "2.1.12" + version: "3.1.1" image_picker_ios: dependency: transitive description: name: image_picker_ios - sha256: a1546ff5861fc15812953d4733b520c3d371cec3d2859a001ff04c46c4d81883 + sha256: b9c4a438a9ff4f60808c9cf0039b93a42bb6c2211ef6ebb647394b2b3fa84588 + url: "https://pub.dev" + source: hosted + version: "0.8.13+6" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "1f81c5f2046b9ab724f85523e4af65be1d47b038160a8c8deed909762c308ed4" + url: "https://pub.dev" + source: hosted + version: "0.2.2" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "86f0f15a309de7e1a552c12df9ce5b59fe927e71385329355aec4776c6a8ec91" url: "https://pub.dev" source: hosted - version: "0.8.7+3" + version: "0.2.2+1" image_picker_platform_interface: dependency: transitive description: name: image_picker_platform_interface - sha256: "1991219d9dbc42a99aff77e663af8ca51ced592cd6685c9485e3458302d3d4f8" + sha256: "567e056716333a1647c64bb6bd873cff7622233a5c3f694be28a583d4715690c" + url: "https://pub.dev" + source: hosted + version: "2.11.1" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: d248c86554a72b5495a31c56f060cf73a41c7ff541689327b1a7dbccc33adfae url: "https://pub.dev" source: hosted - version: "2.6.3" + version: "0.2.2" intl: dependency: transitive description: name: intl - sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" + sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" url: "https://pub.dev" source: hosted - version: "0.17.0" + version: "0.20.2" io: dependency: transitive description: name: io - sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b url: "https://pub.dev" source: hosted - version: "1.0.4" - js: + version: "1.0.5" + jni: dependency: transitive description: - name: js - sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + name: jni + sha256: c2230682d5bc2362c1c9e8d3c7f406d9cbba23ab3f2e203a025dd47e0fb2e68f url: "https://pub.dev" source: hosted - version: "0.6.5" - json_annotation: + version: "1.0.0" + jni_flutter: dependency: transitive + description: + name: jni_flutter + sha256: "8b59e590786050b1cd866677dddaf76b1ade5e7bc751abe04b86e84d379d3ba6" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + json_annotation: + dependency: "direct main" description: name: json_annotation - sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467 + sha256: "2a743920d81b7910627f68ee2c9ac1fc0bfee32b9fc3403587d7c6791ca12f80" + url: "https://pub.dev" + source: hosted + version: "4.12.0" + json_serializable: + dependency: "direct dev" + description: + name: json_serializable + sha256: ffcd10cde35a93b2abbbcc26bd9971f4ca93763e8abe78d855e3c4177797e501 + url: "https://pub.dev" + source: hosted + version: "6.14.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" + url: "https://pub.dev" + source: hosted + version: "11.0.2" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" + url: "https://pub.dev" + source: hosted + version: "3.0.10" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" url: "https://pub.dev" source: hosted - version: "4.8.1" + version: "3.0.2" logger: dependency: "direct main" description: name: logger - sha256: db2ff852ed77090ba9f62d3611e4208a3d11dfa35991a81ae724c113fcb3e3f7 + sha256: "25aee487596a6257655a1e091ec2ae66bc30e7af663592cc3a27e6591e05035c" url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "2.7.0" logging: dependency: transitive description: name: logging - sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" + sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.3.0" matcher: dependency: transitive description: name: matcher - sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 url: "https://pub.dev" source: hosted - version: "0.12.13" + version: "0.12.17" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.dev" source: hosted - version: "0.2.0" + version: "0.11.1" meta: dependency: transitive description: name: meta - sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.17.0" mime: dependency: transitive description: name: mime - sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6" url: "https://pub.dev" source: hosted - version: "1.0.4" - node_preamble: + version: "2.0.0" + octo_image: dependency: transitive description: - name: node_preamble - sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" + name: octo_image + sha256: "34faa6639a78c7e3cbe79be6f9f96535867e879748ade7d17c9b1ae7536293bd" url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.1.0" package_config: dependency: transitive description: name: package_config - sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc url: "https://pub.dev" source: hosted - version: "2.1.0" - package_info: + version: "2.2.0" + package_info_plus: dependency: "direct main" description: - name: package_info - sha256: "6c07d9d82c69e16afeeeeb6866fe43985a20b3b50df243091bfc4a4ad2b03b75" + name: package_info_plus + sha256: "4bf625947f6c7713ee242296a682e23e44823c09cf9d79e4f1238923c92db852" url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "10.1.0" + package_info_plus_platform_interface: + dependency: transitive + description: + name: package_info_plus_platform_interface + sha256: db762cb2f4f25ee60fb6359773861b0f199e00b90d237bd85a76a1e806b46ef4 + url: "https://pub.dev" + source: hosted + version: "4.1.0" path: dependency: transitive description: name: path - sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" url: "https://pub.dev" source: hosted - version: "1.8.2" - path_provider: + version: "1.9.1" + path_parsing: dependency: transitive + description: + name: path_parsing + sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + path_provider: + dependency: "direct main" description: name: path_provider - sha256: c7edf82217d4b2952b2129a61d3ad60f1075b9299e629e149a8d2e39c2e6aad4 + sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" url: "https://pub.dev" source: hosted - version: "2.0.14" + version: "2.1.5" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: "2cec049d282c7f13c594b4a73976b0b4f2d7a1838a6dd5aaf7bd9719196bee86" + sha256: "69cbd515a62b94d32a7944f086b2f82b4ac40a1d45bebfc00813a430ab2dabcd" url: "https://pub.dev" source: hosted - version: "2.0.27" + version: "2.3.1" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: ad4c4d011830462633f03eb34445a45345673dfd4faf1ab0b4735fbd93b19183 + sha256: "6d13aece7b3f5c5a9731eaf553ff9dcbc2eff41087fd2df587fd0fed9a3eb0c4" url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.5.1" path_provider_linux: dependency: transitive description: name: path_provider_linux - sha256: "2ae08f2216225427e64ad224a24354221c2c7907e448e6e0e8b57b1eb9f10ad1" + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 url: "https://pub.dev" source: hosted - version: "2.1.10" + version: "2.2.1" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec" + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" url: "https://pub.dev" source: hosted - version: "2.0.6" + version: "2.1.2" path_provider_windows: dependency: transitive description: name: path_provider_windows - sha256: d3f80b32e83ec208ac95253e0cd4d298e104fbc63cb29c5c69edaed43b0c69d6 + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 url: "https://pub.dev" source: hosted - version: "2.1.6" + version: "2.3.0" petitparser: dependency: transitive description: name: petitparser - sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4" + sha256: "91bd59303e9f769f108f8df05e371341b15d59e995e6806aefab827b58336675" url: "https://pub.dev" source: hosted - version: "5.1.0" + version: "7.0.2" platform: dependency: transitive description: name: platform - sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.1.6" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc" + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" url: "https://pub.dev" source: hosted - version: "2.1.4" - pointycastle: - dependency: transitive - description: - name: pointycastle - sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c" - url: "https://pub.dev" - source: hosted - version: "3.7.3" + version: "2.1.8" pool: dependency: transitive description: name: pool - sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + sha256: "978783255c543aa3586a1b3c21f6e9d720eb315376a915872c61ef8b5c20177d" url: "https://pub.dev" source: hosted - version: "1.5.1" - process: + version: "1.5.2" + posix: dependency: transitive description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + name: posix + sha256: "185ef7606574f789b40f289c233efa52e96dead518aed988e040a10737febb07" url: "https://pub.dev" source: hosted - version: "4.2.4" + version: "6.5.0" pub_semver: dependency: transitive description: name: pub_semver - sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585" url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.2.0" pubspec_parse: dependency: transitive description: name: pubspec_parse - sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367 + sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082" + url: "https://pub.dev" + source: hosted + version: "1.5.0" + recase: + dependency: transitive + description: + name: recase + sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 url: "https://pub.dev" source: hosted - version: "1.2.3" + version: "4.1.0" rxdart: dependency: "direct main" description: name: rxdart - sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" + sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962" url: "https://pub.dev" source: hosted - version: "0.27.7" + version: "0.28.0" salomon_bottom_bar: dependency: "direct main" description: @@ -877,403 +1357,435 @@ packages: url: "https://pub.dev" source: hosted version: "3.3.2" - settings_ui: - dependency: "direct main" - description: - name: settings_ui - sha256: d9838037cb554b24b4218b2d07666fbada3478882edefae375ee892b6c820ef3 - url: "https://pub.dev" - source: hosted - version: "2.0.2" shared_preferences: dependency: "direct main" description: name: shared_preferences - sha256: "858aaa72d8f61637d64e776aca82e1c67e6d9ee07979123c5d17115031c1b13b" + sha256: c3025c5534b01739267eb7d76959bbc25a6d10f6988e1c2a3036940133dd10bf url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.5.5" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: "6478c6bbbecfe9aced34c483171e90d7c078f5883558b30ec3163cf18402c749" + sha256: e8d4762b1e2e8578fc4d0fd548cebf24afd24f49719c08974df92834565e2c53 url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.4.23" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: "0c1c16c56c9708aa9c361541a6f0e5cc6fc12a3232d866a687a7b7db30032b07" + sha256: "4e7eaffc2b17ba398759f1151415869a34771ba11ebbccd1b0145472a619a64f" url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.5.6" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: "9d387433ca65717bbf1be88f4d5bb18f10508917a8fa2fb02e0fd0d7479a9afa" + sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.4.1" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: fb5cf25c0235df2d0640ac1b1174f6466bd311f621574997ac59018a6664548d + sha256: "649dc798a33931919ea356c4305c2d1f81619ea6e92244070b520187b5140ef9" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.4.2" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - sha256: "74083203a8eae241e0de4a0d597dbedab3b8fef5563f33cf3c12d7e93c655ca5" + sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019 url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.4.3" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - sha256: "5e588e2efef56916a3b229c3bfe81e6a525665a454519ca51dbcc4236a274173" + sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.4.1" shelf: dependency: transitive description: name: shelf - sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 + sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 url: "https://pub.dev" source: hosted - version: "1.4.1" - shelf_packages_handler: - dependency: transitive - description: - name: shelf_packages_handler - sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - shelf_static: + version: "1.4.2" + shelf_web_socket: dependency: transitive description: - name: shelf_static - sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e + name: shelf_web_socket + sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925" url: "https://pub.dev" source: hosted - version: "1.1.2" - shelf_web_socket: - dependency: transitive + version: "3.0.0" + shimmer: + dependency: "direct main" description: - name: shelf_web_socket - sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" + name: shimmer + sha256: "5f88c883a22e9f9f299e5ba0e4f7e6054857224976a5d9f839d4ebdc94a14ac9" url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "3.0.0" sky_engine: dependency: transitive description: flutter source: sdk - version: "0.0.99" + version: "0.0.0" smooth_page_indicator: dependency: "direct main" description: name: smooth_page_indicator - sha256: "725bc638d5e79df0c84658e1291449996943f93bacbc2cec49963dbbab48d8ae" + sha256: "4b497e9898d095de40d246db943371183fa7482492a88391cfa8415ef94d57ba" url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "2.0.1" source_gen: dependency: transitive description: name: source_gen - sha256: b20e191de6964e98032573cecb1d2b169d96ba63fdb586d24dcd1003ba7e94f6 + sha256: ec37cc0e6694374cbef59ed79685572c870a54ede6fa30a3e420feb3adffea02 url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "4.2.3" source_helper: dependency: transitive description: name: source_helper - sha256: "3b67aade1d52416149c633ba1bb36df44d97c6b51830c2198e934e3fca87ca1f" + sha256: "4227d54ceefd0bb8ca4c8fcb96e1719dc53f1ee1b6e2ca9d7a6069da160e4eae" url: "https://pub.dev" source: hosted - version: "1.3.3" - source_map_stack_trace: + version: "1.3.12" + source_span: dependency: transitive description: - name: source_map_stack_trace - sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" + name: source_span + sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" url: "https://pub.dev" source: hosted - version: "2.1.1" - source_maps: + version: "1.10.2" + sqflite: dependency: transitive description: - name: source_maps - sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" + name: sqflite + sha256: "564cfed0746fe53140c23b70b308e045c3b31f17778f2f326ccb7d804ea0250a" url: "https://pub.dev" source: hosted - version: "0.10.12" - source_span: + version: "2.4.2+1" + sqflite_android: dependency: transitive description: - name: source_span - sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + name: sqflite_android + sha256: "881e28efdcc9950fd8e9bb42713dcf1103e62a2e7168f23c9338d82db13dec40" url: "https://pub.dev" source: hosted - version: "1.9.1" - sprintf: + version: "2.4.2+3" + sqflite_common: dependency: transitive description: - name: sprintf - sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + name: sqflite_common + sha256: "1581ffbf7a0e333b380d6a30737d78516b826cb35beb7fb0bf8a3ea0c678b465" url: "https://pub.dev" source: hosted - version: "7.0.0" - stack_trace: + version: "2.5.8" + sqflite_darwin: dependency: transitive description: - name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + name: sqflite_darwin + sha256: "279832e5cde3fe99e8571879498c9211f3ca6391b0d818df4e17d9fff5c6ccb3" url: "https://pub.dev" source: hosted - version: "1.11.0" - stream_channel: + version: "2.4.2" + sqflite_platform_interface: dependency: transitive description: - name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + name: sqflite_platform_interface + sha256: "8dd4515c7bdcae0a785b0062859336de775e8c65db81ae33dd5445f35be61920" url: "https://pub.dev" source: hosted - version: "2.1.1" - stream_transform: + version: "2.4.0" + sqlite3: dependency: transitive description: - name: stream_transform - sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + name: sqlite3 + sha256: "3145bd74dcdb4fd6f5c6dda4d4e4490a8087d7f286a14dee5d37087290f0f8a2" url: "https://pub.dev" source: hosted - version: "2.1.0" - string_scanner: + version: "2.9.4" + sqlite3_flutter_libs: + dependency: "direct main" + description: + name: sqlite3_flutter_libs + sha256: eeb9e3a45207649076b808f8a5a74d68770d0b7f26ccef6d5f43106eee5375ad + url: "https://pub.dev" + source: hosted + version: "0.5.42" + sqlparser: dependency: transitive description: - name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + name: sqlparser + sha256: "337e9997f7141ffdd054259128553c348635fa318f7ca492f07a4ab76f850d19" url: "https://pub.dev" source: hosted - version: "1.2.0" - term_glyph: + version: "0.43.1" + stack_trace: dependency: transitive description: - name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + name: stack_trace + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" url: "https://pub.dev" source: hosted - version: "1.2.1" - test: - dependency: "direct dev" + version: "1.12.1" + stream_channel: + dependency: transitive description: - name: test - sha256: a5fcd2d25eeadbb6589e80198a47d6a464ba3e2049da473943b8af9797900c2d + name: stream_channel + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" url: "https://pub.dev" source: hosted - version: "1.22.0" - test_api: + version: "2.1.4" + stream_transform: dependency: transitive description: - name: test_api - sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + name: stream_transform + sha256: ad47125e588cfd37a9a7f86c7d6356dde8dfe89d071d293f80ca9e9273a33871 url: "https://pub.dev" source: hosted - version: "0.4.16" - test_core: + version: "2.1.1" + string_scanner: dependency: transitive description: - name: test_core - sha256: "0ef9755ec6d746951ba0aabe62f874b707690b5ede0fecc818b138fcc9b14888" + name: string_scanner + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" url: "https://pub.dev" source: hosted - version: "0.4.20" - time: + version: "1.4.1" + synchronized: dependency: transitive description: - name: time - sha256: "83427e11d9072e038364a5e4da559e85869b227cf699a541be0da74f14140124" + name: synchronized + sha256: c254ade258ec8282947a0acbbc90b9575b4f19673533ee46f2f6e9b3aeefd7c0 url: "https://pub.dev" source: hosted - version: "2.1.3" - timing: + version: "3.4.0" + term_glyph: dependency: transitive description: - name: timing - sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + name: term_glyph + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" url: "https://pub.dev" source: hosted - version: "1.0.1" - tuple: - dependency: "direct main" + version: "1.2.2" + test_api: + dependency: transitive description: - name: tuple - sha256: "0ea99cd2f9352b2586583ab2ce6489d1f95a5f6de6fb9492faaf97ae2060f0aa" + name: test_api + sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "0.7.7" typed_data: dependency: transitive description: name: typed_data - sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.4.0" universal_io: dependency: transitive description: name: universal_io - sha256: "06866290206d196064fd61df4c7aea1ffe9a4e7c4ccaa8fcded42dd41948005d" + sha256: f63cbc48103236abf48e345e07a03ce5757ea86285ed313a6a032596ed9301e2 url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.1" url_launcher: dependency: "direct main" description: name: url_launcher - sha256: "75f2846facd11168d007529d6cd8fcb2b750186bea046af9711f10b907e1587e" + sha256: f6a7e5c4835bb4e3026a04793a4199ca2d14c739ec378fdfe23fc8075d0439f8 url: "https://pub.dev" source: hosted - version: "6.1.10" + version: "6.3.2" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: "22f8db4a72be26e9e3a4aa3f194b1f7afbc76d20ec141f84be1d787db2155cbd" + sha256: "17bc677f0b301615530dd1d67e0a9828cafa2d0b6b6eae4cd3679b7eac4a273c" url: "https://pub.dev" source: hosted - version: "6.0.31" + version: "6.3.30" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "9af7ea73259886b92199f9e42c116072f05ff9bea2dcb339ab935dfc957392c2" + sha256: "580fe5dfb51671ae38191d316e027f6b76272b026370708c2d898799750a02b0" url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "6.4.1" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: "207f4ddda99b95b4d4868320a352d374b0b7e05eefad95a4a26f57da413443f5" + sha256: d5e14138b3bc193a0f63c10a53c94b91d399df0512b1f29b94a043db7482384a url: "https://pub.dev" source: hosted - version: "3.0.5" + version: "3.2.2" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: "91ee3e75ea9dadf38036200c5d3743518f4a5eb77a8d13fda1ee5764373f185e" + sha256: "368adf46f71ad3c21b8f06614adb38346f193f3a59ba8fe9a2fd74133070ba18" url: "https://pub.dev" source: hosted - version: "3.0.5" + version: "3.2.5" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - sha256: "6c9ca697a5ae218ce56cece69d46128169a58aa8653c1b01d26fcd4aad8c4370" + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.3.2" url_launcher_web: dependency: transitive description: name: url_launcher_web - sha256: "81fe91b6c4f84f222d186a9d23c73157dc4c8e1c71489c4d08be1ad3b228f1aa" + sha256: "85c81589622fbc87c1c683aaea164d3604a7777495a79d91e39ffcdec39ddb34" url: "https://pub.dev" source: hosted - version: "2.0.16" + version: "2.4.3" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: "254708f17f7c20a9c8c471f67d86d76d4a3f9c1591aad1e15292008aceb82771" + sha256: "712c70ab1b99744ff066053cbe3e80c73332b38d46e5e945c98689b2e66fc15f" + url: "https://pub.dev" + source: hosted + version: "3.1.5" + uuid: + dependency: transitive + description: + name: uuid + sha256: "1fef9e8e11e2991bb773070d4656b7bd5d850967a2456cfc83cf47925ba79489" url: "https://pub.dev" source: hosted - version: "3.0.6" + version: "4.5.3" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: "2306c03da2ba81724afeb589c351ebbc0aa7d86005925be8f8735856dbe5e42d" + url: "https://pub.dev" + source: hosted + version: "1.2.2" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: "99fd9fbd34d9f9a32efd7b6a6aae14125d8237b10403b422a6a6dfeac2806146" + url: "https://pub.dev" + source: hosted + version: "1.1.13" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: "7ee12e6dffe0fc8e755179d6d91b3b34f5924223fc104d85572ef9180d73d172" + url: "https://pub.dev" + source: hosted + version: "1.2.5" vector_math: dependency: transitive description: name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.2.0" vm_service: dependency: transitive description: name: vm_service - sha256: e7fb6c2282f7631712b69c19d1bff82f3767eea33a2321c14fa59ad67ea391c7 + sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360" url: "https://pub.dev" source: hosted - version: "9.4.0" + version: "15.2.0" watcher: dependency: transitive description: name: watcher - sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" + sha256: "1398c9f081a753f9226febe8900fce8f7d0a67163334e1c94a2438339d79d635" url: "https://pub.dev" source: hosted - version: "1.0.2" - web_socket_channel: + version: "1.2.1" + web: dependency: transitive description: - name: web_socket_channel - sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b + name: web + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" url: "https://pub.dev" source: hosted - version: "2.4.0" - webkit_inspection_protocol: + version: "1.1.1" + web_socket: dependency: transitive description: - name: webkit_inspection_protocol - sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d" + name: web_socket + sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.0.1" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8 + url: "https://pub.dev" + source: hosted + version: "3.0.3" win32: dependency: transitive description: name: win32 - sha256: "5a751eddf9db89b3e5f9d50c20ab8612296e4e8db69009788d6c8b060a84191c" + sha256: ba6f4bba816c8d7e3c1580e170f3786d216951cc6b94babc3b814c08d2cb2738 url: "https://pub.dev" source: hosted - version: "4.1.4" + version: "6.3.0" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: ee1505df1426458f7f60aac270645098d318a8b4766d85fde75f76f2e21807d1 + sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.1.0" xml: dependency: transitive description: name: xml - sha256: "979ee37d622dec6365e2efa4d906c37470995871fe9ae080d967e192d88286b5" + sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025" url: "https://pub.dev" source: hosted - version: "6.2.2" + version: "6.6.1" yaml: dependency: transitive description: name: yaml - sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "3.1.3" sdks: - dart: ">=2.19.0 <3.0.0" - flutter: ">=3.7.0" + dart: ">=3.10.0 <4.0.0" + flutter: ">=3.38.1" diff --git a/pubspec.yaml b/pubspec.yaml index 35c0beb..017213d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,86 +1,93 @@ name: simple_aac -description: Porting SimpleAAC to flutter - -# The following line prevents the package from being accidentally published to -# pub.dev using `flutter pub publish`. This is preferred for private packages. -publish_to: 'none' # Remove this line if you wish to publish to pub.dev - -# The following defines the version and build number for your application. -# A version number is three numbers separated by dots, like 1.2.43 -# followed by an optional build number separated by a +. -# Both the version and the builder number may be overridden in flutter -# build by specifying --build-name and --build-number, respectively. -# In Android, build-name is used as versionName while build-number used as versionCode. -# Read more about Android versioning at https://developer.android.com/studio/publish/versioning -# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. -# Read more about iOS versioning at -# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +description: SimpleAAC - Augmentative Alternative Communication + +publish_to: 'none' + version: 1.0.0+1 environment: - sdk: ">=2.17.0 <3.0.0" - -# Dependencies specify other packages that your package needs in order to work. -# To automatically upgrade your package dependencies to the latest versions -# consider running `flutter pub upgrade --major-versions`. Alternatively, -# dependencies can be manually updated by changing the version numbers below to -# the latest version available on pub.dev. To see which dependencies have newer -# versions available, run `flutter pub outdated`. + sdk: '>=3.8.0 <4.0.0' + dependencies: flutter: sdk: flutter - salomon_bottom_bar: ^3.3.2 - flutter_flavorizr: ^2.1.6 flutter_localizations: sdk: flutter - # The following adds the Cupertino Icons font to your application. - # Use with the CupertinoIcons class for iOS style icons. - cupertino_icons: ^1.0.5 - - diffutil_sliverlist: ^0.5.1 - diffutil_dart: ^3.0.0 - flutter_secure_storage: ^8.0.0 - logger: ^1.3.0 - - package_info: ^2.0.2 - firebase_core: ^2.10.0 - firebase_crashlytics: ^3.1.2 - rxdart: ^0.27.7 - get_it: ^7.3.0 - shared_preferences: ^2.1.0 - image_picker: ^0.8.7+4 - tuple: ^2.0.1 - url_launcher: ^6.1.10 - smooth_page_indicator: ^1.1.0 - flutter_speed_dial: ^6.2.0 - settings_ui: ^2.0.2 - flutter_image_compress: ^2.0.1 + cupertino_icons: ^1.0.8 + + # Navigation + go_router: ^17.2.3 + + # State / DI + rxdart: ^0.28.0 + get_it: ^9.2.1 + + # Database / sync + drift: ^2.21.0 + drift_flutter: ^0.1.0 + sqlite3_flutter_libs: ^0.5.28 + cloud_firestore: ^6.5.0 + firebase_auth: ^6.5.2 + firebase_ui_auth: ^3.0.1 + firebase_ui_oauth_google: ^2.0.1 + google_sign_in: ^6.2.2 + path_provider: ^2.1.5 + + # Models + freezed_annotation: ^3.1.0 + json_annotation: ^4.12.0 + + # Firebase + firebase_core: ^4.10.0 + firebase_crashlytics: ^5.2.3 + firebase_storage: ^13.4.2 + # firebase_vertexai added in Phase 4 (AI features) + + # Theme + flex_color_scheme: ^8.4.0 + + # UI + salomon_bottom_bar: ^3.3.2 + diffutil_sliverlist: any + diffutil_dart: any + smooth_page_indicator: ^2.0.1 + flutter_speed_dial: ^7.0.0 expandable: ^5.0.1 - hive_built_value: ^2.3.0 - hive_built_value_flutter: ^2.3.0 + # Storage / Files + flutter_secure_storage: ^10.3.1 + shared_preferences: ^2.5.5 + image_picker: ^1.2.2 + image_cropper: ^9.1.0 + flutter_image_compress: ^2.4.0 + + cached_network_image: ^3.4.1 + shimmer: ^3.0.0 + + # TTS + flutter_tts: ^4.0.0 + audioplayers: ^6.0.0 + dart_openai: ^4.1.0 - flex_color_scheme: ^7.0.5 - change_notifier_builder: ^1.1.2 + # AI predictions + google_generative_ai: ^0.4.0 + # Utilities + logger: ^2.7.0 + package_info_plus: ^10.1.0 + url_launcher: ^6.3.2 dev_dependencies: flutter_test: sdk: flutter - # The "flutter_lints" package below contains a set of recommended lints to - # encourage good coding practices. The lint set provided by the package is - # activated in the `analysis_options.yaml` file located at the root of your - # package. See that file for information about deactivating specific lint - # rules and activating additional ones. - test: any + build_runner: ^2.15.0 + drift_dev: ^2.21.0 + freezed: ^3.2.5 + json_serializable: ^6.14.0 - build_runner: ^2.3.3 - built_value_generator: ^8.5.0 - hive_built_value_generator: ^2.3.1 - flutter_native_splash: ^2.2.19 - - flutter_launcher_icons: ^0.13.1 + flutter_native_splash: ^2.4.4 + flutter_launcher_icons: ^0.14.3 flutter_native_splash: color: "#FFFFFF" @@ -88,7 +95,6 @@ flutter_native_splash: android: true ios: true - flavorizr: app: android: @@ -99,7 +105,6 @@ flavorizr: dev: app: name: "Simple AAC DEV" - android: applicationId: "com.sealstudios.simpleaac.dev" firebase: @@ -112,7 +117,6 @@ flavorizr: uat: app: name: "Simple AAC UAT" - android: applicationId: "com.sealstudios.simpleaac.uat" firebase: @@ -125,20 +129,15 @@ flavorizr: prod: app: name: "Simple AAC" - android: - applicationId: "com.sealstudios.simpleaac.prod" + applicationId: "com.sealstudios.simpleaac" firebase: config: "firebase/prod/google-services.json" ios: - bundleId: "com.sealstudios.simpleaac.prod" + bundleId: "com.sealstudios.simpleaac" firebase: config: "firebase/prod/GoogleService-Info.plist" -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec - -# The following section is specific to Flutter. flutter: generate: true assets: @@ -153,8 +152,8 @@ flutter: - family: Antipasto fonts: - asset: assets/fonts/antipasto_regular.ttf + weight: 400 - asset: assets/fonts/antipasto_extralight.ttf + weight: 300 - asset: assets/fonts/antipasto_extrabold.ttf - - # For details regarding fonts from package dependencies, - # see https://flutter.dev/custom-fonts/#from-packages + weight: 700 diff --git a/upload_to_firebase.js b/upload_to_firebase.js new file mode 100644 index 0000000..1232576 --- /dev/null +++ b/upload_to_firebase.js @@ -0,0 +1,120 @@ +// 1.npm init -y +// npm install @google-cloud/storage +// npm install sharp +// +// 2. Download your service account key file: +// * Go to the **Firebase Console** -> **Project Settings** -> **Service Accounts**. +// * Click **Generate New Private Key**, download the JSON file, and save it in your project directory as `serviceAccountKey.json`. +// +// 3. node upload_to_firebase.js +// --- + + +const { Storage } = require('@google-cloud/storage'); +const fs = require('fs'); +const path = require('path'); +const { Jimp } = require('jimp'); + +// ============================================================================ +// CONFIGURATION +// ============================================================================ +const BUCKET_NAME = 'simpleaac-460e6.appspot.com'; +const LOCAL_IMAGE_DIR = path.join(__dirname, 'aac_images'); +const SELECTED_ALBUM = 'core'; +const REMOTE_PATH_PREFIX = `simple_aac/images/${SELECTED_ALBUM}`; +const CONCURRENCY_LIMIT = 3; // Reduced slightly to stabilize network throughput +const MAX_RETRIES = 3; + +const storage = new Storage({ + keyFilename: path.join(__dirname, 'serviceAccountKey.json'), +}); + +const bucket = storage.bucket(BUCKET_NAME); + +/** + * Helper function to pause execution + */ +const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); + +/** + * Checks Firebase Storage to see if the file already exists + */ +async function fileExistsInFirebase(destination) { + try { + const [exists] = await bucket.file(destination).exists(); + return exists; + } catch (error) { + // If the check fails, assume it doesn't exist so we attempt upload + return false; + } +} + +/** + * Resizes and uploads a file with an aggressive retry loop for rate limits. + */ +async function processAndUploadWithRetry(filePath, filename, retryCount = 0) { + const destination = `${REMOTE_PATH_PREFIX}/${filename}`; + + // Skip if already in Firebase + const alreadyExists = await fileExistsInFirebase(destination); + if (alreadyExists) { + console.log(`- Skipping ${filename}: Already exists in Firebase.`); + return; + } + + const fileRef = bucket.file(destination); + + try { + // 1. Load and downscale the file to 256x256 + const image = await Jimp.read(filePath); + image.resize({ w: 256, h: 256 }); + const compressedBuffer = await image.getBuffer('image/png'); + + // 2. Upload buffer directly to Firebase + await fileRef.save(compressedBuffer, { + metadata: { + contentType: 'image/png', + cacheControl: 'public, max-age=31536000', + }, + }); + + console.log(`✅ Successfully uploaded: ${filename}`); + } catch (error) { + if (retryCount < MAX_RETRIES) { + const waitTime = Math.pow(2, retryCount) * 1000; // Exponential backoff: 1s, 2s, 4s + console.warn(`⚠️ Rate limited or network drop for ${filename}. Retrying in ${waitTime / 1000}s... (Attempt ${retryCount + 1}/${MAX_RETRIES})`); + await sleep(waitTime); + return processAndUploadWithRetry(filePath, filename, retryCount + 1); + } else { + console.error(`❌ Final Failure uploading ${filename} after ${MAX_RETRIES} retries:`, error.message); + } + } +} + +/** + * Main execution orchestration engine + */ +async function main() { + if (!fs.existsSync(LOCAL_IMAGE_DIR)) { + console.error(`Error: Local directory not found at ${LOCAL_IMAGE_DIR}`); + process.exit(1); + } + + const files = fs.readdirSync(LOCAL_IMAGE_DIR).filter(file => file.endsWith('.png')); + console.log(`Found ${files.length} local files. Starting differential sync with Firebase...`); + + for (let i = 0; i < files.length; i += CONCURRENCY_LIMIT) { + const chunk = files.slice(i, i + CONCURRENCY_LIMIT); + const uploadPromises = chunk.map(filename => { + const filePath = path.join(LOCAL_IMAGE_DIR, filename); + return processAndUploadWithRetry(filePath, filename); + }); + + await Promise.all(uploadPromises); + console.log(`Processed batch ${Math.min(i + CONCURRENCY_LIMIT, files.length)} / ${files.length}`); + } + + console.log('\nDifferential sync process completely finished.'); +} + +main().catch(console.error); \ No newline at end of file diff --git a/upload_vocabulary_to_firestore.js b/upload_vocabulary_to_firestore.js new file mode 100644 index 0000000..a3baeaa --- /dev/null +++ b/upload_vocabulary_to_firestore.js @@ -0,0 +1,187 @@ +// Upload core vocabulary to Firestore. +// +// Setup (one-time): +// npm install firebase-admin +// +// Download your service account key: +// Firebase Console → Project Settings → Service Accounts → Generate New Private Key +// Save as serviceAccountKey.json in the project root. +// +// Usage: +// node upload_vocabulary_to_firestore.js # differential: skips unchanged words +// node upload_vocabulary_to_firestore.js --force # always overwrites every word +// node upload_vocabulary_to_firestore.js --dry-run # prints what would be written, no writes +// +// Firestore path written: +// /vocabulary/{languageId}/words/{wordId} ← one doc per word +// /vocabulary/{languageId} ← metadata doc (wordCount, uploadedAt, scriptVersion) + +'use strict'; + +const { initializeApp, cert } = require('firebase-admin/app'); +const { getFirestore, FieldValue } = require('firebase-admin/firestore'); +const fs = require('fs'); +const path = require('path'); + +// ── Configuration ───────────────────────────────────────────────────────────── + +const SERVICE_ACCOUNT_PATH = path.join(__dirname, 'serviceAccountKey.json'); +const VOCABULARY_JSON_PATH = path.join(__dirname, 'assets', 'json', 'initial_word_data.json'); + +// Bump this whenever the schema or word data changes. The script compares +// this against the version stored in Firestore and skips uploading if they match +// (unless --force is passed). +const SCRIPT_VERSION = '1.0.0'; + +const FIRESTORE_BATCH_SIZE = 400; // Firestore max is 500; stay under to be safe +const CONCURRENCY = 3; // parallel language uploads + +// ── Parse flags ─────────────────────────────────────────────────────────────── + +const args = process.argv.slice(2); +const FORCE = args.includes('--force'); +const DRY_RUN = args.includes('--dry-run'); + +if (DRY_RUN) console.log('🔍 DRY RUN — no writes will be made.\n'); +if (FORCE) console.log('⚡ FORCE mode — overwriting all words regardless of version.\n'); + +// ── Firebase init ───────────────────────────────────────────────────────────── + +if (!fs.existsSync(SERVICE_ACCOUNT_PATH)) { + console.error(`❌ serviceAccountKey.json not found at ${SERVICE_ACCOUNT_PATH}`); + console.error(' Download it from Firebase Console → Project Settings → Service Accounts.'); + process.exit(1); +} + +const serviceAccount = require(SERVICE_ACCOUNT_PATH); +initializeApp({ credential: cert(serviceAccount) }); +const db = getFirestore(); + +// ── Helpers ─────────────────────────────────────────────────────────────────── + +const sleep = (ms) => new Promise((r) => setTimeout(r, ms)); + +/** + * Commits an array of Firestore write operations in batches of FIRESTORE_BATCH_SIZE. + * Each operation is { ref, data } where ref is a DocumentReference. + */ +async function commitInBatches(operations) { + let committed = 0; + for (let i = 0; i < operations.length; i += FIRESTORE_BATCH_SIZE) { + const chunk = operations.slice(i, i + FIRESTORE_BATCH_SIZE); + const batch = db.batch(); + for (const { ref, data } of chunk) { + batch.set(ref, data); + } + if (!DRY_RUN) await batch.commit(); + committed += chunk.length; + process.stdout.write(` Committed ${committed} / ${operations.length} docs\r`); + } + process.stdout.write('\n'); +} + +/** + * Strips fields that should never be stored in core vocabulary — + * anything that is per-user state. + */ +function toCoreWordDoc(word) { + return { + wordId: word.wordId, + text: word.text, + phoneticOverride: word.phoneticOverride ?? null, + type: word.type, + subType: word.subType, + imagePath: word.imagePath ?? null, + isCoreVocabulary: true, + extraRelatedWordIds: word.extraRelatedWordIds ?? [], + aiSuggestedFollowUps: word.aiSuggestedFollowUps ?? [], + // createdDate set server-side on first write; never overwrite it. + }; +} + +// ── Per-language upload ─────────────────────────────────────────────────────── + +async function uploadLanguage(language) { + const langId = language.id; + const words = language.words ?? []; + + console.log(`\n── Language: ${language.displayName} (${langId}) — ${words.length} words`); + + const langRef = db.collection('vocabulary').doc(langId); + const wordsRef = langRef.collection('words'); + + // Check stored version unless --force + if (!FORCE) { + const meta = await langRef.get(); + if (meta.exists) { + const stored = meta.data(); + if (stored.scriptVersion === SCRIPT_VERSION && stored.wordCount === words.length) { + console.log(` ✅ Already up-to-date (version ${SCRIPT_VERSION}, ${words.length} words). Skipping.`); + console.log(' Pass --force to overwrite anyway.'); + return; + } + console.log(` ↻ Version mismatch: stored=${stored.scriptVersion ?? 'none'}, current=${SCRIPT_VERSION}. Re-uploading.`); + } else { + console.log(` ✨ First upload for language "${langId}".`); + } + } + + // Build word write operations + const wordOps = words.map((word) => ({ + ref: wordsRef.doc(word.wordId), + data: toCoreWordDoc(word), + })); + + console.log(` Writing ${wordOps.length} words in batches of ${FIRESTORE_BATCH_SIZE}...`); + await commitInBatches(wordOps); + + // Write metadata doc last so version only advances after all words are written + const metaData = { + languageId: langId, + displayName: language.displayName, + wordCount: words.length, + scriptVersion: SCRIPT_VERSION, + uploadedAt: FieldValue.serverTimestamp(), + }; + + if (!DRY_RUN) { + await langRef.set(metaData, { merge: true }); + } + + console.log(` ✅ Done — ${words.length} words written, metadata updated.`); +} + +// ── Main ────────────────────────────────────────────────────────────────────── + +async function main() { + if (!fs.existsSync(VOCABULARY_JSON_PATH)) { + console.error(`❌ Vocabulary JSON not found at ${VOCABULARY_JSON_PATH}`); + process.exit(1); + } + + const raw = fs.readFileSync(VOCABULARY_JSON_PATH, 'utf-8'); + const data = JSON.parse(raw); + const languages = data.languages ?? []; + + if (languages.length === 0) { + console.error('❌ No languages found in vocabulary JSON.'); + process.exit(1); + } + + console.log(`Loaded ${languages.length} language(s) from ${path.basename(VOCABULARY_JSON_PATH)}.`); + console.log(`Script version: ${SCRIPT_VERSION}`); + + // Upload languages with limited concurrency + for (let i = 0; i < languages.length; i += CONCURRENCY) { + const chunk = languages.slice(i, i + CONCURRENCY); + await Promise.all(chunk.map(uploadLanguage)); + } + + console.log('\n🎉 Vocabulary upload complete.'); + process.exit(0); +} + +main().catch((err) => { + console.error('\n❌ Fatal error:', err.message); + process.exit(1); +}); diff --git a/web/drift_worker.js b/web/drift_worker.js new file mode 100644 index 0000000..e8c91fc --- /dev/null +++ b/web/drift_worker.js @@ -0,0 +1,29654 @@ +// Generated by dart2js (, csp, intern-composite-values), the Dart to JavaScript compiler version: 3.10.1. +// The code supports the following hooks: +// dartPrint(message): +// if this function is defined it is called instead of the Dart [print] +// method. +// +// dartMainRunner(main, args): +// if this function is defined, the Dart [main] method will not be invoked +// directly. Instead, a closure that will invoke [main], and its arguments +// [args] is passed to [dartMainRunner]. +// +// dartDeferredLibraryLoader(uri, successCallback, errorCallback, loadId, loadPriority): +// if this function is defined, it will be called when a deferred library +// is loaded. It should load and eval the javascript of `uri`, and call +// successCallback. If it fails to do so, it should call errorCallback with +// an error. The loadId argument is the deferred import that resulted in +// this uri being loaded. The loadPriority argument is an arbitrary argument +// string forwarded from the 'dart2js:load-priority' pragma option. +// dartDeferredLibraryMultiLoader(uris, successCallback, errorCallback, loadId, loadPriority): +// if this function is defined, it will be called when a deferred library +// is loaded. It should load and eval the javascript of every URI in `uris`, +// and call successCallback. If it fails to do so, it should call +// errorCallback with an error. The loadId argument is the deferred import +// that resulted in this uri being loaded. The loadPriority argument is an +// arbitrary argument string forwarded from the 'dart2js:load-priority' +// pragma option. +// +// dartCallInstrumentation(id, qualifiedName): +// if this function is defined, it will be called at each entry of a +// method or constructor. Used only when compiling programs with +// --experiment-call-instrumentation. +(function dartProgram() { + function copyProperties(from, to) { + var keys = Object.keys(from); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + to[key] = from[key]; + } + } + function mixinPropertiesHard(from, to) { + var keys = Object.keys(from); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!to.hasOwnProperty(key)) { + to[key] = from[key]; + } + } + } + function mixinPropertiesEasy(from, to) { + Object.assign(to, from); + } + var supportsDirectProtoAccess = function() { + var cls = function() { + }; + cls.prototype = {p: {}}; + var object = new cls(); + if (!(Object.getPrototypeOf(object) && Object.getPrototypeOf(object).p === cls.prototype.p)) + return false; + try { + if (typeof navigator != "undefined" && typeof navigator.userAgent == "string" && navigator.userAgent.indexOf("Chrome/") >= 0) + return true; + if (typeof version == "function" && version.length == 0) { + var v = version(); + if (/^\d+\.\d+\.\d+\.\d+$/.test(v)) + return true; + } + } catch (_) { + } + return false; + }(); + function inherit(cls, sup) { + cls.prototype.constructor = cls; + cls.prototype["$is" + cls.name] = cls; + if (sup != null) { + if (supportsDirectProtoAccess) { + Object.setPrototypeOf(cls.prototype, sup.prototype); + return; + } + var clsPrototype = Object.create(sup.prototype); + copyProperties(cls.prototype, clsPrototype); + cls.prototype = clsPrototype; + } + } + function inheritMany(sup, classes) { + for (var i = 0; i < classes.length; i++) { + inherit(classes[i], sup); + } + } + function mixinEasy(cls, mixin) { + mixinPropertiesEasy(mixin.prototype, cls.prototype); + cls.prototype.constructor = cls; + } + function mixinHard(cls, mixin) { + mixinPropertiesHard(mixin.prototype, cls.prototype); + cls.prototype.constructor = cls; + } + function lazy(holder, name, getterName, initializer) { + var uninitializedSentinel = holder; + holder[name] = uninitializedSentinel; + holder[getterName] = function() { + if (holder[name] === uninitializedSentinel) { + holder[name] = initializer(); + } + holder[getterName] = function() { + return this[name]; + }; + return holder[name]; + }; + } + function lazyFinal(holder, name, getterName, initializer) { + var uninitializedSentinel = holder; + holder[name] = uninitializedSentinel; + holder[getterName] = function() { + if (holder[name] === uninitializedSentinel) { + var value = initializer(); + if (holder[name] !== uninitializedSentinel) { + A.throwLateFieldADI(name); + } + holder[name] = value; + } + var finalValue = holder[name]; + holder[getterName] = function() { + return finalValue; + }; + return finalValue; + }; + } + function makeConstList(list, rti) { + if (rti != null) + A._setArrayType(list, rti); + list.$flags = 7; + return list; + } + function convertToFastObject(properties) { + function t() { + } + t.prototype = properties; + new t(); + return properties; + } + function convertAllToFastObject(arrayOfObjects) { + for (var i = 0; i < arrayOfObjects.length; ++i) { + convertToFastObject(arrayOfObjects[i]); + } + } + var functionCounter = 0; + function instanceTearOffGetter(isIntercepted, parameters) { + var cache = null; + return isIntercepted ? function(receiver) { + if (cache === null) + cache = A.closureFromTearOff(parameters); + return new cache(receiver, this); + } : function() { + if (cache === null) + cache = A.closureFromTearOff(parameters); + return new cache(this, null); + }; + } + function staticTearOffGetter(parameters) { + var cache = null; + return function() { + if (cache === null) + cache = A.closureFromTearOff(parameters).prototype; + return cache; + }; + } + var typesOffset = 0; + function tearOffParameters(container, isStatic, isIntercepted, requiredParameterCount, optionalParameterDefaultValues, callNames, funsOrNames, funType, applyIndex, needsDirectAccess) { + if (typeof funType == "number") { + funType += typesOffset; + } + return {co: container, iS: isStatic, iI: isIntercepted, rC: requiredParameterCount, dV: optionalParameterDefaultValues, cs: callNames, fs: funsOrNames, fT: funType, aI: applyIndex || 0, nDA: needsDirectAccess}; + } + function installStaticTearOff(holder, getterName, requiredParameterCount, optionalParameterDefaultValues, callNames, funsOrNames, funType, applyIndex) { + var parameters = tearOffParameters(holder, true, false, requiredParameterCount, optionalParameterDefaultValues, callNames, funsOrNames, funType, applyIndex, false); + var getterFunction = staticTearOffGetter(parameters); + holder[getterName] = getterFunction; + } + function installInstanceTearOff(prototype, getterName, isIntercepted, requiredParameterCount, optionalParameterDefaultValues, callNames, funsOrNames, funType, applyIndex, needsDirectAccess) { + isIntercepted = !!isIntercepted; + var parameters = tearOffParameters(prototype, false, isIntercepted, requiredParameterCount, optionalParameterDefaultValues, callNames, funsOrNames, funType, applyIndex, !!needsDirectAccess); + var getterFunction = instanceTearOffGetter(isIntercepted, parameters); + prototype[getterName] = getterFunction; + } + function setOrUpdateInterceptorsByTag(newTags) { + var tags = init.interceptorsByTag; + if (!tags) { + init.interceptorsByTag = newTags; + return; + } + copyProperties(newTags, tags); + } + function setOrUpdateLeafTags(newTags) { + var tags = init.leafTags; + if (!tags) { + init.leafTags = newTags; + return; + } + copyProperties(newTags, tags); + } + function updateTypes(newTypes) { + var types = init.types; + var length = types.length; + types.push.apply(types, newTypes); + return length; + } + function updateHolder(holder, newHolder) { + copyProperties(newHolder, holder); + return holder; + } + var hunkHelpers = function() { + var mkInstance = function(isIntercepted, requiredParameterCount, optionalParameterDefaultValues, callNames, applyIndex) { + return function(container, getterName, name, funType) { + return installInstanceTearOff(container, getterName, isIntercepted, requiredParameterCount, optionalParameterDefaultValues, callNames, [name], funType, applyIndex, false); + }; + }, + mkStatic = function(requiredParameterCount, optionalParameterDefaultValues, callNames, applyIndex) { + return function(container, getterName, name, funType) { + return installStaticTearOff(container, getterName, requiredParameterCount, optionalParameterDefaultValues, callNames, [name], funType, applyIndex); + }; + }; + return {inherit: inherit, inheritMany: inheritMany, mixin: mixinEasy, mixinHard: mixinHard, installStaticTearOff: installStaticTearOff, installInstanceTearOff: installInstanceTearOff, _instance_0u: mkInstance(0, 0, null, ["call$0"], 0), _instance_1u: mkInstance(0, 1, null, ["call$1"], 0), _instance_2u: mkInstance(0, 2, null, ["call$2"], 0), _instance_0i: mkInstance(1, 0, null, ["call$0"], 0), _instance_1i: mkInstance(1, 1, null, ["call$1"], 0), _instance_2i: mkInstance(1, 2, null, ["call$2"], 0), _static_0: mkStatic(0, null, ["call$0"], 0), _static_1: mkStatic(1, null, ["call$1"], 0), _static_2: mkStatic(2, null, ["call$2"], 0), makeConstList: makeConstList, lazy: lazy, lazyFinal: lazyFinal, updateHolder: updateHolder, convertToFastObject: convertToFastObject, updateTypes: updateTypes, setOrUpdateInterceptorsByTag: setOrUpdateInterceptorsByTag, setOrUpdateLeafTags: setOrUpdateLeafTags}; + }(); + function initializeDeferredHunk(hunk) { + typesOffset = init.types.length; + hunk(hunkHelpers, init, holders, $); + } + var J = { + makeDispatchRecord(interceptor, proto, extension, indexability) { + return {i: interceptor, p: proto, e: extension, x: indexability}; + }, + getNativeInterceptor(object) { + var proto, objectProto, $constructor, interceptor, t1, + record = object[init.dispatchPropertyName]; + if (record == null) + if ($.initNativeDispatchFlag == null) { + A.initNativeDispatch(); + record = object[init.dispatchPropertyName]; + } + if (record != null) { + proto = record.p; + if (false === proto) + return record.i; + if (true === proto) + return object; + objectProto = Object.getPrototypeOf(object); + if (proto === objectProto) + return record.i; + if (record.e === objectProto) + throw A.wrapException(A.UnimplementedError$("Return interceptor for " + A.S(proto(object, record)))); + } + $constructor = object.constructor; + if ($constructor == null) + interceptor = null; + else { + t1 = $._JS_INTEROP_INTERCEPTOR_TAG; + if (t1 == null) + t1 = $._JS_INTEROP_INTERCEPTOR_TAG = init.getIsolateTag("_$dart_js"); + interceptor = $constructor[t1]; + } + if (interceptor != null) + return interceptor; + interceptor = A.lookupAndCacheInterceptor(object); + if (interceptor != null) + return interceptor; + if (typeof object == "function") + return B.JavaScriptFunction_methods; + proto = Object.getPrototypeOf(object); + if (proto == null) + return B.PlainJavaScriptObject_methods; + if (proto === Object.prototype) + return B.PlainJavaScriptObject_methods; + if (typeof $constructor == "function") { + t1 = $._JS_INTEROP_INTERCEPTOR_TAG; + if (t1 == null) + t1 = $._JS_INTEROP_INTERCEPTOR_TAG = init.getIsolateTag("_$dart_js"); + Object.defineProperty($constructor, t1, {value: B.UnknownJavaScriptObject_methods, enumerable: false, writable: true, configurable: true}); + return B.UnknownJavaScriptObject_methods; + } + return B.UnknownJavaScriptObject_methods; + }, + JSArray_JSArray$fixed($length, $E) { + if ($length < 0 || $length > 4294967295) + throw A.wrapException(A.RangeError$range($length, 0, 4294967295, "length", null)); + return J.JSArray_JSArray$markFixed(new Array($length), $E); + }, + JSArray_JSArray$growable($length, $E) { + if ($length < 0) + throw A.wrapException(A.ArgumentError$("Length must be a non-negative integer: " + $length, null)); + return A._setArrayType(new Array($length), $E._eval$1("JSArray<0>")); + }, + JSArray_JSArray$markFixed(allocation, $E) { + var t1 = A._setArrayType(allocation, $E._eval$1("JSArray<0>")); + t1.$flags = 1; + return t1; + }, + JSArray__compareAny(a, b) { + var t1 = type$.Comparable_dynamic; + return J.compareTo$1$ns(t1._as(a), t1._as(b)); + }, + JSString__isWhitespace(codeUnit) { + if (codeUnit < 256) + switch (codeUnit) { + case 9: + case 10: + case 11: + case 12: + case 13: + case 32: + case 133: + case 160: + return true; + default: + return false; + } + switch (codeUnit) { + 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 true; + default: + return false; + } + }, + JSString__skipLeadingWhitespace(string, index) { + var t1, codeUnit; + for (t1 = string.length; index < t1;) { + codeUnit = string.charCodeAt(index); + if (codeUnit !== 32 && codeUnit !== 13 && !J.JSString__isWhitespace(codeUnit)) + break; + ++index; + } + return index; + }, + JSString__skipTrailingWhitespace(string, index) { + var t1, index0, codeUnit; + for (t1 = string.length; index > 0; index = index0) { + index0 = index - 1; + if (!(index0 < t1)) + return A.ioore(string, index0); + codeUnit = string.charCodeAt(index0); + if (codeUnit !== 32 && codeUnit !== 13 && !J.JSString__isWhitespace(codeUnit)) + break; + } + return index; + }, + getInterceptor$(receiver) { + if (typeof receiver == "number") { + if (Math.floor(receiver) == receiver) + return J.JSInt.prototype; + return J.JSNumNotInt.prototype; + } + if (typeof receiver == "string") + return J.JSString.prototype; + if (receiver == null) + return J.JSNull.prototype; + if (typeof receiver == "boolean") + return J.JSBool.prototype; + if (Array.isArray(receiver)) + return J.JSArray.prototype; + if (typeof receiver != "object") { + if (typeof receiver == "function") + return J.JavaScriptFunction.prototype; + if (typeof receiver == "symbol") + return J.JavaScriptSymbol.prototype; + if (typeof receiver == "bigint") + return J.JavaScriptBigInt.prototype; + return receiver; + } + if (receiver instanceof A.Object) + return receiver; + return J.getNativeInterceptor(receiver); + }, + getInterceptor$asx(receiver) { + if (typeof receiver == "string") + return J.JSString.prototype; + if (receiver == null) + return receiver; + if (Array.isArray(receiver)) + return J.JSArray.prototype; + if (typeof receiver != "object") { + if (typeof receiver == "function") + return J.JavaScriptFunction.prototype; + if (typeof receiver == "symbol") + return J.JavaScriptSymbol.prototype; + if (typeof receiver == "bigint") + return J.JavaScriptBigInt.prototype; + return receiver; + } + if (receiver instanceof A.Object) + return receiver; + return J.getNativeInterceptor(receiver); + }, + getInterceptor$ax(receiver) { + if (receiver == null) + return receiver; + if (Array.isArray(receiver)) + return J.JSArray.prototype; + if (typeof receiver != "object") { + if (typeof receiver == "function") + return J.JavaScriptFunction.prototype; + if (typeof receiver == "symbol") + return J.JavaScriptSymbol.prototype; + if (typeof receiver == "bigint") + return J.JavaScriptBigInt.prototype; + return receiver; + } + if (receiver instanceof A.Object) + return receiver; + return J.getNativeInterceptor(receiver); + }, + getInterceptor$ns(receiver) { + if (typeof receiver == "number") + return J.JSNumber.prototype; + if (typeof receiver == "string") + return J.JSString.prototype; + if (receiver == null) + return receiver; + if (!(receiver instanceof A.Object)) + return J.UnknownJavaScriptObject.prototype; + return receiver; + }, + getInterceptor$s(receiver) { + if (typeof receiver == "string") + return J.JSString.prototype; + if (receiver == null) + return receiver; + if (!(receiver instanceof A.Object)) + return J.UnknownJavaScriptObject.prototype; + return receiver; + }, + getInterceptor$x(receiver) { + if (receiver == null) + return receiver; + if (typeof receiver != "object") { + if (typeof receiver == "function") + return J.JavaScriptFunction.prototype; + if (typeof receiver == "symbol") + return J.JavaScriptSymbol.prototype; + if (typeof receiver == "bigint") + return J.JavaScriptBigInt.prototype; + return receiver; + } + if (receiver instanceof A.Object) + return receiver; + return J.getNativeInterceptor(receiver); + }, + get$first$ax(receiver) { + return J.getInterceptor$ax(receiver).get$first(receiver); + }, + get$hashCode$(receiver) { + return J.getInterceptor$(receiver).get$hashCode(receiver); + }, + get$isEmpty$asx(receiver) { + return J.getInterceptor$asx(receiver).get$isEmpty(receiver); + }, + get$iterator$ax(receiver) { + return J.getInterceptor$ax(receiver).get$iterator(receiver); + }, + get$last$ax(receiver) { + return J.getInterceptor$ax(receiver).get$last(receiver); + }, + get$length$asx(receiver) { + return J.getInterceptor$asx(receiver).get$length(receiver); + }, + get$runtimeType$(receiver) { + return J.getInterceptor$(receiver).get$runtimeType(receiver); + }, + $eq$(receiver, a0) { + if (receiver == null) + return a0 == null; + if (typeof receiver != "object") + return a0 != null && receiver === a0; + return J.getInterceptor$(receiver).$eq(receiver, a0); + }, + $index$asx(receiver, a0) { + if (typeof a0 === "number") + if (Array.isArray(receiver) || typeof receiver == "string" || A.isJsIndexable(receiver, receiver[init.dispatchPropertyName])) + if (a0 >>> 0 === a0 && a0 < receiver.length) + return receiver[a0]; + return J.getInterceptor$asx(receiver).$index(receiver, a0); + }, + $indexSet$ax(receiver, a0, a1) { + return J.getInterceptor$ax(receiver).$indexSet(receiver, a0, a1); + }, + add$1$ax(receiver, a0) { + return J.getInterceptor$ax(receiver).add$1(receiver, a0); + }, + allMatches$1$s(receiver, a0) { + return J.getInterceptor$s(receiver).allMatches$1(receiver, a0); + }, + allMatches$2$s(receiver, a0, a1) { + return J.getInterceptor$s(receiver).allMatches$2(receiver, a0, a1); + }, + asByteData$0$x(receiver) { + return J.getInterceptor$x(receiver).asByteData$0(receiver); + }, + asUint8List$2$x(receiver, a0, a1) { + return J.getInterceptor$x(receiver).asUint8List$2(receiver, a0, a1); + }, + cast$1$0$ax(receiver, $T1) { + return J.getInterceptor$ax(receiver).cast$1$0(receiver, $T1); + }, + codeUnitAt$1$s(receiver, a0) { + return J.getInterceptor$s(receiver).codeUnitAt$1(receiver, a0); + }, + compareTo$1$ns(receiver, a0) { + return J.getInterceptor$ns(receiver).compareTo$1(receiver, a0); + }, + elementAt$1$ax(receiver, a0) { + return J.getInterceptor$ax(receiver).elementAt$1(receiver, a0); + }, + getRange$2$ax(receiver, a0, a1) { + return J.getInterceptor$ax(receiver).getRange$2(receiver, a0, a1); + }, + map$1$1$ax(receiver, a0, $T1) { + return J.getInterceptor$ax(receiver).map$1$1(receiver, a0, $T1); + }, + matchAsPrefix$2$s(receiver, a0, a1) { + return J.getInterceptor$s(receiver).matchAsPrefix$2(receiver, a0, a1); + }, + setRange$4$ax(receiver, a0, a1, a2, a3) { + return J.getInterceptor$ax(receiver).setRange$4(receiver, a0, a1, a2, a3); + }, + skip$1$ax(receiver, a0) { + return J.getInterceptor$ax(receiver).skip$1(receiver, a0); + }, + startsWith$1$s(receiver, a0) { + return J.getInterceptor$s(receiver).startsWith$1(receiver, a0); + }, + sublist$2$ax(receiver, a0, a1) { + return J.getInterceptor$ax(receiver).sublist$2(receiver, a0, a1); + }, + take$1$ax(receiver, a0) { + return J.getInterceptor$ax(receiver).take$1(receiver, a0); + }, + toList$0$ax(receiver) { + return J.getInterceptor$ax(receiver).toList$0(receiver); + }, + toString$0$(receiver) { + return J.getInterceptor$(receiver).toString$0(receiver); + }, + Interceptor: function Interceptor() { + }, + JSBool: function JSBool() { + }, + JSNull: function JSNull() { + }, + JavaScriptObject: function JavaScriptObject() { + }, + LegacyJavaScriptObject: function LegacyJavaScriptObject() { + }, + PlainJavaScriptObject: function PlainJavaScriptObject() { + }, + UnknownJavaScriptObject: function UnknownJavaScriptObject() { + }, + JavaScriptFunction: function JavaScriptFunction() { + }, + JavaScriptBigInt: function JavaScriptBigInt() { + }, + JavaScriptSymbol: function JavaScriptSymbol() { + }, + JSArray: function JSArray(t0) { + this.$ti = t0; + }, + JSArraySafeToStringHook: function JSArraySafeToStringHook() { + }, + JSUnmodifiableArray: function JSUnmodifiableArray(t0) { + this.$ti = t0; + }, + ArrayIterator: function ArrayIterator(t0, t1, t2) { + var _ = this; + _._iterable = t0; + _._length = t1; + _._index = 0; + _._current = null; + _.$ti = t2; + }, + JSNumber: function JSNumber() { + }, + JSInt: function JSInt() { + }, + JSNumNotInt: function JSNumNotInt() { + }, + JSString: function JSString() { + } + }, + A = {JS_CONST: function JS_CONST() { + }, + CastIterable_CastIterable(source, $S, $T) { + if (type$.EfficientLengthIterable_dynamic._is(source)) + return new A._EfficientLengthCastIterable(source, $S._eval$1("@<0>")._bind$1($T)._eval$1("_EfficientLengthCastIterable<1,2>")); + return new A.CastIterable(source, $S._eval$1("@<0>")._bind$1($T)._eval$1("CastIterable<1,2>")); + }, + LateError$fieldADI(fieldName) { + return new A.LateError("Field '" + fieldName + "' has been assigned during initialization."); + }, + LateError$fieldNI(fieldName) { + return new A.LateError("Field '" + fieldName + "' has not been initialized."); + }, + LateError$fieldAI(fieldName) { + return new A.LateError("Field '" + fieldName + "' has already been initialized."); + }, + hexDigitValue(char) { + var letter, + digit = char ^ 48; + if (digit <= 9) + return digit; + letter = char | 32; + if (97 <= letter && letter <= 102) + return letter - 87; + return -1; + }, + SystemHash_combine(hash, value) { + hash = hash + value & 536870911; + hash = hash + ((hash & 524287) << 10) & 536870911; + return hash ^ hash >>> 6; + }, + SystemHash_finish(hash) { + hash = hash + ((hash & 67108863) << 3) & 536870911; + hash ^= hash >>> 11; + return hash + ((hash & 16383) << 15) & 536870911; + }, + checkNotNullable(value, $name, $T) { + return value; + }, + isToStringVisiting(object) { + var t1, i; + for (t1 = $.toStringVisiting.length, i = 0; i < t1; ++i) + if (object === $.toStringVisiting[i]) + return true; + return false; + }, + SubListIterable$(_iterable, _start, _endOrLength, $E) { + A.RangeError_checkNotNegative(_start, "start"); + if (_endOrLength != null) { + A.RangeError_checkNotNegative(_endOrLength, "end"); + if (_start > _endOrLength) + A.throwExpression(A.RangeError$range(_start, 0, _endOrLength, "start", null)); + } + return new A.SubListIterable(_iterable, _start, _endOrLength, $E._eval$1("SubListIterable<0>")); + }, + MappedIterable_MappedIterable(iterable, $function, $S, $T) { + if (type$.EfficientLengthIterable_dynamic._is(iterable)) + return new A.EfficientLengthMappedIterable(iterable, $function, $S._eval$1("@<0>")._bind$1($T)._eval$1("EfficientLengthMappedIterable<1,2>")); + return new A.MappedIterable(iterable, $function, $S._eval$1("@<0>")._bind$1($T)._eval$1("MappedIterable<1,2>")); + }, + TakeIterable_TakeIterable(iterable, takeCount, $E) { + var _s9_ = "takeCount"; + A.ArgumentError_checkNotNull(takeCount, _s9_, type$.int); + A.RangeError_checkNotNegative(takeCount, _s9_); + if (type$.EfficientLengthIterable_dynamic._is(iterable)) + return new A.EfficientLengthTakeIterable(iterable, takeCount, $E._eval$1("EfficientLengthTakeIterable<0>")); + return new A.TakeIterable(iterable, takeCount, $E._eval$1("TakeIterable<0>")); + }, + SkipIterable_SkipIterable(iterable, count, $E) { + var _s5_ = "count"; + if (type$.EfficientLengthIterable_dynamic._is(iterable)) { + A.ArgumentError_checkNotNull(count, _s5_, type$.int); + A.RangeError_checkNotNegative(count, _s5_); + return new A.EfficientLengthSkipIterable(iterable, count, $E._eval$1("EfficientLengthSkipIterable<0>")); + } + A.ArgumentError_checkNotNull(count, _s5_, type$.int); + A.RangeError_checkNotNegative(count, _s5_); + return new A.SkipIterable(iterable, count, $E._eval$1("SkipIterable<0>")); + }, + IndexedIterable_IndexedIterable(source, start, $T) { + return new A.EfficientLengthIndexedIterable(source, start, $T._eval$1("EfficientLengthIndexedIterable<0>")); + }, + IterableElementError_noElement() { + return new A.StateError("No element"); + }, + IterableElementError_tooFew() { + return new A.StateError("Too few elements"); + }, + _CastIterableBase: function _CastIterableBase() { + }, + CastIterator: function CastIterator(t0, t1) { + this._source = t0; + this.$ti = t1; + }, + CastIterable: function CastIterable(t0, t1) { + this._source = t0; + this.$ti = t1; + }, + _EfficientLengthCastIterable: function _EfficientLengthCastIterable(t0, t1) { + this._source = t0; + this.$ti = t1; + }, + _CastListBase: function _CastListBase() { + }, + CastList: function CastList(t0, t1) { + this._source = t0; + this.$ti = t1; + }, + LateError: function LateError(t0) { + this.__internal$_message = t0; + }, + CodeUnits: function CodeUnits(t0) { + this._string = t0; + }, + nullFuture_closure: function nullFuture_closure() { + }, + SentinelValue: function SentinelValue() { + }, + EfficientLengthIterable: function EfficientLengthIterable() { + }, + ListIterable: function ListIterable() { + }, + SubListIterable: function SubListIterable(t0, t1, t2, t3) { + var _ = this; + _.__internal$_iterable = t0; + _._start = t1; + _._endOrLength = t2; + _.$ti = t3; + }, + ListIterator: function ListIterator(t0, t1, t2) { + var _ = this; + _.__internal$_iterable = t0; + _.__internal$_length = t1; + _.__internal$_index = 0; + _.__internal$_current = null; + _.$ti = t2; + }, + MappedIterable: function MappedIterable(t0, t1, t2) { + this.__internal$_iterable = t0; + this._f = t1; + this.$ti = t2; + }, + EfficientLengthMappedIterable: function EfficientLengthMappedIterable(t0, t1, t2) { + this.__internal$_iterable = t0; + this._f = t1; + this.$ti = t2; + }, + MappedIterator: function MappedIterator(t0, t1, t2) { + var _ = this; + _.__internal$_current = null; + _._iterator = t0; + _._f = t1; + _.$ti = t2; + }, + MappedListIterable: function MappedListIterable(t0, t1, t2) { + this._source = t0; + this._f = t1; + this.$ti = t2; + }, + WhereIterable: function WhereIterable(t0, t1, t2) { + this.__internal$_iterable = t0; + this._f = t1; + this.$ti = t2; + }, + WhereIterator: function WhereIterator(t0, t1, t2) { + this._iterator = t0; + this._f = t1; + this.$ti = t2; + }, + ExpandIterable: function ExpandIterable(t0, t1, t2) { + this.__internal$_iterable = t0; + this._f = t1; + this.$ti = t2; + }, + ExpandIterator: function ExpandIterator(t0, t1, t2, t3) { + var _ = this; + _._iterator = t0; + _._f = t1; + _._currentExpansion = t2; + _.__internal$_current = null; + _.$ti = t3; + }, + TakeIterable: function TakeIterable(t0, t1, t2) { + this.__internal$_iterable = t0; + this._takeCount = t1; + this.$ti = t2; + }, + EfficientLengthTakeIterable: function EfficientLengthTakeIterable(t0, t1, t2) { + this.__internal$_iterable = t0; + this._takeCount = t1; + this.$ti = t2; + }, + TakeIterator: function TakeIterator(t0, t1, t2) { + this._iterator = t0; + this._remaining = t1; + this.$ti = t2; + }, + SkipIterable: function SkipIterable(t0, t1, t2) { + this.__internal$_iterable = t0; + this._skipCount = t1; + this.$ti = t2; + }, + EfficientLengthSkipIterable: function EfficientLengthSkipIterable(t0, t1, t2) { + this.__internal$_iterable = t0; + this._skipCount = t1; + this.$ti = t2; + }, + SkipIterator: function SkipIterator(t0, t1, t2) { + this._iterator = t0; + this._skipCount = t1; + this.$ti = t2; + }, + SkipWhileIterable: function SkipWhileIterable(t0, t1, t2) { + this.__internal$_iterable = t0; + this._f = t1; + this.$ti = t2; + }, + SkipWhileIterator: function SkipWhileIterator(t0, t1, t2) { + var _ = this; + _._iterator = t0; + _._f = t1; + _._hasSkipped = false; + _.$ti = t2; + }, + EmptyIterable: function EmptyIterable(t0) { + this.$ti = t0; + }, + EmptyIterator: function EmptyIterator(t0) { + this.$ti = t0; + }, + WhereTypeIterable: function WhereTypeIterable(t0, t1) { + this._source = t0; + this.$ti = t1; + }, + WhereTypeIterator: function WhereTypeIterator(t0, t1) { + this._source = t0; + this.$ti = t1; + }, + IndexedIterable: function IndexedIterable(t0, t1, t2) { + this._source = t0; + this._start = t1; + this.$ti = t2; + }, + EfficientLengthIndexedIterable: function EfficientLengthIndexedIterable(t0, t1, t2) { + this._source = t0; + this._start = t1; + this.$ti = t2; + }, + IndexedIterator: function IndexedIterator(t0, t1, t2) { + var _ = this; + _._source = t0; + _._start = t1; + _.__internal$_index = -1; + _.$ti = t2; + }, + FixedLengthListMixin: function FixedLengthListMixin() { + }, + UnmodifiableListMixin: function UnmodifiableListMixin() { + }, + UnmodifiableListBase: function UnmodifiableListBase() { + }, + ReversedListIterable: function ReversedListIterable(t0, t1) { + this._source = t0; + this.$ti = t1; + }, + Symbol: function Symbol(t0) { + this.__internal$_name = t0; + }, + __CastListBase__CastIterableBase_ListMixin: function __CastListBase__CastIterableBase_ListMixin() { + }, + unminifyOrTag(rawClassName) { + var preserved = init.mangledGlobalNames[rawClassName]; + if (preserved != null) + return preserved; + return rawClassName; + }, + isJsIndexable(object, record) { + var result; + if (record != null) { + result = record.x; + if (result != null) + return result; + } + return type$.JavaScriptIndexingBehavior_dynamic._is(object); + }, + S(value) { + var result; + if (typeof value == "string") + return value; + if (typeof value == "number") { + if (value !== 0) + return "" + value; + } else if (true === value) + return "true"; + else if (false === value) + return "false"; + else if (value == null) + return "null"; + result = J.toString$0$(value); + return result; + }, + Primitives_objectHashCode(object) { + var hash, + property = $.Primitives__identityHashCodeProperty; + if (property == null) + property = $.Primitives__identityHashCodeProperty = Symbol("identityHashCode"); + hash = object[property]; + if (hash == null) { + hash = Math.random() * 0x3fffffff | 0; + object[property] = hash; + } + return hash; + }, + Primitives_parseInt(source, radix) { + var decimalMatch, maxCharCode, digitsPart, t1, i, _null = null, + match = /^\s*[+-]?((0x[a-f0-9]+)|(\d+)|([a-z0-9]+))\s*$/i.exec(source); + if (match == null) + return _null; + if (3 >= match.length) + return A.ioore(match, 3); + decimalMatch = match[3]; + if (radix == null) { + if (decimalMatch != null) + return parseInt(source, 10); + if (match[2] != null) + return parseInt(source, 16); + return _null; + } + if (radix < 2 || radix > 36) + throw A.wrapException(A.RangeError$range(radix, 2, 36, "radix", _null)); + if (radix === 10 && decimalMatch != null) + return parseInt(source, 10); + if (radix < 10 || decimalMatch == null) { + maxCharCode = radix <= 10 ? 47 + radix : 86 + radix; + digitsPart = match[1]; + for (t1 = digitsPart.length, i = 0; i < t1; ++i) + if ((digitsPart.charCodeAt(i) | 32) > maxCharCode) + return _null; + } + return parseInt(source, radix); + }, + Primitives_objectTypeName(object) { + var interceptor, dispatchName, $constructor, constructorName; + if (object instanceof A.Object) + return A._rtiToString(A.instanceType(object), null); + interceptor = J.getInterceptor$(object); + if (interceptor === B.Interceptor_methods || interceptor === B.JavaScriptObject_methods || type$.UnknownJavaScriptObject._is(object)) { + dispatchName = B.C_JS_CONST(object); + if (dispatchName !== "Object" && dispatchName !== "") + return dispatchName; + $constructor = object.constructor; + if (typeof $constructor == "function") { + constructorName = $constructor.name; + if (typeof constructorName == "string" && constructorName !== "Object" && constructorName !== "") + return constructorName; + } + } + return A._rtiToString(A.instanceType(object), null); + }, + Primitives_safeToString(object) { + var hooks, i, hookResult; + if (object == null || typeof object == "number" || A._isBool(object)) + return J.toString$0$(object); + if (typeof object == "string") + return JSON.stringify(object); + if (object instanceof A.Closure) + return object.toString$0(0); + if (object instanceof A._Record) + return object._toString$1(true); + hooks = $.$get$_safeToStringHooks(); + for (i = 0; i < 1; ++i) { + hookResult = hooks[i].tryFormat$1(object); + if (hookResult != null) + return hookResult; + } + return "Instance of '" + A.Primitives_objectTypeName(object) + "'"; + }, + Primitives_currentUri() { + if (!!self.location) + return self.location.href; + return null; + }, + Primitives__fromCharCodeApply(array) { + var result, i, i0, chunkEnd, + end = array.length; + if (end <= 500) + return String.fromCharCode.apply(null, array); + for (result = "", i = 0; i < end; i = i0) { + i0 = i + 500; + chunkEnd = i0 < end ? i0 : end; + result += String.fromCharCode.apply(null, array.slice(i, chunkEnd)); + } + return result; + }, + Primitives_stringFromCodePoints(codePoints) { + var t1, _i, i, + a = A._setArrayType([], type$.JSArray_int); + for (t1 = codePoints.length, _i = 0; _i < codePoints.length; codePoints.length === t1 || (0, A.throwConcurrentModificationError)(codePoints), ++_i) { + i = codePoints[_i]; + if (!A._isInt(i)) + throw A.wrapException(A.argumentErrorValue(i)); + if (i <= 65535) + B.JSArray_methods.add$1(a, i); + else if (i <= 1114111) { + B.JSArray_methods.add$1(a, 55296 + (B.JSInt_methods._shrOtherPositive$1(i - 65536, 10) & 1023)); + B.JSArray_methods.add$1(a, 56320 + (i & 1023)); + } else + throw A.wrapException(A.argumentErrorValue(i)); + } + return A.Primitives__fromCharCodeApply(a); + }, + Primitives_stringFromCharCodes(charCodes) { + var t1, _i, i; + for (t1 = charCodes.length, _i = 0; _i < t1; ++_i) { + i = charCodes[_i]; + if (!A._isInt(i)) + throw A.wrapException(A.argumentErrorValue(i)); + if (i < 0) + throw A.wrapException(A.argumentErrorValue(i)); + if (i > 65535) + return A.Primitives_stringFromCodePoints(charCodes); + } + return A.Primitives__fromCharCodeApply(charCodes); + }, + Primitives_stringFromNativeUint8List(charCodes, start, end) { + var i, result, i0, chunkEnd; + if (end <= 500 && start === 0 && end === charCodes.length) + return String.fromCharCode.apply(null, charCodes); + for (i = start, result = ""; i < end; i = i0) { + i0 = i + 500; + chunkEnd = i0 < end ? i0 : end; + result += String.fromCharCode.apply(null, charCodes.subarray(i, chunkEnd)); + } + return result; + }, + Primitives_stringFromCharCode(charCode) { + var bits; + if (0 <= charCode) { + if (charCode <= 65535) + return String.fromCharCode(charCode); + if (charCode <= 1114111) { + bits = charCode - 65536; + return String.fromCharCode((B.JSInt_methods._shrOtherPositive$1(bits, 10) | 55296) >>> 0, bits & 1023 | 56320); + } + } + throw A.wrapException(A.RangeError$range(charCode, 0, 1114111, null, null)); + }, + Primitives_lazyAsJsDate(receiver) { + if (receiver.date === void 0) + receiver.date = new Date(receiver._core$_value); + return receiver.date; + }, + Primitives_getYear(receiver) { + return receiver.isUtc ? A.Primitives_lazyAsJsDate(receiver).getUTCFullYear() + 0 : A.Primitives_lazyAsJsDate(receiver).getFullYear() + 0; + }, + Primitives_getMonth(receiver) { + return receiver.isUtc ? A.Primitives_lazyAsJsDate(receiver).getUTCMonth() + 1 : A.Primitives_lazyAsJsDate(receiver).getMonth() + 1; + }, + Primitives_getDay(receiver) { + return receiver.isUtc ? A.Primitives_lazyAsJsDate(receiver).getUTCDate() + 0 : A.Primitives_lazyAsJsDate(receiver).getDate() + 0; + }, + Primitives_getHours(receiver) { + return receiver.isUtc ? A.Primitives_lazyAsJsDate(receiver).getUTCHours() + 0 : A.Primitives_lazyAsJsDate(receiver).getHours() + 0; + }, + Primitives_getMinutes(receiver) { + return receiver.isUtc ? A.Primitives_lazyAsJsDate(receiver).getUTCMinutes() + 0 : A.Primitives_lazyAsJsDate(receiver).getMinutes() + 0; + }, + Primitives_getSeconds(receiver) { + return receiver.isUtc ? A.Primitives_lazyAsJsDate(receiver).getUTCSeconds() + 0 : A.Primitives_lazyAsJsDate(receiver).getSeconds() + 0; + }, + Primitives_getMilliseconds(receiver) { + return receiver.isUtc ? A.Primitives_lazyAsJsDate(receiver).getUTCMilliseconds() + 0 : A.Primitives_lazyAsJsDate(receiver).getMilliseconds() + 0; + }, + Primitives_getWeekday(receiver) { + return B.JSInt_methods.$mod((receiver.isUtc ? A.Primitives_lazyAsJsDate(receiver).getUTCDay() + 0 : A.Primitives_lazyAsJsDate(receiver).getDay() + 0) + 6, 7) + 1; + }, + Primitives_extractStackTrace(error) { + var jsError = error.$thrownJsError; + if (jsError == null) + return null; + return A.getTraceFromException(jsError); + }, + Primitives_trySetStackTrace(error, stackTrace) { + var jsError; + if (error.$thrownJsError == null) { + jsError = new Error(); + A.initializeExceptionWrapper(error, jsError); + error.$thrownJsError = jsError; + jsError.stack = stackTrace.toString$0(0); + } + }, + iae(argument) { + throw A.wrapException(A.argumentErrorValue(argument)); + }, + ioore(receiver, index) { + if (receiver == null) + J.get$length$asx(receiver); + throw A.wrapException(A.diagnoseIndexError(receiver, index)); + }, + diagnoseIndexError(indexable, index) { + var $length, _s5_ = "index"; + if (!A._isInt(index)) + return new A.ArgumentError(true, index, _s5_, null); + $length = A._asInt(J.get$length$asx(indexable)); + if (index < 0 || index >= $length) + return A.IndexError$withLength(index, $length, indexable, null, _s5_); + return A.RangeError$value(index, _s5_); + }, + diagnoseRangeError(start, end, $length) { + if (start > $length) + return A.RangeError$range(start, 0, $length, "start", null); + if (end != null) + if (end < start || end > $length) + return A.RangeError$range(end, start, $length, "end", null); + return new A.ArgumentError(true, end, "end", null); + }, + argumentErrorValue(object) { + return new A.ArgumentError(true, object, null, null); + }, + wrapException(ex) { + return A.initializeExceptionWrapper(ex, new Error()); + }, + initializeExceptionWrapper(ex, wrapper) { + var t1; + if (ex == null) + ex = new A.TypeError(); + wrapper.dartException = ex; + t1 = A.toStringWrapper; + if ("defineProperty" in Object) { + Object.defineProperty(wrapper, "message", {get: t1}); + wrapper.name = ""; + } else + wrapper.toString = t1; + return wrapper; + }, + toStringWrapper() { + return J.toString$0$(this.dartException); + }, + throwExpression(ex, wrapper) { + throw A.initializeExceptionWrapper(ex, wrapper == null ? new Error() : wrapper); + }, + throwUnsupportedOperation(o, operation, verb) { + var wrapper; + if (operation == null) + operation = 0; + if (verb == null) + verb = 0; + wrapper = Error(); + A.throwExpression(A._diagnoseUnsupportedOperation(o, operation, verb), wrapper); + }, + _diagnoseUnsupportedOperation(o, encodedOperation, encodedVerb) { + var operation, table, tableLength, index, verb, object, flags, article, adjective; + if (typeof encodedOperation == "string") + operation = encodedOperation; + else { + table = "[]=;add;removeWhere;retainWhere;removeRange;setRange;setInt8;setInt16;setInt32;setUint8;setUint16;setUint32;setFloat32;setFloat64".split(";"); + tableLength = table.length; + index = encodedOperation; + if (index > tableLength) { + encodedVerb = index / tableLength | 0; + index %= tableLength; + } + operation = table[index]; + } + verb = typeof encodedVerb == "string" ? encodedVerb : "modify;remove from;add to".split(";")[encodedVerb]; + object = type$.List_dynamic._is(o) ? "list" : "ByteData"; + flags = o.$flags | 0; + article = "a "; + if ((flags & 4) !== 0) + adjective = "constant "; + else if ((flags & 2) !== 0) { + adjective = "unmodifiable "; + article = "an "; + } else + adjective = (flags & 1) !== 0 ? "fixed-length " : ""; + return new A.UnsupportedError("'" + operation + "': Cannot " + verb + " " + article + adjective + object); + }, + throwConcurrentModificationError(collection) { + throw A.wrapException(A.ConcurrentModificationError$(collection)); + }, + TypeErrorDecoder_extractPattern(message) { + var match, $arguments, argumentsExpr, expr, method, receiver; + message = A.quoteStringForRegExp(message.replace(String({}), "$receiver$")); + match = message.match(/\\\$[a-zA-Z]+\\\$/g); + if (match == null) + match = A._setArrayType([], type$.JSArray_String); + $arguments = match.indexOf("\\$arguments\\$"); + argumentsExpr = match.indexOf("\\$argumentsExpr\\$"); + expr = match.indexOf("\\$expr\\$"); + method = match.indexOf("\\$method\\$"); + receiver = match.indexOf("\\$receiver\\$"); + return new A.TypeErrorDecoder(message.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])*)"), $arguments, argumentsExpr, expr, method, receiver); + }, + TypeErrorDecoder_provokeCallErrorOn(expression) { + return function($expr$) { + var $argumentsExpr$ = "$arguments$"; + try { + $expr$.$method$($argumentsExpr$); + } catch (e) { + return e.message; + } + }(expression); + }, + TypeErrorDecoder_provokePropertyErrorOn(expression) { + return function($expr$) { + try { + $expr$.$method$; + } catch (e) { + return e.message; + } + }(expression); + }, + JsNoSuchMethodError$(_message, match) { + var t1 = match == null, + t2 = t1 ? null : match.method; + return new A.JsNoSuchMethodError(_message, t2, t1 ? null : match.receiver); + }, + unwrapException(ex) { + var t1; + if (ex == null) + return new A.NullThrownFromJavaScriptException(ex); + if (ex instanceof A.ExceptionAndStackTrace) { + t1 = ex.dartException; + return A.saveStackTrace(ex, t1 == null ? A._asObject(t1) : t1); + } + if (typeof ex !== "object") + return ex; + if ("dartException" in ex) + return A.saveStackTrace(ex, ex.dartException); + return A._unwrapNonDartException(ex); + }, + saveStackTrace(ex, error) { + if (type$.Error._is(error)) + if (error.$thrownJsError == null) + error.$thrownJsError = ex; + return error; + }, + _unwrapNonDartException(ex) { + var message, number, ieErrorCode, nsme, notClosure, nullCall, nullLiteralCall, undefCall, undefLiteralCall, nullProperty, undefProperty, undefLiteralProperty, match; + if (!("message" in ex)) + return ex; + message = ex.message; + if ("number" in ex && typeof ex.number == "number") { + number = ex.number; + ieErrorCode = number & 65535; + if ((B.JSInt_methods._shrOtherPositive$1(number, 16) & 8191) === 10) + switch (ieErrorCode) { + case 438: + return A.saveStackTrace(ex, A.JsNoSuchMethodError$(A.S(message) + " (Error " + ieErrorCode + ")", null)); + case 445: + case 5007: + A.S(message); + return A.saveStackTrace(ex, new A.NullError()); + } + } + if (ex instanceof TypeError) { + nsme = $.$get$TypeErrorDecoder_noSuchMethodPattern(); + notClosure = $.$get$TypeErrorDecoder_notClosurePattern(); + nullCall = $.$get$TypeErrorDecoder_nullCallPattern(); + nullLiteralCall = $.$get$TypeErrorDecoder_nullLiteralCallPattern(); + undefCall = $.$get$TypeErrorDecoder_undefinedCallPattern(); + undefLiteralCall = $.$get$TypeErrorDecoder_undefinedLiteralCallPattern(); + nullProperty = $.$get$TypeErrorDecoder_nullPropertyPattern(); + $.$get$TypeErrorDecoder_nullLiteralPropertyPattern(); + undefProperty = $.$get$TypeErrorDecoder_undefinedPropertyPattern(); + undefLiteralProperty = $.$get$TypeErrorDecoder_undefinedLiteralPropertyPattern(); + match = nsme.matchTypeError$1(message); + if (match != null) + return A.saveStackTrace(ex, A.JsNoSuchMethodError$(A._asString(message), match)); + else { + match = notClosure.matchTypeError$1(message); + if (match != null) { + match.method = "call"; + return A.saveStackTrace(ex, A.JsNoSuchMethodError$(A._asString(message), match)); + } else if (nullCall.matchTypeError$1(message) != null || nullLiteralCall.matchTypeError$1(message) != null || undefCall.matchTypeError$1(message) != null || undefLiteralCall.matchTypeError$1(message) != null || nullProperty.matchTypeError$1(message) != null || nullLiteralCall.matchTypeError$1(message) != null || undefProperty.matchTypeError$1(message) != null || undefLiteralProperty.matchTypeError$1(message) != null) { + A._asString(message); + return A.saveStackTrace(ex, new A.NullError()); + } + } + return A.saveStackTrace(ex, new A.UnknownJsTypeError(typeof message == "string" ? message : "")); + } + if (ex instanceof RangeError) { + if (typeof message == "string" && message.indexOf("call stack") !== -1) + return new A.StackOverflowError(); + message = function(ex) { + try { + return String(ex); + } catch (e) { + } + return null; + }(ex); + return A.saveStackTrace(ex, new A.ArgumentError(false, null, null, typeof message == "string" ? message.replace(/^RangeError:\s*/, "") : message)); + } + if (typeof InternalError == "function" && ex instanceof InternalError) + if (typeof message == "string" && message === "too much recursion") + return new A.StackOverflowError(); + return ex; + }, + getTraceFromException(exception) { + var trace; + if (exception instanceof A.ExceptionAndStackTrace) + return exception.stackTrace; + if (exception == null) + return new A._StackTrace(exception); + trace = exception.$cachedTrace; + if (trace != null) + return trace; + trace = new A._StackTrace(exception); + if (typeof exception === "object") + exception.$cachedTrace = trace; + return trace; + }, + objectHashCode(object) { + if (object == null) + return J.get$hashCode$(object); + if (typeof object == "object") + return A.Primitives_objectHashCode(object); + return J.get$hashCode$(object); + }, + fillLiteralMap(keyValuePairs, result) { + var index, index0, index1, + $length = keyValuePairs.length; + for (index = 0; index < $length; index = index1) { + index0 = index + 1; + index1 = index0 + 1; + result.$indexSet(0, keyValuePairs[index], keyValuePairs[index0]); + } + return result; + }, + _invokeClosure(closure, numberOfArguments, arg1, arg2, arg3, arg4) { + type$.Function._as(closure); + switch (A._asInt(numberOfArguments)) { + case 0: + return closure.call$0(); + case 1: + return closure.call$1(arg1); + case 2: + return closure.call$2(arg1, arg2); + case 3: + return closure.call$3(arg1, arg2, arg3); + case 4: + return closure.call$4(arg1, arg2, arg3, arg4); + } + throw A.wrapException(A.Exception_Exception("Unsupported number of arguments for wrapped closure")); + }, + convertDartClosureToJS(closure, arity) { + var $function; + if (closure == null) + return null; + $function = closure.$identity; + if (!!$function) + return $function; + $function = A.convertDartClosureToJSUncached(closure, arity); + closure.$identity = $function; + return $function; + }, + convertDartClosureToJSUncached(closure, arity) { + var entry; + switch (arity) { + case 0: + entry = closure.call$0; + break; + case 1: + entry = closure.call$1; + break; + case 2: + entry = closure.call$2; + break; + case 3: + entry = closure.call$3; + break; + case 4: + entry = closure.call$4; + break; + default: + entry = null; + } + if (entry != null) + return entry.bind(closure); + return function(closure, arity, invoke) { + return function(a1, a2, a3, a4) { + return invoke(closure, arity, a1, a2, a3, a4); + }; + }(closure, arity, A._invokeClosure); + }, + Closure_fromTearOff(parameters) { + var $prototype, $constructor, t2, trampoline, applyTrampoline, i, stub, stub0, stubName, stubCallName, + container = parameters.co, + isStatic = parameters.iS, + isIntercepted = parameters.iI, + needsDirectAccess = parameters.nDA, + applyTrampolineIndex = parameters.aI, + funsOrNames = parameters.fs, + callNames = parameters.cs, + $name = funsOrNames[0], + callName = callNames[0], + $function = container[$name], + t1 = parameters.fT; + t1.toString; + $prototype = isStatic ? Object.create(new A.StaticClosure().constructor.prototype) : Object.create(new A.BoundClosure(null, null).constructor.prototype); + $prototype.$initialize = $prototype.constructor; + $constructor = isStatic ? function static_tear_off() { + this.$initialize(); + } : function tear_off(a, b) { + this.$initialize(a, b); + }; + $prototype.constructor = $constructor; + $constructor.prototype = $prototype; + $prototype.$_name = $name; + $prototype.$_target = $function; + t2 = !isStatic; + if (t2) + trampoline = A.Closure_forwardCallTo($name, $function, isIntercepted, needsDirectAccess); + else { + $prototype.$static_name = $name; + trampoline = $function; + } + $prototype.$signature = A.Closure__computeSignatureFunction(t1, isStatic, isIntercepted); + $prototype[callName] = trampoline; + for (applyTrampoline = trampoline, i = 1; i < funsOrNames.length; ++i) { + stub = funsOrNames[i]; + if (typeof stub == "string") { + stub0 = container[stub]; + stubName = stub; + stub = stub0; + } else + stubName = ""; + stubCallName = callNames[i]; + if (stubCallName != null) { + if (t2) + stub = A.Closure_forwardCallTo(stubName, stub, isIntercepted, needsDirectAccess); + $prototype[stubCallName] = stub; + } + if (i === applyTrampolineIndex) + applyTrampoline = stub; + } + $prototype["call*"] = applyTrampoline; + $prototype.$requiredArgCount = parameters.rC; + $prototype.$defaultValues = parameters.dV; + return $constructor; + }, + Closure__computeSignatureFunction(functionType, isStatic, isIntercepted) { + if (typeof functionType == "number") + return functionType; + if (typeof functionType == "string") { + if (isStatic) + throw A.wrapException("Cannot compute signature for static tearoff."); + return function(recipe, evalOnReceiver) { + return function() { + return evalOnReceiver(this, recipe); + }; + }(functionType, A.BoundClosure_evalRecipe); + } + throw A.wrapException("Error in functionType of tearoff"); + }, + Closure_cspForwardCall(arity, needsDirectAccess, stubName, $function) { + var getReceiver = A.BoundClosure_receiverOf; + switch (needsDirectAccess ? -1 : arity) { + case 0: + return function(entry, receiverOf) { + return function() { + return receiverOf(this)[entry](); + }; + }(stubName, getReceiver); + case 1: + return function(entry, receiverOf) { + return function(a) { + return receiverOf(this)[entry](a); + }; + }(stubName, getReceiver); + case 2: + return function(entry, receiverOf) { + return function(a, b) { + return receiverOf(this)[entry](a, b); + }; + }(stubName, getReceiver); + case 3: + return function(entry, receiverOf) { + return function(a, b, c) { + return receiverOf(this)[entry](a, b, c); + }; + }(stubName, getReceiver); + case 4: + return function(entry, receiverOf) { + return function(a, b, c, d) { + return receiverOf(this)[entry](a, b, c, d); + }; + }(stubName, getReceiver); + case 5: + return function(entry, receiverOf) { + return function(a, b, c, d, e) { + return receiverOf(this)[entry](a, b, c, d, e); + }; + }(stubName, getReceiver); + default: + return function(f, receiverOf) { + return function() { + return f.apply(receiverOf(this), arguments); + }; + }($function, getReceiver); + } + }, + Closure_forwardCallTo(stubName, $function, isIntercepted, needsDirectAccess) { + if (isIntercepted) + return A.Closure_forwardInterceptedCallTo(stubName, $function, needsDirectAccess); + return A.Closure_cspForwardCall($function.length, needsDirectAccess, stubName, $function); + }, + Closure_cspForwardInterceptedCall(arity, needsDirectAccess, stubName, $function) { + var getReceiver = A.BoundClosure_receiverOf, + getInterceptor = A.BoundClosure_interceptorOf; + switch (needsDirectAccess ? -1 : arity) { + case 0: + throw A.wrapException(new A.RuntimeError("Intercepted function with no arguments.")); + case 1: + return function(entry, interceptorOf, receiverOf) { + return function() { + return interceptorOf(this)[entry](receiverOf(this)); + }; + }(stubName, getInterceptor, getReceiver); + case 2: + return function(entry, interceptorOf, receiverOf) { + return function(a) { + return interceptorOf(this)[entry](receiverOf(this), a); + }; + }(stubName, getInterceptor, getReceiver); + case 3: + return function(entry, interceptorOf, receiverOf) { + return function(a, b) { + return interceptorOf(this)[entry](receiverOf(this), a, b); + }; + }(stubName, getInterceptor, getReceiver); + case 4: + return function(entry, interceptorOf, receiverOf) { + return function(a, b, c) { + return interceptorOf(this)[entry](receiverOf(this), a, b, c); + }; + }(stubName, getInterceptor, getReceiver); + case 5: + return function(entry, interceptorOf, receiverOf) { + return function(a, b, c, d) { + return interceptorOf(this)[entry](receiverOf(this), a, b, c, d); + }; + }(stubName, getInterceptor, getReceiver); + case 6: + return function(entry, interceptorOf, receiverOf) { + return function(a, b, c, d, e) { + return interceptorOf(this)[entry](receiverOf(this), a, b, c, d, e); + }; + }(stubName, getInterceptor, getReceiver); + default: + return function(f, interceptorOf, receiverOf) { + return function() { + var a = [receiverOf(this)]; + Array.prototype.push.apply(a, arguments); + return f.apply(interceptorOf(this), a); + }; + }($function, getInterceptor, getReceiver); + } + }, + Closure_forwardInterceptedCallTo(stubName, $function, needsDirectAccess) { + var arity, t1; + if ($.BoundClosure__interceptorFieldNameCache == null) + $.BoundClosure__interceptorFieldNameCache = A.BoundClosure__computeFieldNamed("interceptor"); + if ($.BoundClosure__receiverFieldNameCache == null) + $.BoundClosure__receiverFieldNameCache = A.BoundClosure__computeFieldNamed("receiver"); + arity = $function.length; + t1 = A.Closure_cspForwardInterceptedCall(arity, needsDirectAccess, stubName, $function); + return t1; + }, + closureFromTearOff(parameters) { + return A.Closure_fromTearOff(parameters); + }, + BoundClosure_evalRecipe(closure, recipe) { + return A._Universe_evalInEnvironment(init.typeUniverse, A.instanceType(closure._receiver), recipe); + }, + BoundClosure_receiverOf(closure) { + return closure._receiver; + }, + BoundClosure_interceptorOf(closure) { + return closure._interceptor; + }, + BoundClosure__computeFieldNamed(fieldName) { + var names, i, $name, + template = new A.BoundClosure("receiver", "interceptor"), + t1 = Object.getOwnPropertyNames(template); + t1.$flags = 1; + names = t1; + for (t1 = names.length, i = 0; i < t1; ++i) { + $name = names[i]; + if (template[$name] === fieldName) + return $name; + } + throw A.wrapException(A.ArgumentError$("Field name " + fieldName + " not found.", null)); + }, + getIsolateAffinityTag($name) { + return init.getIsolateTag($name); + }, + wrapZoneUnaryCallback(callback, $T) { + var t1 = $.Zone__current; + if (t1 === B.C__RootZone) + return callback; + return t1.bindUnaryCallbackGuarded$1$1(callback, $T); + }, + defineProperty(obj, property, value) { + Object.defineProperty(obj, property, {value: value, enumerable: false, writable: true, configurable: true}); + }, + lookupAndCacheInterceptor(obj) { + var interceptor, interceptorClass, altTag, mark, t1, + tag = A._asString($.getTagFunction.call$1(obj)), + record = $.dispatchRecordsForInstanceTags[tag]; + if (record != null) { + Object.defineProperty(obj, init.dispatchPropertyName, {value: record, enumerable: false, writable: true, configurable: true}); + return record.i; + } + interceptor = $.interceptorsForUncacheableTags[tag]; + if (interceptor != null) + return interceptor; + interceptorClass = init.interceptorsByTag[tag]; + if (interceptorClass == null) { + altTag = A._asStringQ($.alternateTagFunction.call$2(obj, tag)); + if (altTag != null) { + record = $.dispatchRecordsForInstanceTags[altTag]; + if (record != null) { + Object.defineProperty(obj, init.dispatchPropertyName, {value: record, enumerable: false, writable: true, configurable: true}); + return record.i; + } + interceptor = $.interceptorsForUncacheableTags[altTag]; + if (interceptor != null) + return interceptor; + interceptorClass = init.interceptorsByTag[altTag]; + tag = altTag; + } + } + if (interceptorClass == null) + return null; + interceptor = interceptorClass.prototype; + mark = tag[0]; + if (mark === "!") { + record = A.makeLeafDispatchRecord(interceptor); + $.dispatchRecordsForInstanceTags[tag] = record; + Object.defineProperty(obj, init.dispatchPropertyName, {value: record, enumerable: false, writable: true, configurable: true}); + return record.i; + } + if (mark === "~") { + $.interceptorsForUncacheableTags[tag] = interceptor; + return interceptor; + } + if (mark === "-") { + t1 = A.makeLeafDispatchRecord(interceptor); + Object.defineProperty(Object.getPrototypeOf(obj), init.dispatchPropertyName, {value: t1, enumerable: false, writable: true, configurable: true}); + return t1.i; + } + if (mark === "+") + return A.patchInteriorProto(obj, interceptor); + if (mark === "*") + throw A.wrapException(A.UnimplementedError$(tag)); + if (init.leafTags[tag] === true) { + t1 = A.makeLeafDispatchRecord(interceptor); + Object.defineProperty(Object.getPrototypeOf(obj), init.dispatchPropertyName, {value: t1, enumerable: false, writable: true, configurable: true}); + return t1.i; + } else + return A.patchInteriorProto(obj, interceptor); + }, + patchInteriorProto(obj, interceptor) { + var proto = Object.getPrototypeOf(obj); + Object.defineProperty(proto, init.dispatchPropertyName, {value: J.makeDispatchRecord(interceptor, proto, null, null), enumerable: false, writable: true, configurable: true}); + return interceptor; + }, + makeLeafDispatchRecord(interceptor) { + return J.makeDispatchRecord(interceptor, false, null, !!interceptor.$isJavaScriptIndexingBehavior); + }, + makeDefaultDispatchRecord(tag, interceptorClass, proto) { + var interceptor = interceptorClass.prototype; + if (init.leafTags[tag] === true) + return A.makeLeafDispatchRecord(interceptor); + else + return J.makeDispatchRecord(interceptor, proto, null, null); + }, + initNativeDispatch() { + if (true === $.initNativeDispatchFlag) + return; + $.initNativeDispatchFlag = true; + A.initNativeDispatchContinue(); + }, + initNativeDispatchContinue() { + var map, tags, fun, i, tag, proto, record, interceptorClass; + $.dispatchRecordsForInstanceTags = Object.create(null); + $.interceptorsForUncacheableTags = Object.create(null); + A.initHooks(); + map = init.interceptorsByTag; + tags = Object.getOwnPropertyNames(map); + if (typeof window != "undefined") { + window; + fun = function() { + }; + for (i = 0; i < tags.length; ++i) { + tag = tags[i]; + proto = $.prototypeForTagFunction.call$1(tag); + if (proto != null) { + record = A.makeDefaultDispatchRecord(tag, map[tag], proto); + if (record != null) { + Object.defineProperty(proto, init.dispatchPropertyName, {value: record, enumerable: false, writable: true, configurable: true}); + fun.prototype = proto; + } + } + } + } + for (i = 0; i < tags.length; ++i) { + tag = tags[i]; + if (/^[A-Za-z_]/.test(tag)) { + interceptorClass = map[tag]; + map["!" + tag] = interceptorClass; + map["~" + tag] = interceptorClass; + map["-" + tag] = interceptorClass; + map["+" + tag] = interceptorClass; + map["*" + tag] = interceptorClass; + } + } + }, + initHooks() { + var transformers, i, transformer, getTag, getUnknownTag, prototypeForTag, + hooks = B.C_JS_CONST0(); + hooks = A.applyHooksTransformer(B.C_JS_CONST1, A.applyHooksTransformer(B.C_JS_CONST2, A.applyHooksTransformer(B.C_JS_CONST3, A.applyHooksTransformer(B.C_JS_CONST3, A.applyHooksTransformer(B.C_JS_CONST4, A.applyHooksTransformer(B.C_JS_CONST5, A.applyHooksTransformer(B.C_JS_CONST6(B.C_JS_CONST), hooks))))))); + if (typeof dartNativeDispatchHooksTransformer != "undefined") { + transformers = dartNativeDispatchHooksTransformer; + if (typeof transformers == "function") + transformers = [transformers]; + if (Array.isArray(transformers)) + for (i = 0; i < transformers.length; ++i) { + transformer = transformers[i]; + if (typeof transformer == "function") + hooks = transformer(hooks) || hooks; + } + } + getTag = hooks.getTag; + getUnknownTag = hooks.getUnknownTag; + prototypeForTag = hooks.prototypeForTag; + $.getTagFunction = new A.initHooks_closure(getTag); + $.alternateTagFunction = new A.initHooks_closure0(getUnknownTag); + $.prototypeForTagFunction = new A.initHooks_closure1(prototypeForTag); + }, + applyHooksTransformer(transformer, hooks) { + return transformer(hooks) || hooks; + }, + createRecordTypePredicate(shape, fieldRtis) { + var $length = fieldRtis.length, + $function = init.rttc["" + $length + ";" + shape]; + if ($function == null) + return null; + if ($length === 0) + return $function; + if ($length === $function.length) + return $function.apply(null, fieldRtis); + return $function(fieldRtis); + }, + JSSyntaxRegExp_makeNative(source, multiLine, caseSensitive, unicode, dotAll, extraFlags) { + var m = multiLine ? "m" : "", + i = caseSensitive ? "" : "i", + u = unicode ? "u" : "", + s = dotAll ? "s" : "", + regexp = function(source, modifiers) { + try { + return new RegExp(source, modifiers); + } catch (e) { + return e; + } + }(source, m + i + u + s + extraFlags); + if (regexp instanceof RegExp) + return regexp; + throw A.wrapException(A.FormatException$("Illegal RegExp pattern (" + String(regexp) + ")", source, null)); + }, + stringContainsUnchecked(receiver, other, startIndex) { + var t1; + if (typeof other == "string") + return receiver.indexOf(other, startIndex) >= 0; + else if (other instanceof A.JSSyntaxRegExp) { + t1 = B.JSString_methods.substring$1(receiver, startIndex); + return other._nativeRegExp.test(t1); + } else + return !J.allMatches$1$s(other, B.JSString_methods.substring$1(receiver, startIndex)).get$isEmpty(0); + }, + escapeReplacement(replacement) { + if (replacement.indexOf("$", 0) >= 0) + return replacement.replace(/\$/g, "$$$$"); + return replacement; + }, + stringReplaceFirstRE(receiver, regexp, replacement, startIndex) { + var match = regexp._execGlobal$2(receiver, startIndex); + if (match == null) + return receiver; + return A.stringReplaceRangeUnchecked(receiver, match._match.index, match.get$end(), replacement); + }, + quoteStringForRegExp(string) { + if (/[[\]{}()*+?.\\^$|]/.test(string)) + return string.replace(/[[\]{}()*+?.\\^$|]/g, "\\$&"); + return string; + }, + stringReplaceAllUnchecked(receiver, pattern, replacement) { + var nativeRegexp; + if (typeof pattern == "string") + return A.stringReplaceAllUncheckedString(receiver, pattern, replacement); + if (pattern instanceof A.JSSyntaxRegExp) { + nativeRegexp = pattern.get$_nativeGlobalVersion(); + nativeRegexp.lastIndex = 0; + return receiver.replace(nativeRegexp, A.escapeReplacement(replacement)); + } + return A.stringReplaceAllGeneral(receiver, pattern, replacement); + }, + stringReplaceAllGeneral(receiver, pattern, replacement) { + var t1, startIndex, t2, match; + for (t1 = J.allMatches$1$s(pattern, receiver), t1 = t1.get$iterator(t1), startIndex = 0, t2 = ""; t1.moveNext$0();) { + match = t1.get$current(); + t2 = t2 + receiver.substring(startIndex, match.get$start()) + replacement; + startIndex = match.get$end(); + } + t1 = t2 + receiver.substring(startIndex); + return t1.charCodeAt(0) == 0 ? t1 : t1; + }, + stringReplaceAllUncheckedString(receiver, pattern, replacement) { + var $length, t1, i; + if (pattern === "") { + if (receiver === "") + return replacement; + $length = receiver.length; + for (t1 = replacement, i = 0; i < $length; ++i) + t1 = t1 + receiver[i] + replacement; + return t1.charCodeAt(0) == 0 ? t1 : t1; + } + if (receiver.indexOf(pattern, 0) < 0) + return receiver; + if (receiver.length < 500 || replacement.indexOf("$", 0) >= 0) + return receiver.split(pattern).join(replacement); + return receiver.replace(new RegExp(A.quoteStringForRegExp(pattern), "g"), A.escapeReplacement(replacement)); + }, + stringReplaceFirstUnchecked(receiver, pattern, replacement, startIndex) { + var index, t1, matches, match; + if (typeof pattern == "string") { + index = receiver.indexOf(pattern, startIndex); + if (index < 0) + return receiver; + return A.stringReplaceRangeUnchecked(receiver, index, index + pattern.length, replacement); + } + if (pattern instanceof A.JSSyntaxRegExp) + return startIndex === 0 ? receiver.replace(pattern._nativeRegExp, A.escapeReplacement(replacement)) : A.stringReplaceFirstRE(receiver, pattern, replacement, startIndex); + t1 = J.allMatches$2$s(pattern, receiver, startIndex); + matches = t1.get$iterator(t1); + if (!matches.moveNext$0()) + return receiver; + match = matches.get$current(); + return B.JSString_methods.replaceRange$3(receiver, match.get$start(), match.get$end(), replacement); + }, + stringReplaceRangeUnchecked(receiver, start, end, replacement) { + return receiver.substring(0, start) + replacement + receiver.substring(end); + }, + _Record_2: function _Record_2(t0, t1) { + this._0 = t0; + this._1 = t1; + }, + _Record_2_file_outFlags: function _Record_2_file_outFlags(t0, t1) { + this._0 = t0; + this._1 = t1; + }, + ConstantMap: function ConstantMap() { + }, + ConstantStringMap: function ConstantStringMap(t0, t1, t2) { + this._jsIndex = t0; + this._values = t1; + this.$ti = t2; + }, + _KeysOrValues: function _KeysOrValues(t0, t1) { + this._elements = t0; + this.$ti = t1; + }, + _KeysOrValuesOrElementsIterator: function _KeysOrValuesOrElementsIterator(t0, t1, t2) { + var _ = this; + _._elements = t0; + _.__js_helper$_length = t1; + _.__js_helper$_index = 0; + _.__js_helper$_current = null; + _.$ti = t2; + }, + Instantiation: function Instantiation() { + }, + Instantiation1: function Instantiation1(t0, t1) { + this._genericClosure = t0; + this.$ti = t1; + }, + SafeToStringHook: function SafeToStringHook() { + }, + TypeErrorDecoder: function TypeErrorDecoder(t0, t1, t2, t3, t4, t5) { + var _ = this; + _._pattern = t0; + _._arguments = t1; + _._argumentsExpr = t2; + _._expr = t3; + _._method = t4; + _._receiver = t5; + }, + NullError: function NullError() { + }, + JsNoSuchMethodError: function JsNoSuchMethodError(t0, t1, t2) { + this.__js_helper$_message = t0; + this._method = t1; + this._receiver = t2; + }, + UnknownJsTypeError: function UnknownJsTypeError(t0) { + this.__js_helper$_message = t0; + }, + NullThrownFromJavaScriptException: function NullThrownFromJavaScriptException(t0) { + this._irritant = t0; + }, + ExceptionAndStackTrace: function ExceptionAndStackTrace(t0, t1) { + this.dartException = t0; + this.stackTrace = t1; + }, + _StackTrace: function _StackTrace(t0) { + this._exception = t0; + this._trace = null; + }, + Closure: function Closure() { + }, + Closure0Args: function Closure0Args() { + }, + Closure2Args: function Closure2Args() { + }, + TearOffClosure: function TearOffClosure() { + }, + StaticClosure: function StaticClosure() { + }, + BoundClosure: function BoundClosure(t0, t1) { + this._receiver = t0; + this._interceptor = t1; + }, + RuntimeError: function RuntimeError(t0) { + this.message = t0; + }, + JsLinkedHashMap: function JsLinkedHashMap(t0) { + var _ = this; + _.__js_helper$_length = 0; + _.__js_helper$_last = _.__js_helper$_first = _.__js_helper$_rest = _.__js_helper$_nums = _.__js_helper$_strings = null; + _.__js_helper$_modifications = 0; + _.$ti = t0; + }, + JsLinkedHashMap_addAll_closure: function JsLinkedHashMap_addAll_closure(t0) { + this.$this = t0; + }, + LinkedHashMapCell: function LinkedHashMapCell(t0, t1) { + var _ = this; + _.hashMapCellKey = t0; + _.hashMapCellValue = t1; + _.__js_helper$_previous = _.__js_helper$_next = null; + }, + LinkedHashMapKeysIterable: function LinkedHashMapKeysIterable(t0, t1) { + this.__js_helper$_map = t0; + this.$ti = t1; + }, + LinkedHashMapKeyIterator: function LinkedHashMapKeyIterator(t0, t1, t2, t3) { + var _ = this; + _.__js_helper$_map = t0; + _.__js_helper$_modifications = t1; + _.__js_helper$_cell = t2; + _.__js_helper$_current = null; + _.$ti = t3; + }, + LinkedHashMapValuesIterable: function LinkedHashMapValuesIterable(t0, t1) { + this.__js_helper$_map = t0; + this.$ti = t1; + }, + LinkedHashMapValueIterator: function LinkedHashMapValueIterator(t0, t1, t2, t3) { + var _ = this; + _.__js_helper$_map = t0; + _.__js_helper$_modifications = t1; + _.__js_helper$_cell = t2; + _.__js_helper$_current = null; + _.$ti = t3; + }, + LinkedHashMapEntriesIterable: function LinkedHashMapEntriesIterable(t0, t1) { + this.__js_helper$_map = t0; + this.$ti = t1; + }, + LinkedHashMapEntryIterator: function LinkedHashMapEntryIterator(t0, t1, t2, t3) { + var _ = this; + _.__js_helper$_map = t0; + _.__js_helper$_modifications = t1; + _.__js_helper$_cell = t2; + _.__js_helper$_current = null; + _.$ti = t3; + }, + initHooks_closure: function initHooks_closure(t0) { + this.getTag = t0; + }, + initHooks_closure0: function initHooks_closure0(t0) { + this.getUnknownTag = t0; + }, + initHooks_closure1: function initHooks_closure1(t0) { + this.prototypeForTag = t0; + }, + _Record: function _Record() { + }, + _Record2: function _Record2() { + }, + JSSyntaxRegExp: function JSSyntaxRegExp(t0, t1) { + var _ = this; + _.pattern = t0; + _._nativeRegExp = t1; + _._hasCapturesCache = _._nativeAnchoredRegExp = _._nativeGlobalRegExp = null; + }, + _MatchImplementation: function _MatchImplementation(t0) { + this._match = t0; + }, + _AllMatchesIterable: function _AllMatchesIterable(t0, t1, t2) { + this._re = t0; + this.__js_helper$_string = t1; + this.__js_helper$_start = t2; + }, + _AllMatchesIterator: function _AllMatchesIterator(t0, t1, t2) { + var _ = this; + _._regExp = t0; + _.__js_helper$_string = t1; + _._nextIndex = t2; + _.__js_helper$_current = null; + }, + StringMatch: function StringMatch(t0, t1) { + this.start = t0; + this.pattern = t1; + }, + _StringAllMatchesIterable: function _StringAllMatchesIterable(t0, t1, t2) { + this._input = t0; + this._pattern = t1; + this.__js_helper$_index = t2; + }, + _StringAllMatchesIterator: function _StringAllMatchesIterator(t0, t1, t2) { + var _ = this; + _._input = t0; + _._pattern = t1; + _.__js_helper$_index = t2; + _.__js_helper$_current = null; + }, + throwLateFieldNI(fieldName) { + throw A.initializeExceptionWrapper(A.LateError$fieldNI(fieldName), new Error()); + }, + throwLateFieldAI(fieldName) { + throw A.initializeExceptionWrapper(A.LateError$fieldAI(fieldName), new Error()); + }, + throwLateFieldADI(fieldName) { + throw A.initializeExceptionWrapper(A.LateError$fieldADI(fieldName), new Error()); + }, + _Cell$named(_name) { + var t1 = new A._Cell(_name); + return t1._value = t1; + }, + _Cell: function _Cell(t0) { + this.__late_helper$_name = t0; + this._value = null; + }, + _checkLength($length) { + return $length; + }, + _checkViewArguments(buffer, offsetInBytes, $length) { + }, + _ensureNativeList(list) { + var t1, result, i; + if (type$.JSIndexable_dynamic._is(list)) + return list; + t1 = J.getInterceptor$asx(list); + result = A.List_List$filled(t1.get$length(list), null, false, type$.dynamic); + for (i = 0; i < t1.get$length(list); ++i) + B.JSArray_methods.$indexSet(result, i, t1.$index(list, i)); + return result; + }, + NativeByteData_NativeByteData$view(buffer, offsetInBytes, $length) { + var t1; + A._checkViewArguments(buffer, offsetInBytes, $length); + t1 = new DataView(buffer, offsetInBytes); + return t1; + }, + NativeInt32List_NativeInt32List$view(buffer, offsetInBytes, $length) { + A._checkViewArguments(buffer, offsetInBytes, $length); + $length = B.JSInt_methods._tdivFast$1(buffer.byteLength - offsetInBytes, 4); + return new Int32Array(buffer, offsetInBytes, $length); + }, + NativeInt8List__create1(arg) { + return new Int8Array(arg); + }, + NativeUint32List_NativeUint32List$view(buffer, offsetInBytes, $length) { + A._checkViewArguments(buffer, offsetInBytes, $length); + return new Uint32Array(buffer, offsetInBytes, $length); + }, + NativeUint8List_NativeUint8List($length) { + return new Uint8Array($length); + }, + NativeUint8List_NativeUint8List$view(buffer, offsetInBytes, $length) { + A._checkViewArguments(buffer, offsetInBytes, $length); + return $length == null ? new Uint8Array(buffer, offsetInBytes) : new Uint8Array(buffer, offsetInBytes, $length); + }, + _checkValidIndex(index, list, $length) { + if (index >>> 0 !== index || index >= $length) + throw A.wrapException(A.diagnoseIndexError(list, index)); + }, + _checkValidRange(start, end, $length) { + var t1; + if (!(start >>> 0 !== start)) + t1 = end >>> 0 !== end || start > end || end > $length; + else + t1 = true; + if (t1) + throw A.wrapException(A.diagnoseRangeError(start, end, $length)); + return end; + }, + NativeByteBuffer: function NativeByteBuffer() { + }, + NativeArrayBuffer: function NativeArrayBuffer() { + }, + NativeTypedData: function NativeTypedData() { + }, + _UnmodifiableNativeByteBufferView: function _UnmodifiableNativeByteBufferView(t0) { + this.__native_typed_data$_data = t0; + }, + NativeByteData: function NativeByteData() { + }, + NativeTypedArray: function NativeTypedArray() { + }, + NativeTypedArrayOfDouble: function NativeTypedArrayOfDouble() { + }, + NativeTypedArrayOfInt: function NativeTypedArrayOfInt() { + }, + NativeFloat32List: function NativeFloat32List() { + }, + NativeFloat64List: function NativeFloat64List() { + }, + NativeInt16List: function NativeInt16List() { + }, + NativeInt32List: function NativeInt32List() { + }, + NativeInt8List: function NativeInt8List() { + }, + NativeUint16List: function NativeUint16List() { + }, + NativeUint32List: function NativeUint32List() { + }, + NativeUint8ClampedList: function NativeUint8ClampedList() { + }, + NativeUint8List: function NativeUint8List() { + }, + _NativeTypedArrayOfDouble_NativeTypedArray_ListMixin: function _NativeTypedArrayOfDouble_NativeTypedArray_ListMixin() { + }, + _NativeTypedArrayOfDouble_NativeTypedArray_ListMixin_FixedLengthListMixin: function _NativeTypedArrayOfDouble_NativeTypedArray_ListMixin_FixedLengthListMixin() { + }, + _NativeTypedArrayOfInt_NativeTypedArray_ListMixin: function _NativeTypedArrayOfInt_NativeTypedArray_ListMixin() { + }, + _NativeTypedArrayOfInt_NativeTypedArray_ListMixin_FixedLengthListMixin: function _NativeTypedArrayOfInt_NativeTypedArray_ListMixin_FixedLengthListMixin() { + }, + Rti__getFutureFromFutureOr(universe, rti) { + var future = rti._precomputed1; + return future == null ? rti._precomputed1 = A._Universe__lookupInterfaceRti(universe, "Future", [rti._primary]) : future; + }, + Rti__isUnionOfFunctionType(rti) { + var kind = rti._kind; + if (kind === 6 || kind === 7) + return A.Rti__isUnionOfFunctionType(rti._primary); + return kind === 11 || kind === 12; + }, + Rti__getCanonicalRecipe(rti) { + return rti._canonicalRecipe; + }, + findType(recipe) { + return A._Universe_eval(init.typeUniverse, recipe, false); + }, + instantiatedGenericFunctionType(genericFunctionRti, instantiationRti) { + var t1, cache, key, probe, rti; + if (genericFunctionRti == null) + return null; + t1 = instantiationRti._rest; + cache = genericFunctionRti._bindCache; + if (cache == null) + cache = genericFunctionRti._bindCache = new Map(); + key = instantiationRti._canonicalRecipe; + probe = cache.get(key); + if (probe != null) + return probe; + rti = A._substitute(init.typeUniverse, genericFunctionRti._primary, t1, 0); + cache.set(key, rti); + return rti; + }, + _substitute(universe, rti, typeArguments, depth) { + var baseType, substitutedBaseType, interfaceTypeArguments, substitutedInterfaceTypeArguments, base, substitutedBase, $arguments, substitutedArguments, t1, fields, substitutedFields, returnType, substitutedReturnType, functionParameters, substitutedFunctionParameters, bounds, substitutedBounds, index, argument, + kind = rti._kind; + switch (kind) { + case 5: + case 1: + case 2: + case 3: + case 4: + return rti; + case 6: + baseType = rti._primary; + substitutedBaseType = A._substitute(universe, baseType, typeArguments, depth); + if (substitutedBaseType === baseType) + return rti; + return A._Universe__lookupQuestionRti(universe, substitutedBaseType, true); + case 7: + baseType = rti._primary; + substitutedBaseType = A._substitute(universe, baseType, typeArguments, depth); + if (substitutedBaseType === baseType) + return rti; + return A._Universe__lookupFutureOrRti(universe, substitutedBaseType, true); + case 8: + interfaceTypeArguments = rti._rest; + substitutedInterfaceTypeArguments = A._substituteArray(universe, interfaceTypeArguments, typeArguments, depth); + if (substitutedInterfaceTypeArguments === interfaceTypeArguments) + return rti; + return A._Universe__lookupInterfaceRti(universe, rti._primary, substitutedInterfaceTypeArguments); + case 9: + base = rti._primary; + substitutedBase = A._substitute(universe, base, typeArguments, depth); + $arguments = rti._rest; + substitutedArguments = A._substituteArray(universe, $arguments, typeArguments, depth); + if (substitutedBase === base && substitutedArguments === $arguments) + return rti; + return A._Universe__lookupBindingRti(universe, substitutedBase, substitutedArguments); + case 10: + t1 = rti._primary; + fields = rti._rest; + substitutedFields = A._substituteArray(universe, fields, typeArguments, depth); + if (substitutedFields === fields) + return rti; + return A._Universe__lookupRecordRti(universe, t1, substitutedFields); + case 11: + returnType = rti._primary; + substitutedReturnType = A._substitute(universe, returnType, typeArguments, depth); + functionParameters = rti._rest; + substitutedFunctionParameters = A._substituteFunctionParameters(universe, functionParameters, typeArguments, depth); + if (substitutedReturnType === returnType && substitutedFunctionParameters === functionParameters) + return rti; + return A._Universe__lookupFunctionRti(universe, substitutedReturnType, substitutedFunctionParameters); + case 12: + bounds = rti._rest; + depth += bounds.length; + substitutedBounds = A._substituteArray(universe, bounds, typeArguments, depth); + base = rti._primary; + substitutedBase = A._substitute(universe, base, typeArguments, depth); + if (substitutedBounds === bounds && substitutedBase === base) + return rti; + return A._Universe__lookupGenericFunctionRti(universe, substitutedBase, substitutedBounds, true); + case 13: + index = rti._primary; + if (index < depth) + return rti; + argument = typeArguments[index - depth]; + if (argument == null) + return rti; + return argument; + default: + throw A.wrapException(A.AssertionError$("Attempted to substitute unexpected RTI kind " + kind)); + } + }, + _substituteArray(universe, rtiArray, typeArguments, depth) { + var changed, i, rti, substitutedRti, + $length = rtiArray.length, + result = A._Utils_newArrayOrEmpty($length); + for (changed = false, i = 0; i < $length; ++i) { + rti = rtiArray[i]; + substitutedRti = A._substitute(universe, rti, typeArguments, depth); + if (substitutedRti !== rti) + changed = true; + result[i] = substitutedRti; + } + return changed ? result : rtiArray; + }, + _substituteNamed(universe, namedArray, typeArguments, depth) { + var changed, i, t1, t2, rti, substitutedRti, + $length = namedArray.length, + result = A._Utils_newArrayOrEmpty($length); + for (changed = false, i = 0; i < $length; i += 3) { + t1 = namedArray[i]; + t2 = namedArray[i + 1]; + rti = namedArray[i + 2]; + substitutedRti = A._substitute(universe, rti, typeArguments, depth); + if (substitutedRti !== rti) + changed = true; + result.splice(i, 3, t1, t2, substitutedRti); + } + return changed ? result : namedArray; + }, + _substituteFunctionParameters(universe, functionParameters, typeArguments, depth) { + var result, + requiredPositional = functionParameters._requiredPositional, + substitutedRequiredPositional = A._substituteArray(universe, requiredPositional, typeArguments, depth), + optionalPositional = functionParameters._optionalPositional, + substitutedOptionalPositional = A._substituteArray(universe, optionalPositional, typeArguments, depth), + named = functionParameters._named, + substitutedNamed = A._substituteNamed(universe, named, typeArguments, depth); + if (substitutedRequiredPositional === requiredPositional && substitutedOptionalPositional === optionalPositional && substitutedNamed === named) + return functionParameters; + result = new A._FunctionParameters(); + result._requiredPositional = substitutedRequiredPositional; + result._optionalPositional = substitutedOptionalPositional; + result._named = substitutedNamed; + return result; + }, + _setArrayType(target, rti) { + target[init.arrayRti] = rti; + return target; + }, + closureFunctionType(closure) { + var signature = closure.$signature; + if (signature != null) { + if (typeof signature == "number") + return A.getTypeFromTypesTable(signature); + return closure.$signature(); + } + return null; + }, + instanceOrFunctionType(object, testRti) { + var rti; + if (A.Rti__isUnionOfFunctionType(testRti)) + if (object instanceof A.Closure) { + rti = A.closureFunctionType(object); + if (rti != null) + return rti; + } + return A.instanceType(object); + }, + instanceType(object) { + if (object instanceof A.Object) + return A._instanceType(object); + if (Array.isArray(object)) + return A._arrayInstanceType(object); + return A._instanceTypeFromConstructor(J.getInterceptor$(object)); + }, + _arrayInstanceType(object) { + var rti = object[init.arrayRti], + defaultRti = type$.JSArray_dynamic; + if (rti == null) + return defaultRti; + if (rti.constructor !== defaultRti.constructor) + return defaultRti; + return rti; + }, + _instanceType(object) { + var rti = object.$ti; + return rti != null ? rti : A._instanceTypeFromConstructor(object); + }, + _instanceTypeFromConstructor(instance) { + var $constructor = instance.constructor, + probe = $constructor.$ccache; + if (probe != null) + return probe; + return A._instanceTypeFromConstructorMiss(instance, $constructor); + }, + _instanceTypeFromConstructorMiss(instance, $constructor) { + var effectiveConstructor = instance instanceof A.Closure ? Object.getPrototypeOf(Object.getPrototypeOf(instance)).constructor : $constructor, + rti = A._Universe_findErasedType(init.typeUniverse, effectiveConstructor.name); + $constructor.$ccache = rti; + return rti; + }, + getTypeFromTypesTable(index) { + var rti, + table = init.types, + type = table[index]; + if (typeof type == "string") { + rti = A._Universe_eval(init.typeUniverse, type, false); + table[index] = rti; + return rti; + } + return type; + }, + getRuntimeTypeOfDartObject(object) { + return A.createRuntimeType(A._instanceType(object)); + }, + getRuntimeTypeOfClosure(closure) { + var rti = A.closureFunctionType(closure); + return A.createRuntimeType(rti == null ? A.instanceType(closure) : rti); + }, + _structuralTypeOf(object) { + var functionRti; + if (object instanceof A._Record) + return A.evaluateRtiForRecord(object.$recipe, object._getFieldValues$0()); + functionRti = object instanceof A.Closure ? A.closureFunctionType(object) : null; + if (functionRti != null) + return functionRti; + if (type$.TrustedGetRuntimeType._is(object)) + return J.get$runtimeType$(object)._rti; + if (Array.isArray(object)) + return A._arrayInstanceType(object); + return A.instanceType(object); + }, + createRuntimeType(rti) { + var t1 = rti._cachedRuntimeType; + return t1 == null ? rti._cachedRuntimeType = new A._Type(rti) : t1; + }, + evaluateRtiForRecord(recordRecipe, valuesList) { + var bindings, i, + values = valuesList, + $length = values.length; + if ($length === 0) + return type$.Record_0; + if (0 >= $length) + return A.ioore(values, 0); + bindings = A._Universe_evalInEnvironment(init.typeUniverse, A._structuralTypeOf(values[0]), "@<0>"); + for (i = 1; i < $length; ++i) { + if (!(i < values.length)) + return A.ioore(values, i); + bindings = A._Universe_bind(init.typeUniverse, bindings, A._structuralTypeOf(values[i])); + } + return A._Universe_evalInEnvironment(init.typeUniverse, bindings, recordRecipe); + }, + typeLiteral(recipe) { + return A.createRuntimeType(A._Universe_eval(init.typeUniverse, recipe, false)); + }, + _installSpecializedIsTest(object) { + var testRti = this; + testRti._is = A._specializedIsTest(testRti); + return testRti._is(object); + }, + _specializedIsTest(testRti) { + var kind, simpleIsFn, $name, predicate, t1; + if (testRti === type$.Object) + return A._isObject; + if (A.isTopType(testRti)) + return A._isTop; + kind = testRti._kind; + if (kind === 6) + return A._generalNullableIsTestImplementation; + if (kind === 1) + return A._isNever; + if (kind === 7) + return A._isFutureOr; + simpleIsFn = A._simpleSpecializedIsTest(testRti); + if (simpleIsFn != null) + return simpleIsFn; + if (kind === 8) { + $name = testRti._primary; + if (testRti._rest.every(A.isTopType)) { + testRti._specializedTestResource = "$is" + $name; + if ($name === "List") + return A._isListTestViaProperty; + if (testRti === type$.JSObject) + return A._isJSObject; + return A._isTestViaProperty; + } + } else if (kind === 10) { + predicate = A.createRecordTypePredicate(testRti._primary, testRti._rest); + t1 = predicate == null ? A._isNever : predicate; + return t1 == null ? A._asObject(t1) : t1; + } + return A._generalIsTestImplementation; + }, + _simpleSpecializedIsTest(testRti) { + if (testRti._kind === 8) { + if (testRti === type$.int) + return A._isInt; + if (testRti === type$.double || testRti === type$.num) + return A._isNum; + if (testRti === type$.String) + return A._isString; + if (testRti === type$.bool) + return A._isBool; + } + return null; + }, + _installSpecializedAsCheck(object) { + var testRti = this, + asFn = A._generalAsCheckImplementation; + if (A.isTopType(testRti)) + asFn = A._asTop; + else if (testRti === type$.Object) + asFn = A._asObject; + else if (A.isNullable(testRti)) { + asFn = A._generalNullableAsCheckImplementation; + if (testRti === type$.nullable_int) + asFn = A._asIntQ; + else if (testRti === type$.nullable_String) + asFn = A._asStringQ; + else if (testRti === type$.nullable_bool) + asFn = A._asBoolQ; + else if (testRti === type$.nullable_num) + asFn = A._asNumQ; + else if (testRti === type$.nullable_double) + asFn = A._asDoubleQ; + else if (testRti === type$.nullable_JSObject) + asFn = A._asJSObjectQ; + } else if (testRti === type$.int) + asFn = A._asInt; + else if (testRti === type$.String) + asFn = A._asString; + else if (testRti === type$.bool) + asFn = A._asBool; + else if (testRti === type$.num) + asFn = A._asNum; + else if (testRti === type$.double) + asFn = A._asDouble; + else if (testRti === type$.JSObject) + asFn = A._asJSObject; + testRti._as = asFn; + return testRti._as(object); + }, + _generalIsTestImplementation(object) { + var testRti = this; + if (object == null) + return A.isNullable(testRti); + return A.isSubtype(init.typeUniverse, A.instanceOrFunctionType(object, testRti), testRti); + }, + _generalNullableIsTestImplementation(object) { + if (object == null) + return true; + return this._primary._is(object); + }, + _isTestViaProperty(object) { + var tag, testRti = this; + if (object == null) + return A.isNullable(testRti); + tag = testRti._specializedTestResource; + if (object instanceof A.Object) + return !!object[tag]; + return !!J.getInterceptor$(object)[tag]; + }, + _isListTestViaProperty(object) { + var tag, testRti = this; + if (object == null) + return A.isNullable(testRti); + if (typeof object != "object") + return false; + if (Array.isArray(object)) + return true; + tag = testRti._specializedTestResource; + if (object instanceof A.Object) + return !!object[tag]; + return !!J.getInterceptor$(object)[tag]; + }, + _isJSObject(object) { + var t1 = this; + if (object == null) + return false; + if (typeof object == "object") { + if (object instanceof A.Object) + return !!object[t1._specializedTestResource]; + return true; + } + if (typeof object == "function") + return true; + return false; + }, + _isJSObjectStandalone(object) { + if (typeof object == "object") { + if (object instanceof A.Object) + return type$.JSObject._is(object); + return true; + } + if (typeof object == "function") + return true; + return false; + }, + _generalAsCheckImplementation(object) { + var testRti = this; + if (object == null) { + if (A.isNullable(testRti)) + return object; + } else if (testRti._is(object)) + return object; + throw A.initializeExceptionWrapper(A._errorForAsCheck(object, testRti), new Error()); + }, + _generalNullableAsCheckImplementation(object) { + var testRti = this; + if (object == null || testRti._is(object)) + return object; + throw A.initializeExceptionWrapper(A._errorForAsCheck(object, testRti), new Error()); + }, + _errorForAsCheck(object, testRti) { + return new A._TypeError("TypeError: " + A._Error_compose(object, A._rtiToString(testRti, null))); + }, + checkTypeBound(type, bound, variable, methodName) { + if (A.isSubtype(init.typeUniverse, type, bound)) + return type; + throw A.initializeExceptionWrapper(A._TypeError$fromMessage("The type argument '" + A._rtiToString(type, null) + "' is not a subtype of the type variable bound '" + A._rtiToString(bound, null) + "' of type variable '" + variable + "' in '" + methodName + "'."), new Error()); + }, + _Error_compose(object, checkedTypeDescription) { + return A.Error_safeToString(object) + ": type '" + A._rtiToString(A._structuralTypeOf(object), null) + "' is not a subtype of type '" + checkedTypeDescription + "'"; + }, + _TypeError$fromMessage(message) { + return new A._TypeError("TypeError: " + message); + }, + _TypeError__TypeError$forType(object, type) { + return new A._TypeError("TypeError: " + A._Error_compose(object, type)); + }, + _isFutureOr(object) { + var testRti = this; + return testRti._primary._is(object) || A.Rti__getFutureFromFutureOr(init.typeUniverse, testRti)._is(object); + }, + _isObject(object) { + return object != null; + }, + _asObject(object) { + if (object != null) + return object; + throw A.initializeExceptionWrapper(A._TypeError__TypeError$forType(object, "Object"), new Error()); + }, + _isTop(object) { + return true; + }, + _asTop(object) { + return object; + }, + _isNever(object) { + return false; + }, + _isBool(object) { + return true === object || false === object; + }, + _asBool(object) { + if (true === object) + return true; + if (false === object) + return false; + throw A.initializeExceptionWrapper(A._TypeError__TypeError$forType(object, "bool"), new Error()); + }, + _asBoolQ(object) { + if (true === object) + return true; + if (false === object) + return false; + if (object == null) + return object; + throw A.initializeExceptionWrapper(A._TypeError__TypeError$forType(object, "bool?"), new Error()); + }, + _asDouble(object) { + if (typeof object == "number") + return object; + throw A.initializeExceptionWrapper(A._TypeError__TypeError$forType(object, "double"), new Error()); + }, + _asDoubleQ(object) { + if (typeof object == "number") + return object; + if (object == null) + return object; + throw A.initializeExceptionWrapper(A._TypeError__TypeError$forType(object, "double?"), new Error()); + }, + _isInt(object) { + return typeof object == "number" && Math.floor(object) === object; + }, + _asInt(object) { + if (typeof object == "number" && Math.floor(object) === object) + return object; + throw A.initializeExceptionWrapper(A._TypeError__TypeError$forType(object, "int"), new Error()); + }, + _asIntQ(object) { + if (typeof object == "number" && Math.floor(object) === object) + return object; + if (object == null) + return object; + throw A.initializeExceptionWrapper(A._TypeError__TypeError$forType(object, "int?"), new Error()); + }, + _isNum(object) { + return typeof object == "number"; + }, + _asNum(object) { + if (typeof object == "number") + return object; + throw A.initializeExceptionWrapper(A._TypeError__TypeError$forType(object, "num"), new Error()); + }, + _asNumQ(object) { + if (typeof object == "number") + return object; + if (object == null) + return object; + throw A.initializeExceptionWrapper(A._TypeError__TypeError$forType(object, "num?"), new Error()); + }, + _isString(object) { + return typeof object == "string"; + }, + _asString(object) { + if (typeof object == "string") + return object; + throw A.initializeExceptionWrapper(A._TypeError__TypeError$forType(object, "String"), new Error()); + }, + _asStringQ(object) { + if (typeof object == "string") + return object; + if (object == null) + return object; + throw A.initializeExceptionWrapper(A._TypeError__TypeError$forType(object, "String?"), new Error()); + }, + _asJSObject(object) { + if (A._isJSObjectStandalone(object)) + return object; + throw A.initializeExceptionWrapper(A._TypeError__TypeError$forType(object, "JSObject"), new Error()); + }, + _asJSObjectQ(object) { + if (object == null) + return object; + if (A._isJSObjectStandalone(object)) + return object; + throw A.initializeExceptionWrapper(A._TypeError__TypeError$forType(object, "JSObject?"), new Error()); + }, + _rtiArrayToString(array, genericContext) { + var s, sep, i; + for (s = "", sep = "", i = 0; i < array.length; ++i, sep = ", ") + s += sep + A._rtiToString(array[i], genericContext); + return s; + }, + _recordRtiToString(recordType, genericContext) { + var fieldCount, names, namesIndex, s, comma, i, + partialShape = recordType._primary, + fields = recordType._rest; + if ("" === partialShape) + return "(" + A._rtiArrayToString(fields, genericContext) + ")"; + fieldCount = fields.length; + names = partialShape.split(","); + namesIndex = names.length - fieldCount; + for (s = "(", comma = "", i = 0; i < fieldCount; ++i, comma = ", ") { + s += comma; + if (namesIndex === 0) + s += "{"; + s += A._rtiToString(fields[i], genericContext); + if (namesIndex >= 0) + s += " " + names[namesIndex]; + ++namesIndex; + } + return s + "})"; + }, + _functionRtiToString(functionType, genericContext, bounds) { + var boundsLength, offset, i, t1, typeParametersText, typeSep, t2, t3, boundRti, kind, parameters, requiredPositional, requiredPositionalLength, optionalPositional, optionalPositionalLength, named, namedLength, returnTypeText, argumentsText, sep, _s2_ = ", ", outerContextLength = null; + if (bounds != null) { + boundsLength = bounds.length; + if (genericContext == null) + genericContext = A._setArrayType([], type$.JSArray_String); + else + outerContextLength = genericContext.length; + offset = genericContext.length; + for (i = boundsLength; i > 0; --i) + B.JSArray_methods.add$1(genericContext, "T" + (offset + i)); + for (t1 = type$.nullable_Object, typeParametersText = "<", typeSep = "", i = 0; i < boundsLength; ++i, typeSep = _s2_) { + t2 = genericContext.length; + t3 = t2 - 1 - i; + if (!(t3 >= 0)) + return A.ioore(genericContext, t3); + typeParametersText = typeParametersText + typeSep + genericContext[t3]; + boundRti = bounds[i]; + kind = boundRti._kind; + if (!(kind === 2 || kind === 3 || kind === 4 || kind === 5 || boundRti === t1)) + typeParametersText += " extends " + A._rtiToString(boundRti, genericContext); + } + typeParametersText += ">"; + } else + typeParametersText = ""; + t1 = functionType._primary; + parameters = functionType._rest; + requiredPositional = parameters._requiredPositional; + requiredPositionalLength = requiredPositional.length; + optionalPositional = parameters._optionalPositional; + optionalPositionalLength = optionalPositional.length; + named = parameters._named; + namedLength = named.length; + returnTypeText = A._rtiToString(t1, genericContext); + for (argumentsText = "", sep = "", i = 0; i < requiredPositionalLength; ++i, sep = _s2_) + argumentsText += sep + A._rtiToString(requiredPositional[i], genericContext); + if (optionalPositionalLength > 0) { + argumentsText += sep + "["; + for (sep = "", i = 0; i < optionalPositionalLength; ++i, sep = _s2_) + argumentsText += sep + A._rtiToString(optionalPositional[i], genericContext); + argumentsText += "]"; + } + if (namedLength > 0) { + argumentsText += sep + "{"; + for (sep = "", i = 0; i < namedLength; i += 3, sep = _s2_) { + argumentsText += sep; + if (named[i + 1]) + argumentsText += "required "; + argumentsText += A._rtiToString(named[i + 2], genericContext) + " " + named[i]; + } + argumentsText += "}"; + } + if (outerContextLength != null) { + genericContext.toString; + genericContext.length = outerContextLength; + } + return typeParametersText + "(" + argumentsText + ") => " + returnTypeText; + }, + _rtiToString(rti, genericContext) { + var questionArgument, s, argumentKind, $name, $arguments, t1, t2, + kind = rti._kind; + if (kind === 5) + return "erased"; + if (kind === 2) + return "dynamic"; + if (kind === 3) + return "void"; + if (kind === 1) + return "Never"; + if (kind === 4) + return "any"; + if (kind === 6) { + questionArgument = rti._primary; + s = A._rtiToString(questionArgument, genericContext); + argumentKind = questionArgument._kind; + return (argumentKind === 11 || argumentKind === 12 ? "(" + s + ")" : s) + "?"; + } + if (kind === 7) + return "FutureOr<" + A._rtiToString(rti._primary, genericContext) + ">"; + if (kind === 8) { + $name = A._unminifyOrTag(rti._primary); + $arguments = rti._rest; + return $arguments.length > 0 ? $name + ("<" + A._rtiArrayToString($arguments, genericContext) + ">") : $name; + } + if (kind === 10) + return A._recordRtiToString(rti, genericContext); + if (kind === 11) + return A._functionRtiToString(rti, genericContext, null); + if (kind === 12) + return A._functionRtiToString(rti._primary, genericContext, rti._rest); + if (kind === 13) { + t1 = rti._primary; + t2 = genericContext.length; + t1 = t2 - 1 - t1; + if (!(t1 >= 0 && t1 < t2)) + return A.ioore(genericContext, t1); + return genericContext[t1]; + } + return "?"; + }, + _unminifyOrTag(rawClassName) { + var preserved = init.mangledGlobalNames[rawClassName]; + if (preserved != null) + return preserved; + return rawClassName; + }, + _Universe_findRule(universe, targetType) { + var rule = universe.tR[targetType]; + while (typeof rule == "string") + rule = universe.tR[rule]; + return rule; + }, + _Universe_findErasedType(universe, cls) { + var $length, erased, $arguments, i, $interface, + metadata = universe.eT, + probe = metadata[cls]; + if (probe == null) + return A._Universe_eval(universe, cls, false); + else if (typeof probe == "number") { + $length = probe; + erased = A._Universe__lookupTerminalRti(universe, 5, "#"); + $arguments = A._Utils_newArrayOrEmpty($length); + for (i = 0; i < $length; ++i) + $arguments[i] = erased; + $interface = A._Universe__lookupInterfaceRti(universe, cls, $arguments); + metadata[cls] = $interface; + return $interface; + } else + return probe; + }, + _Universe_addRules(universe, rules) { + return A._Utils_objectAssign(universe.tR, rules); + }, + _Universe_addErasedTypes(universe, types) { + return A._Utils_objectAssign(universe.eT, types); + }, + _Universe_eval(universe, recipe, normalize) { + var rti, + cache = universe.eC, + probe = cache.get(recipe); + if (probe != null) + return probe; + rti = A._Parser_parse(A._Parser_create(universe, null, recipe, false)); + cache.set(recipe, rti); + return rti; + }, + _Universe_evalInEnvironment(universe, environment, recipe) { + var probe, rti, + cache = environment._evalCache; + if (cache == null) + cache = environment._evalCache = new Map(); + probe = cache.get(recipe); + if (probe != null) + return probe; + rti = A._Parser_parse(A._Parser_create(universe, environment, recipe, true)); + cache.set(recipe, rti); + return rti; + }, + _Universe_bind(universe, environment, argumentsRti) { + var argumentsRecipe, probe, rti, + cache = environment._bindCache; + if (cache == null) + cache = environment._bindCache = new Map(); + argumentsRecipe = argumentsRti._canonicalRecipe; + probe = cache.get(argumentsRecipe); + if (probe != null) + return probe; + rti = A._Universe__lookupBindingRti(universe, environment, argumentsRti._kind === 9 ? argumentsRti._rest : [argumentsRti]); + cache.set(argumentsRecipe, rti); + return rti; + }, + _Universe__installTypeTests(universe, rti) { + rti._as = A._installSpecializedAsCheck; + rti._is = A._installSpecializedIsTest; + return rti; + }, + _Universe__lookupTerminalRti(universe, kind, key) { + var rti, t1, + probe = universe.eC.get(key); + if (probe != null) + return probe; + rti = new A.Rti(null, null); + rti._kind = kind; + rti._canonicalRecipe = key; + t1 = A._Universe__installTypeTests(universe, rti); + universe.eC.set(key, t1); + return t1; + }, + _Universe__lookupQuestionRti(universe, baseType, normalize) { + var t1, + key = baseType._canonicalRecipe + "?", + probe = universe.eC.get(key); + if (probe != null) + return probe; + t1 = A._Universe__createQuestionRti(universe, baseType, key, normalize); + universe.eC.set(key, t1); + return t1; + }, + _Universe__createQuestionRti(universe, baseType, key, normalize) { + var baseKind, t1, rti; + if (normalize) { + baseKind = baseType._kind; + t1 = true; + if (!A.isTopType(baseType)) + if (!(baseType === type$.Null || baseType === type$.JSNull)) + if (baseKind !== 6) + t1 = baseKind === 7 && A.isNullable(baseType._primary); + if (t1) + return baseType; + else if (baseKind === 1) + return type$.Null; + } + rti = new A.Rti(null, null); + rti._kind = 6; + rti._primary = baseType; + rti._canonicalRecipe = key; + return A._Universe__installTypeTests(universe, rti); + }, + _Universe__lookupFutureOrRti(universe, baseType, normalize) { + var t1, + key = baseType._canonicalRecipe + "/", + probe = universe.eC.get(key); + if (probe != null) + return probe; + t1 = A._Universe__createFutureOrRti(universe, baseType, key, normalize); + universe.eC.set(key, t1); + return t1; + }, + _Universe__createFutureOrRti(universe, baseType, key, normalize) { + var t1, rti; + if (normalize) { + t1 = baseType._kind; + if (A.isTopType(baseType) || baseType === type$.Object) + return baseType; + else if (t1 === 1) + return A._Universe__lookupInterfaceRti(universe, "Future", [baseType]); + else if (baseType === type$.Null || baseType === type$.JSNull) + return type$.nullable_Future_Null; + } + rti = new A.Rti(null, null); + rti._kind = 7; + rti._primary = baseType; + rti._canonicalRecipe = key; + return A._Universe__installTypeTests(universe, rti); + }, + _Universe__lookupGenericFunctionParameterRti(universe, index) { + var rti, t1, + key = "" + index + "^", + probe = universe.eC.get(key); + if (probe != null) + return probe; + rti = new A.Rti(null, null); + rti._kind = 13; + rti._primary = index; + rti._canonicalRecipe = key; + t1 = A._Universe__installTypeTests(universe, rti); + universe.eC.set(key, t1); + return t1; + }, + _Universe__canonicalRecipeJoin($arguments) { + var s, sep, i, + $length = $arguments.length; + for (s = "", sep = "", i = 0; i < $length; ++i, sep = ",") + s += sep + $arguments[i]._canonicalRecipe; + return s; + }, + _Universe__canonicalRecipeJoinNamed($arguments) { + var s, sep, i, t1, nameSep, + $length = $arguments.length; + for (s = "", sep = "", i = 0; i < $length; i += 3, sep = ",") { + t1 = $arguments[i]; + nameSep = $arguments[i + 1] ? "!" : ":"; + s += sep + t1 + nameSep + $arguments[i + 2]._canonicalRecipe; + } + return s; + }, + _Universe__lookupInterfaceRti(universe, $name, $arguments) { + var probe, rti, t1, + s = $name; + if ($arguments.length > 0) + s += "<" + A._Universe__canonicalRecipeJoin($arguments) + ">"; + probe = universe.eC.get(s); + if (probe != null) + return probe; + rti = new A.Rti(null, null); + rti._kind = 8; + rti._primary = $name; + rti._rest = $arguments; + if ($arguments.length > 0) + rti._precomputed1 = $arguments[0]; + rti._canonicalRecipe = s; + t1 = A._Universe__installTypeTests(universe, rti); + universe.eC.set(s, t1); + return t1; + }, + _Universe__lookupBindingRti(universe, base, $arguments) { + var newBase, newArguments, key, probe, rti, t1; + if (base._kind === 9) { + newBase = base._primary; + newArguments = base._rest.concat($arguments); + } else { + newArguments = $arguments; + newBase = base; + } + key = newBase._canonicalRecipe + (";<" + A._Universe__canonicalRecipeJoin(newArguments) + ">"); + probe = universe.eC.get(key); + if (probe != null) + return probe; + rti = new A.Rti(null, null); + rti._kind = 9; + rti._primary = newBase; + rti._rest = newArguments; + rti._canonicalRecipe = key; + t1 = A._Universe__installTypeTests(universe, rti); + universe.eC.set(key, t1); + return t1; + }, + _Universe__lookupRecordRti(universe, partialShapeTag, fields) { + var rti, t1, + key = "+" + (partialShapeTag + "(" + A._Universe__canonicalRecipeJoin(fields) + ")"), + probe = universe.eC.get(key); + if (probe != null) + return probe; + rti = new A.Rti(null, null); + rti._kind = 10; + rti._primary = partialShapeTag; + rti._rest = fields; + rti._canonicalRecipe = key; + t1 = A._Universe__installTypeTests(universe, rti); + universe.eC.set(key, t1); + return t1; + }, + _Universe__lookupFunctionRti(universe, returnType, parameters) { + var sep, key, probe, rti, t1, + s = returnType._canonicalRecipe, + requiredPositional = parameters._requiredPositional, + requiredPositionalLength = requiredPositional.length, + optionalPositional = parameters._optionalPositional, + optionalPositionalLength = optionalPositional.length, + named = parameters._named, + namedLength = named.length, + recipe = "(" + A._Universe__canonicalRecipeJoin(requiredPositional); + if (optionalPositionalLength > 0) { + sep = requiredPositionalLength > 0 ? "," : ""; + recipe += sep + "[" + A._Universe__canonicalRecipeJoin(optionalPositional) + "]"; + } + if (namedLength > 0) { + sep = requiredPositionalLength > 0 ? "," : ""; + recipe += sep + "{" + A._Universe__canonicalRecipeJoinNamed(named) + "}"; + } + key = s + (recipe + ")"); + probe = universe.eC.get(key); + if (probe != null) + return probe; + rti = new A.Rti(null, null); + rti._kind = 11; + rti._primary = returnType; + rti._rest = parameters; + rti._canonicalRecipe = key; + t1 = A._Universe__installTypeTests(universe, rti); + universe.eC.set(key, t1); + return t1; + }, + _Universe__lookupGenericFunctionRti(universe, baseFunctionType, bounds, normalize) { + var t1, + key = baseFunctionType._canonicalRecipe + ("<" + A._Universe__canonicalRecipeJoin(bounds) + ">"), + probe = universe.eC.get(key); + if (probe != null) + return probe; + t1 = A._Universe__createGenericFunctionRti(universe, baseFunctionType, bounds, key, normalize); + universe.eC.set(key, t1); + return t1; + }, + _Universe__createGenericFunctionRti(universe, baseFunctionType, bounds, key, normalize) { + var $length, typeArguments, count, i, bound, substitutedBase, substitutedBounds, rti; + if (normalize) { + $length = bounds.length; + typeArguments = A._Utils_newArrayOrEmpty($length); + for (count = 0, i = 0; i < $length; ++i) { + bound = bounds[i]; + if (bound._kind === 1) { + typeArguments[i] = bound; + ++count; + } + } + if (count > 0) { + substitutedBase = A._substitute(universe, baseFunctionType, typeArguments, 0); + substitutedBounds = A._substituteArray(universe, bounds, typeArguments, 0); + return A._Universe__lookupGenericFunctionRti(universe, substitutedBase, substitutedBounds, bounds !== substitutedBounds); + } + } + rti = new A.Rti(null, null); + rti._kind = 12; + rti._primary = baseFunctionType; + rti._rest = bounds; + rti._canonicalRecipe = key; + return A._Universe__installTypeTests(universe, rti); + }, + _Parser_create(universe, environment, recipe, normalize) { + return {u: universe, e: environment, r: recipe, s: [], p: 0, n: normalize}; + }, + _Parser_parse(parser) { + var t1, i, ch, u, array, end, item, + source = parser.r, + stack = parser.s; + for (t1 = source.length, i = 0; i < t1;) { + ch = source.charCodeAt(i); + if (ch >= 48 && ch <= 57) + i = A._Parser_handleDigit(i + 1, ch, source, stack); + else if ((((ch | 32) >>> 0) - 97 & 65535) < 26 || ch === 95 || ch === 36 || ch === 124) + i = A._Parser_handleIdentifier(parser, i, source, stack, false); + else if (ch === 46) + i = A._Parser_handleIdentifier(parser, i, source, stack, true); + else { + ++i; + switch (ch) { + case 44: + break; + case 58: + stack.push(false); + break; + case 33: + stack.push(true); + break; + case 59: + stack.push(A._Parser_toType(parser.u, parser.e, stack.pop())); + break; + case 94: + stack.push(A._Universe__lookupGenericFunctionParameterRti(parser.u, stack.pop())); + break; + case 35: + stack.push(A._Universe__lookupTerminalRti(parser.u, 5, "#")); + break; + case 64: + stack.push(A._Universe__lookupTerminalRti(parser.u, 2, "@")); + break; + case 126: + stack.push(A._Universe__lookupTerminalRti(parser.u, 3, "~")); + break; + case 60: + stack.push(parser.p); + parser.p = stack.length; + break; + case 62: + A._Parser_handleTypeArguments(parser, stack); + break; + case 38: + A._Parser_handleExtendedOperations(parser, stack); + break; + case 63: + u = parser.u; + stack.push(A._Universe__lookupQuestionRti(u, A._Parser_toType(u, parser.e, stack.pop()), parser.n)); + break; + case 47: + u = parser.u; + stack.push(A._Universe__lookupFutureOrRti(u, A._Parser_toType(u, parser.e, stack.pop()), parser.n)); + break; + case 40: + stack.push(-3); + stack.push(parser.p); + parser.p = stack.length; + break; + case 41: + A._Parser_handleArguments(parser, stack); + break; + case 91: + stack.push(parser.p); + parser.p = stack.length; + break; + case 93: + array = stack.splice(parser.p); + A._Parser_toTypes(parser.u, parser.e, array); + parser.p = stack.pop(); + stack.push(array); + stack.push(-1); + break; + case 123: + stack.push(parser.p); + parser.p = stack.length; + break; + case 125: + array = stack.splice(parser.p); + A._Parser_toTypesNamed(parser.u, parser.e, array); + parser.p = stack.pop(); + stack.push(array); + stack.push(-2); + break; + case 43: + end = source.indexOf("(", i); + stack.push(source.substring(i, end)); + stack.push(-4); + stack.push(parser.p); + parser.p = stack.length; + i = end + 1; + break; + default: + throw "Bad character " + ch; + } + } + } + item = stack.pop(); + return A._Parser_toType(parser.u, parser.e, item); + }, + _Parser_handleDigit(i, digit, source, stack) { + var t1, ch, + value = digit - 48; + for (t1 = source.length; i < t1; ++i) { + ch = source.charCodeAt(i); + if (!(ch >= 48 && ch <= 57)) + break; + value = value * 10 + (ch - 48); + } + stack.push(value); + return i; + }, + _Parser_handleIdentifier(parser, start, source, stack, hasPeriod) { + var t1, ch, t2, string, environment, recipe, + i = start + 1; + for (t1 = source.length; i < t1; ++i) { + ch = source.charCodeAt(i); + if (ch === 46) { + if (hasPeriod) + break; + hasPeriod = true; + } else { + if (!((((ch | 32) >>> 0) - 97 & 65535) < 26 || ch === 95 || ch === 36 || ch === 124)) + t2 = ch >= 48 && ch <= 57; + else + t2 = true; + if (!t2) + break; + } + } + string = source.substring(start, i); + if (hasPeriod) { + t1 = parser.u; + environment = parser.e; + if (environment._kind === 9) + environment = environment._primary; + recipe = A._Universe_findRule(t1, environment._primary)[string]; + if (recipe == null) + A.throwExpression('No "' + string + '" in "' + A.Rti__getCanonicalRecipe(environment) + '"'); + stack.push(A._Universe_evalInEnvironment(t1, environment, recipe)); + } else + stack.push(string); + return i; + }, + _Parser_handleTypeArguments(parser, stack) { + var base, + universe = parser.u, + $arguments = A._Parser_collectArray(parser, stack), + head = stack.pop(); + if (typeof head == "string") + stack.push(A._Universe__lookupInterfaceRti(universe, head, $arguments)); + else { + base = A._Parser_toType(universe, parser.e, head); + switch (base._kind) { + case 11: + stack.push(A._Universe__lookupGenericFunctionRti(universe, base, $arguments, parser.n)); + break; + default: + stack.push(A._Universe__lookupBindingRti(universe, base, $arguments)); + break; + } + } + }, + _Parser_handleArguments(parser, stack) { + var requiredPositional, returnType, parameters, + universe = parser.u, + head = stack.pop(), + optionalPositional = null, named = null; + if (typeof head == "number") + switch (head) { + case -1: + optionalPositional = stack.pop(); + break; + case -2: + named = stack.pop(); + break; + default: + stack.push(head); + break; + } + else + stack.push(head); + requiredPositional = A._Parser_collectArray(parser, stack); + head = stack.pop(); + switch (head) { + case -3: + head = stack.pop(); + if (optionalPositional == null) + optionalPositional = universe.sEA; + if (named == null) + named = universe.sEA; + returnType = A._Parser_toType(universe, parser.e, head); + parameters = new A._FunctionParameters(); + parameters._requiredPositional = requiredPositional; + parameters._optionalPositional = optionalPositional; + parameters._named = named; + stack.push(A._Universe__lookupFunctionRti(universe, returnType, parameters)); + return; + case -4: + stack.push(A._Universe__lookupRecordRti(universe, stack.pop(), requiredPositional)); + return; + default: + throw A.wrapException(A.AssertionError$("Unexpected state under `()`: " + A.S(head))); + } + }, + _Parser_handleExtendedOperations(parser, stack) { + var $top = stack.pop(); + if (0 === $top) { + stack.push(A._Universe__lookupTerminalRti(parser.u, 1, "0&")); + return; + } + if (1 === $top) { + stack.push(A._Universe__lookupTerminalRti(parser.u, 4, "1&")); + return; + } + throw A.wrapException(A.AssertionError$("Unexpected extended operation " + A.S($top))); + }, + _Parser_collectArray(parser, stack) { + var array = stack.splice(parser.p); + A._Parser_toTypes(parser.u, parser.e, array); + parser.p = stack.pop(); + return array; + }, + _Parser_toType(universe, environment, item) { + if (typeof item == "string") + return A._Universe__lookupInterfaceRti(universe, item, universe.sEA); + else if (typeof item == "number") { + environment.toString; + return A._Parser_indexToType(universe, environment, item); + } else + return item; + }, + _Parser_toTypes(universe, environment, items) { + var i, + $length = items.length; + for (i = 0; i < $length; ++i) + items[i] = A._Parser_toType(universe, environment, items[i]); + }, + _Parser_toTypesNamed(universe, environment, items) { + var i, + $length = items.length; + for (i = 2; i < $length; i += 3) + items[i] = A._Parser_toType(universe, environment, items[i]); + }, + _Parser_indexToType(universe, environment, index) { + var typeArguments, len, + kind = environment._kind; + if (kind === 9) { + if (index === 0) + return environment._primary; + typeArguments = environment._rest; + len = typeArguments.length; + if (index <= len) + return typeArguments[index - 1]; + index -= len; + environment = environment._primary; + kind = environment._kind; + } else if (index === 0) + return environment; + if (kind !== 8) + throw A.wrapException(A.AssertionError$("Indexed base must be an interface type")); + typeArguments = environment._rest; + if (index <= typeArguments.length) + return typeArguments[index - 1]; + throw A.wrapException(A.AssertionError$("Bad index " + index + " for " + environment.toString$0(0))); + }, + isSubtype(universe, s, t) { + var result, + sCache = s._isSubtypeCache; + if (sCache == null) + sCache = s._isSubtypeCache = new Map(); + result = sCache.get(t); + if (result == null) { + result = A._isSubtype(universe, s, null, t, null); + sCache.set(t, result); + } + return result; + }, + _isSubtype(universe, s, sEnv, t, tEnv) { + var sKind, leftTypeVariable, tKind, t1, t2, sBounds, tBounds, sLength, i, sBound, tBound; + if (s === t) + return true; + if (A.isTopType(t)) + return true; + sKind = s._kind; + if (sKind === 4) + return true; + if (A.isTopType(s)) + return false; + if (s._kind === 1) + return true; + leftTypeVariable = sKind === 13; + if (leftTypeVariable) + if (A._isSubtype(universe, sEnv[s._primary], sEnv, t, tEnv)) + return true; + tKind = t._kind; + t1 = type$.Null; + if (s === t1 || s === type$.JSNull) { + if (tKind === 7) + return A._isSubtype(universe, s, sEnv, t._primary, tEnv); + return t === t1 || t === type$.JSNull || tKind === 6; + } + if (t === type$.Object) { + if (sKind === 7) + return A._isSubtype(universe, s._primary, sEnv, t, tEnv); + return sKind !== 6; + } + if (sKind === 7) { + if (!A._isSubtype(universe, s._primary, sEnv, t, tEnv)) + return false; + return A._isSubtype(universe, A.Rti__getFutureFromFutureOr(universe, s), sEnv, t, tEnv); + } + if (sKind === 6) + return A._isSubtype(universe, t1, sEnv, t, tEnv) && A._isSubtype(universe, s._primary, sEnv, t, tEnv); + if (tKind === 7) { + if (A._isSubtype(universe, s, sEnv, t._primary, tEnv)) + return true; + return A._isSubtype(universe, s, sEnv, A.Rti__getFutureFromFutureOr(universe, t), tEnv); + } + if (tKind === 6) + return A._isSubtype(universe, s, sEnv, t1, tEnv) || A._isSubtype(universe, s, sEnv, t._primary, tEnv); + if (leftTypeVariable) + return false; + t1 = sKind !== 11; + if ((!t1 || sKind === 12) && t === type$.Function) + return true; + t2 = sKind === 10; + if (t2 && t === type$.Record) + return true; + if (tKind === 12) { + if (s === type$.JavaScriptFunction) + return true; + if (sKind !== 12) + return false; + sBounds = s._rest; + tBounds = t._rest; + sLength = sBounds.length; + if (sLength !== tBounds.length) + return false; + sEnv = sEnv == null ? sBounds : sBounds.concat(sEnv); + tEnv = tEnv == null ? tBounds : tBounds.concat(tEnv); + for (i = 0; i < sLength; ++i) { + sBound = sBounds[i]; + tBound = tBounds[i]; + if (!A._isSubtype(universe, sBound, sEnv, tBound, tEnv) || !A._isSubtype(universe, tBound, tEnv, sBound, sEnv)) + return false; + } + return A._isFunctionSubtype(universe, s._primary, sEnv, t._primary, tEnv); + } + if (tKind === 11) { + if (s === type$.JavaScriptFunction) + return true; + if (t1) + return false; + return A._isFunctionSubtype(universe, s, sEnv, t, tEnv); + } + if (sKind === 8) { + if (tKind !== 8) + return false; + return A._isInterfaceSubtype(universe, s, sEnv, t, tEnv); + } + if (t2 && tKind === 10) + return A._isRecordSubtype(universe, s, sEnv, t, tEnv); + return false; + }, + _isFunctionSubtype(universe, s, sEnv, t, tEnv) { + var sParameters, tParameters, sRequiredPositional, tRequiredPositional, sRequiredPositionalLength, tRequiredPositionalLength, requiredPositionalDelta, sOptionalPositional, tOptionalPositional, sOptionalPositionalLength, tOptionalPositionalLength, i, t1, sNamed, tNamed, sNamedLength, tNamedLength, sIndex, tIndex, tName, sName, sIsRequired; + if (!A._isSubtype(universe, s._primary, sEnv, t._primary, tEnv)) + return false; + sParameters = s._rest; + tParameters = t._rest; + sRequiredPositional = sParameters._requiredPositional; + tRequiredPositional = tParameters._requiredPositional; + sRequiredPositionalLength = sRequiredPositional.length; + tRequiredPositionalLength = tRequiredPositional.length; + if (sRequiredPositionalLength > tRequiredPositionalLength) + return false; + requiredPositionalDelta = tRequiredPositionalLength - sRequiredPositionalLength; + sOptionalPositional = sParameters._optionalPositional; + tOptionalPositional = tParameters._optionalPositional; + sOptionalPositionalLength = sOptionalPositional.length; + tOptionalPositionalLength = tOptionalPositional.length; + if (sRequiredPositionalLength + sOptionalPositionalLength < tRequiredPositionalLength + tOptionalPositionalLength) + return false; + for (i = 0; i < sRequiredPositionalLength; ++i) { + t1 = sRequiredPositional[i]; + if (!A._isSubtype(universe, tRequiredPositional[i], tEnv, t1, sEnv)) + return false; + } + for (i = 0; i < requiredPositionalDelta; ++i) { + t1 = sOptionalPositional[i]; + if (!A._isSubtype(universe, tRequiredPositional[sRequiredPositionalLength + i], tEnv, t1, sEnv)) + return false; + } + for (i = 0; i < tOptionalPositionalLength; ++i) { + t1 = sOptionalPositional[requiredPositionalDelta + i]; + if (!A._isSubtype(universe, tOptionalPositional[i], tEnv, t1, sEnv)) + return false; + } + sNamed = sParameters._named; + tNamed = tParameters._named; + sNamedLength = sNamed.length; + tNamedLength = tNamed.length; + for (sIndex = 0, tIndex = 0; tIndex < tNamedLength; tIndex += 3) { + tName = tNamed[tIndex]; + for (;;) { + if (sIndex >= sNamedLength) + return false; + sName = sNamed[sIndex]; + sIndex += 3; + if (tName < sName) + return false; + sIsRequired = sNamed[sIndex - 2]; + if (sName < tName) { + if (sIsRequired) + return false; + continue; + } + t1 = tNamed[tIndex + 1]; + if (sIsRequired && !t1) + return false; + t1 = sNamed[sIndex - 1]; + if (!A._isSubtype(universe, tNamed[tIndex + 2], tEnv, t1, sEnv)) + return false; + break; + } + } + while (sIndex < sNamedLength) { + if (sNamed[sIndex + 1]) + return false; + sIndex += 3; + } + return true; + }, + _isInterfaceSubtype(universe, s, sEnv, t, tEnv) { + var rule, recipes, $length, supertypeArgs, i, + sName = s._primary, + tName = t._primary; + while (sName !== tName) { + rule = universe.tR[sName]; + if (rule == null) + return false; + if (typeof rule == "string") { + sName = rule; + continue; + } + recipes = rule[tName]; + if (recipes == null) + return false; + $length = recipes.length; + supertypeArgs = $length > 0 ? new Array($length) : init.typeUniverse.sEA; + for (i = 0; i < $length; ++i) + supertypeArgs[i] = A._Universe_evalInEnvironment(universe, s, recipes[i]); + return A._areArgumentsSubtypes(universe, supertypeArgs, null, sEnv, t._rest, tEnv); + } + return A._areArgumentsSubtypes(universe, s._rest, null, sEnv, t._rest, tEnv); + }, + _areArgumentsSubtypes(universe, sArgs, sVariances, sEnv, tArgs, tEnv) { + var i, + $length = sArgs.length; + for (i = 0; i < $length; ++i) + if (!A._isSubtype(universe, sArgs[i], sEnv, tArgs[i], tEnv)) + return false; + return true; + }, + _isRecordSubtype(universe, s, sEnv, t, tEnv) { + var i, + sFields = s._rest, + tFields = t._rest, + sCount = sFields.length; + if (sCount !== tFields.length) + return false; + if (s._primary !== t._primary) + return false; + for (i = 0; i < sCount; ++i) + if (!A._isSubtype(universe, sFields[i], sEnv, tFields[i], tEnv)) + return false; + return true; + }, + isNullable(t) { + var kind = t._kind, + t1 = true; + if (!(t === type$.Null || t === type$.JSNull)) + if (!A.isTopType(t)) + if (kind !== 6) + t1 = kind === 7 && A.isNullable(t._primary); + return t1; + }, + isTopType(t) { + var kind = t._kind; + return kind === 2 || kind === 3 || kind === 4 || kind === 5 || t === type$.nullable_Object; + }, + _Utils_objectAssign(o, other) { + var i, key, + keys = Object.keys(other), + $length = keys.length; + for (i = 0; i < $length; ++i) { + key = keys[i]; + o[key] = other[key]; + } + }, + _Utils_newArrayOrEmpty($length) { + return $length > 0 ? new Array($length) : init.typeUniverse.sEA; + }, + Rti: function Rti(t0, t1) { + var _ = this; + _._as = t0; + _._is = t1; + _._cachedRuntimeType = _._specializedTestResource = _._isSubtypeCache = _._precomputed1 = null; + _._kind = 0; + _._canonicalRecipe = _._bindCache = _._evalCache = _._rest = _._primary = null; + }, + _FunctionParameters: function _FunctionParameters() { + this._named = this._optionalPositional = this._requiredPositional = null; + }, + _Type: function _Type(t0) { + this._rti = t0; + }, + _Error: function _Error() { + }, + _TypeError: function _TypeError(t0) { + this._message = t0; + }, + _AsyncRun__initializeScheduleImmediate() { + var t1, div, span; + if (self.scheduleImmediate != null) + return A.async__AsyncRun__scheduleImmediateJsOverride$closure(); + if (self.MutationObserver != null && self.document != null) { + t1 = {}; + div = self.document.createElement("div"); + span = self.document.createElement("span"); + t1.storedCallback = null; + new self.MutationObserver(A.convertDartClosureToJS(new A._AsyncRun__initializeScheduleImmediate_internalCallback(t1), 1)).observe(div, {childList: true}); + return new A._AsyncRun__initializeScheduleImmediate_closure(t1, div, span); + } else if (self.setImmediate != null) + return A.async__AsyncRun__scheduleImmediateWithSetImmediate$closure(); + return A.async__AsyncRun__scheduleImmediateWithTimer$closure(); + }, + _AsyncRun__scheduleImmediateJsOverride(callback) { + self.scheduleImmediate(A.convertDartClosureToJS(new A._AsyncRun__scheduleImmediateJsOverride_internalCallback(type$.void_Function._as(callback)), 0)); + }, + _AsyncRun__scheduleImmediateWithSetImmediate(callback) { + self.setImmediate(A.convertDartClosureToJS(new A._AsyncRun__scheduleImmediateWithSetImmediate_internalCallback(type$.void_Function._as(callback)), 0)); + }, + _AsyncRun__scheduleImmediateWithTimer(callback) { + A.Timer__createTimer(B.Duration_0, type$.void_Function._as(callback)); + }, + Timer__createTimer(duration, callback) { + var milliseconds = B.JSInt_methods._tdivFast$1(duration._duration, 1000); + return A._TimerImpl$(milliseconds < 0 ? 0 : milliseconds, callback); + }, + _TimerImpl$(milliseconds, callback) { + var t1 = new A._TimerImpl(); + t1._TimerImpl$2(milliseconds, callback); + return t1; + }, + _TimerImpl$periodic(milliseconds, callback) { + var t1 = new A._TimerImpl(); + t1._TimerImpl$periodic$2(milliseconds, callback); + return t1; + }, + _makeAsyncAwaitCompleter($T) { + return new A._AsyncAwaitCompleter(new A._Future($.Zone__current, $T._eval$1("_Future<0>")), $T._eval$1("_AsyncAwaitCompleter<0>")); + }, + _asyncStartSync(bodyFunction, completer) { + bodyFunction.call$2(0, null); + completer.isSync = true; + return completer._future; + }, + _asyncAwait(object, bodyFunction) { + A._awaitOnObject(object, bodyFunction); + }, + _asyncReturn(object, completer) { + completer.complete$1(object); + }, + _asyncRethrow(object, completer) { + completer.completeError$2(A.unwrapException(object), A.getTraceFromException(object)); + }, + _awaitOnObject(object, bodyFunction) { + var t1, future, + thenCallback = new A._awaitOnObject_closure(bodyFunction), + errorCallback = new A._awaitOnObject_closure0(bodyFunction); + if (object instanceof A._Future) + object._thenAwait$1$2(thenCallback, errorCallback, type$.dynamic); + else { + t1 = type$.dynamic; + if (object instanceof A._Future) + object.then$1$2$onError(thenCallback, errorCallback, t1); + else { + future = new A._Future($.Zone__current, type$._Future_dynamic); + future._state = 8; + future._resultOrListeners = object; + future._thenAwait$1$2(thenCallback, errorCallback, t1); + } + } + }, + _wrapJsFunctionForAsync($function) { + var $protected = function(fn, ERROR) { + return function(errorCode, result) { + while (true) { + try { + fn(errorCode, result); + break; + } catch (error) { + result = error; + errorCode = ERROR; + } + } + }; + }($function, 1); + return $.Zone__current.registerBinaryCallback$3$1(new A._wrapJsFunctionForAsync_closure($protected), type$.void, type$.int, type$.dynamic); + }, + _SyncStarIterator__terminatedBody(_1, _2, _3) { + return 0; + }, + AsyncError_defaultStackTrace(error) { + var stackTrace; + if (type$.Error._is(error)) { + stackTrace = error.get$stackTrace(); + if (stackTrace != null) + return stackTrace; + } + return B._StringStackTrace_OdL; + }, + Future_Future(computation, $T) { + var result = new A._Future($.Zone__current, $T._eval$1("_Future<0>")); + A.Timer_Timer(B.Duration_0, new A.Future_Future_closure(computation, result)); + return result; + }, + Future_Future$sync(computation, $T) { + var error, stackTrace, exception, t1, t2, t3, t4, result = null; + try { + result = computation.call$0(); + } catch (exception) { + error = A.unwrapException(exception); + stackTrace = A.getTraceFromException(exception); + t1 = new A._Future($.Zone__current, $T._eval$1("_Future<0>")); + t2 = error; + t3 = stackTrace; + t4 = A._interceptError(t2, t3); + if (t4 == null) + t2 = new A.AsyncError(t2, t3 == null ? A.AsyncError_defaultStackTrace(t2) : t3); + else + t2 = t4; + t1._asyncCompleteErrorObject$1(t2); + return t1; + } + return $T._eval$1("Future<0>")._is(result) ? result : A._Future$value(result, $T); + }, + Future_Future$value(value, $T) { + var t1 = value == null ? $T._as(value) : value, + t2 = new A._Future($.Zone__current, $T._eval$1("_Future<0>")); + t2._asyncComplete$1(t1); + return t2; + }, + Future_Future$delayed(duration, $T) { + var result; + if (!$T._is(null)) + throw A.wrapException(A.ArgumentError$value(null, "computation", "The type parameter is not nullable")); + result = new A._Future($.Zone__current, $T._eval$1("_Future<0>")); + A.Timer_Timer(duration, new A.Future_Future$delayed_closure(null, result, $T)); + return result; + }, + Future_wait(futures, $T) { + var handleError, future, pos, e, s, t1, t2, exception, t3, t4, _box_0 = {}, cleanUp = null, + eagerError = false, + _future = new A._Future($.Zone__current, $T._eval$1("_Future>")); + _box_0.values = null; + _box_0.remaining = 0; + _box_0.stackTrace = _box_0.error = null; + handleError = new A.Future_wait_handleError(_box_0, cleanUp, eagerError, _future); + try { + for (t1 = J.get$iterator$ax(futures), t2 = type$.Null; t1.moveNext$0();) { + future = t1.get$current(); + pos = _box_0.remaining; + future.then$1$2$onError(new A.Future_wait_closure(_box_0, pos, _future, $T, cleanUp, eagerError), handleError, t2); + ++_box_0.remaining; + } + t1 = _box_0.remaining; + if (t1 === 0) { + t1 = _future; + t1._completeWithValue$1(A._setArrayType([], $T._eval$1("JSArray<0>"))); + return t1; + } + _box_0.values = A.List_List$filled(t1, null, false, $T._eval$1("0?")); + } catch (exception) { + e = A.unwrapException(exception); + s = A.getTraceFromException(exception); + if (_box_0.remaining === 0 || eagerError) { + t1 = _future; + t2 = e; + t3 = s; + t4 = A._interceptError(t2, t3); + if (t4 == null) + t2 = new A.AsyncError(t2, t3 == null ? A.AsyncError_defaultStackTrace(t2) : t3); + else + t2 = t4; + t1._asyncCompleteErrorObject$1(t2); + return t1; + } else { + _box_0.error = e; + _box_0.stackTrace = s; + } + } + return _future; + }, + _interceptError(error, stackTrace) { + var replacement, t1, t2, + zone = $.Zone__current; + if (zone === B.C__RootZone) + return null; + replacement = zone.errorCallback$2(error, stackTrace); + if (replacement == null) + return null; + t1 = replacement.error; + t2 = replacement.stackTrace; + if (type$.Error._is(t1)) + A.Primitives_trySetStackTrace(t1, t2); + return replacement; + }, + _interceptUserError(error, stackTrace) { + var replacement; + if ($.Zone__current !== B.C__RootZone) { + replacement = A._interceptError(error, stackTrace); + if (replacement != null) + return replacement; + } + if (stackTrace == null) + if (type$.Error._is(error)) { + stackTrace = error.get$stackTrace(); + if (stackTrace == null) { + A.Primitives_trySetStackTrace(error, B._StringStackTrace_OdL); + stackTrace = B._StringStackTrace_OdL; + } + } else + stackTrace = B._StringStackTrace_OdL; + else if (type$.Error._is(error)) + A.Primitives_trySetStackTrace(error, stackTrace); + return new A.AsyncError(error, stackTrace); + }, + _Future$zoneValue(value, _zone, $T) { + var t1 = new A._Future(_zone, $T._eval$1("_Future<0>")); + $T._as(value); + t1._state = 8; + t1._resultOrListeners = value; + return t1; + }, + _Future$value(value, $T) { + var t1 = new A._Future($.Zone__current, $T._eval$1("_Future<0>")); + $T._as(value); + t1._state = 8; + t1._resultOrListeners = value; + return t1; + }, + _Future__chainCoreFuture(source, target, sync) { + var t2, t3, ignoreError, listeners, _box_0 = {}, + t1 = _box_0.source = source; + for (t2 = type$._Future_dynamic; t3 = t1._state, (t3 & 4) !== 0; t1 = source) { + source = t2._as(t1._resultOrListeners); + _box_0.source = source; + } + if (t1 === target) { + t2 = A.StackTrace_current(); + target._asyncCompleteErrorObject$1(new A.AsyncError(new A.ArgumentError(true, t1, null, "Cannot complete a future with itself"), t2)); + return; + } + ignoreError = target._state & 1; + t2 = t1._state = t3 | ignoreError; + if ((t2 & 24) === 0) { + listeners = type$.nullable__FutureListener_dynamic_dynamic._as(target._resultOrListeners); + target._state = target._state & 1 | 4; + target._resultOrListeners = t1; + t1._prependListeners$1(listeners); + return; + } + if (!sync) + if (target._resultOrListeners == null) + t1 = (t2 & 16) === 0 || ignoreError !== 0; + else + t1 = false; + else + t1 = true; + if (t1) { + listeners = target._removeListeners$0(); + target._cloneResult$1(_box_0.source); + A._Future__propagateToListeners(target, listeners); + return; + } + target._state ^= 2; + target._zone.scheduleMicrotask$1(new A._Future__chainCoreFuture_closure(_box_0, target)); + }, + _Future__propagateToListeners(source, listeners) { + var t2, t3, _box_0, t4, t5, hasError, asyncError, nextListener, nextListener0, sourceResult, t6, zone, oldZone, result, current, _box_1 = {}, + t1 = _box_1.source = source; + for (t2 = type$.AsyncError, t3 = type$.nullable__FutureListener_dynamic_dynamic;;) { + _box_0 = {}; + t4 = t1._state; + t5 = (t4 & 16) === 0; + hasError = !t5; + if (listeners == null) { + if (hasError && (t4 & 1) === 0) { + asyncError = t2._as(t1._resultOrListeners); + t1._zone.handleUncaughtError$2(asyncError.error, asyncError.stackTrace); + } + return; + } + _box_0.listener = listeners; + nextListener = listeners._nextListener; + for (t1 = listeners; nextListener != null; t1 = nextListener, nextListener = nextListener0) { + t1._nextListener = null; + A._Future__propagateToListeners(_box_1.source, t1); + _box_0.listener = nextListener; + nextListener0 = nextListener._nextListener; + } + t4 = _box_1.source; + sourceResult = t4._resultOrListeners; + _box_0.listenerHasError = hasError; + _box_0.listenerValueOrError = sourceResult; + if (t5) { + t6 = t1.state; + t6 = (t6 & 1) !== 0 || (t6 & 15) === 8; + } else + t6 = true; + if (t6) { + zone = t1.result._zone; + if (hasError) { + t1 = t4._zone; + t1 = !(t1 === zone || t1.get$errorZone() === zone.get$errorZone()); + } else + t1 = false; + if (t1) { + t1 = _box_1.source; + asyncError = t2._as(t1._resultOrListeners); + t1._zone.handleUncaughtError$2(asyncError.error, asyncError.stackTrace); + return; + } + oldZone = $.Zone__current; + if (oldZone !== zone) + $.Zone__current = zone; + else + oldZone = null; + t1 = _box_0.listener.state; + if ((t1 & 15) === 8) + new A._Future__propagateToListeners_handleWhenCompleteCallback(_box_0, _box_1, hasError).call$0(); + else if (t5) { + if ((t1 & 1) !== 0) + new A._Future__propagateToListeners_handleValueCallback(_box_0, sourceResult).call$0(); + } else if ((t1 & 2) !== 0) + new A._Future__propagateToListeners_handleError(_box_1, _box_0).call$0(); + if (oldZone != null) + $.Zone__current = oldZone; + t1 = _box_0.listenerValueOrError; + if (t1 instanceof A._Future) { + t4 = _box_0.listener.$ti; + t4 = t4._eval$1("Future<2>")._is(t1) || !t4._rest[1]._is(t1); + } else + t4 = false; + if (t4) { + result = _box_0.listener.result; + if ((t1._state & 24) !== 0) { + current = t3._as(result._resultOrListeners); + result._resultOrListeners = null; + listeners = result._reverseListeners$1(current); + result._state = t1._state & 30 | result._state & 1; + result._resultOrListeners = t1._resultOrListeners; + _box_1.source = t1; + continue; + } else + A._Future__chainCoreFuture(t1, result, true); + return; + } + } + result = _box_0.listener.result; + current = t3._as(result._resultOrListeners); + result._resultOrListeners = null; + listeners = result._reverseListeners$1(current); + t1 = _box_0.listenerHasError; + t4 = _box_0.listenerValueOrError; + if (!t1) { + result.$ti._precomputed1._as(t4); + result._state = 8; + result._resultOrListeners = t4; + } else { + t2._as(t4); + result._state = result._state & 1 | 16; + result._resultOrListeners = t4; + } + _box_1.source = result; + t1 = result; + } + }, + _registerErrorHandler(errorHandler, zone) { + if (type$.dynamic_Function_Object_StackTrace._is(errorHandler)) + return zone.registerBinaryCallback$3$1(errorHandler, type$.dynamic, type$.Object, type$.StackTrace); + if (type$.dynamic_Function_Object._is(errorHandler)) + return zone.registerUnaryCallback$2$1(errorHandler, type$.dynamic, type$.Object); + throw A.wrapException(A.ArgumentError$value(errorHandler, "onError", string$.Error_)); + }, + _microtaskLoop() { + var entry, next; + for (entry = $._nextCallback; entry != null; entry = $._nextCallback) { + $._lastPriorityCallback = null; + next = entry.next; + $._nextCallback = next; + if (next == null) + $._lastCallback = null; + entry.callback.call$0(); + } + }, + _startMicrotaskLoop() { + $._isInCallbackLoop = true; + try { + A._microtaskLoop(); + } finally { + $._lastPriorityCallback = null; + $._isInCallbackLoop = false; + if ($._nextCallback != null) + $.$get$_AsyncRun__scheduleImmediateClosure().call$1(A.async___startMicrotaskLoop$closure()); + } + }, + _scheduleAsyncCallback(callback) { + var newEntry = new A._AsyncCallbackEntry(callback), + lastCallback = $._lastCallback; + if (lastCallback == null) { + $._nextCallback = $._lastCallback = newEntry; + if (!$._isInCallbackLoop) + $.$get$_AsyncRun__scheduleImmediateClosure().call$1(A.async___startMicrotaskLoop$closure()); + } else + $._lastCallback = lastCallback.next = newEntry; + }, + _schedulePriorityAsyncCallback(callback) { + var entry, lastPriorityCallback, next, + t1 = $._nextCallback; + if (t1 == null) { + A._scheduleAsyncCallback(callback); + $._lastPriorityCallback = $._lastCallback; + return; + } + entry = new A._AsyncCallbackEntry(callback); + lastPriorityCallback = $._lastPriorityCallback; + if (lastPriorityCallback == null) { + entry.next = t1; + $._nextCallback = $._lastPriorityCallback = entry; + } else { + next = lastPriorityCallback.next; + entry.next = next; + $._lastPriorityCallback = lastPriorityCallback.next = entry; + if (next == null) + $._lastCallback = entry; + } + }, + scheduleMicrotask(callback) { + var t1, _null = null, + currentZone = $.Zone__current; + if (B.C__RootZone === currentZone) { + A._rootScheduleMicrotask(_null, _null, B.C__RootZone, callback); + return; + } + if (B.C__RootZone === currentZone.get$_scheduleMicrotask().zone) + t1 = B.C__RootZone.get$errorZone() === currentZone.get$errorZone(); + else + t1 = false; + if (t1) { + A._rootScheduleMicrotask(_null, _null, currentZone, currentZone.registerCallback$1$1(callback, type$.void)); + return; + } + t1 = $.Zone__current; + t1.scheduleMicrotask$1(t1.bindCallbackGuarded$1(callback)); + }, + StreamIterator_StreamIterator(stream, $T) { + return new A._StreamIterator(A.checkNotNullable(stream, "stream", type$.Object), $T._eval$1("_StreamIterator<0>")); + }, + StreamController_StreamController(onCancel, onListen, sync, $T) { + var _null = null; + return sync ? new A._SyncStreamController(onListen, _null, _null, onCancel, $T._eval$1("_SyncStreamController<0>")) : new A._AsyncStreamController(onListen, _null, _null, onCancel, $T._eval$1("_AsyncStreamController<0>")); + }, + _runGuarded(notificationHandler) { + var e, s, exception; + if (notificationHandler == null) + return; + try { + notificationHandler.call$0(); + } catch (exception) { + e = A.unwrapException(exception); + s = A.getTraceFromException(exception); + $.Zone__current.handleUncaughtError$2(e, s); + } + }, + _ControllerSubscription$(_controller, onData, onError, onDone, cancelOnError, $T) { + var t1 = $.Zone__current, + t2 = cancelOnError ? 1 : 0, + t3 = onError != null ? 32 : 0, + t4 = A._BufferingStreamSubscription__registerDataHandler(t1, onData, $T), + t5 = A._BufferingStreamSubscription__registerErrorHandler(t1, onError), + t6 = onDone == null ? A.async___nullDoneHandler$closure() : onDone; + return new A._ControllerSubscription(_controller, t4, t5, t1.registerCallback$1$1(t6, type$.void), t1, t2 | t3, $T._eval$1("_ControllerSubscription<0>")); + }, + _BufferingStreamSubscription__registerDataHandler(zone, handleData, $T) { + var t1 = handleData == null ? A.async___nullDataHandler$closure() : handleData; + return zone.registerUnaryCallback$2$1(t1, type$.void, $T); + }, + _BufferingStreamSubscription__registerErrorHandler(zone, handleError) { + if (handleError == null) + handleError = A.async___nullErrorHandler$closure(); + if (type$.void_Function_Object_StackTrace._is(handleError)) + return zone.registerBinaryCallback$3$1(handleError, type$.dynamic, type$.Object, type$.StackTrace); + if (type$.void_Function_Object._is(handleError)) + return zone.registerUnaryCallback$2$1(handleError, type$.dynamic, type$.Object); + throw A.wrapException(A.ArgumentError$("handleError callback must take either an Object (the error), or both an Object (the error) and a StackTrace.", null)); + }, + _nullDataHandler(value) { + }, + _nullErrorHandler(error, stackTrace) { + A._asObject(error); + type$.StackTrace._as(stackTrace); + $.Zone__current.handleUncaughtError$2(error, stackTrace); + }, + _nullDoneHandler() { + }, + _runUserCode(userCode, onSuccess, onError, $T) { + var error, stackTrace, replacement, exception; + try { + onSuccess.call$1(userCode.call$0()); + } catch (exception) { + error = A.unwrapException(exception); + stackTrace = A.getTraceFromException(exception); + replacement = A._interceptError(error, stackTrace); + if (replacement != null) + onError.call$2(replacement.error, replacement.stackTrace); + else + onError.call$2(error, stackTrace); + } + }, + _cancelAndError(subscription, future, error) { + var cancelFuture = subscription.cancel$0(); + if (cancelFuture !== $.$get$Future__nullFuture()) + cancelFuture.whenComplete$1(new A._cancelAndError_closure(future, error)); + else + future._completeErrorObject$1(error); + }, + _cancelAndErrorClosure(subscription, future) { + return new A._cancelAndErrorClosure_closure(subscription, future); + }, + _cancelAndValue(subscription, future, value) { + var cancelFuture = subscription.cancel$0(); + if (cancelFuture !== $.$get$Future__nullFuture()) + cancelFuture.whenComplete$1(new A._cancelAndValue_closure(future, value)); + else + future._complete$1(value); + }, + _StreamHandlerTransformer$(handleDone, $S, $T) { + return new A._StreamHandlerTransformer(new A._StreamHandlerTransformer_closure(null, null, handleDone, $T, $S), $S._eval$1("@<0>")._bind$1($T)._eval$1("_StreamHandlerTransformer<1,2>")); + }, + Timer_Timer(duration, callback) { + var t1 = $.Zone__current; + if (t1 === B.C__RootZone) + return t1.createTimer$2(duration, callback); + return t1.createTimer$2(duration, t1.bindCallbackGuarded$1(callback)); + }, + _rootHandleUncaughtError($self, $parent, zone, error, stackTrace) { + A._rootHandleError(A._asObject(error), type$.StackTrace._as(stackTrace)); + }, + _rootHandleError(error, stackTrace) { + A._schedulePriorityAsyncCallback(new A._rootHandleError_closure(error, stackTrace)); + }, + _rootRun($self, $parent, zone, f, $R) { + var old, t1; + type$.nullable_Zone._as($self); + type$.nullable_ZoneDelegate._as($parent); + type$.Zone._as(zone); + $R._eval$1("0()")._as(f); + t1 = $.Zone__current; + if (t1 === zone) + return f.call$0(); + $.Zone__current = zone; + old = t1; + try { + t1 = f.call$0(); + return t1; + } finally { + $.Zone__current = old; + } + }, + _rootRunUnary($self, $parent, zone, f, arg, $R, $T) { + var old, t1; + type$.nullable_Zone._as($self); + type$.nullable_ZoneDelegate._as($parent); + type$.Zone._as(zone); + $R._eval$1("@<0>")._bind$1($T)._eval$1("1(2)")._as(f); + $T._as(arg); + t1 = $.Zone__current; + if (t1 === zone) + return f.call$1(arg); + $.Zone__current = zone; + old = t1; + try { + t1 = f.call$1(arg); + return t1; + } finally { + $.Zone__current = old; + } + }, + _rootRunBinary($self, $parent, zone, f, arg1, arg2, $R, $T1, $T2) { + var old, t1; + type$.nullable_Zone._as($self); + type$.nullable_ZoneDelegate._as($parent); + type$.Zone._as(zone); + $R._eval$1("@<0>")._bind$1($T1)._bind$1($T2)._eval$1("1(2,3)")._as(f); + $T1._as(arg1); + $T2._as(arg2); + t1 = $.Zone__current; + if (t1 === zone) + return f.call$2(arg1, arg2); + $.Zone__current = zone; + old = t1; + try { + t1 = f.call$2(arg1, arg2); + return t1; + } finally { + $.Zone__current = old; + } + }, + _rootRegisterCallback($self, $parent, zone, f, $R) { + return $R._eval$1("0()")._as(f); + }, + _rootRegisterUnaryCallback($self, $parent, zone, f, $R, $T) { + return $R._eval$1("@<0>")._bind$1($T)._eval$1("1(2)")._as(f); + }, + _rootRegisterBinaryCallback($self, $parent, zone, f, $R, $T1, $T2) { + return $R._eval$1("@<0>")._bind$1($T1)._bind$1($T2)._eval$1("1(2,3)")._as(f); + }, + _rootErrorCallback($self, $parent, zone, error, stackTrace) { + A._asObject(error); + type$.nullable_StackTrace._as(stackTrace); + return null; + }, + _rootScheduleMicrotask($self, $parent, zone, f) { + var t1, t2; + type$.void_Function._as(f); + if (B.C__RootZone !== zone) { + t1 = B.C__RootZone.get$errorZone(); + t2 = zone.get$errorZone(); + f = t1 !== t2 ? zone.bindCallbackGuarded$1(f) : zone.bindCallback$1$1(f, type$.void); + } + A._scheduleAsyncCallback(f); + }, + _rootCreateTimer($self, $parent, zone, duration, callback) { + type$.Duration._as(duration); + type$.void_Function._as(callback); + return A.Timer__createTimer(duration, B.C__RootZone !== zone ? zone.bindCallback$1$1(callback, type$.void) : callback); + }, + _rootCreatePeriodicTimer($self, $parent, zone, duration, callback) { + var milliseconds; + type$.Duration._as(duration); + type$.void_Function_Timer._as(callback); + if (B.C__RootZone !== zone) + callback = zone.bindUnaryCallback$2$1(callback, type$.void, type$.Timer); + milliseconds = B.JSInt_methods._tdivFast$1(duration._duration, 1000); + return A._TimerImpl$periodic(milliseconds < 0 ? 0 : milliseconds, callback); + }, + _rootPrint($self, $parent, zone, line) { + A.printString(A._asString(line)); + }, + _printToZone(line) { + $.Zone__current.print$1(line); + }, + _rootFork($self, $parent, zone, specification, zoneValues) { + var valueMap, t1, handleUncaughtError; + type$.nullable_ZoneSpecification._as(specification); + type$.nullable_Map_of_nullable_Object_and_nullable_Object._as(zoneValues); + $.printToZone = A.async___printToZone$closure(); + if (specification == null) + specification = B._ZoneSpecification_Ipa; + if (zoneValues == null) + valueMap = zone.get$_map(); + else { + t1 = type$.nullable_Object; + valueMap = A.HashMap_HashMap$from(zoneValues, t1, t1); + } + t1 = new A._CustomZone(zone.get$_run(), zone.get$_runUnary(), zone.get$_runBinary(), zone.get$_registerCallback(), zone.get$_registerUnaryCallback(), zone.get$_registerBinaryCallback(), zone.get$_errorCallback(), zone.get$_scheduleMicrotask(), zone.get$_createTimer(), zone.get$_createPeriodicTimer(), zone.get$_print(), zone.get$_fork(), zone.get$_handleUncaughtError(), zone, valueMap); + handleUncaughtError = specification.handleUncaughtError; + if (handleUncaughtError != null) + t1._handleUncaughtError = new A._ZoneFunction(t1, handleUncaughtError, type$._ZoneFunction_of_void_Function_Zone_ZoneDelegate_Zone_Object_StackTrace); + return t1; + }, + runZoned(body, zoneValues, $R) { + return A._runZoned(body, zoneValues, null, $R); + }, + _runZoned(body, zoneValues, specification, $R) { + return $.Zone__current.fork$2$specification$zoneValues(specification, zoneValues).run$1$1(body, $R); + }, + _AsyncRun__initializeScheduleImmediate_internalCallback: function _AsyncRun__initializeScheduleImmediate_internalCallback(t0) { + this._box_0 = t0; + }, + _AsyncRun__initializeScheduleImmediate_closure: function _AsyncRun__initializeScheduleImmediate_closure(t0, t1, t2) { + this._box_0 = t0; + this.div = t1; + this.span = t2; + }, + _AsyncRun__scheduleImmediateJsOverride_internalCallback: function _AsyncRun__scheduleImmediateJsOverride_internalCallback(t0) { + this.callback = t0; + }, + _AsyncRun__scheduleImmediateWithSetImmediate_internalCallback: function _AsyncRun__scheduleImmediateWithSetImmediate_internalCallback(t0) { + this.callback = t0; + }, + _TimerImpl: function _TimerImpl() { + this._tick = 0; + }, + _TimerImpl_internalCallback: function _TimerImpl_internalCallback(t0, t1) { + this.$this = t0; + this.callback = t1; + }, + _TimerImpl$periodic_closure: function _TimerImpl$periodic_closure(t0, t1, t2, t3) { + var _ = this; + _.$this = t0; + _.milliseconds = t1; + _.start = t2; + _.callback = t3; + }, + _AsyncAwaitCompleter: function _AsyncAwaitCompleter(t0, t1) { + this._future = t0; + this.isSync = false; + this.$ti = t1; + }, + _awaitOnObject_closure: function _awaitOnObject_closure(t0) { + this.bodyFunction = t0; + }, + _awaitOnObject_closure0: function _awaitOnObject_closure0(t0) { + this.bodyFunction = t0; + }, + _wrapJsFunctionForAsync_closure: function _wrapJsFunctionForAsync_closure(t0) { + this.$protected = t0; + }, + _SyncStarIterator: function _SyncStarIterator(t0, t1) { + var _ = this; + _._body = t0; + _._suspendedBodies = _._nestedIterator = _._datum = _._async$_current = null; + _.$ti = t1; + }, + _SyncStarIterable: function _SyncStarIterable(t0, t1) { + this._outerHelper = t0; + this.$ti = t1; + }, + AsyncError: function AsyncError(t0, t1) { + this.error = t0; + this.stackTrace = t1; + }, + _BroadcastStream: function _BroadcastStream(t0, t1) { + this._controller = t0; + this.$ti = t1; + }, + _BroadcastSubscription: function _BroadcastSubscription(t0, t1, t2, t3, t4, t5, t6) { + var _ = this; + _._eventState = 0; + _._async$_previous = _._async$_next = null; + _._controller = t0; + _._async$_onData = t1; + _._onError = t2; + _._onDone = t3; + _._zone = t4; + _._state = t5; + _._pending = _._cancelFuture = null; + _.$ti = t6; + }, + _BroadcastStreamController: function _BroadcastStreamController() { + }, + _SyncBroadcastStreamController: function _SyncBroadcastStreamController(t0, t1, t2) { + var _ = this; + _.onListen = t0; + _.onCancel = t1; + _._state = 0; + _._doneFuture = _._addStreamState = _._lastSubscription = _._firstSubscription = null; + _.$ti = t2; + }, + _SyncBroadcastStreamController__sendData_closure: function _SyncBroadcastStreamController__sendData_closure(t0, t1) { + this.$this = t0; + this.data = t1; + }, + _SyncBroadcastStreamController__sendError_closure: function _SyncBroadcastStreamController__sendError_closure(t0, t1, t2) { + this.$this = t0; + this.error = t1; + this.stackTrace = t2; + }, + _SyncBroadcastStreamController__sendDone_closure: function _SyncBroadcastStreamController__sendDone_closure(t0) { + this.$this = t0; + }, + Future_Future_closure: function Future_Future_closure(t0, t1) { + this.computation = t0; + this.result = t1; + }, + Future_Future$delayed_closure: function Future_Future$delayed_closure(t0, t1, t2) { + this.computation = t0; + this.result = t1; + this.T = t2; + }, + Future_wait_handleError: function Future_wait_handleError(t0, t1, t2, t3) { + var _ = this; + _._box_0 = t0; + _.cleanUp = t1; + _.eagerError = t2; + _._future = t3; + }, + Future_wait_closure: function Future_wait_closure(t0, t1, t2, t3, t4, t5) { + var _ = this; + _._box_0 = t0; + _.pos = t1; + _._future = t2; + _.T = t3; + _.cleanUp = t4; + _.eagerError = t5; + }, + _Completer: function _Completer() { + }, + _AsyncCompleter: function _AsyncCompleter(t0, t1) { + this.future = t0; + this.$ti = t1; + }, + _SyncCompleter: function _SyncCompleter(t0, t1) { + this.future = t0; + this.$ti = t1; + }, + _FutureListener: function _FutureListener(t0, t1, t2, t3, t4) { + var _ = this; + _._nextListener = null; + _.result = t0; + _.state = t1; + _.callback = t2; + _.errorCallback = t3; + _.$ti = t4; + }, + _Future: function _Future(t0, t1) { + var _ = this; + _._state = 0; + _._zone = t0; + _._resultOrListeners = null; + _.$ti = t1; + }, + _Future__addListener_closure: function _Future__addListener_closure(t0, t1) { + this.$this = t0; + this.listener = t1; + }, + _Future__prependListeners_closure: function _Future__prependListeners_closure(t0, t1) { + this._box_0 = t0; + this.$this = t1; + }, + _Future__chainCoreFuture_closure: function _Future__chainCoreFuture_closure(t0, t1) { + this._box_0 = t0; + this.target = t1; + }, + _Future__asyncCompleteWithValue_closure: function _Future__asyncCompleteWithValue_closure(t0, t1) { + this.$this = t0; + this.value = t1; + }, + _Future__asyncCompleteErrorObject_closure: function _Future__asyncCompleteErrorObject_closure(t0, t1) { + this.$this = t0; + this.error = t1; + }, + _Future__propagateToListeners_handleWhenCompleteCallback: function _Future__propagateToListeners_handleWhenCompleteCallback(t0, t1, t2) { + this._box_0 = t0; + this._box_1 = t1; + this.hasError = t2; + }, + _Future__propagateToListeners_handleWhenCompleteCallback_closure: function _Future__propagateToListeners_handleWhenCompleteCallback_closure(t0, t1) { + this.joinedResult = t0; + this.originalSource = t1; + }, + _Future__propagateToListeners_handleWhenCompleteCallback_closure0: function _Future__propagateToListeners_handleWhenCompleteCallback_closure0(t0) { + this.joinedResult = t0; + }, + _Future__propagateToListeners_handleValueCallback: function _Future__propagateToListeners_handleValueCallback(t0, t1) { + this._box_0 = t0; + this.sourceResult = t1; + }, + _Future__propagateToListeners_handleError: function _Future__propagateToListeners_handleError(t0, t1) { + this._box_1 = t0; + this._box_0 = t1; + }, + _AsyncCallbackEntry: function _AsyncCallbackEntry(t0) { + this.callback = t0; + this.next = null; + }, + Stream: function Stream() { + }, + Stream_length_closure: function Stream_length_closure(t0, t1) { + this._box_0 = t0; + this.$this = t1; + }, + Stream_length_closure0: function Stream_length_closure0(t0, t1) { + this._box_0 = t0; + this.future = t1; + }, + Stream_first_closure: function Stream_first_closure(t0) { + this.future = t0; + }, + Stream_first_closure0: function Stream_first_closure0(t0, t1, t2) { + this.$this = t0; + this.subscription = t1; + this.future = t2; + }, + Stream_firstWhere_closure: function Stream_firstWhere_closure(t0, t1, t2) { + this.$this = t0; + this.orElse = t1; + this.future = t2; + }, + Stream_firstWhere_closure0: function Stream_firstWhere_closure0(t0, t1, t2, t3) { + var _ = this; + _.$this = t0; + _.test = t1; + _.subscription = t2; + _.future = t3; + }, + Stream_firstWhere__closure: function Stream_firstWhere__closure(t0, t1) { + this.test = t0; + this.value = t1; + }, + Stream_firstWhere__closure0: function Stream_firstWhere__closure0(t0, t1, t2) { + this.subscription = t0; + this.future = t1; + this.value = t2; + }, + StreamTransformerBase: function StreamTransformerBase() { + }, + _StreamController: function _StreamController() { + }, + _StreamController__subscribe_closure: function _StreamController__subscribe_closure(t0) { + this.$this = t0; + }, + _StreamController__recordCancel_complete: function _StreamController__recordCancel_complete(t0) { + this.$this = t0; + }, + _SyncStreamControllerDispatch: function _SyncStreamControllerDispatch() { + }, + _AsyncStreamControllerDispatch: function _AsyncStreamControllerDispatch() { + }, + _AsyncStreamController: function _AsyncStreamController(t0, t1, t2, t3, t4) { + var _ = this; + _._varData = null; + _._state = 0; + _._doneFuture = null; + _.onListen = t0; + _.onPause = t1; + _.onResume = t2; + _.onCancel = t3; + _.$ti = t4; + }, + _SyncStreamController: function _SyncStreamController(t0, t1, t2, t3, t4) { + var _ = this; + _._varData = null; + _._state = 0; + _._doneFuture = null; + _.onListen = t0; + _.onPause = t1; + _.onResume = t2; + _.onCancel = t3; + _.$ti = t4; + }, + _ControllerStream: function _ControllerStream(t0, t1) { + this._controller = t0; + this.$ti = t1; + }, + _ControllerSubscription: function _ControllerSubscription(t0, t1, t2, t3, t4, t5, t6) { + var _ = this; + _._controller = t0; + _._async$_onData = t1; + _._onError = t2; + _._onDone = t3; + _._zone = t4; + _._state = t5; + _._pending = _._cancelFuture = null; + _.$ti = t6; + }, + _StreamSinkWrapper: function _StreamSinkWrapper(t0, t1) { + this._async$_target = t0; + this.$ti = t1; + }, + _BufferingStreamSubscription: function _BufferingStreamSubscription() { + }, + _BufferingStreamSubscription__sendError_sendError: function _BufferingStreamSubscription__sendError_sendError(t0, t1, t2) { + this.$this = t0; + this.error = t1; + this.stackTrace = t2; + }, + _BufferingStreamSubscription__sendDone_sendDone: function _BufferingStreamSubscription__sendDone_sendDone(t0) { + this.$this = t0; + }, + _StreamImpl: function _StreamImpl() { + }, + _DelayedEvent: function _DelayedEvent() { + }, + _DelayedData: function _DelayedData(t0, t1) { + this.value = t0; + this.next = null; + this.$ti = t1; + }, + _DelayedError: function _DelayedError(t0, t1) { + this.error = t0; + this.stackTrace = t1; + this.next = null; + }, + _DelayedDone: function _DelayedDone() { + }, + _PendingEvents: function _PendingEvents(t0) { + var _ = this; + _._state = 0; + _.lastPendingEvent = _.firstPendingEvent = null; + _.$ti = t0; + }, + _PendingEvents_schedule_closure: function _PendingEvents_schedule_closure(t0, t1) { + this.$this = t0; + this.dispatch = t1; + }, + _DoneStreamSubscription: function _DoneStreamSubscription(t0, t1) { + var _ = this; + _._state = 1; + _._zone = t0; + _._onDone = null; + _.$ti = t1; + }, + _StreamIterator: function _StreamIterator(t0, t1) { + var _ = this; + _._subscription = null; + _._stateData = t0; + _._async$_hasValue = false; + _.$ti = t1; + }, + _cancelAndError_closure: function _cancelAndError_closure(t0, t1) { + this.future = t0; + this.error = t1; + }, + _cancelAndErrorClosure_closure: function _cancelAndErrorClosure_closure(t0, t1) { + this.subscription = t0; + this.future = t1; + }, + _cancelAndValue_closure: function _cancelAndValue_closure(t0, t1) { + this.future = t0; + this.value = t1; + }, + _ForwardingStream: function _ForwardingStream() { + }, + _ForwardingStreamSubscription: function _ForwardingStreamSubscription(t0, t1, t2, t3, t4, t5, t6) { + var _ = this; + _._stream = t0; + _._subscription = null; + _._async$_onData = t1; + _._onError = t2; + _._onDone = t3; + _._zone = t4; + _._state = t5; + _._pending = _._cancelFuture = null; + _.$ti = t6; + }, + _MapStream: function _MapStream(t0, t1, t2) { + this._transform = t0; + this._async$_source = t1; + this.$ti = t2; + }, + _EventSinkWrapper: function _EventSinkWrapper(t0, t1) { + this._async$_sink = t0; + this.$ti = t1; + }, + _SinkTransformerStreamSubscription: function _SinkTransformerStreamSubscription(t0, t1, t2, t3, t4, t5) { + var _ = this; + _.___SinkTransformerStreamSubscription__transformerSink_A = $; + _._subscription = null; + _._async$_onData = t0; + _._onError = t1; + _._onDone = t2; + _._zone = t3; + _._state = t4; + _._pending = _._cancelFuture = null; + _.$ti = t5; + }, + _StreamSinkTransformer: function _StreamSinkTransformer() { + }, + _BoundSinkStream: function _BoundSinkStream(t0, t1, t2) { + this._sinkMapper = t0; + this._stream = t1; + this.$ti = t2; + }, + _HandlerEventSink: function _HandlerEventSink(t0, t1, t2, t3, t4) { + var _ = this; + _._handleData = t0; + _._handleError = t1; + _._handleDone = t2; + _._async$_sink = t3; + _.$ti = t4; + }, + _StreamHandlerTransformer: function _StreamHandlerTransformer(t0, t1) { + this._sinkMapper = t0; + this.$ti = t1; + }, + _StreamHandlerTransformer_closure: function _StreamHandlerTransformer_closure(t0, t1, t2, t3, t4) { + var _ = this; + _.handleData = t0; + _.handleError = t1; + _.handleDone = t2; + _.T = t3; + _.S = t4; + }, + _ZoneFunction: function _ZoneFunction(t0, t1, t2) { + this.zone = t0; + this.$function = t1; + this.$ti = t2; + }, + _ZoneSpecification: function _ZoneSpecification(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12) { + var _ = this; + _.handleUncaughtError = t0; + _.run = t1; + _.runUnary = t2; + _.runBinary = t3; + _.registerCallback = t4; + _.registerUnaryCallback = t5; + _.registerBinaryCallback = t6; + _.errorCallback = t7; + _.scheduleMicrotask = t8; + _.createTimer = t9; + _.createPeriodicTimer = t10; + _.print = t11; + _.fork = t12; + }, + _ZoneDelegate: function _ZoneDelegate(t0) { + this._delegationTarget = t0; + }, + _Zone: function _Zone() { + }, + _CustomZone: function _CustomZone(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14) { + var _ = this; + _._run = t0; + _._runUnary = t1; + _._runBinary = t2; + _._registerCallback = t3; + _._registerUnaryCallback = t4; + _._registerBinaryCallback = t5; + _._errorCallback = t6; + _._scheduleMicrotask = t7; + _._createTimer = t8; + _._createPeriodicTimer = t9; + _._print = t10; + _._fork = t11; + _._handleUncaughtError = t12; + _._delegateCache = null; + _.parent = t13; + _._map = t14; + }, + _CustomZone_bindCallback_closure: function _CustomZone_bindCallback_closure(t0, t1, t2) { + this.$this = t0; + this.registered = t1; + this.R = t2; + }, + _CustomZone_bindUnaryCallback_closure: function _CustomZone_bindUnaryCallback_closure(t0, t1, t2, t3) { + var _ = this; + _.$this = t0; + _.registered = t1; + _.T = t2; + _.R = t3; + }, + _CustomZone_bindCallbackGuarded_closure: function _CustomZone_bindCallbackGuarded_closure(t0, t1) { + this.$this = t0; + this.registered = t1; + }, + _CustomZone_bindUnaryCallbackGuarded_closure: function _CustomZone_bindUnaryCallbackGuarded_closure(t0, t1, t2) { + this.$this = t0; + this.registered = t1; + this.T = t2; + }, + _rootHandleError_closure: function _rootHandleError_closure(t0, t1) { + this.error = t0; + this.stackTrace = t1; + }, + _RootZone: function _RootZone() { + }, + _RootZone_bindCallback_closure: function _RootZone_bindCallback_closure(t0, t1, t2) { + this.$this = t0; + this.f = t1; + this.R = t2; + }, + _RootZone_bindUnaryCallback_closure: function _RootZone_bindUnaryCallback_closure(t0, t1, t2, t3) { + var _ = this; + _.$this = t0; + _.f = t1; + _.T = t2; + _.R = t3; + }, + _RootZone_bindCallbackGuarded_closure: function _RootZone_bindCallbackGuarded_closure(t0, t1) { + this.$this = t0; + this.f = t1; + }, + _RootZone_bindUnaryCallbackGuarded_closure: function _RootZone_bindUnaryCallbackGuarded_closure(t0, t1, t2) { + this.$this = t0; + this.f = t1; + this.T = t2; + }, + HashMap_HashMap($K, $V) { + return new A._HashMap($K._eval$1("@<0>")._bind$1($V)._eval$1("_HashMap<1,2>")); + }, + _HashMap__getTableEntry(table, key) { + var entry = table[key]; + return entry === table ? null : entry; + }, + _HashMap__setTableEntry(table, key, value) { + if (value == null) + table[key] = table; + else + table[key] = value; + }, + _HashMap__newHashTable() { + var table = Object.create(null); + A._HashMap__setTableEntry(table, "", table); + delete table[""]; + return table; + }, + LinkedHashMap_LinkedHashMap($K, $V) { + return new A.JsLinkedHashMap($K._eval$1("@<0>")._bind$1($V)._eval$1("JsLinkedHashMap<1,2>")); + }, + LinkedHashMap_LinkedHashMap$_literal(keyValuePairs, $K, $V) { + return $K._eval$1("@<0>")._bind$1($V)._eval$1("LinkedHashMap<1,2>")._as(A.fillLiteralMap(keyValuePairs, new A.JsLinkedHashMap($K._eval$1("@<0>")._bind$1($V)._eval$1("JsLinkedHashMap<1,2>")))); + }, + LinkedHashMap_LinkedHashMap$_empty($K, $V) { + return new A.JsLinkedHashMap($K._eval$1("@<0>")._bind$1($V)._eval$1("JsLinkedHashMap<1,2>")); + }, + LinkedHashSet_LinkedHashSet$_empty($E) { + return new A._LinkedHashSet($E._eval$1("_LinkedHashSet<0>")); + }, + _LinkedHashSet__newHashTable() { + var table = Object.create(null); + table[""] = table; + delete table[""]; + return table; + }, + _LinkedHashSetIterator$(_set, _modifications, $E) { + var t1 = new A._LinkedHashSetIterator(_set, _modifications, $E._eval$1("_LinkedHashSetIterator<0>")); + t1._cell = _set._first; + return t1; + }, + HashMap_HashMap$from(other, $K, $V) { + var result = A.HashMap_HashMap($K, $V); + other.forEach$1(0, new A.HashMap_HashMap$from_closure(result, $K, $V)); + return result; + }, + MapBase_mapToString(m) { + var result, t1; + if (A.isToStringVisiting(m)) + return "{...}"; + result = new A.StringBuffer(""); + try { + t1 = {}; + B.JSArray_methods.add$1($.toStringVisiting, m); + result._contents += "{"; + t1.first = true; + m.forEach$1(0, new A.MapBase_mapToString_closure(t1, result)); + result._contents += "}"; + } finally { + if (0 >= $.toStringVisiting.length) + return A.ioore($.toStringVisiting, -1); + $.toStringVisiting.pop(); + } + t1 = result._contents; + return t1.charCodeAt(0) == 0 ? t1 : t1; + }, + _HashMap: function _HashMap(t0) { + var _ = this; + _._collection$_length = 0; + _._keys = _._collection$_rest = _._nums = _._strings = null; + _.$ti = t0; + }, + _HashMap_values_closure: function _HashMap_values_closure(t0) { + this.$this = t0; + }, + _IdentityHashMap: function _IdentityHashMap(t0) { + var _ = this; + _._collection$_length = 0; + _._keys = _._collection$_rest = _._nums = _._strings = null; + _.$ti = t0; + }, + _HashMapKeyIterable: function _HashMapKeyIterable(t0, t1) { + this._collection$_map = t0; + this.$ti = t1; + }, + _HashMapKeyIterator: function _HashMapKeyIterator(t0, t1, t2) { + var _ = this; + _._collection$_map = t0; + _._keys = t1; + _._offset = 0; + _._collection$_current = null; + _.$ti = t2; + }, + _LinkedHashSet: function _LinkedHashSet(t0) { + var _ = this; + _._collection$_length = 0; + _._collection$_last = _._first = _._collection$_rest = _._nums = _._strings = null; + _._modifications = 0; + _.$ti = t0; + }, + _LinkedHashSetCell: function _LinkedHashSetCell(t0) { + this._element = t0; + this._previous = this._next = null; + }, + _LinkedHashSetIterator: function _LinkedHashSetIterator(t0, t1, t2) { + var _ = this; + _._set = t0; + _._modifications = t1; + _._collection$_current = _._cell = null; + _.$ti = t2; + }, + HashMap_HashMap$from_closure: function HashMap_HashMap$from_closure(t0, t1, t2) { + this.result = t0; + this.K = t1; + this.V = t2; + }, + LinkedList: function LinkedList(t0) { + var _ = this; + _._collection$_length = _._modificationCount = 0; + _._first = null; + _.$ti = t0; + }, + _LinkedListIterator: function _LinkedListIterator(t0, t1, t2, t3) { + var _ = this; + _._list = t0; + _._modificationCount = t1; + _._collection$_current = null; + _._next = t2; + _._visitedFirst = false; + _.$ti = t3; + }, + LinkedListEntry: function LinkedListEntry() { + }, + ListBase: function ListBase() { + }, + MapBase: function MapBase() { + }, + MapBase_entries_closure: function MapBase_entries_closure(t0) { + this.$this = t0; + }, + MapBase_mapToString_closure: function MapBase_mapToString_closure(t0, t1) { + this._box_0 = t0; + this.result = t1; + }, + _MapBaseValueIterable: function _MapBaseValueIterable(t0, t1) { + this._collection$_map = t0; + this.$ti = t1; + }, + _MapBaseValueIterator: function _MapBaseValueIterator(t0, t1, t2) { + var _ = this; + _._keys = t0; + _._collection$_map = t1; + _._collection$_current = null; + _.$ti = t2; + }, + SetBase: function SetBase() { + }, + _SetBase: function _SetBase() { + }, + _Utf8Decoder__makeNativeUint8List(codeUnits, start, end) { + var bytes, t1, i, b, + $length = end - start; + if ($length <= 4096) + bytes = $.$get$_Utf8Decoder__reusableBuffer(); + else + bytes = new Uint8Array($length); + for (t1 = J.getInterceptor$asx(codeUnits), i = 0; i < $length; ++i) { + b = t1.$index(codeUnits, start + i); + if ((b & 255) !== b) + b = 255; + bytes[i] = b; + } + return bytes; + }, + _Utf8Decoder__convertInterceptedUint8List(allowMalformed, codeUnits, start, end) { + var decoder = allowMalformed ? $.$get$_Utf8Decoder__decoderNonfatal() : $.$get$_Utf8Decoder__decoder(); + if (decoder == null) + return null; + if (0 === start && end === codeUnits.length) + return A._Utf8Decoder__useTextDecoder(decoder, codeUnits); + return A._Utf8Decoder__useTextDecoder(decoder, codeUnits.subarray(start, end)); + }, + _Utf8Decoder__useTextDecoder(decoder, codeUnits) { + var t1, exception; + try { + t1 = decoder.decode(codeUnits); + return t1; + } catch (exception) { + } + return null; + }, + Base64Codec__checkPadding(source, sourceIndex, sourceEnd, firstPadding, paddingCount, $length) { + if (B.JSInt_methods.$mod($length, 4) !== 0) + throw A.wrapException(A.FormatException$("Invalid base64 padding, padded length must be multiple of four, is " + $length, source, sourceEnd)); + if (firstPadding + paddingCount !== $length) + throw A.wrapException(A.FormatException$("Invalid base64 padding, '=' not at the end", source, sourceIndex)); + if (paddingCount > 2) + throw A.wrapException(A.FormatException$("Invalid base64 padding, more than two '=' characters", source, sourceIndex)); + }, + _Utf8Decoder_errorDescription(state) { + switch (state) { + 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 ""; + } + }, + _Utf8Decoder__decoder_closure: function _Utf8Decoder__decoder_closure() { + }, + _Utf8Decoder__decoderNonfatal_closure: function _Utf8Decoder__decoderNonfatal_closure() { + }, + AsciiCodec: function AsciiCodec() { + }, + _UnicodeSubsetEncoder: function _UnicodeSubsetEncoder() { + }, + AsciiEncoder: function AsciiEncoder(t0) { + this._subsetMask = t0; + }, + Base64Codec: function Base64Codec() { + }, + Base64Encoder: function Base64Encoder() { + }, + Codec: function Codec() { + }, + _FusedCodec: function _FusedCodec(t0, t1, t2) { + this._convert$_first = t0; + this._second = t1; + this.$ti = t2; + }, + Converter: function Converter() { + }, + Encoding: function Encoding() { + }, + Utf8Codec: function Utf8Codec() { + }, + Utf8Encoder: function Utf8Encoder() { + }, + _Utf8Encoder: function _Utf8Encoder(t0) { + this._bufferIndex = this._carry = 0; + this._buffer = t0; + }, + _Utf8Decoder: function _Utf8Decoder(t0) { + this.allowMalformed = t0; + this._convert$_state = 16; + this._charOrIndex = 0; + }, + BigInt_parse(source) { + var result = A._BigIntImpl__tryParse(source, null); + if (result == null) + A.throwExpression(A.FormatException$("Could not parse BigInt", source, null)); + return result; + }, + _BigIntImpl_parse(source, radix) { + var result = A._BigIntImpl__tryParse(source, radix); + if (result == null) + throw A.wrapException(A.FormatException$("Could not parse BigInt", source, null)); + return result; + }, + _BigIntImpl__parseDecimal(source, isNegative) { + var part, i, + result = $.$get$_BigIntImpl_zero(), + t1 = source.length, + digitInPartCount = 4 - t1 % 4; + if (digitInPartCount === 4) + digitInPartCount = 0; + for (part = 0, i = 0; i < t1; ++i) { + part = part * 10 + source.charCodeAt(i) - 48; + ++digitInPartCount; + if (digitInPartCount === 4) { + result = result.$mul(0, $.$get$_BigIntImpl__bigInt10000()).$add(0, A._BigIntImpl__BigIntImpl$_fromInt(part)); + part = 0; + digitInPartCount = 0; + } + } + if (isNegative) + return result.$negate(0); + return result; + }, + _BigIntImpl__codeUnitToRadixValue(codeUnit) { + if (48 <= codeUnit && codeUnit <= 57) + return codeUnit - 48; + return (codeUnit | 32) - 97 + 10; + }, + _BigIntImpl__parseHex(source, startPos, isNegative) { + var i, chunk, j, i0, digitValue, digitIndex, digitIndex0, + t1 = source.length, + sourceLength = t1 - startPos, + chunkCount = B.JSNumber_methods.ceil$0(sourceLength / 4), + digits = new Uint16Array(chunkCount), + t2 = chunkCount - 1, + lastDigitLength = sourceLength - t2 * 4; + for (i = startPos, chunk = 0, j = 0; j < lastDigitLength; ++j, i = i0) { + i0 = i + 1; + if (!(i < t1)) + return A.ioore(source, i); + digitValue = A._BigIntImpl__codeUnitToRadixValue(source.charCodeAt(i)); + if (digitValue >= 16) + return null; + chunk = chunk * 16 + digitValue; + } + digitIndex = t2 - 1; + if (!(t2 >= 0 && t2 < chunkCount)) + return A.ioore(digits, t2); + digits[t2] = chunk; + for (; i < t1; digitIndex = digitIndex0) { + for (chunk = 0, j = 0; j < 4; ++j, i = i0) { + i0 = i + 1; + if (!(i >= 0 && i < t1)) + return A.ioore(source, i); + digitValue = A._BigIntImpl__codeUnitToRadixValue(source.charCodeAt(i)); + if (digitValue >= 16) + return null; + chunk = chunk * 16 + digitValue; + } + digitIndex0 = digitIndex - 1; + if (!(digitIndex >= 0 && digitIndex < chunkCount)) + return A.ioore(digits, digitIndex); + digits[digitIndex] = chunk; + } + if (chunkCount === 1) { + if (0 >= chunkCount) + return A.ioore(digits, 0); + t1 = digits[0] === 0; + } else + t1 = false; + if (t1) + return $.$get$_BigIntImpl_zero(); + t1 = A._BigIntImpl__normalize(chunkCount, digits); + return new A._BigIntImpl(t1 === 0 ? false : isNegative, digits, t1); + }, + _BigIntImpl__tryParse(source, radix) { + var match, t1, t2, isNegative, decimalMatch, hexMatch; + if (source === "") + return null; + match = $.$get$_BigIntImpl__parseRE().firstMatch$1(source); + if (match == null) + return null; + t1 = match._match; + t2 = t1.length; + if (1 >= t2) + return A.ioore(t1, 1); + isNegative = t1[1] === "-"; + if (4 >= t2) + return A.ioore(t1, 4); + decimalMatch = t1[4]; + hexMatch = t1[3]; + if (5 >= t2) + return A.ioore(t1, 5); + if (decimalMatch != null) + return A._BigIntImpl__parseDecimal(decimalMatch, isNegative); + if (hexMatch != null) + return A._BigIntImpl__parseHex(hexMatch, 2, isNegative); + return null; + }, + _BigIntImpl__normalize(used, digits) { + var t2, + t1 = digits.length; + for (;;) { + if (used > 0) { + t2 = used - 1; + if (!(t2 < t1)) + return A.ioore(digits, t2); + t2 = digits[t2] === 0; + } else + t2 = false; + if (!t2) + break; + --used; + } + return used; + }, + _BigIntImpl__cloneDigits(digits, from, to, $length) { + var t1, i, t2, + resultDigits = new Uint16Array($length), + n = to - from; + for (t1 = digits.length, i = 0; i < n; ++i) { + t2 = from + i; + if (!(t2 >= 0 && t2 < t1)) + return A.ioore(digits, t2); + t2 = digits[t2]; + if (!(i < $length)) + return A.ioore(resultDigits, i); + resultDigits[i] = t2; + } + return resultDigits; + }, + _BigIntImpl__BigIntImpl$from(value) { + var t1; + if (value === 0) + return $.$get$_BigIntImpl_zero(); + if (value === 1) + return $.$get$_BigIntImpl_one(); + if (value === 2) + return $.$get$_BigIntImpl_two(); + if (Math.abs(value) < 4294967296) + return A._BigIntImpl__BigIntImpl$_fromInt(B.JSInt_methods.toInt$0(value)); + t1 = A._BigIntImpl__BigIntImpl$_fromDouble(value); + return t1; + }, + _BigIntImpl__BigIntImpl$_fromInt(value) { + var digits, t1, i, i0, + isNegative = value < 0; + if (isNegative) { + if (value === -9223372036854776e3) { + digits = new Uint16Array(4); + digits[3] = 32768; + t1 = A._BigIntImpl__normalize(4, digits); + return new A._BigIntImpl(t1 !== 0, digits, t1); + } + value = -value; + } + if (value < 65536) { + digits = new Uint16Array(1); + digits[0] = value; + t1 = A._BigIntImpl__normalize(1, digits); + return new A._BigIntImpl(t1 === 0 ? false : isNegative, digits, t1); + } + if (value <= 4294967295) { + digits = new Uint16Array(2); + digits[0] = value & 65535; + digits[1] = B.JSInt_methods._shrOtherPositive$1(value, 16); + t1 = A._BigIntImpl__normalize(2, digits); + return new A._BigIntImpl(t1 === 0 ? false : isNegative, digits, t1); + } + t1 = B.JSInt_methods._tdivFast$1(B.JSInt_methods.get$bitLength(value) - 1, 16) + 1; + digits = new Uint16Array(t1); + for (i = 0; value !== 0; i = i0) { + i0 = i + 1; + if (!(i < t1)) + return A.ioore(digits, i); + digits[i] = value & 65535; + value = B.JSInt_methods._tdivFast$1(value, 65536); + } + t1 = A._BigIntImpl__normalize(t1, digits); + return new A._BigIntImpl(t1 === 0 ? false : isNegative, digits, t1); + }, + _BigIntImpl__BigIntImpl$_fromDouble(value) { + var isNegative, bits, t1, i, exponent, unshiftedDigits, unshiftedBig, absResult; + if (isNaN(value) || value == 1 / 0 || value == -1 / 0) + throw A.wrapException(A.ArgumentError$("Value must be finite: " + value, null)); + isNegative = value < 0; + if (isNegative) + value = -value; + value = Math.floor(value); + if (value === 0) + return $.$get$_BigIntImpl_zero(); + bits = $.$get$_BigIntImpl__bitsForFromDouble(); + for (t1 = bits.$flags | 0, i = 0; i < 8; ++i) { + t1 & 2 && A.throwUnsupportedOperation(bits); + if (!(i < 8)) + return A.ioore(bits, i); + bits[i] = 0; + } + t1 = J.asByteData$0$x(B.NativeUint8List_methods.get$buffer(bits)); + t1.$flags & 2 && A.throwUnsupportedOperation(t1, 13); + t1.setFloat64(0, value, true); + exponent = (bits[7] << 4 >>> 0) + (bits[6] >>> 4) - 1075; + unshiftedDigits = new Uint16Array(4); + unshiftedDigits[0] = (bits[1] << 8 >>> 0) + bits[0]; + unshiftedDigits[1] = (bits[3] << 8 >>> 0) + bits[2]; + unshiftedDigits[2] = (bits[5] << 8 >>> 0) + bits[4]; + unshiftedDigits[3] = bits[6] & 15 | 16; + unshiftedBig = new A._BigIntImpl(false, unshiftedDigits, 4); + if (exponent < 0) + absResult = unshiftedBig.$shr(0, -exponent); + else + absResult = exponent > 0 ? unshiftedBig.$shl(0, exponent) : unshiftedBig; + if (isNegative) + return absResult.$negate(0); + return absResult; + }, + _BigIntImpl__dlShiftDigits(xDigits, xUsed, n, resultDigits) { + var i, t1, t2, t3, t4; + if (xUsed === 0) + return 0; + if (n === 0 && resultDigits === xDigits) + return xUsed; + for (i = xUsed - 1, t1 = xDigits.length, t2 = resultDigits.$flags | 0; i >= 0; --i) { + t3 = i + n; + if (!(i < t1)) + return A.ioore(xDigits, i); + t4 = xDigits[i]; + t2 & 2 && A.throwUnsupportedOperation(resultDigits); + if (!(t3 >= 0 && t3 < resultDigits.length)) + return A.ioore(resultDigits, t3); + resultDigits[t3] = t4; + } + for (i = n - 1; i >= 0; --i) { + t2 & 2 && A.throwUnsupportedOperation(resultDigits); + if (!(i < resultDigits.length)) + return A.ioore(resultDigits, i); + resultDigits[i] = 0; + } + return xUsed + n; + }, + _BigIntImpl__lsh(xDigits, xUsed, n, resultDigits) { + var i, t1, t2, carry, digit, t3, t4, + digitShift = B.JSInt_methods._tdivFast$1(n, 16), + bitShift = B.JSInt_methods.$mod(n, 16), + carryBitShift = 16 - bitShift, + bitMask = B.JSInt_methods.$shl(1, carryBitShift) - 1; + for (i = xUsed - 1, t1 = xDigits.length, t2 = resultDigits.$flags | 0, carry = 0; i >= 0; --i) { + if (!(i < t1)) + return A.ioore(xDigits, i); + digit = xDigits[i]; + t3 = i + digitShift + 1; + t4 = B.JSInt_methods.$shr(digit, carryBitShift); + t2 & 2 && A.throwUnsupportedOperation(resultDigits); + if (!(t3 >= 0 && t3 < resultDigits.length)) + return A.ioore(resultDigits, t3); + resultDigits[t3] = (t4 | carry) >>> 0; + carry = B.JSInt_methods.$shl((digit & bitMask) >>> 0, bitShift); + } + t2 & 2 && A.throwUnsupportedOperation(resultDigits); + if (!(digitShift >= 0 && digitShift < resultDigits.length)) + return A.ioore(resultDigits, digitShift); + resultDigits[digitShift] = carry; + }, + _BigIntImpl__lShiftDigits(xDigits, xUsed, n, resultDigits) { + var resultUsed, t1, i, + digitsShift = B.JSInt_methods._tdivFast$1(n, 16); + if (B.JSInt_methods.$mod(n, 16) === 0) + return A._BigIntImpl__dlShiftDigits(xDigits, xUsed, digitsShift, resultDigits); + resultUsed = xUsed + digitsShift + 1; + A._BigIntImpl__lsh(xDigits, xUsed, n, resultDigits); + for (t1 = resultDigits.$flags | 0, i = digitsShift; --i, i >= 0;) { + t1 & 2 && A.throwUnsupportedOperation(resultDigits); + if (!(i < resultDigits.length)) + return A.ioore(resultDigits, i); + resultDigits[i] = 0; + } + t1 = resultUsed - 1; + if (!(t1 >= 0 && t1 < resultDigits.length)) + return A.ioore(resultDigits, t1); + if (resultDigits[t1] === 0) + resultUsed = t1; + return resultUsed; + }, + _BigIntImpl__rsh(xDigits, xUsed, n, resultDigits) { + var carry, last, t2, i, t3, digit, + digitsShift = B.JSInt_methods._tdivFast$1(n, 16), + bitShift = B.JSInt_methods.$mod(n, 16), + carryBitShift = 16 - bitShift, + bitMask = B.JSInt_methods.$shl(1, bitShift) - 1, + t1 = xDigits.length; + if (!(digitsShift >= 0 && digitsShift < t1)) + return A.ioore(xDigits, digitsShift); + carry = B.JSInt_methods.$shr(xDigits[digitsShift], bitShift); + last = xUsed - digitsShift - 1; + for (t2 = resultDigits.$flags | 0, i = 0; i < last; ++i) { + t3 = i + digitsShift + 1; + if (!(t3 < t1)) + return A.ioore(xDigits, t3); + digit = xDigits[t3]; + t3 = B.JSInt_methods.$shl((digit & bitMask) >>> 0, carryBitShift); + t2 & 2 && A.throwUnsupportedOperation(resultDigits); + if (!(i < resultDigits.length)) + return A.ioore(resultDigits, i); + resultDigits[i] = (t3 | carry) >>> 0; + carry = B.JSInt_methods.$shr(digit, bitShift); + } + t2 & 2 && A.throwUnsupportedOperation(resultDigits); + if (!(last >= 0 && last < resultDigits.length)) + return A.ioore(resultDigits, last); + resultDigits[last] = carry; + }, + _BigIntImpl__compareDigits(digits, used, otherDigits, otherUsed) { + var i, t1, t2, t3, + result = used - otherUsed; + if (result === 0) + for (i = used - 1, t1 = digits.length, t2 = otherDigits.length; i >= 0; --i) { + if (!(i < t1)) + return A.ioore(digits, i); + t3 = digits[i]; + if (!(i < t2)) + return A.ioore(otherDigits, i); + result = t3 - otherDigits[i]; + if (result !== 0) + return result; + } + return result; + }, + _BigIntImpl__absAdd(digits, used, otherDigits, otherUsed, resultDigits) { + var t1, t2, t3, carry, i, t4; + for (t1 = digits.length, t2 = otherDigits.length, t3 = resultDigits.$flags | 0, carry = 0, i = 0; i < otherUsed; ++i) { + if (!(i < t1)) + return A.ioore(digits, i); + t4 = digits[i]; + if (!(i < t2)) + return A.ioore(otherDigits, i); + carry += t4 + otherDigits[i]; + t3 & 2 && A.throwUnsupportedOperation(resultDigits); + if (!(i < resultDigits.length)) + return A.ioore(resultDigits, i); + resultDigits[i] = carry & 65535; + carry = B.JSInt_methods._shrOtherPositive$1(carry, 16); + } + for (i = otherUsed; i < used; ++i) { + if (!(i >= 0 && i < t1)) + return A.ioore(digits, i); + carry += digits[i]; + t3 & 2 && A.throwUnsupportedOperation(resultDigits); + if (!(i < resultDigits.length)) + return A.ioore(resultDigits, i); + resultDigits[i] = carry & 65535; + carry = B.JSInt_methods._shrOtherPositive$1(carry, 16); + } + t3 & 2 && A.throwUnsupportedOperation(resultDigits); + if (!(used >= 0 && used < resultDigits.length)) + return A.ioore(resultDigits, used); + resultDigits[used] = carry; + }, + _BigIntImpl__absSub(digits, used, otherDigits, otherUsed, resultDigits) { + var t1, t2, t3, carry, i, t4; + for (t1 = digits.length, t2 = otherDigits.length, t3 = resultDigits.$flags | 0, carry = 0, i = 0; i < otherUsed; ++i) { + if (!(i < t1)) + return A.ioore(digits, i); + t4 = digits[i]; + if (!(i < t2)) + return A.ioore(otherDigits, i); + carry += t4 - otherDigits[i]; + t3 & 2 && A.throwUnsupportedOperation(resultDigits); + if (!(i < resultDigits.length)) + return A.ioore(resultDigits, i); + resultDigits[i] = carry & 65535; + carry = 0 - (B.JSInt_methods._shrOtherPositive$1(carry, 16) & 1); + } + for (i = otherUsed; i < used; ++i) { + if (!(i >= 0 && i < t1)) + return A.ioore(digits, i); + carry += digits[i]; + t3 & 2 && A.throwUnsupportedOperation(resultDigits); + if (!(i < resultDigits.length)) + return A.ioore(resultDigits, i); + resultDigits[i] = carry & 65535; + carry = 0 - (B.JSInt_methods._shrOtherPositive$1(carry, 16) & 1); + } + }, + _BigIntImpl__mulAdd(x, multiplicandDigits, i, accumulatorDigits, j, n) { + var t1, t2, t3, c, i0, t4, combined, j0, l; + if (x === 0) + return; + for (t1 = multiplicandDigits.length, t2 = accumulatorDigits.length, t3 = accumulatorDigits.$flags | 0, c = 0; --n, n >= 0; j = j0, i = i0) { + i0 = i + 1; + if (!(i < t1)) + return A.ioore(multiplicandDigits, i); + t4 = multiplicandDigits[i]; + if (!(j >= 0 && j < t2)) + return A.ioore(accumulatorDigits, j); + combined = x * t4 + accumulatorDigits[j] + c; + j0 = j + 1; + t3 & 2 && A.throwUnsupportedOperation(accumulatorDigits); + accumulatorDigits[j] = combined & 65535; + c = B.JSInt_methods._tdivFast$1(combined, 65536); + } + for (; c !== 0; j = j0) { + if (!(j >= 0 && j < t2)) + return A.ioore(accumulatorDigits, j); + l = accumulatorDigits[j] + c; + j0 = j + 1; + t3 & 2 && A.throwUnsupportedOperation(accumulatorDigits); + accumulatorDigits[j] = l & 65535; + c = B.JSInt_methods._tdivFast$1(l, 65536); + } + }, + _BigIntImpl__estimateQuotientDigit(topDigitDivisor, digits, i) { + var t2, t3, quotientDigit, + t1 = digits.length; + if (!(i >= 0 && i < t1)) + return A.ioore(digits, i); + t2 = digits[i]; + if (t2 === topDigitDivisor) + return 65535; + t3 = i - 1; + if (!(t3 >= 0 && t3 < t1)) + return A.ioore(digits, t3); + quotientDigit = B.JSInt_methods.$tdiv((t2 << 16 | digits[t3]) >>> 0, topDigitDivisor); + if (quotientDigit > 65535) + return 65535; + return quotientDigit; + }, + Expando__badExpandoKey(object) { + throw A.wrapException(A.ArgumentError$value(object, "object", "Expandos are not allowed on strings, numbers, bools, records or null")); + }, + int_parse(source, radix) { + var value = A.Primitives_parseInt(source, radix); + if (value != null) + return value; + throw A.wrapException(A.FormatException$(source, null, null)); + }, + Error__throw(error, stackTrace) { + error = A.initializeExceptionWrapper(error, new Error()); + if (error == null) + error = A._asObject(error); + error.stack = stackTrace.toString$0(0); + throw error; + }, + List_List$filled($length, fill, growable, $E) { + var i, + result = growable ? J.JSArray_JSArray$growable($length, $E) : J.JSArray_JSArray$fixed($length, $E); + if ($length !== 0 && fill != null) + for (i = 0; i < result.length; ++i) + result[i] = fill; + return result; + }, + List_List$from(elements, growable, $E) { + var t1, + list = A._setArrayType([], $E._eval$1("JSArray<0>")); + for (t1 = J.get$iterator$ax(elements); t1.moveNext$0();) + B.JSArray_methods.add$1(list, $E._as(t1.get$current())); + list.$flags = 1; + return list; + }, + List_List$_of(elements, $E) { + var list, t1; + if (Array.isArray(elements)) + return A._setArrayType(elements.slice(0), $E._eval$1("JSArray<0>")); + list = A._setArrayType([], $E._eval$1("JSArray<0>")); + for (t1 = J.get$iterator$ax(elements); t1.moveNext$0();) + B.JSArray_methods.add$1(list, t1.get$current()); + return list; + }, + List_List$unmodifiable(elements, $E) { + var result = A.List_List$from(elements, false, $E); + result.$flags = 3; + return result; + }, + String_String$fromCharCodes(charCodes, start, end) { + var t1, t2, maxLength, array, len; + A.RangeError_checkNotNegative(start, "start"); + t1 = end == null; + t2 = !t1; + if (t2) { + maxLength = end - start; + if (maxLength < 0) + throw A.wrapException(A.RangeError$range(end, start, null, "end", null)); + if (maxLength === 0) + return ""; + } + if (Array.isArray(charCodes)) { + array = charCodes; + len = array.length; + if (t1) + end = len; + return A.Primitives_stringFromCharCodes(start > 0 || end < len ? array.slice(start, end) : array); + } + if (type$.NativeUint8List._is(charCodes)) + return A.String__stringFromUint8List(charCodes, start, end); + if (t2) + charCodes = J.take$1$ax(charCodes, end); + if (start > 0) + charCodes = J.skip$1$ax(charCodes, start); + t1 = A.List_List$_of(charCodes, type$.int); + return A.Primitives_stringFromCharCodes(t1); + }, + String_String$fromCharCode(charCode) { + return A.Primitives_stringFromCharCode(charCode); + }, + String__stringFromUint8List(charCodes, start, endOrNull) { + var len = charCodes.length; + if (start >= len) + return ""; + return A.Primitives_stringFromNativeUint8List(charCodes, start, endOrNull == null || endOrNull > len ? len : endOrNull); + }, + RegExp_RegExp(source, caseSensitive, dotAll, multiLine, unicode) { + return new A.JSSyntaxRegExp(source, A.JSSyntaxRegExp_makeNative(source, multiLine, caseSensitive, unicode, dotAll, "")); + }, + StringBuffer__writeAll(string, objects, separator) { + var iterator = J.get$iterator$ax(objects); + if (!iterator.moveNext$0()) + return string; + if (separator.length === 0) { + do + string += A.S(iterator.get$current()); + while (iterator.moveNext$0()); + } else { + string += A.S(iterator.get$current()); + while (iterator.moveNext$0()) + string = string + separator + A.S(iterator.get$current()); + } + return string; + }, + Uri_base() { + var cachedUri, uri, + current = A.Primitives_currentUri(); + if (current == null) + throw A.wrapException(A.UnsupportedError$("'Uri.base' is not supported")); + cachedUri = $.Uri__cachedBaseUri; + if (cachedUri != null && current === $.Uri__cachedBaseString) + return cachedUri; + uri = A.Uri_parse(current); + $.Uri__cachedBaseUri = uri; + $.Uri__cachedBaseString = current; + return uri; + }, + _Uri__uriEncode(canonicalMask, text, encoding, spaceToPlus) { + var t1, bytes, i, t2, byte, + _s16_ = "0123456789ABCDEF"; + if (encoding === B.C_Utf8Codec) { + t1 = $.$get$_Uri__needsNoEncoding(); + t1 = t1._nativeRegExp.test(text); + } else + t1 = false; + if (t1) + return text; + bytes = B.C_Utf8Encoder.convert$1(text); + for (t1 = bytes.length, i = 0, t2 = ""; i < t1; ++i) { + byte = bytes[i]; + if (byte < 128 && (string$.x00_____.charCodeAt(byte) & canonicalMask) !== 0) + t2 += A.Primitives_stringFromCharCode(byte); + else + t2 = spaceToPlus && byte === 32 ? t2 + "+" : t2 + "%" + _s16_[byte >>> 4 & 15] + _s16_[byte & 15]; + } + return t2.charCodeAt(0) == 0 ? t2 : t2; + }, + StackTrace_current() { + return A.getTraceFromException(new Error()); + }, + DateTime__validate(millisecondsSinceEpoch, microsecond, isUtc) { + var _s11_ = "microsecond"; + if (microsecond > 999) + throw A.wrapException(A.RangeError$range(microsecond, 0, 999, _s11_, null)); + if (millisecondsSinceEpoch < -864e13 || millisecondsSinceEpoch > 864e13) + throw A.wrapException(A.RangeError$range(millisecondsSinceEpoch, -864e13, 864e13, "millisecondsSinceEpoch", null)); + if (millisecondsSinceEpoch === 864e13 && microsecond !== 0) + throw A.wrapException(A.ArgumentError$value(microsecond, _s11_, "Time including microseconds is outside valid range")); + A.checkNotNullable(isUtc, "isUtc", type$.bool); + return millisecondsSinceEpoch; + }, + DateTime__fourDigits(n) { + var absN = Math.abs(n), + sign = n < 0 ? "-" : ""; + if (absN >= 1000) + return "" + n; + if (absN >= 100) + return sign + "0" + absN; + if (absN >= 10) + return sign + "00" + absN; + return sign + "000" + absN; + }, + DateTime__threeDigits(n) { + if (n >= 100) + return "" + n; + if (n >= 10) + return "0" + n; + return "00" + n; + }, + DateTime__twoDigits(n) { + if (n >= 10) + return "" + n; + return "0" + n; + }, + Duration$(microseconds, milliseconds) { + return new A.Duration(microseconds + 1000 * milliseconds); + }, + EnumByName_byName(_this, $name, $T) { + var t1, _i, value; + for (t1 = _this.length, _i = 0; _i < t1; ++_i) { + value = _this[_i]; + if (value._name === $name) + return value; + } + throw A.wrapException(A.ArgumentError$value($name, "name", "No enum value with that name")); + }, + EnumByName_asNameMap(_this, $T) { + var _i, value, + t1 = A.LinkedHashMap_LinkedHashMap$_empty(type$.String, $T); + for (_i = 0; _i < 2; ++_i) { + value = _this[_i]; + t1.$indexSet(0, value._name, value); + } + return t1; + }, + Error_safeToString(object) { + if (typeof object == "number" || A._isBool(object) || object == null) + return J.toString$0$(object); + if (typeof object == "string") + return JSON.stringify(object); + return A.Primitives_safeToString(object); + }, + Error_throwWithStackTrace(error, stackTrace) { + A.checkNotNullable(error, "error", type$.Object); + A.checkNotNullable(stackTrace, "stackTrace", type$.StackTrace); + A.Error__throw(error, stackTrace); + }, + AssertionError$(message) { + return new A.AssertionError(message); + }, + ArgumentError$(message, $name) { + return new A.ArgumentError(false, null, $name, message); + }, + ArgumentError$value(value, $name, message) { + return new A.ArgumentError(true, value, $name, message); + }, + ArgumentError_checkNotNull(argument, $name, $T) { + return argument; + }, + RangeError$value(value, $name) { + return new A.RangeError(null, null, true, value, $name, "Value not in range"); + }, + RangeError$range(invalidValue, minValue, maxValue, $name, message) { + return new A.RangeError(minValue, maxValue, true, invalidValue, $name, "Invalid value"); + }, + RangeError_checkValueInInterval(value, minValue, maxValue, $name) { + if (value < minValue || value > maxValue) + throw A.wrapException(A.RangeError$range(value, minValue, maxValue, $name, null)); + return value; + }, + RangeError_checkValidIndex(index, indexable, $name, $length) { + if (0 > index || index >= $length) + A.throwExpression(A.IndexError$withLength(index, $length, indexable, null, $name)); + return index; + }, + RangeError_checkValidRange(start, end, $length) { + if (0 > start || start > $length) + throw A.wrapException(A.RangeError$range(start, 0, $length, "start", null)); + if (end != null) { + if (start > end || end > $length) + throw A.wrapException(A.RangeError$range(end, start, $length, "end", null)); + return end; + } + return $length; + }, + RangeError_checkNotNegative(value, $name) { + if (value < 0) + throw A.wrapException(A.RangeError$range(value, 0, null, $name, null)); + return value; + }, + IndexError$(invalidValue, indexable) { + var t1 = indexable._typed_buffer$_length; + return new A.IndexError(t1, true, invalidValue, null, "Index out of range"); + }, + IndexError$withLength(invalidValue, $length, indexable, message, $name) { + return new A.IndexError($length, true, invalidValue, $name, "Index out of range"); + }, + UnsupportedError$(message) { + return new A.UnsupportedError(message); + }, + UnimplementedError$(message) { + return new A.UnimplementedError(message); + }, + StateError$(message) { + return new A.StateError(message); + }, + ConcurrentModificationError$(modifiedObject) { + return new A.ConcurrentModificationError(modifiedObject); + }, + Exception_Exception(message) { + return new A._Exception(message); + }, + FormatException$(message, source, offset) { + return new A.FormatException(message, source, offset); + }, + Iterable_iterableToShortString(iterable, leftDelimiter, rightDelimiter) { + var parts, t1; + if (A.isToStringVisiting(iterable)) { + if (leftDelimiter === "(" && rightDelimiter === ")") + return "(...)"; + return leftDelimiter + "..." + rightDelimiter; + } + parts = A._setArrayType([], type$.JSArray_String); + B.JSArray_methods.add$1($.toStringVisiting, iterable); + try { + A._iterablePartsToStrings(iterable, parts); + } finally { + if (0 >= $.toStringVisiting.length) + return A.ioore($.toStringVisiting, -1); + $.toStringVisiting.pop(); + } + t1 = A.StringBuffer__writeAll(leftDelimiter, type$.Iterable_dynamic._as(parts), ", ") + rightDelimiter; + return t1.charCodeAt(0) == 0 ? t1 : t1; + }, + Iterable_iterableToFullString(iterable, leftDelimiter, rightDelimiter) { + var buffer, t1; + if (A.isToStringVisiting(iterable)) + return leftDelimiter + "..." + rightDelimiter; + buffer = new A.StringBuffer(leftDelimiter); + B.JSArray_methods.add$1($.toStringVisiting, iterable); + try { + t1 = buffer; + t1._contents = A.StringBuffer__writeAll(t1._contents, iterable, ", "); + } finally { + if (0 >= $.toStringVisiting.length) + return A.ioore($.toStringVisiting, -1); + $.toStringVisiting.pop(); + } + buffer._contents += rightDelimiter; + t1 = buffer._contents; + return t1.charCodeAt(0) == 0 ? t1 : t1; + }, + _iterablePartsToStrings(iterable, parts) { + var next, ultimateString, penultimateString, penultimate, ultimate, ultimate0, elision, + it = iterable.get$iterator(iterable), + $length = 0, count = 0; + for (;;) { + if (!($length < 80 || count < 3)) + break; + if (!it.moveNext$0()) + return; + next = A.S(it.get$current()); + B.JSArray_methods.add$1(parts, next); + $length += next.length + 2; + ++count; + } + if (!it.moveNext$0()) { + if (count <= 5) + return; + if (0 >= parts.length) + return A.ioore(parts, -1); + ultimateString = parts.pop(); + if (0 >= parts.length) + return A.ioore(parts, -1); + penultimateString = parts.pop(); + } else { + penultimate = it.get$current(); + ++count; + if (!it.moveNext$0()) { + if (count <= 4) { + B.JSArray_methods.add$1(parts, A.S(penultimate)); + return; + } + ultimateString = A.S(penultimate); + if (0 >= parts.length) + return A.ioore(parts, -1); + penultimateString = parts.pop(); + $length += ultimateString.length + 2; + } else { + ultimate = it.get$current(); + ++count; + for (; it.moveNext$0(); penultimate = ultimate, ultimate = ultimate0) { + ultimate0 = it.get$current(); + ++count; + if (count > 100) { + for (;;) { + if (!($length > 75 && count > 3)) + break; + if (0 >= parts.length) + return A.ioore(parts, -1); + $length -= parts.pop().length + 2; + --count; + } + B.JSArray_methods.add$1(parts, "..."); + return; + } + } + penultimateString = A.S(penultimate); + ultimateString = A.S(ultimate); + $length += ultimateString.length + penultimateString.length + 4; + } + } + if (count > parts.length + 2) { + $length += 5; + elision = "..."; + } else + elision = null; + for (;;) { + if (!($length > 80 && parts.length > 3)) + break; + if (0 >= parts.length) + return A.ioore(parts, -1); + $length -= parts.pop().length + 2; + if (elision == null) { + $length += 5; + elision = "..."; + } + } + if (elision != null) + B.JSArray_methods.add$1(parts, elision); + B.JSArray_methods.add$1(parts, penultimateString); + B.JSArray_methods.add$1(parts, ultimateString); + }, + Object_hash(object1, object2, object3, object4) { + var t1; + if (B.C_SentinelValue === object3) { + t1 = J.get$hashCode$(object1); + object2 = J.get$hashCode$(object2); + return A.SystemHash_finish(A.SystemHash_combine(A.SystemHash_combine($.$get$_hashSeed(), t1), object2)); + } + if (B.C_SentinelValue === object4) { + t1 = J.get$hashCode$(object1); + object2 = J.get$hashCode$(object2); + object3 = J.get$hashCode$(object3); + return A.SystemHash_finish(A.SystemHash_combine(A.SystemHash_combine(A.SystemHash_combine($.$get$_hashSeed(), t1), object2), object3)); + } + t1 = J.get$hashCode$(object1); + object2 = J.get$hashCode$(object2); + object3 = J.get$hashCode$(object3); + object4 = J.get$hashCode$(object4); + object4 = A.SystemHash_finish(A.SystemHash_combine(A.SystemHash_combine(A.SystemHash_combine(A.SystemHash_combine($.$get$_hashSeed(), t1), object2), object3), object4)); + return object4; + }, + print(object) { + var line = A.S(object), + toZone = $.printToZone; + if (toZone == null) + A.printString(line); + else + toZone.call$1(line); + }, + Uri_Uri$dataFromString($content) { + var t1, _null = null, + buffer = new A.StringBuffer(""), + indices = A._setArrayType([-1], type$.JSArray_int); + A.UriData__writeUri(_null, _null, _null, buffer, indices); + B.JSArray_methods.add$1(indices, buffer._contents.length); + buffer._contents += ","; + A.UriData__uriEncodeBytes(256, B.C_AsciiCodec.encode$1($content), buffer); + t1 = buffer._contents; + return new A.UriData(t1.charCodeAt(0) == 0 ? t1 : t1, indices, _null).get$uri(); + }, + Uri_parse(uri) { + var delta, indices, schemeEnd, hostStart, portStart, pathStart, queryStart, fragmentStart, isSimple, scheme, t1, t2, schemeAuth, queryStart0, pathStart0, port, userInfoStart, userInfo, host, portNumber, path, query, _null = null, + end = uri.length; + if (end >= 5) { + if (4 >= end) + return A.ioore(uri, 4); + delta = ((uri.charCodeAt(4) ^ 58) * 3 | uri.charCodeAt(0) ^ 100 | uri.charCodeAt(1) ^ 97 | uri.charCodeAt(2) ^ 116 | uri.charCodeAt(3) ^ 97) >>> 0; + if (delta === 0) + return A.UriData__parse(end < end ? B.JSString_methods.substring$2(uri, 0, end) : uri, 5, _null).get$uri(); + else if (delta === 32) + return A.UriData__parse(B.JSString_methods.substring$2(uri, 5, end), 0, _null).get$uri(); + } + indices = A.List_List$filled(8, 0, false, type$.int); + B.JSArray_methods.$indexSet(indices, 0, 0); + B.JSArray_methods.$indexSet(indices, 1, -1); + B.JSArray_methods.$indexSet(indices, 2, -1); + B.JSArray_methods.$indexSet(indices, 7, -1); + B.JSArray_methods.$indexSet(indices, 3, 0); + B.JSArray_methods.$indexSet(indices, 4, 0); + B.JSArray_methods.$indexSet(indices, 5, end); + B.JSArray_methods.$indexSet(indices, 6, end); + if (A._scan(uri, 0, end, 0, indices) >= 14) + B.JSArray_methods.$indexSet(indices, 7, end); + schemeEnd = indices[1]; + if (schemeEnd >= 0) + if (A._scan(uri, 0, schemeEnd, 20, indices) === 20) + indices[7] = schemeEnd; + hostStart = indices[2] + 1; + portStart = indices[3]; + pathStart = indices[4]; + queryStart = indices[5]; + fragmentStart = indices[6]; + if (fragmentStart < queryStart) + queryStart = fragmentStart; + if (pathStart < hostStart) + pathStart = queryStart; + else if (pathStart <= schemeEnd) + pathStart = schemeEnd + 1; + if (portStart < hostStart) + portStart = pathStart; + isSimple = indices[7] < 0; + scheme = _null; + if (isSimple) { + isSimple = false; + if (!(hostStart > schemeEnd + 3)) { + t1 = portStart > 0; + if (!(t1 && portStart + 1 === pathStart)) { + if (!B.JSString_methods.startsWith$2(uri, "\\", pathStart)) + if (hostStart > 0) + t2 = B.JSString_methods.startsWith$2(uri, "\\", hostStart - 1) || B.JSString_methods.startsWith$2(uri, "\\", hostStart - 2); + else + t2 = false; + else + t2 = true; + if (!t2) { + if (!(queryStart < end && queryStart === pathStart + 2 && B.JSString_methods.startsWith$2(uri, "..", pathStart))) + t2 = queryStart > pathStart + 2 && B.JSString_methods.startsWith$2(uri, "/..", queryStart - 3); + else + t2 = true; + if (!t2) + if (schemeEnd === 4) { + if (B.JSString_methods.startsWith$2(uri, "file", 0)) { + if (hostStart <= 0) { + if (!B.JSString_methods.startsWith$2(uri, "/", pathStart)) { + schemeAuth = "file:///"; + delta = 3; + } else { + schemeAuth = "file://"; + delta = 2; + } + uri = schemeAuth + B.JSString_methods.substring$2(uri, pathStart, end); + queryStart += delta; + fragmentStart += delta; + end = uri.length; + hostStart = 7; + portStart = 7; + pathStart = 7; + } else if (pathStart === queryStart) { + ++fragmentStart; + queryStart0 = queryStart + 1; + uri = B.JSString_methods.replaceRange$3(uri, pathStart, queryStart, "/"); + ++end; + queryStart = queryStart0; + } + scheme = "file"; + } else if (B.JSString_methods.startsWith$2(uri, "http", 0)) { + if (t1 && portStart + 3 === pathStart && B.JSString_methods.startsWith$2(uri, "80", portStart + 1)) { + fragmentStart -= 3; + pathStart0 = pathStart - 3; + queryStart -= 3; + uri = B.JSString_methods.replaceRange$3(uri, portStart, pathStart, ""); + end -= 3; + pathStart = pathStart0; + } + scheme = "http"; + } + } else if (schemeEnd === 5 && B.JSString_methods.startsWith$2(uri, "https", 0)) { + if (t1 && portStart + 4 === pathStart && B.JSString_methods.startsWith$2(uri, "443", portStart + 1)) { + fragmentStart -= 4; + pathStart0 = pathStart - 4; + queryStart -= 4; + uri = B.JSString_methods.replaceRange$3(uri, portStart, pathStart, ""); + end -= 3; + pathStart = pathStart0; + } + scheme = "https"; + } + isSimple = !t2; + } + } + } + } + if (isSimple) + return new A._SimpleUri(end < uri.length ? B.JSString_methods.substring$2(uri, 0, end) : uri, schemeEnd, hostStart, portStart, pathStart, queryStart, fragmentStart, scheme); + if (scheme == null) + if (schemeEnd > 0) + scheme = A._Uri__makeScheme(uri, 0, schemeEnd); + else { + if (schemeEnd === 0) + A._Uri__fail(uri, 0, "Invalid empty scheme"); + scheme = ""; + } + port = _null; + if (hostStart > 0) { + userInfoStart = schemeEnd + 3; + userInfo = userInfoStart < hostStart ? A._Uri__makeUserInfo(uri, userInfoStart, hostStart - 1) : ""; + host = A._Uri__makeHost(uri, hostStart, portStart, false); + t1 = portStart + 1; + if (t1 < pathStart) { + portNumber = A.Primitives_parseInt(B.JSString_methods.substring$2(uri, t1, pathStart), _null); + port = A._Uri__makePort(portNumber == null ? A.throwExpression(A.FormatException$("Invalid port", uri, t1)) : portNumber, scheme); + } + } else { + host = _null; + userInfo = ""; + } + path = A._Uri__makePath(uri, pathStart, queryStart, _null, scheme, host != null); + query = queryStart < fragmentStart ? A._Uri__makeQuery(uri, queryStart + 1, fragmentStart, _null) : _null; + return A._Uri$_internal(scheme, userInfo, host, port, path, query, fragmentStart < end ? A._Uri__makeFragment(uri, fragmentStart + 1, end) : _null); + }, + Uri_decodeComponent(encodedComponent) { + A._asString(encodedComponent); + return A._Uri__uriDecode(encodedComponent, 0, encodedComponent.length, B.C_Utf8Codec, false); + }, + Uri__ipv4FormatError(msg, source, position) { + throw A.wrapException(A.FormatException$("Illegal IPv4 address, " + msg, source, position)); + }, + Uri__parseIPv4Address(host, start, end, target, targetOffset) { + var t1, octetStart, cursor, octetIndex, octetValue, char, digit, octetIndex0, t2, + _s17_ = "invalid character"; + for (t1 = host.length, octetStart = start, cursor = octetStart, octetIndex = 0, octetValue = 0;;) { + if (cursor >= end) + char = 0; + else { + if (!(cursor >= 0 && cursor < t1)) + return A.ioore(host, cursor); + char = host.charCodeAt(cursor); + } + digit = char ^ 48; + if (digit <= 9) { + if (octetValue !== 0 || cursor === octetStart) { + octetValue = octetValue * 10 + digit; + if (octetValue <= 255) { + ++cursor; + continue; + } + A.Uri__ipv4FormatError("each part must be in the range 0..255", host, octetStart); + } + A.Uri__ipv4FormatError("parts must not have leading zeros", host, octetStart); + } + if (cursor === octetStart) { + if (cursor === end) + break; + A.Uri__ipv4FormatError(_s17_, host, cursor); + } + octetIndex0 = octetIndex + 1; + t2 = targetOffset + octetIndex; + target.$flags & 2 && A.throwUnsupportedOperation(target); + if (!(t2 < 16)) + return A.ioore(target, t2); + target[t2] = octetValue; + if (char === 46) { + if (octetIndex0 < 4) { + ++cursor; + octetIndex = octetIndex0; + octetStart = cursor; + octetValue = 0; + continue; + } + break; + } + if (cursor === end) { + if (octetIndex0 === 4) + return; + break; + } + A.Uri__ipv4FormatError(_s17_, host, cursor); + octetIndex = octetIndex0; + } + A.Uri__ipv4FormatError("IPv4 address should contain exactly 4 parts", host, cursor); + }, + Uri__validateIPvAddress(host, start, end) { + var error; + if (start === end) + throw A.wrapException(A.FormatException$("Empty IP address", host, start)); + if (!(start >= 0 && start < host.length)) + return A.ioore(host, start); + if (host.charCodeAt(start) === 118) { + error = A.Uri__validateIPvFutureAddress(host, start, end); + if (error != null) + throw A.wrapException(error); + return false; + } + A.Uri_parseIPv6Address(host, start, end); + return true; + }, + Uri__validateIPvFutureAddress(host, start, end) { + var t1, cursor, cursor0, char, ucChar, + _s38_ = "Missing hex-digit in IPvFuture address", + _s128_ = string$.x00_____; + ++start; + for (t1 = host.length, cursor = start;; cursor = cursor0) { + if (cursor < end) { + cursor0 = cursor + 1; + if (!(cursor >= 0 && cursor < t1)) + return A.ioore(host, cursor); + char = host.charCodeAt(cursor); + if ((char ^ 48) <= 9) + continue; + ucChar = char | 32; + if (ucChar >= 97 && ucChar <= 102) + continue; + if (char === 46) { + if (cursor0 - 1 === start) + return new A.FormatException(_s38_, host, cursor0); + cursor = cursor0; + break; + } + return new A.FormatException("Unexpected character", host, cursor0 - 1); + } + if (cursor - 1 === start) + return new A.FormatException(_s38_, host, cursor); + return new A.FormatException("Missing '.' in IPvFuture address", host, cursor); + } + if (cursor === end) + return new A.FormatException("Missing address in IPvFuture address, host, cursor", null, null); + for (;;) { + if (!(cursor >= 0 && cursor < t1)) + return A.ioore(host, cursor); + char = host.charCodeAt(cursor); + if (!(char < 128)) + return A.ioore(_s128_, char); + if ((_s128_.charCodeAt(char) & 16) !== 0) { + ++cursor; + if (cursor < end) + continue; + return null; + } + return new A.FormatException("Invalid IPvFuture address character", host, cursor); + } + }, + Uri_parseIPv6Address(host, start, end) { + var result, t1, wildcardAt, partCount, t2, cursor, partStart, hexValue, decValue, char, _0_0, decValue0, hexDigit, _1_0, t3, partCount0, partAfterWildcard, partsAfterWildcard, positionAfterWildcard, newPositionAfterWildcard, + _s39_ = "an address must contain at most 8 parts", + error = new A.Uri_parseIPv6Address_error(host); + if (end - start < 2) + error.call$2("address is too short", null); + result = new Uint8Array(16); + t1 = host.length; + if (!(start >= 0 && start < t1)) + return A.ioore(host, start); + wildcardAt = -1; + partCount = 0; + if (host.charCodeAt(start) === 58) { + t2 = start + 1; + if (!(t2 < t1)) + return A.ioore(host, t2); + if (host.charCodeAt(t2) === 58) { + cursor = start + 2; + partStart = cursor; + wildcardAt = 0; + partCount = 1; + } else { + error.call$2("invalid start colon", start); + cursor = start; + partStart = cursor; + } + } else { + cursor = start; + partStart = cursor; + } + for (hexValue = 0, decValue = true;;) { + if (cursor >= end) + char = 0; + else { + if (!(cursor < t1)) + return A.ioore(host, cursor); + char = host.charCodeAt(cursor); + } + $label0$0: { + _0_0 = char ^ 48; + decValue0 = false; + if (_0_0 <= 9) + hexDigit = _0_0; + else { + _1_0 = char | 32; + if (_1_0 >= 97 && _1_0 <= 102) + hexDigit = _1_0 - 87; + else + break $label0$0; + decValue = decValue0; + } + if (cursor < partStart + 4) { + hexValue = hexValue * 16 + hexDigit; + ++cursor; + continue; + } + error.call$2("an IPv6 part can contain a maximum of 4 hex digits", partStart); + } + if (cursor > partStart) { + if (char === 46) { + if (decValue) { + if (partCount <= 6) { + A.Uri__parseIPv4Address(host, partStart, end, result, partCount * 2); + partCount += 2; + cursor = end; + break; + } + error.call$2(_s39_, partStart); + } + break; + } + t2 = partCount * 2; + t3 = B.JSInt_methods._shrOtherPositive$1(hexValue, 8); + if (!(t2 < 16)) + return A.ioore(result, t2); + result[t2] = t3; + ++t2; + if (!(t2 < 16)) + return A.ioore(result, t2); + result[t2] = hexValue & 255; + ++partCount; + if (char === 58) { + if (partCount < 8) { + ++cursor; + partStart = cursor; + hexValue = 0; + decValue = true; + continue; + } + error.call$2(_s39_, cursor); + } + break; + } + if (char === 58) { + if (wildcardAt < 0) { + partCount0 = partCount + 1; + ++cursor; + wildcardAt = partCount; + partCount = partCount0; + partStart = cursor; + continue; + } + error.call$2("only one wildcard `::` is allowed", cursor); + } + if (wildcardAt !== partCount - 1) + error.call$2("missing part", cursor); + break; + } + if (cursor < end) + error.call$2("invalid character", cursor); + if (partCount < 8) { + if (wildcardAt < 0) + error.call$2("an address without a wildcard must contain exactly 8 parts", end); + partAfterWildcard = wildcardAt + 1; + partsAfterWildcard = partCount - partAfterWildcard; + if (partsAfterWildcard > 0) { + positionAfterWildcard = partAfterWildcard * 2; + newPositionAfterWildcard = 16 - partsAfterWildcard * 2; + B.NativeUint8List_methods.setRange$4(result, newPositionAfterWildcard, 16, result, positionAfterWildcard); + B.NativeUint8List_methods.fillRange$3(result, positionAfterWildcard, newPositionAfterWildcard, 0); + } + } + return result; + }, + _Uri$_internal(scheme, _userInfo, _host, _port, path, _query, _fragment) { + return new A._Uri(scheme, _userInfo, _host, _port, path, _query, _fragment); + }, + _Uri__Uri(host, path, pathSegments, scheme) { + var userInfo, query, fragment, port, isFile, t1, hasAuthority, t2, _null = null; + scheme = scheme == null ? "" : A._Uri__makeScheme(scheme, 0, scheme.length); + userInfo = A._Uri__makeUserInfo(_null, 0, 0); + host = A._Uri__makeHost(host, 0, host == null ? 0 : host.length, false); + query = A._Uri__makeQuery(_null, 0, 0, _null); + fragment = A._Uri__makeFragment(_null, 0, 0); + port = A._Uri__makePort(_null, scheme); + isFile = scheme === "file"; + if (host == null) + t1 = userInfo.length !== 0 || port != null || isFile; + else + t1 = false; + if (t1) + host = ""; + t1 = host == null; + hasAuthority = !t1; + path = A._Uri__makePath(path, 0, path == null ? 0 : path.length, pathSegments, scheme, hasAuthority); + t2 = scheme.length === 0; + if (t2 && t1 && !B.JSString_methods.startsWith$1(path, "/")) + path = A._Uri__normalizeRelativePath(path, !t2 || hasAuthority); + else + path = A._Uri__removeDotSegments(path); + return A._Uri$_internal(scheme, userInfo, t1 && B.JSString_methods.startsWith$1(path, "//") ? "" : host, port, path, query, fragment); + }, + _Uri__defaultPort(scheme) { + if (scheme === "http") + return 80; + if (scheme === "https") + return 443; + return 0; + }, + _Uri__fail(uri, index, message) { + throw A.wrapException(A.FormatException$(message, uri, index)); + }, + _Uri__Uri$file(path, windows) { + return windows ? A._Uri__makeWindowsFileUrl(path, false) : A._Uri__makeFileUri(path, false); + }, + _Uri__checkNonWindowsPathReservedCharacters(segments, argumentError) { + var t1, _i, segment; + for (t1 = segments.length, _i = 0; _i < t1; ++_i) { + segment = segments[_i]; + if (B.JSString_methods.contains$1(segment, "/")) { + t1 = A.UnsupportedError$("Illegal path character " + segment); + throw A.wrapException(t1); + } + } + }, + _Uri__checkWindowsPathReservedCharacters(segments, argumentError, firstSegment) { + var t1, t2, t3; + for (t1 = A.SubListIterable$(segments, firstSegment, null, A._arrayInstanceType(segments)._precomputed1), t2 = t1.$ti, t1 = new A.ListIterator(t1, t1.get$length(0), t2._eval$1("ListIterator")), t2 = t2._eval$1("ListIterable.E"); t1.moveNext$0();) { + t3 = t1.__internal$_current; + if (t3 == null) + t3 = t2._as(t3); + if (B.JSString_methods.contains$1(t3, A.RegExp_RegExp('["*/:<>?\\\\|]', true, false, false, false))) + if (argumentError) + throw A.wrapException(A.ArgumentError$("Illegal character in path", null)); + else + throw A.wrapException(A.UnsupportedError$("Illegal character in path: " + t3)); + } + }, + _Uri__checkWindowsDriveLetter(charCode, argumentError) { + var t1, + _s21_ = "Illegal drive letter "; + if (!(65 <= charCode && charCode <= 90)) + t1 = 97 <= charCode && charCode <= 122; + else + t1 = true; + if (t1) + return; + if (argumentError) + throw A.wrapException(A.ArgumentError$(_s21_ + A.String_String$fromCharCode(charCode), null)); + else + throw A.wrapException(A.UnsupportedError$(_s21_ + A.String_String$fromCharCode(charCode))); + }, + _Uri__makeFileUri(path, slashTerminated) { + var _null = null, + segments = A._setArrayType(path.split("/"), type$.JSArray_String); + if (B.JSString_methods.startsWith$1(path, "/")) + return A._Uri__Uri(_null, _null, segments, "file"); + else + return A._Uri__Uri(_null, _null, segments, _null); + }, + _Uri__makeWindowsFileUrl(path, slashTerminated) { + var t1, t2, pathSegments, pathStart, hostPart, _s1_ = "\\", _null = null, _s4_ = "file"; + if (B.JSString_methods.startsWith$1(path, "\\\\?\\")) + if (B.JSString_methods.startsWith$2(path, "UNC\\", 4)) + path = B.JSString_methods.replaceRange$3(path, 0, 7, _s1_); + else { + path = B.JSString_methods.substring$1(path, 4); + t1 = path.length; + t2 = true; + if (t1 >= 3) { + if (1 >= t1) + return A.ioore(path, 1); + if (path.charCodeAt(1) === 58) { + if (2 >= t1) + return A.ioore(path, 2); + t1 = path.charCodeAt(2) !== 92; + } else + t1 = t2; + } else + t1 = t2; + if (t1) + throw A.wrapException(A.ArgumentError$value(path, "path", "Windows paths with \\\\?\\ prefix must be absolute")); + } + else + path = A.stringReplaceAllUnchecked(path, "/", _s1_); + t1 = path.length; + if (t1 > 1 && path.charCodeAt(1) === 58) { + if (0 >= t1) + return A.ioore(path, 0); + A._Uri__checkWindowsDriveLetter(path.charCodeAt(0), true); + if (t1 !== 2) { + if (2 >= t1) + return A.ioore(path, 2); + t1 = path.charCodeAt(2) !== 92; + } else + t1 = true; + if (t1) + throw A.wrapException(A.ArgumentError$value(path, "path", "Windows paths with drive letter must be absolute")); + pathSegments = A._setArrayType(path.split(_s1_), type$.JSArray_String); + A._Uri__checkWindowsPathReservedCharacters(pathSegments, true, 1); + return A._Uri__Uri(_null, _null, pathSegments, _s4_); + } + if (B.JSString_methods.startsWith$1(path, _s1_)) + if (B.JSString_methods.startsWith$2(path, _s1_, 1)) { + pathStart = B.JSString_methods.indexOf$2(path, _s1_, 2); + t1 = pathStart < 0; + hostPart = t1 ? B.JSString_methods.substring$1(path, 2) : B.JSString_methods.substring$2(path, 2, pathStart); + pathSegments = A._setArrayType((t1 ? "" : B.JSString_methods.substring$1(path, pathStart + 1)).split(_s1_), type$.JSArray_String); + A._Uri__checkWindowsPathReservedCharacters(pathSegments, true, 0); + return A._Uri__Uri(hostPart, _null, pathSegments, _s4_); + } else { + pathSegments = A._setArrayType(path.split(_s1_), type$.JSArray_String); + A._Uri__checkWindowsPathReservedCharacters(pathSegments, true, 0); + return A._Uri__Uri(_null, _null, pathSegments, _s4_); + } + else { + pathSegments = A._setArrayType(path.split(_s1_), type$.JSArray_String); + A._Uri__checkWindowsPathReservedCharacters(pathSegments, true, 0); + return A._Uri__Uri(_null, _null, pathSegments, _null); + } + }, + _Uri__makePort(port, scheme) { + if (port != null && port === A._Uri__defaultPort(scheme)) + return null; + return port; + }, + _Uri__makeHost(host, start, end, strictIPv6) { + var t1, t2, t3, zoneID, index, zoneIDstart, isIPv6, hostChars, i; + if (host == null) + return null; + if (start === end) + return ""; + t1 = host.length; + if (!(start >= 0 && start < t1)) + return A.ioore(host, start); + if (host.charCodeAt(start) === 91) { + t2 = end - 1; + if (!(t2 >= 0 && t2 < t1)) + return A.ioore(host, t2); + if (host.charCodeAt(t2) !== 93) + A._Uri__fail(host, start, "Missing end `]` to match `[` in host"); + t3 = start + 1; + if (!(t3 < t1)) + return A.ioore(host, t3); + zoneID = ""; + if (host.charCodeAt(t3) !== 118) { + index = A._Uri__checkZoneID(host, t3, t2); + if (index < t2) { + zoneIDstart = index + 1; + zoneID = A._Uri__normalizeZoneID(host, B.JSString_methods.startsWith$2(host, "25", zoneIDstart) ? index + 3 : zoneIDstart, t2, "%25"); + } + } else + index = t2; + isIPv6 = A.Uri__validateIPvAddress(host, t3, index); + hostChars = B.JSString_methods.substring$2(host, t3, index); + return "[" + (isIPv6 ? hostChars.toLowerCase() : hostChars) + zoneID + "]"; + } + for (i = start; i < end; ++i) { + if (!(i < t1)) + return A.ioore(host, i); + if (host.charCodeAt(i) === 58) { + index = B.JSString_methods.indexOf$2(host, "%", start); + index = index >= start && index < end ? index : end; + if (index < end) { + zoneIDstart = index + 1; + zoneID = A._Uri__normalizeZoneID(host, B.JSString_methods.startsWith$2(host, "25", zoneIDstart) ? index + 3 : zoneIDstart, end, "%25"); + } else + zoneID = ""; + A.Uri_parseIPv6Address(host, start, index); + return "[" + B.JSString_methods.substring$2(host, start, index) + zoneID + "]"; + } + } + return A._Uri__normalizeRegName(host, start, end); + }, + _Uri__checkZoneID(host, start, end) { + var index = B.JSString_methods.indexOf$2(host, "%", start); + return index >= start && index < end ? index : end; + }, + _Uri__normalizeZoneID(host, start, end, prefix) { + var t1, index, sectionStart, isNormalized, char, replacement, t2, t3, sourceLength, tail, slice, + buffer = prefix !== "" ? new A.StringBuffer(prefix) : null; + for (t1 = host.length, index = start, sectionStart = index, isNormalized = true; index < end;) { + if (!(index >= 0 && index < t1)) + return A.ioore(host, index); + char = host.charCodeAt(index); + if (char === 37) { + replacement = A._Uri__normalizeEscape(host, index, true); + t2 = replacement == null; + if (t2 && isNormalized) { + index += 3; + continue; + } + if (buffer == null) + buffer = new A.StringBuffer(""); + t3 = buffer._contents += B.JSString_methods.substring$2(host, sectionStart, index); + if (t2) + replacement = B.JSString_methods.substring$2(host, index, index + 3); + else if (replacement === "%") + A._Uri__fail(host, index, "ZoneID should not contain % anymore"); + buffer._contents = t3 + replacement; + index += 3; + sectionStart = index; + isNormalized = true; + } else if (char < 127 && (string$.x00_____.charCodeAt(char) & 1) !== 0) { + if (isNormalized && 65 <= char && 90 >= char) { + if (buffer == null) + buffer = new A.StringBuffer(""); + if (sectionStart < index) { + buffer._contents += B.JSString_methods.substring$2(host, sectionStart, index); + sectionStart = index; + } + isNormalized = false; + } + ++index; + } else { + sourceLength = 1; + if ((char & 64512) === 55296 && index + 1 < end) { + t2 = index + 1; + if (!(t2 < t1)) + return A.ioore(host, t2); + tail = host.charCodeAt(t2); + if ((tail & 64512) === 56320) { + char = 65536 + ((char & 1023) << 10) + (tail & 1023); + sourceLength = 2; + } + } + slice = B.JSString_methods.substring$2(host, sectionStart, index); + if (buffer == null) { + buffer = new A.StringBuffer(""); + t2 = buffer; + } else + t2 = buffer; + t2._contents += slice; + t3 = A._Uri__escapeChar(char); + t2._contents += t3; + index += sourceLength; + sectionStart = index; + } + } + if (buffer == null) + return B.JSString_methods.substring$2(host, start, end); + if (sectionStart < end) { + slice = B.JSString_methods.substring$2(host, sectionStart, end); + buffer._contents += slice; + } + t1 = buffer._contents; + return t1.charCodeAt(0) == 0 ? t1 : t1; + }, + _Uri__normalizeRegName(host, start, end) { + var t1, index, sectionStart, buffer, isNormalized, char, replacement, t2, slice, t3, sourceLength, tail, + _s128_ = string$.x00_____; + for (t1 = host.length, index = start, sectionStart = index, buffer = null, isNormalized = true; index < end;) { + if (!(index >= 0 && index < t1)) + return A.ioore(host, index); + char = host.charCodeAt(index); + if (char === 37) { + replacement = A._Uri__normalizeEscape(host, index, true); + t2 = replacement == null; + if (t2 && isNormalized) { + index += 3; + continue; + } + if (buffer == null) + buffer = new A.StringBuffer(""); + slice = B.JSString_methods.substring$2(host, sectionStart, index); + if (!isNormalized) + slice = slice.toLowerCase(); + t3 = buffer._contents += slice; + sourceLength = 3; + if (t2) + replacement = B.JSString_methods.substring$2(host, index, index + 3); + else if (replacement === "%") { + replacement = "%25"; + sourceLength = 1; + } + buffer._contents = t3 + replacement; + index += sourceLength; + sectionStart = index; + isNormalized = true; + } else if (char < 127 && (_s128_.charCodeAt(char) & 32) !== 0) { + if (isNormalized && 65 <= char && 90 >= char) { + if (buffer == null) + buffer = new A.StringBuffer(""); + if (sectionStart < index) { + buffer._contents += B.JSString_methods.substring$2(host, sectionStart, index); + sectionStart = index; + } + isNormalized = false; + } + ++index; + } else if (char <= 93 && (_s128_.charCodeAt(char) & 1024) !== 0) + A._Uri__fail(host, index, "Invalid character"); + else { + sourceLength = 1; + if ((char & 64512) === 55296 && index + 1 < end) { + t2 = index + 1; + if (!(t2 < t1)) + return A.ioore(host, t2); + tail = host.charCodeAt(t2); + if ((tail & 64512) === 56320) { + char = 65536 + ((char & 1023) << 10) + (tail & 1023); + sourceLength = 2; + } + } + slice = B.JSString_methods.substring$2(host, sectionStart, index); + if (!isNormalized) + slice = slice.toLowerCase(); + if (buffer == null) { + buffer = new A.StringBuffer(""); + t2 = buffer; + } else + t2 = buffer; + t2._contents += slice; + t3 = A._Uri__escapeChar(char); + t2._contents += t3; + index += sourceLength; + sectionStart = index; + } + } + if (buffer == null) + return B.JSString_methods.substring$2(host, start, end); + if (sectionStart < end) { + slice = B.JSString_methods.substring$2(host, sectionStart, end); + if (!isNormalized) + slice = slice.toLowerCase(); + buffer._contents += slice; + } + t1 = buffer._contents; + return t1.charCodeAt(0) == 0 ? t1 : t1; + }, + _Uri__makeScheme(scheme, start, end) { + var t1, i, containsUpperCase, codeUnit; + if (start === end) + return ""; + t1 = scheme.length; + if (!(start < t1)) + return A.ioore(scheme, start); + if (!A._Uri__isAlphabeticCharacter(scheme.charCodeAt(start))) + A._Uri__fail(scheme, start, "Scheme not starting with alphabetic character"); + for (i = start, containsUpperCase = false; i < end; ++i) { + if (!(i < t1)) + return A.ioore(scheme, i); + codeUnit = scheme.charCodeAt(i); + if (!(codeUnit < 128 && (string$.x00_____.charCodeAt(codeUnit) & 8) !== 0)) + A._Uri__fail(scheme, i, "Illegal scheme character"); + if (65 <= codeUnit && codeUnit <= 90) + containsUpperCase = true; + } + scheme = B.JSString_methods.substring$2(scheme, start, end); + return A._Uri__canonicalizeScheme(containsUpperCase ? scheme.toLowerCase() : scheme); + }, + _Uri__canonicalizeScheme(scheme) { + if (scheme === "http") + return "http"; + if (scheme === "file") + return "file"; + if (scheme === "https") + return "https"; + if (scheme === "package") + return "package"; + return scheme; + }, + _Uri__makeUserInfo(userInfo, start, end) { + if (userInfo == null) + return ""; + return A._Uri__normalizeOrSubstring(userInfo, start, end, 16, false, false); + }, + _Uri__makePath(path, start, end, pathSegments, scheme, hasAuthority) { + var t1, result, + isFile = scheme === "file", + ensureLeadingSlash = isFile || hasAuthority; + if (path == null) { + if (pathSegments == null) + return isFile ? "/" : ""; + t1 = A._arrayInstanceType(pathSegments); + result = new A.MappedListIterable(pathSegments, t1._eval$1("String(1)")._as(new A._Uri__makePath_closure()), t1._eval$1("MappedListIterable<1,String>")).join$1(0, "/"); + } else if (pathSegments != null) + throw A.wrapException(A.ArgumentError$("Both path and pathSegments specified", null)); + else + result = A._Uri__normalizeOrSubstring(path, start, end, 128, true, true); + if (result.length === 0) { + if (isFile) + return "/"; + } else if (ensureLeadingSlash && !B.JSString_methods.startsWith$1(result, "/")) + result = "/" + result; + return A._Uri__normalizePath(result, scheme, hasAuthority); + }, + _Uri__normalizePath(path, scheme, hasAuthority) { + var t1 = scheme.length === 0; + if (t1 && !hasAuthority && !B.JSString_methods.startsWith$1(path, "/") && !B.JSString_methods.startsWith$1(path, "\\")) + return A._Uri__normalizeRelativePath(path, !t1 || hasAuthority); + return A._Uri__removeDotSegments(path); + }, + _Uri__makeQuery(query, start, end, queryParameters) { + if (query != null) + return A._Uri__normalizeOrSubstring(query, start, end, 256, true, false); + return null; + }, + _Uri__makeFragment(fragment, start, end) { + if (fragment == null) + return null; + return A._Uri__normalizeOrSubstring(fragment, start, end, 256, true, false); + }, + _Uri__normalizeEscape(source, index, lowerCase) { + var t3, firstDigit, secondDigit, firstDigitValue, secondDigitValue, value, + _s128_ = string$.x00_____, + t1 = index + 2, + t2 = source.length; + if (t1 >= t2) + return "%"; + t3 = index + 1; + if (!(t3 >= 0 && t3 < t2)) + return A.ioore(source, t3); + firstDigit = source.charCodeAt(t3); + if (!(t1 >= 0)) + return A.ioore(source, t1); + secondDigit = source.charCodeAt(t1); + firstDigitValue = A.hexDigitValue(firstDigit); + secondDigitValue = A.hexDigitValue(secondDigit); + if (firstDigitValue < 0 || secondDigitValue < 0) + return "%"; + value = firstDigitValue * 16 + secondDigitValue; + if (value < 127) { + if (!(value >= 0)) + return A.ioore(_s128_, value); + t1 = (_s128_.charCodeAt(value) & 1) !== 0; + } else + t1 = false; + if (t1) + return A.Primitives_stringFromCharCode(lowerCase && 65 <= value && 90 >= value ? (value | 32) >>> 0 : value); + if (firstDigit >= 97 || secondDigit >= 97) + return B.JSString_methods.substring$2(source, index, index + 3).toUpperCase(); + return null; + }, + _Uri__escapeChar(char) { + var codeUnits, t1, flag, encodedBytes, index, byte, t2, t3, + _s16_ = "0123456789ABCDEF"; + if (char <= 127) { + codeUnits = new Uint8Array(3); + codeUnits[0] = 37; + t1 = char >>> 4; + if (!(t1 < 16)) + return A.ioore(_s16_, t1); + codeUnits[1] = _s16_.charCodeAt(t1); + codeUnits[2] = _s16_.charCodeAt(char & 15); + } else { + if (char > 2047) + if (char > 65535) { + flag = 240; + encodedBytes = 4; + } else { + flag = 224; + encodedBytes = 3; + } + else { + flag = 192; + encodedBytes = 2; + } + t1 = 3 * encodedBytes; + codeUnits = new Uint8Array(t1); + for (index = 0; --encodedBytes, encodedBytes >= 0; flag = 128) { + byte = B.JSInt_methods._shrReceiverPositive$1(char, 6 * encodedBytes) & 63 | flag; + if (!(index < t1)) + return A.ioore(codeUnits, index); + codeUnits[index] = 37; + t2 = index + 1; + t3 = byte >>> 4; + if (!(t3 < 16)) + return A.ioore(_s16_, t3); + if (!(t2 < t1)) + return A.ioore(codeUnits, t2); + codeUnits[t2] = _s16_.charCodeAt(t3); + t3 = index + 2; + if (!(t3 < t1)) + return A.ioore(codeUnits, t3); + codeUnits[t3] = _s16_.charCodeAt(byte & 15); + index += 3; + } + } + return A.String_String$fromCharCodes(codeUnits, 0, null); + }, + _Uri__normalizeOrSubstring(component, start, end, charMask, escapeDelimiters, replaceBackslash) { + var t1 = A._Uri__normalize(component, start, end, charMask, escapeDelimiters, replaceBackslash); + return t1 == null ? B.JSString_methods.substring$2(component, start, end) : t1; + }, + _Uri__normalize(component, start, end, charMask, escapeDelimiters, replaceBackslash) { + var t1, t2, index, sectionStart, buffer, char, sourceLength, replacement, t3, tail, _null = null, + _s128_ = string$.x00_____; + for (t1 = !escapeDelimiters, t2 = component.length, index = start, sectionStart = index, buffer = _null; index < end;) { + if (!(index >= 0 && index < t2)) + return A.ioore(component, index); + char = component.charCodeAt(index); + if (char < 127 && (_s128_.charCodeAt(char) & charMask) !== 0) + ++index; + else { + sourceLength = 1; + if (char === 37) { + replacement = A._Uri__normalizeEscape(component, index, false); + if (replacement == null) { + index += 3; + continue; + } + if ("%" === replacement) + replacement = "%25"; + else + sourceLength = 3; + } else if (char === 92 && replaceBackslash) + replacement = "/"; + else if (t1 && char <= 93 && (_s128_.charCodeAt(char) & 1024) !== 0) { + A._Uri__fail(component, index, "Invalid character"); + sourceLength = _null; + replacement = sourceLength; + } else { + if ((char & 64512) === 55296) { + t3 = index + 1; + if (t3 < end) { + if (!(t3 < t2)) + return A.ioore(component, t3); + tail = component.charCodeAt(t3); + if ((tail & 64512) === 56320) { + char = 65536 + ((char & 1023) << 10) + (tail & 1023); + sourceLength = 2; + } + } + } + replacement = A._Uri__escapeChar(char); + } + if (buffer == null) { + buffer = new A.StringBuffer(""); + t3 = buffer; + } else + t3 = buffer; + t3._contents = (t3._contents += B.JSString_methods.substring$2(component, sectionStart, index)) + replacement; + if (typeof sourceLength !== "number") + return A.iae(sourceLength); + index += sourceLength; + sectionStart = index; + } + } + if (buffer == null) + return _null; + if (sectionStart < end) { + t1 = B.JSString_methods.substring$2(component, sectionStart, end); + buffer._contents += t1; + } + t1 = buffer._contents; + return t1.charCodeAt(0) == 0 ? t1 : t1; + }, + _Uri__mayContainDotSegments(path) { + if (B.JSString_methods.startsWith$1(path, ".")) + return true; + return B.JSString_methods.indexOf$1(path, "/.") !== -1; + }, + _Uri__removeDotSegments(path) { + var output, t1, t2, appendSlash, _i, segment, t3; + if (!A._Uri__mayContainDotSegments(path)) + return path; + output = A._setArrayType([], type$.JSArray_String); + for (t1 = path.split("/"), t2 = t1.length, appendSlash = false, _i = 0; _i < t2; ++_i) { + segment = t1[_i]; + if (segment === "..") { + t3 = output.length; + if (t3 !== 0) { + if (0 >= t3) + return A.ioore(output, -1); + output.pop(); + if (output.length === 0) + B.JSArray_methods.add$1(output, ""); + } + appendSlash = true; + } else { + appendSlash = "." === segment; + if (!appendSlash) + B.JSArray_methods.add$1(output, segment); + } + } + if (appendSlash) + B.JSArray_methods.add$1(output, ""); + return B.JSArray_methods.join$1(output, "/"); + }, + _Uri__normalizeRelativePath(path, allowScheme) { + var output, t1, t2, appendSlash, _i, segment; + if (!A._Uri__mayContainDotSegments(path)) + return !allowScheme ? A._Uri__escapeScheme(path) : path; + output = A._setArrayType([], type$.JSArray_String); + for (t1 = path.split("/"), t2 = t1.length, appendSlash = false, _i = 0; _i < t2; ++_i) { + segment = t1[_i]; + if (".." === segment) { + if (output.length !== 0 && B.JSArray_methods.get$last(output) !== "..") { + if (0 >= output.length) + return A.ioore(output, -1); + output.pop(); + } else + B.JSArray_methods.add$1(output, ".."); + appendSlash = true; + } else { + appendSlash = "." === segment; + if (!appendSlash) + B.JSArray_methods.add$1(output, segment.length === 0 && output.length === 0 ? "./" : segment); + } + } + if (output.length === 0) + return "./"; + if (appendSlash) + B.JSArray_methods.add$1(output, ""); + if (!allowScheme) { + if (0 >= output.length) + return A.ioore(output, 0); + B.JSArray_methods.$indexSet(output, 0, A._Uri__escapeScheme(output[0])); + } + return B.JSArray_methods.join$1(output, "/"); + }, + _Uri__escapeScheme(path) { + var i, char, t2, + _s128_ = string$.x00_____, + t1 = path.length; + if (t1 >= 2 && A._Uri__isAlphabeticCharacter(path.charCodeAt(0))) + for (i = 1; i < t1; ++i) { + char = path.charCodeAt(i); + if (char === 58) + return B.JSString_methods.substring$2(path, 0, i) + "%3A" + B.JSString_methods.substring$1(path, i + 1); + if (char <= 127) { + if (!(char < 128)) + return A.ioore(_s128_, char); + t2 = (_s128_.charCodeAt(char) & 8) === 0; + } else + t2 = true; + if (t2) + break; + } + return path; + }, + _Uri__packageNameEnd(uri, path) { + if (uri.isScheme$1("package") && uri._host == null) + return A._skipPackageNameChars(path, 0, path.length); + return -1; + }, + _Uri__hexCharPairToByte(s, pos) { + var t1, byte, i, t2, charCode; + for (t1 = s.length, byte = 0, i = 0; i < 2; ++i) { + t2 = pos + i; + if (!(t2 < t1)) + return A.ioore(s, t2); + charCode = s.charCodeAt(t2); + if (48 <= charCode && charCode <= 57) + byte = byte * 16 + charCode - 48; + else { + charCode |= 32; + if (97 <= charCode && charCode <= 102) + byte = byte * 16 + charCode - 87; + else + throw A.wrapException(A.ArgumentError$("Invalid URL encoding", null)); + } + } + return byte; + }, + _Uri__uriDecode(text, start, end, encoding, plusToSpace) { + var simple, codeUnit, t2, bytes, + t1 = text.length, + i = start; + for (;;) { + if (!(i < end)) { + simple = true; + break; + } + if (!(i < t1)) + return A.ioore(text, i); + codeUnit = text.charCodeAt(i); + if (codeUnit <= 127) + t2 = codeUnit === 37; + else + t2 = true; + if (t2) { + simple = false; + break; + } + ++i; + } + if (simple) + if (B.C_Utf8Codec === encoding) + return B.JSString_methods.substring$2(text, start, end); + else + bytes = new A.CodeUnits(B.JSString_methods.substring$2(text, start, end)); + else { + bytes = A._setArrayType([], type$.JSArray_int); + for (i = start; i < end; ++i) { + if (!(i < t1)) + return A.ioore(text, i); + codeUnit = text.charCodeAt(i); + if (codeUnit > 127) + throw A.wrapException(A.ArgumentError$("Illegal percent encoding in URI", null)); + if (codeUnit === 37) { + if (i + 3 > t1) + throw A.wrapException(A.ArgumentError$("Truncated URI", null)); + B.JSArray_methods.add$1(bytes, A._Uri__hexCharPairToByte(text, i + 1)); + i += 2; + } else + B.JSArray_methods.add$1(bytes, codeUnit); + } + } + return encoding.decode$1(bytes); + }, + _Uri__isAlphabeticCharacter(codeUnit) { + var lowerCase = codeUnit | 32; + return 97 <= lowerCase && lowerCase <= 122; + }, + UriData__writeUri(mimeType, charsetName, parameters, buffer, indices) { + buffer._contents = buffer._contents; + }, + UriData__parse(text, start, sourceUri) { + var t1, i, slashIndex, char, equalsIndex, lastSeparator, t2, data, + _s17_ = "Invalid MIME type", + indices = A._setArrayType([start - 1], type$.JSArray_int); + for (t1 = text.length, i = start, slashIndex = -1, char = null; i < t1; ++i) { + char = text.charCodeAt(i); + if (char === 44 || char === 59) + break; + if (char === 47) { + if (slashIndex < 0) { + slashIndex = i; + continue; + } + throw A.wrapException(A.FormatException$(_s17_, text, i)); + } + } + if (slashIndex < 0 && i > start) + throw A.wrapException(A.FormatException$(_s17_, text, i)); + while (char !== 44) { + B.JSArray_methods.add$1(indices, i); + ++i; + for (equalsIndex = -1; i < t1; ++i) { + if (!(i >= 0)) + return A.ioore(text, i); + char = text.charCodeAt(i); + if (char === 61) { + if (equalsIndex < 0) + equalsIndex = i; + } else if (char === 59 || char === 44) + break; + } + if (equalsIndex >= 0) + B.JSArray_methods.add$1(indices, equalsIndex); + else { + lastSeparator = B.JSArray_methods.get$last(indices); + if (char !== 44 || i !== lastSeparator + 7 || !B.JSString_methods.startsWith$2(text, "base64", lastSeparator + 1)) + throw A.wrapException(A.FormatException$("Expecting '='", text, i)); + break; + } + } + B.JSArray_methods.add$1(indices, i); + t2 = i + 1; + if ((indices.length & 1) === 1) + text = B.C_Base64Codec.normalize$3(text, t2, t1); + else { + data = A._Uri__normalize(text, t2, t1, 256, true, false); + if (data != null) + text = B.JSString_methods.replaceRange$3(text, t2, t1, data); + } + return new A.UriData(text, indices, sourceUri); + }, + UriData__uriEncodeBytes(canonicalMask, bytes, buffer) { + var t1, byteOr, i, byte, t2, + _s16_ = "0123456789ABCDEF"; + for (t1 = bytes.length, byteOr = 0, i = 0; i < t1; ++i) { + byte = bytes[i]; + byteOr |= byte; + if (byte < 128 && (string$.x00_____.charCodeAt(byte) & canonicalMask) !== 0) { + t2 = A.Primitives_stringFromCharCode(byte); + buffer._contents += t2; + } else { + t2 = A.Primitives_stringFromCharCode(37); + buffer._contents += t2; + t2 = byte >>> 4; + if (!(t2 < 16)) + return A.ioore(_s16_, t2); + t2 = A.Primitives_stringFromCharCode(_s16_.charCodeAt(t2)); + buffer._contents += t2; + t2 = A.Primitives_stringFromCharCode(_s16_.charCodeAt(byte & 15)); + buffer._contents += t2; + } + } + if ((byteOr & 4294967040) !== 0) + for (i = 0; i < t1; ++i) { + byte = bytes[i]; + if (byte > 255) + throw A.wrapException(A.ArgumentError$value(byte, "non-byte value", null)); + } + }, + _scan(uri, start, end, state, indices) { + var t1, i, char, t2, transition, + _s2112_ = '\xe1\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xe1\xe1\xe1\x01\xe1\xe1\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xe1\xe3\xe1\xe1\x01\xe1\x01\xe1\xcd\x01\xe1\x01\x01\x01\x01\x01\x01\x01\x01\x0e\x03\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01"\x01\xe1\x01\xe1\xac\xe1\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xe1\xe1\xe1\x01\xe1\xe1\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xe1\xea\xe1\xe1\x01\xe1\x01\xe1\xcd\x01\xe1\x01\x01\x01\x01\x01\x01\x01\x01\x01\n\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01"\x01\xe1\x01\xe1\xac\xeb\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\xeb\xeb\xeb\x8b\xeb\xeb\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\xeb\x83\xeb\xeb\x8b\xeb\x8b\xeb\xcd\x8b\xeb\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x92\x83\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\xeb\x8b\xeb\x8b\xeb\xac\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xeb\xeb\v\xeb\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xebD\xeb\xeb\v\xeb\v\xeb\xcd\v\xeb\v\v\v\v\v\v\v\v\x12D\v\v\v\v\v\v\v\v\v\v\xeb\v\xeb\v\xeb\xac\xe5\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\xe5\xe5\xe5\x05\xe5D\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe8\x8a\xe5\xe5\x05\xe5\x05\xe5\xcd\x05\xe5\x05\x05\x05\x05\x05\x05\x05\x05\x05\x8a\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05f\x05\xe5\x05\xe5\xac\xe5\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\xe5\xe5\xe5\x05\xe5D\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\x8a\xe5\xe5\x05\xe5\x05\xe5\xcd\x05\xe5\x05\x05\x05\x05\x05\x05\x05\x05\x05\x8a\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05f\x05\xe5\x05\xe5\xac\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7D\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\x8a\xe7\xe7\xe7\xe7\xe7\xe7\xcd\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\x8a\xe7\x07\x07\x07\x07\x07\x07\x07\x07\x07\xe7\xe7\xe7\xe7\xe7\xac\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7D\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\x8a\xe7\xe7\xe7\xe7\xe7\xe7\xcd\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\x8a\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\xe7\xe7\xe7\xe7\xe7\xac\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\x05\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xeb\xeb\v\xeb\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xea\xeb\xeb\v\xeb\v\xeb\xcd\v\xeb\v\v\v\v\v\v\v\v\x10\xea\v\v\v\v\v\v\v\v\v\v\xeb\v\xeb\v\xeb\xac\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xeb\xeb\v\xeb\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xea\xeb\xeb\v\xeb\v\xeb\xcd\v\xeb\v\v\v\v\v\v\v\v\x12\n\v\v\v\v\v\v\v\v\v\v\xeb\v\xeb\v\xeb\xac\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xeb\xeb\v\xeb\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xea\xeb\xeb\v\xeb\v\xeb\xcd\v\xeb\v\v\v\v\v\v\v\v\v\n\v\v\v\v\v\v\v\v\v\v\xeb\v\xeb\v\xeb\xac\xec\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\xec\xec\xec\f\xec\xec\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\xec\xec\xec\xec\f\xec\f\xec\xcd\f\xec\f\f\f\f\f\f\f\f\f\xec\f\f\f\f\f\f\f\f\f\f\xec\f\xec\f\xec\f\xed\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\xed\xed\xed\r\xed\xed\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\xed\xed\xed\xed\r\xed\r\xed\xed\r\xed\r\r\r\r\r\r\r\r\r\xed\r\r\r\r\r\r\r\r\r\r\xed\r\xed\r\xed\r\xe1\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xe1\xe1\xe1\x01\xe1\xe1\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xe1\xea\xe1\xe1\x01\xe1\x01\xe1\xcd\x01\xe1\x01\x01\x01\x01\x01\x01\x01\x01\x0f\xea\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01"\x01\xe1\x01\xe1\xac\xe1\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xe1\xe1\xe1\x01\xe1\xe1\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xe1\xe9\xe1\xe1\x01\xe1\x01\xe1\xcd\x01\xe1\x01\x01\x01\x01\x01\x01\x01\x01\x01\t\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01"\x01\xe1\x01\xe1\xac\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xeb\xeb\v\xeb\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xea\xeb\xeb\v\xeb\v\xeb\xcd\v\xeb\v\v\v\v\v\v\v\v\x11\xea\v\v\v\v\v\v\v\v\v\v\xeb\v\xeb\v\xeb\xac\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xeb\xeb\v\xeb\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xe9\xeb\xeb\v\xeb\v\xeb\xcd\v\xeb\v\v\v\v\v\v\v\v\v\t\v\v\v\v\v\v\v\v\v\v\xeb\v\xeb\v\xeb\xac\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xeb\xeb\v\xeb\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xea\xeb\xeb\v\xeb\v\xeb\xcd\v\xeb\v\v\v\v\v\v\v\v\x13\xea\v\v\v\v\v\v\v\v\v\v\xeb\v\xeb\v\xeb\xac\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xeb\xeb\v\xeb\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xea\xeb\xeb\v\xeb\v\xeb\xcd\v\xeb\v\v\v\v\v\v\v\v\v\xea\v\v\v\v\v\v\v\v\v\v\xeb\v\xeb\v\xeb\xac\xf5\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\x15\xf5\x15\x15\xf5\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\xf5\xf5\xf5\xf5\xf5\xf5'; + for (t1 = uri.length, i = start; i < end; ++i) { + if (!(i < t1)) + return A.ioore(uri, i); + char = uri.charCodeAt(i) ^ 96; + if (char > 95) + char = 31; + t2 = state * 96 + char; + if (!(t2 < 2112)) + return A.ioore(_s2112_, t2); + transition = _s2112_.charCodeAt(t2); + state = transition & 31; + B.JSArray_methods.$indexSet(indices, transition >>> 5, i); + } + return state; + }, + _SimpleUri__packageNameEnd(uri) { + if (uri._schemeEnd === 7 && B.JSString_methods.startsWith$1(uri._uri, "package") && uri._hostStart <= 0) + return A._skipPackageNameChars(uri._uri, uri._pathStart, uri._queryStart); + return -1; + }, + _skipPackageNameChars(source, start, end) { + var t1, i, dots, char; + for (t1 = source.length, i = start, dots = 0; i < end; ++i) { + if (!(i >= 0 && i < t1)) + return A.ioore(source, i); + char = source.charCodeAt(i); + if (char === 47) + return dots !== 0 ? i : -1; + if (char === 37 || char === 58) + return -1; + dots |= char ^ 46; + } + return -1; + }, + _caseInsensitiveCompareStart(prefix, string, start) { + var t1, t2, result, i, t3, stringChar, delta, lowerChar; + for (t1 = prefix.length, t2 = string.length, result = 0, i = 0; i < t1; ++i) { + t3 = start + i; + if (!(t3 < t2)) + return A.ioore(string, t3); + stringChar = string.charCodeAt(t3); + delta = prefix.charCodeAt(i) ^ stringChar; + if (delta !== 0) { + if (delta === 32) { + lowerChar = stringChar | delta; + if (97 <= lowerChar && lowerChar <= 122) { + result = 32; + continue; + } + } + return -1; + } + } + return result; + }, + _BigIntImpl: function _BigIntImpl(t0, t1, t2) { + this._isNegative = t0; + this._digits = t1; + this._used = t2; + }, + _BigIntImpl_hashCode_combine: function _BigIntImpl_hashCode_combine() { + }, + _BigIntImpl_hashCode_finish: function _BigIntImpl_hashCode_finish() { + }, + _FinalizationRegistryWrapper: function _FinalizationRegistryWrapper(t0, t1) { + this._registry = t0; + this.$ti = t1; + }, + DateTime: function DateTime(t0, t1, t2) { + this._core$_value = t0; + this._microsecond = t1; + this.isUtc = t2; + }, + Duration: function Duration(t0) { + this._duration = t0; + }, + _Enum: function _Enum() { + }, + Error: function Error() { + }, + AssertionError: function AssertionError(t0) { + this.message = t0; + }, + TypeError: function TypeError() { + }, + ArgumentError: function ArgumentError(t0, t1, t2, t3) { + var _ = this; + _._hasValue = t0; + _.invalidValue = t1; + _.name = t2; + _.message = t3; + }, + RangeError: function RangeError(t0, t1, t2, t3, t4, t5) { + var _ = this; + _.start = t0; + _.end = t1; + _._hasValue = t2; + _.invalidValue = t3; + _.name = t4; + _.message = t5; + }, + IndexError: function IndexError(t0, t1, t2, t3, t4) { + var _ = this; + _.length = t0; + _._hasValue = t1; + _.invalidValue = t2; + _.name = t3; + _.message = t4; + }, + UnsupportedError: function UnsupportedError(t0) { + this.message = t0; + }, + UnimplementedError: function UnimplementedError(t0) { + this.message = t0; + }, + StateError: function StateError(t0) { + this.message = t0; + }, + ConcurrentModificationError: function ConcurrentModificationError(t0) { + this.modifiedObject = t0; + }, + OutOfMemoryError: function OutOfMemoryError() { + }, + StackOverflowError: function StackOverflowError() { + }, + _Exception: function _Exception(t0) { + this.message = t0; + }, + FormatException: function FormatException(t0, t1, t2) { + this.message = t0; + this.source = t1; + this.offset = t2; + }, + IntegerDivisionByZeroException: function IntegerDivisionByZeroException() { + }, + Iterable: function Iterable() { + }, + MapEntry: function MapEntry(t0, t1, t2) { + this.key = t0; + this.value = t1; + this.$ti = t2; + }, + Null: function Null() { + }, + Object: function Object() { + }, + _StringStackTrace: function _StringStackTrace(t0) { + this._stackTrace = t0; + }, + StringBuffer: function StringBuffer(t0) { + this._contents = t0; + }, + Uri_parseIPv6Address_error: function Uri_parseIPv6Address_error(t0) { + this.host = t0; + }, + _Uri: function _Uri(t0, t1, t2, t3, t4, t5, t6) { + var _ = this; + _.scheme = t0; + _._userInfo = t1; + _._host = t2; + _._port = t3; + _.path = t4; + _._query = t5; + _._fragment = t6; + _.___Uri_hashCode_FI = _.___Uri_pathSegments_FI = _.___Uri__text_FI = $; + }, + _Uri__makePath_closure: function _Uri__makePath_closure() { + }, + UriData: function UriData(t0, t1, t2) { + this._text = t0; + this._separatorIndices = t1; + this._uriCache = t2; + }, + _SimpleUri: function _SimpleUri(t0, t1, t2, t3, t4, t5, t6, t7) { + var _ = this; + _._uri = t0; + _._schemeEnd = t1; + _._hostStart = t2; + _._portStart = t3; + _._pathStart = t4; + _._queryStart = t5; + _._fragmentStart = t6; + _._schemeCache = t7; + _._hashCodeCache = null; + }, + _DataUri: function _DataUri(t0, t1, t2, t3, t4, t5, t6) { + var _ = this; + _.scheme = t0; + _._userInfo = t1; + _._host = t2; + _._port = t3; + _.path = t4; + _._query = t5; + _._fragment = t6; + _.___Uri_hashCode_FI = _.___Uri_pathSegments_FI = _.___Uri__text_FI = $; + }, + Expando: function Expando(t0, t1) { + this._jsWeakMap = t0; + this.$ti = t1; + }, + ListToJSArray_get_toJS(_this, $T) { + return _this; + }, + JSAnyUtilityExtension_instanceOfString(_this, constructorName) { + var parts, $constructor, t1, _i, t2; + if (constructorName.length === 0) + return false; + parts = constructorName.split("."); + $constructor = init.G; + for (t1 = parts.length, _i = 0; _i < t1; ++_i, $constructor = t2) { + t2 = $constructor[parts[_i]]; + A._asJSObjectQ(t2); + if (t2 == null) + return false; + } + return _this instanceof type$.JavaScriptFunction._as($constructor); + }, + NullRejectionException: function NullRejectionException(t0) { + this.isUndefined = t0; + }, + _functionToJS1(f) { + var result; + if (typeof f == "function") + throw A.wrapException(A.ArgumentError$("Attempting to rewrap a JS function.", null)); + result = function(_call, f) { + return function(arg1) { + return _call(f, arg1, arguments.length); + }; + }(A._callDartFunctionFast1, f); + result[$.$get$DART_CLOSURE_PROPERTY_NAME()] = f; + return result; + }, + _functionToJS2(f) { + var result; + if (typeof f == "function") + throw A.wrapException(A.ArgumentError$("Attempting to rewrap a JS function.", null)); + result = function(_call, f) { + return function(arg1, arg2) { + return _call(f, arg1, arg2, arguments.length); + }; + }(A._callDartFunctionFast2, f); + result[$.$get$DART_CLOSURE_PROPERTY_NAME()] = f; + return result; + }, + _functionToJS3(f) { + var result; + if (typeof f == "function") + throw A.wrapException(A.ArgumentError$("Attempting to rewrap a JS function.", null)); + result = function(_call, f) { + return function(arg1, arg2, arg3) { + return _call(f, arg1, arg2, arg3, arguments.length); + }; + }(A._callDartFunctionFast3, f); + result[$.$get$DART_CLOSURE_PROPERTY_NAME()] = f; + return result; + }, + _functionToJS4(f) { + var result; + if (typeof f == "function") + throw A.wrapException(A.ArgumentError$("Attempting to rewrap a JS function.", null)); + result = function(_call, f) { + return function(arg1, arg2, arg3, arg4) { + return _call(f, arg1, arg2, arg3, arg4, arguments.length); + }; + }(A._callDartFunctionFast4, f); + result[$.$get$DART_CLOSURE_PROPERTY_NAME()] = f; + return result; + }, + _functionToJS5(f) { + var result; + if (typeof f == "function") + throw A.wrapException(A.ArgumentError$("Attempting to rewrap a JS function.", null)); + result = function(_call, f) { + return function(arg1, arg2, arg3, arg4, arg5) { + return _call(f, arg1, arg2, arg3, arg4, arg5, arguments.length); + }; + }(A._callDartFunctionFast5, f); + result[$.$get$DART_CLOSURE_PROPERTY_NAME()] = f; + return result; + }, + _callDartFunctionFast1(callback, arg1, $length) { + type$.Function._as(callback); + if (A._asInt($length) >= 1) + return callback.call$1(arg1); + return callback.call$0(); + }, + _callDartFunctionFast2(callback, arg1, arg2, $length) { + type$.Function._as(callback); + A._asInt($length); + if ($length >= 2) + return callback.call$2(arg1, arg2); + if ($length === 1) + return callback.call$1(arg1); + return callback.call$0(); + }, + _callDartFunctionFast3(callback, arg1, arg2, arg3, $length) { + type$.Function._as(callback); + A._asInt($length); + if ($length >= 3) + return callback.call$3(arg1, arg2, arg3); + if ($length === 2) + return callback.call$2(arg1, arg2); + if ($length === 1) + return callback.call$1(arg1); + return callback.call$0(); + }, + _callDartFunctionFast4(callback, arg1, arg2, arg3, arg4, $length) { + type$.Function._as(callback); + A._asInt($length); + if ($length >= 4) + return callback.call$4(arg1, arg2, arg3, arg4); + if ($length === 3) + return callback.call$3(arg1, arg2, arg3); + if ($length === 2) + return callback.call$2(arg1, arg2); + if ($length === 1) + return callback.call$1(arg1); + return callback.call$0(); + }, + _callDartFunctionFast5(callback, arg1, arg2, arg3, arg4, arg5, $length) { + type$.Function._as(callback); + A._asInt($length); + if ($length >= 5) + return callback.call$5(arg1, arg2, arg3, arg4, arg5); + if ($length === 4) + return callback.call$4(arg1, arg2, arg3, arg4); + if ($length === 3) + return callback.call$3(arg1, arg2, arg3); + if ($length === 2) + return callback.call$2(arg1, arg2); + if ($length === 1) + return callback.call$1(arg1); + return callback.call$0(); + }, + _noJsifyRequired(o) { + return o == null || A._isBool(o) || typeof o == "number" || typeof o == "string" || type$.Int8List._is(o) || type$.Uint8List._is(o) || type$.Uint8ClampedList._is(o) || type$.Int16List._is(o) || type$.Uint16List._is(o) || type$.Int32List._is(o) || type$.Uint32List._is(o) || type$.Float32List._is(o) || type$.Float64List._is(o) || type$.ByteBuffer._is(o) || type$.ByteData._is(o); + }, + jsify(object) { + if (A._noJsifyRequired(object)) + return object; + return new A.jsify__convert(new A._IdentityHashMap(type$._IdentityHashMap_of_nullable_Object_and_nullable_Object)).call$1(object); + }, + callMethod(o, method, args, $T) { + return $T._as(o[method].apply(o, args)); + }, + callConstructor(constr, $arguments, $T) { + var args, factoryFunction; + if ($arguments == null) + return $T._as(new constr()); + if ($arguments instanceof Array) + switch ($arguments.length) { + case 0: + return $T._as(new constr()); + case 1: + return $T._as(new constr($arguments[0])); + case 2: + return $T._as(new constr($arguments[0], $arguments[1])); + case 3: + return $T._as(new constr($arguments[0], $arguments[1], $arguments[2])); + case 4: + return $T._as(new constr($arguments[0], $arguments[1], $arguments[2], $arguments[3])); + } + args = [null]; + B.JSArray_methods.addAll$1(args, $arguments); + factoryFunction = constr.bind.apply(constr, args); + String(factoryFunction); + return $T._as(new factoryFunction()); + }, + promiseToFuture(jsPromise, $T) { + var t1 = new A._Future($.Zone__current, $T._eval$1("_Future<0>")), + completer = new A._AsyncCompleter(t1, $T._eval$1("_AsyncCompleter<0>")); + jsPromise.then(A.convertDartClosureToJS(new A.promiseToFuture_closure(completer, $T), 1), A.convertDartClosureToJS(new A.promiseToFuture_closure0(completer), 1)); + return t1; + }, + _noDartifyRequired(o) { + return o == null || typeof o === "boolean" || typeof o === "number" || typeof o === "string" || o instanceof Int8Array || o instanceof Uint8Array || o instanceof Uint8ClampedArray || o instanceof Int16Array || o instanceof Uint16Array || o instanceof Int32Array || o instanceof Uint32Array || o instanceof Float32Array || o instanceof Float64Array || o instanceof ArrayBuffer || o instanceof DataView; + }, + dartify(o) { + if (A._noDartifyRequired(o)) + return o; + return new A.dartify_convert(new A._IdentityHashMap(type$._IdentityHashMap_of_nullable_Object_and_nullable_Object)).call$1(o); + }, + jsify__convert: function jsify__convert(t0) { + this._convertedObjects = t0; + }, + promiseToFuture_closure: function promiseToFuture_closure(t0, t1) { + this.completer = t0; + this.T = t1; + }, + promiseToFuture_closure0: function promiseToFuture_closure0(t0) { + this.completer = t0; + }, + dartify_convert: function dartify_convert(t0) { + this._convertedObjects = t0; + }, + max(a, b, $T) { + A.checkTypeBound($T, type$.num, "T", "max"); + return Math.max($T._as(a), $T._as(b)); + }, + sqrt(x) { + return Math.sqrt(x); + }, + sin(radians) { + return Math.sin(radians); + }, + cos(radians) { + return Math.cos(radians); + }, + tan(radians) { + return Math.tan(radians); + }, + acos(x) { + return Math.acos(x); + }, + asin(x) { + return Math.asin(x); + }, + atan(x) { + return Math.atan(x); + }, + _JSSecureRandom: function _JSSecureRandom(t0) { + this._math$_buffer = t0; + }, + DelegatingStreamSink: function DelegatingStreamSink() { + }, + DefaultEquality: function DefaultEquality(t0) { + this.$ti = t0; + }, + ListEquality: function ListEquality(t0) { + this.$ti = t0; + }, + NonGrowableListMixin: function NonGrowableListMixin() { + }, + UnmodifiableMapMixin: function UnmodifiableMapMixin() { + }, + DriftCommunication$(_channel, serialize) { + var t1 = new A.DriftCommunication(_channel, serialize, A.LinkedHashMap_LinkedHashMap$_empty(type$.int, type$._PendingRequest), A.StreamController_StreamController(null, null, true, type$.Request), new A._AsyncCompleter(new A._Future($.Zone__current, type$._Future_void), type$._AsyncCompleter_void)); + t1.DriftCommunication$3$debugLog$serialize(_channel, false, serialize); + return t1; + }, + DriftCommunication: function DriftCommunication(t0, t1, t2, t3, t4) { + var _ = this; + _._communication$_channel = t0; + _._serialize = t1; + _._currentRequestId = 0; + _._pendingRequests = t2; + _._incomingRequests = t3; + _._startedClosingLocally = false; + _._closeCompleter = t4; + }, + DriftCommunication_closure: function DriftCommunication_closure(t0) { + this.$this = t0; + }, + DriftCommunication_setRequestHandler_closure: function DriftCommunication_setRequestHandler_closure(t0, t1) { + this.$this = t0; + this.handler = t1; + }, + _PendingRequest: function _PendingRequest(t0, t1) { + this.completer = t0; + this.requestTrace = t1; + }, + ConnectionClosedException: function ConnectionClosedException() { + }, + DriftRemoteException: function DriftRemoteException(t0) { + this.remoteCause = t0; + }, + DriftProtocol: function DriftProtocol() { + }, + DriftProtocol_decodePayload_readInt: function DriftProtocol_decodePayload_readInt(t0) { + this._box_0 = t0; + }, + DriftProtocol_decodePayload_readNullableInt: function DriftProtocol_decodePayload_readNullableInt(t0) { + this._box_0 = t0; + }, + Message: function Message() { + }, + Request: function Request(t0, t1) { + this.id = t0; + this.payload = t1; + }, + SuccessResponse: function SuccessResponse(t0, t1) { + this.requestId = t0; + this.response = t1; + }, + PrimitiveResponsePayload: function PrimitiveResponsePayload(t0) { + this.message = t0; + }, + ErrorResponse: function ErrorResponse(t0, t1, t2) { + this.requestId = t0; + this.error = t1; + this.stackTrace = t2; + }, + CancelledResponse: function CancelledResponse(t0) { + this.requestId = t0; + }, + NoArgsRequest: function NoArgsRequest(t0, t1) { + this.index = t0; + this._name = t1; + }, + StatementMethod: function StatementMethod(t0, t1) { + this.index = t0; + this._name = t1; + }, + ExecuteQuery: function ExecuteQuery(t0, t1, t2, t3) { + var _ = this; + _.method = t0; + _.sql = t1; + _.args = t2; + _.executorId = t3; + }, + RequestCancellation: function RequestCancellation(t0) { + this.originalRequestId = t0; + }, + ExecuteBatchedStatement: function ExecuteBatchedStatement(t0, t1) { + this.stmts = t0; + this.executorId = t1; + }, + NestedExecutorControl: function NestedExecutorControl(t0, t1) { + this.index = t0; + this._name = t1; + }, + RunNestedExecutorControl: function RunNestedExecutorControl(t0, t1) { + this.control = t0; + this.executorId = t1; + }, + EnsureOpen: function EnsureOpen(t0, t1) { + this.schemaVersion = t0; + this.executorId = t1; + }, + ServerInfo: function ServerInfo(t0) { + this.dialect = t0; + }, + RunBeforeOpen: function RunBeforeOpen(t0, t1) { + this.details = t0; + this.createdExecutor = t1; + }, + NotifyTablesUpdated: function NotifyTablesUpdated(t0) { + this.updates = t0; + }, + SelectResult: function SelectResult(t0) { + this.rows = t0; + }, + ServerImplementation$(connection, allowRemoteShutdown, closeExecutorWhenShutdown) { + var _null = null, + t1 = type$.int, + t2 = A._setArrayType([], type$.JSArray_int); + t1 = new A.ServerImplementation(connection, false, true, A.LinkedHashMap_LinkedHashMap$_empty(t1, type$.QueryExecutor), A.LinkedHashMap_LinkedHashMap$_empty(t1, type$.CancellationToken_dynamic), t2, new A._SyncBroadcastStreamController(_null, _null, type$._SyncBroadcastStreamController_void), A.LinkedHashSet_LinkedHashSet$_empty(type$.DriftCommunication), new A._AsyncCompleter(new A._Future($.Zone__current, type$._Future_void), type$._AsyncCompleter_void), A.StreamController_StreamController(_null, _null, false, type$.NotifyTablesUpdated)); + t1.ServerImplementation$3(connection, false, true); + return t1; + }, + ServerImplementation: function ServerImplementation(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9) { + var _ = this; + _.connection = t0; + _.allowRemoteShutdown = t1; + _.closeExecutorWhenShutdown = t2; + _._managedExecutors = t3; + _._knownSchemaVersion = _._currentExecutorId = 0; + _._cancellableOperations = t4; + _._executorBacklog = t5; + _._backlogUpdated = t6; + _._isShuttingDown = false; + _._activeChannels = t7; + _._done = t8; + _._tableUpdateNotifications = t9; + }, + ServerImplementation_closure: function ServerImplementation_closure(t0) { + this.$this = t0; + }, + ServerImplementation_serve_closure: function ServerImplementation_serve_closure(t0, t1) { + this.$this = t0; + this.comm = t1; + }, + ServerImplementation_serve_closure0: function ServerImplementation_serve_closure0(t0, t1) { + this.$this = t0; + this.comm = t1; + }, + ServerImplementation__handleRequest_closure: function ServerImplementation__handleRequest_closure(t0, t1) { + this.$this = t0; + this.payload = t1; + }, + ServerImplementation__handleRequest_closure0: function ServerImplementation__handleRequest_closure0(t0, t1) { + this.$this = t0; + this.request = t1; + }, + ServerImplementation__waitForTurn_idIsActive: function ServerImplementation__waitForTurn_idIsActive(t0, t1) { + this.$this = t0; + this.transactionId = t1; + }, + ServerImplementation__waitForTurn_closure: function ServerImplementation__waitForTurn_closure(t0) { + this.idIsActive = t0; + }, + _ServerDbUser: function _ServerDbUser(t0, t1, t2) { + this._server = t0; + this.connection = t1; + this.schemaVersion = t2; + }, + WebProtocol: function WebProtocol(t0) { + this._protocolVersion = t0; + }, + WebProtocol_deserialize_decodeRequest: function WebProtocol_deserialize_decodeRequest(t0, t1) { + this._box_0 = t0; + this.$this = t1; + }, + WebProtocol_deserialize_decodeSuccess: function WebProtocol_deserialize_decodeSuccess(t0, t1) { + this._box_0 = t0; + this.$this = t1; + }, + WebProtocol__serializeRequest_closure: function WebProtocol__serializeRequest_closure() { + }, + WebProtocol__deserializeRequest_readBatched: function WebProtocol__deserializeRequest_readBatched(t0, t1) { + this.$this = t0; + this.dartList = t1; + }, + WebProtocol__deserializeRequest_readBatched_closure: function WebProtocol__deserializeRequest_readBatched_closure() { + }, + WebProtocol__deserializeRequest_readBatched_closure0: function WebProtocol__deserializeRequest_readBatched_closure0() { + }, + WebProtocol__deserializeRequest_closure: function WebProtocol__deserializeRequest_closure() { + }, + WebProtocol__serializeSelectResult_closure: function WebProtocol__serializeSelectResult_closure() { + }, + WebProtocol__deserializeResponse_closure: function WebProtocol__deserializeResponse_closure() { + }, + UpdateKind: function UpdateKind(t0, t1) { + this.index = t0; + this._name = t1; + }, + TableUpdate: function TableUpdate(t0, t1) { + this.kind = t0; + this.table = t1; + }, + runCancellable(operation, $T) { + var token, t2, t1 = {}; + t1.token = token; + t1.token = null; + token = new A.CancellationToken(new A._SyncCompleter(new A._Future($.Zone__current, $T._eval$1("_Future<0>")), $T._eval$1("_SyncCompleter<0>")), A._setArrayType([], type$.JSArray_of_void_Function), $T._eval$1("CancellationToken<0>")); + t1.token = token; + t2 = type$.nullable_Object; + A.runZoned(new A.runCancellable_closure(t1, operation, $T), A.LinkedHashMap_LinkedHashMap$_literal([B.Symbol_hNH, token], t2, t2), type$.void); + return t1.token; + }, + checkIfCancelled() { + var token = $.Zone__current.$index(0, B.Symbol_hNH); + if (token instanceof A.CancellationToken && token._cancellationRequested) + throw A.wrapException(B.C_CancellationException); + }, + runCancellable_closure: function runCancellable_closure(t0, t1, t2) { + this._box_0 = t0; + this.operation = t1; + this.T = t2; + }, + CancellationToken: function CancellationToken(t0, t1, t2) { + var _ = this; + _._resultCompleter = t0; + _._cancellationCallbacks = t1; + _._cancellationRequested = false; + _.$ti = t2; + }, + CancellationException: function CancellationException() { + }, + QueryExecutor: function QueryExecutor() { + }, + BatchedStatements: function BatchedStatements(t0, t1) { + this.statements = t0; + this.$arguments = t1; + }, + ArgumentsForBatchedStatement: function ArgumentsForBatchedStatement(t0, t1) { + this.statementIndex = t0; + this.$arguments = t1; + }, + _defaultSavepoint(depth) { + return "SAVEPOINT s" + A._asInt(depth); + }, + _defaultRelease(depth) { + return "RELEASE s" + A._asInt(depth); + }, + _defaultRollbackToSavepoint(depth) { + return "ROLLBACK TO s" + A._asInt(depth); + }, + DatabaseDelegate: function DatabaseDelegate() { + }, + QueryDelegate: function QueryDelegate() { + }, + TransactionDelegate: function TransactionDelegate() { + }, + NoTransactionDelegate: function NoTransactionDelegate() { + }, + DbVersionDelegate: function DbVersionDelegate() { + }, + NoVersionDelegate: function NoVersionDelegate() { + }, + DynamicVersionDelegate: function DynamicVersionDelegate() { + }, + _BaseExecutor: function _BaseExecutor() { + }, + _BaseExecutor__synchronized_closure: function _BaseExecutor__synchronized_closure(t0, t1, t2) { + this.abortIfCancelled = t0; + this.action = t1; + this.T = t2; + }, + _BaseExecutor_runSelect_closure: function _BaseExecutor_runSelect_closure(t0, t1, t2) { + this.$this = t0; + this.statement = t1; + this.args = t2; + }, + _BaseExecutor_runDelete_closure: function _BaseExecutor_runDelete_closure(t0, t1, t2) { + this.$this = t0; + this.statement = t1; + this.args = t2; + }, + _BaseExecutor_runInsert_closure: function _BaseExecutor_runInsert_closure(t0, t1, t2) { + this.$this = t0; + this.statement = t1; + this.args = t2; + }, + _BaseExecutor_runCustom_closure: function _BaseExecutor_runCustom_closure(t0, t1, t2) { + this.$this = t0; + this.args = t1; + this.statement = t2; + }, + _BaseExecutor_runBatched_closure: function _BaseExecutor_runBatched_closure(t0, t1) { + this.$this = t0; + this.statements = t1; + }, + _TransactionExecutor: function _TransactionExecutor() { + }, + _StatementBasedTransactionExecutor: function _StatementBasedTransactionExecutor(t0, t1, t2, t3, t4, t5, t6, t7, t8) { + var _ = this; + _._engines$_delegate = t0; + _._opened = null; + _._engines$_done = t1; + _._parent = t2; + _.depth = t3; + _._startCommand = t4; + _._commitCommand = t5; + _._rollbackCommand = t6; + _._db = t7; + _._lock = t8; + _._waitingChildExecutors = 0; + _._engines$_closed = _._ensureOpenCalled = false; + }, + _StatementBasedTransactionExecutor_ensureOpen_closure: function _StatementBasedTransactionExecutor_ensureOpen_closure(t0) { + this.$this = t0; + }, + _StatementBasedTransactionExecutor_ensureOpen_closure0: function _StatementBasedTransactionExecutor_ensureOpen_closure0(t0) { + this.parent = t0; + }, + DelegatedDatabase: function DelegatedDatabase() { + }, + DelegatedDatabase_ensureOpen_closure: function DelegatedDatabase_ensureOpen_closure(t0, t1) { + this.$this = t0; + this.user = t1; + }, + DelegatedDatabase_close_closure: function DelegatedDatabase_close_closure(t0) { + this.$this = t0; + }, + _BeforeOpeningExecutor: function _BeforeOpeningExecutor(t0, t1) { + var _ = this; + _._base = t0; + _._lock = t1; + _._waitingChildExecutors = 0; + _._engines$_closed = _._ensureOpenCalled = false; + }, + _ExclusiveExecutor: function _ExclusiveExecutor(t0, t1, t2) { + var _ = this; + _._outer = t0; + _._opened = null; + _._completer = t1; + _._lock = t2; + _._waitingChildExecutors = 0; + _._engines$_closed = _._ensureOpenCalled = false; + }, + _ExclusiveExecutor_ensureOpen_closure: function _ExclusiveExecutor_ensureOpen_closure(t0, t1) { + this.$this = t0; + this.opened = t1; + }, + QueryResult$(columnNames, rows) { + var t2, _i, column, + t1 = A.LinkedHashMap_LinkedHashMap$_empty(type$.String, type$.int); + for (t2 = columnNames.length, _i = 0; _i < columnNames.length; columnNames.length === t2 || (0, A.throwConcurrentModificationError)(columnNames), ++_i) { + column = columnNames[_i]; + t1.$indexSet(0, column, B.JSArray_methods.lastIndexOf$1(columnNames, column)); + } + return new A.QueryResult(columnNames, rows, t1); + }, + QueryResult_QueryResult$fromRows(rows) { + var keys, t1, t2, _i, row, t3, t4, _i0; + if (rows.length === 0) + return A.QueryResult$(B.List_empty0, B.List_empty2); + keys = J.toList$0$ax(B.JSArray_methods.get$first(rows).get$keys()); + t1 = A._setArrayType([], type$.JSArray_List_dynamic); + for (t2 = rows.length, _i = 0; _i < rows.length; rows.length === t2 || (0, A.throwConcurrentModificationError)(rows), ++_i) { + row = rows[_i]; + t3 = []; + for (t4 = keys.length, _i0 = 0; _i0 < keys.length; keys.length === t4 || (0, A.throwConcurrentModificationError)(keys), ++_i0) + t3.push(row.$index(0, keys[_i0])); + t1.push(t3); + } + return A.QueryResult$(keys, t1); + }, + QueryResult: function QueryResult(t0, t1, t2) { + this.columnNames = t0; + this.rows = t1; + this._columnIndexes = t2; + }, + QueryResult_asMap_closure: function QueryResult_asMap_closure(t0) { + this.$this = t0; + }, + ApplyInterceptor_interceptWith(_this, interceptor) { + return new A._InterceptedExecutor(_this, interceptor); + }, + QueryInterceptor: function QueryInterceptor() { + }, + _InterceptedExecutor: function _InterceptedExecutor(t0, t1) { + this._interceptor$_inner = t0; + this._interceptor$_interceptor = t1; + }, + _InterceptedTransactionExecutor: function _InterceptedTransactionExecutor(t0, t1) { + this._interceptor$_inner = t0; + this._interceptor$_interceptor = t1; + }, + OpeningDetails: function OpeningDetails(t0, t1) { + this.versionBefore = t0; + this.versionNow = t1; + }, + SqlDialect: function SqlDialect(t0, t1) { + this.index = t0; + this._name = t1; + }, + Sqlite3Delegate: function Sqlite3Delegate() { + }, + _SqliteVersionDelegate: function _SqliteVersionDelegate(t0) { + this.database = t0; + }, + PreparedStatementsCache: function PreparedStatementsCache(t0) { + this._cachedStatements = t0; + }, + EnableNativeFunctions_useNativeFunctions(_this) { + var _s13_ = "moor_contains"; + _this.createFunction$4$argumentCount$deterministic$function$functionName(B.AllowedArgumentCount_2, true, A.native_functions___pow$closure(), "power"); + _this.createFunction$4$argumentCount$deterministic$function$functionName(B.AllowedArgumentCount_2, true, A.native_functions___pow$closure(), "pow"); + _this.createFunction$4$argumentCount$deterministic$function$functionName(B.AllowedArgumentCount_1, true, A._unaryNumFunction(A.math__sqrt$closure()), "sqrt"); + _this.createFunction$4$argumentCount$deterministic$function$functionName(B.AllowedArgumentCount_1, true, A._unaryNumFunction(A.math__sin$closure()), "sin"); + _this.createFunction$4$argumentCount$deterministic$function$functionName(B.AllowedArgumentCount_1, true, A._unaryNumFunction(A.math__cos$closure()), "cos"); + _this.createFunction$4$argumentCount$deterministic$function$functionName(B.AllowedArgumentCount_1, true, A._unaryNumFunction(A.math__tan$closure()), "tan"); + _this.createFunction$4$argumentCount$deterministic$function$functionName(B.AllowedArgumentCount_1, true, A._unaryNumFunction(A.math__asin$closure()), "asin"); + _this.createFunction$4$argumentCount$deterministic$function$functionName(B.AllowedArgumentCount_1, true, A._unaryNumFunction(A.math__acos$closure()), "acos"); + _this.createFunction$4$argumentCount$deterministic$function$functionName(B.AllowedArgumentCount_1, true, A._unaryNumFunction(A.math__atan$closure()), "atan"); + _this.createFunction$4$argumentCount$deterministic$function$functionName(B.AllowedArgumentCount_2, true, A.native_functions___regexpImpl$closure(), "regexp"); + _this.createFunction$4$argumentCount$deterministic$function$functionName(B.AllowedArgumentCount_3, true, A.native_functions___regexpImpl$closure(), "regexp_moor_ffi"); + _this.createFunction$4$argumentCount$deterministic$function$functionName(B.AllowedArgumentCount_2, true, A.native_functions___containsImpl$closure(), _s13_); + _this.createFunction$4$argumentCount$deterministic$function$functionName(B.AllowedArgumentCount_3, true, A.native_functions___containsImpl$closure(), _s13_); + _this.createFunction$5$argumentCount$deterministic$directOnly$function$functionName(B.AllowedArgumentCount_0, true, false, new A.EnableNativeFunctions_useNativeFunctions_closure(), "current_time_millis"); + }, + _pow(args) { + var first = args.$index(0, 0), + second = args.$index(0, 1); + if (first == null || second == null || typeof first != "number" || typeof second != "number") + return null; + return Math.pow(first, second); + }, + _unaryNumFunction(calculation) { + return new A._unaryNumFunction_closure(calculation); + }, + _regexpImpl(args) { + var firstParam, regex, secondParam, value, t1, t2, t3, exception, + multiLine = false, + caseSensitive = true, + unicode = false, + dotAll = false, + argCount = args.rawValues.length; + if (argCount < 2 || argCount > 3) + throw A.wrapException("Expected two or three arguments to regexp"); + firstParam = args.$index(0, 0); + secondParam = args.$index(0, 1); + if (firstParam == null || secondParam == null) + return null; + if (typeof firstParam != "string" || typeof secondParam != "string") + throw A.wrapException("Expected two strings as parameters to regexp"); + if (argCount === 3) { + value = args.$index(0, 2); + if (A._isInt(value)) { + multiLine = (value & 1) === 1; + caseSensitive = (value & 2) !== 2; + unicode = (value & 4) === 4; + dotAll = (value & 8) === 8; + } + } + regex = null; + try { + t1 = multiLine; + t2 = caseSensitive; + t3 = unicode; + regex = A.RegExp_RegExp(firstParam, t2, dotAll, t1, t3); + } catch (exception) { + if (A.unwrapException(exception) instanceof A.FormatException) + throw A.wrapException("Invalid regex"); + else + throw exception; + } + t1 = regex._nativeRegExp; + return t1.test(secondParam); + }, + _containsImpl(args) { + var first, second, + argCount = args.rawValues.length; + if (argCount < 2 || argCount > 3) + throw A.wrapException("Expected 2 or 3 arguments to moor_contains"); + first = args.$index(0, 0); + second = args.$index(0, 1); + if (first == null || second == null) + return null; + if (typeof first != "string" || typeof second != "string") + throw A.wrapException("First two args to contains must be strings"); + return argCount === 3 && args.$index(0, 2) === 1 ? B.JSString_methods.contains$1(first, second) : B.JSString_methods.contains$1(first.toLowerCase(), second.toLowerCase()); + }, + EnableNativeFunctions_useNativeFunctions_closure: function EnableNativeFunctions_useNativeFunctions_closure() { + }, + _unaryNumFunction_closure: function _unaryNumFunction_closure(t0) { + this.calculation = t0; + }, + LazyDatabase: function LazyDatabase(t0) { + var _ = this; + _.__LazyDatabase__delegate_F = $; + _._delegateAvailable = false; + _._openDelegate = null; + _.opener = t0; + }, + LazyDatabase__awaitOpened_closure: function LazyDatabase__awaitOpened_closure(t0, t1) { + this.$this = t0; + this.delegate = t1; + }, + LazyDatabase_ensureOpen_closure: function LazyDatabase_ensureOpen_closure(t0, t1) { + this.$this = t0; + this.user = t1; + }, + Lock: function Lock() { + this._last = null; + }, + Lock_synchronized_callBlockAndComplete: function Lock_synchronized_callBlockAndComplete(t0, t1, t2, t3, t4) { + var _ = this; + _.$this = t0; + _.block = t1; + _.blockCompleted = t2; + _.blockReleasedLock = t3; + _.T = t4; + }, + Lock_synchronized_callBlockAndComplete_closure: function Lock_synchronized_callBlockAndComplete_closure(t0, t1, t2) { + this.$this = t0; + this.blockCompleted = t1; + this.blockReleasedLock = t2; + }, + Lock_synchronized_closure: function Lock_synchronized_closure(t0, t1) { + this.callBlockAndComplete = t0; + this.T = t1; + }, + WebPortToChannel_channel(_this, explicitClose, nativeSerializionVersion, webNativeSerialization) { + var protocol, _null = null, + controller = new A.StreamChannelController(type$.StreamChannelController_nullable_Object), + t1 = type$.nullable_Object, + localToForeignController = A.StreamController_StreamController(_null, _null, false, t1), + foreignToLocalController = A.StreamController_StreamController(_null, _null, false, t1), + t2 = A._instanceType(foreignToLocalController), + t3 = A._instanceType(localToForeignController), + t4 = A.GuaranteeChannel$(new A._ControllerStream(foreignToLocalController, t2._eval$1("_ControllerStream<1>")), new A._StreamSinkWrapper(localToForeignController, t3._eval$1("_StreamSinkWrapper<1>")), true, t1); + controller.__StreamChannelController__local_F = t4; + t1 = A.GuaranteeChannel$(new A._ControllerStream(localToForeignController, t3._eval$1("_ControllerStream<1>")), new A._StreamSinkWrapper(foreignToLocalController, t2._eval$1("_StreamSinkWrapper<1>")), true, t1); + controller.__StreamChannelController__foreign_F = t1; + protocol = new A.WebProtocol(A.ProtocolVersion_negotiate(nativeSerializionVersion)); + _this.onmessage = A._functionToJS1(new A.WebPortToChannel_channel_closure(explicitClose, controller, webNativeSerialization, protocol)); + t4 = t4.__GuaranteeChannel__streamController_F; + t4 === $ && A.throwLateFieldNI("_streamController"); + new A._ControllerStream(t4, A._instanceType(t4)._eval$1("_ControllerStream<1>")).listen$2$onDone(new A.WebPortToChannel_channel_closure0(webNativeSerialization, protocol, _this), new A.WebPortToChannel_channel_closure1(explicitClose, _this)); + return t1; + }, + WebPortToChannel_channel_closure: function WebPortToChannel_channel_closure(t0, t1, t2, t3) { + var _ = this; + _.explicitClose = t0; + _.controller = t1; + _.webNativeSerialization = t2; + _.protocol = t3; + }, + WebPortToChannel_channel_closure0: function WebPortToChannel_channel_closure0(t0, t1, t2) { + this.webNativeSerialization = t0; + this.protocol = t1; + this._this = t2; + }, + WebPortToChannel_channel_closure1: function WebPortToChannel_channel_closure1(t0, t1) { + this.explicitClose = t0; + this._this = t1; + }, + DedicatedDriftWorker: function DedicatedDriftWorker(t0, t1, t2) { + var _ = this; + _.self = t0; + _._checkCompatibility = t1; + _._dedicated_worker$_servers = t2; + _._compatibility = null; + }, + DedicatedDriftWorker_start_closure: function DedicatedDriftWorker_start_closure(t0) { + this.$this = t0; + }, + DedicatedDriftWorker__handleMessage_closure: function DedicatedDriftWorker__handleMessage_closure(t0, t1) { + this._box_0 = t0; + this.$this = t1; + }, + ProtocolVersion_negotiate(versionCode) { + var t1; + $label0$0: { + if (versionCode <= 0) { + t1 = B.ProtocolVersion_0_0_legacy; + break $label0$0; + } + if (1 === versionCode) { + t1 = B.ProtocolVersion_1_1_v1; + break $label0$0; + } + if (2 === versionCode) { + t1 = B.ProtocolVersion_2_2_v2; + break $label0$0; + } + if (3 === versionCode) { + t1 = B.ProtocolVersion_3_3_v3; + break $label0$0; + } + if (versionCode > 3) { + t1 = B.ProtocolVersion_4_4_v4; + break $label0$0; + } + t1 = A.throwExpression(A.AssertionError$(null)); + } + return t1; + }, + ProtocolVersion_fromJsObject(object) { + if ("v" in object) + return A.ProtocolVersion_negotiate(A._asInt(A._asDouble(object.v))); + else + return B.ProtocolVersion_0_0_legacy; + }, + WasmInitializationMessage_WasmInitializationMessage$fromJs(jsObject) { + var t1, version, t2, t3, t4, t5, t6, t7, existingDatabases, + type = A._asString(jsObject.type), + payload = jsObject.payload; + $label0$0: { + if ("Error" === type) { + t1 = new A.WorkerError(A._asString(A._asJSObject(payload))); + break $label0$0; + } + if ("ServeDriftDatabase" === type) { + A._asJSObject(payload); + version = A.ProtocolVersion_fromJsObject(payload); + t1 = A.Uri_parse(A._asString(payload.sqlite)); + t2 = A._asJSObject(payload.port); + t3 = A.EnumByName_byName(B.List_5sp, A._asString(payload.storage), type$.WasmStorageImplementation); + t4 = A._asString(payload.database); + t5 = A._asJSObjectQ(payload.initPort); + t6 = version.versionCode; + t7 = t6 < 2 || A._asBool(payload.migrations); + t1 = new A.ServeDriftDatabase(t1, t2, t3, t4, t5, version, t7, t6 < 3 || A._asBool(payload.new_serialization)); + break $label0$0; + } + if ("StartFileSystemServer" === type) { + t1 = new A.StartFileSystemServer(A._asJSObject(payload)); + break $label0$0; + } + if ("RequestCompatibilityCheck" === type) { + t1 = new A.RequestCompatibilityCheck(A._asString(payload)); + break $label0$0; + } + if ("DedicatedWorkerCompatibilityResult" === type) { + A._asJSObject(payload); + existingDatabases = A._setArrayType([], type$.JSArray_Record_2_WebStorageApi_and_String); + if ("existing" in payload) + B.JSArray_methods.addAll$1(existingDatabases, A.EncodeLocations_readFromJs(type$.JSArray_nullable_Object._as(payload.existing))); + t1 = A._asBool(payload.supportsNestedWorkers); + t2 = A._asBool(payload.canAccessOpfs); + t3 = A._asBool(payload.supportsSharedArrayBuffers); + t4 = A._asBool(payload.supportsIndexedDb); + t5 = A._asBool(payload.indexedDbExists); + t6 = A._asBool(payload.opfsExists); + t6 = new A.DedicatedWorkerCompatibilityResult(t1, t2, t3, t4, existingDatabases, A.ProtocolVersion_fromJsObject(payload), t5, t6); + t1 = t6; + break $label0$0; + } + if ("SharedWorkerCompatibilityResult" === type) { + t1 = A.SharedWorkerCompatibilityResult_SharedWorkerCompatibilityResult$fromJsPayload(type$.JSArray_nullable_Object._as(payload)); + break $label0$0; + } + if ("DeleteDatabase" === type) { + t1 = payload == null ? A._asObject(payload) : payload; + type$.JSArray_nullable_Object._as(t1); + t2 = $.$get$WebStorageApi_byName(); + if (0 < 0 || 0 >= t1.length) + return A.ioore(t1, 0); + t2 = t2.$index(0, A._asString(t1[0])); + t2.toString; + if (1 < 0 || 1 >= t1.length) + return A.ioore(t1, 1); + t1 = new A.DeleteDatabase(new A._Record_2(t2, A._asString(t1[1]))); + break $label0$0; + } + t1 = A.throwExpression(A.ArgumentError$("Unknown type " + type, null)); + } + return t1; + }, + SharedWorkerCompatibilityResult_SharedWorkerCompatibilityResult$fromJsPayload(payload) { + var existingDatabases, version, + t1 = new A.SharedWorkerCompatibilityResult_SharedWorkerCompatibilityResult$fromJsPayload_asBoolean(payload); + if (payload.length > 5) { + if (5 < 0 || 5 >= payload.length) + return A.ioore(payload, 5); + existingDatabases = A.EncodeLocations_readFromJs(type$.JSArray_nullable_Object._as(payload[5])); + if (payload.length > 6) { + if (6 < 0 || 6 >= payload.length) + return A.ioore(payload, 6); + version = A.ProtocolVersion_negotiate(A._asInt(A._asDouble(payload[6]))); + } else + version = B.ProtocolVersion_0_0_legacy; + } else { + existingDatabases = B.List_empty4; + version = B.ProtocolVersion_0_0_legacy; + } + return new A.SharedWorkerCompatibilityResult(t1.call$1(0), t1.call$1(1), t1.call$1(2), existingDatabases, version, t1.call$1(3), t1.call$1(4)); + }, + EncodeLocations_readFromJs(object) { + var t3, t4, + existing = A._setArrayType([], type$.JSArray_Record_2_WebStorageApi_and_String), + t1 = B.JSArray_methods.cast$1$0(object, type$.JSObject), + t2 = t1.$ti; + t1 = new A.ListIterator(t1, t1.get$length(0), t2._eval$1("ListIterator")); + t2 = t2._eval$1("ListBase.E"); + while (t1.moveNext$0()) { + t3 = t1.__internal$_current; + if (t3 == null) + t3 = t2._as(t3); + t4 = $.$get$WebStorageApi_byName().$index(0, A._asString(t3.l)); + t4.toString; + B.JSArray_methods.add$1(existing, new A._Record_2(t4, A._asString(t3.n))); + } + return existing; + }, + EncodeLocations_encodeToJs(_this) { + var t1, _i, entry, _this0, + existing = A._setArrayType([], type$.JSArray_JSObject); + for (t1 = _this.length, _i = 0; _i < _this.length; _this.length === t1 || (0, A.throwConcurrentModificationError)(_this), ++_i) { + entry = _this[_i]; + _this0 = {}; + _this0.l = entry._0._name; + _this0.n = entry._1; + B.JSArray_methods.add$1(existing, _this0); + } + return existing; + }, + _extension_1_sendTyped(_this, type, payload, transfer) { + var _this0 = {}; + _this0.type = type; + _this0.payload = payload; + _this.call$2(_this0, transfer); + }, + ProtocolVersion: function ProtocolVersion(t0, t1, t2) { + this.versionCode = t0; + this.index = t1; + this._name = t2; + }, + WasmInitializationMessage: function WasmInitializationMessage() { + }, + WasmInitializationMessage_sendToWorker_closure: function WasmInitializationMessage_sendToWorker_closure(t0) { + this.worker = t0; + }, + WasmInitializationMessage_sendToPort_closure: function WasmInitializationMessage_sendToPort_closure(t0) { + this.port = t0; + }, + WasmInitializationMessage_sendToClient_closure: function WasmInitializationMessage_sendToClient_closure(t0) { + this.worker = t0; + }, + CompatibilityResult: function CompatibilityResult() { + }, + SharedWorkerCompatibilityResult: function SharedWorkerCompatibilityResult(t0, t1, t2, t3, t4, t5, t6) { + var _ = this; + _.canSpawnDedicatedWorkers = t0; + _.dedicatedWorkersCanUseOpfs = t1; + _.canUseIndexedDb = t2; + _.existingDatabases = t3; + _.version = t4; + _.indexedDbExists = t5; + _.opfsExists = t6; + }, + SharedWorkerCompatibilityResult_SharedWorkerCompatibilityResult$fromJsPayload_asBoolean: function SharedWorkerCompatibilityResult_SharedWorkerCompatibilityResult$fromJsPayload_asBoolean(t0) { + this.asList = t0; + }, + WorkerError: function WorkerError(t0) { + this.error = t0; + }, + ServeDriftDatabase: function ServeDriftDatabase(t0, t1, t2, t3, t4, t5, t6, t7) { + var _ = this; + _.sqlite3WasmUri = t0; + _.port = t1; + _.storage = t2; + _.databaseName = t3; + _.initializationPort = t4; + _.protocolVersion = t5; + _.enableMigrations = t6; + _.newSerialization = t7; + }, + RequestCompatibilityCheck: function RequestCompatibilityCheck(t0) { + this.databaseName = t0; + }, + DedicatedWorkerCompatibilityResult: function DedicatedWorkerCompatibilityResult(t0, t1, t2, t3, t4, t5, t6, t7) { + var _ = this; + _.supportsNestedWorkers = t0; + _.canAccessOpfs = t1; + _.supportsSharedArrayBuffers = t2; + _.supportsIndexedDb = t3; + _.existingDatabases = t4; + _.version = t5; + _.indexedDbExists = t6; + _.opfsExists = t7; + }, + StartFileSystemServer: function StartFileSystemServer(t0) { + this.sqlite3Options = t0; + }, + DeleteDatabase: function DeleteDatabase(t0) { + this.database = t0; + }, + storageManager0() { + var $navigator = A._asJSObject(init.G.navigator); + if ("storage" in $navigator) + return A._asJSObject($navigator.storage); + return null; + }, + checkOpfsSupport() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.bool), + $async$returnValue, $async$handler = 2, $async$errorStack = [], $async$next = [], opfsRoot, fileHandle, openedFile, getSizeResult, t1, exception, storage, $async$exception; + var $async$checkOpfsSupport = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) { + $async$errorStack.push($async$result); + $async$goto = $async$handler; + } + for (;;) + switch ($async$goto) { + case 0: + // Function start + storage = A.storageManager0(); + if (storage == null) { + $async$returnValue = false; + // goto return + $async$goto = 1; + break; + } + opfsRoot = null; + fileHandle = null; + openedFile = null; + $async$handler = 4; + t1 = type$.JSObject; + $async$goto = 7; + return A._asyncAwait(A.promiseToFuture(A._asJSObject(storage.getDirectory()), t1), $async$checkOpfsSupport); + case 7: + // returning from await. + opfsRoot = $async$result; + $async$goto = 8; + return A._asyncAwait(A.promiseToFuture(A._asJSObject(opfsRoot.getFileHandle("_drift_feature_detection", {create: true})), t1), $async$checkOpfsSupport); + case 8: + // returning from await. + fileHandle = $async$result; + $async$goto = 9; + return A._asyncAwait(A.promiseToFuture(A._asJSObject(fileHandle.createSyncAccessHandle()), t1), $async$checkOpfsSupport); + case 9: + // returning from await. + openedFile = $async$result; + getSizeResult = A.JSObjectUnsafeUtilExtension__callMethod(openedFile, "getSize", null, null, null, null); + $async$goto = typeof getSizeResult === "object" ? 10 : 11; + break; + case 10: + // then + $async$goto = 12; + return A._asyncAwait(A.promiseToFuture(A._asJSObject(getSizeResult), type$.nullable_Object), $async$checkOpfsSupport); + case 12: + // returning from await. + $async$returnValue = false; + $async$next = [1]; + // goto finally + $async$goto = 5; + break; + case 11: + // join + $async$returnValue = true; + $async$next = [1]; + // goto finally + $async$goto = 5; + break; + $async$next.push(6); + // goto finally + $async$goto = 5; + break; + case 4: + // catch + $async$handler = 3; + $async$exception = $async$errorStack.pop(); + $async$returnValue = false; + $async$next = [1]; + // goto finally + $async$goto = 5; + break; + $async$next.push(6); + // goto finally + $async$goto = 5; + break; + case 3: + // uncaught + $async$next = [2]; + case 5: + // finally + $async$handler = 2; + if (openedFile != null) + openedFile.close(); + $async$goto = opfsRoot != null && fileHandle != null ? 13 : 14; + break; + case 13: + // then + $async$goto = 15; + return A._asyncAwait(A.promiseToFuture(A._asJSObject(opfsRoot.removeEntry("_drift_feature_detection")), type$.nullable_Object), $async$checkOpfsSupport); + case 15: + // returning from await. + case 14: + // join + // goto the next finally handler + $async$goto = $async$next.pop(); + break; + case 6: + // after finally + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + case 2: + // rethrow + return A._asyncRethrow($async$errorStack.at(-1), $async$completer); + } + }); + return A._asyncStartSync($async$checkOpfsSupport, $async$completer); + }, + checkIndexedDbSupport() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.bool), + $async$returnValue, $async$handler = 2, $async$errorStack = [], idb, mockDb, exception, t1, $async$exception; + var $async$checkIndexedDbSupport = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) { + $async$errorStack.push($async$result); + $async$goto = $async$handler; + } + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = init.G; + if (!("indexedDB" in t1) || !("FileReader" in t1)) { + $async$returnValue = false; + // goto return + $async$goto = 1; + break; + } + idb = A._asJSObject(t1.indexedDB); + $async$handler = 4; + $async$goto = 7; + return A._asyncAwait(A.CompleteIdbRequest_complete0(A._asJSObject(idb.open("drift_mock_db")), type$.JSObject), $async$checkIndexedDbSupport); + case 7: + // returning from await. + mockDb = $async$result; + mockDb.close(); + A._asJSObject(idb.deleteDatabase("drift_mock_db")); + $async$handler = 2; + // goto after finally + $async$goto = 6; + break; + case 4: + // catch + $async$handler = 3; + $async$exception = $async$errorStack.pop(); + $async$returnValue = false; + // goto return + $async$goto = 1; + break; + // goto after finally + $async$goto = 6; + break; + case 3: + // uncaught + // goto rethrow + $async$goto = 2; + break; + case 6: + // after finally + $async$returnValue = true; + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + case 2: + // rethrow + return A._asyncRethrow($async$errorStack.at(-1), $async$completer); + } + }); + return A._asyncStartSync($async$checkIndexedDbSupport, $async$completer); + }, + checkIndexedDbExists(databaseName) { + return A.checkIndexedDbExists$body(databaseName); + }, + checkIndexedDbExists$body(databaseName) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.bool), + $async$returnValue, $async$handler = 2, $async$errorStack = [], idb, databases, entry, openRequest, database, t1, exception, _box_0, $async$exception; + var $async$checkIndexedDbExists = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) { + $async$errorStack.push($async$result); + $async$goto = $async$handler; + } + for (;;) + $async$outer: + switch ($async$goto) { + case 0: + // Function start + _box_0 = {}; + _box_0.indexedDbExists = null; + $async$handler = 4; + idb = A._asJSObject(init.G.indexedDB); + $async$goto = "databases" in idb ? 7 : 8; + break; + case 7: + // then + $async$goto = 9; + return A._asyncAwait(A.promiseToFuture(A._asJSObject(idb.databases()), type$.JSArray_nullable_Object), $async$checkIndexedDbExists); + case 9: + // returning from await. + databases = $async$result; + t1 = databases; + t1 = J.get$iterator$ax(type$.List_JSObject._is(t1) ? t1 : new A.CastList(t1, A._arrayInstanceType(t1)._eval$1("CastList<1,JSObject>"))); + while (t1.moveNext$0()) { + entry = t1.get$current(); + if (A._asString(entry.name) === databaseName) { + $async$returnValue = true; + // goto return + $async$goto = 1; + break $async$outer; + } + } + $async$returnValue = false; + // goto return + $async$goto = 1; + break; + case 8: + // join + openRequest = A._asJSObject(idb.open(databaseName, 1)); + openRequest.onupgradeneeded = A._functionToJS1(new A.checkIndexedDbExists_closure(_box_0, openRequest)); + $async$goto = 10; + return A._asyncAwait(A.CompleteIdbRequest_complete0(openRequest, type$.JSObject), $async$checkIndexedDbExists); + case 10: + // returning from await. + database = $async$result; + if (_box_0.indexedDbExists == null) + _box_0.indexedDbExists = true; + database.close(); + $async$goto = _box_0.indexedDbExists === false ? 11 : 12; + break; + case 11: + // then + $async$goto = 13; + return A._asyncAwait(A.CompleteIdbRequest_complete0(A._asJSObject(idb.deleteDatabase(databaseName)), type$.nullable_Object), $async$checkIndexedDbExists); + case 13: + // returning from await. + case 12: + // join + $async$handler = 2; + // goto after finally + $async$goto = 6; + break; + case 4: + // catch + $async$handler = 3; + $async$exception = $async$errorStack.pop(); + // goto after finally + $async$goto = 6; + break; + case 3: + // uncaught + // goto rethrow + $async$goto = 2; + break; + case 6: + // after finally + t1 = _box_0.indexedDbExists; + $async$returnValue = t1 === true; + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + case 2: + // rethrow + return A._asyncRethrow($async$errorStack.at(-1), $async$completer); + } + }); + return A._asyncStartSync($async$checkIndexedDbExists, $async$completer); + }, + deleteDatabaseInIndexedDb(databaseName) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + t1; + var $async$deleteDatabaseInIndexedDb = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = init.G; + $async$goto = "indexedDB" in t1 ? 2 : 3; + break; + case 2: + // then + $async$goto = 4; + return A._asyncAwait(A.CompleteIdbRequest_complete0(A._asJSObject(A._asJSObject(t1.indexedDB).deleteDatabase(databaseName)), type$.nullable_Object), $async$deleteDatabaseInIndexedDb); + case 4: + // returning from await. + case 3: + // join + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$deleteDatabaseInIndexedDb, $async$completer); + }, + opfsDriftDirectoryHandle() { + var options = null; + return A.opfsDriftDirectoryHandle$body(); + }, + opfsDriftDirectoryHandle$body() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.nullable_JSObject), + $async$returnValue, $async$handler = 2, $async$errorStack = [], directory, t1, t2, exception, options, storage, $async$exception; + var $async$opfsDriftDirectoryHandle = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) { + $async$errorStack.push($async$result); + $async$goto = $async$handler; + } + for (;;) + switch ($async$goto) { + case 0: + // Function start + options = null; + storage = A.storageManager0(); + if (storage == null) { + $async$returnValue = null; + // goto return + $async$goto = 1; + break; + } + t1 = type$.JSObject; + $async$goto = 3; + return A._asyncAwait(A.promiseToFuture(A._asJSObject(storage.getDirectory()), t1), $async$opfsDriftDirectoryHandle); + case 3: + // returning from await. + directory = $async$result; + $async$handler = 5; + t2 = options; + if (t2 == null) + t2 = {}; + $async$goto = 8; + return A._asyncAwait(A.promiseToFuture(A._asJSObject(directory.getDirectoryHandle("drift_db", t2)), t1), $async$opfsDriftDirectoryHandle); + case 8: + // returning from await. + t1 = $async$result; + $async$returnValue = t1; + // goto return + $async$goto = 1; + break; + $async$handler = 2; + // goto after finally + $async$goto = 7; + break; + case 5: + // catch + $async$handler = 4; + $async$exception = $async$errorStack.pop(); + $async$returnValue = null; + // goto return + $async$goto = 1; + break; + // goto after finally + $async$goto = 7; + break; + case 4: + // uncaught + // goto rethrow + $async$goto = 2; + break; + case 7: + // after finally + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + case 2: + // rethrow + return A._asyncRethrow($async$errorStack.at(-1), $async$completer); + } + }); + return A._asyncStartSync($async$opfsDriftDirectoryHandle, $async$completer); + }, + opfsDatabases() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.List_String), + $async$returnValue, $async$handler = 2, $async$errorStack = [], $async$next = [], entries, found, entry, t1, t2, exception, directory, $async$exception; + var $async$opfsDatabases = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) { + $async$errorStack.push($async$result); + $async$goto = $async$handler; + } + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$goto = 3; + return A._asyncAwait(A.opfsDriftDirectoryHandle(), $async$opfsDatabases); + case 3: + // returning from await. + directory = $async$result; + if (directory == null) { + $async$returnValue = B.List_empty0; + // goto return + $async$goto = 1; + break; + } + t1 = type$.AsyncJavaScriptIteratable_JSArray_nullable_Object; + if (!(type$.JavaScriptSymbol._as(init.G.Symbol.asyncIterator) in directory)) + A.throwExpression(A.ArgumentError$("Target object does not implement the async iterable interface", null)); + entries = new A._MapStream(t1._eval$1("JSObject(Stream.T)")._as(new A.opfsDatabases_closure()), new A.AsyncJavaScriptIteratable(directory, t1), t1._eval$1("_MapStream")); + found = A._setArrayType([], type$.JSArray_String); + t1 = new A._StreamIterator(A.checkNotNullable(entries, "stream", type$.Object), type$._StreamIterator_JSObject); + $async$handler = 4; + t2 = type$.JSObject; + case 7: + // for condition + $async$goto = 9; + return A._asyncAwait(t1.moveNext$0(), $async$opfsDatabases); + case 9: + // returning from await. + if (!$async$result) { + // goto after for + $async$goto = 8; + break; + } + entry = t1.get$current(); + $async$goto = A._asString(entry.kind) === "directory" ? 10 : 11; + break; + case 10: + // then + $async$handler = 13; + $async$goto = 16; + return A._asyncAwait(A.promiseToFuture(A._asJSObject(entry.getFileHandle("database")), t2), $async$opfsDatabases); + case 16: + // returning from await. + J.add$1$ax(found, A._asString(entry.name)); + $async$handler = 4; + // goto after finally + $async$goto = 15; + break; + case 13: + // catch + $async$handler = 12; + $async$exception = $async$errorStack.pop(); + // goto after finally + $async$goto = 15; + break; + case 12: + // uncaught + // goto uncaught + $async$goto = 4; + break; + case 15: + // after finally + case 11: + // join + // goto for condition + $async$goto = 7; + break; + case 8: + // after for + $async$next.push(6); + // goto finally + $async$goto = 5; + break; + case 4: + // uncaught + $async$next = [2]; + case 5: + // finally + $async$handler = 2; + $async$goto = 17; + return A._asyncAwait(t1.cancel$0(), $async$opfsDatabases); + case 17: + // returning from await. + // goto the next finally handler + $async$goto = $async$next.pop(); + break; + case 6: + // after finally + $async$returnValue = found; + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + case 2: + // rethrow + return A._asyncRethrow($async$errorStack.at(-1), $async$completer); + } + }); + return A._asyncStartSync($async$opfsDatabases, $async$completer); + }, + deleteDatabaseInOpfs(databaseName) { + return A.deleteDatabaseInOpfs$body(databaseName); + }, + deleteDatabaseInOpfs$body(databaseName) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$returnValue, $async$handler = 2, $async$errorStack = [], directory, t1, exception, storage, $async$exception; + var $async$deleteDatabaseInOpfs = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) { + $async$errorStack.push($async$result); + $async$goto = $async$handler; + } + for (;;) + switch ($async$goto) { + case 0: + // Function start + storage = A.storageManager0(); + if (storage == null) { + // goto return + $async$goto = 1; + break; + } + t1 = type$.JSObject; + $async$goto = 3; + return A._asyncAwait(A.promiseToFuture(A._asJSObject(storage.getDirectory()), t1), $async$deleteDatabaseInOpfs); + case 3: + // returning from await. + directory = $async$result; + $async$handler = 5; + $async$goto = 8; + return A._asyncAwait(A.promiseToFuture(A._asJSObject(directory.getDirectoryHandle("drift_db")), t1), $async$deleteDatabaseInOpfs); + case 8: + // returning from await. + directory = $async$result; + $async$goto = 9; + return A._asyncAwait(A.promiseToFuture(A._asJSObject(directory.removeEntry(databaseName, {recursive: true})), type$.nullable_Object), $async$deleteDatabaseInOpfs); + case 9: + // returning from await. + $async$handler = 2; + // goto after finally + $async$goto = 7; + break; + case 5: + // catch + $async$handler = 4; + $async$exception = $async$errorStack.pop(); + // goto after finally + $async$goto = 7; + break; + case 4: + // uncaught + // goto rethrow + $async$goto = 2; + break; + case 7: + // after finally + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + case 2: + // rethrow + return A._asyncRethrow($async$errorStack.at(-1), $async$completer); + } + }); + return A._asyncStartSync($async$deleteDatabaseInOpfs, $async$completer); + }, + CompleteIdbRequest_complete0(_this, $T) { + var t1 = new A._Future($.Zone__current, $T._eval$1("_Future<0>")), + completer = new A._SyncCompleter(t1, $T._eval$1("_SyncCompleter<0>")), + t2 = type$.nullable_void_Function_JSObject, + t3 = type$.JSObject; + A._EventStreamSubscription$(_this, "success", t2._as(new A.CompleteIdbRequest_complete_closure1(completer, _this, $T)), false, t3); + A._EventStreamSubscription$(_this, "error", t2._as(new A.CompleteIdbRequest_complete_closure2(completer, _this)), false, t3); + A._EventStreamSubscription$(_this, "blocked", t2._as(new A.CompleteIdbRequest_complete_closure3(completer, _this)), false, t3); + return t1; + }, + checkIndexedDbExists_closure: function checkIndexedDbExists_closure(t0, t1) { + this._box_0 = t0; + this.openRequest = t1; + }, + opfsDatabases_closure: function opfsDatabases_closure() { + }, + DriftServerController: function DriftServerController(t0, t1) { + this.servers = t0; + this._setup = t1; + }, + DriftServerController_serve_closure: function DriftServerController_serve_closure(t0, t1) { + this.$this = t0; + this.message = t1; + }, + DriftServerController_serve__closure: function DriftServerController_serve__closure(t0) { + this.initPort = t0; + }, + DriftServerController_serve___closure: function DriftServerController_serve___closure(t0) { + this.completer = t0; + }, + DriftServerController_serve__closure0: function DriftServerController_serve__closure0(t0, t1, t2) { + this.$this = t0; + this.message = t1; + this.initializer = t2; + }, + DriftServerController_serve__closure1: function DriftServerController_serve__closure1(t0, t1, t2) { + this.$this = t0; + this.message = t1; + this.wasmServer = t2; + }, + _CloseVfsOnClose: function _CloseVfsOnClose(t0, t1) { + this._shared$_close = t0; + this._root = t1; + }, + RunningWasmServer: function RunningWasmServer(t0, t1, t2) { + var _ = this; + _.storage = t0; + _.server = t1; + _._connectedClients = 0; + _._lastClientDisconnected = t2; + }, + RunningWasmServer_serve_closure: function RunningWasmServer_serve_closure(t0) { + this.$this = t0; + }, + WasmCompatibility: function WasmCompatibility(t0, t1) { + this.supportsIndexedDb = t0; + this.supportsOpfs = t1; + }, + CompleteIdbRequest_complete_closure1: function CompleteIdbRequest_complete_closure1(t0, t1, t2) { + this.completer = t0; + this._this = t1; + this.T = t2; + }, + CompleteIdbRequest_complete_closure2: function CompleteIdbRequest_complete_closure2(t0, t1) { + this.completer = t0; + this._this = t1; + }, + CompleteIdbRequest_complete_closure3: function CompleteIdbRequest_complete_closure3(t0, t1) { + this.completer = t0; + this._this = t1; + }, + SharedDriftWorker: function SharedDriftWorker(t0, t1) { + this.self = t0; + this._dedicatedWorker = null; + this._servers = t1; + }, + SharedDriftWorker_start_closure: function SharedDriftWorker_start_closure(t0) { + this.$this = t0; + }, + SharedDriftWorker__newConnection_closure: function SharedDriftWorker__newConnection_closure(t0, t1) { + this.$this = t0; + this.clientPort = t1; + }, + SharedDriftWorker__startFeatureDetection_result: function SharedDriftWorker__startFeatureDetection_result(t0, t1, t2) { + this._box_0 = t0; + this.completer = t1; + this.canUseIndexedDb = t2; + }, + SharedDriftWorker__startFeatureDetection_closure: function SharedDriftWorker__startFeatureDetection_closure(t0) { + this.result = t0; + }, + SharedDriftWorker__startFeatureDetection_closure0: function SharedDriftWorker__startFeatureDetection_closure0(t0, t1, t2) { + this.$this = t0; + this.result = t1; + this.worker = t2; + }, + WasmStorageImplementation: function WasmStorageImplementation(t0, t1) { + this.index = t0; + this._name = t1; + }, + WebStorageApi: function WebStorageApi(t0, t1) { + this.index = t0; + this._name = t1; + }, + WasmDatabase: function WasmDatabase(t0, t1, t2, t3, t4) { + var _ = this; + _.delegate = t0; + _._migrationError = null; + _.logStatements = t1; + _.isSequential = t2; + _._openingLock = t3; + _._lock = t4; + _._waitingChildExecutors = 0; + _._engines$_closed = _._ensureOpenCalled = false; + }, + _WasmDelegate: function _WasmDelegate(t0, t1, t2, t3, t4, t5, t6) { + var _ = this; + _._sqlite3 = t0; + _._path = t1; + _._fileSystem = t2; + _._database = null; + _._isOpen = _._hasInitializedDatabase = false; + _._database$_setup = t3; + _.cachePreparedStatements = t4; + _.enableMigrations = t5; + _._preparedStmtsCache = t6; + _.__Sqlite3Delegate_versionDelegate_A = $; + _.isInTransaction = false; + }, + Context_Context(current, style) { + if (current == null) + current = "."; + return new A.Context(style, current); + }, + _parseUri(uri) { + return uri; + }, + _validateArgList(method, args) { + var numArgs, i, numArgs0, message, t1, t2, t3, t4; + for (numArgs = args.length, i = 1; i < numArgs; ++i) { + if (args[i] == null || args[i - 1] != null) + continue; + for (; numArgs >= 1; numArgs = numArgs0) { + numArgs0 = numArgs - 1; + if (args[numArgs0] != null) + break; + } + message = new A.StringBuffer(""); + t1 = method + "("; + message._contents = t1; + t2 = A._arrayInstanceType(args); + t3 = t2._eval$1("SubListIterable<1>"); + t4 = new A.SubListIterable(args, 0, numArgs, t3); + t4.SubListIterable$3(args, 0, numArgs, t2._precomputed1); + t3 = t1 + new A.MappedListIterable(t4, t3._eval$1("String(ListIterable.E)")._as(new A._validateArgList_closure()), t3._eval$1("MappedListIterable")).join$1(0, ", "); + message._contents = t3; + message._contents = t3 + ("): part " + (i - 1) + " was null, but part " + i + " was not."); + throw A.wrapException(A.ArgumentError$(message.toString$0(0), null)); + } + }, + Context: function Context(t0, t1) { + this.style = t0; + this._context$_current = t1; + }, + Context_joinAll_closure: function Context_joinAll_closure() { + }, + Context_split_closure: function Context_split_closure() { + }, + _validateArgList_closure: function _validateArgList_closure() { + }, + _PathDirection: function _PathDirection(t0) { + this.name = t0; + }, + _PathRelation: function _PathRelation(t0) { + this.name = t0; + }, + InternalStyle: function InternalStyle() { + }, + ParsedPath_ParsedPath$parse(path, style) { + var t1, parts, separators, t2, start, i, + root = style.getRoot$1(path); + style.isRootRelative$1(path); + if (root != null) + path = B.JSString_methods.substring$1(path, root.length); + t1 = type$.JSArray_String; + parts = A._setArrayType([], t1); + separators = A._setArrayType([], t1); + t1 = path.length; + if (t1 !== 0) { + if (0 >= t1) + return A.ioore(path, 0); + t2 = style.isSeparator$1(path.charCodeAt(0)); + } else + t2 = false; + if (t2) { + if (0 >= t1) + return A.ioore(path, 0); + B.JSArray_methods.add$1(separators, path[0]); + start = 1; + } else { + B.JSArray_methods.add$1(separators, ""); + start = 0; + } + for (i = start; i < t1; ++i) + if (style.isSeparator$1(path.charCodeAt(i))) { + B.JSArray_methods.add$1(parts, B.JSString_methods.substring$2(path, start, i)); + B.JSArray_methods.add$1(separators, path[i]); + start = i + 1; + } + if (start < t1) { + B.JSArray_methods.add$1(parts, B.JSString_methods.substring$1(path, start)); + B.JSArray_methods.add$1(separators, ""); + } + return new A.ParsedPath(style, root, parts, separators); + }, + ParsedPath: function ParsedPath(t0, t1, t2, t3) { + var _ = this; + _.style = t0; + _.root = t1; + _.parts = t2; + _.separators = t3; + }, + PathException$(message) { + return new A.PathException(message); + }, + PathException: function PathException(t0) { + this.message = t0; + }, + Style__getPlatformStyle() { + if (A.Uri_base().get$scheme() !== "file") + return $.$get$Style_url(); + if (!B.JSString_methods.endsWith$1(A.Uri_base().get$path(), "/")) + return $.$get$Style_url(); + if (A._Uri__Uri(null, "a/b", null, null).toFilePath$0() === "a\\b") + return $.$get$Style_windows(); + return $.$get$Style_posix(); + }, + Style: function Style() { + }, + PosixStyle: function PosixStyle(t0, t1, t2) { + this.separatorPattern = t0; + this.needsSeparatorPattern = t1; + this.rootPattern = t2; + }, + UrlStyle: function UrlStyle(t0, t1, t2, t3) { + var _ = this; + _.separatorPattern = t0; + _.needsSeparatorPattern = t1; + _.rootPattern = t2; + _.relativeRootPattern = t3; + }, + WindowsStyle: function WindowsStyle(t0, t1, t2, t3) { + var _ = this; + _.separatorPattern = t0; + _.needsSeparatorPattern = t1; + _.rootPattern = t2; + _.relativeRootPattern = t3; + }, + WindowsStyle_absolutePathToUri_closure: function WindowsStyle_absolutePathToUri_closure() { + }, + SqliteException$(extendedResultCode, message, explanation, causingStatement, parametersToStatement, operation, offset) { + return new A.SqliteException(message, explanation, extendedResultCode, offset, operation, causingStatement, parametersToStatement); + }, + SqliteException: function SqliteException(t0, t1, t2, t3, t4, t5, t6) { + var _ = this; + _.message = t0; + _.explanation = t1; + _.extendedResultCode = t2; + _.offset = t3; + _.operation = t4; + _.causingStatement = t5; + _.parametersToStatement = t6; + }, + SqliteException_toString_closure: function SqliteException_toString_closure() { + }, + AllowedArgumentCount: function AllowedArgumentCount(t0) { + this.allowedArgs = t0; + }, + RawSqliteBindings: function RawSqliteBindings() { + }, + SqliteResult: function SqliteResult(t0, t1, t2) { + this.resultCode = t0; + this.result = t1; + this.$ti = t2; + }, + RawSqliteDatabase: function RawSqliteDatabase() { + }, + RawStatementCompiler: function RawStatementCompiler() { + }, + RawSqliteStatement: function RawSqliteStatement() { + }, + RawSqliteContext: function RawSqliteContext() { + }, + RawSqliteValue: function RawSqliteValue() { + }, + _extension_0_runWithArgsAndSetResult(_this, $function, args) { + var e, exception, encoded, t1, ptr, + dartArgs = new A.ValueList(args, A.List_List$filled(args.length, null, false, type$.nullable_Object)); + try { + A._extension_0_setResult(_this, $function.call$1(dartArgs)); + } catch (exception) { + e = A.unwrapException(exception); + encoded = B.C_Utf8Encoder.convert$1(A.Error_safeToString(e)); + t1 = _this.bindings; + ptr = t1.allocateBytes$1(encoded); + t1 = t1.sqlite3; + t1.sqlite3_result_error(_this.context, ptr, encoded.length); + t1.dart_sqlite3_free(ptr); + } finally { + } + }, + _extension_0_setResult(_this, result) { + var t1, encoded, t2, ptr, _this0; + $label0$0: { + t1 = null; + if (result == null) { + _this.bindings.sqlite3.sqlite3_result_null(_this.context); + break $label0$0; + } + if (A._isInt(result)) { + _this.bindings.sqlite3.sqlite3_result_int64(_this.context, type$.JavaScriptBigInt._as(init.G.BigInt(A._BigIntImpl__BigIntImpl$from(result).toString$0(0)))); + break $label0$0; + } + if (result instanceof A._BigIntImpl) { + _this.bindings.sqlite3.sqlite3_result_int64(_this.context, type$.JavaScriptBigInt._as(init.G.BigInt(A.BigIntRangeCheck_get_checkRange(result).toString$0(0)))); + break $label0$0; + } + if (typeof result == "number") { + _this.bindings.sqlite3.sqlite3_result_double(_this.context, result); + break $label0$0; + } + if (A._isBool(result)) { + _this.bindings.sqlite3.sqlite3_result_int64(_this.context, type$.JavaScriptBigInt._as(init.G.BigInt(A._BigIntImpl__BigIntImpl$from(result ? 1 : 0).toString$0(0)))); + break $label0$0; + } + if (typeof result == "string") { + encoded = B.C_Utf8Encoder.convert$1(result); + t2 = _this.bindings; + ptr = t2.allocateBytes$1(encoded); + t2 = t2.sqlite3; + t2.sqlite3_result_text(_this.context, ptr, encoded.length, -1); + t2.dart_sqlite3_free(ptr); + break $label0$0; + } + t2 = type$.List_int; + if (t2._is(result)) { + t2._as(result); + t2 = _this.bindings; + ptr = t2.allocateBytes$1(result); + t2 = t2.sqlite3; + t2.sqlite3_result_blob64(_this.context, ptr, type$.JavaScriptBigInt._as(init.G.BigInt(J.get$length$asx(result))), -1); + t2.dart_sqlite3_free(ptr); + break $label0$0; + } + if (type$.Record_2_nullable_Object_and_int._is(result)) { + A._extension_0_setResult(_this, result._0); + _this0 = result._1; + t2 = type$.nullable_JavaScriptFunction._as(_this.bindings.sqlite3.sqlite3_result_subtype); + if (t2 != null) + t2.call(null, _this.context, _this0); + break $label0$0; + } + t1 = A.throwExpression(A.ArgumentError$value(result, "result", "Unsupported type")); + } + return t1; + }, + FinalizableDatabase: function FinalizableDatabase(t0, t1, t2, t3) { + var _ = this; + _.bindings = t0; + _.database = t1; + _._statements = t2; + _.dartCleanup = t3; + }, + DatabaseImplementation: function DatabaseImplementation(t0, t1, t2) { + var _ = this; + _.bindings = t0; + _.database = t1; + _.finalizable = t2; + _._isClosed = false; + }, + DatabaseImplementation_createFunction_closure: function DatabaseImplementation_createFunction_closure(t0) { + this.$function = t0; + }, + DatabaseImplementation__prepareInternal_freeIntermediateResults: function DatabaseImplementation__prepareInternal_freeIntermediateResults(t0, t1) { + this.compiler = t0; + this.createdStatements = t1; + }, + ValueList: function ValueList(t0, t1) { + this.rawValues = t0; + this._cachedCopies = t1; + }, + FinalizablePart: function FinalizablePart() { + }, + disposeFinalizer_closure: function disposeFinalizer_closure() { + }, + Sqlite3Implementation: function Sqlite3Implementation() { + }, + FinalizableStatement: function FinalizableStatement(t0) { + this.statement = t0; + this._inResetState = true; + this._statement$_closed = false; + }, + StatementImplementation: function StatementImplementation(t0, t1, t2, t3) { + var _ = this; + _.statement = t0; + _.database = t1; + _.finalizable = t2; + _.sql = t3; + _._latestArguments = null; + }, + InMemoryFileSystem$(random) { + var t1 = $.$get$BaseVirtualFileSystem__fallbackRandom(); + return new A.InMemoryFileSystem(A.LinkedHashMap_LinkedHashMap$_empty(type$.String, type$.nullable_Uint8Buffer), t1, "dart-memory"); + }, + InMemoryFileSystem: function InMemoryFileSystem(t0, t1, t2) { + this.fileData = t0; + this.random = t1; + this.name = t2; + }, + _InMemoryFile: function _InMemoryFile(t0, t1, t2) { + var _ = this; + _.vfs = t0; + _.path = t1; + _.deleteOnClose = t2; + _._lockMode = 0; + }, + Cursor: function Cursor() { + }, + ResultSet: function ResultSet(t0, t1, t2) { + this.rows = t0; + this._result_set$_columnNames = t1; + this._calculatedIndexes = t2; + }, + Row: function Row(t0, t1) { + this._result = t0; + this._data = t1; + }, + _ResultIterator: function _ResultIterator(t0) { + this.result = t0; + this.index = -1; + }, + _ResultSet_Cursor_ListMixin: function _ResultSet_Cursor_ListMixin() { + }, + _ResultSet_Cursor_ListMixin_NonGrowableListMixin: function _ResultSet_Cursor_ListMixin_NonGrowableListMixin() { + }, + _Row_Object_UnmodifiableMapMixin: function _Row_Object_UnmodifiableMapMixin() { + }, + _Row_Object_UnmodifiableMapMixin_MapMixin: function _Row_Object_UnmodifiableMapMixin_MapMixin() { + }, + OpenMode: function OpenMode(t0, t1) { + this.index = t0; + this._name = t1; + }, + CommonPreparedStatement: function CommonPreparedStatement() { + }, + IndexedParameters: function IndexedParameters(t0) { + this.parameters = t0; + }, + VfsException$(returnCode) { + return new A.VfsException(returnCode); + }, + BaseVirtualFileSystem_generateRandomness(target, random) { + var t1, i, t2; + if (random == null) + random = $.$get$BaseVirtualFileSystem__fallbackRandom(); + for (t1 = target.length, i = 0; i < t1; ++i) { + t2 = random.nextInt$1(256); + target.$flags & 2 && A.throwUnsupportedOperation(target); + target[i] = t2; + } + }, + VfsException: function VfsException(t0) { + this.returnCode = t0; + }, + Sqlite3Filename: function Sqlite3Filename(t0) { + this.path = t0; + }, + VirtualFileSystem: function VirtualFileSystem() { + }, + BaseVirtualFileSystem: function BaseVirtualFileSystem() { + }, + BaseVfsFile: function BaseVfsFile() { + }, + WasmSqliteBindings: function WasmSqliteBindings(t0) { + this.bindings = t0; + }, + WasmDatabase0: function WasmDatabase0(t0, t1) { + this.bindings = t0; + this.db = t1; + }, + WasmStatementCompiler: function WasmStatementCompiler(t0, t1, t2, t3) { + var _ = this; + _.database = t0; + _.sql = t1; + _.stmtOut = t2; + _.pzTail = t3; + }, + WasmStatement: function WasmStatement(t0, t1, t2) { + this.stmt = t0; + this.bindings = t1; + this._allocatedArguments = t2; + }, + WasmContext: function WasmContext(t0, t1) { + this.bindings = t0; + this.context = t1; + }, + WasmValue: function WasmValue(t0, t1) { + this.bindings = t0; + this.value = t1; + }, + WasmValueList: function WasmValueList(t0, t1, t2) { + this.bindings = t0; + this.length = t1; + this.value = t2; + }, + AsyncJavaScriptIteratable: function AsyncJavaScriptIteratable(t0, t1) { + this._jsObject = t0; + this.$ti = t1; + }, + AsyncJavaScriptIteratable_listen_fetchNext: function AsyncJavaScriptIteratable_listen_fetchNext(t0, t1, t2, t3) { + var _ = this; + _._box_0 = t0; + _.$this = t1; + _.iterator = t2; + _.controller = t3; + }, + AsyncJavaScriptIteratable_listen_fetchNext_closure: function AsyncJavaScriptIteratable_listen_fetchNext_closure(t0, t1, t2, t3) { + var _ = this; + _._box_0 = t0; + _.$this = t1; + _.controller = t2; + _.fetchNext = t3; + }, + AsyncJavaScriptIteratable_listen_fetchNextIfNecessary: function AsyncJavaScriptIteratable_listen_fetchNextIfNecessary(t0, t1, t2) { + this._box_0 = t0; + this.controller = t1; + this.fetchNext = t2; + }, + CompleteIdbRequest_complete(_this, $T) { + var t1 = new A._Future($.Zone__current, $T._eval$1("_Future<0>")), + completer = new A._SyncCompleter(t1, $T._eval$1("_SyncCompleter<0>")), + t2 = type$.nullable_void_Function_JSObject, + t3 = type$.JSObject; + A._EventStreamSubscription$(_this, "success", t2._as(new A.CompleteIdbRequest_complete_closure(completer, _this, $T)), false, t3); + A._EventStreamSubscription$(_this, "error", t2._as(new A.CompleteIdbRequest_complete_closure0(completer, _this)), false, t3); + return t1; + }, + CompleteOpenIdbRequest_completeOrBlocked(_this, $T) { + var t1 = new A._Future($.Zone__current, $T._eval$1("_Future<0>")), + completer = new A._SyncCompleter(t1, $T._eval$1("_SyncCompleter<0>")), + t2 = type$.nullable_void_Function_JSObject, + t3 = type$.JSObject; + A._EventStreamSubscription$(_this, "success", t2._as(new A.CompleteOpenIdbRequest_completeOrBlocked_closure(completer, _this, $T)), false, t3); + A._EventStreamSubscription$(_this, "error", t2._as(new A.CompleteOpenIdbRequest_completeOrBlocked_closure0(completer, _this)), false, t3); + A._EventStreamSubscription$(_this, "blocked", t2._as(new A.CompleteOpenIdbRequest_completeOrBlocked_closure1(completer, _this)), false, t3); + return t1; + }, + _CursorReader: function _CursorReader(t0, t1) { + var _ = this; + _._indexed_db0$_onError = _._onSuccess = _._cursor = null; + _._cursorRequest = t0; + _.$ti = t1; + }, + _CursorReader_moveNext_closure: function _CursorReader_moveNext_closure(t0, t1) { + this.$this = t0; + this.completer = t1; + }, + _CursorReader_moveNext_closure0: function _CursorReader_moveNext_closure0(t0, t1) { + this.$this = t0; + this.completer = t1; + }, + CompleteIdbRequest_complete_closure: function CompleteIdbRequest_complete_closure(t0, t1, t2) { + this.completer = t0; + this._this = t1; + this.T = t2; + }, + CompleteIdbRequest_complete_closure0: function CompleteIdbRequest_complete_closure0(t0, t1) { + this.completer = t0; + this._this = t1; + }, + CompleteOpenIdbRequest_completeOrBlocked_closure: function CompleteOpenIdbRequest_completeOrBlocked_closure(t0, t1, t2) { + this.completer = t0; + this._this = t1; + this.T = t2; + }, + CompleteOpenIdbRequest_completeOrBlocked_closure0: function CompleteOpenIdbRequest_completeOrBlocked_closure0(t0, t1) { + this.completer = t0; + this._this = t1; + }, + CompleteOpenIdbRequest_completeOrBlocked_closure1: function CompleteOpenIdbRequest_completeOrBlocked_closure1(t0, t1) { + this.completer = t0; + this._this = t1; + }, + WasmInstance_load(response, imports) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.JSObject), + $async$returnValue, native, exports, _this; + var $async$WasmInstance_load = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + _this = {}; + imports.forEach$1(0, new A.WasmInstance_load_closure(_this)); + $async$goto = 3; + return A._asyncAwait(A.promiseToFuture(A._asJSObject(init.G.WebAssembly.instantiateStreaming(response, _this)), type$.JSObject), $async$WasmInstance_load); + case 3: + // returning from await. + native = $async$result; + exports = A._asJSObject(A._asJSObject(native.instance).exports); + if ("_initialize" in exports) + type$.JavaScriptFunction._as(exports._initialize).call(); + $async$returnValue = A._asJSObject(native.instance); + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$WasmInstance_load, $async$completer); + }, + WasmInstance_load_closure: function WasmInstance_load_closure(t0) { + this.importsJs = t0; + }, + WasmInstance_load__closure: function WasmInstance_load__closure(t0) { + this.moduleJs = t0; + }, + WasmSqlite3_loadFromUrl(uri) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.WasmSqlite3), + $async$returnValue, t1, jsUri, $async$temp1; + var $async$WasmSqlite3_loadFromUrl = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = init.G; + jsUri = uri.get$isAbsolute() ? A._asJSObject(new t1.URL(uri.toString$0(0))) : A._asJSObject(new t1.URL(uri.toString$0(0), A.Uri_base().toString$0(0))); + $async$temp1 = A; + $async$goto = 3; + return A._asyncAwait(A.promiseToFuture(A._asJSObject(t1.fetch(jsUri, null)), type$.JSObject), $async$WasmSqlite3_loadFromUrl); + case 3: + // returning from await. + $async$returnValue = $async$temp1.WasmSqlite3__load($async$result); + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$WasmSqlite3_loadFromUrl, $async$completer); + }, + WasmSqlite3__load(fetchResponse) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.WasmSqlite3), + $async$returnValue, $async$temp1, $async$temp2; + var $async$WasmSqlite3__load = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$temp1 = A; + $async$temp2 = A; + $async$goto = 3; + return A._asyncAwait(A.WasmBindings_instantiateAsync(fetchResponse), $async$WasmSqlite3__load); + case 3: + // returning from await. + $async$returnValue = new $async$temp1.WasmSqlite3(new $async$temp2.WasmSqliteBindings($async$result)); + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$WasmSqlite3__load, $async$completer); + }, + WasmSqlite3: function WasmSqlite3(t0) { + this.bindings = t0; + }, + WasmVfs: function WasmVfs(t0, t1, t2, t3, t4) { + var _ = this; + _.synchronizer = t0; + _.serializer = t1; + _.pathContext = t2; + _.random = t3; + _.name = t4; + }, + WasmFile: function WasmFile(t0, t1) { + this.vfs = t0; + this.fd = t1; + this.lockStatus = 0; + }, + RequestResponseSynchronizer_RequestResponseSynchronizer(buffer) { + var t1 = A._asInt(buffer.byteLength); + if (t1 !== 8) + throw A.wrapException(A.ArgumentError$("Must be 8 in length", null)); + t1 = type$.JavaScriptFunction._as(init.G.Int32Array); + return new A.RequestResponseSynchronizer(type$.NativeInt32List._as(A.callConstructor(t1, [buffer], type$.JSObject))); + }, + MessageSerializer_readEmpty(unused) { + return B.C_EmptyMessage; + }, + MessageSerializer_readFlags(msg) { + var t1 = msg.dataView; + return new A.Flags(t1.getInt32(0, false), t1.getInt32(4, false), t1.getInt32(8, false)); + }, + MessageSerializer_readNameAndFlags(msg) { + var t1 = msg.dataView; + return new A.NameAndInt32Flags(B.C_Utf8Codec.decode$1(A.SharedArrayBuffer_asUint8ListSlice(msg.buffer, 16, t1.getInt32(12, false))), t1.getInt32(0, false), t1.getInt32(4, false), t1.getInt32(8, false)); + }, + RequestResponseSynchronizer: function RequestResponseSynchronizer(t0) { + this.int32View = t0; + }, + MessageSerializer: function MessageSerializer(t0, t1, t2) { + this.buffer = t0; + this.dataView = t1; + this.byteView = t2; + }, + WorkerOperation: function WorkerOperation(t0, t1, t2, t3, t4) { + var _ = this; + _.readRequest = t0; + _.readResponse = t1; + _.index = t2; + _._name = t3; + _.$ti = t4; + }, + Message0: function Message0() { + }, + EmptyMessage: function EmptyMessage() { + }, + Flags: function Flags(t0, t1, t2) { + this.flag0 = t0; + this.flag1 = t1; + this.flag2 = t2; + }, + NameAndInt32Flags: function NameAndInt32Flags(t0, t1, t2, t3) { + var _ = this; + _.name = t0; + _.flag0 = t1; + _.flag1 = t2; + _.flag2 = t3; + }, + VfsWorker_create(options) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.VfsWorker), + $async$returnValue, t2, _i, t3, t4, t5, t6, t1, root, split; + var $async$VfsWorker_create = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = type$.JSObject; + $async$goto = 3; + return A._asyncAwait(A.promiseToFuture(A._asJSObject(A.storageManager().getDirectory()), t1), $async$VfsWorker_create); + case 3: + // returning from await. + root = $async$result; + split = $.$get$url().split$1(0, A._asString(options.root)); + t2 = split.length, _i = 0; + case 4: + // for condition + if (!(_i < split.length)) { + // goto after for + $async$goto = 6; + break; + } + $async$goto = 7; + return A._asyncAwait(A.promiseToFuture(A._asJSObject(root.getDirectoryHandle(split[_i], {create: true})), t1), $async$VfsWorker_create); + case 7: + // returning from await. + root = $async$result; + case 5: + // for update + split.length === t2 || (0, A.throwConcurrentModificationError)(split), ++_i; + // goto for condition + $async$goto = 4; + break; + case 6: + // after for + t2 = type$._OpenedFileHandle; + t3 = A.RequestResponseSynchronizer_RequestResponseSynchronizer(A._asJSObject(options.synchronizationBuffer)); + t4 = A._asJSObject(options.communicationBuffer); + t5 = A.SharedArrayBuffer_asByteData(t4, 65536, 2048); + t6 = type$.JavaScriptFunction._as(init.G.Uint8Array); + $async$returnValue = new A.VfsWorker(t3, new A.MessageSerializer(t4, t5, type$.NativeUint8List._as(A.callConstructor(t6, [t4], t1))), root, A.LinkedHashMap_LinkedHashMap$_empty(type$.int, t2), A.LinkedHashSet_LinkedHashSet$_empty(t2)); + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$VfsWorker_create, $async$completer); + }, + _ResolvedPath: function _ResolvedPath(t0, t1, t2) { + this.fullPath = t0; + this.directory = t1; + this.filename = t2; + }, + VfsWorker: function VfsWorker(t0, t1, t2, t3, t4) { + var _ = this; + _.synchronizer = t0; + _.messages = t1; + _.root = t2; + _._fdCounter = 0; + _._stopped = false; + _._openFiles = t3; + _._implicitlyHeldLocks = t4; + }, + _OpenedFileHandle: function _OpenedFileHandle(t0, t1, t2, t3, t4, t5, t6) { + var _ = this; + _.fd = t0; + _.readonly = t1; + _.deleteOnClose = t2; + _.fullPath = t3; + _.directory = t4; + _.filename = t5; + _.file = t6; + _.explicitlyLocked = false; + _.syncHandle = null; + }, + IndexedDbFileSystem_open(dbName) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.IndexedDbFileSystem), + $async$returnValue, t1, t2, t3, t4, fs; + var $async$IndexedDbFileSystem_open = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = type$.String; + t2 = new A.AsynchronousIndexedDbFileSystem(dbName); + t3 = A.InMemoryFileSystem$(null); + t4 = $.$get$BaseVirtualFileSystem__fallbackRandom(); + fs = new A.IndexedDbFileSystem(t2, t3, new A.LinkedList(type$.LinkedList__IndexedDbWorkItem), A.LinkedHashSet_LinkedHashSet$_empty(t1), A.LinkedHashMap_LinkedHashMap$_empty(t1, type$.int), t4, "indexeddb"); + $async$goto = 3; + return A._asyncAwait(t2.open$0(), $async$IndexedDbFileSystem_open); + case 3: + // returning from await. + $async$goto = 4; + return A._asyncAwait(fs._readFiles$0(), $async$IndexedDbFileSystem_open); + case 4: + // returning from await. + $async$returnValue = fs; + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$IndexedDbFileSystem_open, $async$completer); + }, + AsynchronousIndexedDbFileSystem: function AsynchronousIndexedDbFileSystem(t0) { + this._indexed_db$_database = null; + this._dbName = t0; + }, + AsynchronousIndexedDbFileSystem_open_closure: function AsynchronousIndexedDbFileSystem_open_closure(t0) { + this.openRequest = t0; + }, + AsynchronousIndexedDbFileSystem__readFile_closure: function AsynchronousIndexedDbFileSystem__readFile_closure(t0) { + this.fileId = t0; + }, + AsynchronousIndexedDbFileSystem_readFully_closure: function AsynchronousIndexedDbFileSystem_readFully_closure(t0, t1, t2, t3) { + var _ = this; + _.row = t0; + _.result = t1; + _.rowOffset = t2; + _.length = t3; + }, + AsynchronousIndexedDbFileSystem__write_writeBlock: function AsynchronousIndexedDbFileSystem__write_writeBlock(t0, t1) { + this.blocks = t0; + this.fileId = t1; + }, + AsynchronousIndexedDbFileSystem__write_closure: function AsynchronousIndexedDbFileSystem__write_closure(t0, t1) { + this.writeBlock = t0; + this.writes = t1; + }, + _FileWriteRequest: function _FileWriteRequest(t0, t1, t2) { + this.originalContent = t0; + this.replacedBlocks = t1; + this.newFileLength = t2; + }, + _FileWriteRequest__updateBlock_closure: function _FileWriteRequest__updateBlock_closure(t0, t1) { + this.$this = t0; + this.blockOffset = t1; + }, + _OffsetAndBuffer: function _OffsetAndBuffer(t0, t1) { + this.offset = t0; + this.buffer = t1; + }, + IndexedDbFileSystem: function IndexedDbFileSystem(t0, t1, t2, t3, t4, t5, t6) { + var _ = this; + _._asynchronous = t0; + _._isClosing = false; + _._currentWorkItem = null; + _._memory = t1; + _._pendingWork = t2; + _._inMemoryOnlyFiles = t3; + _._knownFileIds = t4; + _.random = t5; + _.name = t6; + }, + IndexedDbFileSystem__startWorkingIfNeeded_closure: function IndexedDbFileSystem__startWorkingIfNeeded_closure(t0) { + this.$this = t0; + }, + _IndexedDbFile: function _IndexedDbFile(t0, t1, t2) { + this.vfs = t0; + this.memoryFile = t1; + this.path = t2; + }, + _IndexedDbFile_xTruncate_closure: function _IndexedDbFile_xTruncate_closure(t0, t1) { + this.$this = t0; + this.size = t1; + }, + _IndexedDbWorkItem: function _IndexedDbWorkItem() { + }, + _FunctionWorkItem: function _FunctionWorkItem(t0, t1) { + var _ = this; + _.work = t0; + _.completer = t1; + _._previous = _._next = _._list = null; + }, + _DeleteFileWorkItem: function _DeleteFileWorkItem(t0, t1, t2) { + var _ = this; + _.fileSystem = t0; + _.path = t1; + _.completer = t2; + _._previous = _._next = _._list = null; + }, + _CreateFileWorkItem: function _CreateFileWorkItem(t0, t1, t2) { + var _ = this; + _.fileSystem = t0; + _.path = t1; + _.completer = t2; + _._previous = _._next = _._list = null; + }, + _WriteFileWorkItem: function _WriteFileWorkItem(t0, t1, t2, t3, t4) { + var _ = this; + _.fileSystem = t0; + _.path = t1; + _.originalContent = t2; + _.writes = t3; + _.completer = t4; + _._previous = _._next = _._list = null; + }, + SimpleOpfsFileSystem__resolveDir(path) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.Record_2_nullable_JSObject_and_JSObject), + $async$returnValue, t1, opfsDirectory, t2, t3, $parent, _i, opfsDirectory0, storage; + var $async$SimpleOpfsFileSystem__resolveDir = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + storage = A.storageManager(); + if (storage == null) + throw A.wrapException(A.VfsException$(1)); + t1 = type$.JSObject; + $async$goto = 3; + return A._asyncAwait(A.promiseToFuture(A._asJSObject(storage.getDirectory()), t1), $async$SimpleOpfsFileSystem__resolveDir); + case 3: + // returning from await. + opfsDirectory = $async$result; + t2 = $.$get$context().split$1(0, path), t3 = t2.length, $parent = null, _i = 0; + case 4: + // for condition + if (!(_i < t2.length)) { + // goto after for + $async$goto = 6; + break; + } + $async$goto = 7; + return A._asyncAwait(A.promiseToFuture(A._asJSObject(opfsDirectory.getDirectoryHandle(t2[_i], {create: true})), t1), $async$SimpleOpfsFileSystem__resolveDir); + case 7: + // returning from await. + opfsDirectory0 = $async$result; + case 5: + // for update + t2.length === t3 || (0, A.throwConcurrentModificationError)(t2), ++_i, $parent = opfsDirectory, opfsDirectory = opfsDirectory0; + // goto for condition + $async$goto = 4; + break; + case 6: + // after for + $async$returnValue = new A._Record_2($parent, opfsDirectory); + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$SimpleOpfsFileSystem__resolveDir, $async$completer); + }, + SimpleOpfsFileSystem_loadFromStorage(path) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.SimpleOpfsFileSystem), + $async$returnValue, $async$temp1; + var $async$SimpleOpfsFileSystem_loadFromStorage = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + if (A.storageManager() == null) + throw A.wrapException(A.VfsException$(1)); + $async$temp1 = A; + $async$goto = 3; + return A._asyncAwait(A.SimpleOpfsFileSystem__resolveDir(path), $async$SimpleOpfsFileSystem_loadFromStorage); + case 3: + // returning from await. + $async$returnValue = $async$temp1.SimpleOpfsFileSystem_inDirectory($async$result._1, false, "simple-opfs"); + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$SimpleOpfsFileSystem_loadFromStorage, $async$completer); + }, + SimpleOpfsFileSystem_inDirectory(root, readWriteUnsafe, vfsName) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.SimpleOpfsFileSystem), + $async$returnValue, t1, _i, type, t2, t3, t4, $open, meta, $async$temp1, $async$temp2; + var $async$SimpleOpfsFileSystem_inDirectory = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + $open = new A.SimpleOpfsFileSystem_inDirectory_open(root, false); + $async$goto = 3; + return A._asyncAwait($open.call$1("meta"), $async$SimpleOpfsFileSystem_inDirectory); + case 3: + // returning from await. + meta = $async$result; + meta.truncate(2); + t1 = A.LinkedHashMap_LinkedHashMap$_empty(type$.FileType, type$.JSObject); + _i = 0; + case 4: + // for condition + if (!(_i < 2)) { + // goto after for + $async$goto = 6; + break; + } + type = B.List_fyc[_i]; + $async$temp1 = t1; + $async$temp2 = type; + $async$goto = 7; + return A._asyncAwait($open.call$1(type._name), $async$SimpleOpfsFileSystem_inDirectory); + case 7: + // returning from await. + $async$temp1.$indexSet(0, $async$temp2, $async$result); + case 5: + // for update + ++_i; + // goto for condition + $async$goto = 4; + break; + case 6: + // after for + t2 = new Uint8Array(2); + t3 = A.InMemoryFileSystem$(null); + t4 = $.$get$BaseVirtualFileSystem__fallbackRandom(); + $async$returnValue = new A.SimpleOpfsFileSystem(meta, t2, t1, t3, t4, vfsName); + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$SimpleOpfsFileSystem_inDirectory, $async$completer); + }, + FileType: function FileType(t0, t1, t2) { + this.filePath = t0; + this.index = t1; + this._name = t2; + }, + SimpleOpfsFileSystem: function SimpleOpfsFileSystem(t0, t1, t2, t3, t4, t5) { + var _ = this; + _._metaHandle = t0; + _._existsList = t1; + _._files = t2; + _._simple_opfs$_memory = t3; + _.random = t4; + _.name = t5; + }, + SimpleOpfsFileSystem_inDirectory_open: function SimpleOpfsFileSystem_inDirectory_open(t0, t1) { + this.root = t0; + this.readWriteUnsafe = t1; + }, + _SimpleOpfsFile: function _SimpleOpfsFile(t0, t1, t2, t3) { + var _ = this; + _.vfs = t0; + _.type = t1; + _.syncHandle = t2; + _.deleteOnClose = t3; + _._simple_opfs$_lockMode = 0; + }, + WasmBindings_instantiateAsync(response) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.WasmBindings), + $async$returnValue, instance, injected, t1; + var $async$WasmBindings_instantiateAsync = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + injected = A._InjectedValues$(); + t1 = injected.___InjectedValues_injectedValues_A; + t1 === $ && A.throwLateFieldNI("injectedValues"); + $async$goto = 3; + return A._asyncAwait(A.WasmInstance_load(response, t1), $async$WasmBindings_instantiateAsync); + case 3: + // returning from await. + instance = $async$result; + t1 = injected.___InjectedValues_memory_A; + t1 === $ && A.throwLateFieldNI("memory"); + $async$returnValue = injected.___InjectedValues_bindings_A = new A.WasmBindings(t1, injected.callbacks, A._asJSObject(instance.exports)); + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$WasmBindings_instantiateAsync, $async$completer); + }, + _runVfs(body) { + var e, exception, t1; + try { + body.call$0(); + return 0; + } catch (exception) { + t1 = A.unwrapException(exception); + if (t1 instanceof A.VfsException) { + e = t1; + return e.returnCode; + } else + return 1; + } + }, + WrappedMemory_strlen(_this, address) { + var bytes = A.NativeUint8List_NativeUint8List$view(type$.NativeArrayBuffer._as(_this.buffer), address, null), + t1 = bytes.length, + $length = 0; + for (;;) { + if (!($length < t1)) + return A.ioore(bytes, $length); + if (!(bytes[$length] !== 0)) + break; + ++$length; + } + return $length; + }, + WrappedMemory_readString(_this, address, $length) { + var t1 = type$.NativeArrayBuffer._as(_this.buffer); + return B.C_Utf8Codec.decode$1(A.NativeUint8List_NativeUint8List$view(t1, address, $length == null ? A.WrappedMemory_strlen(_this, address) : $length)); + }, + WrappedMemory_readNullableString(_this, address, $length) { + var t1; + if (address === 0) + return null; + t1 = type$.NativeArrayBuffer._as(_this.buffer); + return B.C_Utf8Codec.decode$1(A.NativeUint8List_NativeUint8List$view(t1, address, $length == null ? A.WrappedMemory_strlen(_this, address) : $length)); + }, + WrappedMemory_copyRange(_this, pointer, $length) { + var list = new Uint8Array($length); + B.NativeUint8List_methods.setAll$2(list, 0, A.NativeUint8List_NativeUint8List$view(type$.NativeArrayBuffer._as(_this.buffer), pointer, $length)); + return list; + }, + _InjectedValues$() { + var t1 = type$.int; + t1 = new A._InjectedValues(new A.DartCallbacks(A.LinkedHashMap_LinkedHashMap$_empty(t1, type$.RegisteredFunctionSet), A.LinkedHashMap_LinkedHashMap$_empty(t1, type$.AggregateContext_nullable_Object), A.LinkedHashMap_LinkedHashMap$_empty(t1, type$.VirtualFileSystem), A.LinkedHashMap_LinkedHashMap$_empty(t1, type$.VirtualFileSystemFile), A.LinkedHashMap_LinkedHashMap$_empty(t1, type$.SessionApplyCallbacks))); + t1._InjectedValues$0(); + return t1; + }, + WasmBindings: function WasmBindings(t0, t1, t2) { + this.memory = t0; + this.callbacks = t1; + this.sqlite3 = t2; + }, + _InjectedValues: function _InjectedValues(t0) { + var _ = this; + _.___InjectedValues_memory_A = _.___InjectedValues_injectedValues_A = _.___InjectedValues_bindings_A = $; + _.callbacks = t0; + }, + _InjectedValues_closure: function _InjectedValues_closure(t0) { + this.memory = t0; + }, + _InjectedValues_closure0: function _InjectedValues_closure0(t0, t1) { + this.$this = t0; + this.memory = t1; + }, + _InjectedValues__closure13: function _InjectedValues__closure13(t0, t1, t2, t3, t4, t5, t6) { + var _ = this; + _.$this = t0; + _.vfs = t1; + _.path = t2; + _.flags = t3; + _.memory = t4; + _.dartFdPtr = t5; + _.pOutFlags = t6; + }, + _InjectedValues_closure1: function _InjectedValues_closure1(t0, t1) { + this.$this = t0; + this.memory = t1; + }, + _InjectedValues__closure12: function _InjectedValues__closure12(t0, t1, t2) { + this.vfs = t0; + this.path = t1; + this.syncDir = t2; + }, + _InjectedValues_closure2: function _InjectedValues_closure2(t0, t1) { + this.$this = t0; + this.memory = t1; + }, + _InjectedValues__closure11: function _InjectedValues__closure11(t0, t1, t2, t3, t4) { + var _ = this; + _.vfs = t0; + _.path = t1; + _.flags = t2; + _.memory = t3; + _.pResOut = t4; + }, + _InjectedValues_closure3: function _InjectedValues_closure3(t0, t1) { + this.$this = t0; + this.memory = t1; + }, + _InjectedValues__closure10: function _InjectedValues__closure10(t0, t1, t2, t3, t4) { + var _ = this; + _.vfs = t0; + _.path = t1; + _.nOut = t2; + _.memory = t3; + _.zOut = t4; + }, + _InjectedValues_closure4: function _InjectedValues_closure4(t0, t1) { + this.$this = t0; + this.memory = t1; + }, + _InjectedValues__closure9: function _InjectedValues__closure9(t0, t1, t2, t3) { + var _ = this; + _.memory = t0; + _.zOut = t1; + _.nByte = t2; + _.vfs = t3; + }, + _InjectedValues_closure5: function _InjectedValues_closure5(t0) { + this.$this = t0; + }, + _InjectedValues__closure8: function _InjectedValues__closure8(t0, t1) { + this.vfs = t0; + this.micros = t1; + }, + _InjectedValues_closure6: function _InjectedValues_closure6(t0, t1) { + this.$this = t0; + this.memory = t1; + }, + _InjectedValues_closure7: function _InjectedValues_closure7(t0) { + this.$this = t0; + }, + _InjectedValues_closure8: function _InjectedValues_closure8(t0) { + this.$this = t0; + }, + _InjectedValues__closure7: function _InjectedValues__closure7(t0, t1, t2) { + this.$this = t0; + this.file = t1; + this.fd = t2; + }, + _InjectedValues_closure9: function _InjectedValues_closure9(t0, t1) { + this.$this = t0; + this.memory = t1; + }, + _InjectedValues__closure6: function _InjectedValues__closure6(t0, t1, t2, t3, t4) { + var _ = this; + _.file = t0; + _.memory = t1; + _.target = t2; + _.amount = t3; + _.offset = t4; + }, + _InjectedValues_closure10: function _InjectedValues_closure10(t0, t1) { + this.$this = t0; + this.memory = t1; + }, + _InjectedValues__closure5: function _InjectedValues__closure5(t0, t1, t2, t3, t4) { + var _ = this; + _.file = t0; + _.memory = t1; + _.source = t2; + _.amount = t3; + _.offset = t4; + }, + _InjectedValues_closure11: function _InjectedValues_closure11(t0) { + this.$this = t0; + }, + _InjectedValues__closure4: function _InjectedValues__closure4(t0, t1) { + this.file = t0; + this.size = t1; + }, + _InjectedValues_closure12: function _InjectedValues_closure12(t0) { + this.$this = t0; + }, + _InjectedValues__closure3: function _InjectedValues__closure3(t0, t1) { + this.file = t0; + this.flags = t1; + }, + _InjectedValues_closure13: function _InjectedValues_closure13(t0, t1) { + this.$this = t0; + this.memory = t1; + }, + _InjectedValues__closure2: function _InjectedValues__closure2(t0, t1, t2) { + this.file = t0; + this.memory = t1; + this.sizePtr = t2; + }, + _InjectedValues_closure14: function _InjectedValues_closure14(t0) { + this.$this = t0; + }, + _InjectedValues__closure1: function _InjectedValues__closure1(t0, t1) { + this.file = t0; + this.flags = t1; + }, + _InjectedValues_closure15: function _InjectedValues_closure15(t0) { + this.$this = t0; + }, + _InjectedValues__closure0: function _InjectedValues__closure0(t0, t1) { + this.file = t0; + this.flags = t1; + }, + _InjectedValues_closure16: function _InjectedValues_closure16(t0, t1) { + this.$this = t0; + this.memory = t1; + }, + _InjectedValues__closure: function _InjectedValues__closure(t0, t1, t2) { + this.file = t0; + this.memory = t1; + this.pResOut = t2; + }, + _InjectedValues_closure17: function _InjectedValues_closure17(t0) { + this.$this = t0; + }, + _InjectedValues_closure18: function _InjectedValues_closure18(t0) { + this.$this = t0; + }, + _InjectedValues_closure19: function _InjectedValues_closure19(t0) { + this.$this = t0; + }, + _InjectedValues_closure20: function _InjectedValues_closure20(t0) { + this.$this = t0; + }, + _InjectedValues_closure21: function _InjectedValues_closure21(t0) { + this.$this = t0; + }, + _InjectedValues_closure22: function _InjectedValues_closure22(t0) { + this.$this = t0; + }, + _InjectedValues_closure23: function _InjectedValues_closure23(t0, t1) { + this.$this = t0; + this.memory = t1; + }, + _InjectedValues_closure24: function _InjectedValues_closure24(t0, t1) { + this.$this = t0; + this.memory = t1; + }, + _InjectedValues_closure25: function _InjectedValues_closure25(t0) { + this.$this = t0; + }, + _InjectedValues_closure26: function _InjectedValues_closure26(t0) { + this.$this = t0; + }, + _InjectedValues_closure27: function _InjectedValues_closure27(t0) { + this.memory = t0; + }, + _InjectedValues_closure28: function _InjectedValues_closure28(t0) { + this.$this = t0; + }, + _InjectedValues_closure29: function _InjectedValues_closure29(t0) { + this.$this = t0; + }, + DartCallbacks: function DartCallbacks(t0, t1, t2, t3, t4) { + var _ = this; + _._id = 0; + _.functions = t0; + _.aggregateContexts = t1; + _.registeredVfs = t2; + _.openedFiles = t3; + _.sessionApply = t4; + _.installedRollbackHook = _.installedCommitHook = _.installedUpdateHook = null; + }, + RegisteredFunctionSet: function RegisteredFunctionSet(t0, t1, t2) { + this.xFunc = t0; + this.xStep = t1; + this.xFinal = t2; + }, + Chain_Chain$parse(chain) { + var t1, t2, + _s51_ = string$.x3d_____; + if (chain.length === 0) + return new A.Chain(A.List_List$unmodifiable(A._setArrayType([], type$.JSArray_Trace), type$.Trace)); + t1 = $.$get$vmChainGap(); + if (B.JSString_methods.contains$1(chain, t1)) { + t1 = B.JSString_methods.split$1(chain, t1); + t2 = A._arrayInstanceType(t1); + return new A.Chain(A.List_List$unmodifiable(new A.MappedIterable(new A.WhereIterable(t1, t2._eval$1("bool(1)")._as(new A.Chain_Chain$parse_closure()), t2._eval$1("WhereIterable<1>")), t2._eval$1("Trace(1)")._as(A.trace_Trace___parseVM_tearOff$closure()), t2._eval$1("MappedIterable<1,Trace>")), type$.Trace)); + } + if (!B.JSString_methods.contains$1(chain, _s51_)) + return new A.Chain(A.List_List$unmodifiable(A._setArrayType([A.Trace_Trace$parse(chain)], type$.JSArray_Trace), type$.Trace)); + return new A.Chain(A.List_List$unmodifiable(new A.MappedListIterable(A._setArrayType(chain.split(_s51_), type$.JSArray_String), type$.Trace_Function_String._as(A.trace_Trace___parseFriendly_tearOff$closure()), type$.MappedListIterable_String_Trace), type$.Trace)); + }, + Chain: function Chain(t0) { + this.traces = t0; + }, + Chain_Chain$parse_closure: function Chain_Chain$parse_closure() { + }, + Chain_toTrace_closure: function Chain_toTrace_closure() { + }, + Chain_toString_closure0: function Chain_toString_closure0() { + }, + Chain_toString__closure0: function Chain_toString__closure0() { + }, + Chain_toString_closure: function Chain_toString_closure(t0) { + this.longest = t0; + }, + Chain_toString__closure: function Chain_toString__closure(t0) { + this.longest = t0; + }, + Frame___parseVM_tearOff(frame) { + return A.Frame_Frame$parseVM(A._asString(frame)); + }, + Frame_Frame$parseVM(frame) { + return A.Frame__catchFormatException(frame, new A.Frame_Frame$parseVM_closure(frame)); + }, + Frame___parseV8_tearOff(frame) { + return A.Frame_Frame$parseV8(A._asString(frame)); + }, + Frame_Frame$parseV8(frame) { + return A.Frame__catchFormatException(frame, new A.Frame_Frame$parseV8_closure(frame)); + }, + Frame_Frame$_parseFirefoxEval(frame) { + return A.Frame__catchFormatException(frame, new A.Frame_Frame$_parseFirefoxEval_closure(frame)); + }, + Frame___parseFirefox_tearOff(frame) { + return A.Frame_Frame$parseFirefox(A._asString(frame)); + }, + Frame_Frame$parseFirefox(frame) { + return A.Frame__catchFormatException(frame, new A.Frame_Frame$parseFirefox_closure(frame)); + }, + Frame___parseFriendly_tearOff(frame) { + return A.Frame_Frame$parseFriendly(A._asString(frame)); + }, + Frame_Frame$parseFriendly(frame) { + return A.Frame__catchFormatException(frame, new A.Frame_Frame$parseFriendly_closure(frame)); + }, + Frame__uriOrPathToUri(uriOrPath) { + if (B.JSString_methods.contains$1(uriOrPath, $.$get$Frame__uriRegExp())) + return A.Uri_parse(uriOrPath); + else if (B.JSString_methods.contains$1(uriOrPath, $.$get$Frame__windowsRegExp())) + return A._Uri__Uri$file(uriOrPath, true); + else if (B.JSString_methods.startsWith$1(uriOrPath, "/")) + return A._Uri__Uri$file(uriOrPath, false); + if (B.JSString_methods.contains$1(uriOrPath, "\\")) + return $.$get$windows().toUri$1(uriOrPath); + return A.Uri_parse(uriOrPath); + }, + Frame__catchFormatException(text, body) { + var t1, exception; + try { + t1 = body.call$0(); + return t1; + } catch (exception) { + if (A.unwrapException(exception) instanceof A.FormatException) + return new A.UnparsedFrame(A._Uri__Uri(null, "unparsed", null, null), text); + else + throw exception; + } + }, + Frame: function Frame(t0, t1, t2, t3) { + var _ = this; + _.uri = t0; + _.line = t1; + _.column = t2; + _.member = t3; + }, + Frame_Frame$parseVM_closure: function Frame_Frame$parseVM_closure(t0) { + this.frame = t0; + }, + Frame_Frame$parseV8_closure: function Frame_Frame$parseV8_closure(t0) { + this.frame = t0; + }, + Frame_Frame$parseV8_closure_parseJsLocation: function Frame_Frame$parseV8_closure_parseJsLocation(t0) { + this.frame = t0; + }, + Frame_Frame$_parseFirefoxEval_closure: function Frame_Frame$_parseFirefoxEval_closure(t0) { + this.frame = t0; + }, + Frame_Frame$parseFirefox_closure: function Frame_Frame$parseFirefox_closure(t0) { + this.frame = t0; + }, + Frame_Frame$parseFriendly_closure: function Frame_Frame$parseFriendly_closure(t0) { + this.frame = t0; + }, + LazyTrace: function LazyTrace(t0) { + this._thunk = t0; + this.__LazyTrace__trace_FI = $; + }, + Trace_Trace$from(trace) { + if (type$.Trace._is(trace)) + return trace; + if (trace instanceof A.Chain) + return trace.toTrace$0(); + return new A.LazyTrace(new A.Trace_Trace$from_closure(trace)); + }, + Trace_Trace$parse(trace) { + var error, t1, exception; + try { + if (trace.length === 0) { + t1 = A.Trace$(A._setArrayType([], type$.JSArray_Frame), null); + return t1; + } + if (B.JSString_methods.contains$1(trace, $.$get$_v8Trace())) { + t1 = A.Trace$parseV8(trace); + return t1; + } + if (B.JSString_methods.contains$1(trace, "\tat ")) { + t1 = A.Trace$parseJSCore(trace); + return t1; + } + if (B.JSString_methods.contains$1(trace, $.$get$_firefoxSafariTrace()) || B.JSString_methods.contains$1(trace, $.$get$_firefoxEvalTrace())) { + t1 = A.Trace$parseFirefox(trace); + return t1; + } + if (B.JSString_methods.contains$1(trace, string$.x3d_____)) { + t1 = A.Chain_Chain$parse(trace).toTrace$0(); + return t1; + } + if (B.JSString_methods.contains$1(trace, $.$get$_friendlyTrace())) { + t1 = A.Trace$parseFriendly(trace); + return t1; + } + t1 = A.Trace$parseVM(trace); + return t1; + } catch (exception) { + t1 = A.unwrapException(exception); + if (t1 instanceof A.FormatException) { + error = t1; + throw A.wrapException(A.FormatException$(error.message + "\nStack trace:\n" + trace, null, null)); + } else + throw exception; + } + }, + Trace___parseVM_tearOff(trace) { + return A.Trace$parseVM(A._asString(trace)); + }, + Trace$parseVM(trace) { + var t1 = A.List_List$unmodifiable(A.Trace__parseVM(trace), type$.Frame); + return new A.Trace(t1); + }, + Trace__parseVM(trace) { + var $frames, + t1 = B.JSString_methods.trim$0(trace), + t2 = $.$get$vmChainGap(), + t3 = type$.WhereIterable_String, + lines = new A.WhereIterable(A._setArrayType(A.stringReplaceAllUnchecked(t1, t2, "").split("\n"), type$.JSArray_String), type$.bool_Function_String._as(new A.Trace__parseVM_closure()), t3); + if (!lines.get$iterator(0).moveNext$0()) + return A._setArrayType([], type$.JSArray_Frame); + t1 = A.TakeIterable_TakeIterable(lines, lines.get$length(0) - 1, t3._eval$1("Iterable.E")); + t2 = A._instanceType(t1); + t2 = A.MappedIterable_MappedIterable(t1, t2._eval$1("Frame(Iterable.E)")._as(A.frame_Frame___parseVM_tearOff$closure()), t2._eval$1("Iterable.E"), type$.Frame); + $frames = A.List_List$_of(t2, A._instanceType(t2)._eval$1("Iterable.E")); + if (!B.JSString_methods.endsWith$1(lines.get$last(0), ".da")) + B.JSArray_methods.add$1($frames, A.Frame_Frame$parseVM(lines.get$last(0))); + return $frames; + }, + Trace$parseV8(trace) { + var t2, t3, + t1 = A.SubListIterable$(A._setArrayType(trace.split("\n"), type$.JSArray_String), 1, null, type$.String); + t1 = t1.super$Iterable$skipWhile(0, t1.$ti._eval$1("bool(ListIterable.E)")._as(new A.Trace$parseV8_closure())); + t2 = type$.Frame; + t3 = t1.$ti; + t2 = A.List_List$unmodifiable(A.MappedIterable_MappedIterable(t1, t3._eval$1("Frame(Iterable.E)")._as(A.frame_Frame___parseV8_tearOff$closure()), t3._eval$1("Iterable.E"), t2), t2); + return new A.Trace(t2); + }, + Trace$parseJSCore(trace) { + var t1 = A.List_List$unmodifiable(new A.MappedIterable(new A.WhereIterable(A._setArrayType(trace.split("\n"), type$.JSArray_String), type$.bool_Function_String._as(new A.Trace$parseJSCore_closure()), type$.WhereIterable_String), type$.Frame_Function_String._as(A.frame_Frame___parseV8_tearOff$closure()), type$.MappedIterable_String_Frame), type$.Frame); + return new A.Trace(t1); + }, + Trace$parseFirefox(trace) { + var t1 = A.List_List$unmodifiable(new A.MappedIterable(new A.WhereIterable(A._setArrayType(B.JSString_methods.trim$0(trace).split("\n"), type$.JSArray_String), type$.bool_Function_String._as(new A.Trace$parseFirefox_closure()), type$.WhereIterable_String), type$.Frame_Function_String._as(A.frame_Frame___parseFirefox_tearOff$closure()), type$.MappedIterable_String_Frame), type$.Frame); + return new A.Trace(t1); + }, + Trace___parseFriendly_tearOff(trace) { + return A.Trace$parseFriendly(A._asString(trace)); + }, + Trace$parseFriendly(trace) { + var t1 = trace.length === 0 ? A._setArrayType([], type$.JSArray_Frame) : new A.MappedIterable(new A.WhereIterable(A._setArrayType(B.JSString_methods.trim$0(trace).split("\n"), type$.JSArray_String), type$.bool_Function_String._as(new A.Trace$parseFriendly_closure()), type$.WhereIterable_String), type$.Frame_Function_String._as(A.frame_Frame___parseFriendly_tearOff$closure()), type$.MappedIterable_String_Frame); + t1 = A.List_List$unmodifiable(t1, type$.Frame); + return new A.Trace(t1); + }, + Trace$($frames, original) { + var t1 = A.List_List$unmodifiable($frames, type$.Frame); + return new A.Trace(t1); + }, + Trace: function Trace(t0) { + this.frames = t0; + }, + Trace_Trace$from_closure: function Trace_Trace$from_closure(t0) { + this.trace = t0; + }, + Trace__parseVM_closure: function Trace__parseVM_closure() { + }, + Trace$parseV8_closure: function Trace$parseV8_closure() { + }, + Trace$parseJSCore_closure: function Trace$parseJSCore_closure() { + }, + Trace$parseFirefox_closure: function Trace$parseFirefox_closure() { + }, + Trace$parseFriendly_closure: function Trace$parseFriendly_closure() { + }, + Trace_toString_closure0: function Trace_toString_closure0() { + }, + Trace_toString_closure: function Trace_toString_closure(t0) { + this.longest = t0; + }, + UnparsedFrame: function UnparsedFrame(t0, t1) { + this.uri = t0; + this.member = t1; + }, + CloseGuaranteeChannel: function CloseGuaranteeChannel(t0) { + var _ = this; + _.__CloseGuaranteeChannel__sink_F = _.__CloseGuaranteeChannel__stream_F = $; + _._close_guarantee_channel$_subscription = null; + _._disconnected = false; + _.$ti = t0; + }, + _CloseGuaranteeStream: function _CloseGuaranteeStream(t0, t1, t2) { + this._inner = t0; + this._channel = t1; + this.$ti = t2; + }, + _CloseGuaranteeSink: function _CloseGuaranteeSink(t0, t1, t2) { + this._channel = t0; + this._sink = t1; + this.$ti = t2; + }, + GuaranteeChannel$(innerStream, innerSink, allowSinkErrors, $T) { + var t2, t1 = {}; + t1.innerStream = innerStream; + t2 = new A.GuaranteeChannel($T._eval$1("GuaranteeChannel<0>")); + t2.GuaranteeChannel$3$allowSinkErrors(innerSink, true, t1, $T); + return t2; + }, + GuaranteeChannel: function GuaranteeChannel(t0) { + var _ = this; + _.__GuaranteeChannel__streamController_F = _.__GuaranteeChannel__sink_F = $; + _._guarantee_channel$_subscription = null; + _._guarantee_channel$_disconnected = false; + _.$ti = t0; + }, + GuaranteeChannel_closure: function GuaranteeChannel_closure(t0, t1, t2) { + this._box_0 = t0; + this.$this = t1; + this.T = t2; + }, + GuaranteeChannel__closure: function GuaranteeChannel__closure(t0) { + this.$this = t0; + }, + _GuaranteeSink: function _GuaranteeSink(t0, t1, t2, t3, t4) { + var _ = this; + _._guarantee_channel$_inner = t0; + _._guarantee_channel$_channel = t1; + _._doneCompleter = t2; + _._closed = _._guarantee_channel$_disconnected = false; + _._addStreamCompleter = _._addStreamSubscription = null; + _._allowErrors = t3; + _.$ti = t4; + }, + StreamChannelController: function StreamChannelController(t0) { + this.__StreamChannelController__foreign_F = this.__StreamChannelController__local_F = $; + this.$ti = t0; + }, + StreamChannelMixin: function StreamChannelMixin() { + }, + TypedDataBuffer: function TypedDataBuffer() { + }, + _IntBuffer: function _IntBuffer() { + }, + Uint8Buffer: function Uint8Buffer(t0, t1) { + this._typed_buffer$_buffer = t0; + this._typed_buffer$_length = t1; + }, + _EventStreamSubscription$(_target, _eventType, onData, _useCapture, $T) { + var t1; + if (onData == null) + t1 = null; + else { + t1 = A._wrapZone(new A._EventStreamSubscription_closure(onData), type$.JSObject); + t1 = t1 == null ? null : A._functionToJS1(t1); + } + t1 = new A._EventStreamSubscription(_target, _eventType, t1, false, $T._eval$1("_EventStreamSubscription<0>")); + t1._tryResume$0(); + return t1; + }, + _wrapZone(callback, $T) { + var t1 = $.Zone__current; + if (t1 === B.C__RootZone) + return callback; + return t1.bindUnaryCallbackGuarded$1$1(callback, $T); + }, + EventStreamProvider: function EventStreamProvider(t0, t1) { + this._eventType = t0; + this.$ti = t1; + }, + _EventStream: function _EventStream(t0, t1, t2, t3) { + var _ = this; + _._target = t0; + _._eventType = t1; + _._useCapture = t2; + _.$ti = t3; + }, + _EventStreamSubscription: function _EventStreamSubscription(t0, t1, t2, t3, t4) { + var _ = this; + _._pauseCount = 0; + _._target = t0; + _._eventType = t1; + _._onData = t2; + _._useCapture = t3; + _.$ti = t4; + }, + _EventStreamSubscription_closure: function _EventStreamSubscription_closure(t0) { + this.onData = t0; + }, + _EventStreamSubscription_onData_closure: function _EventStreamSubscription_onData_closure(t0) { + this.handleData = t0; + }, + printString(string) { + if (typeof dartPrint == "function") { + dartPrint(string); + return; + } + if (typeof console == "object" && typeof console.log != "undefined") { + console.log(string); + return; + } + if (typeof print == "function") { + print(string); + return; + } + throw "Unable to print message: " + String(string); + }, + JSObjectUnsafeUtilExtension__callMethod(_this, method, arg1, arg2, arg3, arg4) { + var t1; + if (arg1 == null) + return _this[method](); + else if (arg2 == null) + return _this[method](arg1); + else if (arg3 == null) + return _this[method](arg1, arg2); + else { + t1 = _this[method](arg1, arg2, arg3); + return t1; + } + }, + current() { + var exception, t1, path, lastIndex, uri = null; + try { + uri = A.Uri_base(); + } catch (exception) { + if (type$.Exception._is(A.unwrapException(exception))) { + t1 = $._current; + if (t1 != null) + return t1; + throw exception; + } else + throw exception; + } + if (J.$eq$(uri, $._currentUriBase)) { + t1 = $._current; + t1.toString; + return t1; + } + $._currentUriBase = uri; + if ($.$get$Style_platform() === $.$get$Style_url()) + t1 = $._current = uri.resolve$1(".").toString$0(0); + else { + path = uri.toFilePath$0(); + lastIndex = path.length - 1; + t1 = $._current = lastIndex === 0 ? path : B.JSString_methods.substring$2(path, 0, lastIndex); + } + return t1; + }, + isAlphabetic(char) { + var t1; + if (!(char >= 65 && char <= 90)) + t1 = char >= 97 && char <= 122; + else + t1 = true; + return t1; + }, + driveLetterEnd(path, index) { + var t2, t3, _null = null, + t1 = path.length, + index0 = index + 2; + if (t1 < index0) + return _null; + if (!(index >= 0 && index < t1)) + return A.ioore(path, index); + if (!A.isAlphabetic(path.charCodeAt(index))) + return _null; + t2 = index + 1; + if (!(t2 < t1)) + return A.ioore(path, t2); + if (path.charCodeAt(t2) !== 58) { + t3 = index + 4; + if (t1 < t3) + return _null; + if (B.JSString_methods.substring$2(path, t2, t3).toLowerCase() !== "%3a") + return _null; + index = index0; + } + t2 = index + 2; + if (t1 === t2) + return t2; + if (!(t2 >= 0 && t2 < t1)) + return A.ioore(path, t2); + if (path.charCodeAt(t2) !== 47) + return _null; + return index + 3; + }, + createExceptionRaw(bindings, db, returnCode, operation, previousStatement, statementArgs) { + var t5, _null = null, + t1 = db.bindings, + t2 = db.db, + t3 = t1.sqlite3, + extendedCode = A._asInt(t3.sqlite3_extended_errcode(t2)), + t4 = type$.nullable_JavaScriptFunction._as(t3.sqlite3_error_offset), + _0_0 = t4 == null ? _null : A._asInt(A._asDouble(t4.call(null, t2))); + if (_0_0 == null) + _0_0 = -1; + $label0$0: { + if (_0_0 < 0) { + t4 = _null; + break $label0$0; + } + t4 = _0_0; + break $label0$0; + } + t5 = bindings.bindings; + return new A.SqliteException(A.WrappedMemory_readString(t1.memory, A._asInt(t3.sqlite3_errmsg(t2)), _null), A.WrappedMemory_readString(t5.memory, A._asInt(t5.sqlite3.sqlite3_errstr(extendedCode)), _null) + " (code " + extendedCode + ")", returnCode, t4, operation, previousStatement, statementArgs); + }, + throwException(db, returnCode, operation, previousStatement, statementArgs) { + throw A.wrapException(A.createExceptionRaw(db.bindings, db.database, returnCode, operation, previousStatement, statementArgs)); + }, + BigIntRangeCheck_get_checkRange(_this) { + if (_this.compareTo$1(0, $.$get$bigIntMinValue64()) < 0 || _this.compareTo$1(0, $.$get$bigIntMaxValue64()) > 0) + throw A.wrapException(A.Exception_Exception("BigInt value exceeds the range of 64 bits")); + return _this; + }, + ReadDartValue_read(_this) { + var t4, $length, + t1 = _this.bindings, + t2 = _this.value, + t3 = t1.sqlite3, + _0_0 = A._asInt(t3.sqlite3_value_type(t2)); + $label0$0: { + t4 = null; + if (1 === _0_0) { + t1 = A._asInt(A._asDouble(init.G.Number(type$.JavaScriptBigInt._as(t3.sqlite3_value_int64(t2))))); + break $label0$0; + } + if (2 === _0_0) { + t1 = A._asDouble(t3.sqlite3_value_double(t2)); + break $label0$0; + } + if (3 === _0_0) { + $length = A._asInt(t3.sqlite3_value_bytes(t2)); + t1 = A.WrappedMemory_readString(t1.memory, A._asInt(t3.sqlite3_value_text(t2)), $length); + break $label0$0; + } + if (4 === _0_0) { + $length = A._asInt(t3.sqlite3_value_bytes(t2)); + t1 = A.WrappedMemory_copyRange(t1.memory, A._asInt(t3.sqlite3_value_blob(t2)), $length); + break $label0$0; + } + t1 = t4; + break $label0$0; + } + return t1; + }, + GenerateFilename_randomFileName(_this, prefix) { + var t1, i, t2, + _s61_ = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012346789"; + for (t1 = prefix, i = 0; i < 16; ++i, t1 = t2) { + t2 = _this.nextInt$1(61); + if (!(t2 < 61)) + return A.ioore(_s61_, t2); + t2 = t1 + A.Primitives_stringFromCharCode(_s61_.charCodeAt(t2)); + } + return t1.charCodeAt(0) == 0 ? t1 : t1; + }, + ReadBlob_byteBuffer(_this) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.ByteBuffer), + $async$returnValue; + var $async$ReadBlob_byteBuffer = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$goto = 3; + return A._asyncAwait(A.promiseToFuture(A._asJSObject(_this.arrayBuffer()), type$.NativeArrayBuffer), $async$ReadBlob_byteBuffer); + case 3: + // returning from await. + $async$returnValue = $async$result; + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$ReadBlob_byteBuffer, $async$completer); + }, + SharedArrayBuffer_asByteData(_this, offset, $length) { + var t1 = type$.JavaScriptFunction._as(init.G.DataView), + t2 = [_this]; + t2.push(offset); + t2.push($length); + return type$.NativeByteData._as(A.callConstructor(t1, t2, type$.JSObject)); + }, + SharedArrayBuffer_asUint8ListSlice(_this, offset, $length) { + var t1 = type$.JavaScriptFunction._as(init.G.Uint8Array), + t2 = [_this]; + t2.push(offset); + t2.push($length); + return type$.NativeUint8List._as(A.callConstructor(t1, t2, type$.JSObject)); + }, + Atomics_notify(typedArray, index) { + init.G.Atomics.notify(typedArray, index, 1 / 0); + }, + storageManager() { + var $navigator = A._asJSObject(init.G.navigator); + if ("storage" in $navigator) + return A._asJSObject($navigator.storage); + return null; + }, + FileSystemSyncAccessHandleApi_readDart(_this, buffer, options) { + var t1 = A._asInt(_this.read(buffer, options)); + return t1; + }, + FileSystemSyncAccessHandleApi_writeDart(_this, buffer, options) { + var t1 = A._asInt(_this.write(buffer, options)); + return t1; + }, + FileSystemDirectoryHandleApi_remove(_this, $name) { + return A.promiseToFuture(A._asJSObject(_this.removeEntry($name, {recursive: false})), type$.nullable_Object); + }, + main() { + var $self = init.G; + if (A.JSAnyUtilityExtension_instanceOfString($self, "DedicatedWorkerGlobalScope")) + new A.DedicatedDriftWorker($self, new A.Lock(), new A.DriftServerController(A.LinkedHashMap_LinkedHashMap$_empty(type$.String, type$.RunningWasmServer), null)).start$0(); + else if (A.JSAnyUtilityExtension_instanceOfString($self, "SharedWorkerGlobalScope")) + new A.SharedDriftWorker($self, new A.DriftServerController(A.LinkedHashMap_LinkedHashMap$_empty(type$.String, type$.RunningWasmServer), null)).start$0(); + } + }, + B = {}; + var holders = [A, J, B]; + var $ = {}; + A.JS_CONST.prototype = {}; + J.Interceptor.prototype = { + $eq(receiver, other) { + return receiver === other; + }, + get$hashCode(receiver) { + return A.Primitives_objectHashCode(receiver); + }, + toString$0(receiver) { + return "Instance of '" + A.Primitives_objectTypeName(receiver) + "'"; + }, + get$runtimeType(receiver) { + return A.createRuntimeType(A._instanceTypeFromConstructor(this)); + } + }; + J.JSBool.prototype = { + toString$0(receiver) { + return String(receiver); + }, + get$hashCode(receiver) { + return receiver ? 519018 : 218159; + }, + get$runtimeType(receiver) { + return A.createRuntimeType(type$.bool); + }, + $isTrustedGetRuntimeType: 1, + $isbool: 1 + }; + J.JSNull.prototype = { + $eq(receiver, other) { + return null == other; + }, + toString$0(receiver) { + return "null"; + }, + get$hashCode(receiver) { + return 0; + }, + $isTrustedGetRuntimeType: 1, + $isNull: 1 + }; + J.JavaScriptObject.prototype = {$isJSObject: 1}; + J.LegacyJavaScriptObject.prototype = { + get$hashCode(receiver) { + return 0; + }, + toString$0(receiver) { + return String(receiver); + } + }; + J.PlainJavaScriptObject.prototype = {}; + J.UnknownJavaScriptObject.prototype = {}; + J.JavaScriptFunction.prototype = { + toString$0(receiver) { + var dartClosure = receiver[$.$get$DART_CLOSURE_PROPERTY_NAME()]; + if (dartClosure == null) + return this.super$LegacyJavaScriptObject$toString(receiver); + return "JavaScript function for " + J.toString$0$(dartClosure); + }, + $isFunction: 1 + }; + J.JavaScriptBigInt.prototype = { + get$hashCode(receiver) { + return 0; + }, + toString$0(receiver) { + return String(receiver); + } + }; + J.JavaScriptSymbol.prototype = { + get$hashCode(receiver) { + return 0; + }, + toString$0(receiver) { + return String(receiver); + } + }; + J.JSArray.prototype = { + cast$1$0(receiver, $R) { + return new A.CastList(receiver, A._arrayInstanceType(receiver)._eval$1("@<1>")._bind$1($R)._eval$1("CastList<1,2>")); + }, + add$1(receiver, value) { + A._arrayInstanceType(receiver)._precomputed1._as(value); + receiver.$flags & 1 && A.throwUnsupportedOperation(receiver, 29); + receiver.push(value); + }, + removeAt$1(receiver, index) { + var t1; + receiver.$flags & 1 && A.throwUnsupportedOperation(receiver, "removeAt", 1); + t1 = receiver.length; + if (index >= t1) + throw A.wrapException(A.RangeError$value(index, null)); + return receiver.splice(index, 1)[0]; + }, + insert$2(receiver, index, value) { + var t1; + A._arrayInstanceType(receiver)._precomputed1._as(value); + receiver.$flags & 1 && A.throwUnsupportedOperation(receiver, "insert", 2); + t1 = receiver.length; + if (index > t1) + throw A.wrapException(A.RangeError$value(index, null)); + receiver.splice(index, 0, value); + }, + insertAll$2(receiver, index, iterable) { + var insertionLength, end; + A._arrayInstanceType(receiver)._eval$1("Iterable<1>")._as(iterable); + receiver.$flags & 1 && A.throwUnsupportedOperation(receiver, "insertAll", 2); + A.RangeError_checkValueInInterval(index, 0, receiver.length, "index"); + if (!type$.EfficientLengthIterable_dynamic._is(iterable)) + iterable = J.toList$0$ax(iterable); + insertionLength = J.get$length$asx(iterable); + receiver.length = receiver.length + insertionLength; + end = index + insertionLength; + this.setRange$4(receiver, end, receiver.length, receiver, index); + this.setRange$3(receiver, index, end, iterable); + }, + removeLast$0(receiver) { + receiver.$flags & 1 && A.throwUnsupportedOperation(receiver, "removeLast", 1); + if (receiver.length === 0) + throw A.wrapException(A.diagnoseIndexError(receiver, -1)); + return receiver.pop(); + }, + remove$1(receiver, element) { + var i; + receiver.$flags & 1 && A.throwUnsupportedOperation(receiver, "remove", 1); + for (i = 0; i < receiver.length; ++i) + if (J.$eq$(receiver[i], element)) { + receiver.splice(i, 1); + return true; + } + return false; + }, + addAll$1(receiver, collection) { + var t1; + A._arrayInstanceType(receiver)._eval$1("Iterable<1>")._as(collection); + receiver.$flags & 1 && A.throwUnsupportedOperation(receiver, "addAll", 2); + if (Array.isArray(collection)) { + this._addAllFromArray$1(receiver, collection); + return; + } + for (t1 = J.get$iterator$ax(collection); t1.moveNext$0();) + receiver.push(t1.get$current()); + }, + _addAllFromArray$1(receiver, array) { + var len, i; + type$.JSArray_dynamic._as(array); + len = array.length; + if (len === 0) + return; + if (receiver === array) + throw A.wrapException(A.ConcurrentModificationError$(receiver)); + for (i = 0; i < len; ++i) + receiver.push(array[i]); + }, + clear$0(receiver) { + receiver.$flags & 1 && A.throwUnsupportedOperation(receiver, "clear", "clear"); + receiver.length = 0; + }, + forEach$1(receiver, f) { + var end, i; + A._arrayInstanceType(receiver)._eval$1("~(1)")._as(f); + end = receiver.length; + for (i = 0; i < end; ++i) { + f.call$1(receiver[i]); + if (receiver.length !== end) + throw A.wrapException(A.ConcurrentModificationError$(receiver)); + } + }, + map$1$1(receiver, f, $T) { + var t1 = A._arrayInstanceType(receiver); + return new A.MappedListIterable(receiver, t1._bind$1($T)._eval$1("1(2)")._as(f), t1._eval$1("@<1>")._bind$1($T)._eval$1("MappedListIterable<1,2>")); + }, + join$1(receiver, separator) { + var i, + list = A.List_List$filled(receiver.length, "", false, type$.String); + for (i = 0; i < receiver.length; ++i) + this.$indexSet(list, i, A.S(receiver[i])); + return list.join(separator); + }, + join$0(receiver) { + return this.join$1(receiver, ""); + }, + take$1(receiver, n) { + return A.SubListIterable$(receiver, 0, A.checkNotNullable(n, "count", type$.int), A._arrayInstanceType(receiver)._precomputed1); + }, + skip$1(receiver, n) { + return A.SubListIterable$(receiver, n, null, A._arrayInstanceType(receiver)._precomputed1); + }, + elementAt$1(receiver, index) { + if (!(index >= 0 && index < receiver.length)) + return A.ioore(receiver, index); + return receiver[index]; + }, + sublist$2(receiver, start, end) { + var t1 = receiver.length; + if (start > t1) + throw A.wrapException(A.RangeError$range(start, 0, t1, "start", null)); + if (end < start || end > t1) + throw A.wrapException(A.RangeError$range(end, start, t1, "end", null)); + if (start === end) + return A._setArrayType([], A._arrayInstanceType(receiver)); + return A._setArrayType(receiver.slice(start, end), A._arrayInstanceType(receiver)); + }, + getRange$2(receiver, start, end) { + A.RangeError_checkValidRange(start, end, receiver.length); + return A.SubListIterable$(receiver, start, end, A._arrayInstanceType(receiver)._precomputed1); + }, + get$first(receiver) { + if (receiver.length > 0) + return receiver[0]; + throw A.wrapException(A.IterableElementError_noElement()); + }, + get$last(receiver) { + var t1 = receiver.length; + if (t1 > 0) + return receiver[t1 - 1]; + throw A.wrapException(A.IterableElementError_noElement()); + }, + setRange$4(receiver, start, end, iterable, skipCount) { + var $length, otherList, otherStart, t1, i; + A._arrayInstanceType(receiver)._eval$1("Iterable<1>")._as(iterable); + receiver.$flags & 2 && A.throwUnsupportedOperation(receiver, 5); + A.RangeError_checkValidRange(start, end, receiver.length); + $length = end - start; + if ($length === 0) + return; + A.RangeError_checkNotNegative(skipCount, "skipCount"); + if (type$.List_dynamic._is(iterable)) { + otherList = iterable; + otherStart = skipCount; + } else { + otherList = J.skip$1$ax(iterable, skipCount).toList$1$growable(0, false); + otherStart = 0; + } + t1 = J.getInterceptor$asx(otherList); + if (otherStart + $length > t1.get$length(otherList)) + throw A.wrapException(A.IterableElementError_tooFew()); + if (otherStart < start) + for (i = $length - 1; i >= 0; --i) + receiver[start + i] = t1.$index(otherList, otherStart + i); + else + for (i = 0; i < $length; ++i) + receiver[start + i] = t1.$index(otherList, otherStart + i); + }, + setRange$3(receiver, start, end, iterable) { + return this.setRange$4(receiver, start, end, iterable, 0); + }, + sort$1(receiver, compare) { + var len, a, b, undefineds, i, + t1 = A._arrayInstanceType(receiver); + t1._eval$1("int(1,1)?")._as(compare); + receiver.$flags & 2 && A.throwUnsupportedOperation(receiver, "sort"); + len = receiver.length; + if (len < 2) + return; + if (compare == null) + compare = J._interceptors_JSArray__compareAny$closure(); + if (len === 2) { + a = receiver[0]; + b = receiver[1]; + t1 = compare.call$2(a, b); + if (typeof t1 !== "number") + return t1.$gt(); + if (t1 > 0) { + receiver[0] = b; + receiver[1] = a; + } + return; + } + undefineds = 0; + if (t1._precomputed1._is(null)) + for (i = 0; i < receiver.length; ++i) + if (receiver[i] === void 0) { + receiver[i] = null; + ++undefineds; + } + receiver.sort(A.convertDartClosureToJS(compare, 2)); + if (undefineds > 0) + this._replaceSomeNullsWithUndefined$1(receiver, undefineds); + }, + sort$0(receiver) { + return this.sort$1(receiver, null); + }, + _replaceSomeNullsWithUndefined$1(receiver, count) { + var i0, + i = receiver.length; + for (; i0 = i - 1, i > 0; i = i0) + if (receiver[i0] === null) { + receiver[i0] = void 0; + --count; + if (count === 0) + break; + } + }, + lastIndexOf$1(receiver, element) { + var i, + t1 = receiver.length, + start = t1 - 1; + if (start < 0) + return -1; + start < t1; + for (i = start; i >= 0; --i) { + if (!(i < receiver.length)) + return A.ioore(receiver, i); + if (J.$eq$(receiver[i], element)) + return i; + } + return -1; + }, + get$isEmpty(receiver) { + return receiver.length === 0; + }, + toString$0(receiver) { + return A.Iterable_iterableToFullString(receiver, "[", "]"); + }, + toList$1$growable(receiver, growable) { + var t1 = A._setArrayType(receiver.slice(0), A._arrayInstanceType(receiver)); + return t1; + }, + toList$0(receiver) { + return this.toList$1$growable(receiver, true); + }, + get$iterator(receiver) { + return new J.ArrayIterator(receiver, receiver.length, A._arrayInstanceType(receiver)._eval$1("ArrayIterator<1>")); + }, + get$hashCode(receiver) { + return A.Primitives_objectHashCode(receiver); + }, + get$length(receiver) { + return receiver.length; + }, + $index(receiver, index) { + if (!(index >= 0 && index < receiver.length)) + throw A.wrapException(A.diagnoseIndexError(receiver, index)); + return receiver[index]; + }, + $indexSet(receiver, index, value) { + A._arrayInstanceType(receiver)._precomputed1._as(value); + receiver.$flags & 2 && A.throwUnsupportedOperation(receiver); + if (!(index >= 0 && index < receiver.length)) + throw A.wrapException(A.diagnoseIndexError(receiver, index)); + receiver[index] = value; + }, + $isJSIndexable: 1, + $isEfficientLengthIterable: 1, + $isIterable: 1, + $isList: 1 + }; + J.JSArraySafeToStringHook.prototype = { + tryFormat$1(array) { + var flags, info, base; + if (!Array.isArray(array)) + return null; + flags = array.$flags | 0; + if ((flags & 4) !== 0) + info = "const, "; + else if ((flags & 2) !== 0) + info = "unmodifiable, "; + else + info = (flags & 1) !== 0 ? "fixed, " : ""; + base = "Instance of '" + A.Primitives_objectTypeName(array) + "'"; + if (info === "") + return base; + return base + " (" + info + "length: " + array.length + ")"; + } + }; + J.JSUnmodifiableArray.prototype = {}; + J.ArrayIterator.prototype = { + get$current() { + var t1 = this._current; + return t1 == null ? this.$ti._precomputed1._as(t1) : t1; + }, + moveNext$0() { + var t2, _this = this, + t1 = _this._iterable, + $length = t1.length; + if (_this._length !== $length) { + t1 = A.throwConcurrentModificationError(t1); + throw A.wrapException(t1); + } + t2 = _this._index; + if (t2 >= $length) { + _this._current = null; + return false; + } + _this._current = t1[t2]; + _this._index = t2 + 1; + return true; + }, + $isIterator: 1 + }; + J.JSNumber.prototype = { + compareTo$1(receiver, b) { + var bIsNegative; + A._asNum(b); + if (receiver < b) + return -1; + else if (receiver > b) + return 1; + else if (receiver === b) { + if (receiver === 0) { + bIsNegative = this.get$isNegative(b); + if (this.get$isNegative(receiver) === bIsNegative) + return 0; + if (this.get$isNegative(receiver)) + return -1; + return 1; + } + return 0; + } else if (isNaN(receiver)) { + if (isNaN(b)) + return 0; + return 1; + } else + return -1; + }, + get$isNegative(receiver) { + return receiver === 0 ? 1 / receiver < 0 : receiver < 0; + }, + toInt$0(receiver) { + var t1; + if (receiver >= -2147483648 && receiver <= 2147483647) + return receiver | 0; + if (isFinite(receiver)) { + t1 = receiver < 0 ? Math.ceil(receiver) : Math.floor(receiver); + return t1 + 0; + } + throw A.wrapException(A.UnsupportedError$("" + receiver + ".toInt()")); + }, + ceil$0(receiver) { + var truncated, d; + if (receiver >= 0) { + if (receiver <= 2147483647) { + truncated = receiver | 0; + return receiver === truncated ? truncated : truncated + 1; + } + } else if (receiver >= -2147483648) + return receiver | 0; + d = Math.ceil(receiver); + if (isFinite(d)) + return d; + throw A.wrapException(A.UnsupportedError$("" + receiver + ".ceil()")); + }, + toString$0(receiver) { + if (receiver === 0 && 1 / receiver < 0) + return "-0.0"; + else + return "" + receiver; + }, + get$hashCode(receiver) { + var absolute, floorLog2, factor, scaled, + intValue = receiver | 0; + if (receiver === intValue) + return intValue & 536870911; + absolute = Math.abs(receiver); + floorLog2 = Math.log(absolute) / 0.6931471805599453 | 0; + factor = Math.pow(2, floorLog2); + scaled = absolute < 1 ? absolute / factor : factor / absolute; + return ((scaled * 9007199254740992 | 0) + (scaled * 3542243181176521 | 0)) * 599197 + floorLog2 * 1259 & 536870911; + }, + $mod(receiver, other) { + var result = receiver % other; + if (result === 0) + return 0; + if (result > 0) + return result; + return result + other; + }, + $tdiv(receiver, other) { + if ((receiver | 0) === receiver) + if (other >= 1 || other < -1) + return receiver / other | 0; + return this._tdivSlow$1(receiver, other); + }, + _tdivFast$1(receiver, other) { + return (receiver | 0) === receiver ? receiver / other | 0 : this._tdivSlow$1(receiver, other); + }, + _tdivSlow$1(receiver, other) { + var quotient = receiver / other; + if (quotient >= -2147483648 && quotient <= 2147483647) + return quotient | 0; + if (quotient > 0) { + if (quotient !== 1 / 0) + return Math.floor(quotient); + } else if (quotient > -1 / 0) + return Math.ceil(quotient); + throw A.wrapException(A.UnsupportedError$("Result of truncating division is " + A.S(quotient) + ": " + A.S(receiver) + " ~/ " + other)); + }, + $shl(receiver, other) { + if (other < 0) + throw A.wrapException(A.argumentErrorValue(other)); + return other > 31 ? 0 : receiver << other >>> 0; + }, + $shr(receiver, other) { + var t1; + if (other < 0) + throw A.wrapException(A.argumentErrorValue(other)); + if (receiver > 0) + t1 = this._shrBothPositive$1(receiver, other); + else { + t1 = other > 31 ? 31 : other; + t1 = receiver >> t1 >>> 0; + } + return t1; + }, + _shrOtherPositive$1(receiver, other) { + var t1; + if (receiver > 0) + t1 = this._shrBothPositive$1(receiver, other); + else { + t1 = other > 31 ? 31 : other; + t1 = receiver >> t1 >>> 0; + } + return t1; + }, + _shrReceiverPositive$1(receiver, other) { + if (0 > other) + throw A.wrapException(A.argumentErrorValue(other)); + return this._shrBothPositive$1(receiver, other); + }, + _shrBothPositive$1(receiver, other) { + return other > 31 ? 0 : receiver >>> other; + }, + get$runtimeType(receiver) { + return A.createRuntimeType(type$.num); + }, + $isComparable: 1, + $isdouble: 1, + $isnum: 1 + }; + J.JSInt.prototype = { + get$bitLength(receiver) { + var wordBits, + t1 = receiver < 0 ? -receiver - 1 : receiver, + nonneg = t1; + for (wordBits = 32; nonneg >= 4294967296;) { + nonneg = this._tdivFast$1(nonneg, 4294967296); + wordBits += 32; + } + return wordBits - Math.clz32(nonneg); + }, + get$runtimeType(receiver) { + return A.createRuntimeType(type$.int); + }, + $isTrustedGetRuntimeType: 1, + $isint: 1 + }; + J.JSNumNotInt.prototype = { + get$runtimeType(receiver) { + return A.createRuntimeType(type$.double); + }, + $isTrustedGetRuntimeType: 1 + }; + J.JSString.prototype = { + codeUnitAt$1(receiver, index) { + if (index < 0) + throw A.wrapException(A.diagnoseIndexError(receiver, index)); + if (index >= receiver.length) + A.throwExpression(A.diagnoseIndexError(receiver, index)); + return receiver.charCodeAt(index); + }, + allMatches$2(receiver, string, start) { + var t1 = string.length; + if (start > t1) + throw A.wrapException(A.RangeError$range(start, 0, t1, null, null)); + return new A._StringAllMatchesIterable(string, receiver, start); + }, + allMatches$1(receiver, string) { + return this.allMatches$2(receiver, string, 0); + }, + matchAsPrefix$2(receiver, string, start) { + var t1, t2, i, t3, _null = null; + if (start < 0 || start > string.length) + throw A.wrapException(A.RangeError$range(start, 0, string.length, _null, _null)); + t1 = receiver.length; + t2 = string.length; + if (start + t1 > t2) + return _null; + for (i = 0; i < t1; ++i) { + t3 = start + i; + if (!(t3 >= 0 && t3 < t2)) + return A.ioore(string, t3); + if (string.charCodeAt(t3) !== receiver.charCodeAt(i)) + return _null; + } + return new A.StringMatch(start, receiver); + }, + endsWith$1(receiver, other) { + var otherLength = other.length, + t1 = receiver.length; + if (otherLength > t1) + return false; + return other === this.substring$1(receiver, t1 - otherLength); + }, + replaceFirst$2(receiver, from, to) { + A.RangeError_checkValueInInterval(0, 0, receiver.length, "startIndex"); + return A.stringReplaceFirstUnchecked(receiver, from, to, 0); + }, + split$1(receiver, pattern) { + var t1; + if (typeof pattern == "string") + return A._setArrayType(receiver.split(pattern), type$.JSArray_String); + else { + if (pattern instanceof A.JSSyntaxRegExp) { + t1 = pattern._hasCapturesCache; + t1 = !(t1 == null ? pattern._hasCapturesCache = pattern._computeHasCaptures$0() : t1); + } else + t1 = false; + if (t1) + return A._setArrayType(receiver.split(pattern._nativeRegExp), type$.JSArray_String); + else + return this._defaultSplit$1(receiver, pattern); + } + }, + replaceRange$3(receiver, start, end, replacement) { + var e = A.RangeError_checkValidRange(start, end, receiver.length); + return A.stringReplaceRangeUnchecked(receiver, start, e, replacement); + }, + _defaultSplit$1(receiver, pattern) { + var t1, start, $length, match, matchStart, matchEnd, + result = A._setArrayType([], type$.JSArray_String); + for (t1 = J.allMatches$1$s(pattern, receiver), t1 = t1.get$iterator(t1), start = 0, $length = 1; t1.moveNext$0();) { + match = t1.get$current(); + matchStart = match.get$start(); + matchEnd = match.get$end(); + $length = matchEnd - matchStart; + if ($length === 0 && start === matchStart) + continue; + B.JSArray_methods.add$1(result, this.substring$2(receiver, start, matchStart)); + start = matchEnd; + } + if (start < receiver.length || $length > 0) + B.JSArray_methods.add$1(result, this.substring$1(receiver, start)); + return result; + }, + startsWith$2(receiver, pattern, index) { + var endIndex; + if (index < 0 || index > receiver.length) + throw A.wrapException(A.RangeError$range(index, 0, receiver.length, null, null)); + if (typeof pattern == "string") { + endIndex = index + pattern.length; + if (endIndex > receiver.length) + return false; + return pattern === receiver.substring(index, endIndex); + } + return J.matchAsPrefix$2$s(pattern, receiver, index) != null; + }, + startsWith$1(receiver, pattern) { + return this.startsWith$2(receiver, pattern, 0); + }, + substring$2(receiver, start, end) { + return receiver.substring(start, A.RangeError_checkValidRange(start, end, receiver.length)); + }, + substring$1(receiver, start) { + return this.substring$2(receiver, start, null); + }, + trim$0(receiver) { + var startIndex, t1, endIndex0, + result = receiver.trim(), + endIndex = result.length; + if (endIndex === 0) + return result; + if (0 >= endIndex) + return A.ioore(result, 0); + if (result.charCodeAt(0) === 133) { + startIndex = J.JSString__skipLeadingWhitespace(result, 1); + if (startIndex === endIndex) + return ""; + } else + startIndex = 0; + t1 = endIndex - 1; + if (!(t1 >= 0)) + return A.ioore(result, t1); + endIndex0 = result.charCodeAt(t1) === 133 ? J.JSString__skipTrailingWhitespace(result, t1) : endIndex; + if (startIndex === 0 && endIndex0 === endIndex) + return result; + return result.substring(startIndex, endIndex0); + }, + $mul(receiver, times) { + var s, result; + if (0 >= times) + return ""; + if (times === 1 || receiver.length === 0) + return receiver; + if (times !== times >>> 0) + throw A.wrapException(B.C_OutOfMemoryError); + for (s = receiver, result = "";;) { + if ((times & 1) === 1) + result = s + result; + times = times >>> 1; + if (times === 0) + break; + s += s; + } + return result; + }, + padLeft$2(receiver, width, padding) { + var delta = width - receiver.length; + if (delta <= 0) + return receiver; + return this.$mul(padding, delta) + receiver; + }, + padRight$1(receiver, width) { + var delta = width - receiver.length; + if (delta <= 0) + return receiver; + return receiver + this.$mul(" ", delta); + }, + indexOf$2(receiver, pattern, start) { + var t1; + if (start < 0 || start > receiver.length) + throw A.wrapException(A.RangeError$range(start, 0, receiver.length, null, null)); + t1 = receiver.indexOf(pattern, start); + return t1; + }, + indexOf$1(receiver, pattern) { + return this.indexOf$2(receiver, pattern, 0); + }, + lastIndexOf$2(receiver, pattern, start) { + var t1, t2; + if (start == null) + start = receiver.length; + else if (start < 0 || start > receiver.length) + throw A.wrapException(A.RangeError$range(start, 0, receiver.length, null, null)); + t1 = pattern.length; + t2 = receiver.length; + if (start + t1 > t2) + start = t2 - t1; + return receiver.lastIndexOf(pattern, start); + }, + lastIndexOf$1(receiver, pattern) { + return this.lastIndexOf$2(receiver, pattern, null); + }, + contains$1(receiver, other) { + return A.stringContainsUnchecked(receiver, other, 0); + }, + compareTo$1(receiver, other) { + var t1; + A._asString(other); + if (receiver === other) + t1 = 0; + else + t1 = receiver < other ? -1 : 1; + return t1; + }, + toString$0(receiver) { + return receiver; + }, + get$hashCode(receiver) { + var t1, hash, i; + for (t1 = receiver.length, hash = 0, i = 0; i < t1; ++i) { + hash = hash + receiver.charCodeAt(i) & 536870911; + hash = hash + ((hash & 524287) << 10) & 536870911; + hash ^= hash >> 6; + } + hash = hash + ((hash & 67108863) << 3) & 536870911; + hash ^= hash >> 11; + return hash + ((hash & 16383) << 15) & 536870911; + }, + get$runtimeType(receiver) { + return A.createRuntimeType(type$.String); + }, + get$length(receiver) { + return receiver.length; + }, + $index(receiver, index) { + if (!(index >= 0 && index < receiver.length)) + throw A.wrapException(A.diagnoseIndexError(receiver, index)); + return receiver[index]; + }, + $isJSIndexable: 1, + $isTrustedGetRuntimeType: 1, + $isComparable: 1, + $isPattern: 1, + $isString: 1 + }; + A._CastIterableBase.prototype = { + get$iterator(_) { + return new A.CastIterator(J.get$iterator$ax(this.get$_source()), A._instanceType(this)._eval$1("CastIterator<1,2>")); + }, + get$length(_) { + return J.get$length$asx(this.get$_source()); + }, + get$isEmpty(_) { + return J.get$isEmpty$asx(this.get$_source()); + }, + skip$1(_, count) { + var t1 = A._instanceType(this); + return A.CastIterable_CastIterable(J.skip$1$ax(this.get$_source(), count), t1._precomputed1, t1._rest[1]); + }, + take$1(_, count) { + var t1 = A._instanceType(this); + return A.CastIterable_CastIterable(J.take$1$ax(this.get$_source(), count), t1._precomputed1, t1._rest[1]); + }, + elementAt$1(_, index) { + return A._instanceType(this)._rest[1]._as(J.elementAt$1$ax(this.get$_source(), index)); + }, + get$first(_) { + return A._instanceType(this)._rest[1]._as(J.get$first$ax(this.get$_source())); + }, + get$last(_) { + return A._instanceType(this)._rest[1]._as(J.get$last$ax(this.get$_source())); + }, + toString$0(_) { + return J.toString$0$(this.get$_source()); + } + }; + A.CastIterator.prototype = { + moveNext$0() { + return this._source.moveNext$0(); + }, + get$current() { + return this.$ti._rest[1]._as(this._source.get$current()); + }, + $isIterator: 1 + }; + A.CastIterable.prototype = { + get$_source() { + return this._source; + } + }; + A._EfficientLengthCastIterable.prototype = {$isEfficientLengthIterable: 1}; + A._CastListBase.prototype = { + $index(_, index) { + return this.$ti._rest[1]._as(J.$index$asx(this._source, index)); + }, + $indexSet(_, index, value) { + var t1 = this.$ti; + J.$indexSet$ax(this._source, index, t1._precomputed1._as(t1._rest[1]._as(value))); + }, + getRange$2(_, start, end) { + var t1 = this.$ti; + return A.CastIterable_CastIterable(J.getRange$2$ax(this._source, start, end), t1._precomputed1, t1._rest[1]); + }, + setRange$4(_, start, end, iterable, skipCount) { + var t1 = this.$ti; + J.setRange$4$ax(this._source, start, end, A.CastIterable_CastIterable(t1._eval$1("Iterable<2>")._as(iterable), t1._rest[1], t1._precomputed1), skipCount); + }, + setRange$3(_, start, end, iterable) { + return this.setRange$4(0, start, end, iterable, 0); + }, + $isEfficientLengthIterable: 1, + $isList: 1 + }; + A.CastList.prototype = { + cast$1$0(_, $R) { + return new A.CastList(this._source, this.$ti._eval$1("@<1>")._bind$1($R)._eval$1("CastList<1,2>")); + }, + get$_source() { + return this._source; + } + }; + A.LateError.prototype = { + toString$0(_) { + return "LateInitializationError: " + this.__internal$_message; + } + }; + A.CodeUnits.prototype = { + get$length(_) { + return this._string.length; + }, + $index(_, i) { + var t1 = this._string; + if (!(i >= 0 && i < t1.length)) + return A.ioore(t1, i); + return t1.charCodeAt(i); + } + }; + A.nullFuture_closure.prototype = { + call$0() { + return A.Future_Future$value(null, type$.void); + }, + $signature: 2 + }; + A.SentinelValue.prototype = {}; + A.EfficientLengthIterable.prototype = {}; + A.ListIterable.prototype = { + get$iterator(_) { + var _this = this; + return new A.ListIterator(_this, _this.get$length(_this), A._instanceType(_this)._eval$1("ListIterator")); + }, + get$isEmpty(_) { + return this.get$length(this) === 0; + }, + get$first(_) { + if (this.get$length(this) === 0) + throw A.wrapException(A.IterableElementError_noElement()); + return this.elementAt$1(0, 0); + }, + get$last(_) { + var _this = this; + if (_this.get$length(_this) === 0) + throw A.wrapException(A.IterableElementError_noElement()); + return _this.elementAt$1(0, _this.get$length(_this) - 1); + }, + join$1(_, separator) { + var first, t1, i, _this = this, + $length = _this.get$length(_this); + if (separator.length !== 0) { + if ($length === 0) + return ""; + first = A.S(_this.elementAt$1(0, 0)); + if ($length !== _this.get$length(_this)) + throw A.wrapException(A.ConcurrentModificationError$(_this)); + for (t1 = first, i = 1; i < $length; ++i) { + t1 = t1 + separator + A.S(_this.elementAt$1(0, i)); + if ($length !== _this.get$length(_this)) + throw A.wrapException(A.ConcurrentModificationError$(_this)); + } + return t1.charCodeAt(0) == 0 ? t1 : t1; + } else { + for (i = 0, t1 = ""; i < $length; ++i) { + t1 += A.S(_this.elementAt$1(0, i)); + if ($length !== _this.get$length(_this)) + throw A.wrapException(A.ConcurrentModificationError$(_this)); + } + return t1.charCodeAt(0) == 0 ? t1 : t1; + } + }, + join$0(_) { + return this.join$1(0, ""); + }, + map$1$1(_, toElement, $T) { + var t1 = A._instanceType(this); + return new A.MappedListIterable(this, t1._bind$1($T)._eval$1("1(ListIterable.E)")._as(toElement), t1._eval$1("@")._bind$1($T)._eval$1("MappedListIterable<1,2>")); + }, + fold$1$2(_, initialValue, combine, $T) { + var $length, value, i, _this = this; + $T._as(initialValue); + A._instanceType(_this)._bind$1($T)._eval$1("1(1,ListIterable.E)")._as(combine); + $length = _this.get$length(_this); + for (value = initialValue, i = 0; i < $length; ++i) { + value = combine.call$2(value, _this.elementAt$1(0, i)); + if ($length !== _this.get$length(_this)) + throw A.wrapException(A.ConcurrentModificationError$(_this)); + } + return value; + }, + skip$1(_, count) { + return A.SubListIterable$(this, count, null, A._instanceType(this)._eval$1("ListIterable.E")); + }, + take$1(_, count) { + return A.SubListIterable$(this, 0, A.checkNotNullable(count, "count", type$.int), A._instanceType(this)._eval$1("ListIterable.E")); + }, + toList$1$growable(_, growable) { + var t1 = A.List_List$_of(this, A._instanceType(this)._eval$1("ListIterable.E")); + return t1; + }, + toList$0(_) { + return this.toList$1$growable(0, true); + } + }; + A.SubListIterable.prototype = { + SubListIterable$3(_iterable, _start, _endOrLength, $E) { + var endOrLength, + t1 = this._start; + A.RangeError_checkNotNegative(t1, "start"); + endOrLength = this._endOrLength; + if (endOrLength != null) { + A.RangeError_checkNotNegative(endOrLength, "end"); + if (t1 > endOrLength) + throw A.wrapException(A.RangeError$range(t1, 0, endOrLength, "start", null)); + } + }, + get$_endIndex() { + var $length = J.get$length$asx(this.__internal$_iterable), + endOrLength = this._endOrLength; + if (endOrLength == null || endOrLength > $length) + return $length; + return endOrLength; + }, + get$_startIndex() { + var $length = J.get$length$asx(this.__internal$_iterable), + t1 = this._start; + if (t1 > $length) + return $length; + return t1; + }, + get$length(_) { + var endOrLength, + $length = J.get$length$asx(this.__internal$_iterable), + t1 = this._start; + if (t1 >= $length) + return 0; + endOrLength = this._endOrLength; + if (endOrLength == null || endOrLength >= $length) + return $length - t1; + return endOrLength - t1; + }, + elementAt$1(_, index) { + var _this = this, + realIndex = _this.get$_startIndex() + index; + if (index < 0 || realIndex >= _this.get$_endIndex()) + throw A.wrapException(A.IndexError$withLength(index, _this.get$length(0), _this, null, "index")); + return J.elementAt$1$ax(_this.__internal$_iterable, realIndex); + }, + skip$1(_, count) { + var newStart, endOrLength, _this = this; + A.RangeError_checkNotNegative(count, "count"); + newStart = _this._start + count; + endOrLength = _this._endOrLength; + if (endOrLength != null && newStart >= endOrLength) + return new A.EmptyIterable(_this.$ti._eval$1("EmptyIterable<1>")); + return A.SubListIterable$(_this.__internal$_iterable, newStart, endOrLength, _this.$ti._precomputed1); + }, + take$1(_, count) { + var endOrLength, t1, newEnd, _this = this; + A.RangeError_checkNotNegative(count, "count"); + endOrLength = _this._endOrLength; + t1 = _this._start; + newEnd = t1 + count; + if (endOrLength == null) + return A.SubListIterable$(_this.__internal$_iterable, t1, newEnd, _this.$ti._precomputed1); + else { + if (endOrLength < newEnd) + return _this; + return A.SubListIterable$(_this.__internal$_iterable, t1, newEnd, _this.$ti._precomputed1); + } + }, + toList$1$growable(_, growable) { + var $length, result, i, _this = this, + start = _this._start, + t1 = _this.__internal$_iterable, + t2 = J.getInterceptor$asx(t1), + end = t2.get$length(t1), + endOrLength = _this._endOrLength; + if (endOrLength != null && endOrLength < end) + end = endOrLength; + $length = end - start; + if ($length <= 0) { + t1 = J.JSArray_JSArray$fixed(0, _this.$ti._precomputed1); + return t1; + } + result = A.List_List$filled($length, t2.elementAt$1(t1, start), false, _this.$ti._precomputed1); + for (i = 1; i < $length; ++i) { + B.JSArray_methods.$indexSet(result, i, t2.elementAt$1(t1, start + i)); + if (t2.get$length(t1) < end) + throw A.wrapException(A.ConcurrentModificationError$(_this)); + } + return result; + } + }; + A.ListIterator.prototype = { + get$current() { + var t1 = this.__internal$_current; + return t1 == null ? this.$ti._precomputed1._as(t1) : t1; + }, + moveNext$0() { + var t3, _this = this, + t1 = _this.__internal$_iterable, + t2 = J.getInterceptor$asx(t1), + $length = t2.get$length(t1); + if (_this.__internal$_length !== $length) + throw A.wrapException(A.ConcurrentModificationError$(t1)); + t3 = _this.__internal$_index; + if (t3 >= $length) { + _this.__internal$_current = null; + return false; + } + _this.__internal$_current = t2.elementAt$1(t1, t3); + ++_this.__internal$_index; + return true; + }, + $isIterator: 1 + }; + A.MappedIterable.prototype = { + get$iterator(_) { + var t1 = this.__internal$_iterable; + return new A.MappedIterator(t1.get$iterator(t1), this._f, A._instanceType(this)._eval$1("MappedIterator<1,2>")); + }, + get$length(_) { + var t1 = this.__internal$_iterable; + return t1.get$length(t1); + }, + get$isEmpty(_) { + var t1 = this.__internal$_iterable; + return t1.get$isEmpty(t1); + }, + get$first(_) { + var t1 = this.__internal$_iterable; + return this._f.call$1(t1.get$first(t1)); + }, + get$last(_) { + var t1 = this.__internal$_iterable; + return this._f.call$1(t1.get$last(t1)); + }, + elementAt$1(_, index) { + var t1 = this.__internal$_iterable; + return this._f.call$1(t1.elementAt$1(t1, index)); + } + }; + A.EfficientLengthMappedIterable.prototype = {$isEfficientLengthIterable: 1}; + A.MappedIterator.prototype = { + moveNext$0() { + var _this = this, + t1 = _this._iterator; + if (t1.moveNext$0()) { + _this.__internal$_current = _this._f.call$1(t1.get$current()); + return true; + } + _this.__internal$_current = null; + return false; + }, + get$current() { + var t1 = this.__internal$_current; + return t1 == null ? this.$ti._rest[1]._as(t1) : t1; + }, + $isIterator: 1 + }; + A.MappedListIterable.prototype = { + get$length(_) { + return J.get$length$asx(this._source); + }, + elementAt$1(_, index) { + return this._f.call$1(J.elementAt$1$ax(this._source, index)); + } + }; + A.WhereIterable.prototype = { + get$iterator(_) { + return new A.WhereIterator(J.get$iterator$ax(this.__internal$_iterable), this._f, this.$ti._eval$1("WhereIterator<1>")); + }, + map$1$1(_, toElement, $T) { + var t1 = this.$ti; + return new A.MappedIterable(this, t1._bind$1($T)._eval$1("1(2)")._as(toElement), t1._eval$1("@<1>")._bind$1($T)._eval$1("MappedIterable<1,2>")); + } + }; + A.WhereIterator.prototype = { + moveNext$0() { + var t1, t2; + for (t1 = this._iterator, t2 = this._f; t1.moveNext$0();) + if (t2.call$1(t1.get$current())) + return true; + return false; + }, + get$current() { + return this._iterator.get$current(); + }, + $isIterator: 1 + }; + A.ExpandIterable.prototype = { + get$iterator(_) { + return new A.ExpandIterator(J.get$iterator$ax(this.__internal$_iterable), this._f, B.C_EmptyIterator, this.$ti._eval$1("ExpandIterator<1,2>")); + } + }; + A.ExpandIterator.prototype = { + get$current() { + var t1 = this.__internal$_current; + return t1 == null ? this.$ti._rest[1]._as(t1) : t1; + }, + moveNext$0() { + var t2, t3, _this = this, + t1 = _this._currentExpansion; + if (t1 == null) + return false; + for (t2 = _this._iterator, t3 = _this._f; !t1.moveNext$0();) { + _this.__internal$_current = null; + if (t2.moveNext$0()) { + _this._currentExpansion = null; + t1 = J.get$iterator$ax(t3.call$1(t2.get$current())); + _this._currentExpansion = t1; + } else + return false; + } + _this.__internal$_current = _this._currentExpansion.get$current(); + return true; + }, + $isIterator: 1 + }; + A.TakeIterable.prototype = { + get$iterator(_) { + var t1 = this.__internal$_iterable; + return new A.TakeIterator(t1.get$iterator(t1), this._takeCount, A._instanceType(this)._eval$1("TakeIterator<1>")); + } + }; + A.EfficientLengthTakeIterable.prototype = { + get$length(_) { + var t1 = this.__internal$_iterable, + iterableLength = t1.get$length(t1); + t1 = this._takeCount; + if (iterableLength > t1) + return t1; + return iterableLength; + }, + $isEfficientLengthIterable: 1 + }; + A.TakeIterator.prototype = { + moveNext$0() { + if (--this._remaining >= 0) + return this._iterator.moveNext$0(); + this._remaining = -1; + return false; + }, + get$current() { + if (this._remaining < 0) { + this.$ti._precomputed1._as(null); + return null; + } + return this._iterator.get$current(); + }, + $isIterator: 1 + }; + A.SkipIterable.prototype = { + skip$1(_, count) { + A.ArgumentError_checkNotNull(count, "count", type$.int); + A.RangeError_checkNotNegative(count, "count"); + return new A.SkipIterable(this.__internal$_iterable, this._skipCount + count, A._instanceType(this)._eval$1("SkipIterable<1>")); + }, + get$iterator(_) { + var t1 = this.__internal$_iterable; + return new A.SkipIterator(t1.get$iterator(t1), this._skipCount, A._instanceType(this)._eval$1("SkipIterator<1>")); + } + }; + A.EfficientLengthSkipIterable.prototype = { + get$length(_) { + var t1 = this.__internal$_iterable, + $length = t1.get$length(t1) - this._skipCount; + if ($length >= 0) + return $length; + return 0; + }, + skip$1(_, count) { + A.ArgumentError_checkNotNull(count, "count", type$.int); + A.RangeError_checkNotNegative(count, "count"); + return new A.EfficientLengthSkipIterable(this.__internal$_iterable, this._skipCount + count, this.$ti); + }, + $isEfficientLengthIterable: 1 + }; + A.SkipIterator.prototype = { + moveNext$0() { + var t1, i; + for (t1 = this._iterator, i = 0; i < this._skipCount; ++i) + t1.moveNext$0(); + this._skipCount = 0; + return t1.moveNext$0(); + }, + get$current() { + return this._iterator.get$current(); + }, + $isIterator: 1 + }; + A.SkipWhileIterable.prototype = { + get$iterator(_) { + return new A.SkipWhileIterator(J.get$iterator$ax(this.__internal$_iterable), this._f, this.$ti._eval$1("SkipWhileIterator<1>")); + } + }; + A.SkipWhileIterator.prototype = { + moveNext$0() { + var t1, t2, _this = this; + if (!_this._hasSkipped) { + _this._hasSkipped = true; + for (t1 = _this._iterator, t2 = _this._f; t1.moveNext$0();) + if (!t2.call$1(t1.get$current())) + return true; + } + return _this._iterator.moveNext$0(); + }, + get$current() { + return this._iterator.get$current(); + }, + $isIterator: 1 + }; + A.EmptyIterable.prototype = { + get$iterator(_) { + return B.C_EmptyIterator; + }, + get$isEmpty(_) { + return true; + }, + get$length(_) { + return 0; + }, + get$first(_) { + throw A.wrapException(A.IterableElementError_noElement()); + }, + get$last(_) { + throw A.wrapException(A.IterableElementError_noElement()); + }, + elementAt$1(_, index) { + throw A.wrapException(A.RangeError$range(index, 0, 0, "index", null)); + }, + map$1$1(_, toElement, $T) { + this.$ti._bind$1($T)._eval$1("1(2)")._as(toElement); + return new A.EmptyIterable($T._eval$1("EmptyIterable<0>")); + }, + skip$1(_, count) { + A.RangeError_checkNotNegative(count, "count"); + return this; + }, + take$1(_, count) { + A.RangeError_checkNotNegative(count, "count"); + return this; + } + }; + A.EmptyIterator.prototype = { + moveNext$0() { + return false; + }, + get$current() { + throw A.wrapException(A.IterableElementError_noElement()); + }, + $isIterator: 1 + }; + A.WhereTypeIterable.prototype = { + get$iterator(_) { + return new A.WhereTypeIterator(J.get$iterator$ax(this._source), this.$ti._eval$1("WhereTypeIterator<1>")); + } + }; + A.WhereTypeIterator.prototype = { + moveNext$0() { + var t1, t2; + for (t1 = this._source, t2 = this.$ti._precomputed1; t1.moveNext$0();) + if (t2._is(t1.get$current())) + return true; + return false; + }, + get$current() { + return this.$ti._precomputed1._as(this._source.get$current()); + }, + $isIterator: 1 + }; + A.IndexedIterable.prototype = { + get$length(_) { + return J.get$length$asx(this._source); + }, + get$isEmpty(_) { + return J.get$isEmpty$asx(this._source); + }, + get$first(_) { + return new A._Record_2(this._start, J.get$first$ax(this._source)); + }, + elementAt$1(_, index) { + return new A._Record_2(index + this._start, J.elementAt$1$ax(this._source, index)); + }, + take$1(_, count) { + A.ArgumentError_checkNotNull(count, "count", type$.int); + A.RangeError_checkNotNegative(count, "count"); + return new A.IndexedIterable(J.take$1$ax(this._source, count), this._start, A._instanceType(this)._eval$1("IndexedIterable<1>")); + }, + skip$1(_, count) { + A.ArgumentError_checkNotNull(count, "count", type$.int); + A.RangeError_checkNotNegative(count, "count"); + return new A.IndexedIterable(J.skip$1$ax(this._source, count), count + this._start, A._instanceType(this)._eval$1("IndexedIterable<1>")); + }, + get$iterator(_) { + return new A.IndexedIterator(J.get$iterator$ax(this._source), this._start, A._instanceType(this)._eval$1("IndexedIterator<1>")); + } + }; + A.EfficientLengthIndexedIterable.prototype = { + get$last(_) { + var last, + t1 = this._source, + t2 = J.getInterceptor$asx(t1), + $length = t2.get$length(t1); + if ($length <= 0) + throw A.wrapException(A.IterableElementError_noElement()); + last = t2.get$last(t1); + if ($length !== t2.get$length(t1)) + throw A.wrapException(A.ConcurrentModificationError$(this)); + return new A._Record_2($length - 1 + this._start, last); + }, + take$1(_, count) { + A.ArgumentError_checkNotNull(count, "count", type$.int); + A.RangeError_checkNotNegative(count, "count"); + return new A.EfficientLengthIndexedIterable(J.take$1$ax(this._source, count), this._start, this.$ti); + }, + skip$1(_, count) { + A.ArgumentError_checkNotNull(count, "count", type$.int); + A.RangeError_checkNotNegative(count, "count"); + return new A.EfficientLengthIndexedIterable(J.skip$1$ax(this._source, count), this._start + count, this.$ti); + }, + $isEfficientLengthIterable: 1 + }; + A.IndexedIterator.prototype = { + moveNext$0() { + if (++this.__internal$_index >= 0 && this._source.moveNext$0()) + return true; + this.__internal$_index = -2; + return false; + }, + get$current() { + var t1 = this.__internal$_index; + return t1 >= 0 ? new A._Record_2(this._start + t1, this._source.get$current()) : A.throwExpression(A.IterableElementError_noElement()); + }, + $isIterator: 1 + }; + A.FixedLengthListMixin.prototype = {}; + A.UnmodifiableListMixin.prototype = { + $indexSet(_, index, value) { + A._instanceType(this)._eval$1("UnmodifiableListMixin.E")._as(value); + throw A.wrapException(A.UnsupportedError$("Cannot modify an unmodifiable list")); + }, + setRange$4(_, start, end, iterable, skipCount) { + A._instanceType(this)._eval$1("Iterable")._as(iterable); + throw A.wrapException(A.UnsupportedError$("Cannot modify an unmodifiable list")); + }, + setRange$3(_, start, end, iterable) { + return this.setRange$4(0, start, end, iterable, 0); + } + }; + A.UnmodifiableListBase.prototype = {}; + A.ReversedListIterable.prototype = { + get$length(_) { + return J.get$length$asx(this._source); + }, + elementAt$1(_, index) { + var t1 = this._source, + t2 = J.getInterceptor$asx(t1); + return t2.elementAt$1(t1, t2.get$length(t1) - 1 - index); + } + }; + A.Symbol.prototype = { + get$hashCode(_) { + var hash = this._hashCode; + if (hash != null) + return hash; + hash = 664597 * B.JSString_methods.get$hashCode(this.__internal$_name) & 536870911; + this._hashCode = hash; + return hash; + }, + toString$0(_) { + return 'Symbol("' + this.__internal$_name + '")'; + }, + $eq(_, other) { + if (other == null) + return false; + return other instanceof A.Symbol && this.__internal$_name === other.__internal$_name; + } + }; + A.__CastListBase__CastIterableBase_ListMixin.prototype = {}; + A._Record_2.prototype = {$recipe: "+(1,2)", $shape: 1}; + A._Record_2_file_outFlags.prototype = {$recipe: "+file,outFlags(1,2)", $shape: 2}; + A.ConstantMap.prototype = { + toString$0(_) { + return A.MapBase_mapToString(this); + }, + get$entries() { + return new A._SyncStarIterable(this.entries$body$ConstantMap(), A._instanceType(this)._eval$1("_SyncStarIterable>")); + }, + entries$body$ConstantMap() { + var $async$self = this; + return function() { + var $async$goto = 0, $async$handler = 1, $async$errorStack = [], t1, t2, t3, key, t4; + return function $async$get$entries($async$iterator, $async$errorCode, $async$result) { + if ($async$errorCode === 1) { + $async$errorStack.push($async$result); + $async$goto = $async$handler; + } + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $async$self.get$keys(), t1 = t1.get$iterator(t1), t2 = A._instanceType($async$self), t3 = t2._rest[1], t2 = t2._eval$1("MapEntry<1,2>"); + case 2: + // for condition + if (!t1.moveNext$0()) { + // goto after for + $async$goto = 3; + break; + } + key = t1.get$current(); + t4 = $async$self.$index(0, key); + $async$goto = 4; + return $async$iterator._async$_current = new A.MapEntry(key, t4 == null ? t3._as(t4) : t4, t2), 1; + case 4: + // after yield + // goto for condition + $async$goto = 2; + break; + case 3: + // after for + // implicit return + return 0; + case 1: + // rethrow + return $async$iterator._datum = $async$errorStack.at(-1), 3; + } + }; + }; + }, + $isMap: 1 + }; + A.ConstantStringMap.prototype = { + get$length(_) { + return this._values.length; + }, + get$__js_helper$_keys() { + var keys = this.$keys; + if (keys == null) { + keys = Object.keys(this._jsIndex); + this.$keys = keys; + } + return keys; + }, + containsKey$1(key) { + if (typeof key != "string") + return false; + if ("__proto__" === key) + return false; + return this._jsIndex.hasOwnProperty(key); + }, + $index(_, key) { + if (!this.containsKey$1(key)) + return null; + return this._values[this._jsIndex[key]]; + }, + forEach$1(_, f) { + var keys, values, t1, i; + this.$ti._eval$1("~(1,2)")._as(f); + keys = this.get$__js_helper$_keys(); + values = this._values; + for (t1 = keys.length, i = 0; i < t1; ++i) + f.call$2(keys[i], values[i]); + }, + get$keys() { + return new A._KeysOrValues(this.get$__js_helper$_keys(), this.$ti._eval$1("_KeysOrValues<1>")); + }, + get$values() { + return new A._KeysOrValues(this._values, this.$ti._eval$1("_KeysOrValues<2>")); + } + }; + A._KeysOrValues.prototype = { + get$length(_) { + return this._elements.length; + }, + get$isEmpty(_) { + return 0 === this._elements.length; + }, + get$iterator(_) { + var t1 = this._elements; + return new A._KeysOrValuesOrElementsIterator(t1, t1.length, this.$ti._eval$1("_KeysOrValuesOrElementsIterator<1>")); + } + }; + A._KeysOrValuesOrElementsIterator.prototype = { + get$current() { + var t1 = this.__js_helper$_current; + return t1 == null ? this.$ti._precomputed1._as(t1) : t1; + }, + moveNext$0() { + var _this = this, + t1 = _this.__js_helper$_index; + if (t1 >= _this.__js_helper$_length) { + _this.__js_helper$_current = null; + return false; + } + _this.__js_helper$_current = _this._elements[t1]; + _this.__js_helper$_index = t1 + 1; + return true; + }, + $isIterator: 1 + }; + A.Instantiation.prototype = { + $eq(_, other) { + if (other == null) + return false; + return other instanceof A.Instantiation1 && this._genericClosure.$eq(0, other._genericClosure) && A.getRuntimeTypeOfClosure(this) === A.getRuntimeTypeOfClosure(other); + }, + get$hashCode(_) { + return A.Object_hash(this._genericClosure, A.getRuntimeTypeOfClosure(this), B.C_SentinelValue, B.C_SentinelValue); + }, + toString$0(_) { + var t1 = B.JSArray_methods.join$1([A.createRuntimeType(this.$ti._precomputed1)], ", "); + return this._genericClosure.toString$0(0) + " with " + ("<" + t1 + ">"); + } + }; + A.Instantiation1.prototype = { + call$2(a0, a1) { + return this._genericClosure.call$1$2(a0, a1, this.$ti._rest[0]); + }, + call$4(a0, a1, a2, a3) { + return this._genericClosure.call$1$4(a0, a1, a2, a3, this.$ti._rest[0]); + }, + $signature() { + return A.instantiatedGenericFunctionType(A.closureFunctionType(this._genericClosure), this.$ti); + } + }; + A.SafeToStringHook.prototype = {}; + A.TypeErrorDecoder.prototype = { + matchTypeError$1(message) { + var result, t1, _this = this, + match = new RegExp(_this._pattern).exec(message); + if (match == null) + return null; + result = Object.create(null); + t1 = _this._arguments; + if (t1 !== -1) + result.arguments = match[t1 + 1]; + t1 = _this._argumentsExpr; + if (t1 !== -1) + result.argumentsExpr = match[t1 + 1]; + t1 = _this._expr; + if (t1 !== -1) + result.expr = match[t1 + 1]; + t1 = _this._method; + if (t1 !== -1) + result.method = match[t1 + 1]; + t1 = _this._receiver; + if (t1 !== -1) + result.receiver = match[t1 + 1]; + return result; + } + }; + A.NullError.prototype = { + toString$0(_) { + return "Null check operator used on a null value"; + } + }; + A.JsNoSuchMethodError.prototype = { + toString$0(_) { + var t2, _this = this, + _s38_ = "NoSuchMethodError: method not found: '", + t1 = _this._method; + if (t1 == null) + return "NoSuchMethodError: " + _this.__js_helper$_message; + t2 = _this._receiver; + if (t2 == null) + return _s38_ + t1 + "' (" + _this.__js_helper$_message + ")"; + return _s38_ + t1 + "' on '" + t2 + "' (" + _this.__js_helper$_message + ")"; + } + }; + A.UnknownJsTypeError.prototype = { + toString$0(_) { + var t1 = this.__js_helper$_message; + return t1.length === 0 ? "Error" : "Error: " + t1; + } + }; + A.NullThrownFromJavaScriptException.prototype = { + toString$0(_) { + return "Throw of null ('" + (this._irritant === null ? "null" : "undefined") + "' from JavaScript)"; + }, + $isException: 1 + }; + A.ExceptionAndStackTrace.prototype = {}; + A._StackTrace.prototype = { + toString$0(_) { + var trace, + t1 = this._trace; + if (t1 != null) + return t1; + t1 = this._exception; + trace = t1 !== null && typeof t1 === "object" ? t1.stack : null; + return this._trace = trace == null ? "" : trace; + }, + $isStackTrace: 1 + }; + A.Closure.prototype = { + toString$0(_) { + var $constructor = this.constructor, + $name = $constructor == null ? null : $constructor.name; + return "Closure '" + A.unminifyOrTag($name == null ? "unknown" : $name) + "'"; + }, + $isFunction: 1, + get$$call() { + return this; + }, + "call*": "call$1", + $requiredArgCount: 1, + $defaultValues: null + }; + A.Closure0Args.prototype = {"call*": "call$0", $requiredArgCount: 0}; + A.Closure2Args.prototype = {"call*": "call$2", $requiredArgCount: 2}; + A.TearOffClosure.prototype = {}; + A.StaticClosure.prototype = { + toString$0(_) { + var $name = this.$static_name; + if ($name == null) + return "Closure of unknown static method"; + return "Closure '" + A.unminifyOrTag($name) + "'"; + } + }; + A.BoundClosure.prototype = { + $eq(_, other) { + if (other == null) + return false; + if (this === other) + return true; + if (!(other instanceof A.BoundClosure)) + return false; + return this.$_target === other.$_target && this._receiver === other._receiver; + }, + get$hashCode(_) { + return (A.objectHashCode(this._receiver) ^ A.Primitives_objectHashCode(this.$_target)) >>> 0; + }, + toString$0(_) { + return "Closure '" + this.$_name + "' of " + ("Instance of '" + A.Primitives_objectTypeName(this._receiver) + "'"); + } + }; + A.RuntimeError.prototype = { + toString$0(_) { + return "RuntimeError: " + this.message; + } + }; + A.JsLinkedHashMap.prototype = { + get$length(_) { + return this.__js_helper$_length; + }, + get$isEmpty(_) { + return this.__js_helper$_length === 0; + }, + get$keys() { + return new A.LinkedHashMapKeysIterable(this, A._instanceType(this)._eval$1("LinkedHashMapKeysIterable<1>")); + }, + get$values() { + return new A.LinkedHashMapValuesIterable(this, A._instanceType(this)._eval$1("LinkedHashMapValuesIterable<2>")); + }, + get$entries() { + return new A.LinkedHashMapEntriesIterable(this, A._instanceType(this)._eval$1("LinkedHashMapEntriesIterable<1,2>")); + }, + containsKey$1(key) { + var strings, nums; + if (typeof key == "string") { + strings = this.__js_helper$_strings; + if (strings == null) + return false; + return strings[key] != null; + } else if (typeof key == "number" && (key & 0x3fffffff) === key) { + nums = this.__js_helper$_nums; + if (nums == null) + return false; + return nums[key] != null; + } else + return this.internalContainsKey$1(key); + }, + internalContainsKey$1(key) { + var rest = this.__js_helper$_rest; + if (rest == null) + return false; + return this.internalFindBucketIndex$2(rest[this.internalComputeHashCode$1(key)], key) >= 0; + }, + addAll$1(_, other) { + A._instanceType(this)._eval$1("Map<1,2>")._as(other).forEach$1(0, new A.JsLinkedHashMap_addAll_closure(this)); + }, + $index(_, key) { + var strings, cell, t1, nums, _null = null; + if (typeof key == "string") { + strings = this.__js_helper$_strings; + if (strings == null) + return _null; + cell = strings[key]; + t1 = cell == null ? _null : cell.hashMapCellValue; + return t1; + } else if (typeof key == "number" && (key & 0x3fffffff) === key) { + nums = this.__js_helper$_nums; + if (nums == null) + return _null; + cell = nums[key]; + t1 = cell == null ? _null : cell.hashMapCellValue; + return t1; + } else + return this.internalGet$1(key); + }, + internalGet$1(key) { + var bucket, index, + rest = this.__js_helper$_rest; + if (rest == null) + return null; + bucket = rest[this.internalComputeHashCode$1(key)]; + index = this.internalFindBucketIndex$2(bucket, key); + if (index < 0) + return null; + return bucket[index].hashMapCellValue; + }, + $indexSet(_, key, value) { + var strings, nums, _this = this, + t1 = A._instanceType(_this); + t1._precomputed1._as(key); + t1._rest[1]._as(value); + if (typeof key == "string") { + strings = _this.__js_helper$_strings; + _this.__js_helper$_addHashTableEntry$3(strings == null ? _this.__js_helper$_strings = _this._newHashTable$0() : strings, key, value); + } else if (typeof key == "number" && (key & 0x3fffffff) === key) { + nums = _this.__js_helper$_nums; + _this.__js_helper$_addHashTableEntry$3(nums == null ? _this.__js_helper$_nums = _this._newHashTable$0() : nums, key, value); + } else + _this.internalSet$2(key, value); + }, + internalSet$2(key, value) { + var rest, hash, bucket, index, _this = this, + t1 = A._instanceType(_this); + t1._precomputed1._as(key); + t1._rest[1]._as(value); + rest = _this.__js_helper$_rest; + if (rest == null) + rest = _this.__js_helper$_rest = _this._newHashTable$0(); + hash = _this.internalComputeHashCode$1(key); + bucket = rest[hash]; + if (bucket == null) + rest[hash] = [_this.__js_helper$_newLinkedCell$2(key, value)]; + else { + index = _this.internalFindBucketIndex$2(bucket, key); + if (index >= 0) + bucket[index].hashMapCellValue = value; + else + bucket.push(_this.__js_helper$_newLinkedCell$2(key, value)); + } + }, + putIfAbsent$2(key, ifAbsent) { + var t2, value, _this = this, + t1 = A._instanceType(_this); + t1._precomputed1._as(key); + t1._eval$1("2()")._as(ifAbsent); + if (_this.containsKey$1(key)) { + t2 = _this.$index(0, key); + return t2 == null ? t1._rest[1]._as(t2) : t2; + } + value = ifAbsent.call$0(); + _this.$indexSet(0, key, value); + return value; + }, + remove$1(_, key) { + var _this = this; + if (typeof key == "string") + return _this.__js_helper$_removeHashTableEntry$2(_this.__js_helper$_strings, key); + else if (typeof key == "number" && (key & 0x3fffffff) === key) + return _this.__js_helper$_removeHashTableEntry$2(_this.__js_helper$_nums, key); + else + return _this.internalRemove$1(key); + }, + internalRemove$1(key) { + var hash, bucket, index, cell, _this = this, + rest = _this.__js_helper$_rest; + if (rest == null) + return null; + hash = _this.internalComputeHashCode$1(key); + bucket = rest[hash]; + index = _this.internalFindBucketIndex$2(bucket, key); + if (index < 0) + return null; + cell = bucket.splice(index, 1)[0]; + _this.__js_helper$_unlinkCell$1(cell); + if (bucket.length === 0) + delete rest[hash]; + return cell.hashMapCellValue; + }, + clear$0(_) { + var _this = this; + if (_this.__js_helper$_length > 0) { + _this.__js_helper$_strings = _this.__js_helper$_nums = _this.__js_helper$_rest = _this.__js_helper$_first = _this.__js_helper$_last = null; + _this.__js_helper$_length = 0; + _this.__js_helper$_modified$0(); + } + }, + forEach$1(_, action) { + var cell, modifications, _this = this; + A._instanceType(_this)._eval$1("~(1,2)")._as(action); + cell = _this.__js_helper$_first; + modifications = _this.__js_helper$_modifications; + while (cell != null) { + action.call$2(cell.hashMapCellKey, cell.hashMapCellValue); + if (modifications !== _this.__js_helper$_modifications) + throw A.wrapException(A.ConcurrentModificationError$(_this)); + cell = cell.__js_helper$_next; + } + }, + __js_helper$_addHashTableEntry$3(table, key, value) { + var cell, + t1 = A._instanceType(this); + t1._precomputed1._as(key); + t1._rest[1]._as(value); + cell = table[key]; + if (cell == null) + table[key] = this.__js_helper$_newLinkedCell$2(key, value); + else + cell.hashMapCellValue = value; + }, + __js_helper$_removeHashTableEntry$2(table, key) { + var cell; + if (table == null) + return null; + cell = table[key]; + if (cell == null) + return null; + this.__js_helper$_unlinkCell$1(cell); + delete table[key]; + return cell.hashMapCellValue; + }, + __js_helper$_modified$0() { + this.__js_helper$_modifications = this.__js_helper$_modifications + 1 & 1073741823; + }, + __js_helper$_newLinkedCell$2(key, value) { + var _this = this, + t1 = A._instanceType(_this), + cell = new A.LinkedHashMapCell(t1._precomputed1._as(key), t1._rest[1]._as(value)); + if (_this.__js_helper$_first == null) + _this.__js_helper$_first = _this.__js_helper$_last = cell; + else { + t1 = _this.__js_helper$_last; + t1.toString; + cell.__js_helper$_previous = t1; + _this.__js_helper$_last = t1.__js_helper$_next = cell; + } + ++_this.__js_helper$_length; + _this.__js_helper$_modified$0(); + return cell; + }, + __js_helper$_unlinkCell$1(cell) { + var _this = this, + previous = cell.__js_helper$_previous, + next = cell.__js_helper$_next; + if (previous == null) + _this.__js_helper$_first = next; + else + previous.__js_helper$_next = next; + if (next == null) + _this.__js_helper$_last = previous; + else + next.__js_helper$_previous = previous; + --_this.__js_helper$_length; + _this.__js_helper$_modified$0(); + }, + internalComputeHashCode$1(key) { + return J.get$hashCode$(key) & 1073741823; + }, + internalFindBucketIndex$2(bucket, key) { + var $length, i; + if (bucket == null) + return -1; + $length = bucket.length; + for (i = 0; i < $length; ++i) + if (J.$eq$(bucket[i].hashMapCellKey, key)) + return i; + return -1; + }, + toString$0(_) { + return A.MapBase_mapToString(this); + }, + _newHashTable$0() { + var table = Object.create(null); + table[""] = table; + delete table[""]; + return table; + }, + $isLinkedHashMap: 1 + }; + A.JsLinkedHashMap_addAll_closure.prototype = { + call$2(key, value) { + var t1 = this.$this, + t2 = A._instanceType(t1); + t1.$indexSet(0, t2._precomputed1._as(key), t2._rest[1]._as(value)); + }, + $signature() { + return A._instanceType(this.$this)._eval$1("~(1,2)"); + } + }; + A.LinkedHashMapCell.prototype = {}; + A.LinkedHashMapKeysIterable.prototype = { + get$length(_) { + return this.__js_helper$_map.__js_helper$_length; + }, + get$isEmpty(_) { + return this.__js_helper$_map.__js_helper$_length === 0; + }, + get$iterator(_) { + var t1 = this.__js_helper$_map; + return new A.LinkedHashMapKeyIterator(t1, t1.__js_helper$_modifications, t1.__js_helper$_first, this.$ti._eval$1("LinkedHashMapKeyIterator<1>")); + } + }; + A.LinkedHashMapKeyIterator.prototype = { + get$current() { + return this.__js_helper$_current; + }, + moveNext$0() { + var cell, _this = this, + t1 = _this.__js_helper$_map; + if (_this.__js_helper$_modifications !== t1.__js_helper$_modifications) + throw A.wrapException(A.ConcurrentModificationError$(t1)); + cell = _this.__js_helper$_cell; + if (cell == null) { + _this.__js_helper$_current = null; + return false; + } else { + _this.__js_helper$_current = cell.hashMapCellKey; + _this.__js_helper$_cell = cell.__js_helper$_next; + return true; + } + }, + $isIterator: 1 + }; + A.LinkedHashMapValuesIterable.prototype = { + get$length(_) { + return this.__js_helper$_map.__js_helper$_length; + }, + get$isEmpty(_) { + return this.__js_helper$_map.__js_helper$_length === 0; + }, + get$iterator(_) { + var t1 = this.__js_helper$_map; + return new A.LinkedHashMapValueIterator(t1, t1.__js_helper$_modifications, t1.__js_helper$_first, this.$ti._eval$1("LinkedHashMapValueIterator<1>")); + } + }; + A.LinkedHashMapValueIterator.prototype = { + get$current() { + return this.__js_helper$_current; + }, + moveNext$0() { + var cell, _this = this, + t1 = _this.__js_helper$_map; + if (_this.__js_helper$_modifications !== t1.__js_helper$_modifications) + throw A.wrapException(A.ConcurrentModificationError$(t1)); + cell = _this.__js_helper$_cell; + if (cell == null) { + _this.__js_helper$_current = null; + return false; + } else { + _this.__js_helper$_current = cell.hashMapCellValue; + _this.__js_helper$_cell = cell.__js_helper$_next; + return true; + } + }, + $isIterator: 1 + }; + A.LinkedHashMapEntriesIterable.prototype = { + get$length(_) { + return this.__js_helper$_map.__js_helper$_length; + }, + get$isEmpty(_) { + return this.__js_helper$_map.__js_helper$_length === 0; + }, + get$iterator(_) { + var t1 = this.__js_helper$_map; + return new A.LinkedHashMapEntryIterator(t1, t1.__js_helper$_modifications, t1.__js_helper$_first, this.$ti._eval$1("LinkedHashMapEntryIterator<1,2>")); + } + }; + A.LinkedHashMapEntryIterator.prototype = { + get$current() { + var t1 = this.__js_helper$_current; + t1.toString; + return t1; + }, + moveNext$0() { + var cell, _this = this, + t1 = _this.__js_helper$_map; + if (_this.__js_helper$_modifications !== t1.__js_helper$_modifications) + throw A.wrapException(A.ConcurrentModificationError$(t1)); + cell = _this.__js_helper$_cell; + if (cell == null) { + _this.__js_helper$_current = null; + return false; + } else { + _this.__js_helper$_current = new A.MapEntry(cell.hashMapCellKey, cell.hashMapCellValue, _this.$ti._eval$1("MapEntry<1,2>")); + _this.__js_helper$_cell = cell.__js_helper$_next; + return true; + } + }, + $isIterator: 1 + }; + A.initHooks_closure.prototype = { + call$1(o) { + return this.getTag(o); + }, + $signature: 78 + }; + A.initHooks_closure0.prototype = { + call$2(o, tag) { + return this.getUnknownTag(o, tag); + }, + $signature: 49 + }; + A.initHooks_closure1.prototype = { + call$1(tag) { + return this.prototypeForTag(A._asString(tag)); + }, + $signature: 71 + }; + A._Record.prototype = { + toString$0(_) { + return this._toString$1(false); + }, + _toString$1(safe) { + var t2, separator, i, key, value, + keys = this._fieldKeys$0(), + values = this._getFieldValues$0(), + t1 = (safe ? "Record " : "") + "("; + for (t2 = keys.length, separator = "", i = 0; i < t2; ++i, separator = ", ") { + t1 += separator; + key = keys[i]; + if (typeof key == "string") + t1 = t1 + key + ": "; + if (!(i < values.length)) + return A.ioore(values, i); + value = values[i]; + t1 = safe ? t1 + A.Primitives_safeToString(value) : t1 + A.S(value); + } + t1 += ")"; + return t1.charCodeAt(0) == 0 ? t1 : t1; + }, + _fieldKeys$0() { + var t1, + shapeTag = this.$shape; + while ($._Record__computedFieldKeys.length <= shapeTag) + B.JSArray_methods.add$1($._Record__computedFieldKeys, null); + t1 = $._Record__computedFieldKeys[shapeTag]; + if (t1 == null) { + t1 = this._computeFieldKeys$0(); + B.JSArray_methods.$indexSet($._Record__computedFieldKeys, shapeTag, t1); + } + return t1; + }, + _computeFieldKeys$0() { + var i, names, last, + recipe = this.$recipe, + position = recipe.indexOf("("), + joinedNames = recipe.substring(1, position), + fields = recipe.substring(position), + arity = fields === "()" ? 0 : fields.replace(/[^,]/g, "").length + 1, + result = A._setArrayType(new Array(arity), type$.JSArray_Object); + for (i = 0; i < arity; ++i) + result[i] = i; + if (joinedNames !== "") { + names = joinedNames.split(","); + i = names.length; + for (last = arity; i > 0;) { + --last; + --i; + B.JSArray_methods.$indexSet(result, last, names[i]); + } + } + return A.List_List$unmodifiable(result, type$.Object); + } + }; + A._Record2.prototype = { + _getFieldValues$0() { + return [this._0, this._1]; + }, + $eq(_, other) { + if (other == null) + return false; + return other instanceof A._Record2 && this.$shape === other.$shape && J.$eq$(this._0, other._0) && J.$eq$(this._1, other._1); + }, + get$hashCode(_) { + return A.Object_hash(this.$shape, this._0, this._1, B.C_SentinelValue); + } + }; + A.JSSyntaxRegExp.prototype = { + toString$0(_) { + return "RegExp/" + this.pattern + "/" + this._nativeRegExp.flags; + }, + get$_nativeGlobalVersion() { + var _this = this, + t1 = _this._nativeGlobalRegExp; + if (t1 != null) + return t1; + t1 = _this._nativeRegExp; + return _this._nativeGlobalRegExp = A.JSSyntaxRegExp_makeNative(_this.pattern, t1.multiline, !t1.ignoreCase, t1.unicode, t1.dotAll, "g"); + }, + get$_nativeAnchoredVersion() { + var _this = this, + t1 = _this._nativeAnchoredRegExp; + if (t1 != null) + return t1; + t1 = _this._nativeRegExp; + return _this._nativeAnchoredRegExp = A.JSSyntaxRegExp_makeNative(_this.pattern, t1.multiline, !t1.ignoreCase, t1.unicode, t1.dotAll, "y"); + }, + _computeHasCaptures$0() { + var t2, + t1 = this.pattern; + if (!B.JSString_methods.contains$1(t1, "(")) + return false; + t2 = this._nativeRegExp.unicode ? "u" : ""; + return new RegExp("(?:)|" + t1, t2).exec("").length > 1; + }, + firstMatch$1(string) { + var m = this._nativeRegExp.exec(string); + if (m == null) + return null; + return new A._MatchImplementation(m); + }, + allMatches$2(_, string, start) { + var t1 = string.length; + if (start > t1) + throw A.wrapException(A.RangeError$range(start, 0, t1, null, null)); + return new A._AllMatchesIterable(this, string, start); + }, + allMatches$1(_, string) { + return this.allMatches$2(0, string, 0); + }, + _execGlobal$2(string, start) { + var match, + regexp = this.get$_nativeGlobalVersion(); + if (regexp == null) + regexp = A._asObject(regexp); + regexp.lastIndex = start; + match = regexp.exec(string); + if (match == null) + return null; + return new A._MatchImplementation(match); + }, + _execAnchored$2(string, start) { + var match, + regexp = this.get$_nativeAnchoredVersion(); + if (regexp == null) + regexp = A._asObject(regexp); + regexp.lastIndex = start; + match = regexp.exec(string); + if (match == null) + return null; + return new A._MatchImplementation(match); + }, + matchAsPrefix$2(_, string, start) { + if (start < 0 || start > string.length) + throw A.wrapException(A.RangeError$range(start, 0, string.length, null, null)); + return this._execAnchored$2(string, start); + }, + $isPattern: 1, + $isRegExp: 1 + }; + A._MatchImplementation.prototype = { + get$start() { + return this._match.index; + }, + get$end() { + var t1 = this._match; + return t1.index + t1[0].length; + }, + $index(_, index) { + var t1 = this._match; + if (!(index < t1.length)) + return A.ioore(t1, index); + return t1[index]; + }, + namedGroup$1($name) { + var result, + groups = this._match.groups; + if (groups != null) { + result = groups[$name]; + if (result != null || $name in groups) + return result; + } + throw A.wrapException(A.ArgumentError$value($name, "name", "Not a capture group name")); + }, + $isMatch: 1, + $isRegExpMatch: 1 + }; + A._AllMatchesIterable.prototype = { + get$iterator(_) { + return new A._AllMatchesIterator(this._re, this.__js_helper$_string, this.__js_helper$_start); + } + }; + A._AllMatchesIterator.prototype = { + get$current() { + var t1 = this.__js_helper$_current; + return t1 == null ? type$.RegExpMatch._as(t1) : t1; + }, + moveNext$0() { + var t1, t2, t3, match, nextIndex, t4, _this = this, + string = _this.__js_helper$_string; + if (string == null) + return false; + t1 = _this._nextIndex; + t2 = string.length; + if (t1 <= t2) { + t3 = _this._regExp; + match = t3._execGlobal$2(string, t1); + if (match != null) { + _this.__js_helper$_current = match; + nextIndex = match.get$end(); + if (match._match.index === nextIndex) { + t1 = false; + if (t3._nativeRegExp.unicode) { + t3 = _this._nextIndex; + t4 = t3 + 1; + if (t4 < t2) { + if (!(t3 >= 0 && t3 < t2)) + return A.ioore(string, t3); + t3 = string.charCodeAt(t3); + if (t3 >= 55296 && t3 <= 56319) { + if (!(t4 >= 0)) + return A.ioore(string, t4); + t1 = string.charCodeAt(t4); + t1 = t1 >= 56320 && t1 <= 57343; + } + } + } + nextIndex = (t1 ? nextIndex + 1 : nextIndex) + 1; + } + _this._nextIndex = nextIndex; + return true; + } + } + _this.__js_helper$_string = _this.__js_helper$_current = null; + return false; + }, + $isIterator: 1 + }; + A.StringMatch.prototype = { + get$end() { + return this.start + this.pattern.length; + }, + $index(_, g) { + if (g !== 0) + A.throwExpression(A.RangeError$value(g, null)); + return this.pattern; + }, + $isMatch: 1, + get$start() { + return this.start; + } + }; + A._StringAllMatchesIterable.prototype = { + get$iterator(_) { + return new A._StringAllMatchesIterator(this._input, this._pattern, this.__js_helper$_index); + }, + get$first(_) { + var t1 = this._pattern, + index = this._input.indexOf(t1, this.__js_helper$_index); + if (index >= 0) + return new A.StringMatch(index, t1); + throw A.wrapException(A.IterableElementError_noElement()); + } + }; + A._StringAllMatchesIterator.prototype = { + moveNext$0() { + var index, end, _this = this, + t1 = _this.__js_helper$_index, + t2 = _this._pattern, + t3 = t2.length, + t4 = _this._input, + t5 = t4.length; + if (t1 + t3 > t5) { + _this.__js_helper$_current = null; + return false; + } + index = t4.indexOf(t2, t1); + if (index < 0) { + _this.__js_helper$_index = t5 + 1; + _this.__js_helper$_current = null; + return false; + } + end = index + t3; + _this.__js_helper$_current = new A.StringMatch(index, t2); + _this.__js_helper$_index = end === _this.__js_helper$_index ? end + 1 : end; + return true; + }, + get$current() { + var t1 = this.__js_helper$_current; + t1.toString; + return t1; + }, + $isIterator: 1 + }; + A._Cell.prototype = { + _readField$0() { + var t1 = this._value; + if (t1 === this) + throw A.wrapException(A.LateError$fieldNI(this.__late_helper$_name)); + return t1; + } + }; + A.NativeByteBuffer.prototype = { + get$runtimeType(receiver) { + return B.Type_ByteBuffer_rqD; + }, + asUint8List$2(receiver, offsetInBytes, $length) { + A._checkViewArguments(receiver, offsetInBytes, $length); + return $length == null ? new Uint8Array(receiver, offsetInBytes) : new Uint8Array(receiver, offsetInBytes, $length); + }, + asByteData$2(receiver, offsetInBytes, $length) { + var t1; + A._checkViewArguments(receiver, offsetInBytes, $length); + t1 = new DataView(receiver, offsetInBytes); + return t1; + }, + asByteData$0(receiver) { + return this.asByteData$2(receiver, 0, null); + }, + $isTrustedGetRuntimeType: 1, + $isNativeByteBuffer: 1, + $isByteBuffer: 1 + }; + A.NativeArrayBuffer.prototype = {$isNativeArrayBuffer: 1}; + A.NativeTypedData.prototype = { + get$buffer(receiver) { + if (((receiver.$flags | 0) & 2) !== 0) + return new A._UnmodifiableNativeByteBufferView(receiver.buffer); + else + return receiver.buffer; + }, + _invalidPosition$3(receiver, position, $length, $name) { + var t1 = A.RangeError$range(position, 0, $length, $name, null); + throw A.wrapException(t1); + }, + _checkPosition$3(receiver, position, $length, $name) { + if (position >>> 0 !== position || position > $length) + this._invalidPosition$3(receiver, position, $length, $name); + } + }; + A._UnmodifiableNativeByteBufferView.prototype = { + asUint8List$2(_, offsetInBytes, $length) { + var result = A.NativeUint8List_NativeUint8List$view(this.__native_typed_data$_data, offsetInBytes, $length); + result.$flags = 3; + return result; + }, + asByteData$0(_) { + var result = A.NativeByteData_NativeByteData$view(this.__native_typed_data$_data, 0, null); + result.$flags = 3; + return result; + }, + $isByteBuffer: 1 + }; + A.NativeByteData.prototype = { + get$runtimeType(receiver) { + return B.Type_ByteData_9dB; + }, + $isTrustedGetRuntimeType: 1, + $isNativeByteData: 1, + $isByteData: 1 + }; + A.NativeTypedArray.prototype = { + get$length(receiver) { + return receiver.length; + }, + _setRangeFast$4(receiver, start, end, source, skipCount) { + var count, sourceLength, + targetLength = receiver.length; + this._checkPosition$3(receiver, start, targetLength, "start"); + this._checkPosition$3(receiver, end, targetLength, "end"); + if (start > end) + throw A.wrapException(A.RangeError$range(start, 0, end, null, null)); + count = end - start; + if (skipCount < 0) + throw A.wrapException(A.ArgumentError$(skipCount, null)); + sourceLength = source.length; + if (sourceLength - skipCount < count) + throw A.wrapException(A.StateError$("Not enough elements")); + if (skipCount !== 0 || sourceLength !== count) + source = source.subarray(skipCount, skipCount + count); + receiver.set(source, start); + }, + $isJSIndexable: 1, + $isJavaScriptIndexingBehavior: 1 + }; + A.NativeTypedArrayOfDouble.prototype = { + $index(receiver, index) { + A._checkValidIndex(index, receiver, receiver.length); + return receiver[index]; + }, + $indexSet(receiver, index, value) { + A._asDouble(value); + receiver.$flags & 2 && A.throwUnsupportedOperation(receiver); + A._checkValidIndex(index, receiver, receiver.length); + receiver[index] = value; + }, + setRange$4(receiver, start, end, iterable, skipCount) { + type$.Iterable_double._as(iterable); + receiver.$flags & 2 && A.throwUnsupportedOperation(receiver, 5); + if (type$.NativeTypedArrayOfDouble._is(iterable)) { + this._setRangeFast$4(receiver, start, end, iterable, skipCount); + return; + } + this.super$ListBase$setRange(receiver, start, end, iterable, skipCount); + }, + setRange$3(receiver, start, end, iterable) { + return this.setRange$4(receiver, start, end, iterable, 0); + }, + $isEfficientLengthIterable: 1, + $isIterable: 1, + $isList: 1 + }; + A.NativeTypedArrayOfInt.prototype = { + $indexSet(receiver, index, value) { + A._asInt(value); + receiver.$flags & 2 && A.throwUnsupportedOperation(receiver); + A._checkValidIndex(index, receiver, receiver.length); + receiver[index] = value; + }, + setRange$4(receiver, start, end, iterable, skipCount) { + type$.Iterable_int._as(iterable); + receiver.$flags & 2 && A.throwUnsupportedOperation(receiver, 5); + if (type$.NativeTypedArrayOfInt._is(iterable)) { + this._setRangeFast$4(receiver, start, end, iterable, skipCount); + return; + } + this.super$ListBase$setRange(receiver, start, end, iterable, skipCount); + }, + setRange$3(receiver, start, end, iterable) { + return this.setRange$4(receiver, start, end, iterable, 0); + }, + $isEfficientLengthIterable: 1, + $isIterable: 1, + $isList: 1 + }; + A.NativeFloat32List.prototype = { + get$runtimeType(receiver) { + return B.Type_Float32List_9Kz; + }, + sublist$2(receiver, start, end) { + return new Float32Array(receiver.subarray(start, A._checkValidRange(start, end, receiver.length))); + }, + $isTrustedGetRuntimeType: 1, + $isTypedDataList: 1, + $isFloat32List: 1 + }; + A.NativeFloat64List.prototype = { + get$runtimeType(receiver) { + return B.Type_Float64List_9Kz; + }, + sublist$2(receiver, start, end) { + return new Float64Array(receiver.subarray(start, A._checkValidRange(start, end, receiver.length))); + }, + $isTrustedGetRuntimeType: 1, + $isTypedDataList: 1, + $isFloat64List: 1 + }; + A.NativeInt16List.prototype = { + get$runtimeType(receiver) { + return B.Type_Int16List_s5h; + }, + $index(receiver, index) { + A._checkValidIndex(index, receiver, receiver.length); + return receiver[index]; + }, + sublist$2(receiver, start, end) { + return new Int16Array(receiver.subarray(start, A._checkValidRange(start, end, receiver.length))); + }, + $isTrustedGetRuntimeType: 1, + $isTypedDataList: 1, + $isInt16List: 1 + }; + A.NativeInt32List.prototype = { + get$runtimeType(receiver) { + return B.Type_Int32List_O8Z; + }, + $index(receiver, index) { + A._checkValidIndex(index, receiver, receiver.length); + return receiver[index]; + }, + sublist$2(receiver, start, end) { + return new Int32Array(receiver.subarray(start, A._checkValidRange(start, end, receiver.length))); + }, + $isTrustedGetRuntimeType: 1, + $isNativeInt32List: 1, + $isTypedDataList: 1, + $isInt32List: 1 + }; + A.NativeInt8List.prototype = { + get$runtimeType(receiver) { + return B.Type_Int8List_rFV; + }, + $index(receiver, index) { + A._checkValidIndex(index, receiver, receiver.length); + return receiver[index]; + }, + sublist$2(receiver, start, end) { + return new Int8Array(receiver.subarray(start, A._checkValidRange(start, end, receiver.length))); + }, + $isTrustedGetRuntimeType: 1, + $isTypedDataList: 1, + $isInt8List: 1 + }; + A.NativeUint16List.prototype = { + get$runtimeType(receiver) { + return B.Type_Uint16List_kmP; + }, + $index(receiver, index) { + A._checkValidIndex(index, receiver, receiver.length); + return receiver[index]; + }, + sublist$2(receiver, start, end) { + return new Uint16Array(receiver.subarray(start, A._checkValidRange(start, end, receiver.length))); + }, + $isTrustedGetRuntimeType: 1, + $isTypedDataList: 1, + $isUint16List: 1 + }; + A.NativeUint32List.prototype = { + get$runtimeType(receiver) { + return B.Type_Uint32List_kmP; + }, + $index(receiver, index) { + A._checkValidIndex(index, receiver, receiver.length); + return receiver[index]; + }, + sublist$2(receiver, start, end) { + return new Uint32Array(receiver.subarray(start, A._checkValidRange(start, end, receiver.length))); + }, + $isTrustedGetRuntimeType: 1, + $isTypedDataList: 1, + $isUint32List: 1 + }; + A.NativeUint8ClampedList.prototype = { + get$runtimeType(receiver) { + return B.Type_Uint8ClampedList_04U; + }, + get$length(receiver) { + return receiver.length; + }, + $index(receiver, index) { + A._checkValidIndex(index, receiver, receiver.length); + return receiver[index]; + }, + sublist$2(receiver, start, end) { + return new Uint8ClampedArray(receiver.subarray(start, A._checkValidRange(start, end, receiver.length))); + }, + $isTrustedGetRuntimeType: 1, + $isTypedDataList: 1, + $isUint8ClampedList: 1 + }; + A.NativeUint8List.prototype = { + get$runtimeType(receiver) { + return B.Type_Uint8List_8Eb; + }, + get$length(receiver) { + return receiver.length; + }, + $index(receiver, index) { + A._checkValidIndex(index, receiver, receiver.length); + return receiver[index]; + }, + sublist$2(receiver, start, end) { + return new Uint8Array(receiver.subarray(start, A._checkValidRange(start, end, receiver.length))); + }, + $isTrustedGetRuntimeType: 1, + $isNativeUint8List: 1, + $isTypedDataList: 1, + $isUint8List: 1 + }; + A._NativeTypedArrayOfDouble_NativeTypedArray_ListMixin.prototype = {}; + A._NativeTypedArrayOfDouble_NativeTypedArray_ListMixin_FixedLengthListMixin.prototype = {}; + A._NativeTypedArrayOfInt_NativeTypedArray_ListMixin.prototype = {}; + A._NativeTypedArrayOfInt_NativeTypedArray_ListMixin_FixedLengthListMixin.prototype = {}; + A.Rti.prototype = { + _eval$1(recipe) { + return A._Universe_evalInEnvironment(init.typeUniverse, this, recipe); + }, + _bind$1(typeOrTuple) { + return A._Universe_bind(init.typeUniverse, this, typeOrTuple); + } + }; + A._FunctionParameters.prototype = {}; + A._Type.prototype = { + toString$0(_) { + return A._rtiToString(this._rti, null); + } + }; + A._Error.prototype = { + toString$0(_) { + return this._message; + } + }; + A._TypeError.prototype = {$isTypeError: 1}; + A._AsyncRun__initializeScheduleImmediate_internalCallback.prototype = { + call$1(__wc0_formal) { + var t1 = this._box_0, + f = t1.storedCallback; + t1.storedCallback = null; + f.call$0(); + }, + $signature: 25 + }; + A._AsyncRun__initializeScheduleImmediate_closure.prototype = { + call$1(callback) { + var t1, t2; + this._box_0.storedCallback = type$.void_Function._as(callback); + t1 = this.div; + t2 = this.span; + t1.firstChild ? t1.removeChild(t2) : t1.appendChild(t2); + }, + $signature: 48 + }; + A._AsyncRun__scheduleImmediateJsOverride_internalCallback.prototype = { + call$0() { + this.callback.call$0(); + }, + $signature: 6 + }; + A._AsyncRun__scheduleImmediateWithSetImmediate_internalCallback.prototype = { + call$0() { + this.callback.call$0(); + }, + $signature: 6 + }; + A._TimerImpl.prototype = { + _TimerImpl$2(milliseconds, callback) { + if (self.setTimeout != null) + self.setTimeout(A.convertDartClosureToJS(new A._TimerImpl_internalCallback(this, callback), 0), milliseconds); + else + throw A.wrapException(A.UnsupportedError$("`setTimeout()` not found.")); + }, + _TimerImpl$periodic$2(milliseconds, callback) { + if (self.setTimeout != null) + self.setInterval(A.convertDartClosureToJS(new A._TimerImpl$periodic_closure(this, milliseconds, Date.now(), callback), 0), milliseconds); + else + throw A.wrapException(A.UnsupportedError$("Periodic timer.")); + }, + $isTimer: 1 + }; + A._TimerImpl_internalCallback.prototype = { + call$0() { + this.$this._tick = 1; + this.callback.call$0(); + }, + $signature: 0 + }; + A._TimerImpl$periodic_closure.prototype = { + call$0() { + var duration, _this = this, + t1 = _this.$this, + tick = t1._tick + 1, + t2 = _this.milliseconds; + if (t2 > 0) { + duration = Date.now() - _this.start; + if (duration > (tick + 1) * t2) + tick = B.JSInt_methods.$tdiv(duration, t2); + } + t1._tick = tick; + _this.callback.call$1(t1); + }, + $signature: 6 + }; + A._AsyncAwaitCompleter.prototype = { + complete$1(value) { + var t2, _this = this, + t1 = _this.$ti; + t1._eval$1("1/?")._as(value); + if (value == null) + value = t1._precomputed1._as(value); + if (!_this.isSync) + _this._future._asyncComplete$1(value); + else { + t2 = _this._future; + if (t1._eval$1("Future<1>")._is(value)) + t2._chainFuture$1(value); + else + t2._completeWithValue$1(value); + } + }, + completeError$2(e, st) { + var t1 = this._future; + if (this.isSync) + t1._completeErrorObject$1(new A.AsyncError(e, st)); + else + t1._asyncCompleteErrorObject$1(new A.AsyncError(e, st)); + }, + $isCompleter: 1 + }; + A._awaitOnObject_closure.prototype = { + call$1(result) { + return this.bodyFunction.call$2(0, result); + }, + $signature: 15 + }; + A._awaitOnObject_closure0.prototype = { + call$2(error, stackTrace) { + this.bodyFunction.call$2(1, new A.ExceptionAndStackTrace(error, type$.StackTrace._as(stackTrace))); + }, + $signature: 40 + }; + A._wrapJsFunctionForAsync_closure.prototype = { + call$2(errorCode, result) { + this.$protected(A._asInt(errorCode), result); + }, + $signature: 45 + }; + A._SyncStarIterator.prototype = { + get$current() { + var t1 = this._async$_current; + return t1 == null ? this.$ti._precomputed1._as(t1) : t1; + }, + _resumeBody$2(errorCode, errorValue) { + var body, t1, exception; + errorCode = A._asInt(errorCode); + errorValue = errorValue; + body = this._body; + for (;;) + try { + t1 = body(this, errorCode, errorValue); + return t1; + } catch (exception) { + errorValue = exception; + errorCode = 1; + } + }, + moveNext$0() { + var nestedIterator, exception, value, suspendedBodies, _this = this, errorValue = null, errorCode = 0; + for (;;) { + nestedIterator = _this._nestedIterator; + if (nestedIterator != null) + try { + if (nestedIterator.moveNext$0()) { + _this._async$_current = nestedIterator.get$current(); + return true; + } else + _this._nestedIterator = null; + } catch (exception) { + errorValue = exception; + errorCode = 1; + _this._nestedIterator = null; + } + value = _this._resumeBody$2(errorCode, errorValue); + if (1 === value) + return true; + if (0 === value) { + _this._async$_current = null; + suspendedBodies = _this._suspendedBodies; + if (suspendedBodies == null || suspendedBodies.length === 0) { + _this._body = A._SyncStarIterator__terminatedBody; + return false; + } + if (0 >= suspendedBodies.length) + return A.ioore(suspendedBodies, -1); + _this._body = suspendedBodies.pop(); + errorCode = 0; + errorValue = null; + continue; + } + if (2 === value) { + errorCode = 0; + errorValue = null; + continue; + } + if (3 === value) { + errorValue = _this._datum; + _this._datum = null; + suspendedBodies = _this._suspendedBodies; + if (suspendedBodies == null || suspendedBodies.length === 0) { + _this._async$_current = null; + _this._body = A._SyncStarIterator__terminatedBody; + throw errorValue; + return false; + } + if (0 >= suspendedBodies.length) + return A.ioore(suspendedBodies, -1); + _this._body = suspendedBodies.pop(); + errorCode = 1; + continue; + } + throw A.wrapException(A.StateError$("sync*")); + } + return false; + }, + _yieldStar$1(iterable) { + var t1, t2, _this = this; + if (iterable instanceof A._SyncStarIterable) { + t1 = iterable._outerHelper(); + t2 = _this._suspendedBodies; + if (t2 == null) + t2 = _this._suspendedBodies = []; + B.JSArray_methods.add$1(t2, _this._body); + _this._body = t1; + return 2; + } else { + _this._nestedIterator = J.get$iterator$ax(iterable); + return 2; + } + }, + $isIterator: 1 + }; + A._SyncStarIterable.prototype = { + get$iterator(_) { + return new A._SyncStarIterator(this._outerHelper(), this.$ti._eval$1("_SyncStarIterator<1>")); + } + }; + A.AsyncError.prototype = { + toString$0(_) { + return A.S(this.error); + }, + $isError: 1, + get$stackTrace() { + return this.stackTrace; + } + }; + A._BroadcastStream.prototype = {}; + A._BroadcastSubscription.prototype = { + _onPause$0() { + }, + _onResume$0() { + }, + set$_async$_next(_next) { + this._async$_next = this.$ti._eval$1("_BroadcastSubscription<1>?")._as(_next); + }, + set$_async$_previous(_previous) { + this._async$_previous = this.$ti._eval$1("_BroadcastSubscription<1>?")._as(_previous); + } + }; + A._BroadcastStreamController.prototype = { + get$_mayAddEvent() { + return this._state < 4; + }, + _removeListener$1(subscription) { + var previous, next; + A._instanceType(this)._eval$1("_BroadcastSubscription<1>")._as(subscription); + previous = subscription._async$_previous; + next = subscription._async$_next; + if (previous == null) + this._firstSubscription = next; + else + previous.set$_async$_next(next); + if (next == null) + this._lastSubscription = previous; + else + next.set$_async$_previous(previous); + subscription.set$_async$_previous(subscription); + subscription.set$_async$_next(subscription); + }, + _subscribe$4(onData, onError, onDone, cancelOnError) { + var t2, t3, t4, t5, t6, t7, subscription, oldLast, _this = this, + t1 = A._instanceType(_this); + t1._eval$1("~(1)?")._as(onData); + type$.nullable_void_Function._as(onDone); + if ((_this._state & 4) !== 0) { + t2 = $.Zone__current; + t1 = new A._DoneStreamSubscription(t2, t1._eval$1("_DoneStreamSubscription<1>")); + A.scheduleMicrotask(t1.get$_onMicrotask()); + if (onDone != null) + t1._onDone = t2.registerCallback$1$1(onDone, type$.void); + return t1; + } + t2 = $.Zone__current; + t3 = cancelOnError ? 1 : 0; + t4 = onError != null ? 32 : 0; + t5 = A._BufferingStreamSubscription__registerDataHandler(t2, onData, t1._precomputed1); + t6 = A._BufferingStreamSubscription__registerErrorHandler(t2, onError); + t7 = onDone == null ? A.async___nullDoneHandler$closure() : onDone; + t1 = t1._eval$1("_BroadcastSubscription<1>"); + subscription = new A._BroadcastSubscription(_this, t5, t6, t2.registerCallback$1$1(t7, type$.void), t2, t3 | t4, t1); + subscription._async$_previous = subscription; + subscription._async$_next = subscription; + t1._as(subscription); + subscription._eventState = _this._state & 1; + oldLast = _this._lastSubscription; + _this._lastSubscription = subscription; + subscription.set$_async$_next(null); + subscription.set$_async$_previous(oldLast); + if (oldLast == null) + _this._firstSubscription = subscription; + else + oldLast.set$_async$_next(subscription); + if (_this._firstSubscription == _this._lastSubscription) + A._runGuarded(_this.onListen); + return subscription; + }, + _recordCancel$1(sub) { + var _this = this, + t1 = A._instanceType(_this); + sub = t1._eval$1("_BroadcastSubscription<1>")._as(t1._eval$1("StreamSubscription<1>")._as(sub)); + if (sub._async$_next === sub) + return null; + t1 = sub._eventState; + if ((t1 & 2) !== 0) + sub._eventState = t1 | 4; + else { + _this._removeListener$1(sub); + if ((_this._state & 2) === 0 && _this._firstSubscription == null) + _this._callOnCancel$0(); + } + return null; + }, + _recordPause$1(subscription) { + A._instanceType(this)._eval$1("StreamSubscription<1>")._as(subscription); + }, + _recordResume$1(subscription) { + A._instanceType(this)._eval$1("StreamSubscription<1>")._as(subscription); + }, + _addEventError$0() { + if ((this._state & 4) !== 0) + return new A.StateError("Cannot add new events after calling close"); + return new A.StateError("Cannot add new events while doing an addStream"); + }, + add$1(_, data) { + var _this = this; + A._instanceType(_this)._precomputed1._as(data); + if (!_this.get$_mayAddEvent()) + throw A.wrapException(_this._addEventError$0()); + _this._sendData$1(data); + }, + addError$2(error, stackTrace) { + var _0_0; + if (!this.get$_mayAddEvent()) + throw A.wrapException(this._addEventError$0()); + _0_0 = A._interceptUserError(error, stackTrace); + this._sendError$2(_0_0.error, _0_0.stackTrace); + }, + close$0() { + var t1, doneFuture, _this = this; + if ((_this._state & 4) !== 0) { + t1 = _this._doneFuture; + t1.toString; + return t1; + } + if (!_this.get$_mayAddEvent()) + throw A.wrapException(_this._addEventError$0()); + _this._state |= 4; + doneFuture = _this._doneFuture; + if (doneFuture == null) + doneFuture = _this._doneFuture = new A._Future($.Zone__current, type$._Future_void); + _this._sendDone$0(); + return doneFuture; + }, + _forEachListener$1(action) { + var t1, subscription, id, next, _this = this; + A._instanceType(_this)._eval$1("~(_BufferingStreamSubscription<1>)")._as(action); + t1 = _this._state; + if ((t1 & 2) !== 0) + throw A.wrapException(A.StateError$(string$.Cannotf)); + subscription = _this._firstSubscription; + if (subscription == null) + return; + id = t1 & 1; + _this._state = t1 ^ 3; + while (subscription != null) { + t1 = subscription._eventState; + if ((t1 & 1) === id) { + subscription._eventState = t1 | 2; + action.call$1(subscription); + t1 = subscription._eventState ^= 1; + next = subscription._async$_next; + if ((t1 & 4) !== 0) + _this._removeListener$1(subscription); + subscription._eventState &= 4294967293; + subscription = next; + } else + subscription = subscription._async$_next; + } + _this._state &= 4294967293; + if (_this._firstSubscription == null) + _this._callOnCancel$0(); + }, + _callOnCancel$0() { + if ((this._state & 4) !== 0) { + var doneFuture = this._doneFuture; + if ((doneFuture._state & 30) === 0) + doneFuture._asyncComplete$1(null); + } + A._runGuarded(this.onCancel); + }, + $isEventSink: 1, + $isStreamSink: 1, + $isStreamController: 1, + $is_StreamControllerLifecycle: 1, + $is_EventSink: 1, + $is_EventDispatch: 1 + }; + A._SyncBroadcastStreamController.prototype = { + get$_mayAddEvent() { + return A._BroadcastStreamController.prototype.get$_mayAddEvent.call(this) && (this._state & 2) === 0; + }, + _addEventError$0() { + if ((this._state & 2) !== 0) + return new A.StateError(string$.Cannotf); + return this.super$_BroadcastStreamController$_addEventError(); + }, + _sendData$1(data) { + var t1, _this = this; + _this.$ti._precomputed1._as(data); + t1 = _this._firstSubscription; + if (t1 == null) + return; + if (t1 === _this._lastSubscription) { + _this._state |= 2; + t1._async$_add$1(data); + _this._state &= 4294967293; + if (_this._firstSubscription == null) + _this._callOnCancel$0(); + return; + } + _this._forEachListener$1(new A._SyncBroadcastStreamController__sendData_closure(_this, data)); + }, + _sendError$2(error, stackTrace) { + if (this._firstSubscription == null) + return; + this._forEachListener$1(new A._SyncBroadcastStreamController__sendError_closure(this, error, stackTrace)); + }, + _sendDone$0() { + var _this = this; + if (_this._firstSubscription != null) + _this._forEachListener$1(new A._SyncBroadcastStreamController__sendDone_closure(_this)); + else + _this._doneFuture._asyncComplete$1(null); + } + }; + A._SyncBroadcastStreamController__sendData_closure.prototype = { + call$1(subscription) { + this.$this.$ti._eval$1("_BufferingStreamSubscription<1>")._as(subscription)._async$_add$1(this.data); + }, + $signature() { + return this.$this.$ti._eval$1("~(_BufferingStreamSubscription<1>)"); + } + }; + A._SyncBroadcastStreamController__sendError_closure.prototype = { + call$1(subscription) { + this.$this.$ti._eval$1("_BufferingStreamSubscription<1>")._as(subscription)._addError$2(this.error, this.stackTrace); + }, + $signature() { + return this.$this.$ti._eval$1("~(_BufferingStreamSubscription<1>)"); + } + }; + A._SyncBroadcastStreamController__sendDone_closure.prototype = { + call$1(subscription) { + this.$this.$ti._eval$1("_BufferingStreamSubscription<1>")._as(subscription)._close$0(); + }, + $signature() { + return this.$this.$ti._eval$1("~(_BufferingStreamSubscription<1>)"); + } + }; + A.Future_Future_closure.prototype = { + call$0() { + var e, s, exception, t1, t2, t3, computationResult = null; + try { + computationResult = this.computation.call$0(); + } catch (exception) { + e = A.unwrapException(exception); + s = A.getTraceFromException(exception); + t1 = e; + t2 = s; + t3 = A._interceptError(t1, t2); + if (t3 == null) + t1 = new A.AsyncError(t1, t2); + else + t1 = t3; + this.result._completeErrorObject$1(t1); + return; + } + this.result._complete$1(computationResult); + }, + $signature: 0 + }; + A.Future_Future$delayed_closure.prototype = { + call$0() { + this.T._as(null); + this.result._complete$1(null); + }, + $signature: 0 + }; + A.Future_wait_handleError.prototype = { + call$2(theError, theStackTrace) { + var t1, t2, _this = this; + A._asObject(theError); + type$.StackTrace._as(theStackTrace); + t1 = _this._box_0; + t2 = --t1.remaining; + if (t1.values != null) { + t1.values = null; + t1.error = theError; + t1.stackTrace = theStackTrace; + if (t2 === 0 || _this.eagerError) + _this._future._completeErrorObject$1(new A.AsyncError(theError, theStackTrace)); + } else if (t2 === 0 && !_this.eagerError) { + t2 = t1.error; + t2.toString; + t1 = t1.stackTrace; + t1.toString; + _this._future._completeErrorObject$1(new A.AsyncError(t2, t1)); + } + }, + $signature: 7 + }; + A.Future_wait_closure.prototype = { + call$1(value) { + var remainingResults, valueList, t1, value0, t3, t4, _i, t5, _this = this, + t2 = _this.T; + t2._as(value); + t3 = _this._box_0; + remainingResults = --t3.remaining; + valueList = t3.values; + if (valueList != null) { + J.$indexSet$ax(valueList, _this.pos, value); + if (J.$eq$(remainingResults, 0)) { + t1 = A._setArrayType([], t2._eval$1("JSArray<0>")); + for (t3 = valueList, t4 = t3.length, _i = 0; _i < t3.length; t3.length === t4 || (0, A.throwConcurrentModificationError)(t3), ++_i) { + value0 = t3[_i]; + t5 = value0; + if (t5 == null) + t5 = t2._as(t5); + J.add$1$ax(t1, t5); + } + _this._future._completeWithValue$1(t1); + } + } else if (J.$eq$(remainingResults, 0) && !_this.eagerError) { + t1 = t3.error; + t1.toString; + t3 = t3.stackTrace; + t3.toString; + _this._future._completeErrorObject$1(new A.AsyncError(t1, t3)); + } + }, + $signature() { + return this.T._eval$1("Null(0)"); + } + }; + A._Completer.prototype = { + completeError$2(error, stackTrace) { + A._asObject(error); + type$.nullable_StackTrace._as(stackTrace); + if ((this.future._state & 30) !== 0) + throw A.wrapException(A.StateError$("Future already completed")); + this._completeErrorObject$1(A._interceptUserError(error, stackTrace)); + }, + completeError$1(error) { + return this.completeError$2(error, null); + }, + $isCompleter: 1 + }; + A._AsyncCompleter.prototype = { + complete$1(value) { + var t2, + t1 = this.$ti; + t1._eval$1("1/?")._as(value); + t2 = this.future; + if ((t2._state & 30) !== 0) + throw A.wrapException(A.StateError$("Future already completed")); + t2._asyncComplete$1(t1._eval$1("1/")._as(value)); + }, + complete$0() { + return this.complete$1(null); + }, + _completeErrorObject$1(error) { + this.future._asyncCompleteErrorObject$1(error); + } + }; + A._SyncCompleter.prototype = { + complete$1(value) { + var t2, + t1 = this.$ti; + t1._eval$1("1/?")._as(value); + t2 = this.future; + if ((t2._state & 30) !== 0) + throw A.wrapException(A.StateError$("Future already completed")); + t2._complete$1(t1._eval$1("1/")._as(value)); + }, + complete$0() { + return this.complete$1(null); + }, + _completeErrorObject$1(error) { + this.future._completeErrorObject$1(error); + } + }; + A._FutureListener.prototype = { + matchesErrorTest$1(asyncError) { + if ((this.state & 15) !== 6) + return true; + return this.result._zone.runUnary$2$2(type$.bool_Function_Object._as(this.callback), asyncError.error, type$.bool, type$.Object); + }, + handleError$1(asyncError) { + var exception, _this = this, + errorCallback = _this.errorCallback, + result = null, + t1 = type$.dynamic, + t2 = type$.Object, + t3 = asyncError.error, + t4 = _this.result._zone; + if (type$.dynamic_Function_Object_StackTrace._is(errorCallback)) + result = t4.runBinary$3$3(errorCallback, t3, asyncError.stackTrace, t1, t2, type$.StackTrace); + else + result = t4.runUnary$2$2(type$.dynamic_Function_Object._as(errorCallback), t3, t1, t2); + try { + t1 = _this.$ti._eval$1("2/")._as(result); + return t1; + } catch (exception) { + if (type$.TypeError._is(A.unwrapException(exception))) { + if ((_this.state & 1) !== 0) + throw A.wrapException(A.ArgumentError$("The error handler of Future.then must return a value of the returned future's type", "onError")); + throw A.wrapException(A.ArgumentError$("The error handler of Future.catchError must return a value of the future's type", "onError")); + } else + throw exception; + } + } + }; + A._Future.prototype = { + then$1$2$onError(f, onError, $R) { + var currentZone, result, t2, + t1 = this.$ti; + t1._bind$1($R)._eval$1("1/(2)")._as(f); + currentZone = $.Zone__current; + if (currentZone === B.C__RootZone) { + if (onError != null && !type$.dynamic_Function_Object_StackTrace._is(onError) && !type$.dynamic_Function_Object._is(onError)) + throw A.wrapException(A.ArgumentError$value(onError, "onError", string$.Error_)); + } else { + f = currentZone.registerUnaryCallback$2$1(f, $R._eval$1("0/"), t1._precomputed1); + if (onError != null) + onError = A._registerErrorHandler(onError, currentZone); + } + result = new A._Future($.Zone__current, $R._eval$1("_Future<0>")); + t2 = onError == null ? 1 : 3; + this._addListener$1(new A._FutureListener(result, t2, f, onError, t1._eval$1("@<1>")._bind$1($R)._eval$1("_FutureListener<1,2>"))); + return result; + }, + then$1$1(f, $R) { + return this.then$1$2$onError(f, null, $R); + }, + _thenAwait$1$2(f, onError, $E) { + var result, + t1 = this.$ti; + t1._bind$1($E)._eval$1("1/(2)")._as(f); + result = new A._Future($.Zone__current, $E._eval$1("_Future<0>")); + this._addListener$1(new A._FutureListener(result, 19, f, onError, t1._eval$1("@<1>")._bind$1($E)._eval$1("_FutureListener<1,2>"))); + return result; + }, + whenComplete$1(action) { + var t1, t2, result; + type$.dynamic_Function._as(action); + t1 = this.$ti; + t2 = $.Zone__current; + result = new A._Future(t2, t1); + if (t2 !== B.C__RootZone) + action = t2.registerCallback$1$1(action, type$.dynamic); + this._addListener$1(new A._FutureListener(result, 8, action, null, t1._eval$1("_FutureListener<1,1>"))); + return result; + }, + _setErrorObject$1(error) { + this._state = this._state & 1 | 16; + this._resultOrListeners = error; + }, + _cloneResult$1(source) { + this._state = source._state & 30 | this._state & 1; + this._resultOrListeners = source._resultOrListeners; + }, + _addListener$1(listener) { + var source, _this = this, + t1 = _this._state; + if (t1 <= 3) { + listener._nextListener = type$.nullable__FutureListener_dynamic_dynamic._as(_this._resultOrListeners); + _this._resultOrListeners = listener; + } else { + if ((t1 & 4) !== 0) { + source = type$._Future_dynamic._as(_this._resultOrListeners); + if ((source._state & 24) === 0) { + source._addListener$1(listener); + return; + } + _this._cloneResult$1(source); + } + _this._zone.scheduleMicrotask$1(new A._Future__addListener_closure(_this, listener)); + } + }, + _prependListeners$1(listeners) { + var t1, existingListeners, next, cursor, next0, source, _this = this, _box_0 = {}; + _box_0.listeners = listeners; + if (listeners == null) + return; + t1 = _this._state; + if (t1 <= 3) { + existingListeners = type$.nullable__FutureListener_dynamic_dynamic._as(_this._resultOrListeners); + _this._resultOrListeners = listeners; + if (existingListeners != null) { + next = listeners._nextListener; + for (cursor = listeners; next != null; cursor = next, next = next0) + next0 = next._nextListener; + cursor._nextListener = existingListeners; + } + } else { + if ((t1 & 4) !== 0) { + source = type$._Future_dynamic._as(_this._resultOrListeners); + if ((source._state & 24) === 0) { + source._prependListeners$1(listeners); + return; + } + _this._cloneResult$1(source); + } + _box_0.listeners = _this._reverseListeners$1(listeners); + _this._zone.scheduleMicrotask$1(new A._Future__prependListeners_closure(_box_0, _this)); + } + }, + _removeListeners$0() { + var current = type$.nullable__FutureListener_dynamic_dynamic._as(this._resultOrListeners); + this._resultOrListeners = null; + return this._reverseListeners$1(current); + }, + _reverseListeners$1(listeners) { + var current, prev, next; + for (current = listeners, prev = null; current != null; prev = current, current = next) { + next = current._nextListener; + current._nextListener = prev; + } + return prev; + }, + _complete$1(value) { + var listeners, _this = this, + t1 = _this.$ti; + t1._eval$1("1/")._as(value); + if (t1._eval$1("Future<1>")._is(value)) + A._Future__chainCoreFuture(value, _this, true); + else { + listeners = _this._removeListeners$0(); + t1._precomputed1._as(value); + _this._state = 8; + _this._resultOrListeners = value; + A._Future__propagateToListeners(_this, listeners); + } + }, + _completeWithValue$1(value) { + var listeners, _this = this; + _this.$ti._precomputed1._as(value); + listeners = _this._removeListeners$0(); + _this._state = 8; + _this._resultOrListeners = value; + A._Future__propagateToListeners(_this, listeners); + }, + _completeWithResultOf$1(source) { + var t1, t2, listeners, _this = this; + if ((source._state & 16) !== 0) { + t1 = _this._zone; + t2 = source._zone; + t1 = !(t1 === t2 || t1.get$errorZone() === t2.get$errorZone()); + } else + t1 = false; + if (t1) + return; + listeners = _this._removeListeners$0(); + _this._cloneResult$1(source); + A._Future__propagateToListeners(_this, listeners); + }, + _completeErrorObject$1(error) { + var listeners = this._removeListeners$0(); + this._setErrorObject$1(error); + A._Future__propagateToListeners(this, listeners); + }, + _completeError$2(error, stackTrace) { + A._asObject(error); + type$.StackTrace._as(stackTrace); + this._completeErrorObject$1(new A.AsyncError(error, stackTrace)); + }, + _asyncComplete$1(value) { + var t1 = this.$ti; + t1._eval$1("1/")._as(value); + if (t1._eval$1("Future<1>")._is(value)) { + this._chainFuture$1(value); + return; + } + this._asyncCompleteWithValue$1(value); + }, + _asyncCompleteWithValue$1(value) { + var _this = this; + _this.$ti._precomputed1._as(value); + _this._state ^= 2; + _this._zone.scheduleMicrotask$1(new A._Future__asyncCompleteWithValue_closure(_this, value)); + }, + _chainFuture$1(value) { + A._Future__chainCoreFuture(this.$ti._eval$1("Future<1>")._as(value), this, false); + return; + }, + _asyncCompleteErrorObject$1(error) { + this._state ^= 2; + this._zone.scheduleMicrotask$1(new A._Future__asyncCompleteErrorObject_closure(this, error)); + }, + $isFuture: 1 + }; + A._Future__addListener_closure.prototype = { + call$0() { + A._Future__propagateToListeners(this.$this, this.listener); + }, + $signature: 0 + }; + A._Future__prependListeners_closure.prototype = { + call$0() { + A._Future__propagateToListeners(this.$this, this._box_0.listeners); + }, + $signature: 0 + }; + A._Future__chainCoreFuture_closure.prototype = { + call$0() { + A._Future__chainCoreFuture(this._box_0.source, this.target, true); + }, + $signature: 0 + }; + A._Future__asyncCompleteWithValue_closure.prototype = { + call$0() { + this.$this._completeWithValue$1(this.value); + }, + $signature: 0 + }; + A._Future__asyncCompleteErrorObject_closure.prototype = { + call$0() { + this.$this._completeErrorObject$1(this.error); + }, + $signature: 0 + }; + A._Future__propagateToListeners_handleWhenCompleteCallback.prototype = { + call$0() { + var e, s, t1, exception, t2, t3, originalSource, joinedResult, _this = this, completeResult = null; + try { + t1 = _this._box_0.listener; + completeResult = t1.result._zone.run$1$1(type$.dynamic_Function._as(t1.callback), type$.dynamic); + } catch (exception) { + e = A.unwrapException(exception); + s = A.getTraceFromException(exception); + if (_this.hasError && type$.AsyncError._as(_this._box_1.source._resultOrListeners).error === e) { + t1 = _this._box_0; + t1.listenerValueOrError = type$.AsyncError._as(_this._box_1.source._resultOrListeners); + } else { + t1 = e; + t2 = s; + if (t2 == null) + t2 = A.AsyncError_defaultStackTrace(t1); + t3 = _this._box_0; + t3.listenerValueOrError = new A.AsyncError(t1, t2); + t1 = t3; + } + t1.listenerHasError = true; + return; + } + if (completeResult instanceof A._Future && (completeResult._state & 24) !== 0) { + if ((completeResult._state & 16) !== 0) { + t1 = _this._box_0; + t1.listenerValueOrError = type$.AsyncError._as(completeResult._resultOrListeners); + t1.listenerHasError = true; + } + return; + } + if (completeResult instanceof A._Future) { + originalSource = _this._box_1.source; + joinedResult = new A._Future(originalSource._zone, originalSource.$ti); + completeResult.then$1$2$onError(new A._Future__propagateToListeners_handleWhenCompleteCallback_closure(joinedResult, originalSource), new A._Future__propagateToListeners_handleWhenCompleteCallback_closure0(joinedResult), type$.void); + t1 = _this._box_0; + t1.listenerValueOrError = joinedResult; + t1.listenerHasError = false; + } + }, + $signature: 0 + }; + A._Future__propagateToListeners_handleWhenCompleteCallback_closure.prototype = { + call$1(__wc0_formal) { + this.joinedResult._completeWithResultOf$1(this.originalSource); + }, + $signature: 25 + }; + A._Future__propagateToListeners_handleWhenCompleteCallback_closure0.prototype = { + call$2(e, s) { + A._asObject(e); + type$.StackTrace._as(s); + this.joinedResult._completeErrorObject$1(new A.AsyncError(e, s)); + }, + $signature: 58 + }; + A._Future__propagateToListeners_handleValueCallback.prototype = { + call$0() { + var e, s, t1, t2, t3, t4, t5, exception; + try { + t1 = this._box_0; + t2 = t1.listener; + t3 = t2.$ti; + t4 = t3._precomputed1; + t5 = t4._as(this.sourceResult); + t1.listenerValueOrError = t2.result._zone.runUnary$2$2(t3._eval$1("2/(1)")._as(t2.callback), t5, t3._eval$1("2/"), t4); + } catch (exception) { + e = A.unwrapException(exception); + s = A.getTraceFromException(exception); + t1 = e; + t2 = s; + if (t2 == null) + t2 = A.AsyncError_defaultStackTrace(t1); + t3 = this._box_0; + t3.listenerValueOrError = new A.AsyncError(t1, t2); + t3.listenerHasError = true; + } + }, + $signature: 0 + }; + A._Future__propagateToListeners_handleError.prototype = { + call$0() { + var asyncError, e, s, t1, exception, t2, t3, _this = this; + try { + asyncError = type$.AsyncError._as(_this._box_1.source._resultOrListeners); + t1 = _this._box_0; + if (t1.listener.matchesErrorTest$1(asyncError) && t1.listener.errorCallback != null) { + t1.listenerValueOrError = t1.listener.handleError$1(asyncError); + t1.listenerHasError = false; + } + } catch (exception) { + e = A.unwrapException(exception); + s = A.getTraceFromException(exception); + t1 = type$.AsyncError._as(_this._box_1.source._resultOrListeners); + if (t1.error === e) { + t2 = _this._box_0; + t2.listenerValueOrError = t1; + t1 = t2; + } else { + t1 = e; + t2 = s; + if (t2 == null) + t2 = A.AsyncError_defaultStackTrace(t1); + t3 = _this._box_0; + t3.listenerValueOrError = new A.AsyncError(t1, t2); + t1 = t3; + } + t1.listenerHasError = true; + } + }, + $signature: 0 + }; + A._AsyncCallbackEntry.prototype = {}; + A.Stream.prototype = { + get$length(_) { + var t1 = {}, + future = new A._Future($.Zone__current, type$._Future_int); + t1.count = 0; + this.listen$4$cancelOnError$onDone$onError(new A.Stream_length_closure(t1, this), true, new A.Stream_length_closure0(t1, future), future.get$_completeError()); + return future; + }, + get$first(_) { + var future = new A._Future($.Zone__current, A._instanceType(this)._eval$1("_Future")), + subscription = this.listen$4$cancelOnError$onDone$onError(null, true, new A.Stream_first_closure(future), future.get$_completeError()); + subscription.onData$1(new A.Stream_first_closure0(this, subscription, future)); + return future; + }, + firstWhere$1(_, test) { + var future, subscription, _this = this, + t1 = A._instanceType(_this); + t1._eval$1("bool(Stream.T)")._as(test); + future = new A._Future($.Zone__current, t1._eval$1("_Future")); + subscription = _this.listen$4$cancelOnError$onDone$onError(null, true, new A.Stream_firstWhere_closure(_this, null, future), future.get$_completeError()); + subscription.onData$1(new A.Stream_firstWhere_closure0(_this, test, subscription, future)); + return future; + } + }; + A.Stream_length_closure.prototype = { + call$1(__wc0_formal) { + A._instanceType(this.$this)._eval$1("Stream.T")._as(__wc0_formal); + ++this._box_0.count; + }, + $signature() { + return A._instanceType(this.$this)._eval$1("~(Stream.T)"); + } + }; + A.Stream_length_closure0.prototype = { + call$0() { + this.future._complete$1(this._box_0.count); + }, + $signature: 0 + }; + A.Stream_first_closure.prototype = { + call$0() { + var t1, + error = new A.StateError("No element"); + A.Primitives_trySetStackTrace(error, B._StringStackTrace_OdL); + t1 = A._interceptError(error, B._StringStackTrace_OdL); + if (t1 == null) + t1 = new A.AsyncError(error, B._StringStackTrace_OdL); + this.future._completeErrorObject$1(t1); + }, + $signature: 0 + }; + A.Stream_first_closure0.prototype = { + call$1(value) { + A._cancelAndValue(this.subscription, this.future, A._instanceType(this.$this)._eval$1("Stream.T")._as(value)); + }, + $signature() { + return A._instanceType(this.$this)._eval$1("~(Stream.T)"); + } + }; + A.Stream_firstWhere_closure.prototype = { + call$0() { + var t1, + error = new A.StateError("No element"); + A.Primitives_trySetStackTrace(error, B._StringStackTrace_OdL); + t1 = A._interceptError(error, B._StringStackTrace_OdL); + if (t1 == null) + t1 = new A.AsyncError(error, B._StringStackTrace_OdL); + this.future._completeErrorObject$1(t1); + }, + $signature: 0 + }; + A.Stream_firstWhere_closure0.prototype = { + call$1(value) { + var t1, t2, _this = this; + A._instanceType(_this.$this)._eval$1("Stream.T")._as(value); + t1 = _this.subscription; + t2 = _this.future; + A._runUserCode(new A.Stream_firstWhere__closure(_this.test, value), new A.Stream_firstWhere__closure0(t1, t2, value), A._cancelAndErrorClosure(t1, t2), type$.bool); + }, + $signature() { + return A._instanceType(this.$this)._eval$1("~(Stream.T)"); + } + }; + A.Stream_firstWhere__closure.prototype = { + call$0() { + return this.test.call$1(this.value); + }, + $signature: 35 + }; + A.Stream_firstWhere__closure0.prototype = { + call$1(isMatch) { + if (A._asBool(isMatch)) + A._cancelAndValue(this.subscription, this.future, this.value); + }, + $signature: 73 + }; + A.StreamTransformerBase.prototype = {$isStreamTransformer: 1}; + A._StreamController.prototype = { + get$_pendingEvents() { + var t1, _this = this; + if ((_this._state & 8) === 0) + return A._instanceType(_this)._eval$1("_PendingEvents<1>?")._as(_this._varData); + t1 = A._instanceType(_this); + return t1._eval$1("_PendingEvents<1>?")._as(t1._eval$1("_StreamControllerAddStreamState<1>")._as(_this._varData).get$_varData()); + }, + _ensurePendingEvents$0() { + var events, t1, _this = this; + if ((_this._state & 8) === 0) { + events = _this._varData; + if (events == null) + events = _this._varData = new A._PendingEvents(A._instanceType(_this)._eval$1("_PendingEvents<1>")); + return A._instanceType(_this)._eval$1("_PendingEvents<1>")._as(events); + } + t1 = A._instanceType(_this); + events = t1._eval$1("_StreamControllerAddStreamState<1>")._as(_this._varData).get$_varData(); + return t1._eval$1("_PendingEvents<1>")._as(events); + }, + get$_subscription() { + var varData = this._varData; + if ((this._state & 8) !== 0) + varData = type$._StreamControllerAddStreamState_nullable_Object._as(varData).get$_varData(); + return A._instanceType(this)._eval$1("_ControllerSubscription<1>")._as(varData); + }, + _badEventState$0() { + if ((this._state & 4) !== 0) + return new A.StateError("Cannot add event after closing"); + return new A.StateError("Cannot add event while adding a stream"); + }, + _ensureDoneFuture$0() { + var t1 = this._doneFuture; + if (t1 == null) + t1 = this._doneFuture = (this._state & 2) !== 0 ? $.$get$Future__nullFuture() : new A._Future($.Zone__current, type$._Future_void); + return t1; + }, + add$1(_, value) { + var t2, _this = this, + t1 = A._instanceType(_this); + t1._precomputed1._as(value); + t2 = _this._state; + if (t2 >= 4) + throw A.wrapException(_this._badEventState$0()); + if ((t2 & 1) !== 0) + _this._sendData$1(value); + else if ((t2 & 3) === 0) + _this._ensurePendingEvents$0().add$1(0, new A._DelayedData(value, t1._eval$1("_DelayedData<1>"))); + }, + addError$2(error, stackTrace) { + var _0_0, t1, _this = this; + A._asObject(error); + type$.nullable_StackTrace._as(stackTrace); + if (_this._state >= 4) + throw A.wrapException(_this._badEventState$0()); + _0_0 = A._interceptUserError(error, stackTrace); + error = _0_0.error; + stackTrace = _0_0.stackTrace; + t1 = _this._state; + if ((t1 & 1) !== 0) + _this._sendError$2(error, stackTrace); + else if ((t1 & 3) === 0) + _this._ensurePendingEvents$0().add$1(0, new A._DelayedError(error, stackTrace)); + }, + addError$1(error) { + return this.addError$2(error, null); + }, + close$0() { + var _this = this, + t1 = _this._state; + if ((t1 & 4) !== 0) + return _this._ensureDoneFuture$0(); + if (t1 >= 4) + throw A.wrapException(_this._badEventState$0()); + t1 = _this._state = t1 | 4; + if ((t1 & 1) !== 0) + _this._sendDone$0(); + else if ((t1 & 3) === 0) + _this._ensurePendingEvents$0().add$1(0, B.C__DelayedDone); + return _this._ensureDoneFuture$0(); + }, + _subscribe$4(onData, onError, onDone, cancelOnError) { + var subscription, pendingEvents, addState, _this = this, + t1 = A._instanceType(_this); + t1._eval$1("~(1)?")._as(onData); + type$.nullable_void_Function._as(onDone); + if ((_this._state & 3) !== 0) + throw A.wrapException(A.StateError$("Stream has already been listened to.")); + subscription = A._ControllerSubscription$(_this, onData, onError, onDone, cancelOnError, t1._precomputed1); + pendingEvents = _this.get$_pendingEvents(); + if (((_this._state |= 1) & 8) !== 0) { + addState = t1._eval$1("_StreamControllerAddStreamState<1>")._as(_this._varData); + addState.set$_varData(subscription); + addState.resume$0(); + } else + _this._varData = subscription; + subscription._setPendingEvents$1(pendingEvents); + subscription._guardCallback$1(new A._StreamController__subscribe_closure(_this)); + return subscription; + }, + _recordCancel$1(subscription) { + var result, onCancel, cancelResult, e, s, exception, result0, t2, _this = this, + t1 = A._instanceType(_this); + t1._eval$1("StreamSubscription<1>")._as(subscription); + result = null; + if ((_this._state & 8) !== 0) + result = t1._eval$1("_StreamControllerAddStreamState<1>")._as(_this._varData).cancel$0(); + _this._varData = null; + _this._state = _this._state & 4294967286 | 2; + onCancel = _this.onCancel; + if (onCancel != null) + if (result == null) + try { + cancelResult = onCancel.call$0(); + if (cancelResult instanceof A._Future) + result = cancelResult; + } catch (exception) { + e = A.unwrapException(exception); + s = A.getTraceFromException(exception); + result0 = new A._Future($.Zone__current, type$._Future_void); + t1 = A._asObject(e); + t2 = type$.StackTrace._as(s); + result0._asyncCompleteErrorObject$1(new A.AsyncError(t1, t2)); + result = result0; + } + else + result = result.whenComplete$1(onCancel); + t1 = new A._StreamController__recordCancel_complete(_this); + if (result != null) + result = result.whenComplete$1(t1); + else + t1.call$0(); + return result; + }, + _recordPause$1(subscription) { + var _this = this, + t1 = A._instanceType(_this); + t1._eval$1("StreamSubscription<1>")._as(subscription); + if ((_this._state & 8) !== 0) + t1._eval$1("_StreamControllerAddStreamState<1>")._as(_this._varData).pause$0(); + A._runGuarded(_this.onPause); + }, + _recordResume$1(subscription) { + var _this = this, + t1 = A._instanceType(_this); + t1._eval$1("StreamSubscription<1>")._as(subscription); + if ((_this._state & 8) !== 0) + t1._eval$1("_StreamControllerAddStreamState<1>")._as(_this._varData).resume$0(); + A._runGuarded(_this.onResume); + }, + set$onListen(onListen) { + this.onListen = type$.nullable_void_Function._as(onListen); + }, + set$onResume(onResume) { + this.onResume = type$.nullable_void_Function._as(onResume); + }, + $isEventSink: 1, + $isStreamSink: 1, + $isStreamController: 1, + $is_StreamControllerLifecycle: 1, + $is_EventSink: 1, + $is_EventDispatch: 1 + }; + A._StreamController__subscribe_closure.prototype = { + call$0() { + A._runGuarded(this.$this.onListen); + }, + $signature: 0 + }; + A._StreamController__recordCancel_complete.prototype = { + call$0() { + var doneFuture = this.$this._doneFuture; + if (doneFuture != null && (doneFuture._state & 30) === 0) + doneFuture._asyncComplete$1(null); + }, + $signature: 0 + }; + A._SyncStreamControllerDispatch.prototype = { + _sendData$1(data) { + this.$ti._precomputed1._as(data); + this.get$_subscription()._async$_add$1(data); + }, + _sendError$2(error, stackTrace) { + this.get$_subscription()._addError$2(error, stackTrace); + }, + _sendDone$0() { + this.get$_subscription()._close$0(); + } + }; + A._AsyncStreamControllerDispatch.prototype = { + _sendData$1(data) { + var t1 = this.$ti; + t1._precomputed1._as(data); + this.get$_subscription()._addPending$1(new A._DelayedData(data, t1._eval$1("_DelayedData<1>"))); + }, + _sendError$2(error, stackTrace) { + this.get$_subscription()._addPending$1(new A._DelayedError(error, stackTrace)); + }, + _sendDone$0() { + this.get$_subscription()._addPending$1(B.C__DelayedDone); + } + }; + A._AsyncStreamController.prototype = {}; + A._SyncStreamController.prototype = {}; + A._ControllerStream.prototype = { + get$hashCode(_) { + return (A.Primitives_objectHashCode(this._controller) ^ 892482866) >>> 0; + }, + $eq(_, other) { + if (other == null) + return false; + if (this === other) + return true; + return other instanceof A._ControllerStream && other._controller === this._controller; + } + }; + A._ControllerSubscription.prototype = { + _onCancel$0() { + return this._controller._recordCancel$1(this); + }, + _onPause$0() { + this._controller._recordPause$1(this); + }, + _onResume$0() { + this._controller._recordResume$1(this); + } + }; + A._StreamSinkWrapper.prototype = { + add$1(_, data) { + this._async$_target.add$1(0, this.$ti._precomputed1._as(data)); + }, + addError$2(error, stackTrace) { + this._async$_target.addError$2(error, stackTrace); + }, + close$0() { + return this._async$_target.close$0(); + }, + $isEventSink: 1, + $isStreamSink: 1 + }; + A._BufferingStreamSubscription.prototype = { + _setPendingEvents$1(pendingEvents) { + var _this = this; + A._instanceType(_this)._eval$1("_PendingEvents<_BufferingStreamSubscription.T>?")._as(pendingEvents); + if (pendingEvents == null) + return; + _this._pending = pendingEvents; + if (pendingEvents.lastPendingEvent != null) { + _this._state = (_this._state | 128) >>> 0; + pendingEvents.schedule$1(_this); + } + }, + onData$1(handleData) { + var t1 = A._instanceType(this); + this._async$_onData = A._BufferingStreamSubscription__registerDataHandler(this._zone, t1._eval$1("~(_BufferingStreamSubscription.T)?")._as(handleData), t1._eval$1("_BufferingStreamSubscription.T")); + }, + onError$1(handleError) { + var _this = this; + _this._state = (_this._state & 4294967263) >>> 0; + _this._onError = A._BufferingStreamSubscription__registerErrorHandler(_this._zone, handleError); + }, + pause$0() { + var t2, t3, _this = this, + t1 = _this._state; + if ((t1 & 8) !== 0) + return; + t2 = (t1 + 256 | 4) >>> 0; + _this._state = t2; + if (t1 < 256) { + t3 = _this._pending; + if (t3 != null) + if (t3._state === 1) + t3._state = 3; + } + if ((t1 & 4) === 0 && (t2 & 64) === 0) + _this._guardCallback$1(_this.get$_onPause()); + }, + resume$0() { + var _this = this, + t1 = _this._state; + if ((t1 & 8) !== 0) + return; + if (t1 >= 256) { + t1 = _this._state = t1 - 256; + if (t1 < 256) + if ((t1 & 128) !== 0 && _this._pending.lastPendingEvent != null) + _this._pending.schedule$1(_this); + else { + t1 = (t1 & 4294967291) >>> 0; + _this._state = t1; + if ((t1 & 64) === 0) + _this._guardCallback$1(_this.get$_onResume()); + } + } + }, + cancel$0() { + var _this = this, + t1 = (_this._state & 4294967279) >>> 0; + _this._state = t1; + if ((t1 & 8) === 0) + _this._cancel$0(); + t1 = _this._cancelFuture; + return t1 == null ? $.$get$Future__nullFuture() : t1; + }, + _cancel$0() { + var t2, _this = this, + t1 = _this._state = (_this._state | 8) >>> 0; + if ((t1 & 128) !== 0) { + t2 = _this._pending; + if (t2._state === 1) + t2._state = 3; + } + if ((t1 & 64) === 0) + _this._pending = null; + _this._cancelFuture = _this._onCancel$0(); + }, + _async$_add$1(data) { + var t2, _this = this, + t1 = A._instanceType(_this); + t1._eval$1("_BufferingStreamSubscription.T")._as(data); + t2 = _this._state; + if ((t2 & 8) !== 0) + return; + if (t2 < 64) + _this._sendData$1(data); + else + _this._addPending$1(new A._DelayedData(data, t1._eval$1("_DelayedData<_BufferingStreamSubscription.T>"))); + }, + _addError$2(error, stackTrace) { + var t1; + if (type$.Error._is(error)) + A.Primitives_trySetStackTrace(error, stackTrace); + t1 = this._state; + if ((t1 & 8) !== 0) + return; + if (t1 < 64) + this._sendError$2(error, stackTrace); + else + this._addPending$1(new A._DelayedError(error, stackTrace)); + }, + _close$0() { + var _this = this, + t1 = _this._state; + if ((t1 & 8) !== 0) + return; + t1 = (t1 | 2) >>> 0; + _this._state = t1; + if (t1 < 64) + _this._sendDone$0(); + else + _this._addPending$1(B.C__DelayedDone); + }, + _onPause$0() { + }, + _onResume$0() { + }, + _onCancel$0() { + return null; + }, + _addPending$1($event) { + var t1, _this = this, + pending = _this._pending; + if (pending == null) + pending = _this._pending = new A._PendingEvents(A._instanceType(_this)._eval$1("_PendingEvents<_BufferingStreamSubscription.T>")); + pending.add$1(0, $event); + t1 = _this._state; + if ((t1 & 128) === 0) { + t1 = (t1 | 128) >>> 0; + _this._state = t1; + if (t1 < 256) + pending.schedule$1(_this); + } + }, + _sendData$1(data) { + var t2, _this = this, + t1 = A._instanceType(_this)._eval$1("_BufferingStreamSubscription.T"); + t1._as(data); + t2 = _this._state; + _this._state = (t2 | 64) >>> 0; + _this._zone.runUnaryGuarded$1$2(_this._async$_onData, data, t1); + _this._state = (_this._state & 4294967231) >>> 0; + _this._checkState$1((t2 & 4) !== 0); + }, + _sendError$2(error, stackTrace) { + var cancelFuture, _this = this, + t1 = _this._state, + t2 = new A._BufferingStreamSubscription__sendError_sendError(_this, error, stackTrace); + if ((t1 & 1) !== 0) { + _this._state = (t1 | 16) >>> 0; + _this._cancel$0(); + cancelFuture = _this._cancelFuture; + if (cancelFuture != null && cancelFuture !== $.$get$Future__nullFuture()) + cancelFuture.whenComplete$1(t2); + else + t2.call$0(); + } else { + t2.call$0(); + _this._checkState$1((t1 & 4) !== 0); + } + }, + _sendDone$0() { + var cancelFuture, _this = this, + t1 = new A._BufferingStreamSubscription__sendDone_sendDone(_this); + _this._cancel$0(); + _this._state = (_this._state | 16) >>> 0; + cancelFuture = _this._cancelFuture; + if (cancelFuture != null && cancelFuture !== $.$get$Future__nullFuture()) + cancelFuture.whenComplete$1(t1); + else + t1.call$0(); + }, + _guardCallback$1(callback) { + var t1, _this = this; + type$.void_Function._as(callback); + t1 = _this._state; + _this._state = (t1 | 64) >>> 0; + callback.call$0(); + _this._state = (_this._state & 4294967231) >>> 0; + _this._checkState$1((t1 & 4) !== 0); + }, + _checkState$1(wasInputPaused) { + var t2, isInputPaused, _this = this, + t1 = _this._state; + if ((t1 & 128) !== 0 && _this._pending.lastPendingEvent == null) { + t1 = _this._state = (t1 & 4294967167) >>> 0; + t2 = false; + if ((t1 & 4) !== 0) + if (t1 < 256) { + t2 = _this._pending; + t2 = t2 == null ? null : t2.lastPendingEvent == null; + t2 = t2 !== false; + } + if (t2) { + t1 = (t1 & 4294967291) >>> 0; + _this._state = t1; + } + } + for (;; wasInputPaused = isInputPaused) { + if ((t1 & 8) !== 0) { + _this._pending = null; + return; + } + isInputPaused = (t1 & 4) !== 0; + if (wasInputPaused === isInputPaused) + break; + _this._state = (t1 ^ 64) >>> 0; + if (isInputPaused) + _this._onPause$0(); + else + _this._onResume$0(); + t1 = (_this._state & 4294967231) >>> 0; + _this._state = t1; + } + if ((t1 & 128) !== 0 && t1 < 256) + _this._pending.schedule$1(_this); + }, + $isStreamSubscription: 1, + $is_EventSink: 1, + $is_EventDispatch: 1 + }; + A._BufferingStreamSubscription__sendError_sendError.prototype = { + call$0() { + var onError, t3, t4, + t1 = this.$this, + t2 = t1._state; + if ((t2 & 8) !== 0 && (t2 & 16) === 0) + return; + t1._state = (t2 | 64) >>> 0; + onError = t1._onError; + t2 = this.error; + t3 = type$.Object; + t4 = t1._zone; + if (type$.void_Function_Object_StackTrace._is(onError)) + t4.runBinaryGuarded$2$3(onError, t2, this.stackTrace, t3, type$.StackTrace); + else + t4.runUnaryGuarded$1$2(type$.void_Function_Object._as(onError), t2, t3); + t1._state = (t1._state & 4294967231) >>> 0; + }, + $signature: 0 + }; + A._BufferingStreamSubscription__sendDone_sendDone.prototype = { + call$0() { + var t1 = this.$this, + t2 = t1._state; + if ((t2 & 16) === 0) + return; + t1._state = (t2 | 74) >>> 0; + t1._zone.runGuarded$1(t1._onDone); + t1._state = (t1._state & 4294967231) >>> 0; + }, + $signature: 0 + }; + A._StreamImpl.prototype = { + listen$4$cancelOnError$onDone$onError(onData, cancelOnError, onDone, onError) { + var t1 = A._instanceType(this); + t1._eval$1("~(1)?")._as(onData); + type$.nullable_void_Function._as(onDone); + return this._controller._subscribe$4(t1._eval$1("~(1)?")._as(onData), onError, onDone, cancelOnError === true); + }, + listen$3$onDone$onError(onData, onDone, onError) { + return this.listen$4$cancelOnError$onDone$onError(onData, null, onDone, onError); + }, + listen$1(onData) { + return this.listen$4$cancelOnError$onDone$onError(onData, null, null, null); + }, + listen$2$onDone(onData, onDone) { + return this.listen$4$cancelOnError$onDone$onError(onData, null, onDone, null); + } + }; + A._DelayedEvent.prototype = { + set$next(next) { + this.next = type$.nullable__DelayedEvent_dynamic._as(next); + }, + get$next() { + return this.next; + } + }; + A._DelayedData.prototype = { + perform$1(dispatch) { + this.$ti._eval$1("_EventDispatch<1>")._as(dispatch)._sendData$1(this.value); + } + }; + A._DelayedError.prototype = { + perform$1(dispatch) { + dispatch._sendError$2(this.error, this.stackTrace); + } + }; + A._DelayedDone.prototype = { + perform$1(dispatch) { + dispatch._sendDone$0(); + }, + get$next() { + return null; + }, + set$next(__wc0_formal) { + throw A.wrapException(A.StateError$("No events after a done.")); + }, + $is_DelayedEvent: 1 + }; + A._PendingEvents.prototype = { + schedule$1(dispatch) { + var t1, _this = this; + _this.$ti._eval$1("_EventDispatch<1>")._as(dispatch); + t1 = _this._state; + if (t1 === 1) + return; + if (t1 >= 1) { + _this._state = 1; + return; + } + A.scheduleMicrotask(new A._PendingEvents_schedule_closure(_this, dispatch)); + _this._state = 1; + }, + add$1(_, $event) { + var _this = this, + lastEvent = _this.lastPendingEvent; + if (lastEvent == null) + _this.firstPendingEvent = _this.lastPendingEvent = $event; + else { + lastEvent.set$next($event); + _this.lastPendingEvent = $event; + } + } + }; + A._PendingEvents_schedule_closure.prototype = { + call$0() { + var t2, $event, nextEvent, + t1 = this.$this, + oldState = t1._state; + t1._state = 0; + if (oldState === 3) + return; + t2 = t1.$ti._eval$1("_EventDispatch<1>")._as(this.dispatch); + $event = t1.firstPendingEvent; + nextEvent = $event.get$next(); + t1.firstPendingEvent = nextEvent; + if (nextEvent == null) + t1.lastPendingEvent = null; + $event.perform$1(t2); + }, + $signature: 0 + }; + A._DoneStreamSubscription.prototype = { + onData$1(handleData) { + this.$ti._eval$1("~(1)?")._as(handleData); + }, + onError$1(handleError) { + }, + pause$0() { + var t1 = this._state; + if (t1 >= 0) + this._state = t1 + 2; + }, + resume$0() { + var _this = this, + resumeState = _this._state - 2; + if (resumeState < 0) + return; + if (resumeState === 0) { + _this._state = 1; + A.scheduleMicrotask(_this.get$_onMicrotask()); + } else + _this._state = resumeState; + }, + cancel$0() { + this._state = -1; + this._onDone = null; + return $.$get$Future__nullFuture(); + }, + _onMicrotask$0() { + var _0_0, _this = this, + unscheduledState = _this._state - 1; + if (unscheduledState === 0) { + _this._state = -1; + _0_0 = _this._onDone; + if (_0_0 != null) { + _this._onDone = null; + _this._zone.runGuarded$1(_0_0); + } + } else + _this._state = unscheduledState; + }, + $isStreamSubscription: 1 + }; + A._StreamIterator.prototype = { + get$current() { + var _this = this; + if (_this._async$_hasValue) + return _this.$ti._precomputed1._as(_this._stateData); + return _this.$ti._precomputed1._as(null); + }, + moveNext$0() { + var future, _this = this, + subscription = _this._subscription; + if (subscription != null) { + if (_this._async$_hasValue) { + future = new A._Future($.Zone__current, type$._Future_bool); + _this._stateData = future; + _this._async$_hasValue = false; + subscription.resume$0(); + return future; + } + throw A.wrapException(A.StateError$("Already waiting for next.")); + } + return _this._initializeOrDone$0(); + }, + _initializeOrDone$0() { + var future, subscription, _this = this, + stateData = _this._stateData; + if (stateData != null) { + _this.$ti._eval$1("Stream<1>")._as(stateData); + future = new A._Future($.Zone__current, type$._Future_bool); + _this._stateData = future; + subscription = stateData.listen$4$cancelOnError$onDone$onError(_this.get$_async$_onData(), true, _this.get$_onDone(), _this.get$_onError()); + if (_this._stateData != null) + _this._subscription = subscription; + return future; + } + return $.$get$Future__falseFuture(); + }, + cancel$0() { + var _this = this, + subscription = _this._subscription, + stateData = _this._stateData; + _this._stateData = null; + if (subscription != null) { + _this._subscription = null; + if (!_this._async$_hasValue) + type$._Future_bool._as(stateData)._asyncComplete$1(false); + else + _this._async$_hasValue = false; + return subscription.cancel$0(); + } + return $.$get$Future__nullFuture(); + }, + _async$_onData$1(data) { + var moveNextFuture, t1, _this = this; + _this.$ti._precomputed1._as(data); + if (_this._subscription == null) + return; + moveNextFuture = type$._Future_bool._as(_this._stateData); + _this._stateData = data; + _this._async$_hasValue = true; + moveNextFuture._complete$1(true); + if (_this._async$_hasValue) { + t1 = _this._subscription; + if (t1 != null) + t1.pause$0(); + } + }, + _onError$2(error, stackTrace) { + var subscription, moveNextFuture, _this = this; + A._asObject(error); + type$.StackTrace._as(stackTrace); + subscription = _this._subscription; + moveNextFuture = type$._Future_bool._as(_this._stateData); + _this._stateData = _this._subscription = null; + if (subscription != null) + moveNextFuture._completeErrorObject$1(new A.AsyncError(error, stackTrace)); + else + moveNextFuture._asyncCompleteErrorObject$1(new A.AsyncError(error, stackTrace)); + }, + _onDone$0() { + var _this = this, + subscription = _this._subscription, + moveNextFuture = type$._Future_bool._as(_this._stateData); + _this._stateData = _this._subscription = null; + if (subscription != null) + moveNextFuture._completeWithValue$1(false); + else + moveNextFuture._asyncCompleteWithValue$1(false); + } + }; + A._cancelAndError_closure.prototype = { + call$0() { + return this.future._completeErrorObject$1(this.error); + }, + $signature: 0 + }; + A._cancelAndErrorClosure_closure.prototype = { + call$2(error, stackTrace) { + type$.StackTrace._as(stackTrace); + A._cancelAndError(this.subscription, this.future, new A.AsyncError(error, stackTrace)); + }, + $signature: 7 + }; + A._cancelAndValue_closure.prototype = { + call$0() { + return this.future._complete$1(this.value); + }, + $signature: 0 + }; + A._ForwardingStream.prototype = { + listen$4$cancelOnError$onDone$onError(onData, cancelOnError, onDone, onError) { + var t2, t3, t4, t5, t6, + t1 = this.$ti; + t1._eval$1("~(2)?")._as(onData); + type$.nullable_void_Function._as(onDone); + t2 = $.Zone__current; + t3 = cancelOnError === true ? 1 : 0; + t4 = onError != null ? 32 : 0; + t5 = A._BufferingStreamSubscription__registerDataHandler(t2, onData, t1._rest[1]); + t6 = A._BufferingStreamSubscription__registerErrorHandler(t2, onError); + t1 = new A._ForwardingStreamSubscription(this, t5, t6, t2.registerCallback$1$1(onDone, type$.void), t2, t3 | t4, t1._eval$1("_ForwardingStreamSubscription<1,2>")); + t1._subscription = this._async$_source.listen$3$onDone$onError(t1.get$_handleData(), t1.get$_handleDone(), t1.get$_handleError()); + return t1; + }, + listen$3$onDone$onError(onData, onDone, onError) { + return this.listen$4$cancelOnError$onDone$onError(onData, null, onDone, onError); + } + }; + A._ForwardingStreamSubscription.prototype = { + _async$_add$1(data) { + this.$ti._rest[1]._as(data); + if ((this._state & 2) !== 0) + return; + this.super$_BufferingStreamSubscription$_add(data); + }, + _addError$2(error, stackTrace) { + if ((this._state & 2) !== 0) + return; + this.super$_BufferingStreamSubscription$_addError(error, stackTrace); + }, + _onPause$0() { + var t1 = this._subscription; + if (t1 != null) + t1.pause$0(); + }, + _onResume$0() { + var t1 = this._subscription; + if (t1 != null) + t1.resume$0(); + }, + _onCancel$0() { + var subscription = this._subscription; + if (subscription != null) { + this._subscription = null; + return subscription.cancel$0(); + } + return null; + }, + _handleData$1(data) { + this._stream._handleData$2(this.$ti._precomputed1._as(data), this); + }, + _handleError$2(error, stackTrace) { + var t1; + type$.StackTrace._as(stackTrace); + t1 = error == null ? A._asObject(error) : error; + this._stream.$ti._eval$1("_EventSink<2>")._as(this)._addError$2(t1, stackTrace); + }, + _handleDone$0() { + this._stream.$ti._eval$1("_EventSink<2>")._as(this)._close$0(); + } + }; + A._MapStream.prototype = { + _handleData$2(inputEvent, sink) { + var outputEvent, e, s, exception, error, stackTrace, replacement, + t1 = this.$ti; + t1._precomputed1._as(inputEvent); + t1._eval$1("_EventSink<2>")._as(sink); + outputEvent = null; + try { + outputEvent = this._transform.call$1(inputEvent); + } catch (exception) { + e = A.unwrapException(exception); + s = A.getTraceFromException(exception); + error = e; + stackTrace = s; + replacement = A._interceptError(error, stackTrace); + if (replacement != null) { + error = replacement.error; + stackTrace = replacement.stackTrace; + } + sink._addError$2(error, stackTrace); + return; + } + sink._async$_add$1(outputEvent); + } + }; + A._EventSinkWrapper.prototype = { + add$1(_, data) { + var t1 = this._async$_sink; + data = t1.$ti._rest[1]._as(this.$ti._precomputed1._as(data)); + if ((t1._state & 2) !== 0) + A.throwExpression(A.StateError$("Stream is already closed")); + t1.super$_BufferingStreamSubscription$_add(data); + }, + addError$2(error, stackTrace) { + var t1 = this._async$_sink; + if ((t1._state & 2) !== 0) + A.throwExpression(A.StateError$("Stream is already closed")); + t1.super$_BufferingStreamSubscription$_addError(error, stackTrace); + }, + close$0() { + var t1 = this._async$_sink; + if ((t1._state & 2) !== 0) + A.throwExpression(A.StateError$("Stream is already closed")); + t1.super$_BufferingStreamSubscription$_close(); + }, + $isEventSink: 1 + }; + A._SinkTransformerStreamSubscription.prototype = { + _onPause$0() { + var t1 = this._subscription; + if (t1 != null) + t1.pause$0(); + }, + _onResume$0() { + var t1 = this._subscription; + if (t1 != null) + t1.resume$0(); + }, + _onCancel$0() { + var subscription = this._subscription; + if (subscription != null) { + this._subscription = null; + return subscription.cancel$0(); + } + return null; + }, + _handleData$1(data) { + var e, s, t1, exception, t2, _this = this; + _this.$ti._precomputed1._as(data); + try { + t1 = _this.___SinkTransformerStreamSubscription__transformerSink_A; + t1 === $ && A.throwLateFieldNI("_transformerSink"); + t1.add$1(0, data); + } catch (exception) { + e = A.unwrapException(exception); + s = A.getTraceFromException(exception); + t1 = A._asObject(e); + t2 = type$.StackTrace._as(s); + if ((_this._state & 2) !== 0) + A.throwExpression(A.StateError$("Stream is already closed")); + _this.super$_BufferingStreamSubscription$_addError(t1, t2); + } + }, + _handleError$2(error, stackTrace) { + var e, s, t1, t2, exception, _this = this, + _s24_ = "Stream is already closed"; + A._asObject(error); + t1 = type$.StackTrace; + t1._as(stackTrace); + try { + t2 = _this.___SinkTransformerStreamSubscription__transformerSink_A; + t2 === $ && A.throwLateFieldNI("_transformerSink"); + t2.addError$2(error, stackTrace); + } catch (exception) { + e = A.unwrapException(exception); + s = A.getTraceFromException(exception); + if (e === error) { + if ((_this._state & 2) !== 0) + A.throwExpression(A.StateError$(_s24_)); + _this.super$_BufferingStreamSubscription$_addError(error, stackTrace); + } else { + t2 = A._asObject(e); + t1 = t1._as(s); + if ((_this._state & 2) !== 0) + A.throwExpression(A.StateError$(_s24_)); + _this.super$_BufferingStreamSubscription$_addError(t2, t1); + } + } + }, + _handleDone$0() { + var e, s, t1, exception, t2, _this = this; + try { + _this._subscription = null; + t1 = _this.___SinkTransformerStreamSubscription__transformerSink_A; + t1 === $ && A.throwLateFieldNI("_transformerSink"); + t1.close$0(); + } catch (exception) { + e = A.unwrapException(exception); + s = A.getTraceFromException(exception); + t1 = A._asObject(e); + t2 = type$.StackTrace._as(s); + if ((_this._state & 2) !== 0) + A.throwExpression(A.StateError$("Stream is already closed")); + _this.super$_BufferingStreamSubscription$_addError(t1, t2); + } + } + }; + A._StreamSinkTransformer.prototype = { + bind$1(stream) { + var t1 = this.$ti; + return new A._BoundSinkStream(this._sinkMapper, t1._eval$1("Stream<1>")._as(stream), t1._eval$1("_BoundSinkStream<1,2>")); + } + }; + A._BoundSinkStream.prototype = { + listen$4$cancelOnError$onDone$onError(onData, cancelOnError, onDone, onError) { + var t2, t3, t4, t5, t6, subscription, + t1 = this.$ti; + t1._eval$1("~(2)?")._as(onData); + type$.nullable_void_Function._as(onDone); + t2 = $.Zone__current; + t3 = cancelOnError === true ? 1 : 0; + t4 = onError != null ? 32 : 0; + t5 = A._BufferingStreamSubscription__registerDataHandler(t2, onData, t1._rest[1]); + t6 = A._BufferingStreamSubscription__registerErrorHandler(t2, onError); + subscription = new A._SinkTransformerStreamSubscription(t5, t6, t2.registerCallback$1$1(onDone, type$.void), t2, t3 | t4, t1._eval$1("_SinkTransformerStreamSubscription<1,2>")); + subscription.___SinkTransformerStreamSubscription__transformerSink_A = t1._eval$1("EventSink<1>")._as(this._sinkMapper.call$1(new A._EventSinkWrapper(subscription, t1._eval$1("_EventSinkWrapper<2>")))); + subscription._subscription = this._stream.listen$3$onDone$onError(subscription.get$_handleData(), subscription.get$_handleDone(), subscription.get$_handleError()); + return subscription; + }, + listen$3$onDone$onError(onData, onDone, onError) { + return this.listen$4$cancelOnError$onDone$onError(onData, null, onDone, onError); + } + }; + A._HandlerEventSink.prototype = { + add$1(_, data) { + var sink, + t1 = this.$ti; + t1._precomputed1._as(data); + sink = this._async$_sink; + if (sink == null) + throw A.wrapException(A.StateError$("Sink is closed")); + data = sink.$ti._precomputed1._as(t1._rest[1]._as(data)); + t1 = sink._async$_sink; + t1.$ti._rest[1]._as(data); + if ((t1._state & 2) !== 0) + A.throwExpression(A.StateError$("Stream is already closed")); + t1.super$_BufferingStreamSubscription$_add(data); + }, + addError$2(error, stackTrace) { + var sink = this._async$_sink; + if (sink == null) + throw A.wrapException(A.StateError$("Sink is closed")); + sink.addError$2(error, stackTrace); + }, + close$0() { + var sink = this._async$_sink; + if (sink == null) + return; + this._async$_sink = null; + this._handleDone.call$1(sink); + }, + $isEventSink: 1 + }; + A._StreamHandlerTransformer.prototype = { + bind$1(stream) { + return this.super$_StreamSinkTransformer$bind(this.$ti._eval$1("Stream<1>")._as(stream)); + } + }; + A._StreamHandlerTransformer_closure.prototype = { + call$1(outputSink) { + var _this = this, + t1 = _this.T; + return new A._HandlerEventSink(_this.handleData, _this.handleError, _this.handleDone, t1._eval$1("EventSink<0>")._as(outputSink), _this.S._eval$1("@<0>")._bind$1(t1)._eval$1("_HandlerEventSink<1,2>")); + }, + $signature() { + return this.S._eval$1("@<0>")._bind$1(this.T)._eval$1("_HandlerEventSink<1,2>(EventSink<2>)"); + } + }; + A._ZoneFunction.prototype = {}; + A._ZoneSpecification.prototype = {$isZoneSpecification: 1}; + A._ZoneDelegate.prototype = {$isZoneDelegate: 1}; + A._Zone.prototype = { + _processUncaughtError$3(zone, error, stackTrace) { + var implZone, handler, parentDelegate, parentZone, currentZone, e, s, implementation, t1, exception; + type$.StackTrace._as(stackTrace); + implementation = this.get$_handleUncaughtError(); + implZone = implementation.zone; + if (implZone === B.C__RootZone) { + A._rootHandleError(error, stackTrace); + return; + } + handler = implementation.$function; + parentDelegate = implZone.get$_parentDelegate(); + t1 = implZone.get$parent(); + t1.toString; + parentZone = t1; + currentZone = $.Zone__current; + try { + $.Zone__current = parentZone; + handler.call$5(implZone, parentDelegate, zone, error, stackTrace); + $.Zone__current = currentZone; + } catch (exception) { + e = A.unwrapException(exception); + s = A.getTraceFromException(exception); + $.Zone__current = currentZone; + t1 = error === e ? stackTrace : s; + parentZone._processUncaughtError$3(implZone, e, t1); + } + }, + $isZone: 1 + }; + A._CustomZone.prototype = { + get$_async$_delegate() { + var t1 = this._delegateCache; + return t1 == null ? this._delegateCache = new A._ZoneDelegate(this) : t1; + }, + get$_parentDelegate() { + return this.parent.get$_async$_delegate(); + }, + get$errorZone() { + return this._handleUncaughtError.zone; + }, + runGuarded$1(f) { + var e, s, exception; + type$.void_Function._as(f); + try { + this.run$1$1(f, type$.void); + } catch (exception) { + e = A.unwrapException(exception); + s = A.getTraceFromException(exception); + this._processUncaughtError$3(this, A._asObject(e), type$.StackTrace._as(s)); + } + }, + runUnaryGuarded$1$2(f, arg, $T) { + var e, s, exception; + $T._eval$1("~(0)")._as(f); + $T._as(arg); + try { + this.runUnary$2$2(f, arg, type$.void, $T); + } catch (exception) { + e = A.unwrapException(exception); + s = A.getTraceFromException(exception); + this._processUncaughtError$3(this, A._asObject(e), type$.StackTrace._as(s)); + } + }, + runBinaryGuarded$2$3(f, arg1, arg2, $T1, $T2) { + var e, s, exception; + $T1._eval$1("@<0>")._bind$1($T2)._eval$1("~(1,2)")._as(f); + $T1._as(arg1); + $T2._as(arg2); + try { + this.runBinary$3$3(f, arg1, arg2, type$.void, $T1, $T2); + } catch (exception) { + e = A.unwrapException(exception); + s = A.getTraceFromException(exception); + this._processUncaughtError$3(this, A._asObject(e), type$.StackTrace._as(s)); + } + }, + bindCallback$1$1(f, $R) { + return new A._CustomZone_bindCallback_closure(this, this.registerCallback$1$1($R._eval$1("0()")._as(f), $R), $R); + }, + bindUnaryCallback$2$1(f, $R, $T) { + return new A._CustomZone_bindUnaryCallback_closure(this, this.registerUnaryCallback$2$1($R._eval$1("@<0>")._bind$1($T)._eval$1("1(2)")._as(f), $R, $T), $T, $R); + }, + bindCallbackGuarded$1(f) { + return new A._CustomZone_bindCallbackGuarded_closure(this, this.registerCallback$1$1(type$.void_Function._as(f), type$.void)); + }, + bindUnaryCallbackGuarded$1$1(f, $T) { + return new A._CustomZone_bindUnaryCallbackGuarded_closure(this, this.registerUnaryCallback$2$1($T._eval$1("~(0)")._as(f), type$.void, $T), $T); + }, + $index(_, key) { + var value, + t1 = this._map, + result = t1.$index(0, key); + if (result != null || t1.containsKey$1(key)) + return result; + value = this.parent.$index(0, key); + if (value != null) + t1.$indexSet(0, key, value); + return value; + }, + handleUncaughtError$2(error, stackTrace) { + this._processUncaughtError$3(this, error, type$.StackTrace._as(stackTrace)); + }, + fork$2$specification$zoneValues(specification, zoneValues) { + var implementation = this._fork, + t1 = implementation.zone; + return implementation.$function.call$5(t1, t1.get$_parentDelegate(), this, specification, zoneValues); + }, + run$1$1(f, $R) { + var implementation, t1; + $R._eval$1("0()")._as(f); + implementation = this._run; + t1 = implementation.zone; + return implementation.$function.call$1$4(t1, t1.get$_parentDelegate(), this, f, $R); + }, + runUnary$2$2(f, arg, $R, $T) { + var implementation, t1; + $R._eval$1("@<0>")._bind$1($T)._eval$1("1(2)")._as(f); + $T._as(arg); + implementation = this._runUnary; + t1 = implementation.zone; + return implementation.$function.call$2$5(t1, t1.get$_parentDelegate(), this, f, arg, $R, $T); + }, + runBinary$3$3(f, arg1, arg2, $R, $T1, $T2) { + var implementation, t1; + $R._eval$1("@<0>")._bind$1($T1)._bind$1($T2)._eval$1("1(2,3)")._as(f); + $T1._as(arg1); + $T2._as(arg2); + implementation = this._runBinary; + t1 = implementation.zone; + return implementation.$function.call$3$6(t1, t1.get$_parentDelegate(), this, f, arg1, arg2, $R, $T1, $T2); + }, + registerCallback$1$1(callback, $R) { + var implementation, t1; + $R._eval$1("0()")._as(callback); + implementation = this._registerCallback; + t1 = implementation.zone; + return implementation.$function.call$1$4(t1, t1.get$_parentDelegate(), this, callback, $R); + }, + registerUnaryCallback$2$1(callback, $R, $T) { + var implementation, t1; + $R._eval$1("@<0>")._bind$1($T)._eval$1("1(2)")._as(callback); + implementation = this._registerUnaryCallback; + t1 = implementation.zone; + return implementation.$function.call$2$4(t1, t1.get$_parentDelegate(), this, callback, $R, $T); + }, + registerBinaryCallback$3$1(callback, $R, $T1, $T2) { + var implementation, t1; + $R._eval$1("@<0>")._bind$1($T1)._bind$1($T2)._eval$1("1(2,3)")._as(callback); + implementation = this._registerBinaryCallback; + t1 = implementation.zone; + return implementation.$function.call$3$4(t1, t1.get$_parentDelegate(), this, callback, $R, $T1, $T2); + }, + errorCallback$2(error, stackTrace) { + var implementation = this._errorCallback, + implementationZone = implementation.zone; + if (implementationZone === B.C__RootZone) + return null; + return implementation.$function.call$5(implementationZone, implementationZone.get$_parentDelegate(), this, error, stackTrace); + }, + scheduleMicrotask$1(f) { + var implementation, t1; + type$.void_Function._as(f); + implementation = this._scheduleMicrotask; + t1 = implementation.zone; + return implementation.$function.call$4(t1, t1.get$_parentDelegate(), this, f); + }, + createTimer$2(duration, f) { + var implementation, t1; + type$.void_Function._as(f); + implementation = this._createTimer; + t1 = implementation.zone; + return implementation.$function.call$5(t1, t1.get$_parentDelegate(), this, duration, f); + }, + print$1(line) { + var implementation = this._print, + t1 = implementation.zone; + return implementation.$function.call$4(t1, t1.get$_parentDelegate(), this, line); + }, + get$_run() { + return this._run; + }, + get$_runUnary() { + return this._runUnary; + }, + get$_runBinary() { + return this._runBinary; + }, + get$_registerCallback() { + return this._registerCallback; + }, + get$_registerUnaryCallback() { + return this._registerUnaryCallback; + }, + get$_registerBinaryCallback() { + return this._registerBinaryCallback; + }, + get$_errorCallback() { + return this._errorCallback; + }, + get$_scheduleMicrotask() { + return this._scheduleMicrotask; + }, + get$_createTimer() { + return this._createTimer; + }, + get$_createPeriodicTimer() { + return this._createPeriodicTimer; + }, + get$_print() { + return this._print; + }, + get$_fork() { + return this._fork; + }, + get$_handleUncaughtError() { + return this._handleUncaughtError; + }, + get$parent() { + return this.parent; + }, + get$_map() { + return this._map; + } + }; + A._CustomZone_bindCallback_closure.prototype = { + call$0() { + return this.$this.run$1$1(this.registered, this.R); + }, + $signature() { + return this.R._eval$1("0()"); + } + }; + A._CustomZone_bindUnaryCallback_closure.prototype = { + call$1(arg) { + var _this = this, + t1 = _this.T; + return _this.$this.runUnary$2$2(_this.registered, t1._as(arg), _this.R, t1); + }, + $signature() { + return this.R._eval$1("@<0>")._bind$1(this.T)._eval$1("1(2)"); + } + }; + A._CustomZone_bindCallbackGuarded_closure.prototype = { + call$0() { + return this.$this.runGuarded$1(this.registered); + }, + $signature: 0 + }; + A._CustomZone_bindUnaryCallbackGuarded_closure.prototype = { + call$1(arg) { + var t1 = this.T; + return this.$this.runUnaryGuarded$1$2(this.registered, t1._as(arg), t1); + }, + $signature() { + return this.T._eval$1("~(0)"); + } + }; + A._rootHandleError_closure.prototype = { + call$0() { + A.Error_throwWithStackTrace(this.error, this.stackTrace); + }, + $signature: 0 + }; + A._RootZone.prototype = { + get$_run() { + return B._ZoneFunction__RootZone__rootRun; + }, + get$_runUnary() { + return B._ZoneFunction__RootZone__rootRunUnary; + }, + get$_runBinary() { + return B._ZoneFunction__RootZone__rootRunBinary; + }, + get$_registerCallback() { + return B._ZoneFunction__RootZone__rootRegisterCallback; + }, + get$_registerUnaryCallback() { + return B._ZoneFunction_Xkh; + }, + get$_registerBinaryCallback() { + return B._ZoneFunction_e9o; + }, + get$_errorCallback() { + return B._ZoneFunction__RootZone__rootErrorCallback; + }, + get$_scheduleMicrotask() { + return B._ZoneFunction__RootZone__rootScheduleMicrotask; + }, + get$_createTimer() { + return B._ZoneFunction__RootZone__rootCreateTimer; + }, + get$_createPeriodicTimer() { + return B._ZoneFunction_PAY; + }, + get$_print() { + return B._ZoneFunction__RootZone__rootPrint; + }, + get$_fork() { + return B._ZoneFunction__RootZone__rootFork; + }, + get$_handleUncaughtError() { + return B._ZoneFunction_KjJ; + }, + get$parent() { + return null; + }, + get$_map() { + return $.$get$_RootZone__rootMap(); + }, + get$_async$_delegate() { + var t1 = $._RootZone__rootDelegate; + return t1 == null ? $._RootZone__rootDelegate = new A._ZoneDelegate(this) : t1; + }, + get$_parentDelegate() { + var t1 = $._RootZone__rootDelegate; + return t1 == null ? $._RootZone__rootDelegate = new A._ZoneDelegate(this) : t1; + }, + get$errorZone() { + return this; + }, + runGuarded$1(f) { + var e, s, exception; + type$.void_Function._as(f); + try { + if (B.C__RootZone === $.Zone__current) { + f.call$0(); + return; + } + A._rootRun(null, null, this, f, type$.void); + } catch (exception) { + e = A.unwrapException(exception); + s = A.getTraceFromException(exception); + A._rootHandleError(A._asObject(e), type$.StackTrace._as(s)); + } + }, + runUnaryGuarded$1$2(f, arg, $T) { + var e, s, exception; + $T._eval$1("~(0)")._as(f); + $T._as(arg); + try { + if (B.C__RootZone === $.Zone__current) { + f.call$1(arg); + return; + } + A._rootRunUnary(null, null, this, f, arg, type$.void, $T); + } catch (exception) { + e = A.unwrapException(exception); + s = A.getTraceFromException(exception); + A._rootHandleError(A._asObject(e), type$.StackTrace._as(s)); + } + }, + runBinaryGuarded$2$3(f, arg1, arg2, $T1, $T2) { + var e, s, exception; + $T1._eval$1("@<0>")._bind$1($T2)._eval$1("~(1,2)")._as(f); + $T1._as(arg1); + $T2._as(arg2); + try { + if (B.C__RootZone === $.Zone__current) { + f.call$2(arg1, arg2); + return; + } + A._rootRunBinary(null, null, this, f, arg1, arg2, type$.void, $T1, $T2); + } catch (exception) { + e = A.unwrapException(exception); + s = A.getTraceFromException(exception); + A._rootHandleError(A._asObject(e), type$.StackTrace._as(s)); + } + }, + bindCallback$1$1(f, $R) { + return new A._RootZone_bindCallback_closure(this, $R._eval$1("0()")._as(f), $R); + }, + bindUnaryCallback$2$1(f, $R, $T) { + return new A._RootZone_bindUnaryCallback_closure(this, $R._eval$1("@<0>")._bind$1($T)._eval$1("1(2)")._as(f), $T, $R); + }, + bindCallbackGuarded$1(f) { + return new A._RootZone_bindCallbackGuarded_closure(this, type$.void_Function._as(f)); + }, + bindUnaryCallbackGuarded$1$1(f, $T) { + return new A._RootZone_bindUnaryCallbackGuarded_closure(this, $T._eval$1("~(0)")._as(f), $T); + }, + $index(_, key) { + return null; + }, + handleUncaughtError$2(error, stackTrace) { + A._rootHandleError(error, type$.StackTrace._as(stackTrace)); + }, + fork$2$specification$zoneValues(specification, zoneValues) { + return A._rootFork(null, null, this, specification, zoneValues); + }, + run$1$1(f, $R) { + $R._eval$1("0()")._as(f); + if ($.Zone__current === B.C__RootZone) + return f.call$0(); + return A._rootRun(null, null, this, f, $R); + }, + runUnary$2$2(f, arg, $R, $T) { + $R._eval$1("@<0>")._bind$1($T)._eval$1("1(2)")._as(f); + $T._as(arg); + if ($.Zone__current === B.C__RootZone) + return f.call$1(arg); + return A._rootRunUnary(null, null, this, f, arg, $R, $T); + }, + runBinary$3$3(f, arg1, arg2, $R, $T1, $T2) { + $R._eval$1("@<0>")._bind$1($T1)._bind$1($T2)._eval$1("1(2,3)")._as(f); + $T1._as(arg1); + $T2._as(arg2); + if ($.Zone__current === B.C__RootZone) + return f.call$2(arg1, arg2); + return A._rootRunBinary(null, null, this, f, arg1, arg2, $R, $T1, $T2); + }, + registerCallback$1$1(f, $R) { + return $R._eval$1("0()")._as(f); + }, + registerUnaryCallback$2$1(f, $R, $T) { + return $R._eval$1("@<0>")._bind$1($T)._eval$1("1(2)")._as(f); + }, + registerBinaryCallback$3$1(f, $R, $T1, $T2) { + return $R._eval$1("@<0>")._bind$1($T1)._bind$1($T2)._eval$1("1(2,3)")._as(f); + }, + errorCallback$2(error, stackTrace) { + return null; + }, + scheduleMicrotask$1(f) { + A._rootScheduleMicrotask(null, null, this, type$.void_Function._as(f)); + }, + createTimer$2(duration, f) { + return A.Timer__createTimer(duration, type$.void_Function._as(f)); + }, + print$1(line) { + A.printString(line); + } + }; + A._RootZone_bindCallback_closure.prototype = { + call$0() { + return this.$this.run$1$1(this.f, this.R); + }, + $signature() { + return this.R._eval$1("0()"); + } + }; + A._RootZone_bindUnaryCallback_closure.prototype = { + call$1(arg) { + var _this = this, + t1 = _this.T; + return _this.$this.runUnary$2$2(_this.f, t1._as(arg), _this.R, t1); + }, + $signature() { + return this.R._eval$1("@<0>")._bind$1(this.T)._eval$1("1(2)"); + } + }; + A._RootZone_bindCallbackGuarded_closure.prototype = { + call$0() { + return this.$this.runGuarded$1(this.f); + }, + $signature: 0 + }; + A._RootZone_bindUnaryCallbackGuarded_closure.prototype = { + call$1(arg) { + var t1 = this.T; + return this.$this.runUnaryGuarded$1$2(this.f, t1._as(arg), t1); + }, + $signature() { + return this.T._eval$1("~(0)"); + } + }; + A._HashMap.prototype = { + get$length(_) { + return this._collection$_length; + }, + get$isEmpty(_) { + return this._collection$_length === 0; + }, + get$keys() { + return new A._HashMapKeyIterable(this, A._instanceType(this)._eval$1("_HashMapKeyIterable<1>")); + }, + get$values() { + var t1 = A._instanceType(this); + return A.MappedIterable_MappedIterable(new A._HashMapKeyIterable(this, t1._eval$1("_HashMapKeyIterable<1>")), new A._HashMap_values_closure(this), t1._precomputed1, t1._rest[1]); + }, + containsKey$1(key) { + var strings, nums; + if (typeof key == "string" && key !== "__proto__") { + strings = this._strings; + return strings == null ? false : strings[key] != null; + } else if (typeof key == "number" && (key & 1073741823) === key) { + nums = this._nums; + return nums == null ? false : nums[key] != null; + } else + return this._containsKey$1(key); + }, + _containsKey$1(key) { + var rest = this._collection$_rest; + if (rest == null) + return false; + return this._findBucketIndex$2(this._getBucket$2(rest, key), key) >= 0; + }, + $index(_, key) { + var strings, t1, nums; + if (typeof key == "string" && key !== "__proto__") { + strings = this._strings; + t1 = strings == null ? null : A._HashMap__getTableEntry(strings, key); + return t1; + } else if (typeof key == "number" && (key & 1073741823) === key) { + nums = this._nums; + t1 = nums == null ? null : A._HashMap__getTableEntry(nums, key); + return t1; + } else + return this._get$1(key); + }, + _get$1(key) { + var bucket, index, + rest = this._collection$_rest; + if (rest == null) + return null; + bucket = this._getBucket$2(rest, key); + index = this._findBucketIndex$2(bucket, key); + return index < 0 ? null : bucket[index + 1]; + }, + $indexSet(_, key, value) { + var strings, nums, _this = this, + t1 = A._instanceType(_this); + t1._precomputed1._as(key); + t1._rest[1]._as(value); + if (typeof key == "string" && key !== "__proto__") { + strings = _this._strings; + _this._addHashTableEntry$3(strings == null ? _this._strings = A._HashMap__newHashTable() : strings, key, value); + } else if (typeof key == "number" && (key & 1073741823) === key) { + nums = _this._nums; + _this._addHashTableEntry$3(nums == null ? _this._nums = A._HashMap__newHashTable() : nums, key, value); + } else + _this._set$2(key, value); + }, + _set$2(key, value) { + var rest, hash, bucket, index, _this = this, + t1 = A._instanceType(_this); + t1._precomputed1._as(key); + t1._rest[1]._as(value); + rest = _this._collection$_rest; + if (rest == null) + rest = _this._collection$_rest = A._HashMap__newHashTable(); + hash = _this._computeHashCode$1(key); + bucket = rest[hash]; + if (bucket == null) { + A._HashMap__setTableEntry(rest, hash, [key, value]); + ++_this._collection$_length; + _this._keys = null; + } else { + index = _this._findBucketIndex$2(bucket, key); + if (index >= 0) + bucket[index + 1] = value; + else { + bucket.push(key, value); + ++_this._collection$_length; + _this._keys = null; + } + } + }, + forEach$1(_, action) { + var keys, $length, t2, i, key, t3, _this = this, + t1 = A._instanceType(_this); + t1._eval$1("~(1,2)")._as(action); + keys = _this._computeKeys$0(); + for ($length = keys.length, t2 = t1._precomputed1, t1 = t1._rest[1], i = 0; i < $length; ++i) { + key = keys[i]; + t2._as(key); + t3 = _this.$index(0, key); + action.call$2(key, t3 == null ? t1._as(t3) : t3); + if (keys !== _this._keys) + throw A.wrapException(A.ConcurrentModificationError$(_this)); + } + }, + _computeKeys$0() { + var strings, index, names, entries, i, nums, rest, bucket, $length, i0, _this = this, + result = _this._keys; + if (result != null) + return result; + result = A.List_List$filled(_this._collection$_length, null, false, type$.dynamic); + strings = _this._strings; + index = 0; + if (strings != null) { + names = Object.getOwnPropertyNames(strings); + entries = names.length; + for (i = 0; i < entries; ++i) { + result[index] = names[i]; + ++index; + } + } + nums = _this._nums; + if (nums != null) { + names = Object.getOwnPropertyNames(nums); + entries = names.length; + for (i = 0; i < entries; ++i) { + result[index] = +names[i]; + ++index; + } + } + rest = _this._collection$_rest; + if (rest != null) { + names = Object.getOwnPropertyNames(rest); + entries = names.length; + for (i = 0; i < entries; ++i) { + bucket = rest[names[i]]; + $length = bucket.length; + for (i0 = 0; i0 < $length; i0 += 2) { + result[index] = bucket[i0]; + ++index; + } + } + } + return _this._keys = result; + }, + _addHashTableEntry$3(table, key, value) { + var t1 = A._instanceType(this); + t1._precomputed1._as(key); + t1._rest[1]._as(value); + if (table[key] == null) { + ++this._collection$_length; + this._keys = null; + } + A._HashMap__setTableEntry(table, key, value); + }, + _computeHashCode$1(key) { + return J.get$hashCode$(key) & 1073741823; + }, + _getBucket$2(table, key) { + return table[this._computeHashCode$1(key)]; + }, + _findBucketIndex$2(bucket, key) { + var $length, i; + if (bucket == null) + return -1; + $length = bucket.length; + for (i = 0; i < $length; i += 2) + if (J.$eq$(bucket[i], key)) + return i; + return -1; + } + }; + A._HashMap_values_closure.prototype = { + call$1(each) { + var t1 = this.$this, + t2 = A._instanceType(t1); + t1 = t1.$index(0, t2._precomputed1._as(each)); + return t1 == null ? t2._rest[1]._as(t1) : t1; + }, + $signature() { + return A._instanceType(this.$this)._eval$1("2(1)"); + } + }; + A._IdentityHashMap.prototype = { + _computeHashCode$1(key) { + return A.objectHashCode(key) & 1073741823; + }, + _findBucketIndex$2(bucket, key) { + var $length, i, t1; + if (bucket == null) + return -1; + $length = bucket.length; + for (i = 0; i < $length; i += 2) { + t1 = bucket[i]; + if (t1 == null ? key == null : t1 === key) + return i; + } + return -1; + } + }; + A._HashMapKeyIterable.prototype = { + get$length(_) { + return this._collection$_map._collection$_length; + }, + get$isEmpty(_) { + return this._collection$_map._collection$_length === 0; + }, + get$iterator(_) { + var t1 = this._collection$_map; + return new A._HashMapKeyIterator(t1, t1._computeKeys$0(), this.$ti._eval$1("_HashMapKeyIterator<1>")); + } + }; + A._HashMapKeyIterator.prototype = { + get$current() { + var t1 = this._collection$_current; + return t1 == null ? this.$ti._precomputed1._as(t1) : t1; + }, + moveNext$0() { + var _this = this, + keys = _this._keys, + offset = _this._offset, + t1 = _this._collection$_map; + if (keys !== t1._keys) + throw A.wrapException(A.ConcurrentModificationError$(t1)); + else if (offset >= keys.length) { + _this._collection$_current = null; + return false; + } else { + _this._collection$_current = keys[offset]; + _this._offset = offset + 1; + return true; + } + }, + $isIterator: 1 + }; + A._LinkedHashSet.prototype = { + get$iterator(_) { + var _this = this, + t1 = new A._LinkedHashSetIterator(_this, _this._modifications, _this.$ti._eval$1("_LinkedHashSetIterator<1>")); + t1._cell = _this._first; + return t1; + }, + get$length(_) { + return this._collection$_length; + }, + get$isEmpty(_) { + return this._collection$_length === 0; + }, + contains$1(_, object) { + var strings, t1; + if (object !== "__proto__") { + strings = this._strings; + if (strings == null) + return false; + return type$.nullable__LinkedHashSetCell._as(strings[object]) != null; + } else { + t1 = this._contains$1(object); + return t1; + } + }, + _contains$1(object) { + var rest = this._collection$_rest; + if (rest == null) + return false; + return this._findBucketIndex$2(rest[B.JSString_methods.get$hashCode(object) & 1073741823], object) >= 0; + }, + get$first(_) { + var first = this._first; + if (first == null) + throw A.wrapException(A.StateError$("No elements")); + return this.$ti._precomputed1._as(first._element); + }, + get$last(_) { + var last = this._collection$_last; + if (last == null) + throw A.wrapException(A.StateError$("No elements")); + return this.$ti._precomputed1._as(last._element); + }, + add$1(_, element) { + var strings, nums, _this = this; + _this.$ti._precomputed1._as(element); + if (typeof element == "string" && element !== "__proto__") { + strings = _this._strings; + return _this._addHashTableEntry$2(strings == null ? _this._strings = A._LinkedHashSet__newHashTable() : strings, element); + } else if (typeof element == "number" && (element & 1073741823) === element) { + nums = _this._nums; + return _this._addHashTableEntry$2(nums == null ? _this._nums = A._LinkedHashSet__newHashTable() : nums, element); + } else + return _this._add$1(element); + }, + _add$1(element) { + var rest, hash, bucket, _this = this; + _this.$ti._precomputed1._as(element); + rest = _this._collection$_rest; + if (rest == null) + rest = _this._collection$_rest = A._LinkedHashSet__newHashTable(); + hash = J.get$hashCode$(element) & 1073741823; + bucket = rest[hash]; + if (bucket == null) + rest[hash] = [_this._newLinkedCell$1(element)]; + else { + if (_this._findBucketIndex$2(bucket, element) >= 0) + return false; + bucket.push(_this._newLinkedCell$1(element)); + } + return true; + }, + remove$1(_, object) { + var t1; + if (typeof object == "string" && object !== "__proto__") + return this._removeHashTableEntry$2(this._strings, object); + else { + t1 = this._remove$1(object); + return t1; + } + }, + _remove$1(object) { + var hash, bucket, index, cell, + rest = this._collection$_rest; + if (rest == null) + return false; + hash = J.get$hashCode$(object) & 1073741823; + bucket = rest[hash]; + index = this._findBucketIndex$2(bucket, object); + if (index < 0) + return false; + cell = bucket.splice(index, 1)[0]; + if (0 === bucket.length) + delete rest[hash]; + this._unlinkCell$1(cell); + return true; + }, + _addHashTableEntry$2(table, element) { + this.$ti._precomputed1._as(element); + if (type$.nullable__LinkedHashSetCell._as(table[element]) != null) + return false; + table[element] = this._newLinkedCell$1(element); + return true; + }, + _removeHashTableEntry$2(table, element) { + var cell; + if (table == null) + return false; + cell = type$.nullable__LinkedHashSetCell._as(table[element]); + if (cell == null) + return false; + this._unlinkCell$1(cell); + delete table[element]; + return true; + }, + _modified$0() { + this._modifications = this._modifications + 1 & 1073741823; + }, + _newLinkedCell$1(element) { + var t1, _this = this, + cell = new A._LinkedHashSetCell(_this.$ti._precomputed1._as(element)); + if (_this._first == null) + _this._first = _this._collection$_last = cell; + else { + t1 = _this._collection$_last; + t1.toString; + cell._previous = t1; + _this._collection$_last = t1._next = cell; + } + ++_this._collection$_length; + _this._modified$0(); + return cell; + }, + _unlinkCell$1(cell) { + var _this = this, + previous = cell._previous, + next = cell._next; + if (previous == null) + _this._first = next; + else + previous._next = next; + if (next == null) + _this._collection$_last = previous; + else + next._previous = previous; + --_this._collection$_length; + _this._modified$0(); + }, + _findBucketIndex$2(bucket, element) { + var $length, i; + if (bucket == null) + return -1; + $length = bucket.length; + for (i = 0; i < $length; ++i) + if (J.$eq$(bucket[i]._element, element)) + return i; + return -1; + } + }; + A._LinkedHashSetCell.prototype = {}; + A._LinkedHashSetIterator.prototype = { + get$current() { + var t1 = this._collection$_current; + return t1 == null ? this.$ti._precomputed1._as(t1) : t1; + }, + moveNext$0() { + var _this = this, + cell = _this._cell, + t1 = _this._set; + if (_this._modifications !== t1._modifications) + throw A.wrapException(A.ConcurrentModificationError$(t1)); + else if (cell == null) { + _this._collection$_current = null; + return false; + } else { + _this._collection$_current = _this.$ti._eval$1("1?")._as(cell._element); + _this._cell = cell._next; + return true; + } + }, + $isIterator: 1 + }; + A.HashMap_HashMap$from_closure.prototype = { + call$2(k, v) { + this.result.$indexSet(0, this.K._as(k), this.V._as(v)); + }, + $signature: 39 + }; + A.LinkedList.prototype = { + remove$1(_, entry) { + this.$ti._precomputed1._as(entry); + if (entry._list !== this) + return false; + this._unlink$1(entry); + return true; + }, + get$iterator(_) { + var _this = this; + return new A._LinkedListIterator(_this, _this._modificationCount, _this._first, _this.$ti._eval$1("_LinkedListIterator<1>")); + }, + get$length(_) { + return this._collection$_length; + }, + get$first(_) { + var t1; + if (this._collection$_length === 0) + throw A.wrapException(A.StateError$("No such element")); + t1 = this._first; + t1.toString; + return t1; + }, + get$last(_) { + var t1; + if (this._collection$_length === 0) + throw A.wrapException(A.StateError$("No such element")); + t1 = this._first._previous; + t1.toString; + return t1; + }, + get$isEmpty(_) { + return this._collection$_length === 0; + }, + _insertBefore$3$updateFirst(entry, newEntry, updateFirst) { + var _this = this, + t1 = _this.$ti; + t1._eval$1("1?")._as(entry); + t1._precomputed1._as(newEntry); + if (newEntry._list != null) + throw A.wrapException(A.StateError$("LinkedListEntry is already in a LinkedList")); + ++_this._modificationCount; + newEntry.set$_list(_this); + if (_this._collection$_length === 0) { + newEntry.set$_next(newEntry); + newEntry.set$_previous(newEntry); + _this._first = newEntry; + ++_this._collection$_length; + return; + } + t1 = entry._previous; + t1.toString; + newEntry.set$_previous(t1); + newEntry.set$_next(entry); + t1.set$_next(newEntry); + entry.set$_previous(newEntry); + ++_this._collection$_length; + }, + _unlink$1(entry) { + var t1, next, _this = this; + _this.$ti._precomputed1._as(entry); + ++_this._modificationCount; + entry._next.set$_previous(entry._previous); + t1 = entry._previous; + next = entry._next; + t1.set$_next(next); + --_this._collection$_length; + entry.set$_previous(null); + entry.set$_next(null); + entry.set$_list(null); + if (_this._collection$_length === 0) + _this._first = null; + else if (entry === _this._first) + _this._first = next; + } + }; + A._LinkedListIterator.prototype = { + get$current() { + var t1 = this._collection$_current; + return t1 == null ? this.$ti._precomputed1._as(t1) : t1; + }, + moveNext$0() { + var _this = this, + t1 = _this._list; + if (_this._modificationCount !== t1._modificationCount) + throw A.wrapException(A.ConcurrentModificationError$(_this)); + if (t1._collection$_length !== 0) + t1 = _this._visitedFirst && _this._next === t1.get$first(0); + else + t1 = true; + if (t1) { + _this._collection$_current = null; + return false; + } + _this._visitedFirst = true; + t1 = _this._next; + _this._collection$_current = t1; + _this._next = t1._next; + return true; + }, + $isIterator: 1 + }; + A.LinkedListEntry.prototype = { + get$previous() { + var t1 = this._list; + if (t1 == null || this === t1.get$first(0)) + return null; + return this._previous; + }, + set$_list(_list) { + this._list = A._instanceType(this)._eval$1("LinkedList?")._as(_list); + }, + set$_next(_next) { + this._next = A._instanceType(this)._eval$1("LinkedListEntry.E?")._as(_next); + }, + set$_previous(_previous) { + this._previous = A._instanceType(this)._eval$1("LinkedListEntry.E?")._as(_previous); + } + }; + A.ListBase.prototype = { + get$iterator(receiver) { + return new A.ListIterator(receiver, this.get$length(receiver), A.instanceType(receiver)._eval$1("ListIterator")); + }, + elementAt$1(receiver, index) { + return this.$index(receiver, index); + }, + get$isEmpty(receiver) { + return this.get$length(receiver) === 0; + }, + get$first(receiver) { + if (this.get$length(receiver) === 0) + throw A.wrapException(A.IterableElementError_noElement()); + return this.$index(receiver, 0); + }, + get$last(receiver) { + if (this.get$length(receiver) === 0) + throw A.wrapException(A.IterableElementError_noElement()); + return this.$index(receiver, this.get$length(receiver) - 1); + }, + map$1$1(receiver, f, $T) { + var t1 = A.instanceType(receiver); + return new A.MappedListIterable(receiver, t1._bind$1($T)._eval$1("1(ListBase.E)")._as(f), t1._eval$1("@")._bind$1($T)._eval$1("MappedListIterable<1,2>")); + }, + skip$1(receiver, count) { + return A.SubListIterable$(receiver, count, null, A.instanceType(receiver)._eval$1("ListBase.E")); + }, + take$1(receiver, count) { + return A.SubListIterable$(receiver, 0, A.checkNotNullable(count, "count", type$.int), A.instanceType(receiver)._eval$1("ListBase.E")); + }, + toList$1$growable(receiver, growable) { + var t1, first, result, i, _this = this; + if (_this.get$isEmpty(receiver)) { + t1 = J.JSArray_JSArray$growable(0, A.instanceType(receiver)._eval$1("ListBase.E")); + return t1; + } + first = _this.$index(receiver, 0); + result = A.List_List$filled(_this.get$length(receiver), first, true, A.instanceType(receiver)._eval$1("ListBase.E")); + for (i = 1; i < _this.get$length(receiver); ++i) + B.JSArray_methods.$indexSet(result, i, _this.$index(receiver, i)); + return result; + }, + toList$0(receiver) { + return this.toList$1$growable(receiver, true); + }, + cast$1$0(receiver, $R) { + return new A.CastList(receiver, A.instanceType(receiver)._eval$1("@")._bind$1($R)._eval$1("CastList<1,2>")); + }, + sublist$2(receiver, start, end) { + var t1, + listLength = this.get$length(receiver); + A.RangeError_checkValidRange(start, end, listLength); + t1 = A.List_List$_of(this.getRange$2(receiver, start, end), A.instanceType(receiver)._eval$1("ListBase.E")); + return t1; + }, + getRange$2(receiver, start, end) { + A.RangeError_checkValidRange(start, end, this.get$length(receiver)); + return A.SubListIterable$(receiver, start, end, A.instanceType(receiver)._eval$1("ListBase.E")); + }, + fillRange$3(receiver, start, end, fill) { + var i; + A.instanceType(receiver)._eval$1("ListBase.E?")._as(fill); + A.RangeError_checkValidRange(start, end, this.get$length(receiver)); + for (i = start; i < end; ++i) + this.$indexSet(receiver, i, fill); + }, + setRange$4(receiver, start, end, iterable, skipCount) { + var $length, otherStart, otherList, t1, i; + A.instanceType(receiver)._eval$1("Iterable")._as(iterable); + A.RangeError_checkValidRange(start, end, this.get$length(receiver)); + $length = end - start; + if ($length === 0) + return; + A.RangeError_checkNotNegative(skipCount, "skipCount"); + if (type$.List_dynamic._is(iterable)) { + otherStart = skipCount; + otherList = iterable; + } else { + otherList = J.skip$1$ax(iterable, skipCount).toList$1$growable(0, false); + otherStart = 0; + } + t1 = J.getInterceptor$asx(otherList); + if (otherStart + $length > t1.get$length(otherList)) + throw A.wrapException(A.IterableElementError_tooFew()); + if (otherStart < start) + for (i = $length - 1; i >= 0; --i) + this.$indexSet(receiver, start + i, t1.$index(otherList, otherStart + i)); + else + for (i = 0; i < $length; ++i) + this.$indexSet(receiver, start + i, t1.$index(otherList, otherStart + i)); + }, + setRange$3(receiver, start, end, iterable) { + return this.setRange$4(receiver, start, end, iterable, 0); + }, + setAll$2(receiver, index, iterable) { + var t1, index0; + A.instanceType(receiver)._eval$1("Iterable")._as(iterable); + if (type$.List_dynamic._is(iterable)) + this.setRange$3(receiver, index, index + iterable.length, iterable); + else + for (t1 = J.get$iterator$ax(iterable); t1.moveNext$0(); index = index0) { + index0 = index + 1; + this.$indexSet(receiver, index, t1.get$current()); + } + }, + toString$0(receiver) { + return A.Iterable_iterableToFullString(receiver, "[", "]"); + }, + $isEfficientLengthIterable: 1, + $isIterable: 1, + $isList: 1 + }; + A.MapBase.prototype = { + forEach$1(_, action) { + var t2, key, t3, + t1 = A._instanceType(this); + t1._eval$1("~(MapBase.K,MapBase.V)")._as(action); + for (t2 = J.get$iterator$ax(this.get$keys()), t1 = t1._eval$1("MapBase.V"); t2.moveNext$0();) { + key = t2.get$current(); + t3 = this.$index(0, key); + action.call$2(key, t3 == null ? t1._as(t3) : t3); + } + }, + get$entries() { + return J.map$1$1$ax(this.get$keys(), new A.MapBase_entries_closure(this), A._instanceType(this)._eval$1("MapEntry")); + }, + get$length(_) { + return J.get$length$asx(this.get$keys()); + }, + get$isEmpty(_) { + return J.get$isEmpty$asx(this.get$keys()); + }, + get$values() { + return new A._MapBaseValueIterable(this, A._instanceType(this)._eval$1("_MapBaseValueIterable")); + }, + toString$0(_) { + return A.MapBase_mapToString(this); + }, + $isMap: 1 + }; + A.MapBase_entries_closure.prototype = { + call$1(key) { + var t1 = this.$this, + t2 = A._instanceType(t1); + t2._eval$1("MapBase.K")._as(key); + t1 = t1.$index(0, key); + if (t1 == null) + t1 = t2._eval$1("MapBase.V")._as(t1); + return new A.MapEntry(key, t1, t2._eval$1("MapEntry")); + }, + $signature() { + return A._instanceType(this.$this)._eval$1("MapEntry(MapBase.K)"); + } + }; + A.MapBase_mapToString_closure.prototype = { + call$2(k, v) { + var t2, + t1 = this._box_0; + if (!t1.first) + this.result._contents += ", "; + t1.first = false; + t1 = this.result; + t2 = A.S(k); + t1._contents = (t1._contents += t2) + ": "; + t2 = A.S(v); + t1._contents += t2; + }, + $signature: 114 + }; + A._MapBaseValueIterable.prototype = { + get$length(_) { + var t1 = this._collection$_map; + return t1.get$length(t1); + }, + get$isEmpty(_) { + var t1 = this._collection$_map; + return t1.get$isEmpty(t1); + }, + get$first(_) { + var t1 = this._collection$_map; + t1 = t1.$index(0, J.get$first$ax(t1.get$keys())); + return t1 == null ? this.$ti._rest[1]._as(t1) : t1; + }, + get$last(_) { + var t1 = this._collection$_map; + t1 = t1.$index(0, J.get$last$ax(t1.get$keys())); + return t1 == null ? this.$ti._rest[1]._as(t1) : t1; + }, + get$iterator(_) { + var t1 = this._collection$_map; + return new A._MapBaseValueIterator(J.get$iterator$ax(t1.get$keys()), t1, this.$ti._eval$1("_MapBaseValueIterator<1,2>")); + } + }; + A._MapBaseValueIterator.prototype = { + moveNext$0() { + var _this = this, + t1 = _this._keys; + if (t1.moveNext$0()) { + _this._collection$_current = _this._collection$_map.$index(0, t1.get$current()); + return true; + } + _this._collection$_current = null; + return false; + }, + get$current() { + var t1 = this._collection$_current; + return t1 == null ? this.$ti._rest[1]._as(t1) : t1; + }, + $isIterator: 1 + }; + A.SetBase.prototype = { + get$isEmpty(_) { + return this._collection$_length === 0; + }, + map$1$1(_, f, $T) { + var t1 = this.$ti; + return new A.EfficientLengthMappedIterable(this, t1._bind$1($T)._eval$1("1(2)")._as(f), t1._eval$1("@<1>")._bind$1($T)._eval$1("EfficientLengthMappedIterable<1,2>")); + }, + toString$0(_) { + return A.Iterable_iterableToFullString(this, "{", "}"); + }, + take$1(_, n) { + return A.TakeIterable_TakeIterable(this, n, this.$ti._precomputed1); + }, + skip$1(_, n) { + return A.SkipIterable_SkipIterable(this, n, this.$ti._precomputed1); + }, + get$first(_) { + var t1, + it = A._LinkedHashSetIterator$(this, this._modifications, this.$ti._precomputed1); + if (!it.moveNext$0()) + throw A.wrapException(A.IterableElementError_noElement()); + t1 = it._collection$_current; + return t1 == null ? it.$ti._precomputed1._as(t1) : t1; + }, + get$last(_) { + var t1, result, + it = A._LinkedHashSetIterator$(this, this._modifications, this.$ti._precomputed1); + if (!it.moveNext$0()) + throw A.wrapException(A.IterableElementError_noElement()); + t1 = it.$ti._precomputed1; + do { + result = it._collection$_current; + if (result == null) + result = t1._as(result); + } while (it.moveNext$0()); + return result; + }, + elementAt$1(_, index) { + var iterator, skipCount, t1, _this = this; + A.RangeError_checkNotNegative(index, "index"); + iterator = A._LinkedHashSetIterator$(_this, _this._modifications, _this.$ti._precomputed1); + for (skipCount = index; iterator.moveNext$0();) { + if (skipCount === 0) { + t1 = iterator._collection$_current; + return t1 == null ? iterator.$ti._precomputed1._as(t1) : t1; + } + --skipCount; + } + throw A.wrapException(A.IndexError$withLength(index, index - skipCount, _this, null, "index")); + }, + $isEfficientLengthIterable: 1, + $isIterable: 1, + $isSet: 1 + }; + A._SetBase.prototype = {}; + A._Utf8Decoder__decoder_closure.prototype = { + call$0() { + var t1, exception; + try { + t1 = new TextDecoder("utf-8", {fatal: true}); + return t1; + } catch (exception) { + } + return null; + }, + $signature: 28 + }; + A._Utf8Decoder__decoderNonfatal_closure.prototype = { + call$0() { + var t1, exception; + try { + t1 = new TextDecoder("utf-8", {fatal: false}); + return t1; + } catch (exception) { + } + return null; + }, + $signature: 28 + }; + A.AsciiCodec.prototype = { + encode$1(source) { + return B.AsciiEncoder_127.convert$1(source); + } + }; + A._UnicodeSubsetEncoder.prototype = { + convert$1(string) { + var stringLength, end, result, t1, i, codeUnit; + A._asString(string); + stringLength = string.length; + end = A.RangeError_checkValidRange(0, null, stringLength); + result = new Uint8Array(end); + for (t1 = ~this._subsetMask, i = 0; i < end; ++i) { + if (!(i < stringLength)) + return A.ioore(string, i); + codeUnit = string.charCodeAt(i); + if ((codeUnit & t1) !== 0) + throw A.wrapException(A.ArgumentError$value(string, "string", "Contains invalid characters.")); + if (!(i < end)) + return A.ioore(result, i); + result[i] = codeUnit; + } + return result; + } + }; + A.AsciiEncoder.prototype = {}; + A.Base64Codec.prototype = { + normalize$3(source, start, end) { + var inverseAlphabet, t2, i, sliceStart, buffer, firstPadding, firstPaddingSourceIndex, paddingCount, i0, char, i1, digit1, t3, digit2, char0, value, t4, endLength, $length, + _s64_ = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", + _s31_ = "Invalid base64 encoding length ", + t1 = source.length; + end = A.RangeError_checkValidRange(start, end, t1); + inverseAlphabet = $.$get$_Base64Decoder__inverseAlphabet(); + for (t2 = inverseAlphabet.length, i = start, sliceStart = i, buffer = null, firstPadding = -1, firstPaddingSourceIndex = -1, paddingCount = 0; i < end; i = i0) { + i0 = i + 1; + if (!(i < t1)) + return A.ioore(source, i); + char = source.charCodeAt(i); + if (char === 37) { + i1 = i0 + 2; + if (i1 <= end) { + if (!(i0 < t1)) + return A.ioore(source, i0); + digit1 = A.hexDigitValue(source.charCodeAt(i0)); + t3 = i0 + 1; + if (!(t3 < t1)) + return A.ioore(source, t3); + digit2 = A.hexDigitValue(source.charCodeAt(t3)); + char0 = digit1 * 16 + digit2 - (digit2 & 256); + if (char0 === 37) + char0 = -1; + i0 = i1; + } else + char0 = -1; + } else + char0 = char; + if (0 <= char0 && char0 <= 127) { + if (!(char0 >= 0 && char0 < t2)) + return A.ioore(inverseAlphabet, char0); + value = inverseAlphabet[char0]; + if (value >= 0) { + if (!(value < 64)) + return A.ioore(_s64_, value); + char0 = _s64_.charCodeAt(value); + if (char0 === char) + continue; + char = char0; + } else { + if (value === -1) { + if (firstPadding < 0) { + t3 = buffer == null ? null : buffer._contents.length; + if (t3 == null) + t3 = 0; + firstPadding = t3 + (i - sliceStart); + firstPaddingSourceIndex = i; + } + ++paddingCount; + if (char === 61) + continue; + } + char = char0; + } + if (value !== -2) { + if (buffer == null) { + buffer = new A.StringBuffer(""); + t3 = buffer; + } else + t3 = buffer; + t3._contents += B.JSString_methods.substring$2(source, sliceStart, i); + t4 = A.Primitives_stringFromCharCode(char); + t3._contents += t4; + sliceStart = i0; + continue; + } + } + throw A.wrapException(A.FormatException$("Invalid base64 data", source, i)); + } + if (buffer != null) { + t1 = B.JSString_methods.substring$2(source, sliceStart, end); + t1 = buffer._contents += t1; + t2 = t1.length; + if (firstPadding >= 0) + A.Base64Codec__checkPadding(source, firstPaddingSourceIndex, end, firstPadding, paddingCount, t2); + else { + endLength = B.JSInt_methods.$mod(t2 - 1, 4) + 1; + if (endLength === 1) + throw A.wrapException(A.FormatException$(_s31_, source, end)); + while (endLength < 4) { + t1 += "="; + buffer._contents = t1; + ++endLength; + } + } + t1 = buffer._contents; + return B.JSString_methods.replaceRange$3(source, start, end, t1.charCodeAt(0) == 0 ? t1 : t1); + } + $length = end - start; + if (firstPadding >= 0) + A.Base64Codec__checkPadding(source, firstPaddingSourceIndex, end, firstPadding, paddingCount, $length); + else { + endLength = B.JSInt_methods.$mod($length, 4); + if (endLength === 1) + throw A.wrapException(A.FormatException$(_s31_, source, end)); + if (endLength > 1) + source = B.JSString_methods.replaceRange$3(source, end, end, endLength === 2 ? "==" : "="); + } + return source; + } + }; + A.Base64Encoder.prototype = {}; + A.Codec.prototype = {}; + A._FusedCodec.prototype = {}; + A.Converter.prototype = {$isStreamTransformer: 1}; + A.Encoding.prototype = {}; + A.Utf8Codec.prototype = { + decode$1(codeUnits) { + type$.List_int._as(codeUnits); + return new A._Utf8Decoder(false)._convertGeneral$4(codeUnits, 0, null, true); + } + }; + A.Utf8Encoder.prototype = { + convert$1(string) { + var stringLength, end, t1, encoder, t2; + A._asString(string); + stringLength = string.length; + end = A.RangeError_checkValidRange(0, null, stringLength); + if (end === 0) + return new Uint8Array(0); + t1 = new Uint8Array(end * 3); + encoder = new A._Utf8Encoder(t1); + if (encoder._fillBuffer$3(string, 0, end) !== end) { + t2 = end - 1; + if (!(t2 >= 0 && t2 < stringLength)) + return A.ioore(string, t2); + encoder._writeReplacementCharacter$0(); + } + return B.NativeUint8List_methods.sublist$2(t1, 0, encoder._bufferIndex); + } + }; + A._Utf8Encoder.prototype = { + _writeReplacementCharacter$0() { + var t4, _this = this, + t1 = _this._buffer, + t2 = _this._bufferIndex, + t3 = _this._bufferIndex = t2 + 1; + t1.$flags & 2 && A.throwUnsupportedOperation(t1); + t4 = t1.length; + if (!(t2 < t4)) + return A.ioore(t1, t2); + t1[t2] = 239; + t2 = _this._bufferIndex = t3 + 1; + if (!(t3 < t4)) + return A.ioore(t1, t3); + t1[t3] = 191; + _this._bufferIndex = t2 + 1; + if (!(t2 < t4)) + return A.ioore(t1, t2); + t1[t2] = 189; + }, + _writeSurrogate$2(leadingSurrogate, nextCodeUnit) { + var rune, t1, t2, t3, t4, _this = this; + if ((nextCodeUnit & 64512) === 56320) { + rune = 65536 + ((leadingSurrogate & 1023) << 10) | nextCodeUnit & 1023; + t1 = _this._buffer; + t2 = _this._bufferIndex; + t3 = _this._bufferIndex = t2 + 1; + t1.$flags & 2 && A.throwUnsupportedOperation(t1); + t4 = t1.length; + if (!(t2 < t4)) + return A.ioore(t1, t2); + t1[t2] = rune >>> 18 | 240; + t2 = _this._bufferIndex = t3 + 1; + if (!(t3 < t4)) + return A.ioore(t1, t3); + t1[t3] = rune >>> 12 & 63 | 128; + t3 = _this._bufferIndex = t2 + 1; + if (!(t2 < t4)) + return A.ioore(t1, t2); + t1[t2] = rune >>> 6 & 63 | 128; + _this._bufferIndex = t3 + 1; + if (!(t3 < t4)) + return A.ioore(t1, t3); + t1[t3] = rune & 63 | 128; + return true; + } else { + _this._writeReplacementCharacter$0(); + return false; + } + }, + _fillBuffer$3(str, start, end) { + var t1, t2, t3, t4, stringIndex, codeUnit, t5, t6, _this = this; + if (start !== end) { + t1 = end - 1; + if (!(t1 >= 0 && t1 < str.length)) + return A.ioore(str, t1); + t1 = (str.charCodeAt(t1) & 64512) === 55296; + } else + t1 = false; + if (t1) + --end; + for (t1 = _this._buffer, t2 = t1.$flags | 0, t3 = t1.length, t4 = str.length, stringIndex = start; stringIndex < end; ++stringIndex) { + if (!(stringIndex < t4)) + return A.ioore(str, stringIndex); + codeUnit = str.charCodeAt(stringIndex); + if (codeUnit <= 127) { + t5 = _this._bufferIndex; + if (t5 >= t3) + break; + _this._bufferIndex = t5 + 1; + t2 & 2 && A.throwUnsupportedOperation(t1); + t1[t5] = codeUnit; + } else { + t5 = codeUnit & 64512; + if (t5 === 55296) { + if (_this._bufferIndex + 4 > t3) + break; + t5 = stringIndex + 1; + if (!(t5 < t4)) + return A.ioore(str, t5); + if (_this._writeSurrogate$2(codeUnit, str.charCodeAt(t5))) + stringIndex = t5; + } else if (t5 === 56320) { + if (_this._bufferIndex + 3 > t3) + break; + _this._writeReplacementCharacter$0(); + } else if (codeUnit <= 2047) { + t5 = _this._bufferIndex; + t6 = t5 + 1; + if (t6 >= t3) + break; + _this._bufferIndex = t6; + t2 & 2 && A.throwUnsupportedOperation(t1); + if (!(t5 < t3)) + return A.ioore(t1, t5); + t1[t5] = codeUnit >>> 6 | 192; + _this._bufferIndex = t6 + 1; + t1[t6] = codeUnit & 63 | 128; + } else { + t5 = _this._bufferIndex; + if (t5 + 2 >= t3) + break; + t6 = _this._bufferIndex = t5 + 1; + t2 & 2 && A.throwUnsupportedOperation(t1); + if (!(t5 < t3)) + return A.ioore(t1, t5); + t1[t5] = codeUnit >>> 12 | 224; + t5 = _this._bufferIndex = t6 + 1; + if (!(t6 < t3)) + return A.ioore(t1, t6); + t1[t6] = codeUnit >>> 6 & 63 | 128; + _this._bufferIndex = t5 + 1; + if (!(t5 < t3)) + return A.ioore(t1, t5); + t1[t5] = codeUnit & 63 | 128; + } + } + } + return stringIndex; + } + }; + A._Utf8Decoder.prototype = { + _convertGeneral$4(codeUnits, start, maybeEnd, single) { + var end, casted, bytes, errorOffset, t1, result, message, _this = this; + type$.List_int._as(codeUnits); + end = A.RangeError_checkValidRange(start, maybeEnd, J.get$length$asx(codeUnits)); + if (start === end) + return ""; + if (codeUnits instanceof Uint8Array) { + casted = codeUnits; + bytes = casted; + errorOffset = 0; + } else { + bytes = A._Utf8Decoder__makeNativeUint8List(codeUnits, start, end); + end -= start; + errorOffset = start; + start = 0; + } + if (single && end - start >= 15) { + t1 = _this.allowMalformed; + result = A._Utf8Decoder__convertInterceptedUint8List(t1, bytes, start, end); + if (result != null) { + if (!t1) + return result; + if (result.indexOf("\ufffd") < 0) + return result; + } + } + result = _this._decodeRecursive$4(bytes, start, end, single); + t1 = _this._convert$_state; + if ((t1 & 1) !== 0) { + message = A._Utf8Decoder_errorDescription(t1); + _this._convert$_state = 0; + throw A.wrapException(A.FormatException$(message, codeUnits, errorOffset + _this._charOrIndex)); + } + return result; + }, + _decodeRecursive$4(bytes, start, end, single) { + var mid, s1, _this = this; + if (end - start > 1000) { + mid = B.JSInt_methods._tdivFast$1(start + end, 2); + s1 = _this._decodeRecursive$4(bytes, start, mid, false); + if ((_this._convert$_state & 1) !== 0) + return s1; + return s1 + _this._decodeRecursive$4(bytes, mid, end, single); + } + return _this.decodeGeneral$4(bytes, start, end, single); + }, + decodeGeneral$4(bytes, start, end, single) { + var byte, t2, type, t3, i0, markEnd, i1, m, _this = this, + _s256_ = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHIHHHJEEBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBKCCCCCCCCCCCCDCLONNNMEEEEEEEEEEE", + _s144_ = " \x000:XECCCCCN:lDb \x000:XECCCCCNvlDb \x000:XECCCCCN:lDb AAAAA\x00\x00\x00\x00\x00AAAAA00000AAAAA:::::AAAAAGG000AAAAA00KKKAAAAAG::::AAAAA:IIIIAAAAA000\x800AAAAA\x00\x00\x00\x00 AAAAA", + _65533 = 65533, + state = _this._convert$_state, + char = _this._charOrIndex, + buffer = new A.StringBuffer(""), + i = start + 1, + t1 = bytes.length; + if (!(start >= 0 && start < t1)) + return A.ioore(bytes, start); + byte = bytes[start]; + $label0$0: + for (t2 = _this.allowMalformed;;) { + for (;; i = i0) { + if (!(byte >= 0 && byte < 256)) + return A.ioore(_s256_, byte); + type = _s256_.charCodeAt(byte) & 31; + char = state <= 32 ? byte & 61694 >>> type : (byte & 63 | char << 6) >>> 0; + t3 = state + type; + if (!(t3 >= 0 && t3 < 144)) + return A.ioore(_s144_, t3); + state = _s144_.charCodeAt(t3); + if (state === 0) { + t3 = A.Primitives_stringFromCharCode(char); + buffer._contents += t3; + if (i === end) + break $label0$0; + break; + } else if ((state & 1) !== 0) { + if (t2) + switch (state) { + case 69: + case 67: + t3 = A.Primitives_stringFromCharCode(_65533); + buffer._contents += t3; + break; + case 65: + t3 = A.Primitives_stringFromCharCode(_65533); + buffer._contents += t3; + --i; + break; + default: + t3 = A.Primitives_stringFromCharCode(_65533); + buffer._contents = (buffer._contents += t3) + t3; + break; + } + else { + _this._convert$_state = state; + _this._charOrIndex = i - 1; + return ""; + } + state = 0; + } + if (i === end) + break $label0$0; + i0 = i + 1; + if (!(i >= 0 && i < t1)) + return A.ioore(bytes, i); + byte = bytes[i]; + } + i0 = i + 1; + if (!(i >= 0 && i < t1)) + return A.ioore(bytes, i); + byte = bytes[i]; + if (byte < 128) { + for (;;) { + if (!(i0 < end)) { + markEnd = end; + break; + } + i1 = i0 + 1; + if (!(i0 >= 0 && i0 < t1)) + return A.ioore(bytes, i0); + byte = bytes[i0]; + if (byte >= 128) { + markEnd = i1 - 1; + i0 = i1; + break; + } + i0 = i1; + } + if (markEnd - i < 20) + for (m = i; m < markEnd; ++m) { + if (!(m < t1)) + return A.ioore(bytes, m); + t3 = A.Primitives_stringFromCharCode(bytes[m]); + buffer._contents += t3; + } + else { + t3 = A.String_String$fromCharCodes(bytes, i, markEnd); + buffer._contents += t3; + } + if (markEnd === end) + break $label0$0; + i = i0; + } else + i = i0; + } + if (single && state > 32) + if (t2) { + t1 = A.Primitives_stringFromCharCode(_65533); + buffer._contents += t1; + } else { + _this._convert$_state = 77; + _this._charOrIndex = end; + return ""; + } + _this._convert$_state = state; + _this._charOrIndex = char; + t1 = buffer._contents; + return t1.charCodeAt(0) == 0 ? t1 : t1; + } + }; + A._BigIntImpl.prototype = { + $negate(_) { + var t2, t3, _this = this, + t1 = _this._used; + if (t1 === 0) + return _this; + t2 = !_this._isNegative; + t3 = _this._digits; + t1 = A._BigIntImpl__normalize(t1, t3); + return new A._BigIntImpl(t1 === 0 ? false : t2, t3, t1); + }, + _dlShift$1(n) { + var resultUsed, digits, resultDigits, i, t1, t2, t3, + used = this._used; + if (used === 0) + return $.$get$_BigIntImpl_zero(); + resultUsed = used + n; + digits = this._digits; + resultDigits = new Uint16Array(resultUsed); + for (i = used - 1, t1 = digits.length; i >= 0; --i) { + t2 = i + n; + if (!(i < t1)) + return A.ioore(digits, i); + t3 = digits[i]; + if (!(t2 >= 0 && t2 < resultUsed)) + return A.ioore(resultDigits, t2); + resultDigits[t2] = t3; + } + t1 = this._isNegative; + t2 = A._BigIntImpl__normalize(resultUsed, resultDigits); + return new A._BigIntImpl(t2 === 0 ? false : t1, resultDigits, t2); + }, + _drShift$1(n) { + var resultUsed, digits, resultDigits, t1, i, t2, t3, result, _this = this, + used = _this._used; + if (used === 0) + return $.$get$_BigIntImpl_zero(); + resultUsed = used - n; + if (resultUsed <= 0) + return _this._isNegative ? $.$get$_BigIntImpl__minusOne() : $.$get$_BigIntImpl_zero(); + digits = _this._digits; + resultDigits = new Uint16Array(resultUsed); + for (t1 = digits.length, i = n; i < used; ++i) { + t2 = i - n; + if (!(i >= 0 && i < t1)) + return A.ioore(digits, i); + t3 = digits[i]; + if (!(t2 < resultUsed)) + return A.ioore(resultDigits, t2); + resultDigits[t2] = t3; + } + t2 = _this._isNegative; + t3 = A._BigIntImpl__normalize(resultUsed, resultDigits); + result = new A._BigIntImpl(t3 === 0 ? false : t2, resultDigits, t3); + if (t2) + for (i = 0; i < n; ++i) { + if (!(i < t1)) + return A.ioore(digits, i); + if (digits[i] !== 0) + return result.$sub(0, $.$get$_BigIntImpl_one()); + } + return result; + }, + $shl(_, shiftAmount) { + var t1, digitShift, resultUsed, resultDigits, t2, _this = this; + if (shiftAmount < 0) + throw A.wrapException(A.ArgumentError$("shift-amount must be posititve " + shiftAmount, null)); + t1 = _this._used; + if (t1 === 0) + return _this; + digitShift = B.JSInt_methods._tdivFast$1(shiftAmount, 16); + if (B.JSInt_methods.$mod(shiftAmount, 16) === 0) + return _this._dlShift$1(digitShift); + resultUsed = t1 + digitShift + 1; + resultDigits = new Uint16Array(resultUsed); + A._BigIntImpl__lsh(_this._digits, t1, shiftAmount, resultDigits); + t1 = _this._isNegative; + t2 = A._BigIntImpl__normalize(resultUsed, resultDigits); + return new A._BigIntImpl(t2 === 0 ? false : t1, resultDigits, t2); + }, + $shr(_, shiftAmount) { + var t1, digitShift, bitShift, resultUsed, digits, resultDigits, t2, result, i, _this = this; + if (shiftAmount < 0) + throw A.wrapException(A.ArgumentError$("shift-amount must be posititve " + shiftAmount, null)); + t1 = _this._used; + if (t1 === 0) + return _this; + digitShift = B.JSInt_methods._tdivFast$1(shiftAmount, 16); + bitShift = B.JSInt_methods.$mod(shiftAmount, 16); + if (bitShift === 0) + return _this._drShift$1(digitShift); + resultUsed = t1 - digitShift; + if (resultUsed <= 0) + return _this._isNegative ? $.$get$_BigIntImpl__minusOne() : $.$get$_BigIntImpl_zero(); + digits = _this._digits; + resultDigits = new Uint16Array(resultUsed); + A._BigIntImpl__rsh(digits, t1, shiftAmount, resultDigits); + t1 = _this._isNegative; + t2 = A._BigIntImpl__normalize(resultUsed, resultDigits); + result = new A._BigIntImpl(t2 === 0 ? false : t1, resultDigits, t2); + if (t1) { + t1 = digits.length; + if (!(digitShift >= 0 && digitShift < t1)) + return A.ioore(digits, digitShift); + if ((digits[digitShift] & B.JSInt_methods.$shl(1, bitShift) - 1) >>> 0 !== 0) + return result.$sub(0, $.$get$_BigIntImpl_one()); + for (i = 0; i < digitShift; ++i) { + if (!(i < t1)) + return A.ioore(digits, i); + if (digits[i] !== 0) + return result.$sub(0, $.$get$_BigIntImpl_one()); + } + } + return result; + }, + compareTo$1(_, other) { + var t1, result; + type$._BigIntImpl._as(other); + t1 = this._isNegative; + if (t1 === other._isNegative) { + result = A._BigIntImpl__compareDigits(this._digits, this._used, other._digits, other._used); + return t1 ? 0 - result : result; + } + return t1 ? -1 : 1; + }, + _absAddSetSign$2(other, isNegative) { + var resultUsed, resultDigits, t1, _this = this, + used = _this._used, + otherUsed = other._used; + if (used < otherUsed) + return other._absAddSetSign$2(_this, isNegative); + if (used === 0) + return $.$get$_BigIntImpl_zero(); + if (otherUsed === 0) + return _this._isNegative === isNegative ? _this : _this.$negate(0); + resultUsed = used + 1; + resultDigits = new Uint16Array(resultUsed); + A._BigIntImpl__absAdd(_this._digits, used, other._digits, otherUsed, resultDigits); + t1 = A._BigIntImpl__normalize(resultUsed, resultDigits); + return new A._BigIntImpl(t1 === 0 ? false : isNegative, resultDigits, t1); + }, + _absSubSetSign$2(other, isNegative) { + var otherUsed, resultDigits, t1, _this = this, + used = _this._used; + if (used === 0) + return $.$get$_BigIntImpl_zero(); + otherUsed = other._used; + if (otherUsed === 0) + return _this._isNegative === isNegative ? _this : _this.$negate(0); + resultDigits = new Uint16Array(used); + A._BigIntImpl__absSub(_this._digits, used, other._digits, otherUsed, resultDigits); + t1 = A._BigIntImpl__normalize(used, resultDigits); + return new A._BigIntImpl(t1 === 0 ? false : isNegative, resultDigits, t1); + }, + $add(_, other) { + var t2, isNegative, _this = this, + t1 = _this._used; + if (t1 === 0) + return other; + t2 = other._used; + if (t2 === 0) + return _this; + isNegative = _this._isNegative; + if (isNegative === other._isNegative) + return _this._absAddSetSign$2(other, isNegative); + if (A._BigIntImpl__compareDigits(_this._digits, t1, other._digits, t2) >= 0) + return _this._absSubSetSign$2(other, isNegative); + return other._absSubSetSign$2(_this, !isNegative); + }, + $sub(_, other) { + var t2, isNegative, _this = this, + t1 = _this._used; + if (t1 === 0) + return other.$negate(0); + t2 = other._used; + if (t2 === 0) + return _this; + isNegative = _this._isNegative; + if (isNegative !== other._isNegative) + return _this._absAddSetSign$2(other, isNegative); + if (A._BigIntImpl__compareDigits(_this._digits, t1, other._digits, t2) >= 0) + return _this._absSubSetSign$2(other, isNegative); + return other._absSubSetSign$2(_this, !isNegative); + }, + $mul(_, other) { + var resultUsed, digits, otherDigits, resultDigits, t1, i, t2, + used = this._used, + otherUsed = other._used; + if (used === 0 || otherUsed === 0) + return $.$get$_BigIntImpl_zero(); + resultUsed = used + otherUsed; + digits = this._digits; + otherDigits = other._digits; + resultDigits = new Uint16Array(resultUsed); + for (t1 = otherDigits.length, i = 0; i < otherUsed;) { + if (!(i < t1)) + return A.ioore(otherDigits, i); + A._BigIntImpl__mulAdd(otherDigits[i], digits, 0, resultDigits, i, used); + ++i; + } + t1 = this._isNegative !== other._isNegative; + t2 = A._BigIntImpl__normalize(resultUsed, resultDigits); + return new A._BigIntImpl(t2 === 0 ? false : t1, resultDigits, t2); + }, + _div$1(other) { + var lastQuo_used, quo_digits, t1, quo; + if (this._used < other._used) + return $.$get$_BigIntImpl_zero(); + this._divRem$1(other); + lastQuo_used = $._BigIntImpl____lastQuoRemUsed._readField$0() - $._BigIntImpl____lastRemUsed._readField$0(); + quo_digits = A._BigIntImpl__cloneDigits($._BigIntImpl____lastQuoRemDigits._readField$0(), $._BigIntImpl____lastRemUsed._readField$0(), $._BigIntImpl____lastQuoRemUsed._readField$0(), lastQuo_used); + t1 = A._BigIntImpl__normalize(lastQuo_used, quo_digits); + quo = new A._BigIntImpl(false, quo_digits, t1); + return this._isNegative !== other._isNegative && t1 > 0 ? quo.$negate(0) : quo; + }, + _rem$1(other) { + var remDigits, t1, rem, _this = this; + if (_this._used < other._used) + return _this; + _this._divRem$1(other); + remDigits = A._BigIntImpl__cloneDigits($._BigIntImpl____lastQuoRemDigits._readField$0(), 0, $._BigIntImpl____lastRemUsed._readField$0(), $._BigIntImpl____lastRemUsed._readField$0()); + t1 = A._BigIntImpl__normalize($._BigIntImpl____lastRemUsed._readField$0(), remDigits); + rem = new A._BigIntImpl(false, remDigits, t1); + if ($._BigIntImpl____lastRem_nsh._readField$0() > 0) + rem = rem.$shr(0, $._BigIntImpl____lastRem_nsh._readField$0()); + return _this._isNegative && rem._used > 0 ? rem.$negate(0) : rem; + }, + _divRem$1(other) { + var yDigits, yUsed, t1, nsh, yDigits0, yUsed0, resultDigits, resultUsed0, topDigitDivisor, j, tmpDigits, tmpUsed, resultUsed1, nyDigits, i, estimatedQuotientDigit, _this = this, + resultUsed = _this._used; + if (resultUsed === $._BigIntImpl__lastDividendUsed && other._used === $._BigIntImpl__lastDivisorUsed && _this._digits === $._BigIntImpl__lastDividendDigits && other._digits === $._BigIntImpl__lastDivisorDigits) + return; + yDigits = other._digits; + yUsed = other._used; + t1 = yUsed - 1; + if (!(t1 >= 0 && t1 < yDigits.length)) + return A.ioore(yDigits, t1); + nsh = 16 - B.JSInt_methods.get$bitLength(yDigits[t1]); + if (nsh > 0) { + yDigits0 = new Uint16Array(yUsed + 5); + yUsed0 = A._BigIntImpl__lShiftDigits(yDigits, yUsed, nsh, yDigits0); + resultDigits = new Uint16Array(resultUsed + 5); + resultUsed0 = A._BigIntImpl__lShiftDigits(_this._digits, resultUsed, nsh, resultDigits); + } else { + resultDigits = A._BigIntImpl__cloneDigits(_this._digits, 0, resultUsed, resultUsed + 2); + yUsed0 = yUsed; + yDigits0 = yDigits; + resultUsed0 = resultUsed; + } + t1 = yUsed0 - 1; + if (!(t1 >= 0 && t1 < yDigits0.length)) + return A.ioore(yDigits0, t1); + topDigitDivisor = yDigits0[t1]; + j = resultUsed0 - yUsed0; + tmpDigits = new Uint16Array(resultUsed0); + tmpUsed = A._BigIntImpl__dlShiftDigits(yDigits0, yUsed0, j, tmpDigits); + resultUsed1 = resultUsed0 + 1; + t1 = resultDigits.$flags | 0; + if (A._BigIntImpl__compareDigits(resultDigits, resultUsed0, tmpDigits, tmpUsed) >= 0) { + t1 & 2 && A.throwUnsupportedOperation(resultDigits); + if (!(resultUsed0 >= 0 && resultUsed0 < resultDigits.length)) + return A.ioore(resultDigits, resultUsed0); + resultDigits[resultUsed0] = 1; + A._BigIntImpl__absSub(resultDigits, resultUsed1, tmpDigits, tmpUsed, resultDigits); + } else { + t1 & 2 && A.throwUnsupportedOperation(resultDigits); + if (!(resultUsed0 >= 0 && resultUsed0 < resultDigits.length)) + return A.ioore(resultDigits, resultUsed0); + resultDigits[resultUsed0] = 0; + } + t1 = yUsed0 + 2; + nyDigits = new Uint16Array(t1); + if (!(yUsed0 >= 0 && yUsed0 < t1)) + return A.ioore(nyDigits, yUsed0); + nyDigits[yUsed0] = 1; + A._BigIntImpl__absSub(nyDigits, yUsed0 + 1, yDigits0, yUsed0, nyDigits); + i = resultUsed0 - 1; + for (t1 = resultDigits.length; j > 0;) { + estimatedQuotientDigit = A._BigIntImpl__estimateQuotientDigit(topDigitDivisor, resultDigits, i); + --j; + A._BigIntImpl__mulAdd(estimatedQuotientDigit, nyDigits, 0, resultDigits, j, yUsed0); + if (!(i >= 0 && i < t1)) + return A.ioore(resultDigits, i); + if (resultDigits[i] < estimatedQuotientDigit) { + tmpUsed = A._BigIntImpl__dlShiftDigits(nyDigits, yUsed0, j, tmpDigits); + A._BigIntImpl__absSub(resultDigits, resultUsed1, tmpDigits, tmpUsed, resultDigits); + while (--estimatedQuotientDigit, resultDigits[i] < estimatedQuotientDigit) + A._BigIntImpl__absSub(resultDigits, resultUsed1, tmpDigits, tmpUsed, resultDigits); + } + --i; + } + $._BigIntImpl__lastDividendDigits = _this._digits; + $._BigIntImpl__lastDividendUsed = resultUsed; + $._BigIntImpl__lastDivisorDigits = yDigits; + $._BigIntImpl__lastDivisorUsed = yUsed; + $._BigIntImpl____lastQuoRemDigits._value = resultDigits; + $._BigIntImpl____lastQuoRemUsed._value = resultUsed1; + $._BigIntImpl____lastRemUsed._value = yUsed0; + $._BigIntImpl____lastRem_nsh._value = nsh; + }, + get$hashCode(_) { + var hash, t2, t3, i, + combine = new A._BigIntImpl_hashCode_combine(), + t1 = this._used; + if (t1 === 0) + return 6707; + hash = this._isNegative ? 83585 : 429689; + for (t2 = this._digits, t3 = t2.length, i = 0; i < t1; ++i) { + if (!(i < t3)) + return A.ioore(t2, i); + hash = combine.call$2(hash, t2[i]); + } + return new A._BigIntImpl_hashCode_finish().call$1(hash); + }, + $eq(_, other) { + if (other == null) + return false; + return other instanceof A._BigIntImpl && this.compareTo$1(0, other) === 0; + }, + toString$0(_) { + var decimalDigitChunks, rest, t2, digits4, t3, _this = this, + t1 = _this._used; + if (t1 === 0) + return "0"; + if (t1 === 1) { + if (_this._isNegative) { + t1 = _this._digits; + if (0 >= t1.length) + return A.ioore(t1, 0); + return B.JSInt_methods.toString$0(-t1[0]); + } + t1 = _this._digits; + if (0 >= t1.length) + return A.ioore(t1, 0); + return B.JSInt_methods.toString$0(t1[0]); + } + decimalDigitChunks = A._setArrayType([], type$.JSArray_String); + t1 = _this._isNegative; + rest = t1 ? _this.$negate(0) : _this; + while (rest._used > 1) { + t2 = $.$get$_BigIntImpl__bigInt10000(); + if (t2._used === 0) + A.throwExpression(B.C_IntegerDivisionByZeroException); + digits4 = rest._rem$1(t2).toString$0(0); + B.JSArray_methods.add$1(decimalDigitChunks, digits4); + t3 = digits4.length; + if (t3 === 1) + B.JSArray_methods.add$1(decimalDigitChunks, "000"); + if (t3 === 2) + B.JSArray_methods.add$1(decimalDigitChunks, "00"); + if (t3 === 3) + B.JSArray_methods.add$1(decimalDigitChunks, "0"); + rest = rest._div$1(t2); + } + t2 = rest._digits; + if (0 >= t2.length) + return A.ioore(t2, 0); + B.JSArray_methods.add$1(decimalDigitChunks, B.JSInt_methods.toString$0(t2[0])); + if (t1) + B.JSArray_methods.add$1(decimalDigitChunks, "-"); + return new A.ReversedListIterable(decimalDigitChunks, type$.ReversedListIterable_String).join$0(0); + }, + $isBigInt: 1, + $isComparable: 1 + }; + A._BigIntImpl_hashCode_combine.prototype = { + call$2(hash, value) { + hash = hash + value & 536870911; + hash = hash + ((hash & 524287) << 10) & 536870911; + return hash ^ hash >>> 6; + }, + $signature: 4 + }; + A._BigIntImpl_hashCode_finish.prototype = { + call$1(hash) { + hash = hash + ((hash & 67108863) << 3) & 536870911; + hash ^= hash >>> 11; + return hash + ((hash & 16383) << 15) & 536870911; + }, + $signature: 13 + }; + A._FinalizationRegistryWrapper.prototype = { + detach$1(detachToken) { + var t1 = this._registry; + if (t1 != null) + t1.unregister(detachToken); + } + }; + A.DateTime.prototype = { + $eq(_, other) { + if (other == null) + return false; + return other instanceof A.DateTime && this._core$_value === other._core$_value && this._microsecond === other._microsecond && this.isUtc === other.isUtc; + }, + get$hashCode(_) { + return A.Object_hash(this._core$_value, this._microsecond, B.C_SentinelValue, B.C_SentinelValue); + }, + compareTo$1(_, other) { + var r; + type$.DateTime._as(other); + r = B.JSInt_methods.compareTo$1(this._core$_value, other._core$_value); + if (r !== 0) + return r; + return B.JSInt_methods.compareTo$1(this._microsecond, other._microsecond); + }, + toString$0(_) { + var _this = this, + y = A.DateTime__fourDigits(A.Primitives_getYear(_this)), + m = A.DateTime__twoDigits(A.Primitives_getMonth(_this)), + d = A.DateTime__twoDigits(A.Primitives_getDay(_this)), + h = A.DateTime__twoDigits(A.Primitives_getHours(_this)), + min = A.DateTime__twoDigits(A.Primitives_getMinutes(_this)), + sec = A.DateTime__twoDigits(A.Primitives_getSeconds(_this)), + ms = A.DateTime__threeDigits(A.Primitives_getMilliseconds(_this)), + t1 = _this._microsecond, + us = t1 === 0 ? "" : A.DateTime__threeDigits(t1); + t1 = y + "-" + m; + if (_this.isUtc) + return t1 + "-" + d + " " + h + ":" + min + ":" + sec + "." + ms + us + "Z"; + else + return t1 + "-" + d + " " + h + ":" + min + ":" + sec + "." + ms + us; + }, + $isComparable: 1 + }; + A.Duration.prototype = { + $eq(_, other) { + if (other == null) + return false; + return other instanceof A.Duration && this._duration === other._duration; + }, + get$hashCode(_) { + return B.JSInt_methods.get$hashCode(this._duration); + }, + compareTo$1(_, other) { + return B.JSInt_methods.compareTo$1(this._duration, type$.Duration._as(other)._duration); + }, + toString$0(_) { + var sign, minutes, minutesPadding, seconds, secondsPadding, + microseconds = this._duration, + hours = B.JSInt_methods._tdivFast$1(microseconds, 3600000000), + microseconds0 = microseconds % 3600000000; + if (microseconds < 0) { + hours = 0 - hours; + microseconds = 0 - microseconds0; + sign = "-"; + } else { + microseconds = microseconds0; + sign = ""; + } + minutes = B.JSInt_methods._tdivFast$1(microseconds, 60000000); + microseconds %= 60000000; + minutesPadding = minutes < 10 ? "0" : ""; + seconds = B.JSInt_methods._tdivFast$1(microseconds, 1000000); + secondsPadding = seconds < 10 ? "0" : ""; + return sign + hours + ":" + minutesPadding + minutes + ":" + secondsPadding + seconds + "." + B.JSString_methods.padLeft$2(B.JSInt_methods.toString$0(microseconds % 1000000), 6, "0"); + }, + $isComparable: 1 + }; + A._Enum.prototype = { + toString$0(_) { + return this._enumToString$0(); + }, + $isEnum: 1 + }; + A.Error.prototype = { + get$stackTrace() { + return A.Primitives_extractStackTrace(this); + } + }; + A.AssertionError.prototype = { + toString$0(_) { + var t1 = this.message; + if (t1 != null) + return "Assertion failed: " + A.Error_safeToString(t1); + return "Assertion failed"; + } + }; + A.TypeError.prototype = {}; + A.ArgumentError.prototype = { + get$_errorName() { + return "Invalid argument" + (!this._hasValue ? "(s)" : ""); + }, + get$_errorExplanation() { + return ""; + }, + toString$0(_) { + var _this = this, + $name = _this.name, + nameString = $name == null ? "" : " (" + $name + ")", + message = _this.message, + messageString = message == null ? "" : ": " + A.S(message), + prefix = _this.get$_errorName() + nameString + messageString; + if (!_this._hasValue) + return prefix; + return prefix + _this.get$_errorExplanation() + ": " + A.Error_safeToString(_this.get$invalidValue()); + }, + get$invalidValue() { + return this.invalidValue; + } + }; + A.RangeError.prototype = { + get$invalidValue() { + return A._asNumQ(this.invalidValue); + }, + get$_errorName() { + return "RangeError"; + }, + get$_errorExplanation() { + var explanation, + start = this.start, + end = this.end; + if (start == null) + explanation = end != null ? ": Not less than or equal to " + A.S(end) : ""; + else if (end == null) + explanation = ": Not greater than or equal to " + A.S(start); + else if (end > start) + explanation = ": Not in inclusive range " + A.S(start) + ".." + A.S(end); + else + explanation = end < start ? ": Valid value range is empty" : ": Only valid value is " + A.S(start); + return explanation; + } + }; + A.IndexError.prototype = { + get$invalidValue() { + return A._asInt(this.invalidValue); + }, + get$_errorName() { + return "RangeError"; + }, + get$_errorExplanation() { + if (A._asInt(this.invalidValue) < 0) + return ": index must not be negative"; + var t1 = this.length; + if (t1 === 0) + return ": no indices are valid"; + return ": index should be less than " + t1; + }, + get$length(receiver) { + return this.length; + } + }; + A.UnsupportedError.prototype = { + toString$0(_) { + return "Unsupported operation: " + this.message; + } + }; + A.UnimplementedError.prototype = { + toString$0(_) { + return "UnimplementedError: " + this.message; + } + }; + A.StateError.prototype = { + toString$0(_) { + return "Bad state: " + this.message; + } + }; + A.ConcurrentModificationError.prototype = { + toString$0(_) { + var t1 = this.modifiedObject; + if (t1 == null) + return "Concurrent modification during iteration."; + return "Concurrent modification during iteration: " + A.Error_safeToString(t1) + "."; + } + }; + A.OutOfMemoryError.prototype = { + toString$0(_) { + return "Out of Memory"; + }, + get$stackTrace() { + return null; + }, + $isError: 1 + }; + A.StackOverflowError.prototype = { + toString$0(_) { + return "Stack Overflow"; + }, + get$stackTrace() { + return null; + }, + $isError: 1 + }; + A._Exception.prototype = { + toString$0(_) { + return "Exception: " + this.message; + }, + $isException: 1 + }; + A.FormatException.prototype = { + toString$0(_) { + var t1, lineEnd, lineNum, lineStart, previousCharWasCR, i, char, prefix, postfix, end, start, + message = this.message, + report = "" !== message ? "FormatException: " + message : "FormatException", + offset = this.offset, + source = this.source; + if (typeof source == "string") { + if (offset != null) + t1 = offset < 0 || offset > source.length; + else + t1 = false; + if (t1) + offset = null; + if (offset == null) { + if (source.length > 78) + source = B.JSString_methods.substring$2(source, 0, 75) + "..."; + return report + "\n" + source; + } + for (lineEnd = source.length, lineNum = 1, lineStart = 0, previousCharWasCR = false, i = 0; i < offset; ++i) { + if (!(i < lineEnd)) + return A.ioore(source, i); + char = source.charCodeAt(i); + if (char === 10) { + if (lineStart !== i || !previousCharWasCR) + ++lineNum; + lineStart = i + 1; + previousCharWasCR = false; + } else if (char === 13) { + ++lineNum; + lineStart = i + 1; + previousCharWasCR = true; + } + } + report = lineNum > 1 ? report + (" (at line " + lineNum + ", character " + (offset - lineStart + 1) + ")\n") : report + (" (at character " + (offset + 1) + ")\n"); + for (i = offset; i < lineEnd; ++i) { + if (!(i >= 0)) + return A.ioore(source, i); + char = source.charCodeAt(i); + if (char === 10 || char === 13) { + lineEnd = i; + break; + } + } + prefix = ""; + if (lineEnd - lineStart > 78) { + postfix = "..."; + if (offset - lineStart < 75) { + end = lineStart + 75; + start = lineStart; + } else { + if (lineEnd - offset < 75) { + start = lineEnd - 75; + end = lineEnd; + postfix = ""; + } else { + start = offset - 36; + end = offset + 36; + } + prefix = "..."; + } + } else { + end = lineEnd; + start = lineStart; + postfix = ""; + } + return report + prefix + B.JSString_methods.substring$2(source, start, end) + postfix + "\n" + B.JSString_methods.$mul(" ", offset - start + prefix.length) + "^\n"; + } else + return offset != null ? report + (" (at offset " + A.S(offset) + ")") : report; + }, + $isException: 1 + }; + A.IntegerDivisionByZeroException.prototype = { + get$stackTrace() { + return null; + }, + toString$0(_) { + return "IntegerDivisionByZeroException"; + }, + $isError: 1, + $isException: 1 + }; + A.Iterable.prototype = { + cast$1$0(_, $R) { + return A.CastIterable_CastIterable(this, A._instanceType(this)._eval$1("Iterable.E"), $R); + }, + map$1$1(_, toElement, $T) { + var t1 = A._instanceType(this); + return A.MappedIterable_MappedIterable(this, t1._bind$1($T)._eval$1("1(Iterable.E)")._as(toElement), t1._eval$1("Iterable.E"), $T); + }, + toList$1$growable(_, growable) { + var t1 = A._instanceType(this)._eval$1("Iterable.E"); + if (growable) + t1 = A.List_List$_of(this, t1); + else { + t1 = A.List_List$_of(this, t1); + t1.$flags = 1; + t1 = t1; + } + return t1; + }, + toList$0(_) { + return this.toList$1$growable(0, true); + }, + get$length(_) { + var count, + it = this.get$iterator(this); + for (count = 0; it.moveNext$0();) + ++count; + return count; + }, + get$isEmpty(_) { + return !this.get$iterator(this).moveNext$0(); + }, + take$1(_, count) { + return A.TakeIterable_TakeIterable(this, count, A._instanceType(this)._eval$1("Iterable.E")); + }, + skip$1(_, count) { + return A.SkipIterable_SkipIterable(this, count, A._instanceType(this)._eval$1("Iterable.E")); + }, + skipWhile$1(_, test) { + var t1 = A._instanceType(this); + return new A.SkipWhileIterable(this, t1._eval$1("bool(Iterable.E)")._as(test), t1._eval$1("SkipWhileIterable")); + }, + get$first(_) { + var it = this.get$iterator(this); + if (!it.moveNext$0()) + throw A.wrapException(A.IterableElementError_noElement()); + return it.get$current(); + }, + get$last(_) { + var result, + it = this.get$iterator(this); + if (!it.moveNext$0()) + throw A.wrapException(A.IterableElementError_noElement()); + do + result = it.get$current(); + while (it.moveNext$0()); + return result; + }, + elementAt$1(_, index) { + var iterator, skipCount; + A.RangeError_checkNotNegative(index, "index"); + iterator = this.get$iterator(this); + for (skipCount = index; iterator.moveNext$0();) { + if (skipCount === 0) + return iterator.get$current(); + --skipCount; + } + throw A.wrapException(A.IndexError$withLength(index, index - skipCount, this, null, "index")); + }, + toString$0(_) { + return A.Iterable_iterableToShortString(this, "(", ")"); + } + }; + A.MapEntry.prototype = { + toString$0(_) { + return "MapEntry(" + A.S(this.key) + ": " + A.S(this.value) + ")"; + } + }; + A.Null.prototype = { + get$hashCode(_) { + return A.Object.prototype.get$hashCode.call(this, 0); + }, + toString$0(_) { + return "null"; + } + }; + A.Object.prototype = {$isObject: 1, + $eq(_, other) { + return this === other; + }, + get$hashCode(_) { + return A.Primitives_objectHashCode(this); + }, + toString$0(_) { + return "Instance of '" + A.Primitives_objectTypeName(this) + "'"; + }, + get$runtimeType(_) { + return A.getRuntimeTypeOfDartObject(this); + }, + toString() { + return this.toString$0(this); + } + }; + A._StringStackTrace.prototype = { + toString$0(_) { + return this._stackTrace; + }, + $isStackTrace: 1 + }; + A.StringBuffer.prototype = { + get$length(_) { + return this._contents.length; + }, + toString$0(_) { + var t1 = this._contents; + return t1.charCodeAt(0) == 0 ? t1 : t1; + }, + $isStringSink: 1 + }; + A.Uri_parseIPv6Address_error.prototype = { + call$2(msg, position) { + throw A.wrapException(A.FormatException$("Illegal IPv6 address, " + msg, this.host, position)); + }, + $signature: 50 + }; + A._Uri.prototype = { + get$_text() { + var t1, t2, t3, t4, _this = this, + value = _this.___Uri__text_FI; + if (value === $) { + t1 = _this.scheme; + t2 = t1.length !== 0 ? t1 + ":" : ""; + t3 = _this._host; + t4 = t3 == null; + if (!t4 || t1 === "file") { + t1 = t2 + "//"; + t2 = _this._userInfo; + if (t2.length !== 0) + t1 = t1 + t2 + "@"; + if (!t4) + t1 += t3; + t2 = _this._port; + if (t2 != null) + t1 = t1 + ":" + A.S(t2); + } else + t1 = t2; + t1 += _this.path; + t2 = _this._query; + if (t2 != null) + t1 = t1 + "?" + t2; + t2 = _this._fragment; + if (t2 != null) + t1 = t1 + "#" + t2; + value = _this.___Uri__text_FI = t1.charCodeAt(0) == 0 ? t1 : t1; + } + return value; + }, + get$pathSegments() { + var pathToSplit, t1, result, _this = this, + value = _this.___Uri_pathSegments_FI; + if (value === $) { + pathToSplit = _this.path; + t1 = pathToSplit.length; + if (t1 !== 0) { + if (0 >= t1) + return A.ioore(pathToSplit, 0); + t1 = pathToSplit.charCodeAt(0) === 47; + } else + t1 = false; + if (t1) + pathToSplit = B.JSString_methods.substring$1(pathToSplit, 1); + result = pathToSplit.length === 0 ? B.List_empty0 : A.List_List$unmodifiable(new A.MappedListIterable(A._setArrayType(pathToSplit.split("/"), type$.JSArray_String), type$.dynamic_Function_String._as(A.core_Uri_decodeComponent$closure()), type$.MappedListIterable_String_dynamic), type$.String); + _this.___Uri_pathSegments_FI !== $ && A.throwLateFieldADI("pathSegments"); + value = _this.___Uri_pathSegments_FI = result; + } + return value; + }, + get$hashCode(_) { + var result, _this = this, + value = _this.___Uri_hashCode_FI; + if (value === $) { + result = B.JSString_methods.get$hashCode(_this.get$_text()); + _this.___Uri_hashCode_FI !== $ && A.throwLateFieldADI("hashCode"); + _this.___Uri_hashCode_FI = result; + value = result; + } + return value; + }, + get$userInfo() { + return this._userInfo; + }, + get$host() { + var host = this._host; + if (host == null) + return ""; + if (B.JSString_methods.startsWith$1(host, "[") && !B.JSString_methods.startsWith$2(host, "v", 1)) + return B.JSString_methods.substring$2(host, 1, host.length - 1); + return host; + }, + get$port() { + var t1 = this._port; + return t1 == null ? A._Uri__defaultPort(this.scheme) : t1; + }, + get$query() { + var t1 = this._query; + return t1 == null ? "" : t1; + }, + get$fragment() { + var t1 = this._fragment; + return t1 == null ? "" : t1; + }, + isScheme$1(scheme) { + var thisScheme = this.scheme; + if (scheme.length !== thisScheme.length) + return false; + return A._caseInsensitiveCompareStart(scheme, thisScheme, 0) >= 0; + }, + replace$1$scheme(scheme) { + var isFile, userInfo, port, host, currentPath, t1, path, _this = this; + scheme = A._Uri__makeScheme(scheme, 0, scheme.length); + isFile = scheme === "file"; + userInfo = _this._userInfo; + port = _this._port; + if (scheme !== _this.scheme) + port = A._Uri__makePort(port, scheme); + host = _this._host; + if (!(host != null)) + host = userInfo.length !== 0 || port != null || isFile ? "" : null; + currentPath = _this.path; + if (!isFile) + t1 = host != null && currentPath.length !== 0; + else + t1 = true; + if (t1 && !B.JSString_methods.startsWith$1(currentPath, "/")) + currentPath = "/" + currentPath; + path = currentPath; + return A._Uri$_internal(scheme, userInfo, host, port, path, _this._query, _this._fragment); + }, + get$isAbsolute() { + if (this.scheme !== "") { + var t1 = this._fragment; + t1 = (t1 == null ? "" : t1) === ""; + } else + t1 = false; + return t1; + }, + _mergePaths$2(base, reference) { + var backCount, refStart, baseEnd, t1, newEnd, delta, t2, t3, t4; + for (backCount = 0, refStart = 0; B.JSString_methods.startsWith$2(reference, "../", refStart);) { + refStart += 3; + ++backCount; + } + baseEnd = B.JSString_methods.lastIndexOf$1(base, "/"); + t1 = base.length; + for (;;) { + if (!(baseEnd > 0 && backCount > 0)) + break; + newEnd = B.JSString_methods.lastIndexOf$2(base, "/", baseEnd - 1); + if (newEnd < 0) + break; + delta = baseEnd - newEnd; + t2 = delta !== 2; + t3 = false; + if (!t2 || delta === 3) { + t4 = newEnd + 1; + if (!(t4 < t1)) + return A.ioore(base, t4); + if (base.charCodeAt(t4) === 46) + if (t2) { + t2 = newEnd + 2; + if (!(t2 < t1)) + return A.ioore(base, t2); + t2 = base.charCodeAt(t2) === 46; + } else + t2 = true; + else + t2 = t3; + } else + t2 = t3; + if (t2) + break; + --backCount; + baseEnd = newEnd; + } + return B.JSString_methods.replaceRange$3(base, baseEnd + 1, null, B.JSString_methods.substring$1(reference, refStart - 3 * backCount)); + }, + resolve$1(reference) { + return this.resolveUri$1(A.Uri_parse(reference)); + }, + resolveUri$1(reference) { + var targetScheme, t1, targetUserInfo, targetHost, targetPort, targetPath, targetQuery, packageNameEnd, packageName, mergedPath, fragment, _this = this; + if (reference.get$scheme().length !== 0) + return reference; + else { + targetScheme = _this.scheme; + if (reference.get$hasAuthority()) { + t1 = reference.replace$1$scheme(targetScheme); + return t1; + } else { + targetUserInfo = _this._userInfo; + targetHost = _this._host; + targetPort = _this._port; + targetPath = _this.path; + if (reference.get$hasEmptyPath()) + targetQuery = reference.get$hasQuery() ? reference.get$query() : _this._query; + else { + packageNameEnd = A._Uri__packageNameEnd(_this, targetPath); + if (packageNameEnd > 0) { + packageName = B.JSString_methods.substring$2(targetPath, 0, packageNameEnd); + targetPath = reference.get$hasAbsolutePath() ? packageName + A._Uri__removeDotSegments(reference.get$path()) : packageName + A._Uri__removeDotSegments(_this._mergePaths$2(B.JSString_methods.substring$1(targetPath, packageName.length), reference.get$path())); + } else if (reference.get$hasAbsolutePath()) + targetPath = A._Uri__removeDotSegments(reference.get$path()); + else if (targetPath.length === 0) + if (targetHost == null) + targetPath = targetScheme.length === 0 ? reference.get$path() : A._Uri__removeDotSegments(reference.get$path()); + else + targetPath = A._Uri__removeDotSegments("/" + reference.get$path()); + else { + mergedPath = _this._mergePaths$2(targetPath, reference.get$path()); + t1 = targetScheme.length === 0; + if (!t1 || targetHost != null || B.JSString_methods.startsWith$1(targetPath, "/")) + targetPath = A._Uri__removeDotSegments(mergedPath); + else + targetPath = A._Uri__normalizeRelativePath(mergedPath, !t1 || targetHost != null); + } + targetQuery = reference.get$hasQuery() ? reference.get$query() : null; + } + } + } + fragment = reference.get$hasFragment() ? reference.get$fragment() : null; + return A._Uri$_internal(targetScheme, targetUserInfo, targetHost, targetPort, targetPath, targetQuery, fragment); + }, + get$hasAuthority() { + return this._host != null; + }, + get$hasQuery() { + return this._query != null; + }, + get$hasFragment() { + return this._fragment != null; + }, + get$hasEmptyPath() { + return this.path.length === 0; + }, + get$hasAbsolutePath() { + return B.JSString_methods.startsWith$1(this.path, "/"); + }, + toFilePath$0() { + var pathSegments, _this = this, + t1 = _this.scheme; + if (t1 !== "" && t1 !== "file") + throw A.wrapException(A.UnsupportedError$("Cannot extract a file path from a " + t1 + " URI")); + t1 = _this._query; + if ((t1 == null ? "" : t1) !== "") + throw A.wrapException(A.UnsupportedError$(string$.Cannotefq)); + t1 = _this._fragment; + if ((t1 == null ? "" : t1) !== "") + throw A.wrapException(A.UnsupportedError$(string$.Cannoteff)); + if (_this._host != null && _this.get$host() !== "") + A.throwExpression(A.UnsupportedError$(string$.Cannoten)); + pathSegments = _this.get$pathSegments(); + A._Uri__checkNonWindowsPathReservedCharacters(pathSegments, false); + t1 = A.StringBuffer__writeAll(B.JSString_methods.startsWith$1(_this.path, "/") ? "/" : "", pathSegments, "/"); + t1 = t1.charCodeAt(0) == 0 ? t1 : t1; + return t1; + }, + toString$0(_) { + return this.get$_text(); + }, + $eq(_, other) { + var t1, t2, t3, _this = this; + if (other == null) + return false; + if (_this === other) + return true; + t1 = false; + if (type$.Uri._is(other)) + if (_this.scheme === other.get$scheme()) + if (_this._host != null === other.get$hasAuthority()) + if (_this._userInfo === other.get$userInfo()) + if (_this.get$host() === other.get$host()) + if (_this.get$port() === other.get$port()) + if (_this.path === other.get$path()) { + t2 = _this._query; + t3 = t2 == null; + if (!t3 === other.get$hasQuery()) { + if (t3) + t2 = ""; + if (t2 === other.get$query()) { + t2 = _this._fragment; + t3 = t2 == null; + if (!t3 === other.get$hasFragment()) { + t1 = t3 ? "" : t2; + t1 = t1 === other.get$fragment(); + } + } + } + } + return t1; + }, + $isUri: 1, + get$scheme() { + return this.scheme; + }, + get$path() { + return this.path; + } + }; + A._Uri__makePath_closure.prototype = { + call$1(s) { + return A._Uri__uriEncode(64, A._asString(s), B.C_Utf8Codec, false); + }, + $signature: 9 + }; + A.UriData.prototype = { + get$uri() { + var t2, queryIndex, end, query, _this = this, _null = null, + t1 = _this._uriCache; + if (t1 == null) { + t1 = _this._separatorIndices; + if (0 >= t1.length) + return A.ioore(t1, 0); + t2 = _this._text; + t1 = t1[0] + 1; + queryIndex = B.JSString_methods.indexOf$2(t2, "?", t1); + end = t2.length; + if (queryIndex >= 0) { + query = A._Uri__normalizeOrSubstring(t2, queryIndex + 1, end, 256, false, false); + end = queryIndex; + } else + query = _null; + t1 = _this._uriCache = new A._DataUri("data", "", _null, _null, A._Uri__normalizeOrSubstring(t2, t1, end, 128, false, false), query, _null); + } + return t1; + }, + toString$0(_) { + var t2, + t1 = this._separatorIndices; + if (0 >= t1.length) + return A.ioore(t1, 0); + t2 = this._text; + return t1[0] === -1 ? "data:" + t2 : t2; + } + }; + A._SimpleUri.prototype = { + get$hasAuthority() { + return this._hostStart > 0; + }, + get$hasPort() { + return this._hostStart > 0 && this._portStart + 1 < this._pathStart; + }, + get$hasQuery() { + return this._queryStart < this._fragmentStart; + }, + get$hasFragment() { + return this._fragmentStart < this._uri.length; + }, + get$hasAbsolutePath() { + return B.JSString_methods.startsWith$2(this._uri, "/", this._pathStart); + }, + get$hasEmptyPath() { + return this._pathStart === this._queryStart; + }, + get$isAbsolute() { + return this._schemeEnd > 0 && this._fragmentStart >= this._uri.length; + }, + get$scheme() { + var t1 = this._schemeCache; + return t1 == null ? this._schemeCache = this._computeScheme$0() : t1; + }, + _computeScheme$0() { + var t2, _this = this, + t1 = _this._schemeEnd; + if (t1 <= 0) + return ""; + t2 = t1 === 4; + if (t2 && B.JSString_methods.startsWith$1(_this._uri, "http")) + return "http"; + if (t1 === 5 && B.JSString_methods.startsWith$1(_this._uri, "https")) + return "https"; + if (t2 && B.JSString_methods.startsWith$1(_this._uri, "file")) + return "file"; + if (t1 === 7 && B.JSString_methods.startsWith$1(_this._uri, "package")) + return "package"; + return B.JSString_methods.substring$2(_this._uri, 0, t1); + }, + get$userInfo() { + var t1 = this._hostStart, + t2 = this._schemeEnd + 3; + return t1 > t2 ? B.JSString_methods.substring$2(this._uri, t2, t1 - 1) : ""; + }, + get$host() { + var t1 = this._hostStart; + return t1 > 0 ? B.JSString_methods.substring$2(this._uri, t1, this._portStart) : ""; + }, + get$port() { + var t1, _this = this; + if (_this.get$hasPort()) + return A.int_parse(B.JSString_methods.substring$2(_this._uri, _this._portStart + 1, _this._pathStart), null); + t1 = _this._schemeEnd; + if (t1 === 4 && B.JSString_methods.startsWith$1(_this._uri, "http")) + return 80; + if (t1 === 5 && B.JSString_methods.startsWith$1(_this._uri, "https")) + return 443; + return 0; + }, + get$path() { + return B.JSString_methods.substring$2(this._uri, this._pathStart, this._queryStart); + }, + get$query() { + var t1 = this._queryStart, + t2 = this._fragmentStart; + return t1 < t2 ? B.JSString_methods.substring$2(this._uri, t1 + 1, t2) : ""; + }, + get$fragment() { + var t1 = this._fragmentStart, + t2 = this._uri; + return t1 < t2.length ? B.JSString_methods.substring$1(t2, t1 + 1) : ""; + }, + _isPort$1(port) { + var portDigitStart = this._portStart + 1; + return portDigitStart + port.length === this._pathStart && B.JSString_methods.startsWith$2(this._uri, port, portDigitStart); + }, + removeFragment$0() { + var _this = this, + t1 = _this._fragmentStart, + t2 = _this._uri; + if (t1 >= t2.length) + return _this; + return new A._SimpleUri(B.JSString_methods.substring$2(t2, 0, t1), _this._schemeEnd, _this._hostStart, _this._portStart, _this._pathStart, _this._queryStart, t1, _this._schemeCache); + }, + replace$1$scheme(scheme) { + var schemeChanged, isFile, t1, userInfo, port, host, t2, path, t3, query, fragment, _this = this, _null = null; + scheme = A._Uri__makeScheme(scheme, 0, scheme.length); + schemeChanged = !(_this._schemeEnd === scheme.length && B.JSString_methods.startsWith$1(_this._uri, scheme)); + isFile = scheme === "file"; + t1 = _this._hostStart; + userInfo = t1 > 0 ? B.JSString_methods.substring$2(_this._uri, _this._schemeEnd + 3, t1) : ""; + port = _this.get$hasPort() ? _this.get$port() : _null; + if (schemeChanged) + port = A._Uri__makePort(port, scheme); + t1 = _this._hostStart; + if (t1 > 0) + host = B.JSString_methods.substring$2(_this._uri, t1, _this._portStart); + else + host = userInfo.length !== 0 || port != null || isFile ? "" : _null; + t1 = _this._uri; + t2 = _this._queryStart; + path = B.JSString_methods.substring$2(t1, _this._pathStart, t2); + if (!isFile) + t3 = host != null && path.length !== 0; + else + t3 = true; + if (t3 && !B.JSString_methods.startsWith$1(path, "/")) + path = "/" + path; + t3 = _this._fragmentStart; + query = t2 < t3 ? B.JSString_methods.substring$2(t1, t2 + 1, t3) : _null; + t2 = _this._fragmentStart; + fragment = t2 < t1.length ? B.JSString_methods.substring$1(t1, t2 + 1) : _null; + return A._Uri$_internal(scheme, userInfo, host, port, path, query, fragment); + }, + resolve$1(reference) { + return this.resolveUri$1(A.Uri_parse(reference)); + }, + resolveUri$1(reference) { + if (reference instanceof A._SimpleUri) + return this._simpleMerge$2(this, reference); + return this._toNonSimple$0().resolveUri$1(reference); + }, + _simpleMerge$2(base, ref) { + var t2, t3, t4, isSimple, delta, refStart, basePathStart, packageNameEnd, basePathStart0, baseStart, baseEnd, baseUri, baseStart0, backCount, refStart0, insert, + t1 = ref._schemeEnd; + if (t1 > 0) + return ref; + t2 = ref._hostStart; + if (t2 > 0) { + t3 = base._schemeEnd; + if (t3 <= 0) + return ref; + t4 = t3 === 4; + if (t4 && B.JSString_methods.startsWith$1(base._uri, "file")) + isSimple = ref._pathStart !== ref._queryStart; + else if (t4 && B.JSString_methods.startsWith$1(base._uri, "http")) + isSimple = !ref._isPort$1("80"); + else + isSimple = !(t3 === 5 && B.JSString_methods.startsWith$1(base._uri, "https")) || !ref._isPort$1("443"); + if (isSimple) { + delta = t3 + 1; + return new A._SimpleUri(B.JSString_methods.substring$2(base._uri, 0, delta) + B.JSString_methods.substring$1(ref._uri, t1 + 1), t3, t2 + delta, ref._portStart + delta, ref._pathStart + delta, ref._queryStart + delta, ref._fragmentStart + delta, base._schemeCache); + } else + return this._toNonSimple$0().resolveUri$1(ref); + } + refStart = ref._pathStart; + t1 = ref._queryStart; + if (refStart === t1) { + t2 = ref._fragmentStart; + if (t1 < t2) { + t3 = base._queryStart; + delta = t3 - t1; + return new A._SimpleUri(B.JSString_methods.substring$2(base._uri, 0, t3) + B.JSString_methods.substring$1(ref._uri, t1), base._schemeEnd, base._hostStart, base._portStart, base._pathStart, t1 + delta, t2 + delta, base._schemeCache); + } + t1 = ref._uri; + if (t2 < t1.length) { + t3 = base._fragmentStart; + return new A._SimpleUri(B.JSString_methods.substring$2(base._uri, 0, t3) + B.JSString_methods.substring$1(t1, t2), base._schemeEnd, base._hostStart, base._portStart, base._pathStart, base._queryStart, t2 + (t3 - t2), base._schemeCache); + } + return base.removeFragment$0(); + } + t2 = ref._uri; + if (B.JSString_methods.startsWith$2(t2, "/", refStart)) { + basePathStart = base._pathStart; + packageNameEnd = A._SimpleUri__packageNameEnd(this); + basePathStart0 = packageNameEnd > 0 ? packageNameEnd : basePathStart; + delta = basePathStart0 - refStart; + return new A._SimpleUri(B.JSString_methods.substring$2(base._uri, 0, basePathStart0) + B.JSString_methods.substring$1(t2, refStart), base._schemeEnd, base._hostStart, base._portStart, basePathStart, t1 + delta, ref._fragmentStart + delta, base._schemeCache); + } + baseStart = base._pathStart; + baseEnd = base._queryStart; + if (baseStart === baseEnd && base._hostStart > 0) { + while (B.JSString_methods.startsWith$2(t2, "../", refStart)) + refStart += 3; + delta = baseStart - refStart + 1; + return new A._SimpleUri(B.JSString_methods.substring$2(base._uri, 0, baseStart) + "/" + B.JSString_methods.substring$1(t2, refStart), base._schemeEnd, base._hostStart, base._portStart, baseStart, t1 + delta, ref._fragmentStart + delta, base._schemeCache); + } + baseUri = base._uri; + packageNameEnd = A._SimpleUri__packageNameEnd(this); + if (packageNameEnd >= 0) + baseStart0 = packageNameEnd; + else + for (baseStart0 = baseStart; B.JSString_methods.startsWith$2(baseUri, "../", baseStart0);) + baseStart0 += 3; + backCount = 0; + for (;;) { + refStart0 = refStart + 3; + if (!(refStart0 <= t1 && B.JSString_methods.startsWith$2(t2, "../", refStart))) + break; + ++backCount; + refStart = refStart0; + } + for (t3 = baseUri.length, insert = ""; baseEnd > baseStart0;) { + --baseEnd; + if (!(baseEnd >= 0 && baseEnd < t3)) + return A.ioore(baseUri, baseEnd); + if (baseUri.charCodeAt(baseEnd) === 47) { + if (backCount === 0) { + insert = "/"; + break; + } + --backCount; + insert = "/"; + } + } + if (baseEnd === baseStart0 && base._schemeEnd <= 0 && !B.JSString_methods.startsWith$2(baseUri, "/", baseStart)) { + refStart -= backCount * 3; + insert = ""; + } + delta = baseEnd - refStart + insert.length; + return new A._SimpleUri(B.JSString_methods.substring$2(baseUri, 0, baseEnd) + insert + B.JSString_methods.substring$1(t2, refStart), base._schemeEnd, base._hostStart, base._portStart, baseStart, t1 + delta, ref._fragmentStart + delta, base._schemeCache); + }, + toFilePath$0() { + var t2, _this = this, + t1 = _this._schemeEnd; + if (t1 >= 0) { + t2 = !(t1 === 4 && B.JSString_methods.startsWith$1(_this._uri, "file")); + t1 = t2; + } else + t1 = false; + if (t1) + throw A.wrapException(A.UnsupportedError$("Cannot extract a file path from a " + _this.get$scheme() + " URI")); + t1 = _this._queryStart; + t2 = _this._uri; + if (t1 < t2.length) { + if (t1 < _this._fragmentStart) + throw A.wrapException(A.UnsupportedError$(string$.Cannotefq)); + throw A.wrapException(A.UnsupportedError$(string$.Cannoteff)); + } + if (_this._hostStart < _this._portStart) + A.throwExpression(A.UnsupportedError$(string$.Cannoten)); + t1 = B.JSString_methods.substring$2(t2, _this._pathStart, t1); + return t1; + }, + get$hashCode(_) { + var t1 = this._hashCodeCache; + return t1 == null ? this._hashCodeCache = B.JSString_methods.get$hashCode(this._uri) : t1; + }, + $eq(_, other) { + if (other == null) + return false; + if (this === other) + return true; + return type$.Uri._is(other) && this._uri === other.toString$0(0); + }, + _toNonSimple$0() { + var _this = this, _null = null, + t1 = _this.get$scheme(), + t2 = _this.get$userInfo(), + t3 = _this._hostStart > 0 ? _this.get$host() : _null, + t4 = _this.get$hasPort() ? _this.get$port() : _null, + t5 = _this._uri, + t6 = _this._queryStart, + t7 = B.JSString_methods.substring$2(t5, _this._pathStart, t6), + t8 = _this._fragmentStart; + t6 = t6 < t8 ? _this.get$query() : _null; + return A._Uri$_internal(t1, t2, t3, t4, t7, t6, t8 < t5.length ? _this.get$fragment() : _null); + }, + toString$0(_) { + return this._uri; + }, + $isUri: 1 + }; + A._DataUri.prototype = {}; + A.Expando.prototype = { + $index(_, object) { + A.Expando__badExpandoKey(object); + return this._jsWeakMap.get(object); + }, + toString$0(_) { + return "Expando:null"; + } + }; + A.NullRejectionException.prototype = { + toString$0(_) { + return "Promise was rejected with a value of `" + (this.isUndefined ? "undefined" : "null") + "`."; + }, + $isException: 1 + }; + A.jsify__convert.prototype = { + call$1(o) { + var t1, convertedMap, key, convertedList; + if (A._noJsifyRequired(o)) + return o; + t1 = this._convertedObjects; + if (t1.containsKey$1(o)) + return t1.$index(0, o); + if (type$.Map_dynamic_dynamic._is(o)) { + convertedMap = {}; + t1.$indexSet(0, o, convertedMap); + for (t1 = J.get$iterator$ax(o.get$keys()); t1.moveNext$0();) { + key = t1.get$current(); + convertedMap[key] = this.call$1(o.$index(0, key)); + } + return convertedMap; + } else if (type$.Iterable_dynamic._is(o)) { + convertedList = []; + t1.$indexSet(0, o, convertedList); + B.JSArray_methods.addAll$1(convertedList, J.map$1$1$ax(o, this, type$.dynamic)); + return convertedList; + } else + return o; + }, + $signature: 14 + }; + A.promiseToFuture_closure.prototype = { + call$1(r) { + return this.completer.complete$1(this.T._eval$1("0/?")._as(r)); + }, + $signature: 15 + }; + A.promiseToFuture_closure0.prototype = { + call$1(e) { + if (e == null) + return this.completer.completeError$1(new A.NullRejectionException(e === undefined)); + return this.completer.completeError$1(e); + }, + $signature: 15 + }; + A.dartify_convert.prototype = { + call$1(o) { + var t1, proto, t2, dartObject, originalKeys, dartKeys, i, jsKey, dartKey, l, $length; + if (A._noDartifyRequired(o)) + return o; + t1 = this._convertedObjects; + o.toString; + if (t1.containsKey$1(o)) + return t1.$index(0, o); + if (o instanceof Date) + return new A.DateTime(A.DateTime__validate(o.getTime(), 0, true), 0, true); + if (o instanceof RegExp) + throw A.wrapException(A.ArgumentError$("structured clone of RegExp", null)); + if (o instanceof Promise) + return A.promiseToFuture(o, type$.nullable_Object); + proto = Object.getPrototypeOf(o); + if (proto === Object.prototype || proto === null) { + t2 = type$.nullable_Object; + dartObject = A.LinkedHashMap_LinkedHashMap$_empty(t2, t2); + t1.$indexSet(0, o, dartObject); + originalKeys = Object.keys(o); + dartKeys = []; + for (t1 = J.getInterceptor$ax(originalKeys), t2 = t1.get$iterator(originalKeys); t2.moveNext$0();) + dartKeys.push(A.dartify(t2.get$current())); + for (i = 0; i < t1.get$length(originalKeys); ++i) { + jsKey = t1.$index(originalKeys, i); + if (!(i < dartKeys.length)) + return A.ioore(dartKeys, i); + dartKey = dartKeys[i]; + if (jsKey != null) + dartObject.$indexSet(0, dartKey, this.call$1(o[jsKey])); + } + return dartObject; + } + if (o instanceof Array) { + l = o; + dartObject = []; + t1.$indexSet(0, o, dartObject); + $length = A._asInt(o.length); + for (t1 = J.getInterceptor$asx(l), i = 0; i < $length; ++i) + dartObject.push(this.call$1(t1.$index(l, i))); + return dartObject; + } + return o; + }, + $signature: 14 + }; + A._JSSecureRandom.prototype = { + _JSSecureRandom$0() { + var $crypto = self.crypto; + if ($crypto != null) + if ($crypto.getRandomValues != null) + return; + throw A.wrapException(A.UnsupportedError$("No source of cryptographically secure random numbers available.")); + }, + nextInt$1(max) { + var byteCount, t1, start, randomLimit, t2, t3, random, result, _null = null; + if (max <= 0 || max > 4294967296) + throw A.wrapException(new A.RangeError(_null, _null, false, _null, _null, "max must be in range 0 < max \u2264 2^32, was " + max)); + if (max > 255) + if (max > 65535) + byteCount = max > 16777215 ? 4 : 3; + else + byteCount = 2; + else + byteCount = 1; + t1 = this._math$_buffer; + t1.$flags & 2 && A.throwUnsupportedOperation(t1, 11); + t1.setUint32(0, 0, false); + start = 4 - byteCount; + randomLimit = A._asInt(Math.pow(256, byteCount)); + for (t2 = max - 1, t3 = (max & t2) === 0;;) { + crypto.getRandomValues(J.asUint8List$2$x(B.NativeByteData_methods.get$buffer(t1), start, byteCount)); + random = t1.getUint32(0, false); + if (t3) + return (random & t2) >>> 0; + result = random % max; + if (random - result + max < randomLimit) + return result; + } + }, + $isRandom: 1 + }; + A.DelegatingStreamSink.prototype = { + add$1(_, data) { + this._sink.add$1(0, this.$ti._precomputed1._as(data)); + }, + addError$2(error, stackTrace) { + this._sink.addError$2(error, stackTrace); + }, + close$0() { + return this._sink.close$0(); + }, + $isEventSink: 1, + $isStreamSink: 1 + }; + A.DefaultEquality.prototype = {}; + A.ListEquality.prototype = { + equals$2(list1, list2) { + var $length, t2, i, + t1 = this.$ti._eval$1("List<1>?"); + t1._as(list1); + t1._as(list2); + if (list1 === list2) + return true; + t1 = J.getInterceptor$asx(list1); + $length = t1.get$length(list1); + t2 = J.getInterceptor$asx(list2); + if ($length !== t2.get$length(list2)) + return false; + for (i = 0; i < $length; ++i) + if (!J.$eq$(t1.$index(list1, i), t2.$index(list2, i))) + return false; + return true; + }, + hash$1(list) { + var t1, hash, i; + this.$ti._eval$1("List<1>?")._as(list); + for (t1 = J.getInterceptor$asx(list), hash = 0, i = 0; i < t1.get$length(list); ++i) { + hash = hash + J.get$hashCode$(t1.$index(list, i)) & 2147483647; + hash = hash + (hash << 10 >>> 0) & 2147483647; + hash ^= hash >>> 6; + } + hash = hash + (hash << 3 >>> 0) & 2147483647; + hash ^= hash >>> 11; + return hash + (hash << 15 >>> 0) & 2147483647; + } + }; + A.NonGrowableListMixin.prototype = {}; + A.UnmodifiableMapMixin.prototype = {}; + A.DriftCommunication.prototype = { + DriftCommunication$3$debugLog$serialize(_channel, debugLog, serialize) { + var t1 = this._communication$_channel.__CloseGuaranteeChannel__stream_F; + t1 === $ && A.throwLateFieldNI("_stream"); + t1.listen$2$onDone(this.get$_handleMessage(), new A.DriftCommunication_closure(this)); + }, + newRequestId$0() { + return this._currentRequestId++; + }, + close$0() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$returnValue, $async$self = this, t1; + var $async$close$0 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + if ($async$self._startedClosingLocally || ($async$self._closeCompleter.future._state & 30) !== 0) { + // goto return + $async$goto = 1; + break; + } + $async$self._startedClosingLocally = true; + t1 = $async$self._communication$_channel.__CloseGuaranteeChannel__sink_F; + t1 === $ && A.throwLateFieldNI("_sink"); + t1.close$0(); + $async$goto = 3; + return A._asyncAwait($async$self._closeCompleter.future, $async$close$0); + case 3: + // returning from await. + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$close$0, $async$completer); + }, + _handleMessage$1(msg) { + var request, _this = this; + if (_this._serialize) { + msg.toString; + msg = B.C_DriftProtocol.deserialize$1(msg); + } + if (msg instanceof A.SuccessResponse) { + request = _this._pendingRequests.remove$1(0, msg.requestId); + if (request != null) + request.completer.complete$1(msg.response); + } else if (msg instanceof A.ErrorResponse) { + request = _this._pendingRequests.remove$1(0, msg.requestId); + if (request != null) + request.completeWithError$2(new A.DriftRemoteException(msg.error), msg.stackTrace); + } else if (msg instanceof A.Request) + _this._incomingRequests.add$1(0, msg); + else if (msg instanceof A.CancelledResponse) { + request = _this._pendingRequests.remove$1(0, msg.requestId); + if (request != null) + request.completeWithError$1(B.C_CancellationException); + } + }, + _send$1(msg) { + var t1, t2, _this = this; + if (_this._startedClosingLocally || (_this._closeCompleter.future._state & 30) !== 0) + throw A.wrapException(A.StateError$("Tried to send " + msg.toString$0(0) + " over isolate channel, but the connection was closed!")); + t1 = _this._communication$_channel.__CloseGuaranteeChannel__sink_F; + t1 === $ && A.throwLateFieldNI("_sink"); + t2 = _this._serialize ? B.C_DriftProtocol.serialize$1(msg) : msg; + t1._sink.add$1(0, t1.$ti._precomputed1._as(t2)); + }, + respondError$3(request, error, trace) { + var t1, _this = this; + type$.nullable_StackTrace._as(trace); + if (_this._startedClosingLocally || (_this._closeCompleter.future._state & 30) !== 0) + return; + t1 = request.id; + if (error instanceof A.CancellationException) + _this._send$1(new A.CancelledResponse(t1)); + else + _this._send$1(new A.ErrorResponse(t1, error, trace)); + }, + setRequestHandler$1(handler) { + var t1 = this._incomingRequests; + new A._ControllerStream(t1, A._instanceType(t1)._eval$1("_ControllerStream<1>")).listen$1(new A.DriftCommunication_setRequestHandler_closure(this, type$.FutureOr_nullable_ResponsePayload_Function_Request._as(handler))); + } + }; + A.DriftCommunication_closure.prototype = { + call$0() { + var t1, t2, t3; + for (t1 = this.$this, t2 = t1._pendingRequests, t3 = new A.LinkedHashMapValueIterator(t2, t2.__js_helper$_modifications, t2.__js_helper$_first, A._instanceType(t2)._eval$1("LinkedHashMapValueIterator<2>")); t3.moveNext$0();) + t3.__js_helper$_current.completeWithError$1(B.C_ConnectionClosedException); + t2.clear$0(0); + t1._closeCompleter.complete$0(); + }, + $signature: 0 + }; + A.DriftCommunication_setRequestHandler_closure.prototype = { + call$1(request) { + return this.$call$body$DriftCommunication_setRequestHandler_closure(type$.Request._as(request)); + }, + $call$body$DriftCommunication_setRequestHandler_closure(request) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$returnValue, $async$handler = 2, $async$errorStack = [], $async$self = this, e, s, t1, t2, exception, response, $async$exception; + var $async$call$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) { + $async$errorStack.push($async$result); + $async$goto = $async$handler; + } + for (;;) + switch ($async$goto) { + case 0: + // Function start + response = null; + $async$handler = 4; + t1 = $async$self.handler.call$1(request); + t2 = type$.nullable_ResponsePayload; + $async$goto = 7; + return A._asyncAwait(type$.Future_nullable_ResponsePayload._is(t1) ? t1 : A._Future$value(t2._as(t1), t2), $async$call$1); + case 7: + // returning from await. + response = $async$result; + $async$handler = 2; + // goto after finally + $async$goto = 6; + break; + case 4: + // catch + $async$handler = 3; + $async$exception = $async$errorStack.pop(); + e = A.unwrapException($async$exception); + s = A.getTraceFromException($async$exception); + t1 = $async$self.$this.respondError$3(request, e, s); + $async$returnValue = t1; + // goto return + $async$goto = 1; + break; + // goto after finally + $async$goto = 6; + break; + case 3: + // uncaught + // goto rethrow + $async$goto = 2; + break; + case 6: + // after finally + t1 = $async$self.$this; + if (!(t1._startedClosingLocally || (t1._closeCompleter.future._state & 30) !== 0)) { + t2 = type$.nullable_ResponsePayload._as(response); + t1._send$1(new A.SuccessResponse(request.id, t2)); + } + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + case 2: + // rethrow + return A._asyncRethrow($async$errorStack.at(-1), $async$completer); + } + }); + return A._asyncStartSync($async$call$1, $async$completer); + }, + $signature: 72 + }; + A._PendingRequest.prototype = { + completeWithError$2(error, trace) { + var t1; + if (trace == null) + t1 = this.requestTrace; + else { + t1 = A._setArrayType([], type$.JSArray_Trace); + if (trace instanceof A.Chain) + B.JSArray_methods.addAll$1(t1, trace.traces); + else + t1.push(A.Trace_Trace$from(trace)); + t1.push(A.Trace_Trace$from(this.requestTrace)); + t1 = new A.Chain(A.List_List$unmodifiable(t1, type$.Trace)); + } + this.completer.completeError$2(error, t1); + }, + completeWithError$1(error) { + return this.completeWithError$2(error, null); + } + }; + A.ConnectionClosedException.prototype = { + toString$0(_) { + return "Channel was closed before receiving a response"; + }, + $isException: 1 + }; + A.DriftRemoteException.prototype = { + toString$0(_) { + return J.toString$0$(this.remoteCause); + }, + $isException: 1 + }; + A.DriftProtocol.prototype = { + serialize$1(message) { + var t1, t2; + if (message instanceof A.Request) + return [0, message.id, this.encodePayload$1(message.payload)]; + else if (message instanceof A.ErrorResponse) { + t1 = J.toString$0$(message.error); + t2 = message.stackTrace; + t2 = t2 == null ? null : t2.toString$0(0); + return [2, message.requestId, t1, t2]; + } else if (message instanceof A.SuccessResponse) + return [1, message.requestId, this.encodePayload$1(message.response)]; + else if (message instanceof A.CancelledResponse) + return A._setArrayType([3, message.requestId], type$.JSArray_int); + else + return null; + }, + deserialize$1(message) { + var t1, tag, id, stringTrace; + if (!type$.List_dynamic._is(message)) + throw A.wrapException(B.FormatException_NvI); + t1 = J.getInterceptor$asx(message); + tag = A._asInt(t1.$index(message, 0)); + id = A._asInt(t1.$index(message, 1)); + switch (tag) { + case 0: + return new A.Request(id, type$.nullable_RequestPayload._as(this.decodePayload$1(t1.$index(message, 2)))); + case 2: + stringTrace = A._asStringQ(t1.$index(message, 3)); + t1 = t1.$index(message, 2); + if (t1 == null) + t1 = A._asObject(t1); + return new A.ErrorResponse(id, t1, stringTrace != null ? new A._StringStackTrace(stringTrace) : null); + case 1: + return new A.SuccessResponse(id, type$.nullable_ResponsePayload._as(this.decodePayload$1(t1.$index(message, 2)))); + case 3: + return new A.CancelledResponse(id); + } + throw A.wrapException(B.FormatException_IWx); + }, + encodePayload$1(payload) { + var t1, t2, t3, t4, t5, _i, arg, t6, _i0, update, rows, result, columns, _0_0; + if (payload == null) + return payload; + if (payload instanceof A.NoArgsRequest) + return payload.index; + else if (payload instanceof A.ExecuteQuery) { + t1 = payload.method; + t2 = payload.sql; + t3 = []; + for (t4 = payload.args, t5 = t4.length, _i = 0; _i < t4.length; t4.length === t5 || (0, A.throwConcurrentModificationError)(t4), ++_i) + t3.push(this._encodeDbValue$1(t4[_i])); + return [3, t1.index, t2, t3, payload.executorId]; + } else if (payload instanceof A.ExecuteBatchedStatement) { + t1 = payload.stmts; + t2 = [4, t1.statements]; + for (t1 = t1.$arguments, t3 = t1.length, _i = 0; _i < t1.length; t1.length === t3 || (0, A.throwConcurrentModificationError)(t1), ++_i) { + arg = t1[_i]; + t4 = [arg.statementIndex]; + for (t5 = arg.$arguments, t6 = t5.length, _i0 = 0; _i0 < t5.length; t5.length === t6 || (0, A.throwConcurrentModificationError)(t5), ++_i0) + t4.push(this._encodeDbValue$1(t5[_i0])); + t2.push(t4); + } + t2.push(payload.executorId); + return t2; + } else if (payload instanceof A.RunNestedExecutorControl) + return A._setArrayType([5, payload.control.index, payload.executorId], type$.JSArray_nullable_int); + else if (payload instanceof A.EnsureOpen) + return A._setArrayType([6, payload.schemaVersion, payload.executorId], type$.JSArray_nullable_int); + else if (payload instanceof A.ServerInfo) + return A._setArrayType([13, payload.dialect._name], type$.JSArray_Object); + else if (payload instanceof A.RunBeforeOpen) { + t1 = payload.details; + return A._setArrayType([7, t1.versionBefore, t1.versionNow, payload.createdExecutor], type$.JSArray_nullable_int); + } else if (payload instanceof A.NotifyTablesUpdated) { + t1 = A._setArrayType([8], type$.JSArray_Object); + for (t2 = payload.updates, t3 = t2.length, _i = 0; _i < t2.length; t2.length === t3 || (0, A.throwConcurrentModificationError)(t2), ++_i) { + update = t2[_i]; + t4 = update.kind; + t4 = t4 == null ? null : t4.index; + t1.push([update.table, t4]); + } + return t1; + } else if (payload instanceof A.SelectResult) { + rows = payload.rows; + t1 = J.getInterceptor$asx(rows); + if (t1.get$isEmpty(rows)) + return B.List_11; + else { + result = [11]; + columns = J.toList$0$ax(t1.get$first(rows).get$keys()); + result.push(columns.length); + B.JSArray_methods.addAll$1(result, columns); + result.push(t1.get$length(rows)); + for (t1 = t1.get$iterator(rows); t1.moveNext$0();) + for (t2 = J.get$iterator$ax(t1.get$current().get$values()); t2.moveNext$0();) + result.push(this._encodeDbValue$1(t2.get$current())); + return result; + } + } else if (payload instanceof A.RequestCancellation) + return A._setArrayType([12, payload.originalRequestId], type$.JSArray_int); + else if (payload instanceof A.PrimitiveResponsePayload) { + _0_0 = payload.message; + $label0$0: { + if (A._isBool(_0_0)) { + t1 = _0_0; + break $label0$0; + } + if (A._isInt(_0_0)) { + t1 = A._setArrayType([10, _0_0], type$.JSArray_int); + break $label0$0; + } + t1 = A.throwExpression(A.UnsupportedError$("Unknown primitive response")); + } + return t1; + } + }, + decodePayload$1(encoded) { + var t1, tag, readInt, readNullableInt, method, sql, args, t2, i, list, t3, t4, t5, _1_0, updates, encodedUpdate, _2_0, columnCount, columns, rows, result, t6, rowOffset, t7, c, _null = null, _box_0 = {}; + if (encoded == null) + return _null; + if (A._isBool(encoded)) + return new A.PrimitiveResponsePayload(encoded); + _box_0.fullMessage = null; + if (A._isInt(encoded)) { + t1 = _null; + tag = encoded; + } else { + type$.List_dynamic._as(encoded); + _box_0.fullMessage = encoded; + tag = A._asInt(J.$index$asx(encoded, 0)); + t1 = encoded; + } + readInt = new A.DriftProtocol_decodePayload_readInt(_box_0); + readNullableInt = new A.DriftProtocol_decodePayload_readNullableInt(_box_0); + switch (tag) { + case 0: + return B.NoArgsRequest_0; + case 3: + method = B.JSArray_methods.$index(B.List_s6K, readInt.call$1(1)); + t1 = _box_0.fullMessage; + t1.toString; + sql = A._asString(J.$index$asx(t1, 2)); + t1 = J.map$1$1$ax(type$.List_dynamic._as(J.$index$asx(_box_0.fullMessage, 3)), this.get$_decodeDbValue(), type$.nullable_Object); + args = A.List_List$_of(t1, t1.$ti._eval$1("ListIterable.E")); + return new A.ExecuteQuery(method, sql, args, readNullableInt.call$1(4)); + case 4: + t1.toString; + t2 = type$.List_dynamic; + sql = J.cast$1$0$ax(t2._as(J.$index$asx(t1, 1)), type$.String); + args = A._setArrayType([], type$.JSArray_ArgumentsForBatchedStatement); + for (i = 2; i < J.get$length$asx(_box_0.fullMessage) - 1; ++i) { + list = t2._as(J.$index$asx(_box_0.fullMessage, i)); + t1 = J.getInterceptor$asx(list); + t3 = A._asInt(t1.$index(list, 0)); + t4 = []; + for (t1 = t1.skip$1(list, 1), t5 = t1.$ti, t1 = new A.ListIterator(t1, t1.get$length(0), t5._eval$1("ListIterator")), t5 = t5._eval$1("ListIterable.E"); t1.moveNext$0();) { + encoded = t1.__internal$_current; + t4.push(this._decodeDbValue$1(encoded == null ? t5._as(encoded) : encoded)); + } + B.JSArray_methods.add$1(args, new A.ArgumentsForBatchedStatement(t3, t4)); + } + _1_0 = J.get$last$ax(_box_0.fullMessage); + $label1$2: { + if (_1_0 == null) { + t1 = _null; + break $label1$2; + } + A._asInt(_1_0); + t1 = _1_0; + break $label1$2; + } + return new A.ExecuteBatchedStatement(new A.BatchedStatements(sql, args), t1); + case 5: + return new A.RunNestedExecutorControl(B.JSArray_methods.$index(B.List_ttt, readInt.call$1(1)), readNullableInt.call$1(2)); + case 6: + return new A.EnsureOpen(readInt.call$1(1), readNullableInt.call$1(2)); + case 13: + t1.toString; + return new A.ServerInfo(A.EnumByName_byName(B.List_rcv, A._asString(J.$index$asx(t1, 1)), type$.SqlDialect)); + case 7: + return new A.RunBeforeOpen(new A.OpeningDetails(readNullableInt.call$1(1), readInt.call$1(2)), readInt.call$1(3)); + case 8: + updates = A._setArrayType([], type$.JSArray_TableUpdate); + t1 = type$.List_dynamic; + i = 1; + for (;;) { + t2 = _box_0.fullMessage; + t2.toString; + if (!(i < J.get$length$asx(t2))) + break; + encodedUpdate = t1._as(J.$index$asx(_box_0.fullMessage, i)); + t2 = J.getInterceptor$asx(encodedUpdate); + _2_0 = t2.$index(encodedUpdate, 1); + $label2$3: { + if (_2_0 == null) { + t3 = _null; + break $label2$3; + } + A._asInt(_2_0); + t3 = _2_0; + break $label2$3; + } + t2 = A._asString(t2.$index(encodedUpdate, 0)); + if (t3 == null) + t3 = _null; + else { + if (t3 >>> 0 !== t3 || t3 >= 3) + return A.ioore(B.List_L4j, t3); + t3 = B.List_L4j[t3]; + } + B.JSArray_methods.add$1(updates, new A.TableUpdate(t3, t2)); + ++i; + } + return new A.NotifyTablesUpdated(updates); + case 11: + t1.toString; + if (J.get$length$asx(t1) === 1) + return B.SelectResult_List_empty; + columnCount = readInt.call$1(1); + t1 = 2 + columnCount; + t2 = type$.String; + columns = J.cast$1$0$ax(J.sublist$2$ax(_box_0.fullMessage, 2, t1), t2); + rows = readInt.call$1(t1); + result = A._setArrayType([], type$.JSArray_Map_of_String_and_nullable_Object); + for (t1 = columns._source, t3 = J.getInterceptor$asx(t1), t4 = columns.$ti._rest[1], t5 = 3 + columnCount, t6 = type$.nullable_Object, i = 0; i < rows; ++i) { + rowOffset = t5 + i * columnCount; + t7 = A.LinkedHashMap_LinkedHashMap$_empty(t2, t6); + for (c = 0; c < columnCount; ++c) + t7.$indexSet(0, t4._as(t3.$index(t1, c)), this._decodeDbValue$1(J.$index$asx(_box_0.fullMessage, rowOffset + c))); + B.JSArray_methods.add$1(result, t7); + } + return new A.SelectResult(result); + case 12: + return new A.RequestCancellation(readInt.call$1(1)); + case 10: + return new A.PrimitiveResponsePayload(A._asInt(J.$index$asx(encoded, 1))); + } + throw A.wrapException(A.ArgumentError$value(tag, "tag", "Tag was unknown")); + }, + _encodeDbValue$1(variable) { + if (type$.List_int._is(variable) && !type$.Uint8List._is(variable)) + return new Uint8Array(A._ensureNativeList(variable)); + else if (variable instanceof A._BigIntImpl) + return A._setArrayType(["bigint", variable.toString$0(0)], type$.JSArray_String); + else + return variable; + }, + _decodeDbValue$1(wire) { + var t1; + if (type$.List_dynamic._is(wire)) { + t1 = J.getInterceptor$asx(wire); + if (t1.get$length(wire) === 2 && J.$eq$(t1.$index(wire, 0), "bigint")) + return A._BigIntImpl_parse(J.toString$0$(t1.$index(wire, 1)), null); + return new Uint8Array(A._ensureNativeList(t1.cast$1$0(wire, type$.int))); + } + return wire; + } + }; + A.DriftProtocol_decodePayload_readInt.prototype = { + call$1(index) { + var t1 = this._box_0.fullMessage; + t1.toString; + return A._asInt(J.$index$asx(t1, index)); + }, + $signature: 13 + }; + A.DriftProtocol_decodePayload_readNullableInt.prototype = { + call$1(index) { + var _0_0, + t1 = this._box_0.fullMessage; + t1.toString; + _0_0 = J.$index$asx(t1, index); + $label0$0: { + if (_0_0 == null) { + t1 = null; + break $label0$0; + } + A._asInt(_0_0); + t1 = _0_0; + break $label0$0; + } + return t1; + }, + $signature: 23 + }; + A.Message.prototype = {}; + A.Request.prototype = { + toString$0(_) { + return "Request (id = " + this.id + "): " + A.S(this.payload); + } + }; + A.SuccessResponse.prototype = { + toString$0(_) { + return "SuccessResponse (id = " + this.requestId + "): " + A.S(this.response); + } + }; + A.PrimitiveResponsePayload.prototype = {$isResponsePayload: 1}; + A.ErrorResponse.prototype = { + toString$0(_) { + return "ErrorResponse (id = " + this.requestId + "): " + A.S(this.error) + " at " + A.S(this.stackTrace); + } + }; + A.CancelledResponse.prototype = { + toString$0(_) { + return "Previous request " + this.requestId + " was cancelled"; + } + }; + A.NoArgsRequest.prototype = { + _enumToString$0() { + return "NoArgsRequest." + this._name; + }, + $isRequestPayload: 1 + }; + A.StatementMethod.prototype = { + _enumToString$0() { + return "StatementMethod." + this._name; + } + }; + A.ExecuteQuery.prototype = { + toString$0(_) { + var _this = this, + t1 = _this.executorId; + if (t1 != null) + return _this.method.toString$0(0) + ": " + _this.sql + " with " + A.S(_this.args) + " (@" + A.S(t1) + ")"; + return _this.method.toString$0(0) + ": " + _this.sql + " with " + A.S(_this.args); + }, + $isRequestPayload: 1 + }; + A.RequestCancellation.prototype = { + toString$0(_) { + return "Cancel previous request " + this.originalRequestId; + }, + $isRequestPayload: 1 + }; + A.ExecuteBatchedStatement.prototype = {$isRequestPayload: 1}; + A.NestedExecutorControl.prototype = { + _enumToString$0() { + return "NestedExecutorControl." + this._name; + } + }; + A.RunNestedExecutorControl.prototype = { + toString$0(_) { + return "RunTransactionAction(" + this.control.toString$0(0) + ", " + A.S(this.executorId) + ")"; + }, + $isRequestPayload: 1 + }; + A.EnsureOpen.prototype = { + toString$0(_) { + return "EnsureOpen(" + this.schemaVersion + ", " + A.S(this.executorId) + ")"; + }, + $isRequestPayload: 1 + }; + A.ServerInfo.prototype = { + toString$0(_) { + return "ServerInfo(" + this.dialect.toString$0(0) + ")"; + }, + $isRequestPayload: 1 + }; + A.RunBeforeOpen.prototype = { + toString$0(_) { + return "RunBeforeOpen(" + this.details.toString$0(0) + ", " + this.createdExecutor + ")"; + }, + $isRequestPayload: 1 + }; + A.NotifyTablesUpdated.prototype = { + toString$0(_) { + return "NotifyTablesUpdated(" + A.S(this.updates) + ")"; + }, + $isRequestPayload: 1 + }; + A.SelectResult.prototype = {$isResponsePayload: 1}; + A.ServerImplementation.prototype = { + ServerImplementation$3(connection, allowRemoteShutdown, closeExecutorWhenShutdown) { + this._done.future.then$1$1(new A.ServerImplementation_closure(this), type$.Null); + }, + serve$2$serialize(channel, serialize) { + var comm, t1, _this = this; + if (_this._isShuttingDown) + throw A.wrapException(A.StateError$("Cannot add new channels after shutdown() was called")); + comm = A.DriftCommunication$(channel, serialize); + comm.setRequestHandler$1(new A.ServerImplementation_serve_closure(_this, comm)); + t1 = _this.connection.get$dialect(); + comm._send$1(new A.Request(comm.newRequestId$0(), new A.ServerInfo(t1))); + _this._activeChannels.add$1(0, comm); + return comm._closeCompleter.future.then$1$1(new A.ServerImplementation_serve_closure0(_this, comm), type$.void); + }, + shutdown$0() { + var t1, _this = this; + if (!_this._isShuttingDown) { + _this._isShuttingDown = true; + t1 = _this.connection.close$0(); + _this._done.complete$1(t1); + } + return _this._done.future; + }, + _closeRemainingConnections$0() { + var t1, t2, t3; + for (t1 = this._activeChannels, t1 = A._LinkedHashSetIterator$(t1, t1._modifications, t1.$ti._precomputed1), t2 = t1.$ti._precomputed1; t1.moveNext$0();) { + t3 = t1._collection$_current; + (t3 == null ? t2._as(t3) : t3).close$0(); + } + }, + _handleRequest$2(comms, request) { + var t1, token, _this = this, + payload = request.payload; + if (payload instanceof A.NoArgsRequest) + switch (payload.index) { + case 0: + t1 = A.StateError$("Remote shutdowns not allowed"); + throw A.wrapException(t1); + } + else if (payload instanceof A.EnsureOpen) + return _this._handleEnsureOpen$2(comms, payload); + else if (payload instanceof A.ExecuteQuery) { + token = A.runCancellable(new A.ServerImplementation__handleRequest_closure(_this, payload), type$.nullable_ResponsePayload); + _this._cancellableOperations.$indexSet(0, request.id, token); + return token._resultCompleter.future.whenComplete$1(new A.ServerImplementation__handleRequest_closure0(_this, request)); + } else if (payload instanceof A.ExecuteBatchedStatement) + return _this._runBatched$2(payload.stmts, payload.executorId); + else if (payload instanceof A.NotifyTablesUpdated) { + _this._tableUpdateNotifications.add$1(0, payload); + _this.dispatchTableUpdateNotification$2(payload, comms); + } else if (payload instanceof A.RunNestedExecutorControl) + return _this._transactionControl$3(comms, payload.control, payload.executorId); + else if (payload instanceof A.RequestCancellation) { + t1 = _this._cancellableOperations.$index(0, payload.originalRequestId); + if (t1 != null) + t1.cancel$0(); + return null; + } + return null; + }, + _handleEnsureOpen$2(comms, $open) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.ResponsePayload), + $async$returnValue, $async$self = this, executor, t1, $async$temp1; + var $async$_handleEnsureOpen$2 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$goto = 3; + return A._asyncAwait($async$self._loadExecutor$1($open.executorId), $async$_handleEnsureOpen$2); + case 3: + // returning from await. + executor = $async$result; + t1 = $open.schemaVersion; + $async$self._knownSchemaVersion = t1; + $async$temp1 = A; + $async$goto = 4; + return A._asyncAwait(executor.ensureOpen$1(new A._ServerDbUser($async$self, comms, t1)), $async$_handleEnsureOpen$2); + case 4: + // returning from await. + $async$returnValue = new $async$temp1.PrimitiveResponsePayload($async$result); + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$_handleEnsureOpen$2, $async$completer); + }, + _runQuery$4(method, sql, args, transactionId) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.nullable_ResponsePayload), + $async$returnValue, $async$self = this, executor, $async$temp1; + var $async$_runQuery$4 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$goto = 3; + return A._asyncAwait($async$self._loadExecutor$1(transactionId), $async$_runQuery$4); + case 3: + // returning from await. + executor = $async$result; + $async$goto = 4; + return A._asyncAwait(A.Future_Future$delayed(B.Duration_0, type$.void), $async$_runQuery$4); + case 4: + // returning from await. + A.checkIfCancelled(); + case 5: + // switch + switch (method.index) { + case 0: + // goto case + $async$goto = 7; + break; + case 1: + // goto case + $async$goto = 8; + break; + case 2: + // goto case + $async$goto = 9; + break; + case 3: + // goto case + $async$goto = 10; + break; + default: + // goto after switch + $async$goto = 6; + break; + } + break; + case 7: + // case + $async$goto = 11; + return A._asyncAwait(executor.runCustom$2(sql, args), $async$_runQuery$4); + case 11: + // returning from await. + $async$returnValue = null; + // goto return + $async$goto = 1; + break; + case 8: + // case + $async$temp1 = A; + $async$goto = 12; + return A._asyncAwait(executor.runDelete$2(sql, args), $async$_runQuery$4); + case 12: + // returning from await. + $async$returnValue = new $async$temp1.PrimitiveResponsePayload($async$result); + // goto return + $async$goto = 1; + break; + case 9: + // case + $async$temp1 = A; + $async$goto = 13; + return A._asyncAwait(executor.runInsert$2(sql, args), $async$_runQuery$4); + case 13: + // returning from await. + $async$returnValue = new $async$temp1.PrimitiveResponsePayload($async$result); + // goto return + $async$goto = 1; + break; + case 10: + // case + $async$temp1 = A; + $async$goto = 14; + return A._asyncAwait(executor.runSelect$2(sql, args), $async$_runQuery$4); + case 14: + // returning from await. + $async$returnValue = new $async$temp1.SelectResult($async$result); + // goto return + $async$goto = 1; + break; + case 6: + // after switch + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$_runQuery$4, $async$completer); + }, + _runBatched$2(stmts, transactionId) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.nullable_ResponsePayload), + $async$returnValue, $async$self = this; + var $async$_runBatched$2 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$goto = 4; + return A._asyncAwait($async$self._loadExecutor$1(transactionId), $async$_runBatched$2); + case 4: + // returning from await. + $async$goto = 3; + return A._asyncAwait($async$result.runBatched$1(stmts), $async$_runBatched$2); + case 3: + // returning from await. + $async$returnValue = null; + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$_runBatched$2, $async$completer); + }, + _loadExecutor$1(transactionId) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.QueryExecutor), + $async$returnValue, $async$self = this, t1; + var $async$_loadExecutor$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$goto = 3; + return A._asyncAwait($async$self._waitForTurn$1(transactionId), $async$_loadExecutor$1); + case 3: + // returning from await. + if (transactionId != null) { + t1 = $async$self._managedExecutors.$index(0, transactionId); + t1.toString; + } else + t1 = $async$self.connection; + $async$returnValue = t1; + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$_loadExecutor$1, $async$completer); + }, + _spawnTransaction$2(comm, executor) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.int), + $async$returnValue, $async$self = this, transaction; + var $async$_spawnTransaction$2 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$goto = 3; + return A._asyncAwait($async$self._loadExecutor$1(executor), $async$_spawnTransaction$2); + case 3: + // returning from await. + transaction = $async$result.beginTransaction$0(); + $async$goto = 4; + return A._asyncAwait(transaction.ensureOpen$1(new A._ServerDbUser($async$self, comm, $async$self._knownSchemaVersion)), $async$_spawnTransaction$2); + case 4: + // returning from await. + $async$returnValue = $async$self._putExecutor$2$beforeCurrent(transaction, true); + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$_spawnTransaction$2, $async$completer); + }, + _spawnExclusive$2(comm, executor) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.int), + $async$returnValue, $async$self = this, exclusive; + var $async$_spawnExclusive$2 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$goto = 3; + return A._asyncAwait($async$self._loadExecutor$1(executor), $async$_spawnExclusive$2); + case 3: + // returning from await. + exclusive = $async$result.beginExclusive$0(); + $async$goto = 4; + return A._asyncAwait(exclusive.ensureOpen$1(new A._ServerDbUser($async$self, comm, $async$self._knownSchemaVersion)), $async$_spawnExclusive$2); + case 4: + // returning from await. + $async$returnValue = $async$self._putExecutor$2$beforeCurrent(exclusive, true); + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$_spawnExclusive$2, $async$completer); + }, + _putExecutor$2$beforeCurrent(executor, beforeCurrent) { + var t2, t3, + t1 = this._currentExecutorId++; + this._managedExecutors.$indexSet(0, t1, executor); + t2 = this._executorBacklog; + t3 = t2.length; + if (t3 !== 0) + B.JSArray_methods.insert$2(t2, 0, t1); + else + B.JSArray_methods.add$1(t2, t1); + return t1; + }, + _transactionControl$3(comm, action, executorId) { + return this._transactionControl$body$ServerImplementation(comm, action, executorId); + }, + _transactionControl$body$ServerImplementation(comm, action, executorId) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.nullable_ResponsePayload), + $async$returnValue, $async$handler = 2, $async$errorStack = [], $async$next = [], $async$self = this, executor, $async$temp1; + var $async$_transactionControl$3 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) { + $async$errorStack.push($async$result); + $async$goto = $async$handler; + } + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$goto = action === B.NestedExecutorControl_0 ? 3 : 5; + break; + case 3: + // then + $async$temp1 = A; + $async$goto = 6; + return A._asyncAwait($async$self._spawnTransaction$2(comm, executorId), $async$_transactionControl$3); + case 6: + // returning from await. + $async$returnValue = new $async$temp1.PrimitiveResponsePayload($async$result); + // goto return + $async$goto = 1; + break; + // goto join + $async$goto = 4; + break; + case 5: + // else + $async$goto = action === B.NestedExecutorControl_3 ? 7 : 8; + break; + case 7: + // then + $async$temp1 = A; + $async$goto = 9; + return A._asyncAwait($async$self._spawnExclusive$2(comm, executorId), $async$_transactionControl$3); + case 9: + // returning from await. + $async$returnValue = new $async$temp1.PrimitiveResponsePayload($async$result); + // goto return + $async$goto = 1; + break; + case 8: + // join + case 4: + // join + $async$goto = 10; + return A._asyncAwait($async$self._loadExecutor$1(executorId), $async$_transactionControl$3); + case 10: + // returning from await. + executor = $async$result; + $async$goto = action === B.NestedExecutorControl_4 ? 11 : 12; + break; + case 11: + // then + $async$goto = 13; + return A._asyncAwait(executor.close$0(), $async$_transactionControl$3); + case 13: + // returning from await. + executorId.toString; + $async$self._releaseExecutor$1(executorId); + $async$returnValue = null; + // goto return + $async$goto = 1; + break; + case 12: + // join + if (!type$.TransactionExecutor._is(executor)) + throw A.wrapException(A.ArgumentError$value(executorId, "transactionId", "Does not reference a transaction. This might happen if you don't await all operations made inside a transaction, in which case the transaction might complete with pending operations.")); + case 14: + // switch + switch (action.index) { + case 1: + // goto case + $async$goto = 16; + break; + case 2: + // goto case + $async$goto = 17; + break; + default: + // goto after switch + $async$goto = 15; + break; + } + break; + case 16: + // case + $async$goto = 18; + return A._asyncAwait(executor.send$0(), $async$_transactionControl$3); + case 18: + // returning from await. + executorId.toString; + $async$self._releaseExecutor$1(executorId); + // goto after switch + $async$goto = 15; + break; + case 17: + // case + $async$handler = 19; + $async$goto = 22; + return A._asyncAwait(executor.rollback$0(), $async$_transactionControl$3); + case 22: + // returning from await. + $async$next.push(21); + // goto finally + $async$goto = 20; + break; + case 19: + // uncaught + $async$next = [2]; + case 20: + // finally + $async$handler = 2; + executorId.toString; + $async$self._releaseExecutor$1(executorId); + // goto the next finally handler + $async$goto = $async$next.pop(); + break; + case 21: + // after finally + // goto after switch + $async$goto = 15; + break; + case 15: + // after switch + $async$returnValue = null; + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + case 2: + // rethrow + return A._asyncRethrow($async$errorStack.at(-1), $async$completer); + } + }); + return A._asyncStartSync($async$_transactionControl$3, $async$completer); + }, + _releaseExecutor$1(id) { + var t1; + this._managedExecutors.remove$1(0, id); + B.JSArray_methods.remove$1(this._executorBacklog, id); + t1 = this._backlogUpdated; + if ((t1._state & 4) === 0) + t1.add$1(0, null); + }, + _waitForTurn$1(transactionId) { + var t2, + t1 = new A.ServerImplementation__waitForTurn_idIsActive(this, transactionId); + if (t1.call$0()) + return A.Future_Future$value(null, type$.void); + t2 = this._backlogUpdated; + return new A._BroadcastStream(t2, A._instanceType(t2)._eval$1("_BroadcastStream<1>")).firstWhere$1(0, new A.ServerImplementation__waitForTurn_closure(t1)); + }, + dispatchTableUpdateNotification$2(notification, source) { + var t1, t2, t3; + for (t1 = this._activeChannels, t1 = A._LinkedHashSetIterator$(t1, t1._modifications, t1.$ti._precomputed1), t2 = t1.$ti._precomputed1; t1.moveNext$0();) { + t3 = t1._collection$_current; + if (t3 == null) + t3 = t2._as(t3); + if (t3 !== source) + t3._send$1(new A.Request(t3._currentRequestId++, notification)); + } + }, + $isDriftServer: 1 + }; + A.ServerImplementation_closure.prototype = { + call$1(_) { + var t1 = this.$this; + t1._closeRemainingConnections$0(); + t1._tableUpdateNotifications.close$0(); + }, + $signature: 74 + }; + A.ServerImplementation_serve_closure.prototype = { + call$1(request) { + return this.$this._handleRequest$2(this.comm, request); + }, + $signature: 76 + }; + A.ServerImplementation_serve_closure0.prototype = { + call$1(_) { + return this.$this._activeChannels.remove$1(0, this.comm); + }, + $signature: 24 + }; + A.ServerImplementation__handleRequest_closure.prototype = { + call$0() { + var t1 = this.payload; + return this.$this._runQuery$4(t1.method, t1.sql, t1.args, t1.executorId); + }, + $signature: 83 + }; + A.ServerImplementation__handleRequest_closure0.prototype = { + call$0() { + return this.$this._cancellableOperations.remove$1(0, this.request.id); + }, + $signature: 85 + }; + A.ServerImplementation__waitForTurn_idIsActive.prototype = { + call$0() { + var t2, + t1 = this.transactionId; + if (t1 == null) + return this.$this._executorBacklog.length === 0; + else { + t2 = this.$this._executorBacklog; + return t2.length !== 0 && B.JSArray_methods.get$first(t2) === t1; + } + }, + $signature: 35 + }; + A.ServerImplementation__waitForTurn_closure.prototype = { + call$1(_) { + return this.idIsActive.call$0(); + }, + $signature: 24 + }; + A._ServerDbUser.prototype = { + beforeOpen$2(executor, details) { + return this.beforeOpen$body$_ServerDbUser(executor, details); + }, + beforeOpen$body$_ServerDbUser(executor, details) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$handler = 1, $async$errorStack = [], $async$next = [], $async$self = this, t2, id0, t3, t1, id; + var $async$beforeOpen$2 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) { + $async$errorStack.push($async$result); + $async$goto = $async$handler; + } + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $async$self._server; + id = t1._putExecutor$2$beforeCurrent(executor, true); + $async$handler = 2; + t2 = $async$self.connection; + id0 = t2.newRequestId$0(); + t3 = new A._Future($.Zone__current, type$._Future_void); + t2._pendingRequests.$indexSet(0, id0, new A._PendingRequest(new A._AsyncCompleter(t3, type$._AsyncCompleter_void), A.StackTrace_current())); + t2._send$1(new A.Request(id0, new A.RunBeforeOpen(details, id))); + $async$goto = 5; + return A._asyncAwait(t3, $async$beforeOpen$2); + case 5: + // returning from await. + $async$next.push(4); + // goto finally + $async$goto = 3; + break; + case 2: + // uncaught + $async$next = [1]; + case 3: + // finally + $async$handler = 1; + t1._releaseExecutor$1(id); + // goto the next finally handler + $async$goto = $async$next.pop(); + break; + case 4: + // after finally + // implicit return + return A._asyncReturn(null, $async$completer); + case 1: + // rethrow + return A._asyncRethrow($async$errorStack.at(-1), $async$completer); + } + }); + return A._asyncStartSync($async$beforeOpen$2, $async$completer); + }, + $isQueryExecutorUser: 1 + }; + A.WebProtocol.prototype = { + serialize$1(message) { + var t1, _1_5_isSet, _1_8, _1_9, _1_9_isSet, e, stackTrace, _1_5, requestId, _this0, t2, _this1, t3, t4, _0_0, t5, t6, _i, _this = this, _null = null; + $label0$0: { + if (message instanceof A.Request) { + t1 = new A._Record_2(0, {i: message.id, p: _this._serializeRequest$1(message.payload)}); + break $label0$0; + } + if (message instanceof A.SuccessResponse) { + t1 = new A._Record_2(1, {i: message.requestId, p: _this._serializeResponse$1(message.response)}); + break $label0$0; + } + _1_5_isSet = message instanceof A.ErrorResponse; + _1_8 = _null; + _1_9 = _null; + _1_9_isSet = false; + e = _null; + stackTrace = _null; + t1 = false; + if (_1_5_isSet) { + _1_5 = message.requestId; + _1_8 = message.error; + _1_9_isSet = _1_8 instanceof A.SqliteException; + if (_1_9_isSet) { + type$.SqliteException._as(_1_8); + _1_9 = message.stackTrace; + t1 = _this._protocolVersion.versionCode >= 4; + stackTrace = _1_9; + e = _1_8; + } + requestId = _1_5; + } else { + requestId = _null; + _1_5 = requestId; + } + if (t1) { + t1 = stackTrace == null ? _null : stackTrace.toString$0(0); + _this0 = e.message; + t2 = e.explanation; + if (t2 == null) + t2 = _null; + _this1 = e.extendedResultCode; + t3 = e.operation; + if (t3 == null) + t3 = _null; + t4 = e.causingStatement; + if (t4 == null) + t4 = _null; + _0_0 = e.parametersToStatement; + $label1$1: { + if (_0_0 == null) { + t5 = _null; + break $label1$1; + } + t5 = []; + for (t6 = _0_0.length, _i = 0; _i < _0_0.length; _0_0.length === t6 || (0, A.throwConcurrentModificationError)(_0_0), ++_i) + t5.push(_this._web_protocol$_encodeDbValue$1(_0_0[_i])); + break $label1$1; + } + t5 = new A._Record_2(4, [requestId, t1, _this0, t2, _this1, t3, t4, t5]); + t1 = t5; + break $label0$0; + } + if (_1_5_isSet) { + stackTrace = _1_9_isSet ? _1_9 : message.stackTrace; + _this = J.toString$0$(_1_8); + t1 = new A._Record_2(2, [_1_5, _this, stackTrace == null ? _null : stackTrace.toString$0(0)]); + break $label0$0; + } + if (message instanceof A.CancelledResponse) { + t1 = new A._Record_2(3, message.requestId); + break $label0$0; + } + t1 = _null; + } + return A._setArrayType([t1._0, t1._1], type$.JSArray_Object); + }, + deserialize$1(message) { + var t1, tag, t2, error, stackTrace, requestId, _this = this, _null = null, + _s22_ = "Pattern matching error", + _box_0 = {}; + _box_0.payload = null; + t1 = message.length === 2; + if (t1) { + if (0 < 0 || 0 >= message.length) + return A.ioore(message, 0); + tag = message[0]; + if (1 < 0 || 1 >= message.length) + return A.ioore(message, 1); + t2 = _box_0.payload = message[1]; + } else { + t2 = _null; + tag = t2; + } + if (!t1) + throw A.wrapException(A.StateError$(_s22_)); + tag = A._asInt(A._asDouble(tag)); + $label0$0: { + if (0 === tag) { + t1 = new A.WebProtocol_deserialize_decodeRequest(_box_0, _this).call$0(); + break $label0$0; + } + if (1 === tag) { + t1 = new A.WebProtocol_deserialize_decodeSuccess(_box_0, _this).call$0(); + break $label0$0; + } + if (2 === tag) { + type$.JSArray_nullable_Object._as(t2); + t1 = t2.length === 3; + error = _null; + stackTrace = _null; + if (t1) { + if (0 < 0 || 0 >= t2.length) + return A.ioore(t2, 0); + requestId = t2[0]; + if (1 < 0 || 1 >= t2.length) + return A.ioore(t2, 1); + error = t2[1]; + if (2 < 0 || 2 >= t2.length) + return A.ioore(t2, 2); + stackTrace = t2[2]; + } else + requestId = _null; + if (!t1) + A.throwExpression(A.StateError$(_s22_)); + t1 = new A.ErrorResponse(A._asInt(A._asDouble(requestId)), A._asString(error), _this._decodeStackStrace$1(stackTrace)); + break $label0$0; + } + if (4 === tag) { + t1 = _this._decodeSqliteErrorResponse$1(type$.JSArray_nullable_Object._as(t2)); + break $label0$0; + } + if (3 === tag) { + t1 = new A.CancelledResponse(A._asInt(A._asDouble(t2))); + break $label0$0; + } + t1 = A.throwExpression(A.ArgumentError$("Unknown message tag " + tag, _null)); + } + return t1; + }, + _serializeRequest$1(payload) { + var t1, _this, t2, t3, t4, _i, arg, t5, t6, _i0, update, _null = null; + $label0$0: { + t1 = _null; + if (payload == null) + break $label0$0; + if (payload instanceof A.ExecuteQuery) { + t1 = payload.method; + _this = payload.sql; + t2 = []; + for (t3 = payload.args, t4 = t3.length, _i = 0; _i < t3.length; t3.length === t4 || (0, A.throwConcurrentModificationError)(t3), ++_i) + t2.push(this._web_protocol$_encodeDbValue$1(t3[_i])); + t3 = payload.executorId; + if (t3 == null) + t3 = _null; + t3 = [3, t1.index, _this, t2, t3]; + t1 = t3; + break $label0$0; + } + if (payload instanceof A.RequestCancellation) { + t1 = A._setArrayType([12, payload.originalRequestId], type$.JSArray_double); + break $label0$0; + } + if (payload instanceof A.ExecuteBatchedStatement) { + t1 = payload.stmts; + t2 = J.map$1$1$ax(t1.statements, new A.WebProtocol__serializeRequest_closure(), type$.String); + t2 = A.List_List$_of(t2, t2.$ti._eval$1("ListIterable.E")); + t2 = [4, t2]; + for (t1 = t1.$arguments, t3 = t1.length, _i = 0; _i < t1.length; t1.length === t3 || (0, A.throwConcurrentModificationError)(t1), ++_i) { + arg = t1[_i]; + t4 = [arg.statementIndex]; + for (t5 = arg.$arguments, t6 = t5.length, _i0 = 0; _i0 < t5.length; t5.length === t6 || (0, A.throwConcurrentModificationError)(t5), ++_i0) + t4.push(this._web_protocol$_encodeDbValue$1(t5[_i0])); + t2.push(t4); + } + t1 = payload.executorId; + t2.push(t1 == null ? _null : t1); + t1 = t2; + break $label0$0; + } + if (payload instanceof A.RunNestedExecutorControl) { + t1 = payload.control; + t2 = payload.executorId; + if (t2 == null) + t2 = _null; + t2 = A._setArrayType([5, t1.index, t2], type$.JSArray_nullable_double); + t1 = t2; + break $label0$0; + } + if (payload instanceof A.EnsureOpen) { + _this = payload.schemaVersion; + t1 = payload.executorId; + t1 = A._setArrayType([6, _this, t1 == null ? _null : t1], type$.JSArray_nullable_double); + break $label0$0; + } + if (payload instanceof A.ServerInfo) { + t1 = A._setArrayType([13, payload.dialect._name], type$.JSArray_Object); + break $label0$0; + } + if (payload instanceof A.RunBeforeOpen) { + t1 = payload.details; + t2 = t1.versionBefore; + if (t2 == null) + t2 = _null; + t1 = A._setArrayType([7, t2, t1.versionNow, payload.createdExecutor], type$.JSArray_nullable_double); + break $label0$0; + } + if (payload instanceof A.NotifyTablesUpdated) { + t1 = [8]; + for (t2 = payload.updates, t3 = t2.length, _i = 0; _i < t2.length; t2.length === t3 || (0, A.throwConcurrentModificationError)(t2), ++_i) { + update = t2[_i]; + t4 = update.kind; + t4 = t4 == null ? _null : t4.index; + t1.push([update.table, t4]); + } + break $label0$0; + } + if (B.NoArgsRequest_0 === payload) { + t1 = 0; + break $label0$0; + } + } + return t1; + }, + _deserializeRequest$1(payload) { + var t1, tag, t2, t3, t4, t, _null = null; + if (payload == null) + return _null; + if (typeof payload === "number") + return B.NoArgsRequest_0; + t1 = type$.JSArray_nullable_Object; + t1._as(payload); + if (0 < 0 || 0 >= payload.length) + return A.ioore(payload, 0); + tag = A._asInt(A._asDouble(payload[0])); + $label0$0: { + if (3 === tag) { + if (1 < 0 || 1 >= payload.length) + return A.ioore(payload, 1); + t2 = A._asInt(A._asDouble(payload[1])); + if (!(t2 >= 0 && t2 < 4)) + return A.ioore(B.List_s6K, t2); + t2 = B.List_s6K[t2]; + if (2 < 0 || 2 >= payload.length) + return A.ioore(payload, 2); + t3 = A._asString(payload[2]); + t4 = []; + if (3 < 0 || 3 >= payload.length) + return A.ioore(payload, 3); + t = t1._as(payload[3]); + t1 = B.JSArray_methods.get$iterator(t); + while (t1.moveNext$0()) + t4.push(this._web_protocol$_decodeDbValue$1(t1.get$current())); + if (4 < 0 || 4 >= payload.length) + return A.ioore(payload, 4); + t1 = payload[4]; + t1 = new A.ExecuteQuery(t2, t3, t4, t1 == null ? _null : A._asInt(A._asDouble(t1))); + break $label0$0; + } + if (12 === tag) { + if (1 < 0 || 1 >= payload.length) + return A.ioore(payload, 1); + t1 = new A.RequestCancellation(A._asInt(A._asDouble(payload[1]))); + break $label0$0; + } + if (4 === tag) { + t1 = new A.WebProtocol__deserializeRequest_readBatched(this, payload).call$0(); + break $label0$0; + } + if (5 === tag) { + if (1 < 0 || 1 >= payload.length) + return A.ioore(payload, 1); + t1 = A._asInt(A._asDouble(payload[1])); + if (!(t1 >= 0 && t1 < 5)) + return A.ioore(B.List_ttt, t1); + t1 = B.List_ttt[t1]; + if (2 < 0 || 2 >= payload.length) + return A.ioore(payload, 2); + t2 = payload[2]; + t1 = new A.RunNestedExecutorControl(t1, t2 == null ? _null : A._asInt(A._asDouble(t2))); + break $label0$0; + } + if (6 === tag) { + if (1 < 0 || 1 >= payload.length) + return A.ioore(payload, 1); + t1 = A._asInt(A._asDouble(payload[1])); + if (2 < 0 || 2 >= payload.length) + return A.ioore(payload, 2); + t2 = payload[2]; + t1 = new A.EnsureOpen(t1, t2 == null ? _null : A._asInt(A._asDouble(t2))); + break $label0$0; + } + if (13 === tag) { + if (1 < 0 || 1 >= payload.length) + return A.ioore(payload, 1); + t1 = new A.ServerInfo(A.EnumByName_byName(B.List_rcv, A._asString(payload[1]), type$.SqlDialect)); + break $label0$0; + } + if (7 === tag) { + if (1 < 0 || 1 >= payload.length) + return A.ioore(payload, 1); + t1 = payload[1]; + t1 = t1 == null ? _null : A._asInt(A._asDouble(t1)); + if (2 < 0 || 2 >= payload.length) + return A.ioore(payload, 2); + t2 = A._asInt(A._asDouble(payload[2])); + if (3 < 0 || 3 >= payload.length) + return A.ioore(payload, 3); + t2 = new A.RunBeforeOpen(new A.OpeningDetails(t1, t2), A._asInt(A._asDouble(payload[3]))); + t1 = t2; + break $label0$0; + } + if (8 === tag) { + t1 = B.JSArray_methods.skip$1(payload, 1); + t2 = t1.$ti; + t3 = t2._eval$1("MappedListIterable"); + t1 = A.List_List$_of(new A.MappedListIterable(t1, t2._eval$1("TableUpdate(ListIterable.E)")._as(new A.WebProtocol__deserializeRequest_closure()), t3), t3._eval$1("ListIterable.E")); + t1 = new A.NotifyTablesUpdated(t1); + break $label0$0; + } + t1 = A.throwExpression(A.ArgumentError$("Unknown request tag " + tag, _null)); + } + return t1; + }, + _serializeResponse$1(response) { + var t1, message; + $label0$0: { + t1 = null; + if (response == null) + break $label0$0; + if (response instanceof A.PrimitiveResponsePayload) { + message = response.message; + t1 = A._isBool(message) ? message : A._asInt(message); + break $label0$0; + } + if (response instanceof A.SelectResult) { + t1 = this._serializeSelectResult$1(response); + break $label0$0; + } + } + return t1; + }, + _serializeSelectResult$1(result) { + var columns, rows, jsRow, + t1 = type$.SelectResult._as(result).rows, + t2 = J.getInterceptor$asx(t1); + if (t2.get$isEmpty(t1)) { + t1 = init.G; + t2 = type$.JSArray_nullable_Object; + return {c: t2._as(new t1.Array()), r: t2._as(new t1.Array())}; + } else { + columns = J.map$1$1$ax(t2.get$first(t1).get$keys(), new A.WebProtocol__serializeSelectResult_closure(), type$.String).toList$0(0); + rows = A._setArrayType([], type$.JSArray_JSArray_nullable_Object); + for (t1 = t2.get$iterator(t1); t1.moveNext$0();) { + jsRow = []; + for (t2 = J.get$iterator$ax(t1.get$current().get$values()); t2.moveNext$0();) + jsRow.push(this._web_protocol$_encodeDbValue$1(t2.get$current())); + B.JSArray_methods.add$1(rows, jsRow); + } + return {c: columns, r: rows}; + } + }, + _deserializeResponse$1(response) { + var t1, t2, t3, columns, rows, t4, dartRow, t5, t6, t7, i; + if (response == null) + return null; + else if (typeof response === "boolean") + return new A.PrimitiveResponsePayload(A._asBool(response)); + else if (typeof response === "number") + return new A.PrimitiveResponsePayload(A._asInt(A._asDouble(response))); + else { + A._asJSObject(response); + t1 = type$.JSArray_nullable_Object; + t2 = t1._as(response.c); + t2 = type$.List_String._is(t2) ? t2 : new A.CastList(t2, A._arrayInstanceType(t2)._eval$1("CastList<1,String>")); + t3 = type$.String; + t2 = J.map$1$1$ax(t2, new A.WebProtocol__deserializeResponse_closure(), t3); + columns = A.List_List$_of(t2, t2.$ti._eval$1("ListIterable.E")); + rows = A._setArrayType([], type$.JSArray_Map_of_String_and_nullable_Object); + t1 = t1._as(response.r); + t1 = J.get$iterator$ax(type$.List_JSArray_nullable_Object._is(t1) ? t1 : new A.CastList(t1, A._arrayInstanceType(t1)._eval$1("CastList<1,JSArray>"))); + t2 = type$.nullable_Object; + while (t1.moveNext$0()) { + t4 = t1.get$current(); + dartRow = A.LinkedHashMap_LinkedHashMap$_empty(t3, t2); + t4 = A.IndexedIterable_IndexedIterable(t4, 0, t2); + t5 = J.get$iterator$ax(t4._source); + t6 = t4._start; + t4 = new A.IndexedIterator(t5, t6, A._instanceType(t4)._eval$1("IndexedIterator<1>")); + while (t4.moveNext$0()) { + t7 = t4.__internal$_index; + t7 = t7 >= 0 ? new A._Record_2(t6 + t7, t5.get$current()) : A.throwExpression(A.IterableElementError_noElement()); + i = t7._0; + if (!(i >= 0 && i < columns.length)) + return A.ioore(columns, i); + dartRow.$indexSet(0, columns[i], this._web_protocol$_decodeDbValue$1(t7._1)); + } + B.JSArray_methods.add$1(rows, dartRow); + } + return new A.SelectResult(rows); + } + }, + _web_protocol$_encodeDbValue$1(value) { + var t1; + $label0$0: { + if (value == null) { + t1 = null; + break $label0$0; + } + if (A._isInt(value)) { + t1 = value; + break $label0$0; + } + if (A._isBool(value)) { + t1 = value; + break $label0$0; + } + if (typeof value == "string") { + t1 = value; + break $label0$0; + } + if (typeof value == "number") { + t1 = A._setArrayType([15, value], type$.JSArray_double); + break $label0$0; + } + if (value instanceof A._BigIntImpl) { + t1 = A._setArrayType([14, value.toString$0(0)], type$.JSArray_Object); + break $label0$0; + } + if (type$.List_int._is(value)) { + t1 = new Uint8Array(A._ensureNativeList(value)); + break $label0$0; + } + t1 = A.throwExpression(A.ArgumentError$("Unknown db value: " + A.S(value), null)); + } + return t1; + }, + _web_protocol$_decodeDbValue$1(value) { + var t1, tag, payload, _null = null; + if (value != null) + if (typeof value === "number") + return A._asInt(A._asDouble(value)); + else if (typeof value === "boolean") + return A._asBool(value); + else if (typeof value === "string") + return A._asString(value); + else if (A.JSAnyUtilityExtension_instanceOfString(value, "Uint8Array")) + return type$.NativeUint8List._as(value); + else { + type$.JSArray_nullable_Object._as(value); + t1 = value.length === 2; + if (t1) { + if (0 < 0 || 0 >= value.length) + return A.ioore(value, 0); + tag = value[0]; + if (1 < 0 || 1 >= value.length) + return A.ioore(value, 1); + payload = value[1]; + } else { + payload = _null; + tag = payload; + } + if (!t1) + throw A.wrapException(A.StateError$("Pattern matching error")); + if (tag == 14) + return A._BigIntImpl_parse(A._asString(payload), _null); + else + return A._asDouble(payload); + } + else + return _null; + }, + _decodeStackStrace$1(stackTrace) { + var t1, + _0_0 = stackTrace != null ? A._asString(stackTrace) : null; + $label0$0: { + if (_0_0 != null) { + t1 = new A._StringStackTrace(_0_0); + break $label0$0; + } + t1 = null; + break $label0$0; + } + return t1; + }, + _decodeSqliteErrorResponse$1(array) { + var requestId, t2, t3, t4, _null = null, + t1 = array.length >= 8, + stackTrace = _null, + message = _null, + explanation = _null, + extendedResultCode = _null, + operation = _null, + causingStatement = _null, + parametersToStatement = _null; + if (t1) { + if (0 < 0 || 0 >= array.length) + return A.ioore(array, 0); + requestId = array[0]; + if (1 < 0 || 1 >= array.length) + return A.ioore(array, 1); + stackTrace = array[1]; + if (2 < 0 || 2 >= array.length) + return A.ioore(array, 2); + message = array[2]; + if (3 < 0 || 3 >= array.length) + return A.ioore(array, 3); + explanation = array[3]; + if (4 < 0 || 4 >= array.length) + return A.ioore(array, 4); + extendedResultCode = array[4]; + if (5 < 0 || 5 >= array.length) + return A.ioore(array, 5); + operation = array[5]; + if (6 < 0 || 6 >= array.length) + return A.ioore(array, 6); + causingStatement = array[6]; + if (7 < 0 || 7 >= array.length) + return A.ioore(array, 7); + parametersToStatement = array[7]; + } else + requestId = _null; + if (!t1) + throw A.wrapException(A.StateError$("Pattern matching error")); + requestId = A._asInt(A._asDouble(requestId)); + extendedResultCode = A._asInt(A._asDouble(extendedResultCode)); + A._asString(message); + t1 = explanation != null ? A._asString(explanation) : _null; + t2 = causingStatement != null ? A._asString(causingStatement) : _null; + if (parametersToStatement != null) { + t3 = []; + type$.JSArray_nullable_Object._as(parametersToStatement); + t4 = B.JSArray_methods.get$iterator(parametersToStatement); + while (t4.moveNext$0()) + t3.push(this._web_protocol$_decodeDbValue$1(t4.get$current())); + } else + t3 = _null; + t4 = operation != null ? A._asString(operation) : _null; + return new A.ErrorResponse(requestId, new A.SqliteException(message, t1, extendedResultCode, _null, t4, t2, t3), this._decodeStackStrace$1(stackTrace)); + } + }; + A.WebProtocol_deserialize_decodeRequest.prototype = { + call$0() { + var serialized = A._asJSObject(this._box_0.payload); + return new A.Request(A._asInt(serialized.i), this.$this._deserializeRequest$1(serialized.p)); + }, + $signature: 86 + }; + A.WebProtocol_deserialize_decodeSuccess.prototype = { + call$0() { + var serialized = A._asJSObject(this._box_0.payload); + return new A.SuccessResponse(A._asInt(serialized.i), this.$this._deserializeResponse$1(serialized.p)); + }, + $signature: 90 + }; + A.WebProtocol__serializeRequest_closure.prototype = { + call$1(e) { + return A._asString(e); + }, + $signature: 9 + }; + A.WebProtocol__deserializeRequest_readBatched.prototype = { + call$0() { + var sqlStatements, t5, t6, t7, t8, t9, t10, + t1 = this.dartList, + t2 = J.getInterceptor$asx(t1), + t3 = type$.JSArray_nullable_Object, + t = t3._as(t2.$index(t1, 1)), + t4 = type$.List_String._is(t) ? t : new A.CastList(t, A._arrayInstanceType(t)._eval$1("CastList<1,String>")); + t4 = J.map$1$1$ax(t4, new A.WebProtocol__deserializeRequest_readBatched_closure(), type$.String); + sqlStatements = A.List_List$_of(t4, t4.$ti._eval$1("ListIterable.E")); + t4 = t2.get$length(t1); + t5 = A._setArrayType([], type$.JSArray_ArgumentsForBatchedStatement); + for (t4 = t2.skip$1(t1, 2).take$1(0, t4 - 3), t3 = A.CastIterable_CastIterable(t4, t4.$ti._eval$1("Iterable.E"), t3), t4 = A._instanceType(t3), t4 = A.MappedIterable_MappedIterable(t3, t4._eval$1("List(Iterable.E)")._as(new A.WebProtocol__deserializeRequest_readBatched_closure0()), t4._eval$1("Iterable.E"), type$.List_nullable_Object), t3 = t4.__internal$_iterable, t6 = A._instanceType(t4), t4 = new A.MappedIterator(t3.get$iterator(t3), t4._f, t6._eval$1("MappedIterator<1,2>")), t3 = this.$this.get$_web_protocol$_decodeDbValue(), t6 = t6._rest[1]; t4.moveNext$0();) { + t7 = t4.__internal$_current; + if (t7 == null) + t7 = t6._as(t7); + t8 = J.getInterceptor$asx(t7); + t9 = A._asInt(A._asDouble(t8.$index(t7, 0))); + t7 = t8.skip$1(t7, 1); + t8 = t7.$ti; + t10 = t8._eval$1("MappedListIterable"); + t7 = A.List_List$_of(new A.MappedListIterable(t7, t8._eval$1("Object?(ListIterable.E)")._as(t3), t10), t10._eval$1("ListIterable.E")); + t5.push(new A.ArgumentsForBatchedStatement(t9, t7)); + } + t1 = t2.$index(t1, t2.get$length(t1) - 1); + t1 = t1 == null ? null : A._asInt(A._asDouble(t1)); + return new A.ExecuteBatchedStatement(new A.BatchedStatements(sqlStatements, t5), t1); + }, + $signature: 106 + }; + A.WebProtocol__deserializeRequest_readBatched_closure.prototype = { + call$1(e) { + return A._asString(e); + }, + $signature: 9 + }; + A.WebProtocol__deserializeRequest_readBatched_closure0.prototype = { + call$1(e) { + type$.JSArray_nullable_Object._as(e); + return e; + }, + $signature: 107 + }; + A.WebProtocol__deserializeRequest_closure.prototype = { + call$1(e) { + var t1, table, kindOrNull; + type$.JSArray_nullable_Object._as(e); + t1 = e.length === 2; + if (t1) { + if (0 < 0 || 0 >= e.length) + return A.ioore(e, 0); + table = e[0]; + if (1 < 0 || 1 >= e.length) + return A.ioore(e, 1); + kindOrNull = e[1]; + } else { + table = null; + kindOrNull = null; + } + if (!t1) + throw A.wrapException(A.StateError$("Pattern matching error")); + A._asString(table); + if (kindOrNull == null) + t1 = null; + else { + kindOrNull = A._asInt(A._asDouble(kindOrNull)); + if (!(kindOrNull >= 0 && kindOrNull < 3)) + return A.ioore(B.List_L4j, kindOrNull); + t1 = B.List_L4j[kindOrNull]; + } + return new A.TableUpdate(t1, table); + }, + $signature: 113 + }; + A.WebProtocol__serializeSelectResult_closure.prototype = { + call$1(e) { + return A._asString(e); + }, + $signature: 9 + }; + A.WebProtocol__deserializeResponse_closure.prototype = { + call$1(e) { + return A._asString(e); + }, + $signature: 9 + }; + A.UpdateKind.prototype = { + _enumToString$0() { + return "UpdateKind." + this._name; + } + }; + A.TableUpdate.prototype = { + get$hashCode(_) { + return A.Object_hash(this.kind, this.table, B.C_SentinelValue, B.C_SentinelValue); + }, + $eq(_, other) { + if (other == null) + return false; + return other instanceof A.TableUpdate && other.kind == this.kind && other.table === this.table; + }, + toString$0(_) { + return "TableUpdate(" + this.table + ", kind: " + A.S(this.kind) + ")"; + } + }; + A.runCancellable_closure.prototype = { + call$0() { + return this._box_0.token._resultCompleter.complete$1(A.Future_Future$sync(this.operation, this.T)); + }, + $signature: 0 + }; + A.CancellationToken.prototype = { + cancel$0() { + var t1, _i; + if (this._cancellationRequested) + return; + for (t1 = this._cancellationCallbacks, _i = 0; false; ++_i) + t1[_i].call$0(); + this._cancellationRequested = true; + } + }; + A.CancellationException.prototype = { + toString$0(_) { + return "Operation was cancelled"; + }, + $isException: 1 + }; + A.QueryExecutor.prototype = { + close$0() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void); + var $async$close$0 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$close$0, $async$completer); + } + }; + A.BatchedStatements.prototype = { + get$hashCode(_) { + return A.Object_hash(B.C_ListEquality.hash$1(this.statements), B.C_ListEquality.hash$1(this.$arguments), B.C_SentinelValue, B.C_SentinelValue); + }, + $eq(_, other) { + if (other == null) + return false; + return other instanceof A.BatchedStatements && B.C_ListEquality.equals$2(other.statements, this.statements) && B.C_ListEquality.equals$2(other.$arguments, this.$arguments); + }, + toString$0(_) { + return "BatchedStatements(" + A.S(this.statements) + ", " + A.S(this.$arguments) + ")"; + } + }; + A.ArgumentsForBatchedStatement.prototype = { + get$hashCode(_) { + return A.Object_hash(this.statementIndex, B.C_ListEquality, B.C_SentinelValue, B.C_SentinelValue); + }, + $eq(_, other) { + if (other == null) + return false; + return other instanceof A.ArgumentsForBatchedStatement && other.statementIndex === this.statementIndex && B.C_ListEquality.equals$2(other.$arguments, this.$arguments); + }, + toString$0(_) { + return "ArgumentsForBatchedStatement(" + this.statementIndex + ", " + A.S(this.$arguments) + ")"; + } + }; + A.DatabaseDelegate.prototype = {}; + A.QueryDelegate.prototype = {}; + A.TransactionDelegate.prototype = {}; + A.NoTransactionDelegate.prototype = {}; + A.DbVersionDelegate.prototype = {}; + A.NoVersionDelegate.prototype = {}; + A.DynamicVersionDelegate.prototype = {}; + A._BaseExecutor.prototype = { + get$isSequential() { + return false; + }, + get$logStatements() { + return false; + }, + _synchronized$1$2$abortIfCancelled(action, abortIfCancelled, $T) { + $T._eval$1("Future<0>()")._as(action); + if (this.get$isSequential() || this._waitingChildExecutors > 0) + return this._lock.synchronized$1$1(new A._BaseExecutor__synchronized_closure(abortIfCancelled, action, $T), $T); + else + return action.call$0(); + }, + _synchronized$1$1(action, $T) { + return this._synchronized$1$2$abortIfCancelled(action, true, $T); + }, + _log$2(sql, args) { + this.get$logStatements(); + }, + runSelect$2(statement, args) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.List_Map_of_String_and_nullable_Object), + $async$returnValue, $async$self = this, t1; + var $async$runSelect$2 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$goto = 3; + return A._asyncAwait($async$self._synchronized$1$1(new A._BaseExecutor_runSelect_closure($async$self, statement, args), type$.QueryResult), $async$runSelect$2); + case 3: + // returning from await. + t1 = $async$result.get$asMap(0); + t1 = A.List_List$_of(t1, t1.$ti._eval$1("ListIterable.E")); + $async$returnValue = t1; + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$runSelect$2, $async$completer); + }, + runDelete$2(statement, args) { + return this._synchronized$1$1(new A._BaseExecutor_runDelete_closure(this, statement, args), type$.int); + }, + runInsert$2(statement, args) { + return this._synchronized$1$1(new A._BaseExecutor_runInsert_closure(this, statement, args), type$.int); + }, + runCustom$2(statement, args) { + return this._synchronized$1$1(new A._BaseExecutor_runCustom_closure(this, args, statement), type$.void); + }, + runCustom$1(statement) { + return this.runCustom$2(statement, null); + }, + runBatched$1(statements) { + return this._synchronized$1$1(new A._BaseExecutor_runBatched_closure(this, statements), type$.void); + }, + beginExclusive$0() { + return new A._ExclusiveExecutor(this, new A._AsyncCompleter(new A._Future($.Zone__current, type$._Future_void), type$._AsyncCompleter_void), new A.Lock()); + }, + beginTransaction$0() { + return this.beginTransactionInContext$1(this); + } + }; + A._BaseExecutor__synchronized_closure.prototype = { + call$0() { + return this.$call$body$_BaseExecutor__synchronized_closure(this.T); + }, + $call$body$_BaseExecutor__synchronized_closure($async$type) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter($async$type), + $async$returnValue, $async$self = this; + var $async$call$0 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + if ($async$self.abortIfCancelled) + A.checkIfCancelled(); + $async$goto = 3; + return A._asyncAwait($async$self.action.call$0(), $async$call$0); + case 3: + // returning from await. + $async$returnValue = $async$result; + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$call$0, $async$completer); + }, + $signature() { + return this.T._eval$1("Future<0>()"); + } + }; + A._BaseExecutor_runSelect_closure.prototype = { + call$0() { + var t1 = this.$this, + t2 = this.statement, + t3 = this.args; + t1._log$2(t2, t3); + return t1.get$impl().runSelect$2(t2, t3); + }, + $signature: 37 + }; + A._BaseExecutor_runDelete_closure.prototype = { + call$0() { + var t1 = this.$this, + t2 = this.statement, + t3 = this.args; + t1._log$2(t2, t3); + return t1.get$impl().runUpdate$2(t2, t3); + }, + $signature: 36 + }; + A._BaseExecutor_runInsert_closure.prototype = { + call$0() { + var t1 = this.$this, + t2 = this.statement, + t3 = this.args; + t1._log$2(t2, t3); + return t1.get$impl().runInsert$2(t2, t3); + }, + $signature: 36 + }; + A._BaseExecutor_runCustom_closure.prototype = { + call$0() { + var t1, t2, + resolvedArgs = this.args; + if (resolvedArgs == null) + resolvedArgs = B.List_empty1; + t1 = this.$this; + t2 = this.statement; + t1._log$2(t2, resolvedArgs); + return t1.get$impl().runCustom$2(t2, resolvedArgs); + }, + $signature: 2 + }; + A._BaseExecutor_runBatched_closure.prototype = { + call$0() { + var t1 = this.$this; + t1.get$logStatements(); + return t1.get$impl().runBatched$1(this.statements); + }, + $signature: 2 + }; + A._TransactionExecutor.prototype = { + _checkCanOpen$0() { + this._ensureOpenCalled = true; + if (this._engines$_closed) + throw A.wrapException(A.StateError$("A transaction was used after being closed. Please check that you're awaiting all database operations inside a `transaction` block.")); + }, + beginTransactionInContext$1(context) { + throw A.wrapException(A.UnsupportedError$("Nested transactions aren't supported.")); + }, + get$dialect() { + return B.SqlDialect_0_sqlite; + }, + get$logStatements() { + return false; + }, + get$isSequential() { + return true; + }, + $isTransactionExecutor: 1 + }; + A._StatementBasedTransactionExecutor.prototype = { + ensureOpen$1(user) { + var opened, $parent, _this = this; + _this._checkCanOpen$0(); + opened = _this._opened; + if (opened == null) { + opened = _this._opened = new A._AsyncCompleter(new A._Future($.Zone__current, type$._Future_bool), type$._AsyncCompleter_bool); + $parent = _this._parent; + ++$parent._waitingChildExecutors; + $parent._synchronized$1$2$abortIfCancelled(new A._StatementBasedTransactionExecutor_ensureOpen_closure(_this), false, type$.Null).whenComplete$1(new A._StatementBasedTransactionExecutor_ensureOpen_closure0($parent)); + } + return opened.future; + }, + get$impl() { + return this._db.delegate; + }, + beginTransactionInContext$1(context) { + var t1 = this.depth + 1; + return new A._StatementBasedTransactionExecutor(this._engines$_delegate, new A._AsyncCompleter(new A._Future($.Zone__current, type$._Future_void), type$._AsyncCompleter_void), context, t1, A._defaultSavepoint(t1), A._defaultRelease(t1), A._defaultRollbackToSavepoint(t1), this._db, new A.Lock()); + }, + send$0() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$returnValue, $async$self = this; + var $async$send$0 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + if (!$async$self._ensureOpenCalled) { + // goto return + $async$goto = 1; + break; + } + $async$goto = 3; + return A._asyncAwait($async$self.runCustom$2($async$self._commitCommand, B.List_empty1), $async$send$0); + case 3: + // returning from await. + $async$self._release$0(); + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$send$0, $async$completer); + }, + rollback$0() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$returnValue, $async$handler = 2, $async$errorStack = [], $async$next = [], $async$self = this; + var $async$rollback$0 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) { + $async$errorStack.push($async$result); + $async$goto = $async$handler; + } + for (;;) + switch ($async$goto) { + case 0: + // Function start + if (!$async$self._ensureOpenCalled) { + // goto return + $async$goto = 1; + break; + } + $async$handler = 3; + $async$goto = 6; + return A._asyncAwait($async$self.runCustom$2($async$self._rollbackCommand, B.List_empty1), $async$rollback$0); + case 6: + // returning from await. + $async$next.push(5); + // goto finally + $async$goto = 4; + break; + case 3: + // uncaught + $async$next = [2]; + case 4: + // finally + $async$handler = 2; + $async$self._release$0(); + // goto the next finally handler + $async$goto = $async$next.pop(); + break; + case 5: + // after finally + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + case 2: + // rethrow + return A._asyncRethrow($async$errorStack.at(-1), $async$completer); + } + }); + return A._asyncStartSync($async$rollback$0, $async$completer); + }, + _release$0() { + var _this = this; + if (_this.depth === 0) + _this._db.delegate.isInTransaction = false; + _this._engines$_done.complete$0(); + _this._engines$_closed = true; + } + }; + A._StatementBasedTransactionExecutor_ensureOpen_closure.prototype = { + call$0() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.Null), + $async$handler = 1, $async$errorStack = [], $async$self = this, e, s, t1, exception, $async$exception; + var $async$call$0 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) { + $async$errorStack.push($async$result); + $async$goto = $async$handler; + } + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$handler = 3; + A.checkIfCancelled(); + t1 = $async$self.$this; + $async$goto = 6; + return A._asyncAwait(t1.runCustom$1(t1._startCommand), $async$call$0); + case 6: + // returning from await. + t1._db.delegate.isInTransaction = true; + t1._opened.complete$1(true); + $async$handler = 1; + // goto after finally + $async$goto = 5; + break; + case 3: + // catch + $async$handler = 2; + $async$exception = $async$errorStack.pop(); + e = A.unwrapException($async$exception); + s = A.getTraceFromException($async$exception); + t1 = $async$self.$this; + t1._opened.completeError$2(e, s); + t1._release$0(); + // goto after finally + $async$goto = 5; + break; + case 2: + // uncaught + // goto rethrow + $async$goto = 1; + break; + case 5: + // after finally + $async$goto = 7; + return A._asyncAwait($async$self.$this._engines$_done.future, $async$call$0); + case 7: + // returning from await. + // implicit return + return A._asyncReturn(null, $async$completer); + case 1: + // rethrow + return A._asyncRethrow($async$errorStack.at(-1), $async$completer); + } + }); + return A._asyncStartSync($async$call$0, $async$completer); + }, + $signature: 18 + }; + A._StatementBasedTransactionExecutor_ensureOpen_closure0.prototype = { + call$0() { + return this.parent._waitingChildExecutors--; + }, + $signature: 41 + }; + A.DelegatedDatabase.prototype = { + get$impl() { + return this.delegate; + }, + get$dialect() { + return B.SqlDialect_0_sqlite; + }, + ensureOpen$1(user) { + return this._openingLock.synchronized$1$1(new A.DelegatedDatabase_ensureOpen_closure(this, user), type$.bool); + }, + _runMigrations$1(user) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$self = this, currentVersion, oldVersion, t1, t2; + var $async$_runMigrations$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $async$self.delegate; + t2 = t1.__Sqlite3Delegate_versionDelegate_A; + t2 === $ && A.throwLateFieldNI("versionDelegate"); + currentVersion = user.schemaVersion; + $async$goto = t2 instanceof A.NoVersionDelegate ? 2 : 4; + break; + case 2: + // then + oldVersion = currentVersion; + // goto join + $async$goto = 3; + break; + case 4: + // else + $async$goto = t2 instanceof A._SqliteVersionDelegate ? 5 : 7; + break; + case 5: + // then + $async$goto = 8; + return A._asyncAwait(A.Future_Future$value(t2.database.get$userVersion(), type$.int), $async$_runMigrations$1); + case 8: + // returning from await. + oldVersion = $async$result; + // goto join + $async$goto = 6; + break; + case 7: + // else + throw A.wrapException(A.Exception_Exception("Invalid delegate: " + t1.toString$0(0) + ". The versionDelegate getter must not subclass DBVersionDelegate directly")); + case 6: + // join + case 3: + // join + if (oldVersion === 0) + oldVersion = null; + $async$goto = 9; + return A._asyncAwait(user.beforeOpen$2(new A._BeforeOpeningExecutor($async$self, new A.Lock()), new A.OpeningDetails(oldVersion, currentVersion)), $async$_runMigrations$1); + case 9: + // returning from await. + $async$goto = t2 instanceof A._SqliteVersionDelegate && oldVersion !== currentVersion ? 10 : 11; + break; + case 10: + // then + t2.database.execute$1("PRAGMA user_version = " + currentVersion + ";"); + $async$goto = 12; + return A._asyncAwait(A.Future_Future$value(null, type$.void), $async$_runMigrations$1); + case 12: + // returning from await. + case 11: + // join + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$_runMigrations$1, $async$completer); + }, + beginTransactionInContext$1(context) { + var t1 = $.Zone__current; + return new A._StatementBasedTransactionExecutor(B.C_NoTransactionDelegate, new A._AsyncCompleter(new A._Future(t1, type$._Future_void), type$._AsyncCompleter_void), context, 0, "BEGIN TRANSACTION", "COMMIT TRANSACTION", "ROLLBACK TRANSACTION", this, new A.Lock()); + }, + close$0() { + return this._openingLock.synchronized$1$1(new A.DelegatedDatabase_close_closure(this), type$.void); + }, + get$logStatements() { + return this.logStatements; + }, + get$isSequential() { + return this.isSequential; + } + }; + A.DelegatedDatabase_ensureOpen_closure.prototype = { + call$0() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.bool), + $async$returnValue, $async$handler = 2, $async$errorStack = [], $async$self = this, e, s, t2, _0_0, t3, t4, exception, t1, $async$exception; + var $async$call$0 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) { + $async$errorStack.push($async$result); + $async$goto = $async$handler; + } + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $async$self.$this; + if (t1._engines$_closed) { + t1 = A._interceptUserError(new A.StateError("Can't re-open a database after closing it. Please create a new database connection and open that instead."), null); + t2 = new A._Future($.Zone__current, type$._Future_bool); + t2._asyncCompleteErrorObject$1(t1); + $async$returnValue = t2; + // goto return + $async$goto = 1; + break; + } + _0_0 = t1._migrationError; + if (_0_0 != null) + A.Error_throwWithStackTrace(_0_0._0, _0_0._1); + t2 = t1.delegate; + t3 = type$.bool; + t4 = A.Future_Future$value(t2._isOpen, t3); + $async$goto = 3; + return A._asyncAwait(type$.Future_bool._is(t4) ? t4 : A._Future$value(A._asBool(t4), t3), $async$call$0); + case 3: + // returning from await. + if ($async$result) { + $async$returnValue = t1._ensureOpenCalled = true; + // goto return + $async$goto = 1; + break; + } + t3 = $async$self.user; + $async$goto = 4; + return A._asyncAwait(t2.open$1(t3), $async$call$0); + case 4: + // returning from await. + t1._ensureOpenCalled = true; + $async$handler = 6; + $async$goto = 9; + return A._asyncAwait(t1._runMigrations$1(t3), $async$call$0); + case 9: + // returning from await. + $async$returnValue = true; + // goto return + $async$goto = 1; + break; + $async$handler = 2; + // goto after finally + $async$goto = 8; + break; + case 6: + // catch + $async$handler = 5; + $async$exception = $async$errorStack.pop(); + e = A.unwrapException($async$exception); + s = A.getTraceFromException($async$exception); + t1._migrationError = new A._Record_2(e, s); + throw $async$exception; + // goto after finally + $async$goto = 8; + break; + case 5: + // uncaught + // goto rethrow + $async$goto = 2; + break; + case 8: + // after finally + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + case 2: + // rethrow + return A._asyncRethrow($async$errorStack.at(-1), $async$completer); + } + }); + return A._asyncStartSync($async$call$0, $async$completer); + }, + $signature: 42 + }; + A.DelegatedDatabase_close_closure.prototype = { + call$0() { + var t1 = this.$this; + if (t1._ensureOpenCalled && !t1._engines$_closed) { + t1._engines$_closed = true; + t1._ensureOpenCalled = false; + return t1.delegate.close$0(); + } else + return A.Future_Future$value(null, type$.void); + }, + $signature: 2 + }; + A._BeforeOpeningExecutor.prototype = { + beginTransactionInContext$1(context) { + return this._base.beginTransactionInContext$1(context); + }, + ensureOpen$1(_) { + this._ensureOpenCalled = true; + return A.Future_Future$value(true, type$.bool); + }, + get$impl() { + return this._base.delegate; + }, + get$logStatements() { + return false; + }, + get$dialect() { + return B.SqlDialect_0_sqlite; + } + }; + A._ExclusiveExecutor.prototype = { + get$dialect() { + return this._outer.get$dialect(); + }, + ensureOpen$1(user) { + var t1, opened, t2, _this = this, + _0_0 = _this._opened; + if (_0_0 != null) + return _0_0.future; + else { + _this._ensureOpenCalled = true; + t1 = new A._Future($.Zone__current, type$._Future_bool); + opened = new A._AsyncCompleter(t1, type$._AsyncCompleter_bool); + _this._opened = opened; + t2 = _this._outer; + ++t2._waitingChildExecutors; + t2._synchronized$1$1(new A._ExclusiveExecutor_ensureOpen_closure(_this, opened), type$.Null); + return t1; + } + }, + get$impl() { + return this._outer.get$impl(); + }, + beginTransactionInContext$1(context) { + return this._outer.beginTransactionInContext$1(context); + }, + close$0() { + this._completer.complete$0(); + return A.Future_Future$value(null, type$.void); + } + }; + A._ExclusiveExecutor_ensureOpen_closure.prototype = { + call$0() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.Null), + $async$self = this, t1; + var $async$call$0 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$self.opened.complete$1(true); + t1 = $async$self.$this; + $async$goto = 2; + return A._asyncAwait(t1._completer.future, $async$call$0); + case 2: + // returning from await. + --t1._outer._waitingChildExecutors; + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$call$0, $async$completer); + }, + $signature: 18 + }; + A.QueryResult.prototype = { + get$asMap(_) { + var t1 = this.rows, + t2 = A._arrayInstanceType(t1); + return new A.MappedListIterable(t1, t2._eval$1("Map(1)")._as(new A.QueryResult_asMap_closure(this)), t2._eval$1("MappedListIterable<1,Map>")); + } + }; + A.QueryResult_asMap_closure.prototype = { + call$1(row) { + var t1, t2, t3, t4, t5, _i, column, t6; + type$.List_nullable_Object._as(row); + t1 = A.LinkedHashMap_LinkedHashMap$_empty(type$.String, type$.dynamic); + for (t2 = this.$this, t3 = t2.columnNames, t4 = t3.length, t2 = t2._columnIndexes, t5 = J.getInterceptor$asx(row), _i = 0; _i < t3.length; t3.length === t4 || (0, A.throwConcurrentModificationError)(t3), ++_i) { + column = t3[_i]; + t6 = t2.$index(0, column); + t6.toString; + t1.$indexSet(0, column, t5.$index(row, t6)); + } + return t1; + }, + $signature: 43 + }; + A.QueryInterceptor.prototype = {}; + A._InterceptedExecutor.prototype = { + beginTransaction$0() { + var t1 = this._interceptor$_inner; + return new A._InterceptedTransactionExecutor(t1.beginTransactionInContext$1(t1), this._interceptor$_interceptor); + }, + beginExclusive$0() { + return new A._InterceptedExecutor(new A._ExclusiveExecutor(this._interceptor$_inner, new A._AsyncCompleter(new A._Future($.Zone__current, type$._Future_void), type$._AsyncCompleter_void), new A.Lock()), this._interceptor$_interceptor); + }, + get$dialect() { + return this._interceptor$_inner.get$dialect(); + }, + ensureOpen$1(user) { + return this._interceptor$_inner.ensureOpen$1(user); + }, + runBatched$1(statements) { + return this._interceptor$_inner.runBatched$1(statements); + }, + runCustom$2(statement, args) { + return this._interceptor$_inner.runCustom$2(statement, args); + }, + runDelete$2(statement, args) { + return this._interceptor$_inner.runDelete$2(statement, args); + }, + runInsert$2(statement, args) { + return this._interceptor$_inner.runInsert$2(statement, args); + }, + runSelect$2(statement, args) { + return this._interceptor$_inner.runSelect$2(statement, args); + }, + close$0() { + return this._interceptor$_interceptor.close$1(this._interceptor$_inner); + } + }; + A._InterceptedTransactionExecutor.prototype = { + rollback$0() { + return type$.TransactionExecutor._as(this._interceptor$_inner).rollback$0(); + }, + send$0() { + return type$.TransactionExecutor._as(this._interceptor$_inner).send$0(); + }, + $isTransactionExecutor: 1 + }; + A.OpeningDetails.prototype = {}; + A.SqlDialect.prototype = { + _enumToString$0() { + return "SqlDialect." + this._name; + } + }; + A.Sqlite3Delegate.prototype = { + open$1(db) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$returnValue, $async$self = this, t1, exception; + var $async$open$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$goto = !$async$self._hasInitializedDatabase ? 3 : 4; + break; + case 3: + // then + t1 = A._instanceType($async$self)._eval$1("Sqlite3Delegate.0"); + t1 = A._Future$value(t1._as($async$self.openDatabase$0()), t1); + $async$goto = 5; + return A._asyncAwait(t1, $async$open$1); + case 5: + // returning from await. + t1 = $async$result; + $async$self._database = t1; + try { + t1.toString; + A.EnableNativeFunctions_useNativeFunctions(t1); + if ($async$self.enableMigrations) { + t1 = $async$self._database; + t1.toString; + t1 = new A._SqliteVersionDelegate(t1); + } else + t1 = B.C_NoVersionDelegate; + $async$self.__Sqlite3Delegate_versionDelegate_A = t1; + $async$self._hasInitializedDatabase = true; + } catch (exception) { + t1 = $async$self._database; + if (t1 != null) + t1.dispose$0(); + $async$self._database = null; + $async$self._preparedStmtsCache._cachedStatements.clear$0(0); + throw exception; + } + case 4: + // join + $async$self._isOpen = true; + $async$returnValue = A.Future_Future$value(null, type$.void); + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$open$1, $async$completer); + }, + close$0() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$self = this; + var $async$close$0 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$self._preparedStmtsCache.disposeAll$0(); + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$close$0, $async$completer); + }, + runBatchSync$1(statements) { + var stmt, application, stmt0, stmt1, t1, t2, _i, t3, t4, t5, t6, + prepared = A._setArrayType([], type$.JSArray_CommonPreparedStatement); + try { + for (t1 = J.get$iterator$ax(statements.statements); t1.moveNext$0();) { + stmt = t1.get$current(); + J.add$1$ax(prepared, this._database.prepare$2$checkNoTail(stmt, true)); + } + for (t1 = statements.$arguments, t2 = t1.length, _i = 0; _i < t1.length; t1.length === t2 || (0, A.throwConcurrentModificationError)(t1), ++_i) { + application = t1[_i]; + stmt0 = J.$index$asx(prepared, application.statementIndex); + t3 = stmt0; + t4 = application.$arguments; + t5 = t3.finalizable; + if (t5._statement$_closed) + A.throwExpression(A.StateError$(string$.Tried_)); + if (!t5._inResetState) { + t6 = t5.statement; + A._asInt(t6.bindings.sqlite3.sqlite3_reset(t6.stmt)); + t5._inResetState = true; + } + t5.statement.deallocateArguments$0(); + t3._bindParams$1(new A.IndexedParameters(t4)); + t3._execute$0(); + } + } finally { + for (t1 = prepared, t2 = t1.length, t3 = type$.StatementImplementation, _i = 0; _i < t1.length; t1.length === t2 || (0, A.throwConcurrentModificationError)(t1), ++_i) { + stmt1 = t1[_i]; + t4 = stmt1; + t5 = t4.finalizable; + if (!t5._statement$_closed) { + t6 = $.$get$disposeFinalizer()._registry; + if (t6 != null) + t6.unregister(t4); + if (!t5._statement$_closed) { + t5._statement$_closed = true; + if (!t5._inResetState) { + t6 = t5.statement; + A._asInt(t6.bindings.sqlite3.sqlite3_reset(t6.stmt)); + t5._inResetState = true; + } + t6 = t5.statement; + t6.deallocateArguments$0(); + A._asInt(t6.bindings.sqlite3.sqlite3_finalize(t6.stmt)); + } + t6 = t4.database; + t3._as(t4); + if (!t6._isClosed) + B.JSArray_methods.remove$1(t6.finalizable._statements, t5); + } + } + } + }, + runWithArgsSync$2(statement, args) { + var stmt, cached, _0_0, t1, t2; + if (args.length === 0) + this._database.execute$1(statement); + else { + stmt = null; + cached = null; + _0_0 = this._getPreparedStatement$1(statement); + stmt = _0_0._0; + cached = _0_0._1; + try { + stmt.executeWith$1(new A.IndexedParameters(args)); + } finally { + t1 = stmt; + t2 = cached; + type$.CommonPreparedStatement._as(t1); + if (!A._asBool(t2)) + t1.dispose$0(); + } + } + }, + runSelect$2(statement, args) { + return this.runSelect$body$Sqlite3Delegate(statement, args); + }, + runSelect$body$Sqlite3Delegate(statement, args) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.QueryResult), + $async$returnValue, $async$next = [], $async$self = this, result, t1, t2, stmt, cached, _0_0; + var $async$runSelect$2 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + stmt = null; + cached = null; + _0_0 = $async$self._getPreparedStatement$1(statement); + stmt = _0_0._0; + cached = _0_0._1; + try { + result = stmt.selectWith$1(new A.IndexedParameters(args)); + t1 = A.QueryResult_QueryResult$fromRows(J.toList$0$ax(result)); + $async$returnValue = t1; + // goto return + $async$goto = 1; + break; + } finally { + t1 = stmt; + t2 = cached; + type$.CommonPreparedStatement._as(t1); + if (!A._asBool(t2)) + t1.dispose$0(); + } + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$runSelect$2, $async$completer); + }, + _getPreparedStatement$1(sql) { + var stmt, t3, + t1 = this._preparedStmtsCache._cachedStatements, + foundStatement = t1.remove$1(0, sql), + t2 = foundStatement != null; + if (t2) + t1.$indexSet(0, sql, foundStatement); + if (t2) + return new A._Record_2(foundStatement, true); + stmt = this._database.prepare$2$checkNoTail(sql, true); + t2 = stmt.statement; + t3 = t2.stmt; + t2 = t2.bindings.sqlite3; + if (A._asInt(t2.sqlite3_stmt_isexplain(t3)) === 0) { + if (t1.__js_helper$_length === 64) + t1.remove$1(0, new A.LinkedHashMapKeysIterable(t1, A._instanceType(t1)._eval$1("LinkedHashMapKeysIterable<1>")).get$first(0)).dispose$0(); + t1.$indexSet(0, sql, stmt); + } + return new A._Record_2(stmt, A._asInt(t2.sqlite3_stmt_isexplain(t3)) === 0); + } + }; + A._SqliteVersionDelegate.prototype = {}; + A.PreparedStatementsCache.prototype = { + disposeAll$0() { + var t1, t2, t3, t4, t5; + for (t1 = this._cachedStatements, t2 = new A.LinkedHashMapValueIterator(t1, t1.__js_helper$_modifications, t1.__js_helper$_first, A._instanceType(t1)._eval$1("LinkedHashMapValueIterator<2>")); t2.moveNext$0();) { + t3 = t2.__js_helper$_current; + t4 = t3.finalizable; + if (!t4._statement$_closed) { + t5 = $.$get$disposeFinalizer()._registry; + if (t5 != null) + t5.unregister(t3); + if (!t4._statement$_closed) { + t4._statement$_closed = true; + if (!t4._inResetState) { + t5 = t4.statement; + A._asInt(t5.bindings.sqlite3.sqlite3_reset(t5.stmt)); + t4._inResetState = true; + } + t5 = t4.statement; + t5.deallocateArguments$0(); + A._asInt(t5.bindings.sqlite3.sqlite3_finalize(t5.stmt)); + } + t3 = t3.database; + if (!t3._isClosed) + B.JSArray_methods.remove$1(t3.finalizable._statements, t4); + } + } + t1.clear$0(0); + } + }; + A.EnableNativeFunctions_useNativeFunctions_closure.prototype = { + call$1(args) { + return Date.now(); + }, + $signature: 44 + }; + A._unaryNumFunction_closure.prototype = { + call$1(args) { + var value = args.$index(0, 0); + if (typeof value == "number") + return this.calculation.call$1(value); + else + return null; + }, + $signature: 26 + }; + A.LazyDatabase.prototype = { + get$_delegate() { + var t1 = this.__LazyDatabase__delegate_F; + t1 === $ && A.throwLateFieldNI("_delegate"); + return t1; + }, + get$dialect() { + if (this._delegateAvailable) { + var t1 = this.__LazyDatabase__delegate_F; + t1 === $ && A.throwLateFieldNI("_delegate"); + t1 = B.SqlDialect_0_sqlite !== t1.get$dialect(); + } else + t1 = false; + if (t1) + throw A.wrapException(A.Exception_Exception("LazyDatabase created with " + B.SqlDialect_0_sqlite.toString$0(0) + ", but underlying database is " + this.get$_delegate().get$dialect().toString$0(0) + ".")); + return B.SqlDialect_0_sqlite; + }, + _awaitOpened$0() { + var t1, delegate, _this = this; + if (_this._delegateAvailable) + return A.Future_Future$value(null, type$.void); + else { + t1 = _this._openDelegate; + if (t1 != null) + return t1.future; + else { + t1 = new A._Future($.Zone__current, type$._Future_void); + delegate = _this._openDelegate = new A._AsyncCompleter(t1, type$._AsyncCompleter_void); + A.Future_Future$sync(_this.opener, type$.QueryExecutor).then$1$2$onError(new A.LazyDatabase__awaitOpened_closure(_this, delegate), delegate.get$completeError(), type$.Null); + return t1; + } + } + }, + beginExclusive$0() { + var t1 = this.__LazyDatabase__delegate_F; + t1 === $ && A.throwLateFieldNI("_delegate"); + return t1.beginExclusive$0(); + }, + beginTransaction$0() { + var t1 = this.__LazyDatabase__delegate_F; + t1 === $ && A.throwLateFieldNI("_delegate"); + return t1.beginTransaction$0(); + }, + ensureOpen$1(user) { + return this._awaitOpened$0().then$1$1(new A.LazyDatabase_ensureOpen_closure(this, user), type$.bool); + }, + runBatched$1(statements) { + var t1 = this.__LazyDatabase__delegate_F; + t1 === $ && A.throwLateFieldNI("_delegate"); + return t1.runBatched$1(statements); + }, + runCustom$2(statement, args) { + var t1 = this.__LazyDatabase__delegate_F; + t1 === $ && A.throwLateFieldNI("_delegate"); + return t1.runCustom$2(statement, args); + }, + runDelete$2(statement, args) { + var t1 = this.__LazyDatabase__delegate_F; + t1 === $ && A.throwLateFieldNI("_delegate"); + return t1.runDelete$2(statement, args); + }, + runInsert$2(statement, args) { + var t1 = this.__LazyDatabase__delegate_F; + t1 === $ && A.throwLateFieldNI("_delegate"); + return t1.runInsert$2(statement, args); + }, + runSelect$2(statement, args) { + var t1 = this.__LazyDatabase__delegate_F; + t1 === $ && A.throwLateFieldNI("_delegate"); + return t1.runSelect$2(statement, args); + }, + close$0() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$returnValue, $async$self = this, t1, _0_0; + var $async$close$0 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$goto = $async$self._delegateAvailable ? 3 : 5; + break; + case 3: + // then + t1 = $async$self.__LazyDatabase__delegate_F; + t1 === $ && A.throwLateFieldNI("_delegate"); + $async$goto = 6; + return A._asyncAwait(t1.close$0(), $async$close$0); + case 6: + // returning from await. + $async$returnValue = $async$result; + // goto return + $async$goto = 1; + break; + // goto join + $async$goto = 4; + break; + case 5: + // else + _0_0 = $async$self._openDelegate; + $async$goto = _0_0 != null ? 7 : 8; + break; + case 7: + // then + $async$goto = 9; + return A._asyncAwait(_0_0.future, $async$close$0); + case 9: + // returning from await. + t1 = $async$self.__LazyDatabase__delegate_F; + t1 === $ && A.throwLateFieldNI("_delegate"); + $async$goto = 10; + return A._asyncAwait(t1.close$0(), $async$close$0); + case 10: + // returning from await. + case 8: + // join + case 4: + // join + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$close$0, $async$completer); + } + }; + A.LazyDatabase__awaitOpened_closure.prototype = { + call$1(database) { + var t1; + type$.QueryExecutor._as(database); + t1 = this.$this; + t1.__LazyDatabase__delegate_F !== $ && A.throwLateFieldAI("_delegate"); + t1.__LazyDatabase__delegate_F = database; + t1._delegateAvailable = true; + this.delegate.complete$0(); + }, + $signature: 46 + }; + A.LazyDatabase_ensureOpen_closure.prototype = { + call$1(_) { + var t1 = this.$this.__LazyDatabase__delegate_F; + t1 === $ && A.throwLateFieldNI("_delegate"); + return t1.ensureOpen$1(this.user); + }, + $signature: 47 + }; + A.Lock.prototype = { + synchronized$1$1(block, $T) { + var previous, blockReleasedLock, t1; + $T._eval$1("0/()")._as(block); + previous = this._last; + blockReleasedLock = new A._Future($.Zone__current, type$._Future_void); + this._last = blockReleasedLock; + t1 = new A.Lock_synchronized_callBlockAndComplete(this, block, new A._AsyncCompleter(blockReleasedLock, type$._AsyncCompleter_void), blockReleasedLock, $T); + if (previous != null) + return previous.then$1$1(new A.Lock_synchronized_closure(t1, $T), $T); + else + return t1.call$0(); + } + }; + A.Lock_synchronized_callBlockAndComplete.prototype = { + call$0() { + var _this = this; + return A.Future_Future$sync(_this.block, _this.T).whenComplete$1(new A.Lock_synchronized_callBlockAndComplete_closure(_this.$this, _this.blockCompleted, _this.blockReleasedLock)); + }, + $signature() { + return this.T._eval$1("Future<0>()"); + } + }; + A.Lock_synchronized_callBlockAndComplete_closure.prototype = { + call$0() { + this.blockCompleted.complete$0(); + var t1 = this.$this; + if (t1._last === this.blockReleasedLock) + t1._last = null; + }, + $signature: 6 + }; + A.Lock_synchronized_closure.prototype = { + call$1(_) { + return this.callBlockAndComplete.call$0(); + }, + $signature() { + return this.T._eval$1("Future<0>(~)"); + } + }; + A.WebPortToChannel_channel_closure.prototype = { + call$1($event) { + var t1, _this = this, _s6_ = "_local", _s5_ = "_sink", + message = A._asJSObject($event).data; + if (_this.explicitClose && J.$eq$(message, "_disconnect")) { + t1 = _this.controller.__StreamChannelController__local_F; + t1 === $ && A.throwLateFieldNI(_s6_); + t1 = t1.__GuaranteeChannel__sink_F; + t1 === $ && A.throwLateFieldNI(_s5_); + t1.close$0(); + } else { + t1 = _this.controller.__StreamChannelController__local_F; + if (_this.webNativeSerialization) { + t1 === $ && A.throwLateFieldNI(_s6_); + t1 = t1.__GuaranteeChannel__sink_F; + t1 === $ && A.throwLateFieldNI(_s5_); + t1.add$1(0, _this.protocol.deserialize$1(type$.JSArray_nullable_Object._as(message))); + } else { + t1 === $ && A.throwLateFieldNI(_s6_); + t1 = t1.__GuaranteeChannel__sink_F; + t1 === $ && A.throwLateFieldNI(_s5_); + t1.add$1(0, A.dartify(message)); + } + } + }, + $signature: 10 + }; + A.WebPortToChannel_channel_closure0.prototype = { + call$1(e) { + var t1 = this._this; + if (this.webNativeSerialization) + t1.postMessage(this.protocol.serialize$1(type$.Message._as(e))); + else + t1.postMessage(A.jsify(e)); + }, + $signature: 8 + }; + A.WebPortToChannel_channel_closure1.prototype = { + call$0() { + if (this.explicitClose) + this._this.postMessage("_disconnect"); + this._this.close(); + }, + $signature: 0 + }; + A.DedicatedDriftWorker.prototype = { + start$0() { + A._EventStreamSubscription$(this.self, "message", type$.nullable_void_Function_JSObject._as(new A.DedicatedDriftWorker_start_closure(this)), false, type$.JSObject); + }, + _dedicated_worker$_handleMessage$1(message) { + return this._handleMessage$body$DedicatedDriftWorker(message); + }, + _handleMessage$body$DedicatedDriftWorker(message) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$handler = 1, $async$errorStack = [], $async$self = this, storage, $name, e, t1, dbName, _box_0, existingServer, existingDatabases, opfsExists, t2, indexedDbExists, _this, t3, options, worker, _0_7_isSet, _0_7, exception, $async$exception, $async$temp1; + var $async$_dedicated_worker$_handleMessage$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) { + $async$errorStack.push($async$result); + $async$goto = $async$handler; + } + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = message instanceof A.RequestCompatibilityCheck; + dbName = t1 ? message.databaseName : null; + $async$goto = t1 ? 3 : 4; + break; + case 3: + // then + _box_0 = {}; + _box_0.supportsIndexedDb = _box_0.supportsOpfs = false; + $async$goto = 5; + return A._asyncAwait($async$self._checkCompatibility.synchronized$1$1(new A.DedicatedDriftWorker__handleMessage_closure(_box_0, $async$self), type$.Null), $async$_dedicated_worker$_handleMessage$1); + case 5: + // returning from await. + existingServer = $async$self._dedicated_worker$_servers.servers.$index(0, dbName); + existingDatabases = A._setArrayType([], type$.JSArray_Record_2_WebStorageApi_and_String); + opfsExists = false; + $async$goto = _box_0.supportsOpfs ? 6 : 7; + break; + case 6: + // then + $async$temp1 = J; + $async$goto = 8; + return A._asyncAwait(A.opfsDatabases(), $async$_dedicated_worker$_handleMessage$1); + case 8: + // returning from await. + t1 = $async$temp1.get$iterator$ax($async$result); + case 9: + // for condition + if (!t1.moveNext$0()) { + // goto after for + $async$goto = 10; + break; + } + t2 = t1.get$current(); + B.JSArray_methods.add$1(existingDatabases, new A._Record_2(B.WebStorageApi_0, t2)); + if (t2 === dbName) + opfsExists = true; + // goto for condition + $async$goto = 9; + break; + case 10: + // after for + case 7: + // join + $async$goto = existingServer != null ? 11 : 13; + break; + case 11: + // then + t1 = existingServer.storage; + indexedDbExists = t1 === B.WasmStorageImplementation_2_sharedIndexedDb || t1 === B.WasmStorageImplementation_3_unsafeIndexedDb; + opfsExists = t1 === B.WasmStorageImplementation_0_opfsShared || t1 === B.WasmStorageImplementation_1_opfsLocks; + // goto join + $async$goto = 12; + break; + case 13: + // else + $async$temp1 = _box_0.supportsIndexedDb; + if ($async$temp1) { + // goto then + $async$goto = 14; + break; + } else + $async$result = $async$temp1; + // goto join + $async$goto = 15; + break; + case 14: + // then + $async$goto = 16; + return A._asyncAwait(A.checkIndexedDbExists(dbName), $async$_dedicated_worker$_handleMessage$1); + case 16: + // returning from await. + case 15: + // join + indexedDbExists = $async$result; + case 12: + // join + t1 = init.G; + _this = "Worker" in t1; + t2 = _box_0.supportsOpfs; + t3 = _box_0.supportsIndexedDb; + new A.DedicatedWorkerCompatibilityResult(_this, t2, "SharedArrayBuffer" in t1, t3, existingDatabases, B.ProtocolVersion_4_4_v4, indexedDbExists, opfsExists).sendToClient$1($async$self.self); + // goto break $label0$0 + $async$goto = 2; + break; + case 4: + // join + if (message instanceof A.ServeDriftDatabase) { + $async$self._dedicated_worker$_servers.serve$1(message); + // goto break $label0$0 + $async$goto = 2; + break; + } + t1 = message instanceof A.StartFileSystemServer; + options = t1 ? message.sqlite3Options : null; + $async$goto = t1 ? 17 : 18; + break; + case 17: + // then + $async$goto = 19; + return A._asyncAwait(A.VfsWorker_create(options), $async$_dedicated_worker$_handleMessage$1); + case 19: + // returning from await. + worker = $async$result; + $async$self.self.postMessage(true); + $async$goto = 20; + return A._asyncAwait(worker.start$0(), $async$_dedicated_worker$_handleMessage$1); + case 20: + // returning from await. + // goto break $label0$0 + $async$goto = 2; + break; + case 18: + // join + storage = null; + $name = null; + _0_7_isSet = message instanceof A.DeleteDatabase; + if (_0_7_isSet) { + _0_7 = message.database; + storage = _0_7._0; + $name = _0_7._1; + } + $async$goto = _0_7_isSet ? 21 : 22; + break; + case 21: + // then + $async$handler = 24; + case 27: + // switch + switch (storage) { + case B.WebStorageApi_1: + // goto case + $async$goto = 29; + break; + case B.WebStorageApi_0: + // goto case + $async$goto = 30; + break; + default: + // goto after switch + $async$goto = 28; + break; + } + break; + case 29: + // case + $async$goto = 31; + return A._asyncAwait(A.deleteDatabaseInIndexedDb($name), $async$_dedicated_worker$_handleMessage$1); + case 31: + // returning from await. + // goto after switch + $async$goto = 28; + break; + case 30: + // case + $async$goto = 32; + return A._asyncAwait(A.deleteDatabaseInOpfs($name), $async$_dedicated_worker$_handleMessage$1); + case 32: + // returning from await. + // goto after switch + $async$goto = 28; + break; + case 28: + // after switch + message.sendToClient$1($async$self.self); + $async$handler = 1; + // goto after finally + $async$goto = 26; + break; + case 24: + // catch + $async$handler = 23; + $async$exception = $async$errorStack.pop(); + e = A.unwrapException($async$exception); + new A.WorkerError(J.toString$0$(e)).sendToClient$1($async$self.self); + // goto after finally + $async$goto = 26; + break; + case 23: + // uncaught + // goto rethrow + $async$goto = 1; + break; + case 26: + // after finally + // goto break $label0$0 + $async$goto = 2; + break; + case 22: + // join + // goto break $label0$0 + $async$goto = 2; + break; + case 2: + // break $label0$0 + // implicit return + return A._asyncReturn(null, $async$completer); + case 1: + // rethrow + return A._asyncRethrow($async$errorStack.at(-1), $async$completer); + } + }); + return A._asyncStartSync($async$_dedicated_worker$_handleMessage$1, $async$completer); + } + }; + A.DedicatedDriftWorker_start_closure.prototype = { + call$1($event) { + this.$this._dedicated_worker$_handleMessage$1(A.WasmInitializationMessage_WasmInitializationMessage$fromJs(A._asJSObject($event.data))); + }, + $signature: 1 + }; + A.DedicatedDriftWorker__handleMessage_closure.prototype = { + call$0() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.Null), + $async$self = this, supportsIndexedDb, t1, knownResults, t2, $async$temp1; + var $async$call$0 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $async$self.$this; + knownResults = t1._compatibility; + t2 = $async$self._box_0; + $async$goto = knownResults != null ? 2 : 4; + break; + case 2: + // then + t2.supportsOpfs = knownResults.supportsOpfs; + t2.supportsIndexedDb = knownResults.supportsIndexedDb; + // goto join + $async$goto = 3; + break; + case 4: + // else + $async$temp1 = t2; + $async$goto = 5; + return A._asyncAwait(A.checkOpfsSupport(), $async$call$0); + case 5: + // returning from await. + $async$temp1.supportsOpfs = $async$result; + $async$goto = 6; + return A._asyncAwait(A.checkIndexedDbSupport(), $async$call$0); + case 6: + // returning from await. + supportsIndexedDb = $async$result; + t2.supportsIndexedDb = supportsIndexedDb; + t1._compatibility = new A.WasmCompatibility(supportsIndexedDb, t2.supportsOpfs); + case 3: + // join + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$call$0, $async$completer); + }, + $signature: 18 + }; + A.ProtocolVersion.prototype = { + _enumToString$0() { + return "ProtocolVersion." + this._name; + } + }; + A.WasmInitializationMessage.prototype = { + sendToWorker$1(worker) { + this.sendTo$1(new A.WasmInitializationMessage_sendToWorker_closure(worker)); + }, + sendToPort$1(port) { + this.sendTo$1(new A.WasmInitializationMessage_sendToPort_closure(port)); + }, + sendToClient$1(worker) { + this.sendTo$1(new A.WasmInitializationMessage_sendToClient_closure(worker)); + } + }; + A.WasmInitializationMessage_sendToWorker_closure.prototype = { + call$2(msg, transfer) { + var t1; + type$.nullable_List_JSObject._as(transfer); + t1 = transfer == null ? B.List_empty : transfer; + this.worker.postMessage(msg, t1); + }, + $signature: 19 + }; + A.WasmInitializationMessage_sendToPort_closure.prototype = { + call$2(msg, transfer) { + var t1; + type$.nullable_List_JSObject._as(transfer); + t1 = transfer == null ? B.List_empty : transfer; + this.port.postMessage(msg, t1); + }, + $signature: 19 + }; + A.WasmInitializationMessage_sendToClient_closure.prototype = { + call$2(msg, transfer) { + var t1; + type$.nullable_List_JSObject._as(transfer); + t1 = transfer == null ? B.List_empty : transfer; + this.worker.postMessage(msg, t1); + }, + $signature: 19 + }; + A.CompatibilityResult.prototype = {}; + A.SharedWorkerCompatibilityResult.prototype = { + sendTo$1(sender) { + var _this = this; + A._extension_1_sendTyped(type$.void_Function_2_nullable_JSObject_and_nullable_List_JSObject._as(sender), "SharedWorkerCompatibilityResult", A._setArrayType([_this.canSpawnDedicatedWorkers, _this.dedicatedWorkersCanUseOpfs, _this.canUseIndexedDb, _this.indexedDbExists, _this.opfsExists, A.EncodeLocations_encodeToJs(_this.existingDatabases), _this.version.versionCode], type$.JSArray_Object), null); + } + }; + A.SharedWorkerCompatibilityResult_SharedWorkerCompatibilityResult$fromJsPayload_asBoolean.prototype = { + call$1(index) { + return A._asBool(J.$index$asx(this.asList, index)); + }, + $signature: 51 + }; + A.WorkerError.prototype = { + sendTo$1(sender) { + A._extension_1_sendTyped(type$.void_Function_2_nullable_JSObject_and_nullable_List_JSObject._as(sender), "Error", this.error, null); + }, + toString$0(_) { + return "Error in worker: " + this.error; + }, + $isException: 1 + }; + A.ServeDriftDatabase.prototype = { + sendTo$1(sender) { + var _this0, t1, t2, _this = this; + type$.void_Function_2_nullable_JSObject_and_nullable_List_JSObject._as(sender); + _this0 = {}; + _this0.sqlite = _this.sqlite3WasmUri.toString$0(0); + t1 = _this.port; + _this0.port = t1; + _this0.storage = _this.storage._name; + _this0.database = _this.databaseName; + t2 = _this.initializationPort; + _this0.initPort = t2; + _this0.migrations = _this.enableMigrations; + _this0.new_serialization = _this.newSerialization; + _this0.v = _this.protocolVersion.versionCode; + t1 = A._setArrayType([t1], type$.JSArray_JSObject); + if (t2 != null) + t1.push(t2); + A._extension_1_sendTyped(sender, "ServeDriftDatabase", _this0, t1); + } + }; + A.RequestCompatibilityCheck.prototype = { + sendTo$1(sender) { + A._extension_1_sendTyped(type$.void_Function_2_nullable_JSObject_and_nullable_List_JSObject._as(sender), "RequestCompatibilityCheck", this.databaseName, null); + } + }; + A.DedicatedWorkerCompatibilityResult.prototype = { + sendTo$1(sender) { + var _this0, _this = this; + type$.void_Function_2_nullable_JSObject_and_nullable_List_JSObject._as(sender); + _this0 = {}; + _this0.supportsNestedWorkers = _this.supportsNestedWorkers; + _this0.canAccessOpfs = _this.canAccessOpfs; + _this0.supportsIndexedDb = _this.supportsIndexedDb; + _this0.supportsSharedArrayBuffers = _this.supportsSharedArrayBuffers; + _this0.indexedDbExists = _this.indexedDbExists; + _this0.opfsExists = _this.opfsExists; + _this0.existing = A.EncodeLocations_encodeToJs(_this.existingDatabases); + _this0.v = _this.version.versionCode; + A._extension_1_sendTyped(sender, "DedicatedWorkerCompatibilityResult", _this0, null); + } + }; + A.StartFileSystemServer.prototype = { + sendTo$1(sender) { + A._extension_1_sendTyped(type$.void_Function_2_nullable_JSObject_and_nullable_List_JSObject._as(sender), "StartFileSystemServer", this.sqlite3Options, null); + } + }; + A.DeleteDatabase.prototype = { + sendTo$1(sender) { + var t1 = this.database; + A._extension_1_sendTyped(type$.void_Function_2_nullable_JSObject_and_nullable_List_JSObject._as(sender), "DeleteDatabase", A._setArrayType([t1._0._name, t1._1], type$.JSArray_String), null); + } + }; + A.checkIndexedDbExists_closure.prototype = { + call$1($event) { + A._asJSObject($event); + A._asJSObjectQ(this.openRequest.transaction).abort(); + this._box_0.indexedDbExists = false; + }, + $signature: 10 + }; + A.opfsDatabases_closure.prototype = { + call$1(data) { + type$.JSArray_nullable_Object._as(data); + if (1 < 0 || 1 >= data.length) + return A.ioore(data, 1); + return A._asJSObject(data[1]); + }, + $signature: 52 + }; + A.DriftServerController.prototype = { + serve$1(message) { + var t1, t2; + type$.ServeDriftDatabase._as(message); + t1 = message.protocolVersion.versionCode; + t2 = message.newSerialization; + this.servers.putIfAbsent$2(message.databaseName, new A.DriftServerController_serve_closure(this, message)).serve$2(A.WebPortToChannel_channel(message.port, t1 >= 1, t1, t2), !t2); + }, + openConnection$5$databaseName$enableMigrations$initializer$sqlite3WasmUri$storage(databaseName, enableMigrations, initializer, sqlite3WasmUri, storage) { + return this.openConnection$body$DriftServerController(databaseName, enableMigrations, type$.nullable_FutureOr_nullable_Uint8List_Function._as(initializer), sqlite3WasmUri, storage); + }, + openConnection$body$DriftServerController(databaseName, enableMigrations, initializer, sqlite3WasmUri, storage) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.QueryExecutor), + $async$returnValue, $async$self = this, vfs, t1, t2, response, file, $name, t3, ptr, db, sqlite3, $close; + var $async$openConnection$5$databaseName$enableMigrations$initializer$sqlite3WasmUri$storage = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$goto = 3; + return A._asyncAwait(A.WasmSqlite3_loadFromUrl(sqlite3WasmUri), $async$openConnection$5$databaseName$enableMigrations$initializer$sqlite3WasmUri$storage); + case 3: + // returning from await. + sqlite3 = $async$result; + $close = null; + case 4: + // switch + switch (storage.index) { + case 0: + // goto case + $async$goto = 6; + break; + case 1: + // goto case + $async$goto = 7; + break; + case 3: + // goto case + $async$goto = 8; + break; + case 2: + // goto case + $async$goto = 9; + break; + case 4: + // goto case + $async$goto = 10; + break; + default: + // goto default + $async$goto = 11; + break; + } + break; + case 6: + // case + $async$goto = 12; + return A._asyncAwait(A.SimpleOpfsFileSystem_loadFromStorage("drift_db/" + databaseName), $async$openConnection$5$databaseName$enableMigrations$initializer$sqlite3WasmUri$storage); + case 12: + // returning from await. + vfs = $async$result; + $close = vfs.get$close(); + // goto after switch + $async$goto = 5; + break; + case 7: + // case + $async$goto = 13; + return A._asyncAwait($async$self._loadLockedWasmVfs$1(databaseName), $async$openConnection$5$databaseName$enableMigrations$initializer$sqlite3WasmUri$storage); + case 13: + // returning from await. + vfs = $async$result; + $close = vfs.get$close(); + // goto after switch + $async$goto = 5; + break; + case 8: + // case + case 9: + // case + $async$goto = 14; + return A._asyncAwait(A.IndexedDbFileSystem_open(databaseName), $async$openConnection$5$databaseName$enableMigrations$initializer$sqlite3WasmUri$storage); + case 14: + // returning from await. + vfs = $async$result; + $close = vfs.get$close(); + // goto after switch + $async$goto = 5; + break; + case 10: + // case + vfs = A.InMemoryFileSystem$(null); + // goto after switch + $async$goto = 5; + break; + case 11: + // default + vfs = null; + case 5: + // after switch + $async$goto = initializer != null && vfs.xAccess$2("/database", 0) === 0 ? 15 : 16; + break; + case 15: + // then + t1 = initializer.call$0(); + t2 = type$.nullable_Uint8List; + $async$goto = 17; + return A._asyncAwait(type$.Future_nullable_Uint8List._is(t1) ? t1 : A._Future$value(t2._as(t1), t2), $async$openConnection$5$databaseName$enableMigrations$initializer$sqlite3WasmUri$storage); + case 17: + // returning from await. + response = $async$result; + if (response != null) { + file = vfs.xOpen$2(new A.Sqlite3Filename("/database"), 4)._0; + file.xWrite$2(response, 0); + file.xClose$0(); + } + case 16: + // join + type$.VirtualFileSystem._as(vfs); + t1 = sqlite3.bindings; + t1 = t1.bindings; + $name = t1.allocateBytes$2$additionalLength(B.C_Utf8Encoder.convert$1(vfs.name), 1); + t2 = t1.callbacks; + t3 = t2._id++; + t2.registeredVfs.$indexSet(0, t3, vfs); + ptr = A._asInt(t1.sqlite3.dart_sqlite3_register_vfs($name, t3, 1)); + if (ptr === 0) + A.throwExpression(A.StateError$("could not register vfs")); + t1 = $.$get$DartCallbacks_sqliteVfsPointer(); + t1.$ti._eval$1("1?")._as(ptr); + t1._jsWeakMap.set(vfs, ptr); + t1 = A.LinkedHashMap_LinkedHashMap(type$.String, type$.CommonPreparedStatement); + db = new A.WasmDatabase(new A._WasmDelegate(sqlite3, "/database", null, $async$self._setup, true, enableMigrations, new A.PreparedStatementsCache(t1)), false, true, new A.Lock(), new A.Lock()); + if ($close != null) { + $async$returnValue = A.ApplyInterceptor_interceptWith(db, new A._CloseVfsOnClose($close, db)); + // goto return + $async$goto = 1; + break; + } else { + $async$returnValue = db; + // goto return + $async$goto = 1; + break; + } + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$openConnection$5$databaseName$enableMigrations$initializer$sqlite3WasmUri$storage, $async$completer); + }, + _loadLockedWasmVfs$1(databaseName) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.WasmVfs), + $async$returnValue, worker, t5, t6, t1, buffer, t2, t3, t4; + var $async$_loadLockedWasmVfs$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = init.G; + buffer = A._asJSObject(new t1.SharedArrayBuffer(8)); + t2 = type$.JavaScriptFunction; + t3 = t2._as(t1.Int32Array); + t4 = type$.JSObject; + t3 = type$.NativeInt32List._as(A.callConstructor(t3, [buffer], t4)); + A._asInt(t1.Atomics.store(t3, 0, -1)); + t3 = {clientVersion: 1, root: "drift_db/" + databaseName, synchronizationBuffer: buffer, communicationBuffer: A._asJSObject(new t1.SharedArrayBuffer(67584))}; + worker = A._asJSObject(new t1.Worker(A.Uri_base().toString$0(0))); + new A.StartFileSystemServer(t3).sendToWorker$1(worker); + $async$goto = 3; + return A._asyncAwait(new A._EventStream(worker, "message", false, type$._EventStream_JSObject).get$first(0), $async$_loadLockedWasmVfs$1); + case 3: + // returning from await. + t5 = A.RequestResponseSynchronizer_RequestResponseSynchronizer(A._asJSObject(t3.synchronizationBuffer)); + t3 = A._asJSObject(t3.communicationBuffer); + t6 = A.SharedArrayBuffer_asByteData(t3, 65536, 2048); + t1 = t2._as(t1.Uint8Array); + t1 = type$.NativeUint8List._as(A.callConstructor(t1, [t3], t4)); + t2 = A.Context_Context("/", $.$get$Style_url()); + t4 = $.$get$BaseVirtualFileSystem__fallbackRandom(); + $async$returnValue = new A.WasmVfs(t5, new A.MessageSerializer(t3, t6, t1), t2, t4, "dart-sqlite3-vfs"); + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$_loadLockedWasmVfs$1, $async$completer); + } + }; + A.DriftServerController_serve_closure.prototype = { + call$0() { + var t1 = this.message, + initPort = t1.initializationPort, + initializer = initPort != null ? new A.DriftServerController_serve__closure(initPort) : null, + t2 = this.$this, + server = A.ServerImplementation$(new A.LazyDatabase(new A.DriftServerController_serve__closure0(t2, t1, initializer)), false, true), + t3 = new A._Future($.Zone__current, type$._Future_void), + wasmServer = new A.RunningWasmServer(t1.storage, server, new A._SyncCompleter(t3, type$._SyncCompleter_void)); + t3.whenComplete$1(new A.DriftServerController_serve__closure1(t2, t1, wasmServer)); + return wasmServer; + }, + $signature: 53 + }; + A.DriftServerController_serve__closure.prototype = { + call$0() { + var t1 = new A._Future($.Zone__current, type$._Future_nullable_Uint8List), + t2 = this.initPort; + t2.postMessage(true); + t2.onmessage = A._functionToJS1(new A.DriftServerController_serve___closure(new A._AsyncCompleter(t1, type$._AsyncCompleter_nullable_Uint8List))); + return t1; + }, + $signature: 54 + }; + A.DriftServerController_serve___closure.prototype = { + call$1(e) { + var data = type$.nullable_NativeUint8List._as(A._asJSObject(e).data), + t1 = data == null ? null : data; + this.completer.complete$1(t1); + }, + $signature: 10 + }; + A.DriftServerController_serve__closure0.prototype = { + call$0() { + var t1 = this.message; + return this.$this.openConnection$5$databaseName$enableMigrations$initializer$sqlite3WasmUri$storage(t1.databaseName, t1.enableMigrations, this.initializer, t1.sqlite3WasmUri, t1.storage); + }, + $signature: 55 + }; + A.DriftServerController_serve__closure1.prototype = { + call$0() { + this.$this.servers.remove$1(0, this.message.databaseName); + this.wasmServer.server.shutdown$0(); + }, + $signature: 6 + }; + A._CloseVfsOnClose.prototype = { + close$1(inner) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$self = this, t1; + var $async$close$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$goto = 2; + return A._asyncAwait(inner.close$0(), $async$close$1); + case 2: + // returning from await. + $async$goto = $async$self._root === inner ? 3 : 4; + break; + case 3: + // then + t1 = $async$self._shared$_close.call$0(); + $async$goto = 5; + return A._asyncAwait(t1 instanceof A._Future ? t1 : A._Future$value(t1, type$.void), $async$close$1); + case 5: + // returning from await. + case 4: + // join + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$close$1, $async$completer); + } + }; + A.RunningWasmServer.prototype = { + serve$2(channel, serialize) { + var t1, t2, t3, t4; + ++this._connectedClients; + t1 = type$.nullable_Object; + t2 = channel.$ti; + t1 = t2._eval$1("Stream<1>(Stream<1>)")._as(t2._eval$1("StreamTransformer<1,1>")._as(A._StreamHandlerTransformer$(new A.RunningWasmServer_serve_closure(this), t1, t1)).get$bind()).call$1(channel.get$stream()); + t3 = new A.CloseGuaranteeChannel(t2._eval$1("CloseGuaranteeChannel<1>")); + t4 = t2._eval$1("_CloseGuaranteeSink<1>"); + t3.__CloseGuaranteeChannel__sink_F = t4._as(new A._CloseGuaranteeSink(t3, channel.get$sink(), t4)); + t2 = t2._eval$1("_CloseGuaranteeStream<1>"); + t3.__CloseGuaranteeChannel__stream_F = t2._as(new A._CloseGuaranteeStream(t1, t3, t2)); + this.server.serve$2$serialize(t3, serialize); + } + }; + A.RunningWasmServer_serve_closure.prototype = { + call$1(sink) { + var t1 = this.$this; + if (--t1._connectedClients === 0) + t1._lastClientDisconnected.complete$0(); + t1 = sink._async$_sink; + if ((t1._state & 2) !== 0) + A.throwExpression(A.StateError$("Stream is already closed")); + t1.super$_BufferingStreamSubscription$_close(); + }, + $signature: 56 + }; + A.WasmCompatibility.prototype = {}; + A.CompleteIdbRequest_complete_closure1.prototype = { + call$1($event) { + this.completer.complete$1(this.T._as(this._this.result)); + }, + $signature: 1 + }; + A.CompleteIdbRequest_complete_closure2.prototype = { + call$1($event) { + var t1 = A._asJSObjectQ(this._this.error); + if (t1 == null) + t1 = $event; + this.completer.completeError$1(t1); + }, + $signature: 1 + }; + A.CompleteIdbRequest_complete_closure3.prototype = { + call$1($event) { + var t1 = A._asJSObjectQ(this._this.error); + if (t1 == null) + t1 = $event; + this.completer.completeError$1(t1); + }, + $signature: 1 + }; + A.SharedDriftWorker.prototype = { + start$0() { + A._EventStreamSubscription$(this.self, "connect", type$.nullable_void_Function_JSObject._as(new A.SharedDriftWorker_start_closure(this)), false, type$.JSObject); + }, + _newConnection$1($event) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$self = this, t1, clientPort; + var $async$_newConnection$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = type$.JSArray_nullable_Object._as($event.ports); + clientPort = J.$index$asx(type$.List_JSObject._is(t1) ? t1 : new A.CastList(t1, A._arrayInstanceType(t1)._eval$1("CastList<1,JSObject>")), 0); + clientPort.start(); + A._EventStreamSubscription$(clientPort, "message", type$.nullable_void_Function_JSObject._as(new A.SharedDriftWorker__newConnection_closure($async$self, clientPort)), false, type$.JSObject); + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$_newConnection$1, $async$completer); + }, + _messageFromClient$2(client, $event) { + return this._messageFromClient$body$SharedDriftWorker(client, $event); + }, + _messageFromClient$body$SharedDriftWorker(client, $event) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$handler = 1, $async$errorStack = [], $async$self = this, message, _0_0, dbName, result, e, t1, exception, $async$exception; + var $async$_messageFromClient$2 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) { + $async$errorStack.push($async$result); + $async$goto = $async$handler; + } + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$handler = 3; + message = A.WasmInitializationMessage_WasmInitializationMessage$fromJs(A._asJSObject($event.data)); + _0_0 = message; + dbName = null; + t1 = _0_0 instanceof A.RequestCompatibilityCheck; + if (t1) + dbName = _0_0.databaseName; + $async$goto = t1 ? 7 : 8; + break; + case 7: + // then + $async$goto = 9; + return A._asyncAwait($async$self._startFeatureDetection$1(dbName), $async$_messageFromClient$2); + case 9: + // returning from await. + result = $async$result; + result.sendToPort$1(client); + // goto break $label0$0 + $async$goto = 6; + break; + case 8: + // join + if (_0_0 instanceof A.ServeDriftDatabase && B.WasmStorageImplementation_2_sharedIndexedDb === _0_0.storage) { + $async$self._servers.serve$1(message); + // goto break $label0$0 + $async$goto = 6; + break; + } + if (_0_0 instanceof A.ServeDriftDatabase) { + t1 = $async$self._dedicatedWorker; + t1.toString; + message.sendToWorker$1(t1); + // goto break $label0$0 + $async$goto = 6; + break; + } + t1 = A.ArgumentError$("Unknown message", null); + throw A.wrapException(t1); + case 6: + // break $label0$0 + $async$handler = 1; + // goto after finally + $async$goto = 5; + break; + case 3: + // catch + $async$handler = 2; + $async$exception = $async$errorStack.pop(); + e = A.unwrapException($async$exception); + new A.WorkerError(J.toString$0$(e)).sendToPort$1(client); + client.close(); + // goto after finally + $async$goto = 5; + break; + case 2: + // uncaught + // goto rethrow + $async$goto = 1; + break; + case 5: + // after finally + // implicit return + return A._asyncReturn(null, $async$completer); + case 1: + // rethrow + return A._asyncRethrow($async$errorStack.at(-1), $async$completer); + } + }); + return A._asyncStartSync($async$_messageFromClient$2, $async$completer); + }, + _startFeatureDetection$1(databaseName) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.SharedWorkerCompatibilityResult), + $async$returnValue, $async$self = this, indexedDbExists, t2, worker, t3, t4, t5, t1, _this, canUseIndexedDb, $async$temp1, $async$temp2, $async$temp3, $async$temp4; + var $async$_startFeatureDetection$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = init.G; + _this = "Worker" in t1; + $async$goto = 3; + return A._asyncAwait(A.checkIndexedDbSupport(), $async$_startFeatureDetection$1); + case 3: + // returning from await. + canUseIndexedDb = $async$result; + $async$goto = !_this ? 4 : 6; + break; + case 4: + // then + t1 = $async$self._servers.servers.$index(0, databaseName); + if (t1 == null) + indexedDbExists = null; + else { + t1 = t1.storage; + t1 = t1 === B.WasmStorageImplementation_2_sharedIndexedDb || t1 === B.WasmStorageImplementation_3_unsafeIndexedDb; + indexedDbExists = t1; + } + $async$temp1 = A; + $async$temp2 = canUseIndexedDb; + $async$temp3 = B.List_empty4; + $async$temp4 = B.ProtocolVersion_4_4_v4; + $async$goto = indexedDbExists == null ? 7 : 9; + break; + case 7: + // then + $async$goto = 10; + return A._asyncAwait(A.checkIndexedDbExists(databaseName), $async$_startFeatureDetection$1); + case 10: + // returning from await. + // goto join + $async$goto = 8; + break; + case 9: + // else + $async$result = indexedDbExists; + case 8: + // join + $async$returnValue = new $async$temp1.SharedWorkerCompatibilityResult(false, false, $async$temp2, $async$temp3, $async$temp4, $async$result, false); + // goto return + $async$goto = 1; + break; + // goto join + $async$goto = 5; + break; + case 6: + // else + t2 = {}; + worker = $async$self._dedicatedWorker; + if (worker == null) + worker = $async$self._dedicatedWorker = A._asJSObject(new t1.Worker(A.Uri_base().toString$0(0))); + new A.RequestCompatibilityCheck(databaseName).sendToWorker$1(worker); + t1 = new A._Future($.Zone__current, type$._Future_SharedWorkerCompatibilityResult); + t2.errorSubscription = t2.messageSubscription = null; + t3 = new A.SharedDriftWorker__startFeatureDetection_result(t2, new A._AsyncCompleter(t1, type$._AsyncCompleter_SharedWorkerCompatibilityResult), canUseIndexedDb); + t4 = type$.nullable_void_Function_JSObject; + t5 = type$.JSObject; + t2.messageSubscription = A._EventStreamSubscription$(worker, "message", t4._as(new A.SharedDriftWorker__startFeatureDetection_closure(t3)), false, t5); + t2.errorSubscription = A._EventStreamSubscription$(worker, "error", t4._as(new A.SharedDriftWorker__startFeatureDetection_closure0($async$self, t3, worker)), false, t5); + $async$returnValue = t1; + // goto return + $async$goto = 1; + break; + case 5: + // join + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$_startFeatureDetection$1, $async$completer); + } + }; + A.SharedDriftWorker_start_closure.prototype = { + call$1(e) { + return this.$this._newConnection$1(e); + }, + $signature: 1 + }; + A.SharedDriftWorker__newConnection_closure.prototype = { + call$1($event) { + return this.$this._messageFromClient$2(this.clientPort, $event); + }, + $signature: 1 + }; + A.SharedDriftWorker__startFeatureDetection_result.prototype = { + call$4(opfsAvailable, opfsExists, indexedDbExists, databases) { + var t1, t2; + type$.List_Record_2_WebStorageApi_and_String._as(databases); + t1 = this.completer; + if ((t1.future._state & 30) === 0) { + t1.complete$1(new A.SharedWorkerCompatibilityResult(true, opfsAvailable, this.canUseIndexedDb, databases, B.ProtocolVersion_4_4_v4, indexedDbExists, opfsExists)); + t1 = this._box_0; + t2 = t1.messageSubscription; + if (t2 != null) + t2.cancel$0(); + t1 = t1.errorSubscription; + if (t1 != null) + t1.cancel$0(); + } + }, + $signature: 57 + }; + A.SharedDriftWorker__startFeatureDetection_closure.prototype = { + call$1($event) { + var compatibilityResult = type$.DedicatedWorkerCompatibilityResult._as(A.WasmInitializationMessage_WasmInitializationMessage$fromJs(A._asJSObject($event.data))); + this.result.call$4(compatibilityResult.canAccessOpfs, compatibilityResult.opfsExists, compatibilityResult.indexedDbExists, compatibilityResult.existingDatabases); + }, + $signature: 1 + }; + A.SharedDriftWorker__startFeatureDetection_closure0.prototype = { + call$1($event) { + this.result.call$4(false, false, false, B.List_empty4); + this.worker.terminate(); + this.$this._dedicatedWorker = null; + }, + $signature: 1 + }; + A.WasmStorageImplementation.prototype = { + _enumToString$0() { + return "WasmStorageImplementation." + this._name; + } + }; + A.WebStorageApi.prototype = { + _enumToString$0() { + return "WebStorageApi." + this._name; + } + }; + A.WasmDatabase.prototype = {}; + A._WasmDelegate.prototype = { + openDatabase$0() { + var t1 = this._sqlite3.open$1(this._path); + return t1; + }, + _flush$0() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + t1; + var $async$_flush$0 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = A._Future$value(null, type$.void); + $async$goto = 2; + return A._asyncAwait(t1, $async$_flush$0); + case 2: + // returning from await. + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$_flush$0, $async$completer); + }, + _runWithArgs$2(statement, args) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.dynamic), + $async$self = this; + var $async$_runWithArgs$2 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$self.runWithArgsSync$2(statement, args); + $async$goto = !$async$self.isInTransaction ? 2 : 3; + break; + case 2: + // then + $async$goto = 4; + return A._asyncAwait($async$self._flush$0(), $async$_runWithArgs$2); + case 4: + // returning from await. + case 3: + // join + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$_runWithArgs$2, $async$completer); + }, + runCustom$2(statement, args) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$self = this; + var $async$runCustom$2 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$goto = 2; + return A._asyncAwait($async$self._runWithArgs$2(statement, args), $async$runCustom$2); + case 2: + // returning from await. + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$runCustom$2, $async$completer); + }, + runInsert$2(statement, args) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.int), + $async$returnValue, $async$self = this, t1; + var $async$runInsert$2 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$goto = 3; + return A._asyncAwait($async$self._runWithArgs$2(statement, args), $async$runInsert$2); + case 3: + // returning from await. + t1 = $async$self._database.database; + $async$returnValue = A._asInt(A._asDouble(init.G.Number(type$.JavaScriptBigInt._as(t1.bindings.sqlite3.sqlite3_last_insert_rowid(t1.db))))); + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$runInsert$2, $async$completer); + }, + runUpdate$2(statement, args) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.int), + $async$returnValue, $async$self = this, t1; + var $async$runUpdate$2 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$goto = 3; + return A._asyncAwait($async$self._runWithArgs$2(statement, args), $async$runUpdate$2); + case 3: + // returning from await. + t1 = $async$self._database.database; + $async$returnValue = A._asInt(t1.bindings.sqlite3.sqlite3_changes(t1.db)); + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$runUpdate$2, $async$completer); + }, + runBatched$1(statements) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$self = this; + var $async$runBatched$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$self.runBatchSync$1(statements); + $async$goto = !$async$self.isInTransaction ? 2 : 3; + break; + case 2: + // then + $async$goto = 4; + return A._asyncAwait($async$self._flush$0(), $async$runBatched$1); + case 4: + // returning from await. + case 3: + // join + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$runBatched$1, $async$completer); + }, + close$0() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$self = this; + var $async$close$0 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$goto = 2; + return A._asyncAwait($async$self.super$Sqlite3Delegate$close(), $async$close$0); + case 2: + // returning from await. + $async$self._database.dispose$0(); + $async$goto = 3; + return A._asyncAwait($async$self._flush$0(), $async$close$0); + case 3: + // returning from await. + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$close$0, $async$completer); + } + }; + A.Context.prototype = { + absolute$15(part1, part2, part3, part4, part5, part6, part7, part8, part9, part10, part11, part12, part13, part14, part15) { + var t1; + A._validateArgList("absolute", A._setArrayType([part1, part2, part3, part4, part5, part6, part7, part8, part9, part10, part11, part12, part13, part14, part15], type$.JSArray_nullable_String)); + t1 = this.style; + t1 = t1.rootLength$1(part1) > 0 && !t1.isRootRelative$1(part1); + if (t1) + return part1; + t1 = this._context$_current; + return this.join$16(0, t1 == null ? A.current() : t1, part1, part2, part3, part4, part5, part6, part7, part8, part9, part10, part11, part12, part13, part14, part15); + }, + absolute$1(part1) { + var _null = null; + return this.absolute$15(part1, _null, _null, _null, _null, _null, _null, _null, _null, _null, _null, _null, _null, _null, _null); + }, + join$16(_, part1, part2, part3, part4, part5, part6, part7, part8, part9, part10, part11, part12, part13, part14, part15, part16) { + var parts = A._setArrayType([part1, part2, part3, part4, part5, part6, part7, part8, part9, part10, part11, part12, part13, part14, part15, part16], type$.JSArray_nullable_String); + A._validateArgList("join", parts); + return this.joinAll$1(new A.WhereTypeIterable(parts, type$.WhereTypeIterable_String)); + }, + join$2(_, part1, part2) { + var _null = null; + return this.join$16(0, part1, part2, _null, _null, _null, _null, _null, _null, _null, _null, _null, _null, _null, _null, _null, _null); + }, + joinAll$1(parts) { + var t1, t2, t3, needsSeparator, isAbsoluteAndNotRootRelative, t4, t5, parsed, path, t6; + type$.Iterable_String._as(parts); + for (t1 = parts.$ti, t2 = t1._eval$1("bool(Iterable.E)")._as(new A.Context_joinAll_closure()), t3 = parts.get$iterator(0), t1 = new A.WhereIterator(t3, t2, t1._eval$1("WhereIterator")), t2 = this.style, needsSeparator = false, isAbsoluteAndNotRootRelative = false, t4 = ""; t1.moveNext$0();) { + t5 = t3.get$current(); + if (t2.isRootRelative$1(t5) && isAbsoluteAndNotRootRelative) { + parsed = A.ParsedPath_ParsedPath$parse(t5, t2); + path = t4.charCodeAt(0) == 0 ? t4 : t4; + t4 = B.JSString_methods.substring$2(path, 0, t2.rootLength$2$withDrive(path, true)); + parsed.root = t4; + if (t2.needsSeparator$1(t4)) + B.JSArray_methods.$indexSet(parsed.separators, 0, t2.get$separator()); + t4 = parsed.toString$0(0); + } else if (t2.rootLength$1(t5) > 0) { + isAbsoluteAndNotRootRelative = !t2.isRootRelative$1(t5); + t4 = t5; + } else { + t6 = t5.length; + if (t6 !== 0) { + if (0 >= t6) + return A.ioore(t5, 0); + t6 = t2.containsSeparator$1(t5[0]); + } else + t6 = false; + if (!t6) + if (needsSeparator) + t4 += t2.get$separator(); + t4 += t5; + } + needsSeparator = t2.needsSeparator$1(t5); + } + return t4.charCodeAt(0) == 0 ? t4 : t4; + }, + split$1(_, path) { + var parsed = A.ParsedPath_ParsedPath$parse(path, this.style), + t1 = parsed.parts, + t2 = A._arrayInstanceType(t1), + t3 = t2._eval$1("WhereIterable<1>"); + t1 = A.List_List$_of(new A.WhereIterable(t1, t2._eval$1("bool(1)")._as(new A.Context_split_closure()), t3), t3._eval$1("Iterable.E")); + parsed.set$parts(t1); + t1 = parsed.root; + if (t1 != null) + B.JSArray_methods.insert$2(parsed.parts, 0, t1); + return parsed.parts; + }, + normalize$1(path) { + var parsed; + if (!this._needsNormalization$1(path)) + return path; + parsed = A.ParsedPath_ParsedPath$parse(path, this.style); + parsed.normalize$0(); + return parsed.toString$0(0); + }, + _needsNormalization$1(path) { + var t2, i, start, previous, previousPrevious, codeUnit, t3, + t1 = this.style, + root = t1.rootLength$1(path); + if (root !== 0) { + if (t1 === $.$get$Style_windows()) + for (t2 = path.length, i = 0; i < root; ++i) { + if (!(i < t2)) + return A.ioore(path, i); + if (path.charCodeAt(i) === 47) + return true; + } + start = root; + previous = 47; + } else { + start = 0; + previous = null; + } + for (t2 = path.length, i = start, previousPrevious = null; i < t2; ++i, previousPrevious = previous, previous = codeUnit) { + if (!(i >= 0)) + return A.ioore(path, i); + codeUnit = path.charCodeAt(i); + if (t1.isSeparator$1(codeUnit)) { + if (t1 === $.$get$Style_windows() && codeUnit === 47) + return true; + if (previous != null && t1.isSeparator$1(previous)) + return true; + if (previous === 46) + t3 = previousPrevious == null || previousPrevious === 46 || t1.isSeparator$1(previousPrevious); + else + t3 = false; + if (t3) + return true; + } + } + if (previous == null) + return true; + if (t1.isSeparator$1(previous)) + return true; + if (previous === 46) + t1 = previousPrevious == null || t1.isSeparator$1(previousPrevious) || previousPrevious === 46; + else + t1 = false; + if (t1) + return true; + return false; + }, + relative$2$from(path, from) { + var fromParsed, pathParsed, t2, t3, t4, t5, t6, _this = this, + _s26_ = 'Unable to find a path to "', + t1 = from == null; + if (t1 && _this.style.rootLength$1(path) <= 0) + return _this.normalize$1(path); + if (t1) { + t1 = _this._context$_current; + from = t1 == null ? A.current() : t1; + } else + from = _this.absolute$1(from); + t1 = _this.style; + if (t1.rootLength$1(from) <= 0 && t1.rootLength$1(path) > 0) + return _this.normalize$1(path); + if (t1.rootLength$1(path) <= 0 || t1.isRootRelative$1(path)) + path = _this.absolute$1(path); + if (t1.rootLength$1(path) <= 0 && t1.rootLength$1(from) > 0) + throw A.wrapException(A.PathException$(_s26_ + path + '" from "' + from + '".')); + fromParsed = A.ParsedPath_ParsedPath$parse(from, t1); + fromParsed.normalize$0(); + pathParsed = A.ParsedPath_ParsedPath$parse(path, t1); + pathParsed.normalize$0(); + t2 = fromParsed.parts; + t3 = t2.length; + if (t3 !== 0) { + if (0 >= t3) + return A.ioore(t2, 0); + t2 = t2[0] === "."; + } else + t2 = false; + if (t2) + return pathParsed.toString$0(0); + t2 = fromParsed.root; + t3 = pathParsed.root; + if (t2 != t3) + t2 = t2 == null || t3 == null || !t1.pathsEqual$2(t2, t3); + else + t2 = false; + if (t2) + return pathParsed.toString$0(0); + for (;;) { + t2 = fromParsed.parts; + t3 = t2.length; + t4 = false; + if (t3 !== 0) { + t5 = pathParsed.parts; + t6 = t5.length; + if (t6 !== 0) { + if (0 >= t3) + return A.ioore(t2, 0); + t2 = t2[0]; + if (0 >= t6) + return A.ioore(t5, 0); + t5 = t1.pathsEqual$2(t2, t5[0]); + t2 = t5; + } else + t2 = t4; + } else + t2 = t4; + if (!t2) + break; + B.JSArray_methods.removeAt$1(fromParsed.parts, 0); + B.JSArray_methods.removeAt$1(fromParsed.separators, 1); + B.JSArray_methods.removeAt$1(pathParsed.parts, 0); + B.JSArray_methods.removeAt$1(pathParsed.separators, 1); + } + t2 = fromParsed.parts; + t3 = t2.length; + if (t3 !== 0) { + if (0 >= t3) + return A.ioore(t2, 0); + t2 = t2[0] === ".."; + } else + t2 = false; + if (t2) + throw A.wrapException(A.PathException$(_s26_ + path + '" from "' + from + '".')); + t2 = type$.String; + B.JSArray_methods.insertAll$2(pathParsed.parts, 0, A.List_List$filled(t3, "..", false, t2)); + B.JSArray_methods.$indexSet(pathParsed.separators, 0, ""); + B.JSArray_methods.insertAll$2(pathParsed.separators, 1, A.List_List$filled(fromParsed.parts.length, t1.get$separator(), false, t2)); + t1 = pathParsed.parts; + t2 = t1.length; + if (t2 === 0) + return "."; + if (t2 > 1 && B.JSArray_methods.get$last(t1) === ".") { + B.JSArray_methods.removeLast$0(pathParsed.parts); + t1 = pathParsed.separators; + if (0 >= t1.length) + return A.ioore(t1, -1); + t1.pop(); + if (0 >= t1.length) + return A.ioore(t1, -1); + t1.pop(); + B.JSArray_methods.add$1(t1, ""); + } + pathParsed.root = ""; + pathParsed.removeTrailingSeparators$0(); + return pathParsed.toString$0(0); + }, + relative$1(path) { + return this.relative$2$from(path, null); + }, + _isWithinOrEquals$2($parent, child) { + var relative, t1, parentIsAbsolute, childIsAbsolute, childIsRootRelative, parentIsRootRelative, result, exception, _this = this; + $parent = A._asString($parent); + child = A._asString(child); + t1 = _this.style; + parentIsAbsolute = t1.rootLength$1(A._asString($parent)) > 0; + childIsAbsolute = t1.rootLength$1(A._asString(child)) > 0; + if (parentIsAbsolute && !childIsAbsolute) { + child = _this.absolute$1(child); + if (t1.isRootRelative$1($parent)) + $parent = _this.absolute$1($parent); + } else if (childIsAbsolute && !parentIsAbsolute) { + $parent = _this.absolute$1($parent); + if (t1.isRootRelative$1(child)) + child = _this.absolute$1(child); + } else if (childIsAbsolute && parentIsAbsolute) { + childIsRootRelative = t1.isRootRelative$1(child); + parentIsRootRelative = t1.isRootRelative$1($parent); + if (childIsRootRelative && !parentIsRootRelative) + child = _this.absolute$1(child); + else if (parentIsRootRelative && !childIsRootRelative) + $parent = _this.absolute$1($parent); + } + result = _this._isWithinOrEqualsFast$2($parent, child); + if (result !== B._PathRelation_inconclusive) + return result; + relative = null; + try { + relative = _this.relative$2$from(child, $parent); + } catch (exception) { + if (A.unwrapException(exception) instanceof A.PathException) + return B._PathRelation_different; + else + throw exception; + } + if (t1.rootLength$1(A._asString(relative)) > 0) + return B._PathRelation_different; + if (J.$eq$(relative, ".")) + return B._PathRelation_equal; + if (J.$eq$(relative, "..")) + return B._PathRelation_different; + return J.get$length$asx(relative) >= 3 && J.startsWith$1$s(relative, "..") && t1.isSeparator$1(J.codeUnitAt$1$s(relative, 2)) ? B._PathRelation_different : B._PathRelation_within; + }, + _isWithinOrEqualsFast$2($parent, child) { + var t1, parentRootLength, childRootLength, t2, t3, i, childIndex, parentIndex, lastCodeUnit, lastParentSeparator, parentCodeUnit, childCodeUnit, parentIndex0, t4, direction, _this = this; + if ($parent === ".") + $parent = ""; + t1 = _this.style; + parentRootLength = t1.rootLength$1($parent); + childRootLength = t1.rootLength$1(child); + if (parentRootLength !== childRootLength) + return B._PathRelation_different; + for (t2 = $parent.length, t3 = child.length, i = 0; i < parentRootLength; ++i) { + if (!(i < t2)) + return A.ioore($parent, i); + if (!(i < t3)) + return A.ioore(child, i); + if (!t1.codeUnitsEqual$2($parent.charCodeAt(i), child.charCodeAt(i))) + return B._PathRelation_different; + } + childIndex = childRootLength; + parentIndex = parentRootLength; + lastCodeUnit = 47; + lastParentSeparator = null; + for (;;) { + if (!(parentIndex < t2 && childIndex < t3)) + break; + c$0: { + if (!(parentIndex >= 0 && parentIndex < t2)) + return A.ioore($parent, parentIndex); + parentCodeUnit = $parent.charCodeAt(parentIndex); + if (!(childIndex >= 0 && childIndex < t3)) + return A.ioore(child, childIndex); + childCodeUnit = child.charCodeAt(childIndex); + if (t1.codeUnitsEqual$2(parentCodeUnit, childCodeUnit)) { + if (t1.isSeparator$1(parentCodeUnit)) + lastParentSeparator = parentIndex; + ++parentIndex; + ++childIndex; + lastCodeUnit = parentCodeUnit; + break c$0; + } + if (t1.isSeparator$1(parentCodeUnit) && t1.isSeparator$1(lastCodeUnit)) { + parentIndex0 = parentIndex + 1; + lastParentSeparator = parentIndex; + parentIndex = parentIndex0; + break c$0; + } else if (t1.isSeparator$1(childCodeUnit) && t1.isSeparator$1(lastCodeUnit)) { + ++childIndex; + break c$0; + } + if (parentCodeUnit === 46 && t1.isSeparator$1(lastCodeUnit)) { + ++parentIndex; + if (parentIndex === t2) + break; + if (!(parentIndex < t2)) + return A.ioore($parent, parentIndex); + parentCodeUnit = $parent.charCodeAt(parentIndex); + if (t1.isSeparator$1(parentCodeUnit)) { + parentIndex0 = parentIndex + 1; + lastParentSeparator = parentIndex; + parentIndex = parentIndex0; + break c$0; + } + if (parentCodeUnit === 46) { + ++parentIndex; + if (parentIndex !== t2) { + if (!(parentIndex < t2)) + return A.ioore($parent, parentIndex); + t4 = t1.isSeparator$1($parent.charCodeAt(parentIndex)); + } else + t4 = true; + if (t4) + return B._PathRelation_inconclusive; + } + } + if (childCodeUnit === 46 && t1.isSeparator$1(lastCodeUnit)) { + ++childIndex; + if (childIndex === t3) + break; + if (!(childIndex < t3)) + return A.ioore(child, childIndex); + childCodeUnit = child.charCodeAt(childIndex); + if (t1.isSeparator$1(childCodeUnit)) { + ++childIndex; + break c$0; + } + if (childCodeUnit === 46) { + ++childIndex; + if (childIndex !== t3) { + if (!(childIndex < t3)) + return A.ioore(child, childIndex); + t2 = t1.isSeparator$1(child.charCodeAt(childIndex)); + t1 = t2; + } else + t1 = true; + if (t1) + return B._PathRelation_inconclusive; + } + } + if (_this._pathDirection$2(child, childIndex) !== B._PathDirection_Wme) + return B._PathRelation_inconclusive; + if (_this._pathDirection$2($parent, parentIndex) !== B._PathDirection_Wme) + return B._PathRelation_inconclusive; + return B._PathRelation_different; + } + } + if (childIndex === t3) { + if (parentIndex !== t2) { + if (!(parentIndex >= 0 && parentIndex < t2)) + return A.ioore($parent, parentIndex); + t1 = t1.isSeparator$1($parent.charCodeAt(parentIndex)); + } else + t1 = true; + if (t1) + lastParentSeparator = parentIndex; + else if (lastParentSeparator == null) + lastParentSeparator = Math.max(0, parentRootLength - 1); + direction = _this._pathDirection$2($parent, lastParentSeparator); + if (direction === B._PathDirection_dMN) + return B._PathRelation_equal; + return direction === B._PathDirection_vgO ? B._PathRelation_inconclusive : B._PathRelation_different; + } + direction = _this._pathDirection$2(child, childIndex); + if (direction === B._PathDirection_dMN) + return B._PathRelation_equal; + if (direction === B._PathDirection_vgO) + return B._PathRelation_inconclusive; + if (!(childIndex >= 0 && childIndex < t3)) + return A.ioore(child, childIndex); + return t1.isSeparator$1(child.charCodeAt(childIndex)) || t1.isSeparator$1(lastCodeUnit) ? B._PathRelation_within : B._PathRelation_different; + }, + _pathDirection$2(path, index) { + var t1, t2, i, depth, reachedRoot, t3, i0, t4; + for (t1 = path.length, t2 = this.style, i = index, depth = 0, reachedRoot = false; i < t1;) { + for (;;) { + if (i < t1) { + if (!(i >= 0)) + return A.ioore(path, i); + t3 = t2.isSeparator$1(path.charCodeAt(i)); + } else + t3 = false; + if (!t3) + break; + ++i; + } + if (i === t1) + break; + i0 = i; + for (;;) { + if (i0 < t1) { + if (!(i0 >= 0)) + return A.ioore(path, i0); + t3 = !t2.isSeparator$1(path.charCodeAt(i0)); + } else + t3 = false; + if (!t3) + break; + ++i0; + } + t3 = i0 - i; + if (t3 === 1) { + if (!(i >= 0 && i < t1)) + return A.ioore(path, i); + t4 = path.charCodeAt(i) === 46; + } else + t4 = false; + if (!t4) { + t4 = false; + if (t3 === 2) { + if (!(i >= 0 && i < t1)) + return A.ioore(path, i); + if (path.charCodeAt(i) === 46) { + t3 = i + 1; + if (!(t3 < t1)) + return A.ioore(path, t3); + t3 = path.charCodeAt(t3) === 46; + } else + t3 = t4; + } else + t3 = t4; + if (t3) { + --depth; + if (depth < 0) + break; + if (depth === 0) + reachedRoot = true; + } else + ++depth; + } + if (i0 === t1) + break; + i = i0 + 1; + } + if (depth < 0) + return B._PathDirection_vgO; + if (depth === 0) + return B._PathDirection_dMN; + if (reachedRoot) + return B._PathDirection_6kc; + return B._PathDirection_Wme; + }, + toUri$1(path) { + var t2, + t1 = this.style; + if (t1.rootLength$1(path) <= 0) + return t1.relativePathToUri$1(path); + else { + t2 = this._context$_current; + return t1.absolutePathToUri$1(this.join$2(0, t2 == null ? A.current() : t2, path)); + } + }, + prettyUri$1(uri) { + var path, rel, _this = this, + typedUri = A._parseUri(uri); + if (typedUri.get$scheme() === "file" && _this.style === $.$get$Style_url()) + return typedUri.toString$0(0); + else if (typedUri.get$scheme() !== "file" && typedUri.get$scheme() !== "" && _this.style !== $.$get$Style_url()) + return typedUri.toString$0(0); + path = _this.normalize$1(_this.style.pathFromUri$1(A._parseUri(typedUri))); + rel = _this.relative$1(path); + return _this.split$1(0, rel).length > _this.split$1(0, path).length ? path : rel; + } + }; + A.Context_joinAll_closure.prototype = { + call$1(part) { + return A._asString(part) !== ""; + }, + $signature: 3 + }; + A.Context_split_closure.prototype = { + call$1(part) { + return A._asString(part).length !== 0; + }, + $signature: 3 + }; + A._validateArgList_closure.prototype = { + call$1(arg) { + A._asStringQ(arg); + return arg == null ? "null" : '"' + arg + '"'; + }, + $signature: 59 + }; + A._PathDirection.prototype = { + toString$0(_) { + return this.name; + } + }; + A._PathRelation.prototype = { + toString$0(_) { + return this.name; + } + }; + A.InternalStyle.prototype = { + getRoot$1(path) { + var t1, + $length = this.rootLength$1(path); + if ($length > 0) + return B.JSString_methods.substring$2(path, 0, $length); + if (this.isRootRelative$1(path)) { + if (0 >= path.length) + return A.ioore(path, 0); + t1 = path[0]; + } else + t1 = null; + return t1; + }, + relativePathToUri$1(path) { + var segments, t2, _null = null, + t1 = path.length; + if (t1 === 0) + return A._Uri__Uri(_null, _null, _null, _null); + segments = A.Context_Context(_null, this).split$1(0, path); + t2 = t1 - 1; + if (!(t2 >= 0)) + return A.ioore(path, t2); + if (this.isSeparator$1(path.charCodeAt(t2))) + B.JSArray_methods.add$1(segments, ""); + return A._Uri__Uri(_null, _null, segments, _null); + }, + codeUnitsEqual$2(codeUnit1, codeUnit2) { + return codeUnit1 === codeUnit2; + }, + pathsEqual$2(path1, path2) { + return path1 === path2; + } + }; + A.ParsedPath.prototype = { + get$hasTrailingSeparator() { + var t1 = this.parts; + if (t1.length !== 0) + t1 = B.JSArray_methods.get$last(t1) === "" || B.JSArray_methods.get$last(this.separators) !== ""; + else + t1 = false; + return t1; + }, + removeTrailingSeparators$0() { + var t1, t2, _this = this; + for (;;) { + t1 = _this.parts; + if (!(t1.length !== 0 && B.JSArray_methods.get$last(t1) === "")) + break; + B.JSArray_methods.removeLast$0(_this.parts); + t1 = _this.separators; + if (0 >= t1.length) + return A.ioore(t1, -1); + t1.pop(); + } + t1 = _this.separators; + t2 = t1.length; + if (t2 !== 0) + B.JSArray_methods.$indexSet(t1, t2 - 1, ""); + }, + normalize$0() { + var t1, t2, leadingDoubles, _i, part, t3, _this = this, + newParts = A._setArrayType([], type$.JSArray_String); + for (t1 = _this.parts, t2 = t1.length, leadingDoubles = 0, _i = 0; _i < t1.length; t1.length === t2 || (0, A.throwConcurrentModificationError)(t1), ++_i) { + part = t1[_i]; + if (!(part === "." || part === "")) + if (part === "..") { + t3 = newParts.length; + if (t3 !== 0) { + if (0 >= t3) + return A.ioore(newParts, -1); + newParts.pop(); + } else + ++leadingDoubles; + } else + B.JSArray_methods.add$1(newParts, part); + } + if (_this.root == null) + B.JSArray_methods.insertAll$2(newParts, 0, A.List_List$filled(leadingDoubles, "..", false, type$.String)); + if (newParts.length === 0 && _this.root == null) + B.JSArray_methods.add$1(newParts, "."); + _this.parts = newParts; + t1 = _this.style; + _this.separators = A.List_List$filled(newParts.length + 1, t1.get$separator(), true, type$.String); + t2 = _this.root; + if (t2 == null || newParts.length === 0 || !t1.needsSeparator$1(t2)) + B.JSArray_methods.$indexSet(_this.separators, 0, ""); + t2 = _this.root; + if (t2 != null && t1 === $.$get$Style_windows()) + _this.root = A.stringReplaceAllUnchecked(t2, "/", "\\"); + _this.removeTrailingSeparators$0(); + }, + toString$0(_) { + var t2, t3, t4, t5, i, + t1 = this.root; + t1 = t1 != null ? t1 : ""; + for (t2 = this.parts, t3 = t2.length, t4 = this.separators, t5 = t4.length, i = 0; i < t3; ++i) { + if (!(i < t5)) + return A.ioore(t4, i); + t1 = t1 + t4[i] + t2[i]; + } + t1 += B.JSArray_methods.get$last(t4); + return t1.charCodeAt(0) == 0 ? t1 : t1; + }, + set$parts(parts) { + this.parts = type$.List_String._as(parts); + } + }; + A.PathException.prototype = { + toString$0(_) { + return "PathException: " + this.message; + }, + $isException: 1 + }; + A.Style.prototype = { + toString$0(_) { + return this.get$name(); + } + }; + A.PosixStyle.prototype = { + containsSeparator$1(path) { + return B.JSString_methods.contains$1(path, "/"); + }, + isSeparator$1(codeUnit) { + return codeUnit === 47; + }, + needsSeparator$1(path) { + var t2, + t1 = path.length; + if (t1 !== 0) { + t2 = t1 - 1; + if (!(t2 >= 0)) + return A.ioore(path, t2); + t2 = path.charCodeAt(t2) !== 47; + t1 = t2; + } else + t1 = false; + return t1; + }, + rootLength$2$withDrive(path, withDrive) { + var t1 = path.length; + if (t1 !== 0) { + if (0 >= t1) + return A.ioore(path, 0); + t1 = path.charCodeAt(0) === 47; + } else + t1 = false; + if (t1) + return 1; + return 0; + }, + rootLength$1(path) { + return this.rootLength$2$withDrive(path, false); + }, + isRootRelative$1(path) { + return false; + }, + pathFromUri$1(uri) { + var t1; + if (uri.get$scheme() === "" || uri.get$scheme() === "file") { + t1 = uri.get$path(); + return A._Uri__uriDecode(t1, 0, t1.length, B.C_Utf8Codec, false); + } + throw A.wrapException(A.ArgumentError$("Uri " + uri.toString$0(0) + " must have scheme 'file:'.", null)); + }, + absolutePathToUri$1(path) { + var parsed = A.ParsedPath_ParsedPath$parse(path, this), + t1 = parsed.parts; + if (t1.length === 0) + B.JSArray_methods.addAll$1(t1, A._setArrayType(["", ""], type$.JSArray_String)); + else if (parsed.get$hasTrailingSeparator()) + B.JSArray_methods.add$1(parsed.parts, ""); + return A._Uri__Uri(null, null, parsed.parts, "file"); + }, + get$name() { + return "posix"; + }, + get$separator() { + return "/"; + } + }; + A.UrlStyle.prototype = { + containsSeparator$1(path) { + return B.JSString_methods.contains$1(path, "/"); + }, + isSeparator$1(codeUnit) { + return codeUnit === 47; + }, + needsSeparator$1(path) { + var t2, + t1 = path.length; + if (t1 === 0) + return false; + t2 = t1 - 1; + if (!(t2 >= 0)) + return A.ioore(path, t2); + if (path.charCodeAt(t2) !== 47) + return true; + return B.JSString_methods.endsWith$1(path, "://") && this.rootLength$1(path) === t1; + }, + rootLength$2$withDrive(path, withDrive) { + var i, codeUnit, index, + t1 = path.length; + if (t1 === 0) + return 0; + if (0 >= t1) + return A.ioore(path, 0); + if (path.charCodeAt(0) === 47) + return 1; + for (i = 0; i < t1; ++i) { + codeUnit = path.charCodeAt(i); + if (codeUnit === 47) + return 0; + if (codeUnit === 58) { + if (i === 0) + return 0; + index = B.JSString_methods.indexOf$2(path, "/", B.JSString_methods.startsWith$2(path, "//", i + 1) ? i + 3 : i); + if (index <= 0) + return t1; + if (!withDrive || t1 < index + 3) + return index; + if (!B.JSString_methods.startsWith$1(path, "file://")) + return index; + t1 = A.driveLetterEnd(path, index + 1); + return t1 == null ? index : t1; + } + } + return 0; + }, + rootLength$1(path) { + return this.rootLength$2$withDrive(path, false); + }, + isRootRelative$1(path) { + var t1 = path.length; + if (t1 !== 0) { + if (0 >= t1) + return A.ioore(path, 0); + t1 = path.charCodeAt(0) === 47; + } else + t1 = false; + return t1; + }, + pathFromUri$1(uri) { + return uri.toString$0(0); + }, + relativePathToUri$1(path) { + return A.Uri_parse(path); + }, + absolutePathToUri$1(path) { + return A.Uri_parse(path); + }, + get$name() { + return "url"; + }, + get$separator() { + return "/"; + } + }; + A.WindowsStyle.prototype = { + containsSeparator$1(path) { + return B.JSString_methods.contains$1(path, "/"); + }, + isSeparator$1(codeUnit) { + return codeUnit === 47 || codeUnit === 92; + }, + needsSeparator$1(path) { + var t2, + t1 = path.length; + if (t1 === 0) + return false; + t2 = t1 - 1; + if (!(t2 >= 0)) + return A.ioore(path, t2); + t2 = path.charCodeAt(t2); + return !(t2 === 47 || t2 === 92); + }, + rootLength$2$withDrive(path, withDrive) { + var t2, index, + t1 = path.length; + if (t1 === 0) + return 0; + if (0 >= t1) + return A.ioore(path, 0); + if (path.charCodeAt(0) === 47) + return 1; + if (path.charCodeAt(0) === 92) { + if (t1 >= 2) { + if (1 >= t1) + return A.ioore(path, 1); + t2 = path.charCodeAt(1) !== 92; + } else + t2 = true; + if (t2) + return 1; + index = B.JSString_methods.indexOf$2(path, "\\", 2); + if (index > 0) { + index = B.JSString_methods.indexOf$2(path, "\\", index + 1); + if (index > 0) + return index; + } + return t1; + } + if (t1 < 3) + return 0; + if (!A.isAlphabetic(path.charCodeAt(0))) + return 0; + if (path.charCodeAt(1) !== 58) + return 0; + t1 = path.charCodeAt(2); + if (!(t1 === 47 || t1 === 92)) + return 0; + return 3; + }, + rootLength$1(path) { + return this.rootLength$2$withDrive(path, false); + }, + isRootRelative$1(path) { + return this.rootLength$1(path) === 1; + }, + pathFromUri$1(uri) { + var path, t1; + if (uri.get$scheme() !== "" && uri.get$scheme() !== "file") + throw A.wrapException(A.ArgumentError$("Uri " + uri.toString$0(0) + " must have scheme 'file:'.", null)); + path = uri.get$path(); + if (uri.get$host() === "") { + if (path.length >= 3 && B.JSString_methods.startsWith$1(path, "/") && A.driveLetterEnd(path, 1) != null) + path = B.JSString_methods.replaceFirst$2(path, "/", ""); + } else + path = "\\\\" + uri.get$host() + path; + t1 = A.stringReplaceAllUnchecked(path, "/", "\\"); + return A._Uri__uriDecode(t1, 0, t1.length, B.C_Utf8Codec, false); + }, + absolutePathToUri$1(path) { + var rootParts, t2, + parsed = A.ParsedPath_ParsedPath$parse(path, this), + t1 = parsed.root; + t1.toString; + if (B.JSString_methods.startsWith$1(t1, "\\\\")) { + rootParts = new A.WhereIterable(A._setArrayType(t1.split("\\"), type$.JSArray_String), type$.bool_Function_String._as(new A.WindowsStyle_absolutePathToUri_closure()), type$.WhereIterable_String); + B.JSArray_methods.insert$2(parsed.parts, 0, rootParts.get$last(0)); + if (parsed.get$hasTrailingSeparator()) + B.JSArray_methods.add$1(parsed.parts, ""); + return A._Uri__Uri(rootParts.get$first(0), null, parsed.parts, "file"); + } else { + if (parsed.parts.length === 0 || parsed.get$hasTrailingSeparator()) + B.JSArray_methods.add$1(parsed.parts, ""); + t1 = parsed.parts; + t2 = parsed.root; + t2.toString; + t2 = A.stringReplaceAllUnchecked(t2, "/", ""); + B.JSArray_methods.insert$2(t1, 0, A.stringReplaceAllUnchecked(t2, "\\", "")); + return A._Uri__Uri(null, null, parsed.parts, "file"); + } + }, + codeUnitsEqual$2(codeUnit1, codeUnit2) { + var upperCase1; + if (codeUnit1 === codeUnit2) + return true; + if (codeUnit1 === 47) + return codeUnit2 === 92; + if (codeUnit1 === 92) + return codeUnit2 === 47; + if ((codeUnit1 ^ codeUnit2) !== 32) + return false; + upperCase1 = codeUnit1 | 32; + return upperCase1 >= 97 && upperCase1 <= 122; + }, + pathsEqual$2(path1, path2) { + var t1, t2, i; + if (path1 === path2) + return true; + t1 = path1.length; + t2 = path2.length; + if (t1 !== t2) + return false; + for (i = 0; i < t1; ++i) { + if (!(i < t2)) + return A.ioore(path2, i); + if (!this.codeUnitsEqual$2(path1.charCodeAt(i), path2.charCodeAt(i))) + return false; + } + return true; + }, + get$name() { + return "windows"; + }, + get$separator() { + return "\\"; + } + }; + A.WindowsStyle_absolutePathToUri_closure.prototype = { + call$1(part) { + return A._asString(part) !== ""; + }, + $signature: 3 + }; + A.SqliteException.prototype = { + toString$0(_) { + var t2, t3, _this = this, + t1 = _this.operation; + t1 = t1 == null ? "" : "while " + t1 + ", "; + t1 = "SqliteException(" + _this.extendedResultCode + "): " + t1 + _this.message; + t2 = _this.explanation; + if (t2 != null) + t1 = t1 + ", " + t2; + t2 = _this.causingStatement; + if (t2 != null) { + t3 = _this.offset; + t3 = t3 != null ? " (at position " + A.S(t3) + "): " : ": "; + t2 = t1 + "\n Causing statement" + t3 + t2; + t1 = _this.parametersToStatement; + if (t1 != null) { + t3 = A._arrayInstanceType(t1); + t3 = t2 + (", parameters: " + new A.MappedListIterable(t1, t3._eval$1("String(1)")._as(new A.SqliteException_toString_closure()), t3._eval$1("MappedListIterable<1,String>")).join$1(0, ", ")); + t1 = t3; + } else + t1 = t2; + } + return t1.charCodeAt(0) == 0 ? t1 : t1; + }, + $isException: 1 + }; + A.SqliteException_toString_closure.prototype = { + call$1(e) { + if (type$.Uint8List._is(e)) + return "blob (" + e.length + " bytes)"; + else + return J.toString$0$(e); + }, + $signature: 60 + }; + A.AllowedArgumentCount.prototype = {}; + A.RawSqliteBindings.prototype = {}; + A.SqliteResult.prototype = {}; + A.RawSqliteDatabase.prototype = {}; + A.RawStatementCompiler.prototype = {}; + A.RawSqliteStatement.prototype = {}; + A.RawSqliteContext.prototype = {}; + A.RawSqliteValue.prototype = {}; + A.FinalizableDatabase.prototype = { + dispose$0() { + var t1, t2, _i, stmt, t3, code, exception, _this = this; + for (t1 = _this._statements, t2 = t1.length, _i = 0; _i < t1.length; t1.length === t2 || (0, A.throwConcurrentModificationError)(t1), ++_i) { + stmt = t1[_i]; + if (!stmt._statement$_closed) { + stmt._statement$_closed = true; + if (!stmt._inResetState) { + t3 = stmt.statement; + A._asInt(t3.bindings.sqlite3.sqlite3_reset(t3.stmt)); + stmt._inResetState = true; + } + t3 = stmt.statement; + t3.deallocateArguments$0(); + A._asInt(t3.bindings.sqlite3.sqlite3_finalize(t3.stmt)); + } + } + t1 = _this.dartCleanup; + t1 = A._setArrayType(t1.slice(0), A._arrayInstanceType(t1)); + t2 = t1.length; + _i = 0; + for (; _i < t1.length; t1.length === t2 || (0, A.throwConcurrentModificationError)(t1), ++_i) + t1[_i].call$0(); + t1 = _this.database; + code = A._asInt(t1.bindings.sqlite3.sqlite3_close_v2(t1.db)); + exception = code !== 0 ? A.createExceptionRaw(_this.bindings, t1, code, "closing database", null, null) : null; + if (exception != null) + throw A.wrapException(exception); + } + }; + A.DatabaseImplementation.prototype = { + get$userVersion() { + var result, version, t1, + stmt = this.prepare$1("PRAGMA user_version;"); + try { + result = stmt.selectWith$1(new A.IndexedParameters(B.List_empty3)); + t1 = J.get$first$ax(result)._data; + if (0 >= t1.length) + return A.ioore(t1, 0); + version = A._asInt(t1[0]); + return version; + } finally { + stmt.dispose$0(); + } + }, + createFunction$5$argumentCount$deterministic$directOnly$function$functionName(argumentCount, deterministic, directOnly, $function, functionName) { + var t1, functionNameBytes, t2, flags, t3, t4, ptr, result, _null = null; + type$.nullable_Object_Function_SqliteArguments._as($function); + t1 = this.database; + functionNameBytes = B.C_Utf8Encoder.convert$1(functionName); + if (functionNameBytes.length > 255) + A.throwExpression(A.ArgumentError$value(functionName, "functionName", "Must not exceed 255 bytes when utf-8 encoded")); + t2 = new Uint8Array(A._ensureNativeList(functionNameBytes)); + flags = directOnly ? 526337 : 2049; + t3 = type$.nullable_void_Function_2_RawSqliteContext_and_List_RawSqliteValue._as(new A.DatabaseImplementation_createFunction_closure($function)); + t4 = t1.bindings; + ptr = t4.allocateBytes$2$additionalLength(t2, 1); + t2 = t4.sqlite3; + result = A.callMethod(t2, "dart_sqlite3_create_scalar_function", [t1.db, ptr, argumentCount.allowedArgs, flags, t4.callbacks.register$1(new A.RegisteredFunctionSet(t3, _null, _null))], type$.int); + result = result; + t2.dart_sqlite3_free(ptr); + if (result !== 0) + A.throwException(this, result, _null, _null, _null); + }, + createFunction$4$argumentCount$deterministic$function$functionName(argumentCount, deterministic, $function, functionName) { + return this.createFunction$5$argumentCount$deterministic$directOnly$function$functionName(argumentCount, deterministic, true, $function, functionName); + }, + dispose$0() { + var t1, t2, t3, _this0, t4, _this = this; + if (_this._isClosed) + return; + $.$get$disposeFinalizer().detach$1(_this); + _this._isClosed = true; + t1 = _this.database; + t2 = t1.bindings; + t3 = t2.callbacks; + t3.set$installedUpdateHook(null); + _this0 = t1.db; + t1 = t2.sqlite3; + t2 = type$.nullable_JavaScriptFunction; + t4 = t2._as(t1.dart_sqlite3_updates); + if (t4 != null) + t4.call(null, _this0, -1); + t3.set$installedCommitHook(null); + t4 = t2._as(t1.dart_sqlite3_commits); + if (t4 != null) + t4.call(null, _this0, -1); + t3.set$installedRollbackHook(null); + t1 = t2._as(t1.dart_sqlite3_rollbacks); + if (t1 != null) + t1.call(null, _this0, -1); + _this.finalizable.dispose$0(); + }, + execute$1(sql) { + var stmt, t1, t2, _this = this, + parameters = B.List_empty1; + if (J.get$length$asx(parameters) === 0) { + if (_this._isClosed) + A.throwExpression(A.StateError$("This database has already been closed")); + t1 = _this.database; + t2 = t1.bindings; + stmt = t2.allocateBytes$2$additionalLength(B.C_Utf8Encoder.convert$1(sql), 1); + t2 = t2.sqlite3; + t1 = A.callMethod(t2, "sqlite3_exec", [t1.db, stmt, 0, 0, 0], type$.int); + t2.dart_sqlite3_free(stmt); + if (t1 !== 0) + A.throwException(_this, t1, "executing", sql, parameters); + } else { + stmt = _this.prepare$2$checkNoTail(sql, true); + try { + stmt.executeWith$1(new A.IndexedParameters(type$.List_nullable_Object._as(parameters))); + } finally { + stmt.dispose$0(); + } + } + }, + _prepareInternal$5$checkNoTail$maxStatements$persistent$vtab(sql, checkNoTail, maxStatements, persistent, vtab) { + var bytes, t1, t2, ptr, t3, t4, compiler, createdStatements, freeIntermediateResults, offset, result, t5, $length, t6, endOffset, stmt, _i, _this = this; + if (_this._isClosed) + A.throwExpression(A.StateError$("This database has already been closed")); + bytes = B.C_Utf8Encoder.convert$1(sql); + t1 = _this.database; + type$.List_int._as(bytes); + t2 = t1.bindings; + ptr = t2.allocateBytes$1(bytes); + t3 = t2.sqlite3; + t4 = A._asInt(t3.dart_sqlite3_malloc(4)); + t3 = A._asInt(t3.dart_sqlite3_malloc(4)); + compiler = new A.WasmStatementCompiler(t1, ptr, t4, t3); + createdStatements = A._setArrayType([], type$.JSArray_StatementImplementation); + freeIntermediateResults = new A.DatabaseImplementation__prepareInternal_freeIntermediateResults(compiler, createdStatements); + for (t1 = bytes.length, t2 = t2.memory, t4 = type$.NativeArrayBuffer, offset = 0; offset < t1; offset = endOffset) { + result = compiler.sqlite3_prepare$3(offset, t1 - offset, 0); + t5 = result.resultCode; + if (t5 !== 0) { + freeIntermediateResults.call$0(); + A.throwException(_this, t5, "preparing statement", sql, null); + } + t5 = t4._as(t2.buffer); + $length = B.JSInt_methods._tdivFast$1(t5.byteLength, 4); + t5 = new Int32Array(t5, 0, $length); + t6 = B.JSInt_methods._shrOtherPositive$1(t3, 2); + if (!(t6 < t5.length)) + return A.ioore(t5, t6); + endOffset = t5[t6] - ptr; + stmt = result.result; + if (stmt != null) + B.JSArray_methods.add$1(createdStatements, new A.StatementImplementation(stmt, _this, new A.FinalizableStatement(stmt), new A._Utf8Decoder(false)._convertGeneral$4(bytes, offset, endOffset, true))); + if (createdStatements.length === maxStatements) { + offset = endOffset; + break; + } + } + if (checkNoTail) + while (offset < t1) { + result = compiler.sqlite3_prepare$3(offset, t1 - offset, 0); + t5 = t4._as(t2.buffer); + $length = B.JSInt_methods._tdivFast$1(t5.byteLength, 4); + t5 = new Int32Array(t5, 0, $length); + t6 = B.JSInt_methods._shrOtherPositive$1(t3, 2); + if (!(t6 < t5.length)) + return A.ioore(t5, t6); + offset = t5[t6] - ptr; + stmt = result.result; + if (stmt != null) { + B.JSArray_methods.add$1(createdStatements, new A.StatementImplementation(stmt, _this, new A.FinalizableStatement(stmt), "")); + freeIntermediateResults.call$0(); + throw A.wrapException(A.ArgumentError$value(sql, "sql", "Had an unexpected trailing statement.")); + } else if (result.resultCode !== 0) { + freeIntermediateResults.call$0(); + throw A.wrapException(A.ArgumentError$value(sql, "sql", "Has trailing data after the first sql statement:")); + } + } + compiler.close$0(); + for (t1 = createdStatements.length, t2 = _this.finalizable._statements, _i = 0; _i < createdStatements.length; createdStatements.length === t1 || (0, A.throwConcurrentModificationError)(createdStatements), ++_i) + B.JSArray_methods.add$1(t2, createdStatements[_i].finalizable); + return createdStatements; + }, + prepare$2$checkNoTail(sql, checkNoTail) { + var stmts = this._prepareInternal$5$checkNoTail$maxStatements$persistent$vtab(sql, checkNoTail, 1, false, true); + if (stmts.length === 0) + throw A.wrapException(A.ArgumentError$value(sql, "sql", "Must contain an SQL statement.")); + return B.JSArray_methods.get$first(stmts); + }, + prepare$1(sql) { + return this.prepare$2$checkNoTail(sql, false); + }, + $isCommonDatabase: 1 + }; + A.DatabaseImplementation_createFunction_closure.prototype = { + call$2(context, args) { + A._extension_0_runWithArgsAndSetResult(context, this.$function, type$.List_RawSqliteValue._as(args)); + }, + $signature: 61 + }; + A.DatabaseImplementation__prepareInternal_freeIntermediateResults.prototype = { + call$0() { + var t1, t2, _i, stmt, t3, t4; + this.compiler.close$0(); + for (t1 = this.createdStatements, t2 = t1.length, _i = 0; _i < t1.length; t1.length === t2 || (0, A.throwConcurrentModificationError)(t1), ++_i) { + stmt = t1[_i]; + t3 = stmt.finalizable; + if (!t3._statement$_closed) { + t4 = $.$get$disposeFinalizer()._registry; + if (t4 != null) + t4.unregister(stmt); + if (!t3._statement$_closed) { + t3._statement$_closed = true; + if (!t3._inResetState) { + t4 = t3.statement; + A._asInt(t4.bindings.sqlite3.sqlite3_reset(t4.stmt)); + t3._inResetState = true; + } + t4 = t3.statement; + t4.deallocateArguments$0(); + A._asInt(t4.bindings.sqlite3.sqlite3_finalize(t4.stmt)); + } + t4 = stmt.database; + if (!t4._isClosed) + B.JSArray_methods.remove$1(t4.finalizable._statements, t3); + } + } + }, + $signature: 0 + }; + A.ValueList.prototype = { + get$length(_) { + return this.rawValues.length; + }, + $index(_, index) { + var t2, t3, + t1 = this.rawValues; + A.RangeError_checkValidIndex(index, this, "index", t1.length); + t2 = this._cachedCopies; + if (!(index >= 0 && index < t2.length)) + return A.ioore(t2, index); + t3 = t2[index]; + if (t3 == null) { + t1 = A.ReadDartValue_read(t1.$index(0, index)); + B.JSArray_methods.$indexSet(t2, index, t1); + } else + t1 = t3; + return t1; + }, + $indexSet(_, index, value) { + throw A.wrapException(A.ArgumentError$("The argument list is unmodifiable", null)); + } + }; + A.FinalizablePart.prototype = {}; + A.disposeFinalizer_closure.prototype = { + call$1(element) { + type$.FinalizablePart._as(element).dispose$0(); + }, + $signature: 62 + }; + A.Sqlite3Implementation.prototype = { + open$2$vfs(filename, vfs) { + var namePtr, t3, outDb, result, t4, t5, dbPtr, exception, _null = null, + t1 = this.bindings, + t2 = t1.bindings, + rc = t2.sqlite3_initialize$0(); + if (rc !== 0) + A.throwExpression(A.SqliteException$(rc, "Error returned by sqlite3_initialize", _null, _null, _null, _null, _null)); + switch (2) { + case 2: + break; + } + namePtr = t2.allocateBytes$2$additionalLength(B.C_Utf8Encoder.convert$1(filename), 1); + t3 = t2.sqlite3; + outDb = A._asInt(t3.dart_sqlite3_malloc(4)); + result = A._asInt(t3.sqlite3_open_v2(namePtr, outDb, 6, 0)); + t4 = A.NativeInt32List_NativeInt32List$view(type$.NativeArrayBuffer._as(t2.memory.buffer), 0, _null); + t5 = B.JSInt_methods._shrOtherPositive$1(outDb, 2); + if (!(t5 < t4.length)) + return A.ioore(t4, t5); + dbPtr = t4[t5]; + t3.dart_sqlite3_free(namePtr); + t3.dart_sqlite3_free(0); + t2 = new A.WasmDatabase0(t2, dbPtr); + if (result !== 0) { + exception = A.createExceptionRaw(t1, t2, result, "opening the database", _null, _null); + A._asInt(t3.sqlite3_close_v2(dbPtr)); + throw A.wrapException(exception); + } + A._asInt(t3.sqlite3_extended_result_codes(dbPtr, 1)); + t3 = new A.FinalizableDatabase(t1, t2, A._setArrayType([], type$.JSArray_FinalizableStatement), A._setArrayType([], type$.JSArray_of_void_Function)); + t2 = new A.DatabaseImplementation(t1, t2, t3); + t1 = $.$get$disposeFinalizer(); + t1.$ti._precomputed1._as(t3); + t1 = t1._registry; + if (t1 != null) + t1.register(t2, t3, t2); + return t2; + }, + open$1(filename) { + return this.open$2$vfs(filename, null); + }, + $isCommonSqlite3: 1 + }; + A.FinalizableStatement.prototype = { + dispose$0() { + var t1, _this = this; + if (!_this._statement$_closed) { + _this._statement$_closed = true; + _this._reset$0(); + t1 = _this.statement; + t1.deallocateArguments$0(); + A._asInt(t1.bindings.sqlite3.sqlite3_finalize(t1.stmt)); + } + }, + _reset$0() { + if (!this._inResetState) { + var t1 = this.statement; + A._asInt(t1.bindings.sqlite3.sqlite3_reset(t1.stmt)); + this._inResetState = true; + } + } + }; + A.StatementImplementation.prototype = { + get$_columnNames() { + var t3, columnCount, t4, t5, t6, i, namePtr, t7, t8, + t1 = this.statement, + t2 = t1.bindings; + t1 = t1.stmt; + t3 = t2.sqlite3; + columnCount = A._asInt(t3.sqlite3_column_count(t1)); + t4 = A._setArrayType([], type$.JSArray_String); + for (t5 = type$.List_int, t2 = t2.memory, t6 = type$.NativeArrayBuffer, i = 0; i < columnCount; ++i) { + namePtr = A._asInt(t3.sqlite3_column_name(t1, i)); + t7 = t6._as(t2.buffer); + t8 = A.WrappedMemory_strlen(t2, namePtr); + t7 = t5._as(new Uint8Array(t7, namePtr, t8)); + t4.push(new A._Utf8Decoder(false)._convertGeneral$4(t7, 0, null, true)); + } + return t4; + }, + get$_tableNames() { + return null; + }, + _reset$0() { + var t1 = this.finalizable; + t1._reset$0(); + t1.statement.deallocateArguments$0(); + }, + _execute$0() { + var result, _this = this, + t1 = _this.finalizable._inResetState = false, + t2 = _this.statement, + t3 = t2.stmt; + t2 = t2.bindings.sqlite3; + do + result = A._asInt(t2.sqlite3_step(t3)); + while (result === 100); + if (result !== 0 ? result !== 101 : t1) + A.throwException(_this.database, result, "executing statement", _this.sql, _this._latestArguments); + }, + _selectResults$0() { + var t2, t3, columnCount, resultCode, t4, i, names, _this = this, + rows = A._setArrayType([], type$.JSArray_List_nullable_Object), + t1 = _this.finalizable._inResetState = false; + for (t2 = _this.statement, t3 = t2.stmt, t2 = t2.bindings.sqlite3, columnCount = -1; resultCode = A._asInt(t2.sqlite3_step(t3)), resultCode === 100;) { + if (columnCount === -1) + columnCount = A._asInt(t2.sqlite3_column_count(t3)); + t4 = []; + for (i = 0; i < columnCount; ++i) + t4.push(_this._readValue$1(i)); + B.JSArray_methods.add$1(rows, t4); + } + if (resultCode !== 0 ? resultCode !== 101 : t1) + A.throwException(_this.database, resultCode, "selecting from statement", _this.sql, _this._latestArguments); + names = _this.get$_columnNames(); + _this.get$_tableNames(); + t1 = new A.ResultSet(rows, names, B.Map_empty); + t1._calculateIndexes$0(); + return t1; + }, + _readValue$1(index) { + var t3, $length, + t1 = this.statement, + t2 = t1.bindings; + t1 = t1.stmt; + t3 = t2.sqlite3; + switch (A._asInt(t3.sqlite3_column_type(t1, index))) { + case 1: + t1 = type$.JavaScriptBigInt._as(t3.sqlite3_column_int64(t1, index)); + return -9007199254740992 <= t1 && t1 <= 9007199254740992 ? A._asInt(A._asDouble(init.G.Number(t1))) : A._BigIntImpl_parse(A._asString(t1.toString()), null); + case 2: + return A._asDouble(t3.sqlite3_column_double(t1, index)); + case 3: + return A.WrappedMemory_readString(t2.memory, A._asInt(t3.sqlite3_column_text(t1, index)), null); + case 4: + $length = A._asInt(t3.sqlite3_column_bytes(t1, index)); + return A.WrappedMemory_copyRange(t2.memory, A._asInt(t3.sqlite3_column_blob(t1, index)), $length); + case 5: + default: + return null; + } + }, + _bindIndexedParams$1(params) { + var i, + $length = params.length, + t1 = this.statement, + count = A._asInt(t1.bindings.sqlite3.sqlite3_bind_parameter_count(t1.stmt)); + if ($length !== count) + A.throwExpression(A.ArgumentError$value(params, "parameters", "Expected " + count + " parameters, got " + $length)); + t1 = params.length; + if (t1 === 0) + return; + for (i = 1; i <= params.length; ++i) + this._bindParam$2(params[i - 1], i); + this._latestArguments = params; + }, + _bindParam$2(param, i) { + var t1, _this0, encoded, t2, ptr, _this = this; + $label0$0: { + if (param == null) { + t1 = _this.statement; + t1 = A._asInt(t1.bindings.sqlite3.sqlite3_bind_null(t1.stmt, i)); + break $label0$0; + } + if (A._isInt(param)) { + t1 = _this.statement; + t1 = A._asInt(t1.bindings.sqlite3.sqlite3_bind_int64(t1.stmt, i, type$.JavaScriptBigInt._as(init.G.BigInt(param)))); + break $label0$0; + } + if (param instanceof A._BigIntImpl) { + t1 = _this.statement; + t1 = A._asInt(t1.bindings.sqlite3.sqlite3_bind_int64(t1.stmt, i, type$.JavaScriptBigInt._as(init.G.BigInt(A.BigIntRangeCheck_get_checkRange(param).toString$0(0))))); + break $label0$0; + } + if (A._isBool(param)) { + t1 = _this.statement; + _this0 = param ? 1 : 0; + t1 = A._asInt(t1.bindings.sqlite3.sqlite3_bind_int64(t1.stmt, i, type$.JavaScriptBigInt._as(init.G.BigInt(_this0)))); + break $label0$0; + } + if (typeof param == "number") { + t1 = _this.statement; + t1 = A._asInt(t1.bindings.sqlite3.sqlite3_bind_double(t1.stmt, i, param)); + break $label0$0; + } + if (typeof param == "string") { + t1 = _this.statement; + encoded = B.C_Utf8Encoder.convert$1(param); + t2 = t1.bindings; + ptr = t2.allocateBytes$1(encoded); + B.JSArray_methods.add$1(t1._allocatedArguments, ptr); + t1 = A.callMethod(t2.sqlite3, "sqlite3_bind_text", [t1.stmt, i, ptr, encoded.length, 0], type$.int); + break $label0$0; + } + t1 = type$.List_int; + if (t1._is(param)) { + t2 = _this.statement; + t1._as(param); + t1 = t2.bindings; + ptr = t1.allocateBytes$1(param); + B.JSArray_methods.add$1(t2._allocatedArguments, ptr); + t2 = A.callMethod(t1.sqlite3, "sqlite3_bind_blob64", [t2.stmt, i, ptr, type$.JavaScriptBigInt._as(init.G.BigInt(J.get$length$asx(param))), 0], type$.int); + t1 = t2; + break $label0$0; + } + t1 = _this._bindCustomParam$2(param, i); + break $label0$0; + } + if (t1 !== 0) + A.throwException(_this.database, t1, "binding parameter", _this.sql, _this._latestArguments); + }, + _bindCustomParam$2(param, i) { + A._asObject(param); + throw A.wrapException(A.ArgumentError$value(param, "params[" + i + "]", "Allowed parameters must either be null or bool, int, num, String or List.")); + }, + _bindParams$1(parameters) { + $label0$0: { + this._bindIndexedParams$1(parameters.parameters); + break $label0$0; + } + }, + dispose$0() { + var t2, + t1 = this.finalizable; + if (!t1._statement$_closed) { + $.$get$disposeFinalizer().detach$1(this); + t1.dispose$0(); + t2 = this.database; + if (!t2._isClosed) + B.JSArray_methods.remove$1(t2.finalizable._statements, t1); + } + }, + selectWith$1(parameters) { + var _this = this; + if (_this.finalizable._statement$_closed) + A.throwExpression(A.StateError$(string$.Tried_)); + _this._reset$0(); + _this._bindParams$1(parameters); + return _this._selectResults$0(); + }, + executeWith$1(parameters) { + var _this = this; + if (_this.finalizable._statement$_closed) + A.throwExpression(A.StateError$(string$.Tried_)); + _this._reset$0(); + _this._bindParams$1(parameters); + _this._execute$0(); + } + }; + A.InMemoryFileSystem.prototype = { + xAccess$2(path, flags) { + return this.fileData.containsKey$1(path) ? 1 : 0; + }, + xDelete$2(path, syncDir) { + this.fileData.remove$1(0, path); + }, + xFullPathName$1(path) { + return $.$get$url().normalize$1("/" + path); + }, + xOpen$2(path, flags) { + var t1, + pathStr = path.path; + if (pathStr == null) + pathStr = A.GenerateFilename_randomFileName(this.random, "/"); + t1 = this.fileData; + if (!t1.containsKey$1(pathStr)) + if ((flags & 4) !== 0) + t1.$indexSet(0, pathStr, new A.Uint8Buffer(new Uint8Array(0), 0)); + else + throw A.wrapException(A.VfsException$(14)); + return new A._Record_2_file_outFlags(new A._InMemoryFile(this, pathStr, (flags & 8) !== 0), 0); + }, + xSleep$1(duration) { + } + }; + A._InMemoryFile.prototype = { + readInto$2(buffer, offset) { + var available, + file = this.vfs.fileData.$index(0, this.path); + if (file == null || file._typed_buffer$_length <= offset) + return 0; + available = Math.min(buffer.length, file._typed_buffer$_length - offset); + B.NativeUint8List_methods.setRange$4(buffer, 0, available, J.asUint8List$2$x(B.NativeUint8List_methods.get$buffer(file._typed_buffer$_buffer), 0, file._typed_buffer$_length), offset); + return available; + }, + xCheckReservedLock$0() { + return this._lockMode >= 2 ? 1 : 0; + }, + xClose$0() { + if (this.deleteOnClose) + this.vfs.fileData.remove$1(0, this.path); + }, + xFileSize$0() { + return this.vfs.fileData.$index(0, this.path)._typed_buffer$_length; + }, + xLock$1(mode) { + this._lockMode = mode; + }, + xSync$1(flags) { + }, + xTruncate$1(size) { + var t1 = this.vfs.fileData, + t2 = this.path, + file = t1.$index(0, t2); + if (file == null) { + t1.$indexSet(0, t2, new A.Uint8Buffer(new Uint8Array(0), 0)); + t1.$index(0, t2).set$length(0, size); + } else + file.set$length(0, size); + }, + xUnlock$1(mode) { + this._lockMode = mode; + }, + xWrite$2(buffer, fileOffset) { + var endIndex, + t1 = this.vfs.fileData, + t2 = this.path, + file = t1.$index(0, t2); + if (file == null) { + file = new A.Uint8Buffer(new Uint8Array(0), 0); + t1.$indexSet(0, t2, file); + } + endIndex = fileOffset + buffer.length; + if (endIndex > file._typed_buffer$_length) + file.set$length(0, endIndex); + file.setRange$3(0, fileOffset, endIndex, buffer); + } + }; + A.Cursor.prototype = { + _calculateIndexes$0() { + var t2, t3, _i, column, + t1 = A.LinkedHashMap_LinkedHashMap$_empty(type$.String, type$.int); + for (t2 = this._result_set$_columnNames, t3 = t2.length, _i = 0; _i < t2.length; t2.length === t3 || (0, A.throwConcurrentModificationError)(t2), ++_i) { + column = t2[_i]; + t1.$indexSet(0, column, B.JSArray_methods.lastIndexOf$1(t2, column)); + } + this._calculatedIndexes = t1; + } + }; + A.ResultSet.prototype = { + get$iterator(_) { + return new A._ResultIterator(this); + }, + $index(_, index) { + var t1 = this.rows; + if (!(index >= 0 && index < t1.length)) + return A.ioore(t1, index); + return new A.Row(this, A.List_List$unmodifiable(t1[index], type$.nullable_Object)); + }, + $indexSet(_, index, value) { + type$.Row._as(value); + throw A.wrapException(A.UnsupportedError$("Can't change rows from a result set")); + }, + get$length(_) { + return this.rows.length; + }, + $isEfficientLengthIterable: 1, + $isIterable: 1, + $isList: 1 + }; + A.Row.prototype = { + $index(_, key) { + var t1, index; + if (typeof key != "string") { + if (A._isInt(key)) { + t1 = this._data; + if (key >>> 0 !== key || key >= t1.length) + return A.ioore(t1, key); + return t1[key]; + } + return null; + } + index = this._result._calculatedIndexes.$index(0, key); + if (index == null) + return null; + t1 = this._data; + if (index >>> 0 !== index || index >= t1.length) + return A.ioore(t1, index); + return t1[index]; + }, + get$keys() { + return this._result._result_set$_columnNames; + }, + get$values() { + return this._data; + }, + $isMap: 1 + }; + A._ResultIterator.prototype = { + get$current() { + var t1 = this.result, + t2 = t1.rows, + t3 = this.index; + if (!(t3 >= 0 && t3 < t2.length)) + return A.ioore(t2, t3); + return new A.Row(t1, A.List_List$unmodifiable(t2[t3], type$.nullable_Object)); + }, + moveNext$0() { + return ++this.index < this.result.rows.length; + }, + $isIterator: 1 + }; + A._ResultSet_Cursor_ListMixin.prototype = {}; + A._ResultSet_Cursor_ListMixin_NonGrowableListMixin.prototype = {}; + A._Row_Object_UnmodifiableMapMixin.prototype = {}; + A._Row_Object_UnmodifiableMapMixin_MapMixin.prototype = {}; + A.OpenMode.prototype = { + _enumToString$0() { + return "OpenMode." + this._name; + } + }; + A.CommonPreparedStatement.prototype = {}; + A.IndexedParameters.prototype = {$isStatementParameters: 1}; + A.VfsException.prototype = { + toString$0(_) { + return "VfsException(" + this.returnCode + ")"; + }, + $isException: 1 + }; + A.Sqlite3Filename.prototype = {}; + A.VirtualFileSystem.prototype = {}; + A.BaseVirtualFileSystem.prototype = {}; + A.BaseVfsFile.prototype = { + get$xDeviceCharacteristics() { + return 0; + }, + xRead$2(target, fileOffset) { + var bytesRead = this.readInto$2(target, fileOffset), + t1 = target.length; + if (bytesRead < t1) { + B.NativeUint8List_methods.fillRange$3(target, bytesRead, t1, 0); + throw A.wrapException(B.VfsException_522); + } + }, + $isVirtualFileSystemFile: 1 + }; + A.WasmSqliteBindings.prototype = {}; + A.WasmDatabase0.prototype = {}; + A.WasmStatementCompiler.prototype = { + close$0() { + var _this = this, + t1 = _this.database.bindings.sqlite3; + t1.dart_sqlite3_free(_this.sql); + t1.dart_sqlite3_free(_this.stmtOut); + t1.dart_sqlite3_free(_this.pzTail); + }, + sqlite3_prepare$3(byteOffset, $length, prepFlag) { + var t4, stmt, libraryStatement, _this = this, + t1 = _this.database, + t2 = t1.bindings, + t3 = _this.stmtOut; + t1 = A.callMethod(t2.sqlite3, "sqlite3_prepare_v3", [t1.db, _this.sql + byteOffset, $length, prepFlag, t3, _this.pzTail], type$.int); + t4 = A.NativeInt32List_NativeInt32List$view(type$.NativeArrayBuffer._as(t2.memory.buffer), 0, null); + t3 = B.JSInt_methods._shrOtherPositive$1(t3, 2); + if (!(t3 < t4.length)) + return A.ioore(t4, t3); + stmt = t4[t3]; + libraryStatement = stmt === 0 ? null : new A.WasmStatement(stmt, t2, A._setArrayType([], type$.JSArray_int)); + return new A.SqliteResult(t1, libraryStatement, type$.SqliteResult_nullable_RawSqliteStatement); + } + }; + A.WasmStatement.prototype = { + deallocateArguments$0() { + var t1, t2, t3, _i; + for (t1 = this._allocatedArguments, t2 = t1.length, t3 = this.bindings.sqlite3, _i = 0; _i < t1.length; t1.length === t2 || (0, A.throwConcurrentModificationError)(t1), ++_i) + t3.dart_sqlite3_free(t1[_i]); + B.JSArray_methods.clear$0(t1); + } + }; + A.WasmContext.prototype = {}; + A.WasmValue.prototype = {}; + A.WasmValueList.prototype = { + $index(_, index) { + var t1 = this.bindings, + t2 = A.NativeInt32List_NativeInt32List$view(type$.NativeArrayBuffer._as(t1.memory.buffer), 0, null), + t3 = B.JSInt_methods._shrOtherPositive$1(this.value + index * 4, 2); + if (!(t3 < t2.length)) + return A.ioore(t2, t3); + return new A.WasmValue(t1, t2[t3]); + }, + $indexSet(_, index, value) { + type$.WasmValue._as(value); + throw A.wrapException(A.UnsupportedError$("Setting element in WasmValueList")); + }, + get$length(receiver) { + return this.length; + } + }; + A.AsyncJavaScriptIteratable.prototype = { + listen$4$cancelOnError$onDone$onError(onData, cancelOnError, onDone, onError) { + var iterator, controller, _null = null, t1 = {}, + t2 = this.$ti; + t2._eval$1("~(1)?")._as(onData); + type$.nullable_void_Function._as(onDone); + iterator = A._asJSObject(A.JSObjectUnsafeUtilExtension__callMethod(this._jsObject, type$.JavaScriptSymbol._as(init.G.Symbol.asyncIterator), _null, _null, _null, _null)); + controller = A.StreamController_StreamController(_null, _null, true, t2._precomputed1); + t1.currentlyPendingPromise = null; + t2 = new A.AsyncJavaScriptIteratable_listen_fetchNext(t1, this, iterator, controller); + controller.set$onListen(t2); + controller.set$onResume(new A.AsyncJavaScriptIteratable_listen_fetchNextIfNecessary(t1, controller, t2)); + return new A._ControllerStream(controller, A._instanceType(controller)._eval$1("_ControllerStream<1>")).listen$4$cancelOnError$onDone$onError(onData, cancelOnError, onDone, onError); + }, + listen$3$onDone$onError(onData, onDone, onError) { + return this.listen$4$cancelOnError$onDone$onError(onData, null, onDone, onError); + } + }; + A.AsyncJavaScriptIteratable_listen_fetchNext.prototype = { + call$0() { + var t2, _this = this, + currentlyPendingPromise = A._asJSObject(_this.iterator.next()), + t1 = _this._box_0; + t1.currentlyPendingPromise = currentlyPendingPromise; + t2 = _this.controller; + A.promiseToFuture(currentlyPendingPromise, type$.JSObject).then$1$2$onError(new A.AsyncJavaScriptIteratable_listen_fetchNext_closure(t1, _this.$this, t2, _this), t2.get$addError(), type$.Null); + }, + $signature: 0 + }; + A.AsyncJavaScriptIteratable_listen_fetchNext_closure.prototype = { + call$1(result) { + var t1, t2, value, t3, _this = this; + A._asJSObject(result); + t1 = A._asBoolQ(result.done); + if (t1 == null) + t1 = null; + t2 = _this.$this.$ti; + value = t2._eval$1("1?")._as(result.value); + t3 = _this.controller; + if (t1 === true) { + t3.close$0(); + _this._box_0.currentlyPendingPromise = null; + } else { + t3.add$1(0, value == null ? t2._precomputed1._as(value) : value); + _this._box_0.currentlyPendingPromise = null; + t1 = t3._state; + if (!((t1 & 1) !== 0 ? (t3.get$_subscription()._state & 4) !== 0 : (t1 & 2) === 0)) + _this.fetchNext.call$0(); + } + }, + $signature: 10 + }; + A.AsyncJavaScriptIteratable_listen_fetchNextIfNecessary.prototype = { + call$0() { + var t1, t2; + if (this._box_0.currentlyPendingPromise == null) { + t1 = this.controller; + t2 = t1._state; + t1 = !((t2 & 1) !== 0 ? (t1.get$_subscription()._state & 4) !== 0 : (t2 & 2) === 0); + } else + t1 = false; + if (t1) + this.fetchNext.call$0(); + }, + $signature: 0 + }; + A._CursorReader.prototype = { + cancel$0() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$self = this, t1; + var $async$cancel$0 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $async$self._onSuccess; + if (t1 != null) + t1.cancel$0(); + t1 = $async$self._indexed_db0$_onError; + if (t1 != null) + t1.cancel$0(); + $async$self._indexed_db0$_onError = $async$self._onSuccess = null; + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$cancel$0, $async$completer); + }, + get$current() { + var t1 = this._cursor; + return t1 == null ? A.throwExpression(A.StateError$("Await moveNext() first")) : t1; + }, + moveNext$0() { + var completer, t2, t3, t4, _this = this, + t1 = _this._cursor; + if (t1 != null) + t1.continue(); + t1 = new A._Future($.Zone__current, type$._Future_bool); + completer = new A._SyncCompleter(t1, type$._SyncCompleter_bool); + t2 = _this._cursorRequest; + t3 = type$.nullable_void_Function_JSObject; + t4 = type$.JSObject; + _this._onSuccess = A._EventStreamSubscription$(t2, "success", t3._as(new A._CursorReader_moveNext_closure(_this, completer)), false, t4); + _this._indexed_db0$_onError = A._EventStreamSubscription$(t2, "error", t3._as(new A._CursorReader_moveNext_closure0(_this, completer)), false, t4); + return t1; + } + }; + A._CursorReader_moveNext_closure.prototype = { + call$1($event) { + var t2, + t1 = this.$this; + t1.cancel$0(); + t2 = t1.$ti._eval$1("1?")._as(t1._cursorRequest.result); + t1._cursor = t2; + this.completer.complete$1(t2 != null); + }, + $signature: 1 + }; + A._CursorReader_moveNext_closure0.prototype = { + call$1($event) { + var t1 = this.$this; + t1.cancel$0(); + t1 = A._asJSObjectQ(t1._cursorRequest.error); + if (t1 == null) + t1 = $event; + this.completer.completeError$1(t1); + }, + $signature: 1 + }; + A.CompleteIdbRequest_complete_closure.prototype = { + call$1($event) { + this.completer.complete$1(this.T._as(this._this.result)); + }, + $signature: 1 + }; + A.CompleteIdbRequest_complete_closure0.prototype = { + call$1($event) { + var t1 = A._asJSObjectQ(this._this.error); + if (t1 == null) + t1 = $event; + this.completer.completeError$1(t1); + }, + $signature: 1 + }; + A.CompleteOpenIdbRequest_completeOrBlocked_closure.prototype = { + call$1($event) { + this.completer.complete$1(this.T._as(this._this.result)); + }, + $signature: 1 + }; + A.CompleteOpenIdbRequest_completeOrBlocked_closure0.prototype = { + call$1($event) { + var t1 = A._asJSObjectQ(this._this.error); + if (t1 == null) + t1 = $event; + this.completer.completeError$1(t1); + }, + $signature: 1 + }; + A.CompleteOpenIdbRequest_completeOrBlocked_closure1.prototype = { + call$1($event) { + var t1 = A._asJSObjectQ(this._this.error); + if (t1 == null) + t1 = $event; + this.completer.completeError$1(t1); + }, + $signature: 1 + }; + A.WasmInstance_load_closure.prototype = { + call$2(module, moduleImports) { + var _this; + A._asString(module); + type$.Map_of_String_and_nullable_Object._as(moduleImports); + _this = {}; + this.importsJs[module] = _this; + moduleImports.forEach$1(0, new A.WasmInstance_load__closure(_this)); + }, + $signature: 63 + }; + A.WasmInstance_load__closure.prototype = { + call$2($name, value) { + this.moduleJs[A._asString($name)] = value; + }, + $signature: 64 + }; + A.WasmSqlite3.prototype = {}; + A.WasmVfs.prototype = { + _runInWorker$2$2(operation, requestData, $Req, $Res) { + var t2, t3, rc, + _s12_ = "_runInWorker", + t1 = type$.Message_2; + A.checkTypeBound($Req, t1, "Req", _s12_); + A.checkTypeBound($Res, t1, "Res", _s12_); + $Req._eval$1("@<0>")._bind$1($Res)._eval$1("WorkerOperation<1,2>")._as(operation); + t1 = this.serializer; + t1.write$1($Req._as(requestData)); + t2 = this.synchronizer.int32View; + t3 = init.G; + A._asInt(t3.Atomics.store(t2, 1, -1)); + A._asInt(t3.Atomics.store(t2, 0, operation.index)); + A.Atomics_notify(t2, 0); + A._asString(t3.Atomics.wait(t2, 1, -1)); + rc = A._asInt(t3.Atomics.load(t2, 1)); + if (rc !== 0) + throw A.wrapException(A.VfsException$(rc)); + return operation.readResponse.call$1(t1); + }, + xAccess$2(path, flags) { + return this._runInWorker$2$2(B.WorkerOperation_W3i, new A.NameAndInt32Flags(path, flags, 0, 0), type$.NameAndInt32Flags, type$.Flags).flag0; + }, + xDelete$2(path, syncDir) { + this._runInWorker$2$2(B.WorkerOperation_aCN, new A.NameAndInt32Flags(path, syncDir, 0, 0), type$.NameAndInt32Flags, type$.EmptyMessage); + }, + xFullPathName$1(path) { + var resolved = this.pathContext.absolute$1(path); + if ($.$get$context()._isWithinOrEquals$2("/", resolved) !== B._PathRelation_within) + throw A.wrapException(B.VfsException_14); + return resolved; + }, + xOpen$2(path, flags) { + var filePath = path.path, + result = this._runInWorker$2$2(B.WorkerOperation_readNameAndFlags_readFlags_2_xOpen, new A.NameAndInt32Flags(filePath == null ? A.GenerateFilename_randomFileName(this.random, "/") : filePath, flags, 0, 0), type$.NameAndInt32Flags, type$.Flags); + return new A._Record_2_file_outFlags(new A.WasmFile(this, result.flag1), result.flag0); + }, + xSleep$1(duration) { + this._runInWorker$2$2(B.WorkerOperation_readFlags_readEmpty_5_xSleep, new A.Flags(B.JSInt_methods._tdivFast$1(duration._duration, 1000), 0, 0), type$.Flags, type$.EmptyMessage); + }, + close$0() { + var t1 = type$.EmptyMessage; + this._runInWorker$2$2(B.WorkerOperation_readEmpty_readEmpty_12_stopServer, B.C_EmptyMessage, t1, t1); + } + }; + A.WasmFile.prototype = { + get$xDeviceCharacteristics() { + return 2048; + }, + readInto$2(buffer, offset) { + var t1, t2, t3, t4, t5, t6, t7, t8, totalBytesRead, bytesToRead, bytesRead, t9, t10, + remainingBytes = buffer.length; + for (t1 = type$.JSObject, t2 = this.vfs, t3 = this.fd, t4 = type$.Flags, t5 = t2.serializer.buffer, t6 = init.G, t7 = type$.JavaScriptFunction, t8 = type$.NativeUint8List, totalBytesRead = 0; remainingBytes > 0;) { + bytesToRead = Math.min(65536, remainingBytes); + remainingBytes -= bytesToRead; + bytesRead = t2._runInWorker$2$2(B.WorkerOperation_readFlags_readFlags_3_xRead, new A.Flags(t3, offset + totalBytesRead, bytesToRead), t4, t4).flag0; + t9 = t7._as(t6.Uint8Array); + t10 = [t5]; + t10.push(0); + t10.push(bytesRead); + A.JSObjectUnsafeUtilExtension__callMethod(buffer, "set", t8._as(A.callConstructor(t9, t10, t1)), totalBytesRead, null, null); + totalBytesRead += bytesRead; + if (bytesRead < bytesToRead) + break; + } + return totalBytesRead; + }, + xCheckReservedLock$0() { + return this.lockStatus !== 0 ? 1 : 0; + }, + xClose$0() { + this.vfs._runInWorker$2$2(B.WorkerOperation_readFlags_readEmpty_6_xClose, new A.Flags(this.fd, 0, 0), type$.Flags, type$.EmptyMessage); + }, + xFileSize$0() { + var t1 = type$.Flags; + return this.vfs._runInWorker$2$2(B.WorkerOperation_readFlags_readFlags_7_xFileSize, new A.Flags(this.fd, 0, 0), t1, t1).flag0; + }, + xLock$1(mode) { + var _this = this; + if (_this.lockStatus === 0) + _this.vfs._runInWorker$2$2(B.WorkerOperation_readFlags_readEmpty_10_xLock, new A.Flags(_this.fd, mode, 0), type$.Flags, type$.EmptyMessage); + _this.lockStatus = mode; + }, + xSync$1(flags) { + this.vfs._runInWorker$2$2(B.WorkerOperation_readFlags_readEmpty_8_xSync, new A.Flags(this.fd, 0, 0), type$.Flags, type$.EmptyMessage); + }, + xTruncate$1(size) { + this.vfs._runInWorker$2$2(B.WorkerOperation_readFlags_readEmpty_9_xTruncate, new A.Flags(this.fd, size, 0), type$.Flags, type$.EmptyMessage); + }, + xUnlock$1(mode) { + if (this.lockStatus !== 0 && mode === 0) + this.vfs._runInWorker$2$2(B.WorkerOperation_readFlags_readEmpty_11_xUnlock, new A.Flags(this.fd, mode, 0), type$.Flags, type$.EmptyMessage); + }, + xWrite$2(buffer, fileOffset) { + var t1, t2, t3, t4, t5, totalBytesWritten, bytesToWrite, + remainingBytes = buffer.length; + for (t1 = this.vfs, t2 = t1.serializer.byteView, t3 = this.fd, t4 = type$.Flags, t5 = type$.EmptyMessage, totalBytesWritten = 0; remainingBytes > 0;) { + bytesToWrite = Math.min(65536, remainingBytes); + A.JSObjectUnsafeUtilExtension__callMethod(t2, "set", bytesToWrite === remainingBytes && totalBytesWritten === 0 ? buffer : J.asUint8List$2$x(B.NativeUint8List_methods.get$buffer(buffer), buffer.byteOffset + totalBytesWritten, bytesToWrite), 0, null, null); + t1._runInWorker$2$2(B.WorkerOperation_readFlags_readEmpty_4_xWrite, new A.Flags(t3, fileOffset + totalBytesWritten, bytesToWrite), t4, t5); + totalBytesWritten += bytesToWrite; + remainingBytes -= bytesToWrite; + } + } + }; + A.RequestResponseSynchronizer.prototype = {}; + A.MessageSerializer.prototype = { + write$1(message) { + var t1, encoded; + if (!(message instanceof A.EmptyMessage)) + if (message instanceof A.Flags) { + t1 = this.dataView; + t1.$flags & 2 && A.throwUnsupportedOperation(t1, 8); + t1.setInt32(0, message.flag0, false); + t1.setInt32(4, message.flag1, false); + t1.setInt32(8, message.flag2, false); + if (message instanceof A.NameAndInt32Flags) { + encoded = B.C_Utf8Encoder.convert$1(message.name); + t1.setInt32(12, encoded.length, false); + B.NativeUint8List_methods.setAll$2(this.byteView, 16, encoded); + } + } else + throw A.wrapException(A.UnsupportedError$("Message " + message.toString$0(0))); + } + }; + A.WorkerOperation.prototype = { + _enumToString$0() { + return "WorkerOperation." + this._name; + } + }; + A.Message0.prototype = {}; + A.EmptyMessage.prototype = {}; + A.Flags.prototype = {}; + A.NameAndInt32Flags.prototype = {}; + A._ResolvedPath.prototype = {}; + A.VfsWorker.prototype = { + _resolvePath$2$createDirectories(absolutePath, createDirectories) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$._ResolvedPath), + $async$returnValue, $async$self = this, file, t2, $directories, dirHandle, _i, t1, fullPath, _0_0, _0_1; + var $async$_resolvePath$2$createDirectories = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $.$get$url(); + fullPath = t1.relative$2$from(absolutePath, "/"); + _0_0 = t1.split$1(0, fullPath); + _0_1 = _0_0.length; + t1 = _0_1 >= 1; + file = null; + if (t1) { + t2 = _0_1 - 1; + $directories = B.JSArray_methods.sublist$2(_0_0, 0, t2); + if (!(t2 >= 0 && t2 < _0_0.length)) { + $async$returnValue = A.ioore(_0_0, t2); + // goto return + $async$goto = 1; + break; + } + file = _0_0[t2]; + } else + $directories = null; + if (!t1) + throw A.wrapException(A.StateError$("Pattern matching error")); + dirHandle = $async$self.root; + t1 = $directories.length, t2 = type$.JSObject, _i = 0; + case 3: + // for condition + if (!(_i < $directories.length)) { + // goto after for + $async$goto = 5; + break; + } + $async$goto = 6; + return A._asyncAwait(A.promiseToFuture(A._asJSObject(dirHandle.getDirectoryHandle($directories[_i], {create: createDirectories})), t2), $async$_resolvePath$2$createDirectories); + case 6: + // returning from await. + dirHandle = $async$result; + case 4: + // for update + $directories.length === t1 || (0, A.throwConcurrentModificationError)($directories), ++_i; + // goto for condition + $async$goto = 3; + break; + case 5: + // after for + $async$returnValue = new A._ResolvedPath(fullPath, dirHandle, file); + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$_resolvePath$2$createDirectories, $async$completer); + }, + _resolvePath$1(absolutePath) { + return this._resolvePath$2$createDirectories(absolutePath, false); + }, + _xAccess$1(flags) { + return this._xAccess$body$VfsWorker(flags); + }, + _xAccess$body$VfsWorker(flags) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.Flags), + $async$returnValue, $async$handler = 2, $async$errorStack = [], $async$self = this, resolved, t1, exception, $async$exception; + var $async$_xAccess$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) { + $async$errorStack.push($async$result); + $async$goto = $async$handler; + } + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$handler = 4; + $async$goto = 7; + return A._asyncAwait($async$self._resolvePath$1(flags.name), $async$_xAccess$1); + case 7: + // returning from await. + resolved = $async$result; + t1 = resolved; + $async$goto = 8; + return A._asyncAwait(A.promiseToFuture(A._asJSObject(t1.directory.getFileHandle(t1.filename, {create: false})), type$.JSObject), $async$_xAccess$1); + case 8: + // returning from await. + $async$returnValue = new A.Flags(1, 0, 0); + // goto return + $async$goto = 1; + break; + $async$handler = 2; + // goto after finally + $async$goto = 6; + break; + case 4: + // catch + $async$handler = 3; + $async$exception = $async$errorStack.pop(); + $async$returnValue = new A.Flags(0, 0, 0); + // goto return + $async$goto = 1; + break; + // goto after finally + $async$goto = 6; + break; + case 3: + // uncaught + // goto rethrow + $async$goto = 2; + break; + case 6: + // after finally + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + case 2: + // rethrow + return A._asyncRethrow($async$errorStack.at(-1), $async$completer); + } + }); + return A._asyncStartSync($async$_xAccess$1, $async$completer); + }, + _xDelete$1(options) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$handler = 1, $async$errorStack = [], $async$self = this, e, exception, resolved, $async$exception; + var $async$_xDelete$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) { + $async$errorStack.push($async$result); + $async$goto = $async$handler; + } + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$goto = 2; + return A._asyncAwait($async$self._resolvePath$1(options.name), $async$_xDelete$1); + case 2: + // returning from await. + resolved = $async$result; + $async$handler = 4; + $async$goto = 7; + return A._asyncAwait(A.FileSystemDirectoryHandleApi_remove(resolved.directory, resolved.filename), $async$_xDelete$1); + case 7: + // returning from await. + $async$handler = 1; + // goto after finally + $async$goto = 6; + break; + case 4: + // catch + $async$handler = 3; + $async$exception = $async$errorStack.pop(); + e = A.unwrapException($async$exception); + A.S(e); + throw A.wrapException(B.VfsException_2570); + // goto after finally + $async$goto = 6; + break; + case 3: + // uncaught + // goto rethrow + $async$goto = 1; + break; + case 6: + // after finally + // implicit return + return A._asyncReturn(null, $async$completer); + case 1: + // rethrow + return A._asyncRethrow($async$errorStack.at(-1), $async$completer); + } + }); + return A._asyncStartSync($async$_xDelete$1, $async$completer); + }, + _xOpen$1(req) { + return this._xOpen$body$VfsWorker(req); + }, + _xOpen$body$VfsWorker(req) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.Flags), + $async$returnValue, $async$handler = 2, $async$errorStack = [], $async$self = this, exception, t1, t2, fileHandle, readonly, flags, create, resolved, $async$exception; + var $async$_xOpen$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) { + $async$errorStack.push($async$result); + $async$goto = $async$handler; + } + for (;;) + switch ($async$goto) { + case 0: + // Function start + flags = req.flag0; + create = (flags & 4) !== 0; + resolved = null; + $async$handler = 4; + $async$goto = 7; + return A._asyncAwait($async$self._resolvePath$2$createDirectories(req.name, create), $async$_xOpen$1); + case 7: + // returning from await. + resolved = $async$result; + $async$handler = 2; + // goto after finally + $async$goto = 6; + break; + case 4: + // catch + $async$handler = 3; + $async$exception = $async$errorStack.pop(); + t1 = A.VfsException$(12); + throw A.wrapException(t1); + // goto after finally + $async$goto = 6; + break; + case 3: + // uncaught + // goto rethrow + $async$goto = 2; + break; + case 6: + // after finally + t1 = resolved; + t2 = A._asBool(create); + $async$goto = 8; + return A._asyncAwait(A.promiseToFuture(A._asJSObject(t1.directory.getFileHandle(t1.filename, {create: t2})), type$.JSObject), $async$_xOpen$1); + case 8: + // returning from await. + fileHandle = $async$result; + readonly = !create && (flags & 1) !== 0; + t1 = $async$self._fdCounter++; + t2 = resolved.directory; + $async$self._openFiles.$indexSet(0, t1, new A._OpenedFileHandle(t1, readonly, (flags & 8) !== 0, resolved.fullPath, t2, resolved.filename, fileHandle)); + $async$returnValue = new A.Flags(readonly ? 1 : 0, t1, 0); + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + case 2: + // rethrow + return A._asyncRethrow($async$errorStack.at(-1), $async$completer); + } + }); + return A._asyncStartSync($async$_xOpen$1, $async$completer); + }, + _xRead$1(req) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.Flags), + $async$returnValue, $async$self = this, t1, $async$temp1, $async$temp2; + var $async$_xRead$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $async$self._openFiles.$index(0, req.flag0); + t1.toString; + $async$temp1 = A; + $async$temp2 = A; + $async$goto = 3; + return A._asyncAwait($async$self._openForSynchronousAccess$1(t1), $async$_xRead$1); + case 3: + // returning from await. + $async$returnValue = new $async$temp1.Flags($async$temp2.FileSystemSyncAccessHandleApi_readDart($async$result, A.SharedArrayBuffer_asUint8ListSlice($async$self.messages.buffer, 0, req.flag2), {at: req.flag1}), 0, 0); + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$_xRead$1, $async$completer); + }, + _xWrite$1(req) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.EmptyMessage), + $async$returnValue, $async$self = this, bufferLength, t1, $async$temp1; + var $async$_xWrite$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $async$self._openFiles.$index(0, req.flag0); + t1.toString; + bufferLength = req.flag2; + $async$temp1 = A; + $async$goto = 3; + return A._asyncAwait($async$self._openForSynchronousAccess$1(t1), $async$_xWrite$1); + case 3: + // returning from await. + if ($async$temp1.FileSystemSyncAccessHandleApi_writeDart($async$result, A.SharedArrayBuffer_asUint8ListSlice($async$self.messages.buffer, 0, bufferLength), {at: req.flag1}) !== bufferLength) + throw A.wrapException(B.VfsException_778); + $async$returnValue = B.C_EmptyMessage; + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$_xWrite$1, $async$completer); + }, + _xClose$1(req) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$self = this, file; + var $async$_xClose$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + file = $async$self._openFiles.remove$1(0, req.flag0); + $async$self._implicitlyHeldLocks.remove$1(0, file); + if (file == null) + throw A.wrapException(B.VfsException_12); + $async$self._closeSyncHandle$1(file); + $async$goto = file.deleteOnClose ? 2 : 3; + break; + case 2: + // then + $async$goto = 4; + return A._asyncAwait(A.FileSystemDirectoryHandleApi_remove(file.directory, file.filename), $async$_xClose$1); + case 4: + // returning from await. + case 3: + // join + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$_xClose$1, $async$completer); + }, + _xFileSize$1(req) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.Flags), + $async$returnValue, $async$handler = 2, $async$errorStack = [], $async$next = [], $async$self = this, file, syncHandle, size, t1; + var $async$_xFileSize$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) { + $async$errorStack.push($async$result); + $async$goto = $async$handler; + } + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $async$self._openFiles.$index(0, req.flag0); + t1.toString; + file = t1; + $async$handler = 3; + $async$goto = 6; + return A._asyncAwait($async$self._openForSynchronousAccess$1(file), $async$_xFileSize$1); + case 6: + // returning from await. + syncHandle = $async$result; + size = A._asInt(syncHandle.getSize()); + $async$returnValue = new A.Flags(size, 0, 0); + $async$next = [1]; + // goto finally + $async$goto = 4; + break; + $async$next.push(5); + // goto finally + $async$goto = 4; + break; + case 3: + // uncaught + $async$next = [2]; + case 4: + // finally + $async$handler = 2; + t1 = type$._OpenedFileHandle._as(file); + if ($async$self._implicitlyHeldLocks.remove$1(0, t1)) + $async$self._closeSyncHandleNoThrow$1(t1); + // goto the next finally handler + $async$goto = $async$next.pop(); + break; + case 5: + // after finally + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + case 2: + // rethrow + return A._asyncRethrow($async$errorStack.at(-1), $async$completer); + } + }); + return A._asyncStartSync($async$_xFileSize$1, $async$completer); + }, + _xTruncate$1(req) { + return this._xTruncate$body$VfsWorker(req); + }, + _xTruncate$body$VfsWorker(req) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.EmptyMessage), + $async$returnValue, $async$handler = 2, $async$errorStack = [], $async$next = [], $async$self = this, file, syncHandle, t1; + var $async$_xTruncate$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) { + $async$errorStack.push($async$result); + $async$goto = $async$handler; + } + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $async$self._openFiles.$index(0, req.flag0); + t1.toString; + file = t1; + if (file.readonly) + A.throwExpression(B.VfsException_8); + $async$handler = 3; + $async$goto = 6; + return A._asyncAwait($async$self._openForSynchronousAccess$1(file), $async$_xTruncate$1); + case 6: + // returning from await. + syncHandle = $async$result; + syncHandle.truncate(req.flag1); + $async$next.push(5); + // goto finally + $async$goto = 4; + break; + case 3: + // uncaught + $async$next = [2]; + case 4: + // finally + $async$handler = 2; + t1 = type$._OpenedFileHandle._as(file); + if ($async$self._implicitlyHeldLocks.remove$1(0, t1)) + $async$self._closeSyncHandleNoThrow$1(t1); + // goto the next finally handler + $async$goto = $async$next.pop(); + break; + case 5: + // after finally + $async$returnValue = B.C_EmptyMessage; + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + case 2: + // rethrow + return A._asyncRethrow($async$errorStack.at(-1), $async$completer); + } + }); + return A._asyncStartSync($async$_xTruncate$1, $async$completer); + }, + _xSync$1(req) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.EmptyMessage), + $async$returnValue, $async$self = this, file, syncHandle; + var $async$_xSync$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + file = $async$self._openFiles.$index(0, req.flag0); + syncHandle = file.syncHandle; + if (!file.readonly && syncHandle != null) + syncHandle.flush(); + $async$returnValue = B.C_EmptyMessage; + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$_xSync$1, $async$completer); + }, + _xLock$1(req) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.EmptyMessage), + $async$returnValue, $async$handler = 2, $async$errorStack = [], $async$self = this, file, exception, t1, $async$exception; + var $async$_xLock$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) { + $async$errorStack.push($async$result); + $async$goto = $async$handler; + } + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $async$self._openFiles.$index(0, req.flag0); + t1.toString; + file = t1; + $async$goto = file.syncHandle == null ? 3 : 5; + break; + case 3: + // then + $async$handler = 7; + $async$goto = 10; + return A._asyncAwait($async$self._openForSynchronousAccess$1(file), $async$_xLock$1); + case 10: + // returning from await. + file.explicitlyLocked = true; + $async$handler = 2; + // goto after finally + $async$goto = 9; + break; + case 7: + // catch + $async$handler = 6; + $async$exception = $async$errorStack.pop(); + throw A.wrapException(B.VfsException_3850); + // goto after finally + $async$goto = 9; + break; + case 6: + // uncaught + // goto rethrow + $async$goto = 2; + break; + case 9: + // after finally + // goto join + $async$goto = 4; + break; + case 5: + // else + file.explicitlyLocked = true; + case 4: + // join + $async$returnValue = B.C_EmptyMessage; + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + case 2: + // rethrow + return A._asyncRethrow($async$errorStack.at(-1), $async$completer); + } + }); + return A._asyncStartSync($async$_xLock$1, $async$completer); + }, + _xUnlock$1(req) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.EmptyMessage), + $async$returnValue, $async$self = this, file; + var $async$_xUnlock$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + file = $async$self._openFiles.$index(0, req.flag0); + if (file.syncHandle != null && req.flag1 === 0) + $async$self._closeSyncHandle$1(file); + $async$returnValue = B.C_EmptyMessage; + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$_xUnlock$1, $async$completer); + }, + start$0() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$returnValue, $async$handler = 2, $async$errorStack = [], $async$self = this, rc, opcode, request, response, e, e0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, opcode0, exception, $async$exception; + var $async$start$0 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) { + $async$errorStack.push($async$result); + $async$goto = $async$handler; + } + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $async$self.synchronizer.int32View, t2 = init.G, t3 = $async$self.messages, t4 = $async$self.get$_releaseImplicitLock(), t5 = $async$self._implicitlyHeldLocks, t6 = t5.$ti._precomputed1, t7 = type$.Flags, t8 = type$.NameAndInt32Flags, t9 = type$.void; + case 3: + // for condition + if (!!$async$self._stopped) { + // goto after for + $async$goto = 4; + break; + } + if (A._asString(t2.Atomics.wait(t1, 0, -1, 150)) === "timed-out") { + t10 = A.List_List$_of(t5, t6); + B.JSArray_methods.forEach$1(t10, t4); + // goto for condition + $async$goto = 3; + break; + } + rc = null; + opcode = null; + request = null; + $async$handler = 6; + opcode0 = A._asInt(t2.Atomics.load(t1, 0)); + A._asInt(t2.Atomics.store(t1, 0, -1)); + if (!(opcode0 >= 0 && opcode0 < 13)) { + $async$returnValue = A.ioore(B.List_mvT, opcode0); + // goto return + $async$goto = 1; + break; + } + opcode = B.List_mvT[opcode0]; + request = opcode.readRequest.call$1(t3); + response = null; + case 9: + // switch + switch (opcode.index) { + case 5: + // goto case + $async$goto = 11; + break; + case 0: + // goto case + $async$goto = 12; + break; + case 1: + // goto case + $async$goto = 13; + break; + case 2: + // goto case + $async$goto = 14; + break; + case 3: + // goto case + $async$goto = 15; + break; + case 4: + // goto case + $async$goto = 16; + break; + case 6: + // goto case + $async$goto = 17; + break; + case 7: + // goto case + $async$goto = 18; + break; + case 9: + // goto case + $async$goto = 19; + break; + case 8: + // goto case + $async$goto = 20; + break; + case 10: + // goto case + $async$goto = 21; + break; + case 11: + // goto case + $async$goto = 22; + break; + case 12: + // goto case + $async$goto = 23; + break; + default: + // goto after switch + $async$goto = 10; + break; + } + break; + case 11: + // case + t10 = A.List_List$_of(t5, t6); + B.JSArray_methods.forEach$1(t10, t4); + $async$goto = 24; + return A._asyncAwait(A.Future_Future$delayed(A.Duration$(0, t7._as(request).flag0), t9), $async$start$0); + case 24: + // returning from await. + response = B.C_EmptyMessage; + // goto after switch + $async$goto = 10; + break; + case 12: + // case + $async$goto = 25; + return A._asyncAwait($async$self._xAccess$1(t8._as(request)), $async$start$0); + case 25: + // returning from await. + response = $async$result; + // goto after switch + $async$goto = 10; + break; + case 13: + // case + $async$goto = 26; + return A._asyncAwait($async$self._xDelete$1(t8._as(request)), $async$start$0); + case 26: + // returning from await. + response = B.C_EmptyMessage; + // goto after switch + $async$goto = 10; + break; + case 14: + // case + $async$goto = 27; + return A._asyncAwait($async$self._xOpen$1(t8._as(request)), $async$start$0); + case 27: + // returning from await. + response = $async$result; + // goto after switch + $async$goto = 10; + break; + case 15: + // case + $async$goto = 28; + return A._asyncAwait($async$self._xRead$1(t7._as(request)), $async$start$0); + case 28: + // returning from await. + response = $async$result; + // goto after switch + $async$goto = 10; + break; + case 16: + // case + $async$goto = 29; + return A._asyncAwait($async$self._xWrite$1(t7._as(request)), $async$start$0); + case 29: + // returning from await. + response = $async$result; + // goto after switch + $async$goto = 10; + break; + case 17: + // case + $async$goto = 30; + return A._asyncAwait($async$self._xClose$1(t7._as(request)), $async$start$0); + case 30: + // returning from await. + response = B.C_EmptyMessage; + // goto after switch + $async$goto = 10; + break; + case 18: + // case + $async$goto = 31; + return A._asyncAwait($async$self._xFileSize$1(t7._as(request)), $async$start$0); + case 31: + // returning from await. + response = $async$result; + // goto after switch + $async$goto = 10; + break; + case 19: + // case + $async$goto = 32; + return A._asyncAwait($async$self._xTruncate$1(t7._as(request)), $async$start$0); + case 32: + // returning from await. + response = $async$result; + // goto after switch + $async$goto = 10; + break; + case 20: + // case + $async$goto = 33; + return A._asyncAwait($async$self._xSync$1(t7._as(request)), $async$start$0); + case 33: + // returning from await. + response = $async$result; + // goto after switch + $async$goto = 10; + break; + case 21: + // case + $async$goto = 34; + return A._asyncAwait($async$self._xLock$1(t7._as(request)), $async$start$0); + case 34: + // returning from await. + response = $async$result; + // goto after switch + $async$goto = 10; + break; + case 22: + // case + $async$goto = 35; + return A._asyncAwait($async$self._xUnlock$1(t7._as(request)), $async$start$0); + case 35: + // returning from await. + response = $async$result; + // goto after switch + $async$goto = 10; + break; + case 23: + // case + response = B.C_EmptyMessage; + $async$self._stopped = true; + t10 = A.List_List$_of(t5, t6); + B.JSArray_methods.forEach$1(t10, t4); + // goto after switch + $async$goto = 10; + break; + case 10: + // after switch + t3.write$1(response); + rc = 0; + $async$handler = 2; + // goto after finally + $async$goto = 8; + break; + case 6: + // catch + $async$handler = 5; + $async$exception = $async$errorStack.pop(); + t10 = A.unwrapException($async$exception); + if (t10 instanceof A.VfsException) { + e = t10; + A.S(e); + A.S(opcode); + A.S(request); + rc = e.returnCode; + } else { + e0 = t10; + A.S(e0); + A.S(opcode); + A.S(request); + rc = 1; + } + // goto after finally + $async$goto = 8; + break; + case 5: + // uncaught + // goto rethrow + $async$goto = 2; + break; + case 8: + // after finally + t10 = A._asInt(rc); + A._asInt(t2.Atomics.store(t1, 1, t10)); + t2.Atomics.notify(t1, 1, 1 / 0); + // goto for condition + $async$goto = 3; + break; + case 4: + // after for + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + case 2: + // rethrow + return A._asyncRethrow($async$errorStack.at(-1), $async$completer); + } + }); + return A._asyncStartSync($async$start$0, $async$completer); + }, + _releaseImplicitLock$1(handle) { + type$._OpenedFileHandle._as(handle); + if (this._implicitlyHeldLocks.remove$1(0, handle)) + this._closeSyncHandleNoThrow$1(handle); + }, + _openForSynchronousAccess$1(file) { + return this._openForSynchronousAccess$body$VfsWorker(file); + }, + _openForSynchronousAccess$body$VfsWorker(file) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.JSObject), + $async$returnValue, $async$handler = 2, $async$errorStack = [], $async$self = this, attempt, handle, t1, t2, t3, handle0, t4, exception, existing, $async$exception; + var $async$_openForSynchronousAccess$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) { + $async$errorStack.push($async$result); + $async$goto = $async$handler; + } + for (;;) + switch ($async$goto) { + case 0: + // Function start + existing = file.syncHandle; + if (existing != null) { + $async$returnValue = existing; + // goto return + $async$goto = 1; + break; + } + attempt = 1; + t1 = file.file, t2 = type$.JSObject, t3 = $async$self._implicitlyHeldLocks; + case 3: + // for condition + // trivial condition + $async$handler = 6; + $async$goto = 9; + return A._asyncAwait(A.promiseToFuture(A._asJSObject(t1.createSyncAccessHandle()), t2), $async$_openForSynchronousAccess$1); + case 9: + // returning from await. + handle0 = $async$result; + file.set$syncHandle(handle0); + handle = handle0; + if (!file.explicitlyLocked) + t3.add$1(0, file); + t4 = handle; + $async$returnValue = t4; + // goto return + $async$goto = 1; + break; + $async$handler = 2; + // goto after finally + $async$goto = 8; + break; + case 6: + // catch + $async$handler = 5; + $async$exception = $async$errorStack.pop(); + if (J.$eq$(attempt, 6)) + throw A.wrapException(B.VfsException_10); + A.S(attempt); + t4 = attempt; + if (typeof t4 !== "number") { + $async$returnValue = t4.$add(); + // goto return + $async$goto = 1; + break; + } + attempt = t4 + 1; + // goto after finally + $async$goto = 8; + break; + case 5: + // uncaught + // goto rethrow + $async$goto = 2; + break; + case 8: + // after finally + // goto for condition + $async$goto = 3; + break; + case 4: + // after for + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + case 2: + // rethrow + return A._asyncRethrow($async$errorStack.at(-1), $async$completer); + } + }); + return A._asyncStartSync($async$_openForSynchronousAccess$1, $async$completer); + }, + _closeSyncHandleNoThrow$1(handle) { + var exception; + try { + this._closeSyncHandle$1(handle); + } catch (exception) { + } + }, + _closeSyncHandle$1(handle) { + var syncHandle = handle.syncHandle; + if (syncHandle != null) { + handle.syncHandle = null; + this._implicitlyHeldLocks.remove$1(0, handle); + handle.explicitlyLocked = false; + syncHandle.close(); + } + } + }; + A._OpenedFileHandle.prototype = { + set$syncHandle(syncHandle) { + this.syncHandle = A._asJSObjectQ(syncHandle); + } + }; + A.AsynchronousIndexedDbFileSystem.prototype = { + _rangeOverFile$3$endOffsetInclusive$startOffset(fileId, endOffsetInclusive, startOffset) { + var t1 = type$.JSArray_double; + return A._asJSObject(init.G.IDBKeyRange.bound(A._setArrayType([fileId, startOffset], t1), A._setArrayType([fileId, endOffsetInclusive], t1))); + }, + _rangeOverFile$1(fileId) { + return this._rangeOverFile$3$endOffsetInclusive$startOffset(fileId, 9007199254740992, 0); + }, + _rangeOverFile$2$startOffset(fileId, startOffset) { + return this._rangeOverFile$3$endOffsetInclusive$startOffset(fileId, 9007199254740992, startOffset); + }, + open$0() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$self = this, t1, openRequest; + var $async$open$0 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = new A._Future($.Zone__current, type$._Future_JSObject); + openRequest = A._asJSObject(A._asJSObjectQ(init.G.indexedDB).open($async$self._dbName, 1)); + openRequest.onupgradeneeded = A._functionToJS1(new A.AsynchronousIndexedDbFileSystem_open_closure(openRequest)); + new A._SyncCompleter(t1, type$._SyncCompleter_JSObject).complete$1(A.CompleteOpenIdbRequest_completeOrBlocked(openRequest, type$.JSObject)); + $async$goto = 2; + return A._asyncAwait(t1, $async$open$0); + case 2: + // returning from await. + $async$self._indexed_db$_database = $async$result; + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$open$0, $async$completer); + }, + close$0() { + var t1 = this._indexed_db$_database; + if (t1 != null) + t1.close(); + }, + listFiles$0() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.Map_String_int), + $async$returnValue, $async$self = this, row, t1, t2, result, iterator; + var $async$listFiles$0 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + result = A.LinkedHashMap_LinkedHashMap$_empty(type$.String, type$.int); + iterator = new A._CursorReader(A._asJSObject(A._asJSObject(A._asJSObject(A._asJSObject($async$self._indexed_db$_database.transaction("files", "readonly")).objectStore("files")).index("fileName")).openKeyCursor()), type$._CursorReader_JSObject); + case 3: + // while condition + $async$goto = 5; + return A._asyncAwait(iterator.moveNext$0(), $async$listFiles$0); + case 5: + // returning from await. + if (!$async$result) { + // goto after while + $async$goto = 4; + break; + } + row = iterator._cursor; + if (row == null) + row = A.throwExpression(A.StateError$("Await moveNext() first")); + t1 = row.key; + t1.toString; + A._asString(t1); + t2 = row.primaryKey; + t2.toString; + result.$indexSet(0, t1, A._asInt(A._asDouble(t2))); + // goto while condition + $async$goto = 3; + break; + case 4: + // after while + $async$returnValue = result; + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$listFiles$0, $async$completer); + }, + fileIdForPath$1(path) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.nullable_int), + $async$returnValue, $async$self = this, $async$temp1; + var $async$fileIdForPath$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$temp1 = A; + $async$goto = 3; + return A._asyncAwait(A.CompleteIdbRequest_complete(A._asJSObject(A._asJSObject(A._asJSObject(A._asJSObject($async$self._indexed_db$_database.transaction("files", "readonly")).objectStore("files")).index("fileName")).getKey(path)), type$.double), $async$fileIdForPath$1); + case 3: + // returning from await. + $async$returnValue = $async$temp1._asInt($async$result); + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$fileIdForPath$1, $async$completer); + }, + createFile$1(path) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.int), + $async$returnValue, $async$self = this, $async$temp1; + var $async$createFile$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + $async$temp1 = A; + $async$goto = 3; + return A._asyncAwait(A.CompleteIdbRequest_complete(A._asJSObject(A._asJSObject(A._asJSObject($async$self._indexed_db$_database.transaction("files", "readwrite")).objectStore("files")).put({name: path, length: 0})), type$.double), $async$createFile$1); + case 3: + // returning from await. + $async$returnValue = $async$temp1._asInt($async$result); + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$createFile$1, $async$completer); + }, + _readFile$2(transaction, fileId) { + return A.CompleteIdbRequest_complete(A._asJSObject(A._asJSObject(transaction.objectStore("files")).get(fileId)), type$.nullable_JSObject).then$1$1(new A.AsynchronousIndexedDbFileSystem__readFile_closure(fileId), type$.JSObject); + }, + readFully$1(fileId) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.Uint8List), + $async$returnValue, $async$self = this, transaction, blocks, file, result, readOperations, reader, t2, row, t, rowOffset, t1; + var $async$readFully$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $async$self._indexed_db$_database; + t1.toString; + transaction = A._asJSObject(t1.transaction($.$get$AsynchronousIndexedDbFileSystem__storesJs(), "readonly")); + blocks = A._asJSObject(transaction.objectStore("blocks")); + $async$goto = 3; + return A._asyncAwait($async$self._readFile$2(transaction, fileId), $async$readFully$1); + case 3: + // returning from await. + file = $async$result; + t1 = A._asInt(file.length); + result = new Uint8Array(t1); + readOperations = A._setArrayType([], type$.JSArray_Future_void); + reader = new A._CursorReader(A._asJSObject(blocks.openCursor($async$self._rangeOverFile$1(fileId))), type$._CursorReader_JSObject); + t1 = type$.void, t2 = type$.JSArray_nullable_Object; + case 4: + // for condition + $async$goto = 6; + return A._asyncAwait(reader.moveNext$0(), $async$readFully$1); + case 6: + // returning from await. + if (!$async$result) { + // goto after for + $async$goto = 5; + break; + } + row = reader._cursor; + if (row == null) + row = A.throwExpression(A.StateError$("Await moveNext() first")); + t = t2._as(row.key); + if (1 < 0 || 1 >= t.length) { + $async$returnValue = A.ioore(t, 1); + // goto return + $async$goto = 1; + break; + } + rowOffset = A._asInt(A._asDouble(t[1])); + B.JSArray_methods.add$1(readOperations, A.Future_Future$sync(new A.AsynchronousIndexedDbFileSystem_readFully_closure(row, result, rowOffset, Math.min(4096, A._asInt(file.length) - rowOffset)), t1)); + // goto for condition + $async$goto = 4; + break; + case 5: + // after for + $async$goto = 7; + return A._asyncAwait(A.Future_wait(readOperations, t1), $async$readFully$1); + case 7: + // returning from await. + $async$returnValue = result; + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$readFully$1, $async$completer); + }, + _write$2(fileId, writes) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$self = this, transaction, blocks, file, t2, changedOffsets, fileCursor, t1; + var $async$_write$2 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $async$self._indexed_db$_database; + t1.toString; + transaction = A._asJSObject(t1.transaction($.$get$AsynchronousIndexedDbFileSystem__storesJs(), "readwrite")); + blocks = A._asJSObject(transaction.objectStore("blocks")); + $async$goto = 2; + return A._asyncAwait($async$self._readFile$2(transaction, fileId), $async$_write$2); + case 2: + // returning from await. + file = $async$result; + t1 = writes.replacedBlocks; + t2 = A._instanceType(t1)._eval$1("LinkedHashMapKeysIterable<1>"); + changedOffsets = A.List_List$_of(new A.LinkedHashMapKeysIterable(t1, t2), t2._eval$1("Iterable.E")); + B.JSArray_methods.sort$0(changedOffsets); + t1 = A._arrayInstanceType(changedOffsets); + $async$goto = 3; + return A._asyncAwait(A.Future_wait(new A.MappedListIterable(changedOffsets, t1._eval$1("Future<~>(1)")._as(new A.AsynchronousIndexedDbFileSystem__write_closure(new A.AsynchronousIndexedDbFileSystem__write_writeBlock(blocks, fileId), writes)), t1._eval$1("MappedListIterable<1,Future<~>>")), type$.void), $async$_write$2); + case 3: + // returning from await. + $async$goto = writes.newFileLength !== A._asInt(file.length) ? 4 : 5; + break; + case 4: + // then + fileCursor = new A._CursorReader(A._asJSObject(A._asJSObject(transaction.objectStore("files")).openCursor(fileId)), type$._CursorReader_JSObject); + $async$goto = 6; + return A._asyncAwait(fileCursor.moveNext$0(), $async$_write$2); + case 6: + // returning from await. + $async$goto = 7; + return A._asyncAwait(A.CompleteIdbRequest_complete(A._asJSObject(fileCursor.get$current().update({name: A._asString(file.name), length: writes.newFileLength})), type$.nullable_Object), $async$_write$2); + case 7: + // returning from await. + case 5: + // join + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$_write$2, $async$completer); + }, + truncate$2(_, fileId, $length) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$self = this, transaction, files, blocks, file, fileCursor, t1; + var $async$truncate$2 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $async$self._indexed_db$_database; + t1.toString; + transaction = A._asJSObject(t1.transaction($.$get$AsynchronousIndexedDbFileSystem__storesJs(), "readwrite")); + files = A._asJSObject(transaction.objectStore("files")); + blocks = A._asJSObject(transaction.objectStore("blocks")); + $async$goto = 2; + return A._asyncAwait($async$self._readFile$2(transaction, fileId), $async$truncate$2); + case 2: + // returning from await. + file = $async$result; + $async$goto = A._asInt(file.length) > $length ? 3 : 4; + break; + case 3: + // then + $async$goto = 5; + return A._asyncAwait(A.CompleteIdbRequest_complete(A._asJSObject(blocks.delete($async$self._rangeOverFile$2$startOffset(fileId, B.JSInt_methods._tdivFast$1($length, 4096) * 4096 + 1))), type$.nullable_Object), $async$truncate$2); + case 5: + // returning from await. + case 4: + // join + fileCursor = new A._CursorReader(A._asJSObject(files.openCursor(fileId)), type$._CursorReader_JSObject); + $async$goto = 6; + return A._asyncAwait(fileCursor.moveNext$0(), $async$truncate$2); + case 6: + // returning from await. + $async$goto = 7; + return A._asyncAwait(A.CompleteIdbRequest_complete(A._asJSObject(fileCursor.get$current().update({name: A._asString(file.name), length: $length})), type$.nullable_Object), $async$truncate$2); + case 7: + // returning from await. + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$truncate$2, $async$completer); + }, + deleteFile$1(id) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$self = this, transaction, blocksRange, t1; + var $async$deleteFile$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $async$self._indexed_db$_database; + t1.toString; + transaction = A._asJSObject(t1.transaction(A._setArrayType(["files", "blocks"], type$.JSArray_String), "readwrite")); + blocksRange = $async$self._rangeOverFile$3$endOffsetInclusive$startOffset(id, 9007199254740992, 0); + t1 = type$.nullable_Object; + $async$goto = 2; + return A._asyncAwait(A.Future_wait(A._setArrayType([A.CompleteIdbRequest_complete(A._asJSObject(A._asJSObject(transaction.objectStore("blocks")).delete(blocksRange)), t1), A.CompleteIdbRequest_complete(A._asJSObject(A._asJSObject(transaction.objectStore("files")).delete(id)), t1)], type$.JSArray_Future_void), type$.void), $async$deleteFile$1); + case 2: + // returning from await. + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$deleteFile$1, $async$completer); + } + }; + A.AsynchronousIndexedDbFileSystem_open_closure.prototype = { + call$1(change) { + var database; + A._asJSObject(change); + database = A._asJSObject(this.openRequest.result); + if (A._asInt(change.oldVersion) === 0) { + A._asJSObject(A._asJSObject(database.createObjectStore("files", {autoIncrement: true})).createIndex("fileName", "name", {unique: true})); + A._asJSObject(database.createObjectStore("blocks")); + } + }, + $signature: 10 + }; + A.AsynchronousIndexedDbFileSystem__readFile_closure.prototype = { + call$1(value) { + A._asJSObjectQ(value); + if (value == null) + throw A.wrapException(A.ArgumentError$value(this.fileId, "fileId", "File not found in database")); + else + return value; + }, + $signature: 66 + }; + A.AsynchronousIndexedDbFileSystem_readFully_closure.prototype = { + call$0() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$self = this, t1, data; + var $async$call$0 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $async$self.row; + $async$goto = A.JSAnyUtilityExtension_instanceOfString(t1.value, "Blob") ? 2 : 4; + break; + case 2: + // then + $async$goto = 5; + return A._asyncAwait(A.ReadBlob_byteBuffer(A._asJSObject(t1.value)), $async$call$0); + case 5: + // returning from await. + // goto join + $async$goto = 3; + break; + case 4: + // else + $async$result = type$.NativeArrayBuffer._as(t1.value); + case 3: + // join + data = $async$result; + B.NativeUint8List_methods.setAll$2($async$self.result, $async$self.rowOffset, J.asUint8List$2$x(data, 0, $async$self.length)); + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$call$0, $async$completer); + }, + $signature: 2 + }; + A.AsynchronousIndexedDbFileSystem__write_writeBlock.prototype = { + call$2(blockStart, block) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$self = this, t1, _this, t2, cursor, value, t3; + var $async$call$2 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $async$self.blocks; + _this = $async$self.fileId; + t2 = type$.JSArray_double; + $async$goto = 2; + return A._asyncAwait(A.CompleteIdbRequest_complete(A._asJSObject(t1.openCursor(A._asJSObject(init.G.IDBKeyRange.only(A._setArrayType([_this, blockStart], t2))))), type$.nullable_JSObject), $async$call$2); + case 2: + // returning from await. + cursor = $async$result; + value = type$.NativeArrayBuffer._as(B.NativeUint8List_methods.get$buffer(block)); + t3 = type$.nullable_Object; + $async$goto = cursor == null ? 3 : 5; + break; + case 3: + // then + $async$goto = 6; + return A._asyncAwait(A.CompleteIdbRequest_complete(A._asJSObject(t1.put(value, A._setArrayType([_this, blockStart], t2))), t3), $async$call$2); + case 6: + // returning from await. + // goto join + $async$goto = 4; + break; + case 5: + // else + $async$goto = 7; + return A._asyncAwait(A.CompleteIdbRequest_complete(A._asJSObject(cursor.update(value)), t3), $async$call$2); + case 7: + // returning from await. + case 4: + // join + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$call$2, $async$completer); + }, + $signature: 67 + }; + A.AsynchronousIndexedDbFileSystem__write_closure.prototype = { + call$1(offset) { + var t1; + A._asInt(offset); + t1 = this.writes.replacedBlocks.$index(0, offset); + t1.toString; + return this.writeBlock.call$2(offset, t1); + }, + $signature: 68 + }; + A._FileWriteRequest.prototype = { + _updateBlock$3(blockOffset, offsetInBlock, data) { + B.NativeUint8List_methods.setAll$2(this.replacedBlocks.putIfAbsent$2(blockOffset, new A._FileWriteRequest__updateBlock_closure(this, blockOffset)), offsetInBlock, data); + }, + addWrite$2(offset, data) { + var t1, offsetInData, offsetInFile, t2, offsetInBlock, t3, bytesToWrite, offsetInData0; + for (t1 = data.length, offsetInData = 0; offsetInData < t1; offsetInData = offsetInData0) { + offsetInFile = offset + offsetInData; + t2 = B.JSInt_methods._tdivFast$1(offsetInFile, 4096); + offsetInBlock = B.JSInt_methods.$mod(offsetInFile, 4096); + t3 = t1 - offsetInData; + if (offsetInBlock !== 0) + bytesToWrite = Math.min(4096 - offsetInBlock, t3); + else { + bytesToWrite = Math.min(4096, t3); + offsetInBlock = 0; + } + offsetInData0 = offsetInData + bytesToWrite; + this._updateBlock$3(t2 * 4096, offsetInBlock, J.asUint8List$2$x(B.NativeUint8List_methods.get$buffer(data), data.byteOffset + offsetInData, bytesToWrite)); + } + this.newFileLength = Math.max(this.newFileLength, offset + t1); + } + }; + A._FileWriteRequest__updateBlock_closure.prototype = { + call$0() { + var block = new Uint8Array(4096), + t1 = this.$this.originalContent, + t2 = t1.length, + t3 = this.blockOffset; + if (t2 > t3) + B.NativeUint8List_methods.setAll$2(block, 0, J.asUint8List$2$x(B.NativeUint8List_methods.get$buffer(t1), t1.byteOffset + t3, Math.min(4096, t2 - t3))); + return block; + }, + $signature: 69 + }; + A._OffsetAndBuffer.prototype = {}; + A.IndexedDbFileSystem.prototype = { + _submitWork$1(work) { + var _this = this; + if (_this._isClosing || _this._asynchronous._indexed_db$_database == null) + A.throwExpression(A.VfsException$(10)); + if (work.insertInto$1(_this._pendingWork)) { + _this._startWorkingIfNeeded$0(); + return work.completer.future; + } else + return A.Future_Future$value(null, type$.void); + }, + _startWorkingIfNeeded$0() { + var t1, item, _this = this; + if (_this._currentWorkItem == null && !_this._pendingWork.get$isEmpty(0)) { + t1 = _this._pendingWork; + item = _this._currentWorkItem = t1.get$first(0); + t1.remove$1(0, item); + item.completer.complete$1(A.Future_Future(item.get$run(), type$.void).whenComplete$1(new A.IndexedDbFileSystem__startWorkingIfNeeded_closure(_this))); + } + }, + close$0() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$returnValue, $async$self = this, result, t1; + var $async$close$0 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + if (!$async$self._isClosing) { + result = $async$self._submitWork$1(new A._FunctionWorkItem(type$.void_Function._as($async$self._asynchronous.get$close()), new A._SyncCompleter(new A._Future($.Zone__current, type$._Future_void), type$._SyncCompleter_void))); + $async$self._isClosing = true; + $async$returnValue = result; + // goto return + $async$goto = 1; + break; + } else { + t1 = $async$self._pendingWork; + if (!t1.get$isEmpty(0)) { + $async$returnValue = t1.get$last(0).completer.future; + // goto return + $async$goto = 1; + break; + } + } + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$close$0, $async$completer); + }, + _fileId$1(path) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.int), + $async$returnValue, $async$self = this, t2, t1; + var $async$_fileId$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $async$self._knownFileIds; + $async$goto = t1.containsKey$1(path) ? 3 : 5; + break; + case 3: + // then + t1 = t1.$index(0, path); + t1.toString; + $async$returnValue = t1; + // goto return + $async$goto = 1; + break; + // goto join + $async$goto = 4; + break; + case 5: + // else + $async$goto = 6; + return A._asyncAwait($async$self._asynchronous.fileIdForPath$1(path), $async$_fileId$1); + case 6: + // returning from await. + t2 = $async$result; + t2.toString; + t1.$indexSet(0, path, t2); + $async$returnValue = t2; + // goto return + $async$goto = 1; + break; + case 4: + // join + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$_fileId$1, $async$completer); + }, + _readFiles$0() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$self = this, t2, t3, t4, t5, $name, fileId, buffer, data, t6, t1, rawFiles; + var $async$_readFiles$0 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $async$self._asynchronous; + $async$goto = 2; + return A._asyncAwait(t1.listFiles$0(), $async$_readFiles$0); + case 2: + // returning from await. + rawFiles = $async$result; + $async$self._knownFileIds.addAll$1(0, rawFiles); + t2 = rawFiles.get$entries(), t2 = t2.get$iterator(t2), t3 = $async$self._memory.fileData, t4 = type$.Uint8Buffer._eval$1("Iterable"); + case 3: + // for condition + if (!t2.moveNext$0()) { + // goto after for + $async$goto = 4; + break; + } + t5 = t2.get$current(); + $name = t5.key; + fileId = t5.value; + buffer = new A.Uint8Buffer(new Uint8Array(0), 0); + $async$goto = 5; + return A._asyncAwait(t1.readFully$1(fileId), $async$_readFiles$0); + case 5: + // returning from await. + data = $async$result; + t5 = data.length; + buffer.set$length(0, t5); + t4._as(data); + t6 = buffer._typed_buffer$_length; + if (t5 > t6) + A.throwExpression(A.RangeError$range(t5, 0, t6, null, null)); + B.NativeUint8List_methods.setRange$4(buffer._typed_buffer$_buffer, 0, t5, data, 0); + t3.$indexSet(0, $name, buffer); + // goto for condition + $async$goto = 3; + break; + case 4: + // after for + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$_readFiles$0, $async$completer); + }, + xAccess$2(path, flags) { + return this._memory.fileData.containsKey$1(path) ? 1 : 0; + }, + xDelete$2(path, syncDir) { + var _this = this; + _this._memory.fileData.remove$1(0, path); + if (!_this._inMemoryOnlyFiles.remove$1(0, path)) + _this._submitWork$1(new A._DeleteFileWorkItem(_this, path, new A._SyncCompleter(new A._Future($.Zone__current, type$._Future_void), type$._SyncCompleter_void))); + }, + xFullPathName$1(path) { + return $.$get$url().normalize$1("/" + path); + }, + xOpen$2(path, flags) { + var t1, t2, inMemoryFile, _this = this, + pathStr = path.path; + if (pathStr == null) + pathStr = A.GenerateFilename_randomFileName(_this.random, "/"); + t1 = _this._memory; + t2 = t1.fileData.containsKey$1(pathStr) ? 1 : 0; + inMemoryFile = t1.xOpen$2(new A.Sqlite3Filename(pathStr), flags); + if (t2 === 0) + if ((flags & 8) !== 0) + _this._inMemoryOnlyFiles.add$1(0, pathStr); + else + _this._submitWork$1(new A._CreateFileWorkItem(_this, pathStr, new A._SyncCompleter(new A._Future($.Zone__current, type$._Future_void), type$._SyncCompleter_void))); + return new A._Record_2_file_outFlags(new A._IndexedDbFile(_this, inMemoryFile._0, pathStr), 0); + }, + xSleep$1(duration) { + } + }; + A.IndexedDbFileSystem__startWorkingIfNeeded_closure.prototype = { + call$0() { + var t1 = this.$this; + t1._currentWorkItem = null; + t1._startWorkingIfNeeded$0(); + }, + $signature: 6 + }; + A._IndexedDbFile.prototype = { + xRead$2(target, fileOffset) { + this.memoryFile.xRead$2(target, fileOffset); + }, + get$xDeviceCharacteristics() { + return 0; + }, + xCheckReservedLock$0() { + return this.memoryFile._lockMode >= 2 ? 1 : 0; + }, + xClose$0() { + }, + xFileSize$0() { + return this.memoryFile.xFileSize$0(); + }, + xLock$1(mode) { + this.memoryFile._lockMode = mode; + return null; + }, + xSync$1(flags) { + }, + xTruncate$1(size) { + var _this = this, + t1 = _this.vfs; + if (t1._isClosing || t1._asynchronous._indexed_db$_database == null) + A.throwExpression(A.VfsException$(10)); + _this.memoryFile.xTruncate$1(size); + if (!t1._inMemoryOnlyFiles.contains$1(0, _this.path)) + t1._submitWork$1(new A._FunctionWorkItem(type$.void_Function._as(new A._IndexedDbFile_xTruncate_closure(_this, size)), new A._SyncCompleter(new A._Future($.Zone__current, type$._Future_void), type$._SyncCompleter_void))); + }, + xUnlock$1(mode) { + this.memoryFile._lockMode = mode; + return null; + }, + xWrite$2(buffer, fileOffset) { + var t2, previousContent, previousList, copy, t3, t4, _this = this, + t1 = _this.vfs; + if (t1._isClosing || t1._asynchronous._indexed_db$_database == null) + A.throwExpression(A.VfsException$(10)); + t2 = _this.path; + if (t1._inMemoryOnlyFiles.contains$1(0, t2)) { + _this.memoryFile.xWrite$2(buffer, fileOffset); + return; + } + previousContent = t1._memory.fileData.$index(0, t2); + if (previousContent == null) + previousContent = new A.Uint8Buffer(new Uint8Array(0), 0); + previousList = J.asUint8List$2$x(B.NativeUint8List_methods.get$buffer(previousContent._typed_buffer$_buffer), 0, previousContent._typed_buffer$_length); + _this.memoryFile.xWrite$2(buffer, fileOffset); + copy = new Uint8Array(buffer.length); + B.NativeUint8List_methods.setAll$2(copy, 0, buffer); + t3 = A._setArrayType([], type$.JSArray__OffsetAndBuffer); + t4 = $.Zone__current; + B.JSArray_methods.add$1(t3, new A._OffsetAndBuffer(fileOffset, copy)); + t1._submitWork$1(new A._WriteFileWorkItem(t1, t2, previousList, t3, new A._SyncCompleter(new A._Future(t4, type$._Future_void), type$._SyncCompleter_void))); + }, + $isVirtualFileSystemFile: 1 + }; + A._IndexedDbFile_xTruncate_closure.prototype = { + call$0() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$returnValue, $async$self = this, t1, t2, $async$temp1; + var $async$call$0 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $async$self.$this; + t2 = t1.vfs; + $async$temp1 = t2._asynchronous; + $async$goto = 3; + return A._asyncAwait(t2._fileId$1(t1.path), $async$call$0); + case 3: + // returning from await. + $async$returnValue = $async$temp1.truncate$2(0, $async$result, $async$self.size); + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$call$0, $async$completer); + }, + $signature: 2 + }; + A._IndexedDbWorkItem.prototype = { + insertInto$1(pending) { + type$.LinkedList__IndexedDbWorkItem._as(pending); + pending.$ti._precomputed1._as(this); + pending._insertBefore$3$updateFirst(pending._first, this, false); + return true; + } + }; + A._FunctionWorkItem.prototype = { + run$0() { + return this.work.call$0(); + } + }; + A._DeleteFileWorkItem.prototype = { + insertInto$1(pending) { + var current, t1, previous, t2; + type$.LinkedList__IndexedDbWorkItem._as(pending); + if (!pending.get$isEmpty(0)) { + current = pending.get$last(0); + for (t1 = this.path; current != null;) + if (current instanceof A._DeleteFileWorkItem) + if (current.path === t1) + return false; + else + current = current.get$previous(); + else if (current instanceof A._WriteFileWorkItem) { + previous = current.get$previous(); + if (current.path === t1) { + t2 = current._list; + t2.toString; + t2._unlink$1(A._instanceType(current)._eval$1("LinkedListEntry.E")._as(current)); + } + current = previous; + } else if (current instanceof A._CreateFileWorkItem) { + if (current.path === t1) { + t1 = current._list; + t1.toString; + t1._unlink$1(A._instanceType(current)._eval$1("LinkedListEntry.E")._as(current)); + return false; + } + current = current.get$previous(); + } else + break; + } + pending.$ti._precomputed1._as(this); + pending._insertBefore$3$updateFirst(pending._first, this, false); + return true; + }, + run$0() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$self = this, t1, t2, id; + var $async$run$0 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $async$self.fileSystem; + t2 = $async$self.path; + $async$goto = 2; + return A._asyncAwait(t1._fileId$1(t2), $async$run$0); + case 2: + // returning from await. + id = $async$result; + t1._knownFileIds.remove$1(0, t2); + $async$goto = 3; + return A._asyncAwait(t1._asynchronous.deleteFile$1(id), $async$run$0); + case 3: + // returning from await. + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$run$0, $async$completer); + } + }; + A._CreateFileWorkItem.prototype = { + run$0() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$self = this, t1, t2, $async$temp1, $async$temp2; + var $async$run$0 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $async$self.fileSystem; + t2 = $async$self.path; + $async$temp1 = t1._knownFileIds; + $async$temp2 = t2; + $async$goto = 2; + return A._asyncAwait(t1._asynchronous.createFile$1(t2), $async$run$0); + case 2: + // returning from await. + $async$temp1.$indexSet(0, $async$temp2, $async$result); + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$run$0, $async$completer); + } + }; + A._WriteFileWorkItem.prototype = { + insertInto$1(pending) { + var current, t1; + type$.LinkedList__IndexedDbWorkItem._as(pending); + current = pending._collection$_length === 0 ? null : pending.get$last(0); + for (t1 = this.path; current != null;) + if (current instanceof A._WriteFileWorkItem) + if (current.path === t1) { + B.JSArray_methods.addAll$1(current.writes, this.writes); + return false; + } else + current = current.get$previous(); + else if (current instanceof A._CreateFileWorkItem) { + if (current.path === t1) + break; + current = current.get$previous(); + } else + break; + pending.$ti._precomputed1._as(this); + pending._insertBefore$3$updateFirst(pending._first, this, false); + return true; + }, + run$0() { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.void), + $async$self = this, t2, _i, write, t1, request, $async$temp1; + var $async$run$0 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = $async$self.originalContent; + request = new A._FileWriteRequest(t1, A.LinkedHashMap_LinkedHashMap$_empty(type$.int, type$.Uint8List), t1.length); + for (t1 = $async$self.writes, t2 = t1.length, _i = 0; _i < t1.length; t1.length === t2 || (0, A.throwConcurrentModificationError)(t1), ++_i) { + write = t1[_i]; + request.addWrite$2(write.offset, write.buffer); + } + t1 = $async$self.fileSystem; + $async$temp1 = t1._asynchronous; + $async$goto = 3; + return A._asyncAwait(t1._fileId$1($async$self.path), $async$run$0); + case 3: + // returning from await. + $async$goto = 2; + return A._asyncAwait($async$temp1._write$2($async$result, request), $async$run$0); + case 2: + // returning from await. + // implicit return + return A._asyncReturn(null, $async$completer); + } + }); + return A._asyncStartSync($async$run$0, $async$completer); + } + }; + A.FileType.prototype = { + _enumToString$0() { + return "FileType." + this._name; + } + }; + A.SimpleOpfsFileSystem.prototype = { + _markExists$2(type, exists) { + var t1 = this._existsList, + t2 = type.index, + t3 = exists ? 1 : 0; + t1.$flags & 2 && A.throwUnsupportedOperation(t1); + if (!(t2 < t1.length)) + return A.ioore(t1, t2); + t1[t2] = t3; + A.FileSystemSyncAccessHandleApi_writeDart(this._metaHandle, t1, {at: 0}); + }, + xAccess$2(path, flags) { + var t1, t2, + type = $.$get$FileType_byName().$index(0, path); + if (type == null) + return this._simple_opfs$_memory.fileData.containsKey$1(path) ? 1 : 0; + else { + t1 = this._existsList; + A.FileSystemSyncAccessHandleApi_readDart(this._metaHandle, t1, {at: 0}); + t2 = type.index; + if (!(t2 < t1.length)) + return A.ioore(t1, t2); + return t1[t2]; + } + }, + xDelete$2(path, syncDir) { + var type = $.$get$FileType_byName().$index(0, path); + if (type == null) { + this._simple_opfs$_memory.fileData.remove$1(0, path); + return null; + } else + this._markExists$2(type, false); + }, + xFullPathName$1(path) { + return $.$get$url().normalize$1("/" + path); + }, + xOpen$2(path, flags) { + var recognized, t1, t2, _this = this, + pathStr = path.path; + if (pathStr == null) + return _this._simple_opfs$_memory.xOpen$2(path, flags); + recognized = $.$get$FileType_byName().$index(0, pathStr); + if (recognized == null) + return _this._simple_opfs$_memory.xOpen$2(path, flags); + t1 = _this._existsList; + A.FileSystemSyncAccessHandleApi_readDart(_this._metaHandle, t1, {at: 0}); + t2 = recognized.index; + if (!(t2 < t1.length)) + return A.ioore(t1, t2); + t2 = t1[t2]; + t1 = _this._files.$index(0, recognized); + t1.toString; + if (t2 === 0) + if ((flags & 4) !== 0) { + t1.truncate(0); + _this._markExists$2(recognized, true); + } else + throw A.wrapException(B.VfsException_14); + return new A._Record_2_file_outFlags(new A._SimpleOpfsFile(_this, recognized, t1, (flags & 8) !== 0), 0); + }, + xSleep$1(duration) { + }, + close$0() { + this._metaHandle.close(); + for (var t1 = this._files, t1 = new A.LinkedHashMapValueIterator(t1, t1.__js_helper$_modifications, t1.__js_helper$_first, A._instanceType(t1)._eval$1("LinkedHashMapValueIterator<2>")); t1.moveNext$0();) + t1.__js_helper$_current.close(); + } + }; + A.SimpleOpfsFileSystem_inDirectory_open.prototype = { + call$1($name) { + var $async$goto = 0, + $async$completer = A._makeAsyncAwaitCompleter(type$.JSObject), + $async$returnValue, $async$self = this, t1, syncHandlePromise, $async$temp1; + var $async$call$1 = A._wrapJsFunctionForAsync(function($async$errorCode, $async$result) { + if ($async$errorCode === 1) + return A._asyncRethrow($async$result, $async$completer); + for (;;) + switch ($async$goto) { + case 0: + // Function start + t1 = type$.JSObject; + $async$temp1 = A; + $async$goto = 3; + return A._asyncAwait(A.promiseToFuture(A._asJSObject($async$self.root.getFileHandle($name, {create: true})), t1), $async$call$1); + case 3: + // returning from await. + syncHandlePromise = $async$temp1._asJSObject($async$result.createSyncAccessHandle()); + $async$goto = 4; + return A._asyncAwait(A.promiseToFuture(syncHandlePromise, t1), $async$call$1); + case 4: + // returning from await. + $async$returnValue = $async$result; + // goto return + $async$goto = 1; + break; + case 1: + // return + return A._asyncReturn($async$returnValue, $async$completer); + } + }); + return A._asyncStartSync($async$call$1, $async$completer); + }, + $signature: 70 + }; + A._SimpleOpfsFile.prototype = { + readInto$2(buffer, offset) { + return A.FileSystemSyncAccessHandleApi_readDart(this.syncHandle, buffer, {at: offset}); + }, + xCheckReservedLock$0() { + return this._simple_opfs$_lockMode >= 2 ? 1 : 0; + }, + xClose$0() { + var _this = this; + _this.syncHandle.flush(); + if (_this.deleteOnClose) + _this.vfs._markExists$2(_this.type, false); + }, + xFileSize$0() { + return A._asInt(this.syncHandle.getSize()); + }, + xLock$1(mode) { + this._simple_opfs$_lockMode = mode; + }, + xSync$1(flags) { + this.syncHandle.flush(); + }, + xTruncate$1(size) { + this.syncHandle.truncate(size); + }, + xUnlock$1(mode) { + this._simple_opfs$_lockMode = mode; + }, + xWrite$2(buffer, fileOffset) { + if (A.FileSystemSyncAccessHandleApi_writeDart(this.syncHandle, buffer, {at: fileOffset}) < buffer.length) + throw A.wrapException(B.VfsException_778); + } + }; + A.WasmBindings.prototype = { + allocateBytes$2$additionalLength(bytes, additionalLength) { + var t1, ptr, t2; + type$.List_int._as(bytes); + t1 = J.getInterceptor$asx(bytes); + ptr = A._asInt(this.sqlite3.dart_sqlite3_malloc(t1.get$length(bytes) + additionalLength)); + t2 = A.NativeUint8List_NativeUint8List$view(type$.NativeArrayBuffer._as(this.memory.buffer), 0, null); + B.NativeUint8List_methods.setRange$3(t2, ptr, ptr + t1.get$length(bytes), bytes); + B.NativeUint8List_methods.fillRange$3(t2, ptr + t1.get$length(bytes), ptr + t1.get$length(bytes) + additionalLength, 0); + return ptr; + }, + allocateBytes$1(bytes) { + return this.allocateBytes$2$additionalLength(bytes, 0); + }, + sqlite3_initialize$0() { + var t1, + _0_0 = type$.nullable_JavaScriptFunction._as(this.sqlite3.sqlite3_initialize); + $label0$0: { + if (_0_0 != null) { + t1 = A._asInt(A._asDouble(_0_0.call(null))); + break $label0$0; + } + t1 = 0; + break $label0$0; + } + return t1; + } + }; + A._InjectedValues.prototype = { + _InjectedValues$0() { + var t1, t2, _this = this, + memory = A._asJSObject(new init.G.WebAssembly.Memory({initial: 16})); + _this.___InjectedValues_memory_A = memory; + t1 = type$.String; + t2 = type$.JSObject; + _this.___InjectedValues_injectedValues_A = type$.Map_of_String_and_Map_String_JSObject._as(A.LinkedHashMap_LinkedHashMap$_literal(["env", A.LinkedHashMap_LinkedHashMap$_literal(["memory", memory], t1, t2), "dart", A.LinkedHashMap_LinkedHashMap$_literal(["error_log", A._functionToJS1(new A._InjectedValues_closure(memory)), "xOpen", A._functionToJS5(new A._InjectedValues_closure0(_this, memory)), "xDelete", A._functionToJS3(new A._InjectedValues_closure1(_this, memory)), "xAccess", A._functionToJS4(new A._InjectedValues_closure2(_this, memory)), "xFullPathname", A._functionToJS4(new A._InjectedValues_closure3(_this, memory)), "xRandomness", A._functionToJS3(new A._InjectedValues_closure4(_this, memory)), "xSleep", A._functionToJS2(new A._InjectedValues_closure5(_this)), "xCurrentTimeInt64", A._functionToJS2(new A._InjectedValues_closure6(_this, memory)), "xDeviceCharacteristics", A._functionToJS1(new A._InjectedValues_closure7(_this)), "xClose", A._functionToJS1(new A._InjectedValues_closure8(_this)), "xRead", A._functionToJS4(new A._InjectedValues_closure9(_this, memory)), "xWrite", A._functionToJS4(new A._InjectedValues_closure10(_this, memory)), "xTruncate", A._functionToJS2(new A._InjectedValues_closure11(_this)), "xSync", A._functionToJS2(new A._InjectedValues_closure12(_this)), "xFileSize", A._functionToJS2(new A._InjectedValues_closure13(_this, memory)), "xLock", A._functionToJS2(new A._InjectedValues_closure14(_this)), "xUnlock", A._functionToJS2(new A._InjectedValues_closure15(_this)), "xCheckReservedLock", A._functionToJS2(new A._InjectedValues_closure16(_this, memory)), "function_xFunc", A._functionToJS3(new A._InjectedValues_closure17(_this)), "function_xStep", A._functionToJS3(new A._InjectedValues_closure18(_this)), "function_xInverse", A._functionToJS3(new A._InjectedValues_closure19(_this)), "function_xFinal", A._functionToJS1(new A._InjectedValues_closure20(_this)), "function_xValue", A._functionToJS1(new A._InjectedValues_closure21(_this)), "function_forget", A._functionToJS1(new A._InjectedValues_closure22(_this)), "function_compare", A._functionToJS5(new A._InjectedValues_closure23(_this, memory)), "function_hook", A._functionToJS5(new A._InjectedValues_closure24(_this, memory)), "function_commit_hook", A._functionToJS1(new A._InjectedValues_closure25(_this)), "function_rollback_hook", A._functionToJS1(new A._InjectedValues_closure26(_this)), "localtime", A._functionToJS2(new A._InjectedValues_closure27(memory)), "changeset_apply_filter", A._functionToJS2(new A._InjectedValues_closure28(_this)), "changeset_apply_conflict", A._functionToJS3(new A._InjectedValues_closure29(_this))], t1, t2)], t1, type$.Map_String_JSObject)); + } + }; + A._InjectedValues_closure.prototype = { + call$1(ptr) { + A.print("[sqlite3] " + A.WrappedMemory_readString(this.memory, A._asInt(ptr), null)); + }, + $signature: 11 + }; + A._InjectedValues_closure0.prototype = { + call$5(vfsId, zName, dartFdPtr, flags, pOutFlags) { + var t1, t2, t3; + A._asInt(vfsId); + A._asInt(zName); + A._asInt(dartFdPtr); + A._asInt(flags); + A._asInt(pOutFlags); + t1 = this.$this; + t2 = t1.callbacks.registeredVfs.$index(0, vfsId); + t2.toString; + t3 = this.memory; + return A._runVfs(new A._InjectedValues__closure13(t1, t2, new A.Sqlite3Filename(A.WrappedMemory_readNullableString(t3, zName, null)), flags, t3, dartFdPtr, pOutFlags)); + }, + $signature: 29 + }; + A._InjectedValues__closure13.prototype = { + call$0() { + var t3, t4, t5, _this = this, + result = _this.vfs.xOpen$2(_this.path, _this.flags), + t1 = _this.$this.callbacks, + t2 = t1._id++; + t1.openedFiles.$indexSet(0, t2, result._0); + t1 = _this.memory; + t3 = type$.NativeArrayBuffer; + t4 = A.NativeInt32List_NativeInt32List$view(t3._as(t1.buffer), 0, null); + t5 = B.JSInt_methods._shrOtherPositive$1(_this.dartFdPtr, 2); + t4.$flags & 2 && A.throwUnsupportedOperation(t4); + if (!(t5 < t4.length)) + return A.ioore(t4, t5); + t4[t5] = t2; + t2 = _this.pOutFlags; + if (t2 !== 0) { + t1 = A.NativeInt32List_NativeInt32List$view(t3._as(t1.buffer), 0, null); + t2 = B.JSInt_methods._shrOtherPositive$1(t2, 2); + t1.$flags & 2 && A.throwUnsupportedOperation(t1); + if (!(t2 < t1.length)) + return A.ioore(t1, t2); + t1[t2] = result._1; + } + }, + $signature: 0 + }; + A._InjectedValues_closure1.prototype = { + call$3(vfsId, zName, syncDir) { + var t1; + A._asInt(vfsId); + A._asInt(zName); + A._asInt(syncDir); + t1 = this.$this.callbacks.registeredVfs.$index(0, vfsId); + t1.toString; + return A._runVfs(new A._InjectedValues__closure12(t1, A.WrappedMemory_readString(this.memory, zName, null), syncDir)); + }, + $signature: 21 + }; + A._InjectedValues__closure12.prototype = { + call$0() { + return this.vfs.xDelete$2(this.path, this.syncDir); + }, + $signature: 0 + }; + A._InjectedValues_closure2.prototype = { + call$4(vfsId, zName, flags, pResOut) { + var t1, t2; + A._asInt(vfsId); + A._asInt(zName); + A._asInt(flags); + A._asInt(pResOut); + t1 = this.$this.callbacks.registeredVfs.$index(0, vfsId); + t1.toString; + t2 = this.memory; + return A._runVfs(new A._InjectedValues__closure11(t1, A.WrappedMemory_readString(t2, zName, null), flags, t2, pResOut)); + }, + $signature: 30 + }; + A._InjectedValues__closure11.prototype = { + call$0() { + var _this = this, + res = _this.vfs.xAccess$2(_this.path, _this.flags), + t1 = A.NativeInt32List_NativeInt32List$view(type$.NativeArrayBuffer._as(_this.memory.buffer), 0, null), + t2 = B.JSInt_methods._shrOtherPositive$1(_this.pResOut, 2); + t1.$flags & 2 && A.throwUnsupportedOperation(t1); + if (!(t2 < t1.length)) + return A.ioore(t1, t2); + t1[t2] = res; + }, + $signature: 0 + }; + A._InjectedValues_closure3.prototype = { + call$4(vfsId, zName, nOut, zOut) { + var t1, t2; + A._asInt(vfsId); + A._asInt(zName); + A._asInt(nOut); + A._asInt(zOut); + t1 = this.$this.callbacks.registeredVfs.$index(0, vfsId); + t1.toString; + t2 = this.memory; + return A._runVfs(new A._InjectedValues__closure10(t1, A.WrappedMemory_readString(t2, zName, null), nOut, t2, zOut)); + }, + $signature: 30 + }; + A._InjectedValues__closure10.prototype = { + call$0() { + var t2, t3, _this = this, + encoded = B.C_Utf8Encoder.convert$1(_this.vfs.xFullPathName$1(_this.path)), + t1 = encoded.length; + if (t1 > _this.nOut) + throw A.wrapException(A.VfsException$(14)); + t2 = A.NativeUint8List_NativeUint8List$view(type$.NativeArrayBuffer._as(_this.memory.buffer), 0, null); + t3 = _this.zOut; + B.NativeUint8List_methods.setAll$2(t2, t3, encoded); + t1 = t3 + t1; + t2.$flags & 2 && A.throwUnsupportedOperation(t2); + if (!(t1 >= 0 && t1 < t2.length)) + return A.ioore(t2, t1); + t2[t1] = 0; + }, + $signature: 0 + }; + A._InjectedValues_closure4.prototype = { + call$3(vfsId, nByte, zOut) { + A._asInt(vfsId); + A._asInt(nByte); + return A._runVfs(new A._InjectedValues__closure9(this.memory, A._asInt(zOut), nByte, this.$this.callbacks.registeredVfs.$index(0, vfsId))); + }, + $signature: 21 + }; + A._InjectedValues__closure9.prototype = { + call$0() { + var _this = this, + target = A.NativeUint8List_NativeUint8List$view(type$.NativeArrayBuffer._as(_this.memory.buffer), _this.zOut, _this.nByte), + t1 = _this.vfs; + if (t1 != null) + A.BaseVirtualFileSystem_generateRandomness(target, t1.random); + else + return A.BaseVirtualFileSystem_generateRandomness(target, null); + }, + $signature: 0 + }; + A._InjectedValues_closure5.prototype = { + call$2(vfsId, micros) { + var t1; + A._asInt(vfsId); + A._asInt(micros); + t1 = this.$this.callbacks.registeredVfs.$index(0, vfsId); + t1.toString; + return A._runVfs(new A._InjectedValues__closure8(t1, micros)); + }, + $signature: 4 + }; + A._InjectedValues__closure8.prototype = { + call$0() { + this.vfs.xSleep$1(A.Duration$(this.micros, 0)); + }, + $signature: 0 + }; + A._InjectedValues_closure6.prototype = { + call$2(vfsId, target) { + var t1; + A._asInt(vfsId); + A._asInt(target); + this.$this.callbacks.registeredVfs.$index(0, vfsId).toString; + t1 = type$.JavaScriptBigInt._as(init.G.BigInt(Date.now())); + A.JSObjectUnsafeUtilExtension__callMethod(A.NativeByteData_NativeByteData$view(type$.NativeArrayBuffer._as(this.memory.buffer), 0, null), "setBigInt64", target, t1, true, null); + }, + $signature: 75 + }; + A._InjectedValues_closure7.prototype = { + call$1(fd) { + return this.$this.callbacks.openedFiles.$index(0, A._asInt(fd)).get$xDeviceCharacteristics(); + }, + $signature: 13 + }; + A._InjectedValues_closure8.prototype = { + call$1(fd) { + var t1, t2; + A._asInt(fd); + t1 = this.$this; + t2 = t1.callbacks.openedFiles.$index(0, fd); + t2.toString; + return A._runVfs(new A._InjectedValues__closure7(t1, t2, fd)); + }, + $signature: 13 + }; + A._InjectedValues__closure7.prototype = { + call$0() { + this.file.xClose$0(); + this.$this.callbacks.openedFiles.remove$1(0, this.fd); + }, + $signature: 0 + }; + A._InjectedValues_closure9.prototype = { + call$4(fd, target, amount, offset) { + var t1; + A._asInt(fd); + A._asInt(target); + A._asInt(amount); + type$.JavaScriptBigInt._as(offset); + t1 = this.$this.callbacks.openedFiles.$index(0, fd); + t1.toString; + return A._runVfs(new A._InjectedValues__closure6(t1, this.memory, target, amount, offset)); + }, + $signature: 27 + }; + A._InjectedValues__closure6.prototype = { + call$0() { + var _this = this; + _this.file.xRead$2(A.NativeUint8List_NativeUint8List$view(type$.NativeArrayBuffer._as(_this.memory.buffer), _this.target, _this.amount), A._asInt(A._asDouble(init.G.Number(_this.offset)))); + }, + $signature: 0 + }; + A._InjectedValues_closure10.prototype = { + call$4(fd, source, amount, offset) { + var t1; + A._asInt(fd); + A._asInt(source); + A._asInt(amount); + type$.JavaScriptBigInt._as(offset); + t1 = this.$this.callbacks.openedFiles.$index(0, fd); + t1.toString; + return A._runVfs(new A._InjectedValues__closure5(t1, this.memory, source, amount, offset)); + }, + $signature: 27 + }; + A._InjectedValues__closure5.prototype = { + call$0() { + var _this = this; + _this.file.xWrite$2(A.NativeUint8List_NativeUint8List$view(type$.NativeArrayBuffer._as(_this.memory.buffer), _this.source, _this.amount), A._asInt(A._asDouble(init.G.Number(_this.offset)))); + }, + $signature: 0 + }; + A._InjectedValues_closure11.prototype = { + call$2(fd, size) { + var t1; + A._asInt(fd); + type$.JavaScriptBigInt._as(size); + t1 = this.$this.callbacks.openedFiles.$index(0, fd); + t1.toString; + return A._runVfs(new A._InjectedValues__closure4(t1, size)); + }, + $signature: 77 + }; + A._InjectedValues__closure4.prototype = { + call$0() { + return this.file.xTruncate$1(A._asInt(A._asDouble(init.G.Number(this.size)))); + }, + $signature: 0 + }; + A._InjectedValues_closure12.prototype = { + call$2(fd, flags) { + var t1; + A._asInt(fd); + A._asInt(flags); + t1 = this.$this.callbacks.openedFiles.$index(0, fd); + t1.toString; + return A._runVfs(new A._InjectedValues__closure3(t1, flags)); + }, + $signature: 4 + }; + A._InjectedValues__closure3.prototype = { + call$0() { + return this.file.xSync$1(this.flags); + }, + $signature: 0 + }; + A._InjectedValues_closure13.prototype = { + call$2(fd, sizePtr) { + var t1; + A._asInt(fd); + A._asInt(sizePtr); + t1 = this.$this.callbacks.openedFiles.$index(0, fd); + t1.toString; + return A._runVfs(new A._InjectedValues__closure2(t1, this.memory, sizePtr)); + }, + $signature: 4 + }; + A._InjectedValues__closure2.prototype = { + call$0() { + var size = this.file.xFileSize$0(), + t1 = A.NativeInt32List_NativeInt32List$view(type$.NativeArrayBuffer._as(this.memory.buffer), 0, null), + t2 = B.JSInt_methods._shrOtherPositive$1(this.sizePtr, 2); + t1.$flags & 2 && A.throwUnsupportedOperation(t1); + if (!(t2 < t1.length)) + return A.ioore(t1, t2); + t1[t2] = size; + }, + $signature: 0 + }; + A._InjectedValues_closure14.prototype = { + call$2(fd, flags) { + var t1; + A._asInt(fd); + A._asInt(flags); + t1 = this.$this.callbacks.openedFiles.$index(0, fd); + t1.toString; + return A._runVfs(new A._InjectedValues__closure1(t1, flags)); + }, + $signature: 4 + }; + A._InjectedValues__closure1.prototype = { + call$0() { + return this.file.xLock$1(this.flags); + }, + $signature: 0 + }; + A._InjectedValues_closure15.prototype = { + call$2(fd, flags) { + var t1; + A._asInt(fd); + A._asInt(flags); + t1 = this.$this.callbacks.openedFiles.$index(0, fd); + t1.toString; + return A._runVfs(new A._InjectedValues__closure0(t1, flags)); + }, + $signature: 4 + }; + A._InjectedValues__closure0.prototype = { + call$0() { + return this.file.xUnlock$1(this.flags); + }, + $signature: 0 + }; + A._InjectedValues_closure16.prototype = { + call$2(fd, pResOut) { + var t1; + A._asInt(fd); + A._asInt(pResOut); + t1 = this.$this.callbacks.openedFiles.$index(0, fd); + t1.toString; + return A._runVfs(new A._InjectedValues__closure(t1, this.memory, pResOut)); + }, + $signature: 4 + }; + A._InjectedValues__closure.prototype = { + call$0() { + var $status = this.file.xCheckReservedLock$0(), + t1 = A.NativeInt32List_NativeInt32List$view(type$.NativeArrayBuffer._as(this.memory.buffer), 0, null), + t2 = B.JSInt_methods._shrOtherPositive$1(this.pResOut, 2); + t1.$flags & 2 && A.throwUnsupportedOperation(t1); + if (!(t2 < t1.length)) + return A.ioore(t1, t2); + t1[t2] = $status; + }, + $signature: 0 + }; + A._InjectedValues_closure17.prototype = { + call$3(ctx, args, value) { + var t1, t2; + A._asInt(ctx); + A._asInt(args); + A._asInt(value); + t1 = this.$this; + t2 = t1.___InjectedValues_bindings_A; + t2 === $ && A.throwLateFieldNI("bindings"); + t2 = t1.callbacks.functions.$index(0, A._asInt(t2.sqlite3.sqlite3_user_data(ctx))).xFunc; + t1 = t1.___InjectedValues_bindings_A; + t2.call$2(new A.WasmContext(t1, ctx), new A.WasmValueList(t1, args, value)); + }, + $signature: 17 + }; + A._InjectedValues_closure18.prototype = { + call$3(ctx, args, value) { + var t1, t2; + A._asInt(ctx); + A._asInt(args); + A._asInt(value); + t1 = this.$this; + t2 = t1.___InjectedValues_bindings_A; + t2 === $ && A.throwLateFieldNI("bindings"); + t2 = t1.callbacks.functions.$index(0, A._asInt(t2.sqlite3.sqlite3_user_data(ctx))).xStep; + t1 = t1.___InjectedValues_bindings_A; + t2.call$2(new A.WasmContext(t1, ctx), new A.WasmValueList(t1, args, value)); + }, + $signature: 17 + }; + A._InjectedValues_closure19.prototype = { + call$3(ctx, args, value) { + var t1, t2; + A._asInt(ctx); + A._asInt(args); + A._asInt(value); + t1 = this.$this; + t2 = t1.___InjectedValues_bindings_A; + t2 === $ && A.throwLateFieldNI("bindings"); + t1.callbacks.functions.$index(0, A._asInt(t2.sqlite3.sqlite3_user_data(ctx))).toString; + t1 = t1.___InjectedValues_bindings_A; + null.call$2(new A.WasmContext(t1, ctx), new A.WasmValueList(t1, args, value)); + }, + $signature: 17 + }; + A._InjectedValues_closure20.prototype = { + call$1(ctx) { + var t1, t2; + A._asInt(ctx); + t1 = this.$this; + t2 = t1.___InjectedValues_bindings_A; + t2 === $ && A.throwLateFieldNI("bindings"); + t1.callbacks.functions.$index(0, A._asInt(t2.sqlite3.sqlite3_user_data(ctx))).xFinal.call$1(new A.WasmContext(t1.___InjectedValues_bindings_A, ctx)); + }, + $signature: 11 + }; + A._InjectedValues_closure21.prototype = { + call$1(ctx) { + var t1, t2; + A._asInt(ctx); + t1 = this.$this; + t2 = t1.___InjectedValues_bindings_A; + t2 === $ && A.throwLateFieldNI("bindings"); + t1.callbacks.functions.$index(0, A._asInt(t2.sqlite3.sqlite3_user_data(ctx))).toString; + null.call$1(new A.WasmContext(t1.___InjectedValues_bindings_A, ctx)); + }, + $signature: 11 + }; + A._InjectedValues_closure22.prototype = { + call$1(ctx) { + this.$this.callbacks.functions.remove$1(0, A._asInt(ctx)); + }, + $signature: 11 + }; + A._InjectedValues_closure23.prototype = { + call$5(ctx, lengthA, a, lengthB, b) { + var t1, aStr, bStr; + A._asInt(ctx); + A._asInt(lengthA); + A._asInt(a); + A._asInt(lengthB); + A._asInt(b); + t1 = this.memory; + aStr = A.WrappedMemory_readNullableString(t1, a, lengthA); + bStr = A.WrappedMemory_readNullableString(t1, b, lengthB); + this.$this.callbacks.functions.$index(0, ctx).toString; + return null.call$2(aStr, bStr); + }, + $signature: 29 + }; + A._InjectedValues_closure24.prototype = { + call$5(id, kind, _, table, rowId) { + A._asInt(id); + A._asInt(kind); + A._asInt(_); + A._asInt(table); + type$.JavaScriptBigInt._as(rowId); + A.WrappedMemory_readString(this.memory, table, null); + }, + $signature: 79 + }; + A._InjectedValues_closure25.prototype = { + call$1(id) { + A._asInt(id); + return null; + }, + $signature: 23 + }; + A._InjectedValues_closure26.prototype = { + call$1(id) { + A._asInt(id); + }, + $signature: 11 + }; + A._InjectedValues_closure27.prototype = { + call$2(timestamp, resultPtr) { + var dateTime, tmValues, t1, t2; + type$.JavaScriptBigInt._as(timestamp); + A._asInt(resultPtr); + dateTime = new A.DateTime(A.DateTime__validate(A._asInt(A._asDouble(init.G.Number(timestamp))) * 1000, 0, false), 0, false); + tmValues = A.NativeUint32List_NativeUint32List$view(type$.NativeArrayBuffer._as(this.memory.buffer), resultPtr, 8); + tmValues.$flags & 2 && A.throwUnsupportedOperation(tmValues); + t1 = tmValues.length; + if (0 >= t1) + return A.ioore(tmValues, 0); + tmValues[0] = A.Primitives_getSeconds(dateTime); + if (1 >= t1) + return A.ioore(tmValues, 1); + tmValues[1] = A.Primitives_getMinutes(dateTime); + if (2 >= t1) + return A.ioore(tmValues, 2); + tmValues[2] = A.Primitives_getHours(dateTime); + if (3 >= t1) + return A.ioore(tmValues, 3); + tmValues[3] = A.Primitives_getDay(dateTime); + if (4 >= t1) + return A.ioore(tmValues, 4); + tmValues[4] = A.Primitives_getMonth(dateTime) - 1; + if (5 >= t1) + return A.ioore(tmValues, 5); + tmValues[5] = A.Primitives_getYear(dateTime) - 1900; + t2 = B.JSInt_methods.$mod(A.Primitives_getWeekday(dateTime), 7); + if (6 >= t1) + return A.ioore(tmValues, 6); + tmValues[6] = t2; + }, + $signature: 80 + }; + A._InjectedValues_closure28.prototype = { + call$2(context, zTab) { + A._asInt(context); + A._asInt(zTab); + return this.$this.callbacks.sessionApply.$index(0, context).get$filter().call$1(zTab); + }, + $signature: 4 + }; + A._InjectedValues_closure29.prototype = { + call$3(context, eConflict, iter) { + A._asInt(context); + A._asInt(eConflict); + A._asInt(iter); + return this.$this.callbacks.sessionApply.$index(0, context).get$conflict().call$2(eConflict, iter); + }, + $signature: 21 + }; + A.DartCallbacks.prototype = { + register$1(set) { + var t1 = this._id++; + this.functions.$indexSet(0, t1, set); + return t1; + }, + set$installedUpdateHook(installedUpdateHook) { + this.installedUpdateHook = type$.nullable_void_Function_int_String_int._as(installedUpdateHook); + }, + set$installedCommitHook(installedCommitHook) { + this.installedCommitHook = type$.nullable_int_Function._as(installedCommitHook); + }, + set$installedRollbackHook(installedRollbackHook) { + this.installedRollbackHook = type$.nullable_void_Function._as(installedRollbackHook); + } + }; + A.RegisteredFunctionSet.prototype = {}; + A.Chain.prototype = { + toTrace$0() { + var t1 = this.traces, + t2 = A._arrayInstanceType(t1); + return A.Trace$(new A.ExpandIterable(t1, t2._eval$1("Iterable(1)")._as(new A.Chain_toTrace_closure()), t2._eval$1("ExpandIterable<1,Frame>")), null); + }, + toString$0(_) { + var t1 = this.traces, + t2 = A._arrayInstanceType(t1); + return new A.MappedListIterable(t1, t2._eval$1("String(1)")._as(new A.Chain_toString_closure(new A.MappedListIterable(t1, t2._eval$1("int(1)")._as(new A.Chain_toString_closure0()), t2._eval$1("MappedListIterable<1,int>")).fold$1$2(0, 0, B.CONSTANT, type$.int))), t2._eval$1("MappedListIterable<1,String>")).join$1(0, string$.x3d_____); + }, + $isStackTrace: 1 + }; + A.Chain_Chain$parse_closure.prototype = { + call$1(line) { + return A._asString(line).length !== 0; + }, + $signature: 3 + }; + A.Chain_toTrace_closure.prototype = { + call$1(trace) { + return type$.Trace._as(trace).get$frames(); + }, + $signature: 81 + }; + A.Chain_toString_closure0.prototype = { + call$1(trace) { + var t1 = type$.Trace._as(trace).get$frames(), + t2 = A._arrayInstanceType(t1); + return new A.MappedListIterable(t1, t2._eval$1("int(1)")._as(new A.Chain_toString__closure0()), t2._eval$1("MappedListIterable<1,int>")).fold$1$2(0, 0, B.CONSTANT, type$.int); + }, + $signature: 82 + }; + A.Chain_toString__closure0.prototype = { + call$1(frame) { + return type$.Frame._as(frame).get$location().length; + }, + $signature: 33 + }; + A.Chain_toString_closure.prototype = { + call$1(trace) { + var t1 = type$.Trace._as(trace).get$frames(), + t2 = A._arrayInstanceType(t1); + return new A.MappedListIterable(t1, t2._eval$1("String(1)")._as(new A.Chain_toString__closure(this.longest)), t2._eval$1("MappedListIterable<1,String>")).join$0(0); + }, + $signature: 84 + }; + A.Chain_toString__closure.prototype = { + call$1(frame) { + type$.Frame._as(frame); + return B.JSString_methods.padRight$1(frame.get$location(), this.longest) + " " + A.S(frame.get$member()) + "\n"; + }, + $signature: 34 + }; + A.Frame.prototype = { + get$library() { + var t1 = this.uri; + if (t1.get$scheme() === "data") + return "data:..."; + return $.$get$context().prettyUri$1(t1); + }, + get$location() { + var t2, _this = this, + t1 = _this.line; + if (t1 == null) + return _this.get$library(); + t2 = _this.column; + if (t2 == null) + return _this.get$library() + " " + A.S(t1); + return _this.get$library() + " " + A.S(t1) + ":" + A.S(t2); + }, + toString$0(_) { + return this.get$location() + " in " + A.S(this.member); + }, + get$member() { + return this.member; + } + }; + A.Frame_Frame$parseVM_closure.prototype = { + call$0() { + var match, t2, t3, member, uri, lineAndColumn, line, _null = null, + t1 = this.frame; + if (t1 === "...") + return new A.Frame(A._Uri__Uri(_null, _null, _null, _null), _null, _null, "..."); + match = $.$get$_vmFrame().firstMatch$1(t1); + if (match == null) + return new A.UnparsedFrame(A._Uri__Uri(_null, "unparsed", _null, _null), t1); + t1 = match._match; + if (1 >= t1.length) + return A.ioore(t1, 1); + t2 = t1[1]; + t2.toString; + t3 = $.$get$_asyncBody(); + t2 = A.stringReplaceAllUnchecked(t2, t3, ""); + member = A.stringReplaceAllUnchecked(t2, "", ""); + if (2 >= t1.length) + return A.ioore(t1, 2); + t2 = t1[2]; + t3 = t2; + t3.toString; + if (B.JSString_methods.startsWith$1(t3, "= t1.length) + return A.ioore(t1, 3); + lineAndColumn = t1[3].split(":"); + t1 = lineAndColumn.length; + line = t1 > 1 ? A.int_parse(lineAndColumn[1], _null) : _null; + return new A.Frame(uri, line, t1 > 2 ? A.int_parse(lineAndColumn[2], _null) : _null, member); + }, + $signature: 12 + }; + A.Frame_Frame$parseV8_closure.prototype = { + call$0() { + var member, uri, t2, functionOffset, t3, t4, _s4_ = "", + t1 = this.frame, + match = $.$get$_v8WasmFrame().firstMatch$1(t1); + if (match != null) { + member = match.namedGroup$1("member"); + t1 = match.namedGroup$1("uri"); + t1.toString; + uri = A.Frame__uriOrPathToUri(t1); + t1 = match.namedGroup$1("index"); + t1.toString; + t2 = match.namedGroup$1("offset"); + t2.toString; + functionOffset = A.int_parse(t2, 16); + if (!(member == null)) + t1 = member; + return new A.Frame(uri, 1, functionOffset + 1, t1); + } + match = $.$get$_v8JsFrame().firstMatch$1(t1); + if (match != null) { + t1 = new A.Frame_Frame$parseV8_closure_parseJsLocation(t1); + t2 = match._match; + t3 = t2.length; + if (2 >= t3) + return A.ioore(t2, 2); + t4 = t2[2]; + if (t4 != null) { + t3 = t4; + t3.toString; + t2 = t2[1]; + t2.toString; + t2 = A.stringReplaceAllUnchecked(t2, "", _s4_); + t2 = A.stringReplaceAllUnchecked(t2, "Anonymous function", _s4_); + return t1.call$2(t3, A.stringReplaceAllUnchecked(t2, "(anonymous function)", _s4_)); + } else { + if (3 >= t3) + return A.ioore(t2, 3); + t2 = t2[3]; + t2.toString; + return t1.call$2(t2, _s4_); + } + } + return new A.UnparsedFrame(A._Uri__Uri(null, "unparsed", null, null), t1); + }, + $signature: 12 + }; + A.Frame_Frame$parseV8_closure_parseJsLocation.prototype = { + call$2($location, member) { + var t2, urlMatch, uri, line, columnMatch, _null = null, + t1 = $.$get$_v8EvalLocation(), + evalMatch = t1.firstMatch$1($location); + for (; evalMatch != null; $location = t2) { + t2 = evalMatch._match; + if (1 >= t2.length) + return A.ioore(t2, 1); + t2 = t2[1]; + t2.toString; + evalMatch = t1.firstMatch$1(t2); + } + if ($location === "native") + return new A.Frame(A.Uri_parse("native"), _null, _null, member); + urlMatch = $.$get$_v8JsUrlLocation().firstMatch$1($location); + if (urlMatch == null) + return new A.UnparsedFrame(A._Uri__Uri(_null, "unparsed", _null, _null), this.frame); + t1 = urlMatch._match; + if (1 >= t1.length) + return A.ioore(t1, 1); + t2 = t1[1]; + t2.toString; + uri = A.Frame__uriOrPathToUri(t2); + if (2 >= t1.length) + return A.ioore(t1, 2); + t2 = t1[2]; + t2.toString; + line = A.int_parse(t2, _null); + if (3 >= t1.length) + return A.ioore(t1, 3); + columnMatch = t1[3]; + return new A.Frame(uri, line, columnMatch != null ? A.int_parse(columnMatch, _null) : _null, member); + }, + $signature: 87 + }; + A.Frame_Frame$_parseFirefoxEval_closure.prototype = { + call$0() { + var t2, member, uri, line, _null = null, + t1 = this.frame, + match = $.$get$_firefoxEvalLocation().firstMatch$1(t1); + if (match == null) + return new A.UnparsedFrame(A._Uri__Uri(_null, "unparsed", _null, _null), t1); + t1 = match._match; + if (1 >= t1.length) + return A.ioore(t1, 1); + t2 = t1[1]; + t2.toString; + member = A.stringReplaceAllUnchecked(t2, "/<", ""); + if (2 >= t1.length) + return A.ioore(t1, 2); + t2 = t1[2]; + t2.toString; + uri = A.Frame__uriOrPathToUri(t2); + if (3 >= t1.length) + return A.ioore(t1, 3); + t1 = t1[3]; + t1.toString; + line = A.int_parse(t1, _null); + return new A.Frame(uri, line, _null, member.length === 0 || member === "anonymous" ? "" : member); + }, + $signature: 12 + }; + A.Frame_Frame$parseFirefox_closure.prototype = { + call$0() { + var t2, t3, t4, uri, member, line, column, functionOffset, _null = null, + t1 = this.frame, + match = $.$get$_firefoxSafariJSFrame().firstMatch$1(t1); + if (match != null) { + t2 = match._match; + if (3 >= t2.length) + return A.ioore(t2, 3); + t3 = t2[3]; + t4 = t3; + t4.toString; + if (B.JSString_methods.contains$1(t4, " line ")) + return A.Frame_Frame$_parseFirefoxEval(t1); + t1 = t3; + t1.toString; + uri = A.Frame__uriOrPathToUri(t1); + t1 = t2.length; + if (1 >= t1) + return A.ioore(t2, 1); + member = t2[1]; + if (member != null) { + if (2 >= t1) + return A.ioore(t2, 2); + t1 = t2[2]; + t1.toString; + member += B.JSArray_methods.join$0(A.List_List$filled(B.JSString_methods.allMatches$1("/", t1).get$length(0), ".", false, type$.String)); + if (member === "") + member = ""; + member = B.JSString_methods.replaceFirst$2(member, $.$get$_initialDot(), ""); + } else + member = ""; + if (4 >= t2.length) + return A.ioore(t2, 4); + t1 = t2[4]; + if (t1 === "") + line = _null; + else { + t1 = t1; + t1.toString; + line = A.int_parse(t1, _null); + } + if (5 >= t2.length) + return A.ioore(t2, 5); + t1 = t2[5]; + if (t1 == null || t1 === "") + column = _null; + else { + t1 = t1; + t1.toString; + column = A.int_parse(t1, _null); + } + return new A.Frame(uri, line, column, member); + } + match = $.$get$_firefoxWasmFrame().firstMatch$1(t1); + if (match != null) { + t1 = match.namedGroup$1("member"); + t1.toString; + t2 = match.namedGroup$1("uri"); + t2.toString; + uri = A.Frame__uriOrPathToUri(t2); + t2 = match.namedGroup$1("index"); + t2.toString; + t3 = match.namedGroup$1("offset"); + t3.toString; + functionOffset = A.int_parse(t3, 16); + if (!(t1.length !== 0)) + t1 = t2; + return new A.Frame(uri, 1, functionOffset + 1, t1); + } + match = $.$get$_safariWasmFrame().firstMatch$1(t1); + if (match != null) { + t1 = match.namedGroup$1("member"); + t1.toString; + return new A.Frame(A._Uri__Uri(_null, "wasm code", _null, _null), _null, _null, t1); + } + return new A.UnparsedFrame(A._Uri__Uri(_null, "unparsed", _null, _null), t1); + }, + $signature: 12 + }; + A.Frame_Frame$parseFriendly_closure.prototype = { + call$0() { + var t2, uri, line, column, _null = null, + t1 = this.frame, + match = $.$get$_friendlyFrame().firstMatch$1(t1); + if (match == null) + throw A.wrapException(A.FormatException$("Couldn't parse package:stack_trace stack trace line '" + t1 + "'.", _null, _null)); + t1 = match._match; + if (1 >= t1.length) + return A.ioore(t1, 1); + t2 = t1[1]; + if (t2 === "data:...") + uri = A.Uri_Uri$dataFromString(""); + else { + t2 = t2; + t2.toString; + uri = A.Uri_parse(t2); + } + if (uri.get$scheme() === "") { + t2 = $.$get$context(); + uri = t2.toUri$1(t2.absolute$15(t2.style.pathFromUri$1(A._parseUri(uri)), _null, _null, _null, _null, _null, _null, _null, _null, _null, _null, _null, _null, _null, _null)); + } + if (2 >= t1.length) + return A.ioore(t1, 2); + t2 = t1[2]; + if (t2 == null) + line = _null; + else { + t2 = t2; + t2.toString; + line = A.int_parse(t2, _null); + } + if (3 >= t1.length) + return A.ioore(t1, 3); + t2 = t1[3]; + if (t2 == null) + column = _null; + else { + t2 = t2; + t2.toString; + column = A.int_parse(t2, _null); + } + if (4 >= t1.length) + return A.ioore(t1, 4); + return new A.Frame(uri, line, column, t1[4]); + }, + $signature: 12 + }; + A.LazyTrace.prototype = { + get$_lazy_trace$_trace() { + var result, _this = this, + value = _this.__LazyTrace__trace_FI; + if (value === $) { + result = _this._thunk.call$0(); + _this.__LazyTrace__trace_FI !== $ && A.throwLateFieldADI("_trace"); + _this.__LazyTrace__trace_FI = result; + value = result; + } + return value; + }, + get$frames() { + return this.get$_lazy_trace$_trace().get$frames(); + }, + toString$0(_) { + return this.get$_lazy_trace$_trace().toString$0(0); + }, + $isStackTrace: 1, + $isTrace: 1 + }; + A.Trace.prototype = { + toString$0(_) { + var t1 = this.frames, + t2 = A._arrayInstanceType(t1); + return new A.MappedListIterable(t1, t2._eval$1("String(1)")._as(new A.Trace_toString_closure(new A.MappedListIterable(t1, t2._eval$1("int(1)")._as(new A.Trace_toString_closure0()), t2._eval$1("MappedListIterable<1,int>")).fold$1$2(0, 0, B.CONSTANT, type$.int))), t2._eval$1("MappedListIterable<1,String>")).join$0(0); + }, + $isStackTrace: 1, + get$frames() { + return this.frames; + } + }; + A.Trace_Trace$from_closure.prototype = { + call$0() { + return A.Trace_Trace$parse(this.trace.toString$0(0)); + }, + $signature: 88 + }; + A.Trace__parseVM_closure.prototype = { + call$1(line) { + return A._asString(line).length !== 0; + }, + $signature: 3 + }; + A.Trace$parseV8_closure.prototype = { + call$1(line) { + return !B.JSString_methods.startsWith$1(A._asString(line), $.$get$_v8TraceLine()); + }, + $signature: 3 + }; + A.Trace$parseJSCore_closure.prototype = { + call$1(line) { + return A._asString(line) !== "\tat "; + }, + $signature: 3 + }; + A.Trace$parseFirefox_closure.prototype = { + call$1(line) { + A._asString(line); + return line.length !== 0 && line !== "[native code]"; + }, + $signature: 3 + }; + A.Trace$parseFriendly_closure.prototype = { + call$1(line) { + return !B.JSString_methods.startsWith$1(A._asString(line), "====="); + }, + $signature: 3 + }; + A.Trace_toString_closure0.prototype = { + call$1(frame) { + return type$.Frame._as(frame).get$location().length; + }, + $signature: 33 + }; + A.Trace_toString_closure.prototype = { + call$1(frame) { + type$.Frame._as(frame); + if (frame instanceof A.UnparsedFrame) + return frame.toString$0(0) + "\n"; + return B.JSString_methods.padRight$1(frame.get$location(), this.longest) + " " + A.S(frame.get$member()) + "\n"; + }, + $signature: 34 + }; + A.UnparsedFrame.prototype = { + toString$0(_) { + return this.member; + }, + $isFrame: 1, + get$location() { + return "unparsed"; + }, + get$member() { + return this.member; + } + }; + A.CloseGuaranteeChannel.prototype = { + set$_close_guarantee_channel$_subscription(_subscription) { + this._close_guarantee_channel$_subscription = this.$ti._eval$1("StreamSubscription<1>?")._as(_subscription); + } + }; + A._CloseGuaranteeStream.prototype = { + listen$4$cancelOnError$onDone$onError(onData, cancelOnError, onDone, onError) { + var t1, subscription; + this.$ti._eval$1("~(1)?")._as(onData); + type$.nullable_void_Function._as(onDone); + t1 = this._channel; + if (t1._disconnected) { + onData = null; + onError = null; + } + subscription = this._inner.listen$4$cancelOnError$onDone$onError(onData, cancelOnError, onDone, onError); + if (!t1._disconnected) + t1.set$_close_guarantee_channel$_subscription(subscription); + return subscription; + }, + listen$3$onDone$onError(onData, onDone, onError) { + return this.listen$4$cancelOnError$onDone$onError(onData, null, onDone, onError); + }, + listen$2$onDone(onData, onDone) { + return this.listen$4$cancelOnError$onDone$onError(onData, null, onDone, null); + } + }; + A._CloseGuaranteeSink.prototype = { + close$0() { + var subscription, + done = this.super$DelegatingStreamSink$close(), + t1 = this._channel; + t1._disconnected = true; + subscription = t1._close_guarantee_channel$_subscription; + if (subscription != null) { + subscription.onData$1(null); + subscription.onError$1(null); + } + return done; + } + }; + A.GuaranteeChannel.prototype = { + get$stream() { + var t1 = this.__GuaranteeChannel__streamController_F; + t1 === $ && A.throwLateFieldNI("_streamController"); + return new A._ControllerStream(t1, A._instanceType(t1)._eval$1("_ControllerStream<1>")); + }, + get$sink() { + var t1 = this.__GuaranteeChannel__sink_F; + t1 === $ && A.throwLateFieldNI("_sink"); + return t1; + }, + GuaranteeChannel$3$allowSinkErrors(innerSink, allowSinkErrors, _box_0, $T) { + var _this = this, + t1 = _this.$ti, + t2 = t1._eval$1("_GuaranteeSink<1>")._as(new A._GuaranteeSink(innerSink, _this, new A._AsyncCompleter(new A._Future($.Zone__current, type$._Future_void), type$._AsyncCompleter_void), true, $T._eval$1("_GuaranteeSink<0>"))); + _this.__GuaranteeChannel__sink_F !== $ && A.throwLateFieldAI("_sink"); + _this.__GuaranteeChannel__sink_F = t2; + t1 = t1._eval$1("StreamController<1>")._as(A.StreamController_StreamController(null, new A.GuaranteeChannel_closure(_box_0, _this, $T), true, $T)); + _this.__GuaranteeChannel__streamController_F !== $ && A.throwLateFieldAI("_streamController"); + _this.__GuaranteeChannel__streamController_F = t1; + }, + _onSinkDisconnected$0() { + var subscription, t1; + this._guarantee_channel$_disconnected = true; + subscription = this._guarantee_channel$_subscription; + if (subscription != null) + subscription.cancel$0(); + t1 = this.__GuaranteeChannel__streamController_F; + t1 === $ && A.throwLateFieldNI("_streamController"); + t1.close$0(); + } + }; + A.GuaranteeChannel_closure.prototype = { + call$0() { + var t2, t3, + t1 = this.$this; + if (t1._guarantee_channel$_disconnected) + return; + t2 = this._box_0.innerStream; + t3 = t1.__GuaranteeChannel__streamController_F; + t3 === $ && A.throwLateFieldNI("_streamController"); + t1._guarantee_channel$_subscription = t2.listen$3$onDone$onError(this.T._eval$1("~(0)")._as(t3.get$add(t3)), new A.GuaranteeChannel__closure(t1), t3.get$addError()); + }, + $signature: 0 + }; + A.GuaranteeChannel__closure.prototype = { + call$0() { + var t1 = this.$this, + t2 = t1.__GuaranteeChannel__sink_F; + t2 === $ && A.throwLateFieldNI("_sink"); + t2._onStreamDisconnected$0(); + t1 = t1.__GuaranteeChannel__streamController_F; + t1 === $ && A.throwLateFieldNI("_streamController"); + t1.close$0(); + }, + $signature: 0 + }; + A._GuaranteeSink.prototype = { + add$1(_, data) { + var t1, _this = this; + _this.$ti._precomputed1._as(data); + if (_this._closed) + throw A.wrapException(A.StateError$("Cannot add event after closing.")); + if (_this._guarantee_channel$_disconnected) + return; + t1 = _this._guarantee_channel$_inner; + t1._async$_target.add$1(0, t1.$ti._precomputed1._as(data)); + }, + addError$2(error, stackTrace) { + if (this._closed) + throw A.wrapException(A.StateError$("Cannot add event after closing.")); + if (this._guarantee_channel$_disconnected) + return; + this._guarantee_channel$_addError$2(error, stackTrace); + }, + _guarantee_channel$_addError$2(error, stackTrace) { + this._guarantee_channel$_inner._async$_target.addError$2(error, stackTrace); + return; + }, + close$0() { + var _this = this; + if (_this._closed) + return _this._doneCompleter.future; + _this._closed = true; + if (!_this._guarantee_channel$_disconnected) { + _this._guarantee_channel$_channel._onSinkDisconnected$0(); + _this._doneCompleter.complete$1(_this._guarantee_channel$_inner._async$_target.close$0()); + } + return _this._doneCompleter.future; + }, + _onStreamDisconnected$0() { + this._guarantee_channel$_disconnected = true; + var t1 = this._doneCompleter; + if ((t1.future._state & 30) === 0) + t1.complete$0(); + return; + }, + $isEventSink: 1, + $isStreamSink: 1 + }; + A.StreamChannelController.prototype = {}; + A.StreamChannelMixin.prototype = {$isStreamChannel: 1}; + A.TypedDataBuffer.prototype = { + get$length(_) { + return this._typed_buffer$_length; + }, + $index(_, index) { + var t1; + if (index >= this._typed_buffer$_length) + throw A.wrapException(A.IndexError$(index, this)); + t1 = this._typed_buffer$_buffer; + if (!(index >= 0 && index < t1.length)) + return A.ioore(t1, index); + return t1[index]; + }, + $indexSet(_, index, value) { + var _this = this; + A._instanceType(_this)._eval$1("TypedDataBuffer.E")._as(value); + if (index >= _this._typed_buffer$_length) + throw A.wrapException(A.IndexError$(index, _this)); + B.NativeUint8List_methods.$indexSet(_this._typed_buffer$_buffer, index, value); + }, + set$length(_, newLength) { + var t2, t3, i, newBuffer, _this = this, + t1 = _this._typed_buffer$_length; + if (newLength < t1) + for (t2 = _this._typed_buffer$_buffer, t3 = t2.$flags | 0, i = newLength; i < t1; ++i) { + t3 & 2 && A.throwUnsupportedOperation(t2); + if (!(i >= 0 && i < t2.length)) + return A.ioore(t2, i); + t2[i] = 0; + } + else { + t1 = _this._typed_buffer$_buffer.length; + if (newLength > t1) { + if (t1 === 0) + newBuffer = new Uint8Array(newLength); + else + newBuffer = _this._createBiggerBuffer$1(newLength); + B.NativeUint8List_methods.setRange$3(newBuffer, 0, _this._typed_buffer$_length, _this._typed_buffer$_buffer); + _this._typed_buffer$_buffer = newBuffer; + } + } + _this._typed_buffer$_length = newLength; + }, + _createBiggerBuffer$1(requiredCapacity) { + var newLength = this._typed_buffer$_buffer.length * 2; + if (requiredCapacity != null && newLength < requiredCapacity) + newLength = requiredCapacity; + else if (newLength < 8) + newLength = 8; + return new Uint8Array(newLength); + }, + setRange$4(_, start, end, iterable, skipCount) { + var t1; + A._instanceType(this)._eval$1("Iterable")._as(iterable); + t1 = this._typed_buffer$_length; + if (end > t1) + throw A.wrapException(A.RangeError$range(end, 0, t1, null, null)); + t1 = this._typed_buffer$_buffer; + if (iterable instanceof A.Uint8Buffer) + B.NativeUint8List_methods.setRange$4(t1, start, end, iterable._typed_buffer$_buffer, skipCount); + else + B.NativeUint8List_methods.setRange$4(t1, start, end, iterable, skipCount); + }, + setRange$3(_, start, end, iterable) { + return this.setRange$4(0, start, end, iterable, 0); + } + }; + A._IntBuffer.prototype = {}; + A.Uint8Buffer.prototype = {}; + A.EventStreamProvider.prototype = {}; + A._EventStream.prototype = { + listen$4$cancelOnError$onDone$onError(onData, cancelOnError, onDone, onError) { + var t1 = this.$ti; + t1._eval$1("~(1)?")._as(onData); + type$.nullable_void_Function._as(onDone); + return A._EventStreamSubscription$(this._target, this._eventType, onData, false, t1._precomputed1); + }, + listen$3$onDone$onError(onData, onDone, onError) { + return this.listen$4$cancelOnError$onDone$onError(onData, null, onDone, onError); + } + }; + A._EventStreamSubscription.prototype = { + cancel$0() { + var _this = this, + emptyFuture = A.Future_Future$value(null, type$.void); + if (_this._target == null) + return emptyFuture; + _this._unlisten$0(); + _this._onData = _this._target = null; + return emptyFuture; + }, + onData$1(handleData) { + var t1, _this = this; + _this.$ti._eval$1("~(1)?")._as(handleData); + if (_this._target == null) + throw A.wrapException(A.StateError$("Subscription has been canceled.")); + _this._unlisten$0(); + if (handleData == null) + t1 = null; + else { + t1 = A._wrapZone(new A._EventStreamSubscription_onData_closure(handleData), type$.JSObject); + t1 = t1 == null ? null : A._functionToJS1(t1); + } + _this._onData = t1; + _this._tryResume$0(); + }, + onError$1(handleError) { + }, + pause$0() { + if (this._target == null) + return; + ++this._pauseCount; + this._unlisten$0(); + }, + resume$0() { + var _this = this; + if (_this._target == null || _this._pauseCount <= 0) + return; + --_this._pauseCount; + _this._tryResume$0(); + }, + _tryResume$0() { + var _this = this, + t1 = _this._onData; + if (t1 != null && _this._pauseCount <= 0) + _this._target.addEventListener(_this._eventType, t1, false); + }, + _unlisten$0() { + var t1 = this._onData; + if (t1 != null) + this._target.removeEventListener(this._eventType, t1, false); + }, + $isStreamSubscription: 1 + }; + A._EventStreamSubscription_closure.prototype = { + call$1(e) { + return this.onData.call$1(A._asJSObject(e)); + }, + $signature: 1 + }; + A._EventStreamSubscription_onData_closure.prototype = { + call$1(e) { + return this.handleData.call$1(A._asJSObject(e)); + }, + $signature: 1 + }; + (function aliases() { + var _ = J.LegacyJavaScriptObject.prototype; + _.super$LegacyJavaScriptObject$toString = _.toString$0; + _ = A._BroadcastStreamController.prototype; + _.super$_BroadcastStreamController$_addEventError = _._addEventError$0; + _ = A._BufferingStreamSubscription.prototype; + _.super$_BufferingStreamSubscription$_add = _._async$_add$1; + _.super$_BufferingStreamSubscription$_addError = _._addError$2; + _.super$_BufferingStreamSubscription$_close = _._close$0; + _ = A._StreamSinkTransformer.prototype; + _.super$_StreamSinkTransformer$bind = _.bind$1; + _ = A.ListBase.prototype; + _.super$ListBase$setRange = _.setRange$4; + _ = A.Iterable.prototype; + _.super$Iterable$skipWhile = _.skipWhile$1; + _ = A.DelegatingStreamSink.prototype; + _.super$DelegatingStreamSink$close = _.close$0; + _ = A.Sqlite3Delegate.prototype; + _.super$Sqlite3Delegate$close = _.close$0; + })(); + (function installTearOffs() { + var _static_2 = hunkHelpers._static_2, + _static_1 = hunkHelpers._static_1, + _static_0 = hunkHelpers._static_0, + _static = hunkHelpers.installStaticTearOff, + _instance_0_u = hunkHelpers._instance_0u, + _instance = hunkHelpers.installInstanceTearOff, + _instance_2_u = hunkHelpers._instance_2u, + _instance_1_i = hunkHelpers._instance_1i, + _instance_1_u = hunkHelpers._instance_1u; + _static_2(J, "_interceptors_JSArray__compareAny$closure", "JSArray__compareAny", 89); + _static_1(A, "async__AsyncRun__scheduleImmediateJsOverride$closure", "_AsyncRun__scheduleImmediateJsOverride", 22); + _static_1(A, "async__AsyncRun__scheduleImmediateWithSetImmediate$closure", "_AsyncRun__scheduleImmediateWithSetImmediate", 22); + _static_1(A, "async__AsyncRun__scheduleImmediateWithTimer$closure", "_AsyncRun__scheduleImmediateWithTimer", 22); + _static_0(A, "async___startMicrotaskLoop$closure", "_startMicrotaskLoop", 0); + _static_1(A, "async___nullDataHandler$closure", "_nullDataHandler", 15); + _static_2(A, "async___nullErrorHandler$closure", "_nullErrorHandler", 7); + _static_0(A, "async___nullDoneHandler$closure", "_nullDoneHandler", 0); + _static(A, "async___rootHandleUncaughtError$closure", 5, null, ["call$5"], ["_rootHandleUncaughtError"], 91, 0); + _static(A, "async___rootRun$closure", 4, null, ["call$1$4", "call$4"], ["_rootRun", function($self, $parent, zone, f) { + return A._rootRun($self, $parent, zone, f, type$.dynamic); + }], 92, 0); + _static(A, "async___rootRunUnary$closure", 5, null, ["call$2$5", "call$5"], ["_rootRunUnary", function($self, $parent, zone, f, arg) { + var t1 = type$.dynamic; + return A._rootRunUnary($self, $parent, zone, f, arg, t1, t1); + }], 93, 0); + _static(A, "async___rootRunBinary$closure", 6, null, ["call$3$6"], ["_rootRunBinary"], 94, 0); + _static(A, "async___rootRegisterCallback$closure", 4, null, ["call$1$4", "call$4"], ["_rootRegisterCallback", function($self, $parent, zone, f) { + return A._rootRegisterCallback($self, $parent, zone, f, type$.dynamic); + }], 95, 0); + _static(A, "async___rootRegisterUnaryCallback$closure", 4, null, ["call$2$4", "call$4"], ["_rootRegisterUnaryCallback", function($self, $parent, zone, f) { + var t1 = type$.dynamic; + return A._rootRegisterUnaryCallback($self, $parent, zone, f, t1, t1); + }], 96, 0); + _static(A, "async___rootRegisterBinaryCallback$closure", 4, null, ["call$3$4", "call$4"], ["_rootRegisterBinaryCallback", function($self, $parent, zone, f) { + var t1 = type$.dynamic; + return A._rootRegisterBinaryCallback($self, $parent, zone, f, t1, t1, t1); + }], 97, 0); + _static(A, "async___rootErrorCallback$closure", 5, null, ["call$5"], ["_rootErrorCallback"], 98, 0); + _static(A, "async___rootScheduleMicrotask$closure", 4, null, ["call$4"], ["_rootScheduleMicrotask"], 99, 0); + _static(A, "async___rootCreateTimer$closure", 5, null, ["call$5"], ["_rootCreateTimer"], 100, 0); + _static(A, "async___rootCreatePeriodicTimer$closure", 5, null, ["call$5"], ["_rootCreatePeriodicTimer"], 101, 0); + _static(A, "async___rootPrint$closure", 4, null, ["call$4"], ["_rootPrint"], 102, 0); + _static_1(A, "async___printToZone$closure", "_printToZone", 103); + _static(A, "async___rootFork$closure", 5, null, ["call$5"], ["_rootFork"], 104, 0); + var _; + _instance_0_u(_ = A._BroadcastSubscription.prototype, "get$_onPause", "_onPause$0", 0); + _instance_0_u(_, "get$_onResume", "_onResume$0", 0); + _instance(A._Completer.prototype, "get$completeError", 0, 1, null, ["call$2", "call$1"], ["completeError$2", "completeError$1"], 32, 0, 0); + _instance_2_u(A._Future.prototype, "get$_completeError", "_completeError$2", 7); + _instance_1_i(_ = A._StreamController.prototype, "get$add", "add$1", 8); + _instance(_, "get$addError", 0, 1, null, ["call$2", "call$1"], ["addError$2", "addError$1"], 32, 0, 0); + _instance_0_u(_ = A._ControllerSubscription.prototype, "get$_onPause", "_onPause$0", 0); + _instance_0_u(_, "get$_onResume", "_onResume$0", 0); + _instance_0_u(_ = A._BufferingStreamSubscription.prototype, "get$_onPause", "_onPause$0", 0); + _instance_0_u(_, "get$_onResume", "_onResume$0", 0); + _instance_0_u(A._DoneStreamSubscription.prototype, "get$_onMicrotask", "_onMicrotask$0", 0); + _instance_1_u(_ = A._StreamIterator.prototype, "get$_async$_onData", "_async$_onData$1", 8); + _instance_2_u(_, "get$_onError", "_onError$2", 7); + _instance_0_u(_, "get$_onDone", "_onDone$0", 0); + _instance_0_u(_ = A._ForwardingStreamSubscription.prototype, "get$_onPause", "_onPause$0", 0); + _instance_0_u(_, "get$_onResume", "_onResume$0", 0); + _instance_1_u(_, "get$_handleData", "_handleData$1", 8); + _instance_2_u(_, "get$_handleError", "_handleError$2", 38); + _instance_0_u(_, "get$_handleDone", "_handleDone$0", 0); + _instance_0_u(_ = A._SinkTransformerStreamSubscription.prototype, "get$_onPause", "_onPause$0", 0); + _instance_0_u(_, "get$_onResume", "_onResume$0", 0); + _instance_1_u(_, "get$_handleData", "_handleData$1", 8); + _instance_2_u(_, "get$_handleError", "_handleError$2", 7); + _instance_0_u(_, "get$_handleDone", "_handleDone$0", 0); + _instance_1_u(A._StreamHandlerTransformer.prototype, "get$bind", "bind$1", "Stream<2>(Object?)"); + _static_1(A, "core_Uri_decodeComponent$closure", "Uri_decodeComponent", 9); + _static(A, "math__max$closure", 2, null, ["call$1$2", "call$2"], ["max", function(a, b) { + return A.max(a, b, type$.num); + }], 105, 0); + _static_1(A, "math__sqrt$closure", "sqrt", 5); + _static_1(A, "math__sin$closure", "sin", 5); + _static_1(A, "math__cos$closure", "cos", 5); + _static_1(A, "math__tan$closure", "tan", 5); + _static_1(A, "math__acos$closure", "acos", 5); + _static_1(A, "math__asin$closure", "asin", 5); + _static_1(A, "math__atan$closure", "atan", 5); + _instance_1_u(A.DriftCommunication.prototype, "get$_handleMessage", "_handleMessage$1", 8); + _instance_1_u(A.DriftProtocol.prototype, "get$_decodeDbValue", "_decodeDbValue$1", 14); + _instance_1_u(A.WebProtocol.prototype, "get$_web_protocol$_decodeDbValue", "_web_protocol$_decodeDbValue$1", 14); + _static_1(A, "delegates___defaultSavepoint$closure", "_defaultSavepoint", 20); + _static_1(A, "delegates___defaultRelease$closure", "_defaultRelease", 20); + _static_1(A, "delegates___defaultRollbackToSavepoint$closure", "_defaultRollbackToSavepoint", 20); + _static_1(A, "native_functions___pow$closure", "_pow", 26); + _static_1(A, "native_functions___regexpImpl$closure", "_regexpImpl", 108); + _static_1(A, "native_functions___containsImpl$closure", "_containsImpl", 109); + _instance_0_u(A.WasmVfs.prototype, "get$close", "close$0", 0); + _static_1(A, "sync_channel_MessageSerializer_readEmpty$closure", "MessageSerializer_readEmpty", 110); + _static_1(A, "sync_channel_MessageSerializer_readFlags$closure", "MessageSerializer_readFlags", 111); + _static_1(A, "sync_channel_MessageSerializer_readNameAndFlags$closure", "MessageSerializer_readNameAndFlags", 112); + _instance_1_u(A.VfsWorker.prototype, "get$_releaseImplicitLock", "_releaseImplicitLock$1", 65); + _instance_0_u(A.AsynchronousIndexedDbFileSystem.prototype, "get$close", "close$0", 0); + _instance_0_u(A.IndexedDbFileSystem.prototype, "get$close", "close$0", 2); + _instance_0_u(A._FunctionWorkItem.prototype, "get$run", "run$0", 0); + _instance_0_u(A._DeleteFileWorkItem.prototype, "get$run", "run$0", 2); + _instance_0_u(A._CreateFileWorkItem.prototype, "get$run", "run$0", 2); + _instance_0_u(A._WriteFileWorkItem.prototype, "get$run", "run$0", 2); + _instance_0_u(A.SimpleOpfsFileSystem.prototype, "get$close", "close$0", 0); + _static_1(A, "frame_Frame___parseVM_tearOff$closure", "Frame___parseVM_tearOff", 16); + _static_1(A, "frame_Frame___parseV8_tearOff$closure", "Frame___parseV8_tearOff", 16); + _static_1(A, "frame_Frame___parseFirefox_tearOff$closure", "Frame___parseFirefox_tearOff", 16); + _static_1(A, "frame_Frame___parseFriendly_tearOff$closure", "Frame___parseFriendly_tearOff", 16); + _static_1(A, "trace_Trace___parseVM_tearOff$closure", "Trace___parseVM_tearOff", 31); + _static_1(A, "trace_Trace___parseFriendly_tearOff$closure", "Trace___parseFriendly_tearOff", 31); + })(); + (function inheritance() { + var _mixin = hunkHelpers.mixin, + _inherit = hunkHelpers.inherit, + _inheritMany = hunkHelpers.inheritMany; + _inherit(A.Object, null); + _inheritMany(A.Object, [A.JS_CONST, J.Interceptor, A.SafeToStringHook, J.ArrayIterator, A.Iterable, A.CastIterator, A.Error, A.ListBase, A.Closure, A.SentinelValue, A.ListIterator, A.MappedIterator, A.WhereIterator, A.ExpandIterator, A.TakeIterator, A.SkipIterator, A.SkipWhileIterator, A.EmptyIterator, A.WhereTypeIterator, A.IndexedIterator, A.FixedLengthListMixin, A.UnmodifiableListMixin, A.Symbol, A._Record, A.ConstantMap, A._KeysOrValuesOrElementsIterator, A.TypeErrorDecoder, A.NullThrownFromJavaScriptException, A.ExceptionAndStackTrace, A._StackTrace, A.MapBase, A.LinkedHashMapCell, A.LinkedHashMapKeyIterator, A.LinkedHashMapValueIterator, A.LinkedHashMapEntryIterator, A.JSSyntaxRegExp, A._MatchImplementation, A._AllMatchesIterator, A.StringMatch, A._StringAllMatchesIterator, A._Cell, A._UnmodifiableNativeByteBufferView, A.Rti, A._FunctionParameters, A._Type, A._TimerImpl, A._AsyncAwaitCompleter, A._SyncStarIterator, A.AsyncError, A.Stream, A._BufferingStreamSubscription, A._BroadcastStreamController, A._Completer, A._FutureListener, A._Future, A._AsyncCallbackEntry, A.StreamTransformerBase, A._StreamController, A._SyncStreamControllerDispatch, A._AsyncStreamControllerDispatch, A._StreamSinkWrapper, A._DelayedEvent, A._DelayedDone, A._PendingEvents, A._DoneStreamSubscription, A._StreamIterator, A._EventSinkWrapper, A._HandlerEventSink, A._ZoneFunction, A._ZoneSpecification, A._ZoneDelegate, A._Zone, A._HashMapKeyIterator, A.SetBase, A._LinkedHashSetCell, A._LinkedHashSetIterator, A._LinkedListIterator, A.LinkedListEntry, A._MapBaseValueIterator, A.Codec, A.Converter, A._Utf8Encoder, A._Utf8Decoder, A._BigIntImpl, A._FinalizationRegistryWrapper, A.DateTime, A.Duration, A._Enum, A.OutOfMemoryError, A.StackOverflowError, A._Exception, A.FormatException, A.IntegerDivisionByZeroException, A.MapEntry, A.Null, A._StringStackTrace, A.StringBuffer, A._Uri, A.UriData, A._SimpleUri, A.Expando, A.NullRejectionException, A._JSSecureRandom, A.DelegatingStreamSink, A.DefaultEquality, A.ListEquality, A.NonGrowableListMixin, A.UnmodifiableMapMixin, A.DriftCommunication, A._PendingRequest, A.ConnectionClosedException, A.DriftRemoteException, A.DriftProtocol, A.Message, A.PrimitiveResponsePayload, A.ExecuteQuery, A.RequestCancellation, A.ExecuteBatchedStatement, A.RunNestedExecutorControl, A.EnsureOpen, A.ServerInfo, A.RunBeforeOpen, A.NotifyTablesUpdated, A.SelectResult, A.ServerImplementation, A._ServerDbUser, A.WebProtocol, A.TableUpdate, A.CancellationToken, A.CancellationException, A.QueryExecutor, A.BatchedStatements, A.ArgumentsForBatchedStatement, A.QueryDelegate, A.TransactionDelegate, A.DbVersionDelegate, A.QueryResult, A.QueryInterceptor, A.OpeningDetails, A.PreparedStatementsCache, A.Lock, A.DedicatedDriftWorker, A.WasmInitializationMessage, A.DriftServerController, A.RunningWasmServer, A.WasmCompatibility, A.SharedDriftWorker, A.Context, A._PathDirection, A._PathRelation, A.Style, A.ParsedPath, A.PathException, A.SqliteException, A.AllowedArgumentCount, A.RawSqliteBindings, A.SqliteResult, A.RawSqliteDatabase, A.RawStatementCompiler, A.RawSqliteStatement, A.RawSqliteContext, A.RawSqliteValue, A.FinalizablePart, A.DatabaseImplementation, A.Sqlite3Implementation, A.CommonPreparedStatement, A.VirtualFileSystem, A.BaseVfsFile, A.Cursor, A._Row_Object_UnmodifiableMapMixin, A._ResultIterator, A.IndexedParameters, A.VfsException, A.Sqlite3Filename, A._CursorReader, A.RequestResponseSynchronizer, A.MessageSerializer, A.Message0, A._ResolvedPath, A.VfsWorker, A._OpenedFileHandle, A.AsynchronousIndexedDbFileSystem, A._FileWriteRequest, A._OffsetAndBuffer, A._IndexedDbFile, A.WasmBindings, A._InjectedValues, A.DartCallbacks, A.RegisteredFunctionSet, A.Chain, A.Frame, A.LazyTrace, A.Trace, A.UnparsedFrame, A.StreamChannelMixin, A._GuaranteeSink, A.StreamChannelController, A.EventStreamProvider, A._EventStreamSubscription]); + _inheritMany(J.Interceptor, [J.JSBool, J.JSNull, J.JavaScriptObject, J.JavaScriptBigInt, J.JavaScriptSymbol, J.JSNumber, J.JSString]); + _inheritMany(J.JavaScriptObject, [J.LegacyJavaScriptObject, J.JSArray, A.NativeByteBuffer, A.NativeTypedData]); + _inheritMany(J.LegacyJavaScriptObject, [J.PlainJavaScriptObject, J.UnknownJavaScriptObject, J.JavaScriptFunction]); + _inherit(J.JSArraySafeToStringHook, A.SafeToStringHook); + _inherit(J.JSUnmodifiableArray, J.JSArray); + _inheritMany(J.JSNumber, [J.JSInt, J.JSNumNotInt]); + _inheritMany(A.Iterable, [A._CastIterableBase, A.EfficientLengthIterable, A.MappedIterable, A.WhereIterable, A.ExpandIterable, A.TakeIterable, A.SkipIterable, A.SkipWhileIterable, A.WhereTypeIterable, A.IndexedIterable, A._KeysOrValues, A._AllMatchesIterable, A._StringAllMatchesIterable, A._SyncStarIterable, A.LinkedList]); + _inheritMany(A._CastIterableBase, [A.CastIterable, A.__CastListBase__CastIterableBase_ListMixin]); + _inherit(A._EfficientLengthCastIterable, A.CastIterable); + _inherit(A._CastListBase, A.__CastListBase__CastIterableBase_ListMixin); + _inherit(A.CastList, A._CastListBase); + _inheritMany(A.Error, [A.LateError, A.TypeError, A.JsNoSuchMethodError, A.UnknownJsTypeError, A.RuntimeError, A._Error, A.AssertionError, A.ArgumentError, A.UnsupportedError, A.UnimplementedError, A.StateError, A.ConcurrentModificationError]); + _inheritMany(A.ListBase, [A.UnmodifiableListBase, A.ValueList, A.WasmValueList, A.TypedDataBuffer]); + _inherit(A.CodeUnits, A.UnmodifiableListBase); + _inheritMany(A.Closure, [A.Closure0Args, A.Instantiation, A.Closure2Args, A.TearOffClosure, A.initHooks_closure, A.initHooks_closure1, A._AsyncRun__initializeScheduleImmediate_internalCallback, A._AsyncRun__initializeScheduleImmediate_closure, A._awaitOnObject_closure, A._SyncBroadcastStreamController__sendData_closure, A._SyncBroadcastStreamController__sendError_closure, A._SyncBroadcastStreamController__sendDone_closure, A.Future_wait_closure, A._Future__propagateToListeners_handleWhenCompleteCallback_closure, A.Stream_length_closure, A.Stream_first_closure0, A.Stream_firstWhere_closure0, A.Stream_firstWhere__closure0, A._StreamHandlerTransformer_closure, A._CustomZone_bindUnaryCallback_closure, A._CustomZone_bindUnaryCallbackGuarded_closure, A._RootZone_bindUnaryCallback_closure, A._RootZone_bindUnaryCallbackGuarded_closure, A._HashMap_values_closure, A.MapBase_entries_closure, A._BigIntImpl_hashCode_finish, A._Uri__makePath_closure, A.jsify__convert, A.promiseToFuture_closure, A.promiseToFuture_closure0, A.dartify_convert, A.DriftCommunication_setRequestHandler_closure, A.DriftProtocol_decodePayload_readInt, A.DriftProtocol_decodePayload_readNullableInt, A.ServerImplementation_closure, A.ServerImplementation_serve_closure, A.ServerImplementation_serve_closure0, A.ServerImplementation__waitForTurn_closure, A.WebProtocol__serializeRequest_closure, A.WebProtocol__deserializeRequest_readBatched_closure, A.WebProtocol__deserializeRequest_readBatched_closure0, A.WebProtocol__deserializeRequest_closure, A.WebProtocol__serializeSelectResult_closure, A.WebProtocol__deserializeResponse_closure, A.QueryResult_asMap_closure, A.EnableNativeFunctions_useNativeFunctions_closure, A._unaryNumFunction_closure, A.LazyDatabase__awaitOpened_closure, A.LazyDatabase_ensureOpen_closure, A.Lock_synchronized_closure, A.WebPortToChannel_channel_closure, A.WebPortToChannel_channel_closure0, A.DedicatedDriftWorker_start_closure, A.SharedWorkerCompatibilityResult_SharedWorkerCompatibilityResult$fromJsPayload_asBoolean, A.checkIndexedDbExists_closure, A.opfsDatabases_closure, A.DriftServerController_serve___closure, A.RunningWasmServer_serve_closure, A.CompleteIdbRequest_complete_closure1, A.CompleteIdbRequest_complete_closure2, A.CompleteIdbRequest_complete_closure3, A.SharedDriftWorker_start_closure, A.SharedDriftWorker__newConnection_closure, A.SharedDriftWorker__startFeatureDetection_result, A.SharedDriftWorker__startFeatureDetection_closure, A.SharedDriftWorker__startFeatureDetection_closure0, A.Context_joinAll_closure, A.Context_split_closure, A._validateArgList_closure, A.WindowsStyle_absolutePathToUri_closure, A.SqliteException_toString_closure, A.disposeFinalizer_closure, A.AsyncJavaScriptIteratable_listen_fetchNext_closure, A._CursorReader_moveNext_closure, A._CursorReader_moveNext_closure0, A.CompleteIdbRequest_complete_closure, A.CompleteIdbRequest_complete_closure0, A.CompleteOpenIdbRequest_completeOrBlocked_closure, A.CompleteOpenIdbRequest_completeOrBlocked_closure0, A.CompleteOpenIdbRequest_completeOrBlocked_closure1, A.AsynchronousIndexedDbFileSystem_open_closure, A.AsynchronousIndexedDbFileSystem__readFile_closure, A.AsynchronousIndexedDbFileSystem__write_closure, A.SimpleOpfsFileSystem_inDirectory_open, A._InjectedValues_closure, A._InjectedValues_closure0, A._InjectedValues_closure1, A._InjectedValues_closure2, A._InjectedValues_closure3, A._InjectedValues_closure4, A._InjectedValues_closure7, A._InjectedValues_closure8, A._InjectedValues_closure9, A._InjectedValues_closure10, A._InjectedValues_closure17, A._InjectedValues_closure18, A._InjectedValues_closure19, A._InjectedValues_closure20, A._InjectedValues_closure21, A._InjectedValues_closure22, A._InjectedValues_closure23, A._InjectedValues_closure24, A._InjectedValues_closure25, A._InjectedValues_closure26, A._InjectedValues_closure29, A.Chain_Chain$parse_closure, A.Chain_toTrace_closure, A.Chain_toString_closure0, A.Chain_toString__closure0, A.Chain_toString_closure, A.Chain_toString__closure, A.Trace__parseVM_closure, A.Trace$parseV8_closure, A.Trace$parseJSCore_closure, A.Trace$parseFirefox_closure, A.Trace$parseFriendly_closure, A.Trace_toString_closure0, A.Trace_toString_closure, A._EventStreamSubscription_closure, A._EventStreamSubscription_onData_closure]); + _inheritMany(A.Closure0Args, [A.nullFuture_closure, A._AsyncRun__scheduleImmediateJsOverride_internalCallback, A._AsyncRun__scheduleImmediateWithSetImmediate_internalCallback, A._TimerImpl_internalCallback, A._TimerImpl$periodic_closure, A.Future_Future_closure, A.Future_Future$delayed_closure, A._Future__addListener_closure, A._Future__prependListeners_closure, A._Future__chainCoreFuture_closure, A._Future__asyncCompleteWithValue_closure, A._Future__asyncCompleteErrorObject_closure, A._Future__propagateToListeners_handleWhenCompleteCallback, A._Future__propagateToListeners_handleValueCallback, A._Future__propagateToListeners_handleError, A.Stream_length_closure0, A.Stream_first_closure, A.Stream_firstWhere_closure, A.Stream_firstWhere__closure, A._StreamController__subscribe_closure, A._StreamController__recordCancel_complete, A._BufferingStreamSubscription__sendError_sendError, A._BufferingStreamSubscription__sendDone_sendDone, A._PendingEvents_schedule_closure, A._cancelAndError_closure, A._cancelAndValue_closure, A._CustomZone_bindCallback_closure, A._CustomZone_bindCallbackGuarded_closure, A._rootHandleError_closure, A._RootZone_bindCallback_closure, A._RootZone_bindCallbackGuarded_closure, A._Utf8Decoder__decoder_closure, A._Utf8Decoder__decoderNonfatal_closure, A.DriftCommunication_closure, A.ServerImplementation__handleRequest_closure, A.ServerImplementation__handleRequest_closure0, A.ServerImplementation__waitForTurn_idIsActive, A.WebProtocol_deserialize_decodeRequest, A.WebProtocol_deserialize_decodeSuccess, A.WebProtocol__deserializeRequest_readBatched, A.runCancellable_closure, A._BaseExecutor__synchronized_closure, A._BaseExecutor_runSelect_closure, A._BaseExecutor_runDelete_closure, A._BaseExecutor_runInsert_closure, A._BaseExecutor_runCustom_closure, A._BaseExecutor_runBatched_closure, A._StatementBasedTransactionExecutor_ensureOpen_closure, A._StatementBasedTransactionExecutor_ensureOpen_closure0, A.DelegatedDatabase_ensureOpen_closure, A.DelegatedDatabase_close_closure, A._ExclusiveExecutor_ensureOpen_closure, A.Lock_synchronized_callBlockAndComplete, A.Lock_synchronized_callBlockAndComplete_closure, A.WebPortToChannel_channel_closure1, A.DedicatedDriftWorker__handleMessage_closure, A.DriftServerController_serve_closure, A.DriftServerController_serve__closure, A.DriftServerController_serve__closure0, A.DriftServerController_serve__closure1, A.DatabaseImplementation__prepareInternal_freeIntermediateResults, A.AsyncJavaScriptIteratable_listen_fetchNext, A.AsyncJavaScriptIteratable_listen_fetchNextIfNecessary, A.AsynchronousIndexedDbFileSystem_readFully_closure, A._FileWriteRequest__updateBlock_closure, A.IndexedDbFileSystem__startWorkingIfNeeded_closure, A._IndexedDbFile_xTruncate_closure, A._InjectedValues__closure13, A._InjectedValues__closure12, A._InjectedValues__closure11, A._InjectedValues__closure10, A._InjectedValues__closure9, A._InjectedValues__closure8, A._InjectedValues__closure7, A._InjectedValues__closure6, A._InjectedValues__closure5, A._InjectedValues__closure4, A._InjectedValues__closure3, A._InjectedValues__closure2, A._InjectedValues__closure1, A._InjectedValues__closure0, A._InjectedValues__closure, A.Frame_Frame$parseVM_closure, A.Frame_Frame$parseV8_closure, A.Frame_Frame$_parseFirefoxEval_closure, A.Frame_Frame$parseFirefox_closure, A.Frame_Frame$parseFriendly_closure, A.Trace_Trace$from_closure, A.GuaranteeChannel_closure, A.GuaranteeChannel__closure]); + _inheritMany(A.EfficientLengthIterable, [A.ListIterable, A.EmptyIterable, A.LinkedHashMapKeysIterable, A.LinkedHashMapValuesIterable, A.LinkedHashMapEntriesIterable, A._HashMapKeyIterable, A._MapBaseValueIterable]); + _inheritMany(A.ListIterable, [A.SubListIterable, A.MappedListIterable, A.ReversedListIterable]); + _inherit(A.EfficientLengthMappedIterable, A.MappedIterable); + _inherit(A.EfficientLengthTakeIterable, A.TakeIterable); + _inherit(A.EfficientLengthSkipIterable, A.SkipIterable); + _inherit(A.EfficientLengthIndexedIterable, A.IndexedIterable); + _inherit(A._Record2, A._Record); + _inheritMany(A._Record2, [A._Record_2, A._Record_2_file_outFlags]); + _inherit(A.ConstantStringMap, A.ConstantMap); + _inherit(A.Instantiation1, A.Instantiation); + _inherit(A.NullError, A.TypeError); + _inheritMany(A.TearOffClosure, [A.StaticClosure, A.BoundClosure]); + _inheritMany(A.MapBase, [A.JsLinkedHashMap, A._HashMap]); + _inheritMany(A.Closure2Args, [A.JsLinkedHashMap_addAll_closure, A.initHooks_closure0, A._awaitOnObject_closure0, A._wrapJsFunctionForAsync_closure, A.Future_wait_handleError, A._Future__propagateToListeners_handleWhenCompleteCallback_closure0, A._cancelAndErrorClosure_closure, A.HashMap_HashMap$from_closure, A.MapBase_mapToString_closure, A._BigIntImpl_hashCode_combine, A.Uri_parseIPv6Address_error, A.WasmInitializationMessage_sendToWorker_closure, A.WasmInitializationMessage_sendToPort_closure, A.WasmInitializationMessage_sendToClient_closure, A.DatabaseImplementation_createFunction_closure, A.WasmInstance_load_closure, A.WasmInstance_load__closure, A.AsynchronousIndexedDbFileSystem__write_writeBlock, A._InjectedValues_closure5, A._InjectedValues_closure6, A._InjectedValues_closure11, A._InjectedValues_closure12, A._InjectedValues_closure13, A._InjectedValues_closure14, A._InjectedValues_closure15, A._InjectedValues_closure16, A._InjectedValues_closure27, A._InjectedValues_closure28, A.Frame_Frame$parseV8_closure_parseJsLocation]); + _inherit(A.NativeArrayBuffer, A.NativeByteBuffer); + _inheritMany(A.NativeTypedData, [A.NativeByteData, A.NativeTypedArray]); + _inheritMany(A.NativeTypedArray, [A._NativeTypedArrayOfDouble_NativeTypedArray_ListMixin, A._NativeTypedArrayOfInt_NativeTypedArray_ListMixin]); + _inherit(A._NativeTypedArrayOfDouble_NativeTypedArray_ListMixin_FixedLengthListMixin, A._NativeTypedArrayOfDouble_NativeTypedArray_ListMixin); + _inherit(A.NativeTypedArrayOfDouble, A._NativeTypedArrayOfDouble_NativeTypedArray_ListMixin_FixedLengthListMixin); + _inherit(A._NativeTypedArrayOfInt_NativeTypedArray_ListMixin_FixedLengthListMixin, A._NativeTypedArrayOfInt_NativeTypedArray_ListMixin); + _inherit(A.NativeTypedArrayOfInt, A._NativeTypedArrayOfInt_NativeTypedArray_ListMixin_FixedLengthListMixin); + _inheritMany(A.NativeTypedArrayOfDouble, [A.NativeFloat32List, A.NativeFloat64List]); + _inheritMany(A.NativeTypedArrayOfInt, [A.NativeInt16List, A.NativeInt32List, A.NativeInt8List, A.NativeUint16List, A.NativeUint32List, A.NativeUint8ClampedList, A.NativeUint8List]); + _inherit(A._TypeError, A._Error); + _inheritMany(A.Stream, [A._StreamImpl, A._ForwardingStream, A._BoundSinkStream, A.AsyncJavaScriptIteratable, A._CloseGuaranteeStream, A._EventStream]); + _inherit(A._ControllerStream, A._StreamImpl); + _inherit(A._BroadcastStream, A._ControllerStream); + _inheritMany(A._BufferingStreamSubscription, [A._ControllerSubscription, A._ForwardingStreamSubscription, A._SinkTransformerStreamSubscription]); + _inherit(A._BroadcastSubscription, A._ControllerSubscription); + _inherit(A._SyncBroadcastStreamController, A._BroadcastStreamController); + _inheritMany(A._Completer, [A._AsyncCompleter, A._SyncCompleter]); + _inheritMany(A._StreamController, [A._AsyncStreamController, A._SyncStreamController]); + _inheritMany(A._DelayedEvent, [A._DelayedData, A._DelayedError]); + _inherit(A._MapStream, A._ForwardingStream); + _inherit(A._StreamSinkTransformer, A.StreamTransformerBase); + _inherit(A._StreamHandlerTransformer, A._StreamSinkTransformer); + _inheritMany(A._Zone, [A._CustomZone, A._RootZone]); + _inherit(A._IdentityHashMap, A._HashMap); + _inherit(A._SetBase, A.SetBase); + _inherit(A._LinkedHashSet, A._SetBase); + _inheritMany(A.Codec, [A.Encoding, A.Base64Codec, A._FusedCodec]); + _inheritMany(A.Encoding, [A.AsciiCodec, A.Utf8Codec]); + _inheritMany(A.Converter, [A._UnicodeSubsetEncoder, A.Base64Encoder, A.Utf8Encoder]); + _inherit(A.AsciiEncoder, A._UnicodeSubsetEncoder); + _inheritMany(A.ArgumentError, [A.RangeError, A.IndexError]); + _inherit(A._DataUri, A._Uri); + _inheritMany(A.Message, [A.Request, A.SuccessResponse, A.ErrorResponse, A.CancelledResponse]); + _inheritMany(A._Enum, [A.NoArgsRequest, A.StatementMethod, A.NestedExecutorControl, A.UpdateKind, A.SqlDialect, A.ProtocolVersion, A.WasmStorageImplementation, A.WebStorageApi, A.OpenMode, A.WorkerOperation, A.FileType]); + _inherit(A.DatabaseDelegate, A.QueryDelegate); + _inherit(A.NoTransactionDelegate, A.TransactionDelegate); + _inheritMany(A.DbVersionDelegate, [A.NoVersionDelegate, A.DynamicVersionDelegate]); + _inheritMany(A.QueryExecutor, [A._BaseExecutor, A._InterceptedExecutor, A.LazyDatabase]); + _inheritMany(A._BaseExecutor, [A._TransactionExecutor, A.DelegatedDatabase, A._BeforeOpeningExecutor, A._ExclusiveExecutor]); + _inherit(A._StatementBasedTransactionExecutor, A._TransactionExecutor); + _inherit(A._InterceptedTransactionExecutor, A._InterceptedExecutor); + _inherit(A.Sqlite3Delegate, A.DatabaseDelegate); + _inherit(A._SqliteVersionDelegate, A.DynamicVersionDelegate); + _inheritMany(A.WasmInitializationMessage, [A.CompatibilityResult, A.WorkerError, A.ServeDriftDatabase, A.RequestCompatibilityCheck, A.StartFileSystemServer, A.DeleteDatabase]); + _inheritMany(A.CompatibilityResult, [A.SharedWorkerCompatibilityResult, A.DedicatedWorkerCompatibilityResult]); + _inherit(A._CloseVfsOnClose, A.QueryInterceptor); + _inherit(A.WasmDatabase, A.DelegatedDatabase); + _inherit(A._WasmDelegate, A.Sqlite3Delegate); + _inherit(A.InternalStyle, A.Style); + _inheritMany(A.InternalStyle, [A.PosixStyle, A.UrlStyle, A.WindowsStyle]); + _inheritMany(A.FinalizablePart, [A.FinalizableDatabase, A.FinalizableStatement]); + _inherit(A.StatementImplementation, A.CommonPreparedStatement); + _inherit(A.BaseVirtualFileSystem, A.VirtualFileSystem); + _inheritMany(A.BaseVirtualFileSystem, [A.InMemoryFileSystem, A.WasmVfs, A.IndexedDbFileSystem, A.SimpleOpfsFileSystem]); + _inheritMany(A.BaseVfsFile, [A._InMemoryFile, A.WasmFile, A._SimpleOpfsFile]); + _inherit(A._ResultSet_Cursor_ListMixin, A.Cursor); + _inherit(A._ResultSet_Cursor_ListMixin_NonGrowableListMixin, A._ResultSet_Cursor_ListMixin); + _inherit(A.ResultSet, A._ResultSet_Cursor_ListMixin_NonGrowableListMixin); + _inherit(A._Row_Object_UnmodifiableMapMixin_MapMixin, A._Row_Object_UnmodifiableMapMixin); + _inherit(A.Row, A._Row_Object_UnmodifiableMapMixin_MapMixin); + _inherit(A.WasmSqliteBindings, A.RawSqliteBindings); + _inherit(A.WasmDatabase0, A.RawSqliteDatabase); + _inherit(A.WasmStatementCompiler, A.RawStatementCompiler); + _inherit(A.WasmStatement, A.RawSqliteStatement); + _inherit(A.WasmContext, A.RawSqliteContext); + _inherit(A.WasmValue, A.RawSqliteValue); + _inherit(A.WasmSqlite3, A.Sqlite3Implementation); + _inheritMany(A.Message0, [A.EmptyMessage, A.Flags]); + _inherit(A.NameAndInt32Flags, A.Flags); + _inherit(A._IndexedDbWorkItem, A.LinkedListEntry); + _inheritMany(A._IndexedDbWorkItem, [A._FunctionWorkItem, A._DeleteFileWorkItem, A._CreateFileWorkItem, A._WriteFileWorkItem]); + _inheritMany(A.StreamChannelMixin, [A.CloseGuaranteeChannel, A.GuaranteeChannel]); + _inherit(A._CloseGuaranteeSink, A.DelegatingStreamSink); + _inherit(A._IntBuffer, A.TypedDataBuffer); + _inherit(A.Uint8Buffer, A._IntBuffer); + _mixin(A.UnmodifiableListBase, A.UnmodifiableListMixin); + _mixin(A.__CastListBase__CastIterableBase_ListMixin, A.ListBase); + _mixin(A._NativeTypedArrayOfDouble_NativeTypedArray_ListMixin, A.ListBase); + _mixin(A._NativeTypedArrayOfDouble_NativeTypedArray_ListMixin_FixedLengthListMixin, A.FixedLengthListMixin); + _mixin(A._NativeTypedArrayOfInt_NativeTypedArray_ListMixin, A.ListBase); + _mixin(A._NativeTypedArrayOfInt_NativeTypedArray_ListMixin_FixedLengthListMixin, A.FixedLengthListMixin); + _mixin(A._AsyncStreamController, A._AsyncStreamControllerDispatch); + _mixin(A._SyncStreamController, A._SyncStreamControllerDispatch); + _mixin(A._ResultSet_Cursor_ListMixin, A.ListBase); + _mixin(A._ResultSet_Cursor_ListMixin_NonGrowableListMixin, A.NonGrowableListMixin); + _mixin(A._Row_Object_UnmodifiableMapMixin, A.UnmodifiableMapMixin); + _mixin(A._Row_Object_UnmodifiableMapMixin_MapMixin, A.MapBase); + })(); + var init = { + G: typeof self != "undefined" ? self : globalThis, + typeUniverse: {eC: new Map(), tR: {}, eT: {}, tPV: {}, sEA: []}, + mangledGlobalNames: {int: "int", double: "double", num: "num", String: "String", bool: "bool", Null: "Null", List: "List", Object: "Object", Map: "Map", JSObject: "JSObject"}, + mangledNames: {}, + types: ["~()", "~(JSObject)", "Future<~>()", "bool(String)", "int(int,int)", "double(num)", "Null()", "~(Object,StackTrace)", "~(Object?)", "String(String)", "Null(JSObject)", "Null(int)", "Frame()", "int(int)", "Object?(Object?)", "~(@)", "Frame(String)", "Null(int,int,int)", "Future()", "~(JSObject?,List?)", "String(int)", "int(int,int,int)", "~(~())", "int?(int)", "bool(~)", "Null(@)", "num?(List)", "int(int,int,int,JavaScriptBigInt)", "@()", "int(int,int,int,int,int)", "int(int,int,int,int)", "Trace(String)", "~(Object[StackTrace?])", "int(Frame)", "String(Frame)", "bool()", "Future()", "Future()", "~(@,StackTrace)", "~(@,@)", "Null(@,StackTrace)", "int()", "Future()", "Map(List)", "int(List)", "~(int,@)", "Null(QueryExecutor)", "Future(~)", "Null(~())", "@(@,String)", "0&(String,int?)", "bool(int)", "JSObject(JSArray)", "RunningWasmServer()", "Future()", "Future()", "~(EventSink)", "~(bool,bool,bool,List<+(WebStorageApi,String)>)", "Null(Object,StackTrace)", "String(String?)", "String(Object?)", "~(RawSqliteContext,List)", "~(FinalizablePart)", "~(String,Map)", "~(String,Object?)", "~(_OpenedFileHandle)", "JSObject(JSObject?)", "Future<~>(int,Uint8List)", "Future<~>(int)", "Uint8List()", "Future(String)", "@(String)", "Future<~>(Request)", "Null(bool)", "Null(~)", "Null(int,int)", "ResponsePayload?/(Request)", "int(int,JavaScriptBigInt)", "@(@)", "Null(int,int,int,int,JavaScriptBigInt)", "Null(JavaScriptBigInt,int)", "List(Trace)", "int(Trace)", "Future()", "String(Trace)", "CancellationToken<@>?()", "Request()", "Frame(String,String)", "Trace()", "int(@,@)", "SuccessResponse()", "~(Zone?,ZoneDelegate?,Zone,Object,StackTrace)", "0^(Zone?,ZoneDelegate?,Zone,0^())", "0^(Zone?,ZoneDelegate?,Zone,0^(1^),1^)", "0^(Zone?,ZoneDelegate?,Zone,0^(1^,2^),1^,2^)", "0^()(Zone,ZoneDelegate,Zone,0^())", "0^(1^)(Zone,ZoneDelegate,Zone,0^(1^))", "0^(1^,2^)(Zone,ZoneDelegate,Zone,0^(1^,2^))", "AsyncError?(Zone,ZoneDelegate,Zone,Object,StackTrace?)", "~(Zone?,ZoneDelegate?,Zone,~())", "Timer(Zone,ZoneDelegate,Zone,Duration,~())", "Timer(Zone,ZoneDelegate,Zone,Duration,~(Timer))", "~(Zone,ZoneDelegate,Zone,String)", "~(String)", "Zone(Zone?,ZoneDelegate?,Zone,ZoneSpecification?,Map?)", "0^(0^,0^)", "ExecuteBatchedStatement()", "List(JSArray)", "bool?(List)", "bool?(List<@>)", "EmptyMessage(MessageSerializer)", "Flags(MessageSerializer)", "NameAndInt32Flags(MessageSerializer)", "TableUpdate(Object?)", "~(Object?,Object?)"], + interceptorsByTag: null, + leafTags: null, + arrayRti: Symbol("$ti"), + rttc: { + "2;": (t1, t2) => o => o instanceof A._Record_2 && t1._is(o._0) && t2._is(o._1), + "2;file,outFlags": (t1, t2) => o => o instanceof A._Record_2_file_outFlags && t1._is(o._0) && t2._is(o._1) + } + }; + A._Universe_addRules(init.typeUniverse, JSON.parse('{"JavaScriptFunction":"LegacyJavaScriptObject","PlainJavaScriptObject":"LegacyJavaScriptObject","UnknownJavaScriptObject":"LegacyJavaScriptObject","NativeSharedArrayBuffer":"NativeByteBuffer","JSArray":{"List":["1"],"EfficientLengthIterable":["1"],"JSObject":[],"Iterable":["1"],"JSIndexable":["1"]},"JSBool":{"bool":[],"TrustedGetRuntimeType":[]},"JSNull":{"Null":[],"TrustedGetRuntimeType":[]},"JavaScriptObject":{"JSObject":[]},"LegacyJavaScriptObject":{"JSObject":[]},"JSArraySafeToStringHook":{"SafeToStringHook":[]},"JSUnmodifiableArray":{"JSArray":["1"],"List":["1"],"EfficientLengthIterable":["1"],"JSObject":[],"Iterable":["1"],"JSIndexable":["1"]},"ArrayIterator":{"Iterator":["1"]},"JSNumber":{"double":[],"num":[],"Comparable":["num"]},"JSInt":{"double":[],"int":[],"num":[],"Comparable":["num"],"TrustedGetRuntimeType":[]},"JSNumNotInt":{"double":[],"num":[],"Comparable":["num"],"TrustedGetRuntimeType":[]},"JSString":{"String":[],"Comparable":["String"],"Pattern":[],"JSIndexable":["@"],"TrustedGetRuntimeType":[]},"_CastIterableBase":{"Iterable":["2"]},"CastIterator":{"Iterator":["2"]},"CastIterable":{"_CastIterableBase":["1","2"],"Iterable":["2"],"Iterable.E":"2"},"_EfficientLengthCastIterable":{"CastIterable":["1","2"],"_CastIterableBase":["1","2"],"EfficientLengthIterable":["2"],"Iterable":["2"],"Iterable.E":"2"},"_CastListBase":{"ListBase":["2"],"List":["2"],"_CastIterableBase":["1","2"],"EfficientLengthIterable":["2"],"Iterable":["2"]},"CastList":{"_CastListBase":["1","2"],"ListBase":["2"],"List":["2"],"_CastIterableBase":["1","2"],"EfficientLengthIterable":["2"],"Iterable":["2"],"ListBase.E":"2","Iterable.E":"2"},"LateError":{"Error":[]},"CodeUnits":{"ListBase":["int"],"UnmodifiableListMixin":["int"],"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"],"ListBase.E":"int","UnmodifiableListMixin.E":"int"},"EfficientLengthIterable":{"Iterable":["1"]},"ListIterable":{"EfficientLengthIterable":["1"],"Iterable":["1"]},"SubListIterable":{"ListIterable":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1","ListIterable.E":"1"},"ListIterator":{"Iterator":["1"]},"MappedIterable":{"Iterable":["2"],"Iterable.E":"2"},"EfficientLengthMappedIterable":{"MappedIterable":["1","2"],"EfficientLengthIterable":["2"],"Iterable":["2"],"Iterable.E":"2"},"MappedIterator":{"Iterator":["2"]},"MappedListIterable":{"ListIterable":["2"],"EfficientLengthIterable":["2"],"Iterable":["2"],"Iterable.E":"2","ListIterable.E":"2"},"WhereIterable":{"Iterable":["1"],"Iterable.E":"1"},"WhereIterator":{"Iterator":["1"]},"ExpandIterable":{"Iterable":["2"],"Iterable.E":"2"},"ExpandIterator":{"Iterator":["2"]},"TakeIterable":{"Iterable":["1"],"Iterable.E":"1"},"EfficientLengthTakeIterable":{"TakeIterable":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1"},"TakeIterator":{"Iterator":["1"]},"SkipIterable":{"Iterable":["1"],"Iterable.E":"1"},"EfficientLengthSkipIterable":{"SkipIterable":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1"},"SkipIterator":{"Iterator":["1"]},"SkipWhileIterable":{"Iterable":["1"],"Iterable.E":"1"},"SkipWhileIterator":{"Iterator":["1"]},"EmptyIterable":{"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1"},"EmptyIterator":{"Iterator":["1"]},"WhereTypeIterable":{"Iterable":["1"],"Iterable.E":"1"},"WhereTypeIterator":{"Iterator":["1"]},"IndexedIterable":{"Iterable":["+(int,1)"],"Iterable.E":"+(int,1)"},"EfficientLengthIndexedIterable":{"IndexedIterable":["1"],"EfficientLengthIterable":["+(int,1)"],"Iterable":["+(int,1)"],"Iterable.E":"+(int,1)"},"IndexedIterator":{"Iterator":["+(int,1)"]},"UnmodifiableListBase":{"ListBase":["1"],"UnmodifiableListMixin":["1"],"List":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"]},"ReversedListIterable":{"ListIterable":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1","ListIterable.E":"1"},"_Record_2":{"_Record2":[],"_Record":[]},"_Record_2_file_outFlags":{"_Record2":[],"_Record":[]},"ConstantMap":{"Map":["1","2"]},"ConstantStringMap":{"ConstantMap":["1","2"],"Map":["1","2"]},"_KeysOrValues":{"Iterable":["1"],"Iterable.E":"1"},"_KeysOrValuesOrElementsIterator":{"Iterator":["1"]},"Instantiation":{"Closure":[],"Function":[]},"Instantiation1":{"Closure":[],"Function":[]},"NullError":{"TypeError":[],"Error":[]},"JsNoSuchMethodError":{"Error":[]},"UnknownJsTypeError":{"Error":[]},"NullThrownFromJavaScriptException":{"Exception":[]},"_StackTrace":{"StackTrace":[]},"Closure":{"Function":[]},"Closure0Args":{"Closure":[],"Function":[]},"Closure2Args":{"Closure":[],"Function":[]},"TearOffClosure":{"Closure":[],"Function":[]},"StaticClosure":{"Closure":[],"Function":[]},"BoundClosure":{"Closure":[],"Function":[]},"RuntimeError":{"Error":[]},"JsLinkedHashMap":{"MapBase":["1","2"],"LinkedHashMap":["1","2"],"Map":["1","2"],"MapBase.K":"1","MapBase.V":"2"},"LinkedHashMapKeysIterable":{"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1"},"LinkedHashMapKeyIterator":{"Iterator":["1"]},"LinkedHashMapValuesIterable":{"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1"},"LinkedHashMapValueIterator":{"Iterator":["1"]},"LinkedHashMapEntriesIterable":{"EfficientLengthIterable":["MapEntry<1,2>"],"Iterable":["MapEntry<1,2>"],"Iterable.E":"MapEntry<1,2>"},"LinkedHashMapEntryIterator":{"Iterator":["MapEntry<1,2>"]},"_Record2":{"_Record":[]},"JSSyntaxRegExp":{"RegExp":[],"Pattern":[]},"_MatchImplementation":{"RegExpMatch":[],"Match":[]},"_AllMatchesIterable":{"Iterable":["RegExpMatch"],"Iterable.E":"RegExpMatch"},"_AllMatchesIterator":{"Iterator":["RegExpMatch"]},"StringMatch":{"Match":[]},"_StringAllMatchesIterable":{"Iterable":["Match"],"Iterable.E":"Match"},"_StringAllMatchesIterator":{"Iterator":["Match"]},"NativeArrayBuffer":{"NativeByteBuffer":[],"JSObject":[],"ByteBuffer":[],"TrustedGetRuntimeType":[]},"NativeByteData":{"ByteData":[],"JSObject":[],"TrustedGetRuntimeType":[]},"NativeInt32List":{"NativeTypedArrayOfInt":[],"Int32List":[],"ListBase":["int"],"TypedDataList":["int"],"NativeTypedArray":["int"],"List":["int"],"JavaScriptIndexingBehavior":["int"],"EfficientLengthIterable":["int"],"JSObject":[],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"TrustedGetRuntimeType":[],"ListBase.E":"int"},"NativeUint8List":{"NativeTypedArrayOfInt":[],"Uint8List":[],"ListBase":["int"],"TypedDataList":["int"],"NativeTypedArray":["int"],"List":["int"],"JavaScriptIndexingBehavior":["int"],"EfficientLengthIterable":["int"],"JSObject":[],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"TrustedGetRuntimeType":[],"ListBase.E":"int"},"NativeByteBuffer":{"JSObject":[],"ByteBuffer":[],"TrustedGetRuntimeType":[]},"NativeTypedData":{"JSObject":[]},"_UnmodifiableNativeByteBufferView":{"ByteBuffer":[]},"NativeTypedArray":{"JavaScriptIndexingBehavior":["1"],"JSObject":[],"JSIndexable":["1"]},"NativeTypedArrayOfDouble":{"ListBase":["double"],"NativeTypedArray":["double"],"List":["double"],"JavaScriptIndexingBehavior":["double"],"EfficientLengthIterable":["double"],"JSObject":[],"JSIndexable":["double"],"Iterable":["double"],"FixedLengthListMixin":["double"]},"NativeTypedArrayOfInt":{"ListBase":["int"],"NativeTypedArray":["int"],"List":["int"],"JavaScriptIndexingBehavior":["int"],"EfficientLengthIterable":["int"],"JSObject":[],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"]},"NativeFloat32List":{"NativeTypedArrayOfDouble":[],"Float32List":[],"ListBase":["double"],"TypedDataList":["double"],"NativeTypedArray":["double"],"List":["double"],"JavaScriptIndexingBehavior":["double"],"EfficientLengthIterable":["double"],"JSObject":[],"JSIndexable":["double"],"Iterable":["double"],"FixedLengthListMixin":["double"],"TrustedGetRuntimeType":[],"ListBase.E":"double"},"NativeFloat64List":{"NativeTypedArrayOfDouble":[],"Float64List":[],"ListBase":["double"],"TypedDataList":["double"],"NativeTypedArray":["double"],"List":["double"],"JavaScriptIndexingBehavior":["double"],"EfficientLengthIterable":["double"],"JSObject":[],"JSIndexable":["double"],"Iterable":["double"],"FixedLengthListMixin":["double"],"TrustedGetRuntimeType":[],"ListBase.E":"double"},"NativeInt16List":{"NativeTypedArrayOfInt":[],"Int16List":[],"ListBase":["int"],"TypedDataList":["int"],"NativeTypedArray":["int"],"List":["int"],"JavaScriptIndexingBehavior":["int"],"EfficientLengthIterable":["int"],"JSObject":[],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"TrustedGetRuntimeType":[],"ListBase.E":"int"},"NativeInt8List":{"NativeTypedArrayOfInt":[],"Int8List":[],"ListBase":["int"],"TypedDataList":["int"],"NativeTypedArray":["int"],"List":["int"],"JavaScriptIndexingBehavior":["int"],"EfficientLengthIterable":["int"],"JSObject":[],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"TrustedGetRuntimeType":[],"ListBase.E":"int"},"NativeUint16List":{"NativeTypedArrayOfInt":[],"Uint16List":[],"ListBase":["int"],"TypedDataList":["int"],"NativeTypedArray":["int"],"List":["int"],"JavaScriptIndexingBehavior":["int"],"EfficientLengthIterable":["int"],"JSObject":[],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"TrustedGetRuntimeType":[],"ListBase.E":"int"},"NativeUint32List":{"NativeTypedArrayOfInt":[],"Uint32List":[],"ListBase":["int"],"TypedDataList":["int"],"NativeTypedArray":["int"],"List":["int"],"JavaScriptIndexingBehavior":["int"],"EfficientLengthIterable":["int"],"JSObject":[],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"TrustedGetRuntimeType":[],"ListBase.E":"int"},"NativeUint8ClampedList":{"NativeTypedArrayOfInt":[],"Uint8ClampedList":[],"ListBase":["int"],"TypedDataList":["int"],"NativeTypedArray":["int"],"List":["int"],"JavaScriptIndexingBehavior":["int"],"EfficientLengthIterable":["int"],"JSObject":[],"JSIndexable":["int"],"Iterable":["int"],"FixedLengthListMixin":["int"],"TrustedGetRuntimeType":[],"ListBase.E":"int"},"_Error":{"Error":[]},"_TypeError":{"TypeError":[],"Error":[]},"AsyncError":{"Error":[]},"_BufferingStreamSubscription":{"StreamSubscription":["1"],"_EventSink":["1"],"_EventDispatch":["1"],"_BufferingStreamSubscription.T":"1"},"_HandlerEventSink":{"EventSink":["1"]},"_TimerImpl":{"Timer":[]},"_AsyncAwaitCompleter":{"Completer":["1"]},"_SyncStarIterator":{"Iterator":["1"]},"_SyncStarIterable":{"Iterable":["1"],"Iterable.E":"1"},"_BroadcastStream":{"_ControllerStream":["1"],"_StreamImpl":["1"],"Stream":["1"],"Stream.T":"1"},"_BroadcastSubscription":{"_ControllerSubscription":["1"],"_BufferingStreamSubscription":["1"],"StreamSubscription":["1"],"_EventSink":["1"],"_EventDispatch":["1"],"_BufferingStreamSubscription.T":"1"},"_BroadcastStreamController":{"StreamController":["1"],"StreamSink":["1"],"EventSink":["1"],"_StreamControllerLifecycle":["1"],"_EventSink":["1"],"_EventDispatch":["1"]},"_SyncBroadcastStreamController":{"_BroadcastStreamController":["1"],"StreamController":["1"],"StreamSink":["1"],"EventSink":["1"],"_StreamControllerLifecycle":["1"],"_EventSink":["1"],"_EventDispatch":["1"]},"_Completer":{"Completer":["1"]},"_AsyncCompleter":{"_Completer":["1"],"Completer":["1"]},"_SyncCompleter":{"_Completer":["1"],"Completer":["1"]},"_Future":{"Future":["1"]},"StreamTransformerBase":{"StreamTransformer":["1","2"]},"_StreamController":{"StreamController":["1"],"StreamSink":["1"],"EventSink":["1"],"_StreamControllerLifecycle":["1"],"_EventSink":["1"],"_EventDispatch":["1"]},"_AsyncStreamController":{"_AsyncStreamControllerDispatch":["1"],"_StreamController":["1"],"StreamController":["1"],"StreamSink":["1"],"EventSink":["1"],"_StreamControllerLifecycle":["1"],"_EventSink":["1"],"_EventDispatch":["1"]},"_SyncStreamController":{"_SyncStreamControllerDispatch":["1"],"_StreamController":["1"],"StreamController":["1"],"StreamSink":["1"],"EventSink":["1"],"_StreamControllerLifecycle":["1"],"_EventSink":["1"],"_EventDispatch":["1"]},"_ControllerStream":{"_StreamImpl":["1"],"Stream":["1"],"Stream.T":"1"},"_ControllerSubscription":{"_BufferingStreamSubscription":["1"],"StreamSubscription":["1"],"_EventSink":["1"],"_EventDispatch":["1"],"_BufferingStreamSubscription.T":"1"},"_StreamSinkWrapper":{"StreamSink":["1"],"EventSink":["1"]},"_StreamImpl":{"Stream":["1"]},"_DelayedData":{"_DelayedEvent":["1"]},"_DelayedError":{"_DelayedEvent":["@"]},"_DelayedDone":{"_DelayedEvent":["@"]},"_DoneStreamSubscription":{"StreamSubscription":["1"]},"_ForwardingStream":{"Stream":["2"]},"_ForwardingStreamSubscription":{"_BufferingStreamSubscription":["2"],"StreamSubscription":["2"],"_EventSink":["2"],"_EventDispatch":["2"],"_BufferingStreamSubscription.T":"2"},"_MapStream":{"_ForwardingStream":["1","2"],"Stream":["2"],"Stream.T":"2"},"_EventSinkWrapper":{"EventSink":["1"]},"_SinkTransformerStreamSubscription":{"_BufferingStreamSubscription":["2"],"StreamSubscription":["2"],"_EventSink":["2"],"_EventDispatch":["2"],"_BufferingStreamSubscription.T":"2"},"_StreamSinkTransformer":{"StreamTransformer":["1","2"]},"_BoundSinkStream":{"Stream":["2"],"Stream.T":"2"},"_StreamHandlerTransformer":{"_StreamSinkTransformer":["1","2"],"StreamTransformer":["1","2"]},"_ZoneSpecification":{"ZoneSpecification":[]},"_ZoneDelegate":{"ZoneDelegate":[]},"_Zone":{"Zone":[]},"_CustomZone":{"_Zone":[],"Zone":[]},"_RootZone":{"_Zone":[],"Zone":[]},"_HashMap":{"MapBase":["1","2"],"Map":["1","2"],"MapBase.K":"1","MapBase.V":"2"},"_IdentityHashMap":{"_HashMap":["1","2"],"MapBase":["1","2"],"Map":["1","2"],"MapBase.K":"1","MapBase.V":"2"},"_HashMapKeyIterable":{"EfficientLengthIterable":["1"],"Iterable":["1"],"Iterable.E":"1"},"_HashMapKeyIterator":{"Iterator":["1"]},"_LinkedHashSet":{"_SetBase":["1"],"SetBase":["1"],"Set":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"]},"_LinkedHashSetIterator":{"Iterator":["1"]},"LinkedList":{"Iterable":["1"],"Iterable.E":"1"},"_LinkedListIterator":{"Iterator":["1"]},"ListBase":{"List":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"]},"MapBase":{"Map":["1","2"]},"_MapBaseValueIterable":{"EfficientLengthIterable":["2"],"Iterable":["2"],"Iterable.E":"2"},"_MapBaseValueIterator":{"Iterator":["2"]},"SetBase":{"Set":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"]},"_SetBase":{"SetBase":["1"],"Set":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"]},"AsciiCodec":{"Codec":["String","List"]},"_UnicodeSubsetEncoder":{"Converter":["String","List"],"StreamTransformer":["String","List"]},"AsciiEncoder":{"Converter":["String","List"],"StreamTransformer":["String","List"]},"Base64Codec":{"Codec":["List","String"]},"Base64Encoder":{"Converter":["List","String"],"StreamTransformer":["List","String"]},"_FusedCodec":{"Codec":["1","3"]},"Converter":{"StreamTransformer":["1","2"]},"Encoding":{"Codec":["String","List"]},"Utf8Codec":{"Codec":["String","List"]},"Utf8Encoder":{"Converter":["String","List"],"StreamTransformer":["String","List"]},"BigInt":{"Comparable":["BigInt"]},"DateTime":{"Comparable":["DateTime"]},"double":{"num":[],"Comparable":["num"]},"Duration":{"Comparable":["Duration"]},"int":{"num":[],"Comparable":["num"]},"List":{"EfficientLengthIterable":["1"],"Iterable":["1"]},"num":{"Comparable":["num"]},"RegExpMatch":{"Match":[]},"String":{"Comparable":["String"],"Pattern":[]},"_BigIntImpl":{"BigInt":[],"Comparable":["BigInt"]},"_Enum":{"Enum":[]},"AssertionError":{"Error":[]},"TypeError":{"Error":[]},"ArgumentError":{"Error":[]},"RangeError":{"Error":[]},"IndexError":{"Error":[]},"UnsupportedError":{"Error":[]},"UnimplementedError":{"Error":[]},"StateError":{"Error":[]},"ConcurrentModificationError":{"Error":[]},"OutOfMemoryError":{"Error":[]},"StackOverflowError":{"Error":[]},"_Exception":{"Exception":[]},"FormatException":{"Exception":[]},"IntegerDivisionByZeroException":{"Exception":[],"Error":[]},"_StringStackTrace":{"StackTrace":[]},"StringBuffer":{"StringSink":[]},"_Uri":{"Uri":[]},"_SimpleUri":{"Uri":[]},"_DataUri":{"Uri":[]},"NullRejectionException":{"Exception":[]},"_JSSecureRandom":{"Random":[]},"DelegatingStreamSink":{"StreamSink":["1"],"EventSink":["1"]},"ConnectionClosedException":{"Exception":[]},"DriftRemoteException":{"Exception":[]},"Request":{"Message":[]},"SuccessResponse":{"Message":[]},"StatementMethod":{"Enum":[]},"ExecuteBatchedStatement":{"RequestPayload":[]},"NestedExecutorControl":{"Enum":[]},"NotifyTablesUpdated":{"RequestPayload":[]},"PrimitiveResponsePayload":{"ResponsePayload":[]},"ErrorResponse":{"Message":[]},"CancelledResponse":{"Message":[]},"NoArgsRequest":{"Enum":[],"RequestPayload":[]},"ExecuteQuery":{"RequestPayload":[]},"RequestCancellation":{"RequestPayload":[]},"RunNestedExecutorControl":{"RequestPayload":[]},"EnsureOpen":{"RequestPayload":[]},"ServerInfo":{"RequestPayload":[]},"RunBeforeOpen":{"RequestPayload":[]},"SelectResult":{"ResponsePayload":[]},"ServerImplementation":{"DriftServer":[]},"_ServerDbUser":{"QueryExecutorUser":[]},"UpdateKind":{"Enum":[]},"CancellationException":{"Exception":[]},"NoVersionDelegate":{"DbVersionDelegate":[]},"DynamicVersionDelegate":{"DbVersionDelegate":[]},"_BaseExecutor":{"QueryExecutor":[]},"_TransactionExecutor":{"_BaseExecutor":[],"TransactionExecutor":[],"QueryExecutor":[]},"_StatementBasedTransactionExecutor":{"_BaseExecutor":[],"TransactionExecutor":[],"QueryExecutor":[]},"DelegatedDatabase":{"_BaseExecutor":[],"QueryExecutor":[]},"_BeforeOpeningExecutor":{"_BaseExecutor":[],"QueryExecutor":[]},"_ExclusiveExecutor":{"_BaseExecutor":[],"QueryExecutor":[]},"_InterceptedExecutor":{"QueryExecutor":[]},"_InterceptedTransactionExecutor":{"TransactionExecutor":[],"QueryExecutor":[]},"SqlDialect":{"Enum":[]},"Sqlite3Delegate":{"DatabaseDelegate":[]},"_SqliteVersionDelegate":{"DbVersionDelegate":[]},"LazyDatabase":{"QueryExecutor":[]},"SharedWorkerCompatibilityResult":{"WasmInitializationMessage":[]},"ProtocolVersion":{"Enum":[]},"CompatibilityResult":{"WasmInitializationMessage":[]},"WorkerError":{"WasmInitializationMessage":[],"Exception":[]},"ServeDriftDatabase":{"WasmInitializationMessage":[]},"RequestCompatibilityCheck":{"WasmInitializationMessage":[]},"DedicatedWorkerCompatibilityResult":{"WasmInitializationMessage":[]},"StartFileSystemServer":{"WasmInitializationMessage":[]},"DeleteDatabase":{"WasmInitializationMessage":[]},"_CloseVfsOnClose":{"QueryInterceptor":[]},"WasmStorageImplementation":{"Enum":[]},"WebStorageApi":{"Enum":[]},"WasmDatabase":{"DelegatedDatabase":[],"_BaseExecutor":[],"QueryExecutor":[]},"_WasmDelegate":{"Sqlite3Delegate":["CommonDatabase"],"DatabaseDelegate":[],"Sqlite3Delegate.0":"CommonDatabase"},"PathException":{"Exception":[]},"PosixStyle":{"InternalStyle":[]},"UrlStyle":{"InternalStyle":[]},"WindowsStyle":{"InternalStyle":[]},"SqliteException":{"Exception":[]},"SqliteArguments":{"List":["Object?"],"EfficientLengthIterable":["Object?"],"Iterable":["Object?"]},"FinalizableDatabase":{"FinalizablePart":[]},"DatabaseImplementation":{"CommonDatabase":[]},"ValueList":{"ListBase":["Object?"],"List":["Object?"],"EfficientLengthIterable":["Object?"],"Iterable":["Object?"],"ListBase.E":"Object?"},"Sqlite3Implementation":{"CommonSqlite3":[]},"FinalizableStatement":{"FinalizablePart":[]},"StatementImplementation":{"CommonPreparedStatement":[]},"InMemoryFileSystem":{"VirtualFileSystem":[]},"_InMemoryFile":{"VirtualFileSystemFile":[]},"Row":{"UnmodifiableMapMixin":["String","@"],"MapBase":["String","@"],"Map":["String","@"],"MapBase.K":"String","MapBase.V":"@"},"ResultSet":{"ListBase":["Row"],"NonGrowableListMixin":["Row"],"List":["Row"],"EfficientLengthIterable":["Row"],"Cursor":[],"Iterable":["Row"],"ListBase.E":"Row"},"_ResultIterator":{"Iterator":["Row"]},"OpenMode":{"Enum":[]},"IndexedParameters":{"StatementParameters":[]},"VfsException":{"Exception":[]},"BaseVirtualFileSystem":{"VirtualFileSystem":[]},"BaseVfsFile":{"VirtualFileSystemFile":[]},"WasmValue":{"RawSqliteValue":[]},"WasmSqliteBindings":{"RawSqliteBindings":[]},"WasmDatabase0":{"RawSqliteDatabase":[]},"WasmStatement":{"RawSqliteStatement":[]},"WasmContext":{"RawSqliteContext":[]},"WasmValueList":{"ListBase":["WasmValue"],"List":["WasmValue"],"EfficientLengthIterable":["WasmValue"],"Iterable":["WasmValue"],"ListBase.E":"WasmValue"},"AsyncJavaScriptIteratable":{"Stream":["1"],"Stream.T":"1"},"WasmSqlite3":{"CommonSqlite3":[]},"WasmVfs":{"VirtualFileSystem":[]},"WasmFile":{"VirtualFileSystemFile":[]},"WorkerOperation":{"Enum":[]},"EmptyMessage":{"Message0":[]},"Flags":{"Message0":[]},"NameAndInt32Flags":{"Flags":[],"Message0":[]},"IndexedDbFileSystem":{"VirtualFileSystem":[]},"_IndexedDbWorkItem":{"LinkedListEntry":["_IndexedDbWorkItem"]},"_IndexedDbFile":{"VirtualFileSystemFile":[]},"_FunctionWorkItem":{"_IndexedDbWorkItem":[],"LinkedListEntry":["_IndexedDbWorkItem"],"LinkedListEntry.E":"_IndexedDbWorkItem"},"_DeleteFileWorkItem":{"_IndexedDbWorkItem":[],"LinkedListEntry":["_IndexedDbWorkItem"],"LinkedListEntry.E":"_IndexedDbWorkItem"},"_CreateFileWorkItem":{"_IndexedDbWorkItem":[],"LinkedListEntry":["_IndexedDbWorkItem"],"LinkedListEntry.E":"_IndexedDbWorkItem"},"_WriteFileWorkItem":{"_IndexedDbWorkItem":[],"LinkedListEntry":["_IndexedDbWorkItem"],"LinkedListEntry.E":"_IndexedDbWorkItem"},"FileType":{"Enum":[]},"SimpleOpfsFileSystem":{"VirtualFileSystem":[]},"_SimpleOpfsFile":{"VirtualFileSystemFile":[]},"Chain":{"StackTrace":[]},"LazyTrace":{"Trace":[],"StackTrace":[]},"Trace":{"StackTrace":[]},"UnparsedFrame":{"Frame":[]},"CloseGuaranteeChannel":{"StreamChannelMixin":["1"],"StreamChannel":["1"]},"_CloseGuaranteeStream":{"Stream":["1"],"Stream.T":"1"},"_CloseGuaranteeSink":{"DelegatingStreamSink":["1"],"StreamSink":["1"],"EventSink":["1"]},"GuaranteeChannel":{"StreamChannelMixin":["1"],"StreamChannel":["1"]},"_GuaranteeSink":{"StreamSink":["1"],"EventSink":["1"]},"StreamChannelMixin":{"StreamChannel":["1"]},"Uint8Buffer":{"TypedDataBuffer":["int"],"ListBase":["int"],"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"],"ListBase.E":"int","TypedDataBuffer.E":"int"},"TypedDataBuffer":{"ListBase":["1"],"List":["1"],"EfficientLengthIterable":["1"],"Iterable":["1"]},"_IntBuffer":{"TypedDataBuffer":["int"],"ListBase":["int"],"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"]},"_EventStream":{"Stream":["1"],"Stream.T":"1"},"_EventStreamSubscription":{"StreamSubscription":["1"]},"Int8List":{"TypedDataList":["int"],"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"]},"Uint8List":{"TypedDataList":["int"],"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"]},"Uint8ClampedList":{"TypedDataList":["int"],"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"]},"Int16List":{"TypedDataList":["int"],"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"]},"Uint16List":{"TypedDataList":["int"],"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"]},"Int32List":{"TypedDataList":["int"],"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"]},"Uint32List":{"TypedDataList":["int"],"List":["int"],"EfficientLengthIterable":["int"],"Iterable":["int"]},"Float32List":{"TypedDataList":["double"],"List":["double"],"EfficientLengthIterable":["double"],"Iterable":["double"]},"Float64List":{"TypedDataList":["double"],"List":["double"],"EfficientLengthIterable":["double"],"Iterable":["double"]}}')); + A._Universe_addErasedTypes(init.typeUniverse, JSON.parse('{"UnmodifiableListBase":1,"__CastListBase__CastIterableBase_ListMixin":2,"NativeTypedArray":1,"StreamTransformerBase":2,"_DelayedEvent":1,"AggregateContext":1}')); + var string$ = { + x00_____: "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\u03f6\x00\u0404\u03f4 \u03f4\u03f6\u01f6\u01f6\u03f6\u03fc\u01f4\u03ff\u03ff\u0584\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u05d4\u01f4\x00\u01f4\x00\u0504\u05c4\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u0400\x00\u0400\u0200\u03f7\u0200\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u0200\u0200\u0200\u03f7\x00", + x3d_____: "===== asynchronous gap ===========================\n", + Cannoteff: "Cannot extract a file path from a URI with a fragment component", + Cannotefq: "Cannot extract a file path from a URI with a query component", + Cannoten: "Cannot extract a non-Windows file path from a file URI with an authority", + Cannotf: "Cannot fire new event. Controller is already firing an event", + Error_: "Error handler must accept one Object or one Object and a StackTrace as arguments, and return a value of the returned future's type", + Tried_: "Tried to operate on a released prepared statement" + }; + var type$ = (function rtii() { + var findType = A.findType; + return { + AggregateContext_nullable_Object: findType("AggregateContext"), + AsyncError: findType("AsyncError"), + AsyncJavaScriptIteratable_JSArray_nullable_Object: findType("AsyncJavaScriptIteratable>"), + ByteBuffer: findType("ByteBuffer"), + ByteData: findType("ByteData"), + CancellationToken_dynamic: findType("CancellationToken<@>"), + CommonPreparedStatement: findType("CommonPreparedStatement"), + Comparable_dynamic: findType("Comparable<@>"), + DateTime: findType("DateTime"), + DedicatedWorkerCompatibilityResult: findType("DedicatedWorkerCompatibilityResult"), + DriftCommunication: findType("DriftCommunication"), + Duration: findType("Duration"), + EfficientLengthIterable_dynamic: findType("EfficientLengthIterable<@>"), + EmptyMessage: findType("EmptyMessage"), + Error: findType("Error"), + Exception: findType("Exception"), + FileType: findType("FileType"), + FinalizablePart: findType("FinalizablePart"), + Flags: findType("Flags"), + Float32List: findType("Float32List"), + Float64List: findType("Float64List"), + Frame: findType("Frame"), + Frame_Function_String: findType("Frame(String)"), + Function: findType("Function"), + FutureOr_nullable_ResponsePayload_Function_Request: findType("ResponsePayload?/(Request)"), + Future_bool: findType("Future"), + Future_nullable_ResponsePayload: findType("Future"), + Future_nullable_Uint8List: findType("Future"), + IndexedDbFileSystem: findType("IndexedDbFileSystem"), + Int16List: findType("Int16List"), + Int32List: findType("Int32List"), + Int8List: findType("Int8List"), + Iterable_String: findType("Iterable"), + Iterable_double: findType("Iterable"), + Iterable_dynamic: findType("Iterable<@>"), + Iterable_int: findType("Iterable"), + JSArray_ArgumentsForBatchedStatement: findType("JSArray"), + JSArray_CommonPreparedStatement: findType("JSArray"), + JSArray_FinalizableStatement: findType("JSArray"), + JSArray_Frame: findType("JSArray"), + JSArray_Future_void: findType("JSArray>"), + JSArray_JSArray_nullable_Object: findType("JSArray>"), + JSArray_JSObject: findType("JSArray"), + JSArray_List_dynamic: findType("JSArray>"), + JSArray_List_nullable_Object: findType("JSArray>"), + JSArray_Map_of_String_and_nullable_Object: findType("JSArray>"), + JSArray_Object: findType("JSArray"), + JSArray_Record_2_WebStorageApi_and_String: findType("JSArray<+(WebStorageApi,String)>"), + JSArray_StatementImplementation: findType("JSArray"), + JSArray_String: findType("JSArray"), + JSArray_TableUpdate: findType("JSArray"), + JSArray_Trace: findType("JSArray"), + JSArray__OffsetAndBuffer: findType("JSArray<_OffsetAndBuffer>"), + JSArray_double: findType("JSArray"), + JSArray_dynamic: findType("JSArray<@>"), + JSArray_int: findType("JSArray"), + JSArray_nullable_Object: findType("JSArray"), + JSArray_nullable_String: findType("JSArray"), + JSArray_nullable_double: findType("JSArray"), + JSArray_nullable_int: findType("JSArray"), + JSArray_of_void_Function: findType("JSArray<~()>"), + JSIndexable_dynamic: findType("JSIndexable<@>"), + JSNull: findType("JSNull"), + JSObject: findType("JSObject"), + JavaScriptBigInt: findType("JavaScriptBigInt"), + JavaScriptFunction: findType("JavaScriptFunction"), + JavaScriptIndexingBehavior_dynamic: findType("JavaScriptIndexingBehavior<@>"), + JavaScriptSymbol: findType("JavaScriptSymbol"), + LinkedList__IndexedDbWorkItem: findType("LinkedList<_IndexedDbWorkItem>"), + List_JSArray_nullable_Object: findType("List>"), + List_JSObject: findType("List"), + List_Map_of_String_and_nullable_Object: findType("List>"), + List_RawSqliteValue: findType("List"), + List_Record_2_WebStorageApi_and_String: findType("List<+(WebStorageApi,String)>"), + List_String: findType("List"), + List_dynamic: findType("List<@>"), + List_int: findType("List"), + List_nullable_Object: findType("List"), + Map_String_JSObject: findType("Map"), + Map_String_int: findType("Map"), + Map_dynamic_dynamic: findType("Map<@,@>"), + Map_of_String_and_Map_String_JSObject: findType("Map>"), + Map_of_String_and_nullable_Object: findType("Map"), + MappedIterable_String_Frame: findType("MappedIterable"), + MappedListIterable_String_Trace: findType("MappedListIterable"), + MappedListIterable_String_dynamic: findType("MappedListIterable"), + Message: findType("Message"), + Message_2: findType("Message0"), + NameAndInt32Flags: findType("NameAndInt32Flags"), + NativeArrayBuffer: findType("NativeArrayBuffer"), + NativeByteData: findType("NativeByteData"), + NativeInt32List: findType("NativeInt32List"), + NativeTypedArrayOfDouble: findType("NativeTypedArrayOfDouble"), + NativeTypedArrayOfInt: findType("NativeTypedArrayOfInt"), + NativeUint8List: findType("NativeUint8List"), + NotifyTablesUpdated: findType("NotifyTablesUpdated"), + Null: findType("Null"), + Object: findType("Object"), + QueryExecutor: findType("QueryExecutor"), + QueryResult: findType("QueryResult"), + Record: findType("Record"), + Record_0: findType("+()"), + Record_2_nullable_JSObject_and_JSObject: findType("+(JSObject?,JSObject)"), + Record_2_nullable_Object_and_int: findType("+(Object?,int)"), + RegExpMatch: findType("RegExpMatch"), + RegisteredFunctionSet: findType("RegisteredFunctionSet"), + Request: findType("Request"), + ResponsePayload: findType("ResponsePayload"), + ReversedListIterable_String: findType("ReversedListIterable"), + Row: findType("Row"), + RunningWasmServer: findType("RunningWasmServer"), + SelectResult: findType("SelectResult"), + ServeDriftDatabase: findType("ServeDriftDatabase"), + SessionApplyCallbacks: findType("SessionApplyCallbacks"), + SharedWorkerCompatibilityResult: findType("SharedWorkerCompatibilityResult"), + SimpleOpfsFileSystem: findType("SimpleOpfsFileSystem"), + SqlDialect: findType("SqlDialect"), + SqliteException: findType("SqliteException"), + SqliteResult_nullable_RawSqliteStatement: findType("SqliteResult"), + StackTrace: findType("StackTrace"), + StatementImplementation: findType("StatementImplementation"), + StreamChannelController_nullable_Object: findType("StreamChannelController"), + String: findType("String"), + Timer: findType("Timer"), + Trace: findType("Trace"), + Trace_Function_String: findType("Trace(String)"), + TransactionExecutor: findType("TransactionExecutor"), + TrustedGetRuntimeType: findType("TrustedGetRuntimeType"), + TypeError: findType("TypeError"), + Uint16List: findType("Uint16List"), + Uint32List: findType("Uint32List"), + Uint8Buffer: findType("Uint8Buffer"), + Uint8ClampedList: findType("Uint8ClampedList"), + Uint8List: findType("Uint8List"), + UnknownJavaScriptObject: findType("UnknownJavaScriptObject"), + Uri: findType("Uri"), + VfsWorker: findType("VfsWorker"), + VirtualFileSystem: findType("VirtualFileSystem"), + VirtualFileSystemFile: findType("VirtualFileSystemFile"), + WasmBindings: findType("WasmBindings"), + WasmSqlite3: findType("WasmSqlite3"), + WasmStorageImplementation: findType("WasmStorageImplementation"), + WasmValue: findType("WasmValue"), + WasmVfs: findType("WasmVfs"), + WhereIterable_String: findType("WhereIterable"), + WhereTypeIterable_String: findType("WhereTypeIterable"), + WorkerOperation_Flags_EmptyMessage: findType("WorkerOperation"), + WorkerOperation_Flags_Flags: findType("WorkerOperation"), + WorkerOperation_NameAndInt32Flags_Flags: findType("WorkerOperation"), + Zone: findType("Zone"), + _AsyncCompleter_SharedWorkerCompatibilityResult: findType("_AsyncCompleter"), + _AsyncCompleter_bool: findType("_AsyncCompleter"), + _AsyncCompleter_nullable_Uint8List: findType("_AsyncCompleter"), + _AsyncCompleter_void: findType("_AsyncCompleter<~>"), + _BigIntImpl: findType("_BigIntImpl"), + _CursorReader_JSObject: findType("_CursorReader"), + _EventStream_JSObject: findType("_EventStream"), + _Future_JSObject: findType("_Future"), + _Future_SharedWorkerCompatibilityResult: findType("_Future"), + _Future_bool: findType("_Future"), + _Future_dynamic: findType("_Future<@>"), + _Future_int: findType("_Future"), + _Future_nullable_Uint8List: findType("_Future"), + _Future_void: findType("_Future<~>"), + _IdentityHashMap_of_nullable_Object_and_nullable_Object: findType("_IdentityHashMap"), + _OpenedFileHandle: findType("_OpenedFileHandle"), + _PendingRequest: findType("_PendingRequest"), + _ResolvedPath: findType("_ResolvedPath"), + _StreamControllerAddStreamState_nullable_Object: findType("_StreamControllerAddStreamState"), + _StreamIterator_JSObject: findType("_StreamIterator"), + _SyncBroadcastStreamController_void: findType("_SyncBroadcastStreamController<~>"), + _SyncCompleter_JSObject: findType("_SyncCompleter"), + _SyncCompleter_bool: findType("_SyncCompleter"), + _SyncCompleter_void: findType("_SyncCompleter<~>"), + _ZoneFunction_of_void_Function_Zone_ZoneDelegate_Zone_Object_StackTrace: findType("_ZoneFunction<~(Zone,ZoneDelegate,Zone,Object,StackTrace)>"), + bool: findType("bool"), + bool_Function_Object: findType("bool(Object)"), + bool_Function_String: findType("bool(String)"), + double: findType("double"), + dynamic: findType("@"), + dynamic_Function: findType("@()"), + dynamic_Function_Object: findType("@(Object)"), + dynamic_Function_Object_StackTrace: findType("@(Object,StackTrace)"), + dynamic_Function_String: findType("@(String)"), + int: findType("int"), + nullable_FutureOr_nullable_Uint8List_Function: findType("Uint8List?/()?"), + nullable_Future_Null: findType("Future?"), + nullable_JSObject: findType("JSObject?"), + nullable_JavaScriptFunction: findType("JavaScriptFunction?"), + nullable_List_JSObject: findType("List?"), + nullable_Map_of_nullable_Object_and_nullable_Object: findType("Map?"), + nullable_NativeUint8List: findType("NativeUint8List?"), + nullable_Object: findType("Object?"), + nullable_Object_Function_SqliteArguments: findType("Object?(SqliteArguments)"), + nullable_RequestPayload: findType("RequestPayload?"), + nullable_ResponsePayload: findType("ResponsePayload?"), + nullable_StackTrace: findType("StackTrace?"), + nullable_String: findType("String?"), + nullable_Uint8Buffer: findType("Uint8Buffer?"), + nullable_Uint8List: findType("Uint8List?"), + nullable_Zone: findType("Zone?"), + nullable_ZoneDelegate: findType("ZoneDelegate?"), + nullable_ZoneSpecification: findType("ZoneSpecification?"), + nullable__DelayedEvent_dynamic: findType("_DelayedEvent<@>?"), + nullable__FutureListener_dynamic_dynamic: findType("_FutureListener<@,@>?"), + nullable__LinkedHashSetCell: findType("_LinkedHashSetCell?"), + nullable_bool: findType("bool?"), + nullable_double: findType("double?"), + nullable_int: findType("int?"), + nullable_int_Function: findType("int()?"), + nullable_num: findType("num?"), + nullable_void_Function: findType("~()?"), + nullable_void_Function_2_RawSqliteContext_and_List_RawSqliteValue: findType("~(RawSqliteContext,List)?"), + nullable_void_Function_JSObject: findType("~(JSObject)?"), + nullable_void_Function_int_String_int: findType("~(int,String,int)?"), + num: findType("num"), + void: findType("~"), + void_Function: findType("~()"), + void_Function_2_nullable_JSObject_and_nullable_List_JSObject: findType("~(JSObject?,List?)"), + void_Function_Object: findType("~(Object)"), + void_Function_Object_StackTrace: findType("~(Object,StackTrace)"), + void_Function_Timer: findType("~(Timer)") + }; + })(); + (function constants() { + var makeConstList = hunkHelpers.makeConstList; + B.Interceptor_methods = J.Interceptor.prototype; + B.JSArray_methods = J.JSArray.prototype; + B.JSInt_methods = J.JSInt.prototype; + B.JSNumber_methods = J.JSNumber.prototype; + B.JSString_methods = J.JSString.prototype; + B.JavaScriptFunction_methods = J.JavaScriptFunction.prototype; + B.JavaScriptObject_methods = J.JavaScriptObject.prototype; + B.NativeByteData_methods = A.NativeByteData.prototype; + B.NativeUint8List_methods = A.NativeUint8List.prototype; + B.PlainJavaScriptObject_methods = J.PlainJavaScriptObject.prototype; + B.UnknownJavaScriptObject_methods = J.UnknownJavaScriptObject.prototype; + B.AllowedArgumentCount_0 = new A.AllowedArgumentCount(0); + B.AllowedArgumentCount_1 = new A.AllowedArgumentCount(1); + B.AllowedArgumentCount_2 = new A.AllowedArgumentCount(2); + B.AllowedArgumentCount_3 = new A.AllowedArgumentCount(3); + B.AllowedArgumentCount_m1 = new A.AllowedArgumentCount(-1); + B.AsciiEncoder_127 = new A.AsciiEncoder(127); + B.CONSTANT = new A.Instantiation1(A.math__max$closure(), A.findType("Instantiation1")); + B.C_AsciiCodec = new A.AsciiCodec(); + B.C_Base64Encoder = new A.Base64Encoder(); + B.C_Base64Codec = new A.Base64Codec(); + B.C_CancellationException = new A.CancellationException(); + B.C_ConnectionClosedException = new A.ConnectionClosedException(); + B.C_DefaultEquality = new A.DefaultEquality(A.findType("DefaultEquality<0&>")); + B.C_DriftProtocol = new A.DriftProtocol(); + B.C_EmptyIterator = new A.EmptyIterator(A.findType("EmptyIterator<0&>")); + B.C_EmptyMessage = new A.EmptyMessage(); + B.C_IntegerDivisionByZeroException = new A.IntegerDivisionByZeroException(); + B.C_JS_CONST = function getTagFallback(o) { + var s = Object.prototype.toString.call(o); + return s.substring(8, s.length - 1); +}; + B.C_JS_CONST0 = 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.C_JS_CONST6 = 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.C_JS_CONST1 = function(hooks) { + if (typeof dartExperimentalFixupGetTag != "function") return hooks; + hooks.getTag = dartExperimentalFixupGetTag(hooks.getTag); +}; + B.C_JS_CONST5 = 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.C_JS_CONST4 = 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.C_JS_CONST2 = 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.C_JS_CONST3 = function(hooks) { return hooks; } +; + B.C_ListEquality = new A.ListEquality(A.findType("ListEquality")); + B.C_NoTransactionDelegate = new A.NoTransactionDelegate(); + B.C_NoVersionDelegate = new A.NoVersionDelegate(); + B.C_OutOfMemoryError = new A.OutOfMemoryError(); + B.C_SentinelValue = new A.SentinelValue(); + B.C_Utf8Codec = new A.Utf8Codec(); + B.C_Utf8Encoder = new A.Utf8Encoder(); + B.C__DelayedDone = new A._DelayedDone(); + B.C__RootZone = new A._RootZone(); + B.Duration_0 = new A.Duration(0); + B.FormatException_IWx = new A.FormatException("Unknown tag", null, null); + B.FormatException_NvI = new A.FormatException("Cannot read message", null, null); + B.List_11 = makeConstList([11], type$.JSArray_int); + B.WebStorageApi_0 = new A.WebStorageApi(0, "opfs"); + B.WasmStorageImplementation_0_opfsShared = new A.WasmStorageImplementation(0, "opfsShared"); + B.WasmStorageImplementation_1_opfsLocks = new A.WasmStorageImplementation(1, "opfsLocks"); + B.WebStorageApi_1 = new A.WebStorageApi(1, "indexedDb"); + B.WasmStorageImplementation_2_sharedIndexedDb = new A.WasmStorageImplementation(2, "sharedIndexedDb"); + B.WasmStorageImplementation_3_unsafeIndexedDb = new A.WasmStorageImplementation(3, "unsafeIndexedDb"); + B.WasmStorageImplementation_4_inMemory = new A.WasmStorageImplementation(4, "inMemory"); + B.List_5sp = makeConstList([B.WasmStorageImplementation_0_opfsShared, B.WasmStorageImplementation_1_opfsLocks, B.WasmStorageImplementation_2_sharedIndexedDb, B.WasmStorageImplementation_3_unsafeIndexedDb, B.WasmStorageImplementation_4_inMemory], A.findType("JSArray")); + B.UpdateKind_0 = new A.UpdateKind(0, "insert"); + B.UpdateKind_1 = new A.UpdateKind(1, "update"); + B.UpdateKind_2 = new A.UpdateKind(2, "delete"); + B.List_L4j = makeConstList([B.UpdateKind_0, B.UpdateKind_1, B.UpdateKind_2], A.findType("JSArray")); + B.List_WebStorageApi_0_WebStorageApi_1 = makeConstList([B.WebStorageApi_0, B.WebStorageApi_1], A.findType("JSArray")); + B.List_empty = makeConstList([], type$.JSArray_JSObject); + B.List_empty2 = makeConstList([], type$.JSArray_List_nullable_Object); + B.List_empty3 = makeConstList([], type$.JSArray_Object); + B.List_empty0 = makeConstList([], type$.JSArray_String); + B.List_empty1 = makeConstList([], type$.JSArray_nullable_Object); + B.List_empty4 = makeConstList([], type$.JSArray_Record_2_WebStorageApi_and_String); + B.FileType_Gi5 = new A.FileType("/database", 0, "database"); + B.FileType_Pwc = new A.FileType("/database-journal", 1, "journal"); + B.List_fyc = makeConstList([B.FileType_Gi5, B.FileType_Pwc], A.findType("JSArray")); + B.WorkerOperation_W3i = new A.WorkerOperation(A.sync_channel_MessageSerializer_readNameAndFlags$closure(), A.sync_channel_MessageSerializer_readFlags$closure(), 0, "xAccess", type$.WorkerOperation_NameAndInt32Flags_Flags); + B.WorkerOperation_aCN = new A.WorkerOperation(A.sync_channel_MessageSerializer_readNameAndFlags$closure(), A.sync_channel_MessageSerializer_readEmpty$closure(), 1, "xDelete", A.findType("WorkerOperation")); + B.WorkerOperation_readNameAndFlags_readFlags_2_xOpen = new A.WorkerOperation(A.sync_channel_MessageSerializer_readNameAndFlags$closure(), A.sync_channel_MessageSerializer_readFlags$closure(), 2, "xOpen", type$.WorkerOperation_NameAndInt32Flags_Flags); + B.WorkerOperation_readFlags_readFlags_3_xRead = new A.WorkerOperation(A.sync_channel_MessageSerializer_readFlags$closure(), A.sync_channel_MessageSerializer_readFlags$closure(), 3, "xRead", type$.WorkerOperation_Flags_Flags); + B.WorkerOperation_readFlags_readEmpty_4_xWrite = new A.WorkerOperation(A.sync_channel_MessageSerializer_readFlags$closure(), A.sync_channel_MessageSerializer_readEmpty$closure(), 4, "xWrite", type$.WorkerOperation_Flags_EmptyMessage); + B.WorkerOperation_readFlags_readEmpty_5_xSleep = new A.WorkerOperation(A.sync_channel_MessageSerializer_readFlags$closure(), A.sync_channel_MessageSerializer_readEmpty$closure(), 5, "xSleep", type$.WorkerOperation_Flags_EmptyMessage); + B.WorkerOperation_readFlags_readEmpty_6_xClose = new A.WorkerOperation(A.sync_channel_MessageSerializer_readFlags$closure(), A.sync_channel_MessageSerializer_readEmpty$closure(), 6, "xClose", type$.WorkerOperation_Flags_EmptyMessage); + B.WorkerOperation_readFlags_readFlags_7_xFileSize = new A.WorkerOperation(A.sync_channel_MessageSerializer_readFlags$closure(), A.sync_channel_MessageSerializer_readFlags$closure(), 7, "xFileSize", type$.WorkerOperation_Flags_Flags); + B.WorkerOperation_readFlags_readEmpty_8_xSync = new A.WorkerOperation(A.sync_channel_MessageSerializer_readFlags$closure(), A.sync_channel_MessageSerializer_readEmpty$closure(), 8, "xSync", type$.WorkerOperation_Flags_EmptyMessage); + B.WorkerOperation_readFlags_readEmpty_9_xTruncate = new A.WorkerOperation(A.sync_channel_MessageSerializer_readFlags$closure(), A.sync_channel_MessageSerializer_readEmpty$closure(), 9, "xTruncate", type$.WorkerOperation_Flags_EmptyMessage); + B.WorkerOperation_readFlags_readEmpty_10_xLock = new A.WorkerOperation(A.sync_channel_MessageSerializer_readFlags$closure(), A.sync_channel_MessageSerializer_readEmpty$closure(), 10, "xLock", type$.WorkerOperation_Flags_EmptyMessage); + B.WorkerOperation_readFlags_readEmpty_11_xUnlock = new A.WorkerOperation(A.sync_channel_MessageSerializer_readFlags$closure(), A.sync_channel_MessageSerializer_readEmpty$closure(), 11, "xUnlock", type$.WorkerOperation_Flags_EmptyMessage); + B.WorkerOperation_readEmpty_readEmpty_12_stopServer = new A.WorkerOperation(A.sync_channel_MessageSerializer_readEmpty$closure(), A.sync_channel_MessageSerializer_readEmpty$closure(), 12, "stopServer", A.findType("WorkerOperation")); + B.List_mvT = makeConstList([B.WorkerOperation_W3i, B.WorkerOperation_aCN, B.WorkerOperation_readNameAndFlags_readFlags_2_xOpen, B.WorkerOperation_readFlags_readFlags_3_xRead, B.WorkerOperation_readFlags_readEmpty_4_xWrite, B.WorkerOperation_readFlags_readEmpty_5_xSleep, B.WorkerOperation_readFlags_readEmpty_6_xClose, B.WorkerOperation_readFlags_readFlags_7_xFileSize, B.WorkerOperation_readFlags_readEmpty_8_xSync, B.WorkerOperation_readFlags_readEmpty_9_xTruncate, B.WorkerOperation_readFlags_readEmpty_10_xLock, B.WorkerOperation_readFlags_readEmpty_11_xUnlock, B.WorkerOperation_readEmpty_readEmpty_12_stopServer], A.findType("JSArray>")); + B.SqlDialect_0_sqlite = new A.SqlDialect(0, "sqlite"); + B.SqlDialect_1_mysql = new A.SqlDialect(1, "mysql"); + B.SqlDialect_2_postgres = new A.SqlDialect(2, "postgres"); + B.SqlDialect_3_mariadb = new A.SqlDialect(3, "mariadb"); + B.List_rcv = makeConstList([B.SqlDialect_0_sqlite, B.SqlDialect_1_mysql, B.SqlDialect_2_postgres, B.SqlDialect_3_mariadb], A.findType("JSArray")); + B.StatementMethod_0 = new A.StatementMethod(0, "custom"); + B.StatementMethod_1 = new A.StatementMethod(1, "deleteOrUpdate"); + B.StatementMethod_2 = new A.StatementMethod(2, "insert"); + B.StatementMethod_3 = new A.StatementMethod(3, "select"); + B.List_s6K = makeConstList([B.StatementMethod_0, B.StatementMethod_1, B.StatementMethod_2, B.StatementMethod_3], A.findType("JSArray")); + B.NestedExecutorControl_0 = new A.NestedExecutorControl(0, "beginTransaction"); + B.NestedExecutorControl_1 = new A.NestedExecutorControl(1, "commit"); + B.NestedExecutorControl_2 = new A.NestedExecutorControl(2, "rollback"); + B.NestedExecutorControl_3 = new A.NestedExecutorControl(3, "startExclusive"); + B.NestedExecutorControl_4 = new A.NestedExecutorControl(4, "endExclusive"); + B.List_ttt = makeConstList([B.NestedExecutorControl_0, B.NestedExecutorControl_1, B.NestedExecutorControl_2, B.NestedExecutorControl_3, B.NestedExecutorControl_4], A.findType("JSArray")); + B.Object_empty = {}; + B.Map_empty = new A.ConstantStringMap(B.Object_empty, [], A.findType("ConstantStringMap")); + B.NoArgsRequest_0 = new A.NoArgsRequest(0, "terminateAll"); + B.OpenMode_2 = new A.OpenMode(2, "readWriteCreate"); + B.ProtocolVersion_0_0_legacy = new A.ProtocolVersion(0, 0, "legacy"); + B.ProtocolVersion_1_1_v1 = new A.ProtocolVersion(1, 1, "v1"); + B.ProtocolVersion_2_2_v2 = new A.ProtocolVersion(2, 2, "v2"); + B.ProtocolVersion_3_3_v3 = new A.ProtocolVersion(3, 3, "v3"); + B.ProtocolVersion_4_4_v4 = new A.ProtocolVersion(4, 4, "v4"); + B.List_empty5 = makeConstList([], type$.JSArray_Map_of_String_and_nullable_Object); + B.SelectResult_List_empty = new A.SelectResult(B.List_empty5); + B.Symbol_hNH = new A.Symbol("drift.runtime.cancellation"); + B.Type_ByteBuffer_rqD = A.typeLiteral("ByteBuffer"); + B.Type_ByteData_9dB = A.typeLiteral("ByteData"); + B.Type_Float32List_9Kz = A.typeLiteral("Float32List"); + B.Type_Float64List_9Kz = A.typeLiteral("Float64List"); + B.Type_Int16List_s5h = A.typeLiteral("Int16List"); + B.Type_Int32List_O8Z = A.typeLiteral("Int32List"); + B.Type_Int8List_rFV = A.typeLiteral("Int8List"); + B.Type_Object_A4p = A.typeLiteral("Object"); + B.Type_Uint16List_kmP = A.typeLiteral("Uint16List"); + B.Type_Uint32List_kmP = A.typeLiteral("Uint32List"); + B.Type_Uint8ClampedList_04U = A.typeLiteral("Uint8ClampedList"); + B.Type_Uint8List_8Eb = A.typeLiteral("Uint8List"); + B.VfsException_10 = new A.VfsException(10); + B.VfsException_12 = new A.VfsException(12); + B.VfsException_14 = new A.VfsException(14); + B.VfsException_2570 = new A.VfsException(2570); + B.VfsException_3850 = new A.VfsException(3850); + B.VfsException_522 = new A.VfsException(522); + B.VfsException_778 = new A.VfsException(778); + B.VfsException_8 = new A.VfsException(8); + B._PathDirection_6kc = new A._PathDirection("reaches root"); + B._PathDirection_Wme = new A._PathDirection("below root"); + B._PathDirection_dMN = new A._PathDirection("at root"); + B._PathDirection_vgO = new A._PathDirection("above root"); + B._PathRelation_different = new A._PathRelation("different"); + B._PathRelation_equal = new A._PathRelation("equal"); + B._PathRelation_inconclusive = new A._PathRelation("inconclusive"); + B._PathRelation_within = new A._PathRelation("within"); + B._StringStackTrace_OdL = new A._StringStackTrace(""); + B._ZoneFunction_KjJ = new A._ZoneFunction(B.C__RootZone, A.async___rootHandleUncaughtError$closure(), type$._ZoneFunction_of_void_Function_Zone_ZoneDelegate_Zone_Object_StackTrace); + B._ZoneFunction_PAY = new A._ZoneFunction(B.C__RootZone, A.async___rootCreatePeriodicTimer$closure(), A.findType("_ZoneFunction")); + B._ZoneFunction_Xkh = new A._ZoneFunction(B.C__RootZone, A.async___rootRegisterUnaryCallback$closure(), A.findType("_ZoneFunction<0^(1^)(Zone,ZoneDelegate,Zone,0^(1^))>")); + B._ZoneFunction__RootZone__rootCreateTimer = new A._ZoneFunction(B.C__RootZone, A.async___rootCreateTimer$closure(), A.findType("_ZoneFunction")); + B._ZoneFunction__RootZone__rootErrorCallback = new A._ZoneFunction(B.C__RootZone, A.async___rootErrorCallback$closure(), A.findType("_ZoneFunction")); + B._ZoneFunction__RootZone__rootFork = new A._ZoneFunction(B.C__RootZone, A.async___rootFork$closure(), A.findType("_ZoneFunction?)>")); + B._ZoneFunction__RootZone__rootPrint = new A._ZoneFunction(B.C__RootZone, A.async___rootPrint$closure(), A.findType("_ZoneFunction<~(Zone,ZoneDelegate,Zone,String)>")); + B._ZoneFunction__RootZone__rootRegisterCallback = new A._ZoneFunction(B.C__RootZone, A.async___rootRegisterCallback$closure(), A.findType("_ZoneFunction<0^()(Zone,ZoneDelegate,Zone,0^())>")); + B._ZoneFunction__RootZone__rootRun = new A._ZoneFunction(B.C__RootZone, A.async___rootRun$closure(), A.findType("_ZoneFunction<0^(Zone,ZoneDelegate,Zone,0^())>")); + B._ZoneFunction__RootZone__rootRunBinary = new A._ZoneFunction(B.C__RootZone, A.async___rootRunBinary$closure(), A.findType("_ZoneFunction<0^(Zone,ZoneDelegate,Zone,0^(1^,2^),1^,2^)>")); + B._ZoneFunction__RootZone__rootRunUnary = new A._ZoneFunction(B.C__RootZone, A.async___rootRunUnary$closure(), A.findType("_ZoneFunction<0^(Zone,ZoneDelegate,Zone,0^(1^),1^)>")); + B._ZoneFunction__RootZone__rootScheduleMicrotask = new A._ZoneFunction(B.C__RootZone, A.async___rootScheduleMicrotask$closure(), A.findType("_ZoneFunction<~(Zone,ZoneDelegate,Zone,~())>")); + B._ZoneFunction_e9o = new A._ZoneFunction(B.C__RootZone, A.async___rootRegisterBinaryCallback$closure(), A.findType("_ZoneFunction<0^(1^,2^)(Zone,ZoneDelegate,Zone,0^(1^,2^))>")); + B._ZoneSpecification_Ipa = new A._ZoneSpecification(null, null, null, null, null, null, null, null, null, null, null, null, null); + })(); + (function staticFields() { + $._JS_INTEROP_INTERCEPTOR_TAG = null; + $.toStringVisiting = A._setArrayType([], type$.JSArray_Object); + $.printToZone = null; + $.Primitives__identityHashCodeProperty = null; + $.BoundClosure__receiverFieldNameCache = null; + $.BoundClosure__interceptorFieldNameCache = null; + $.getTagFunction = null; + $.alternateTagFunction = null; + $.prototypeForTagFunction = null; + $.dispatchRecordsForInstanceTags = null; + $.interceptorsForUncacheableTags = null; + $.initNativeDispatchFlag = null; + $._Record__computedFieldKeys = A._setArrayType([], A.findType("JSArray?>")); + $._nextCallback = null; + $._lastCallback = null; + $._lastPriorityCallback = null; + $._isInCallbackLoop = false; + $.Zone__current = B.C__RootZone; + $._RootZone__rootDelegate = null; + $._BigIntImpl__lastDividendDigits = null; + $._BigIntImpl__lastDividendUsed = null; + $._BigIntImpl__lastDivisorDigits = null; + $._BigIntImpl__lastDivisorUsed = null; + $._BigIntImpl____lastQuoRemDigits = A._Cell$named("_lastQuoRemDigits"); + $._BigIntImpl____lastQuoRemUsed = A._Cell$named("_lastQuoRemUsed"); + $._BigIntImpl____lastRemUsed = A._Cell$named("_lastRemUsed"); + $._BigIntImpl____lastRem_nsh = A._Cell$named("_lastRem_nsh"); + $.Uri__cachedBaseString = ""; + $.Uri__cachedBaseUri = null; + $._currentUriBase = null; + $._current = null; + })(); + (function lazyInitializers() { + var _lazyFinal = hunkHelpers.lazyFinal, + _lazy = hunkHelpers.lazy; + _lazyFinal($, "DART_CLOSURE_PROPERTY_NAME", "$get$DART_CLOSURE_PROPERTY_NAME", () => A.getIsolateAffinityTag("_$dart_dartClosure")); + _lazyFinal($, "nullFuture", "$get$nullFuture", () => B.C__RootZone.run$1$1(new A.nullFuture_closure(), A.findType("Future<~>"))); + _lazyFinal($, "_safeToStringHooks", "$get$_safeToStringHooks", () => A._setArrayType([new J.JSArraySafeToStringHook()], A.findType("JSArray"))); + _lazyFinal($, "TypeErrorDecoder_noSuchMethodPattern", "$get$TypeErrorDecoder_noSuchMethodPattern", () => A.TypeErrorDecoder_extractPattern(A.TypeErrorDecoder_provokeCallErrorOn({ + toString: function() { + return "$receiver$"; + } + }))); + _lazyFinal($, "TypeErrorDecoder_notClosurePattern", "$get$TypeErrorDecoder_notClosurePattern", () => A.TypeErrorDecoder_extractPattern(A.TypeErrorDecoder_provokeCallErrorOn({$method$: null, + toString: function() { + return "$receiver$"; + } + }))); + _lazyFinal($, "TypeErrorDecoder_nullCallPattern", "$get$TypeErrorDecoder_nullCallPattern", () => A.TypeErrorDecoder_extractPattern(A.TypeErrorDecoder_provokeCallErrorOn(null))); + _lazyFinal($, "TypeErrorDecoder_nullLiteralCallPattern", "$get$TypeErrorDecoder_nullLiteralCallPattern", () => A.TypeErrorDecoder_extractPattern(function() { + var $argumentsExpr$ = "$arguments$"; + try { + null.$method$($argumentsExpr$); + } catch (e) { + return e.message; + } + }())); + _lazyFinal($, "TypeErrorDecoder_undefinedCallPattern", "$get$TypeErrorDecoder_undefinedCallPattern", () => A.TypeErrorDecoder_extractPattern(A.TypeErrorDecoder_provokeCallErrorOn(void 0))); + _lazyFinal($, "TypeErrorDecoder_undefinedLiteralCallPattern", "$get$TypeErrorDecoder_undefinedLiteralCallPattern", () => A.TypeErrorDecoder_extractPattern(function() { + var $argumentsExpr$ = "$arguments$"; + try { + (void 0).$method$($argumentsExpr$); + } catch (e) { + return e.message; + } + }())); + _lazyFinal($, "TypeErrorDecoder_nullPropertyPattern", "$get$TypeErrorDecoder_nullPropertyPattern", () => A.TypeErrorDecoder_extractPattern(A.TypeErrorDecoder_provokePropertyErrorOn(null))); + _lazyFinal($, "TypeErrorDecoder_nullLiteralPropertyPattern", "$get$TypeErrorDecoder_nullLiteralPropertyPattern", () => A.TypeErrorDecoder_extractPattern(function() { + try { + null.$method$; + } catch (e) { + return e.message; + } + }())); + _lazyFinal($, "TypeErrorDecoder_undefinedPropertyPattern", "$get$TypeErrorDecoder_undefinedPropertyPattern", () => A.TypeErrorDecoder_extractPattern(A.TypeErrorDecoder_provokePropertyErrorOn(void 0))); + _lazyFinal($, "TypeErrorDecoder_undefinedLiteralPropertyPattern", "$get$TypeErrorDecoder_undefinedLiteralPropertyPattern", () => A.TypeErrorDecoder_extractPattern(function() { + try { + (void 0).$method$; + } catch (e) { + return e.message; + } + }())); + _lazyFinal($, "_AsyncRun__scheduleImmediateClosure", "$get$_AsyncRun__scheduleImmediateClosure", () => A._AsyncRun__initializeScheduleImmediate()); + _lazyFinal($, "Future__nullFuture", "$get$Future__nullFuture", () => $.$get$nullFuture()); + _lazyFinal($, "Future__falseFuture", "$get$Future__falseFuture", () => A._Future$zoneValue(false, B.C__RootZone, type$.bool)); + _lazyFinal($, "_RootZone__rootMap", "$get$_RootZone__rootMap", () => { + var t1 = type$.dynamic; + return A.HashMap_HashMap(t1, t1); + }); + _lazyFinal($, "_Utf8Decoder__reusableBuffer", "$get$_Utf8Decoder__reusableBuffer", () => A.NativeUint8List_NativeUint8List(4096)); + _lazyFinal($, "_Utf8Decoder__decoder", "$get$_Utf8Decoder__decoder", () => new A._Utf8Decoder__decoder_closure().call$0()); + _lazyFinal($, "_Utf8Decoder__decoderNonfatal", "$get$_Utf8Decoder__decoderNonfatal", () => new A._Utf8Decoder__decoderNonfatal_closure().call$0()); + _lazyFinal($, "_Base64Decoder__inverseAlphabet", "$get$_Base64Decoder__inverseAlphabet", () => A.NativeInt8List__create1(A._ensureNativeList(A._setArrayType([-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], type$.JSArray_int)))); + _lazyFinal($, "_BigIntImpl_zero", "$get$_BigIntImpl_zero", () => A._BigIntImpl__BigIntImpl$_fromInt(0)); + _lazyFinal($, "_BigIntImpl_one", "$get$_BigIntImpl_one", () => A._BigIntImpl__BigIntImpl$_fromInt(1)); + _lazyFinal($, "_BigIntImpl_two", "$get$_BigIntImpl_two", () => A._BigIntImpl__BigIntImpl$_fromInt(2)); + _lazyFinal($, "_BigIntImpl__minusOne", "$get$_BigIntImpl__minusOne", () => $.$get$_BigIntImpl_one().$negate(0)); + _lazyFinal($, "_BigIntImpl__bigInt10000", "$get$_BigIntImpl__bigInt10000", () => A._BigIntImpl__BigIntImpl$_fromInt(10000)); + _lazy($, "_BigIntImpl__parseRE", "$get$_BigIntImpl__parseRE", () => A.RegExp_RegExp("^\\s*([+-]?)((0x[a-f0-9]+)|(\\d+)|([a-z0-9]+))\\s*$", false, false, false, false)); + _lazyFinal($, "_BigIntImpl__bitsForFromDouble", "$get$_BigIntImpl__bitsForFromDouble", () => A.NativeUint8List_NativeUint8List(8)); + _lazyFinal($, "_FinalizationRegistryWrapper__finalizationRegistryConstructor", "$get$_FinalizationRegistryWrapper__finalizationRegistryConstructor", () => typeof FinalizationRegistry == "function" ? FinalizationRegistry : null); + _lazyFinal($, "_Uri__needsNoEncoding", "$get$_Uri__needsNoEncoding", () => A.RegExp_RegExp("^[\\-\\.0-9A-Z_a-z~]*$", true, false, false, false)); + _lazyFinal($, "_hashSeed", "$get$_hashSeed", () => A.objectHashCode(B.Type_Object_A4p)); + _lazyFinal($, "Random__secureRandom", "$get$Random__secureRandom", () => { + var t1 = new A._JSSecureRandom(new DataView(new ArrayBuffer(A._checkLength(8)))); + t1._JSSecureRandom$0(); + return t1; + }); + _lazyFinal($, "WebStorageApi_byName", "$get$WebStorageApi_byName", () => A.EnumByName_asNameMap(B.List_WebStorageApi_0_WebStorageApi_1, A.findType("WebStorageApi"))); + _lazyFinal($, "windows", "$get$windows", () => A.Context_Context(null, $.$get$Style_windows())); + _lazyFinal($, "url", "$get$url", () => A.Context_Context(null, $.$get$Style_url())); + _lazyFinal($, "context", "$get$context", () => new A.Context($.$get$Style_platform(), null)); + _lazyFinal($, "Style_posix", "$get$Style_posix", () => new A.PosixStyle(A.RegExp_RegExp("/", true, false, false, false), A.RegExp_RegExp("[^/]$", true, false, false, false), A.RegExp_RegExp("^/", true, false, false, false))); + _lazyFinal($, "Style_windows", "$get$Style_windows", () => new A.WindowsStyle(A.RegExp_RegExp("[/\\\\]", true, false, false, false), A.RegExp_RegExp("[^/\\\\]$", true, false, false, false), A.RegExp_RegExp("^(\\\\\\\\[^\\\\]+\\\\[^\\\\/]+|[a-zA-Z]:[/\\\\])", true, false, false, false), A.RegExp_RegExp("^[/\\\\](?![/\\\\])", true, false, false, false))); + _lazyFinal($, "Style_url", "$get$Style_url", () => new A.UrlStyle(A.RegExp_RegExp("/", true, false, false, false), A.RegExp_RegExp("(^[a-zA-Z][-+.a-zA-Z\\d]*://|[^/])$", true, false, false, false), A.RegExp_RegExp("[a-zA-Z][-+.a-zA-Z\\d]*://[^/]*", true, false, false, false), A.RegExp_RegExp("^/", true, false, false, false))); + _lazyFinal($, "Style_platform", "$get$Style_platform", () => A.Style__getPlatformStyle()); + _lazyFinal($, "bigIntMinValue64", "$get$bigIntMinValue64", () => A.BigInt_parse("-9223372036854775808")); + _lazyFinal($, "bigIntMaxValue64", "$get$bigIntMaxValue64", () => A.BigInt_parse("9223372036854775807")); + _lazyFinal($, "disposeFinalizer", "$get$disposeFinalizer", () => { + var t1 = $.$get$_FinalizationRegistryWrapper__finalizationRegistryConstructor(); + t1 = t1 == null ? null : new t1(A.convertDartClosureToJS(A.wrapZoneUnaryCallback(new A.disposeFinalizer_closure(), type$.FinalizablePart), 1)); + return new A._FinalizationRegistryWrapper(t1, A.findType("_FinalizationRegistryWrapper")); + }); + _lazyFinal($, "BaseVirtualFileSystem__fallbackRandom", "$get$BaseVirtualFileSystem__fallbackRandom", () => $.$get$Random__secureRandom()); + _lazyFinal($, "AsynchronousIndexedDbFileSystem__storesJs", "$get$AsynchronousIndexedDbFileSystem__storesJs", () => A.ListToJSArray_get_toJS(A._setArrayType(["files", "blocks"], type$.JSArray_String), type$.String)); + _lazyFinal($, "FileType_byName", "$get$FileType_byName", () => { + var _i, entry, + t1 = A.LinkedHashMap_LinkedHashMap$_empty(type$.String, type$.FileType); + for (_i = 0; _i < 2; ++_i) { + entry = B.List_fyc[_i]; + t1.$indexSet(0, entry.filePath, entry); + } + return t1; + }); + _lazyFinal($, "DartCallbacks_sqliteVfsPointer", "$get$DartCallbacks_sqliteVfsPointer", () => new A.Expando(new WeakMap(), A.findType("Expando"))); + _lazyFinal($, "_vmFrame", "$get$_vmFrame", () => A.RegExp_RegExp("^#\\d+\\s+(\\S.*) \\((.+?)((?::\\d+){0,2})\\)$", true, false, false, false)); + _lazyFinal($, "_v8JsFrame", "$get$_v8JsFrame", () => A.RegExp_RegExp("^\\s*at (?:(\\S.*?)(?: \\[as [^\\]]+\\])? \\((.*)\\)|(.*))$", true, false, false, false)); + _lazyFinal($, "_v8JsUrlLocation", "$get$_v8JsUrlLocation", () => A.RegExp_RegExp("^(.*?):(\\d+)(?::(\\d+))?$|native$", true, false, false, false)); + _lazyFinal($, "_v8WasmFrame", "$get$_v8WasmFrame", () => A.RegExp_RegExp("^\\s*at (?:(?.+) )?(?:\\(?(?:(?\\S+):wasm-function\\[(?\\d+)\\]\\:0x(?[0-9a-fA-F]+))\\)?)$", true, false, false, false)); + _lazyFinal($, "_v8EvalLocation", "$get$_v8EvalLocation", () => A.RegExp_RegExp("^eval at (?:\\S.*?) \\((.*)\\)(?:, .*?:\\d+:\\d+)?$", true, false, false, false)); + _lazyFinal($, "_firefoxEvalLocation", "$get$_firefoxEvalLocation", () => A.RegExp_RegExp("(\\S+)@(\\S+) line (\\d+) >.* (Function|eval):\\d+:\\d+", true, false, false, false)); + _lazyFinal($, "_firefoxSafariJSFrame", "$get$_firefoxSafariJSFrame", () => A.RegExp_RegExp("^(?:([^@(/]*)(?:\\(.*\\))?((?:/[^/]*)*)(?:\\(.*\\))?@)?(.*?):(\\d*)(?::(\\d*))?$", true, false, false, false)); + _lazyFinal($, "_firefoxWasmFrame", "$get$_firefoxWasmFrame", () => A.RegExp_RegExp("^(?.*?)@(?:(?\\S+).*?:wasm-function\\[(?\\d+)\\]:0x(?[0-9a-fA-F]+))$", true, false, false, false)); + _lazyFinal($, "_safariWasmFrame", "$get$_safariWasmFrame", () => A.RegExp_RegExp("^.*?wasm-function\\[(?.*)\\]@\\[wasm code\\]$", true, false, false, false)); + _lazyFinal($, "_friendlyFrame", "$get$_friendlyFrame", () => A.RegExp_RegExp("^(\\S+)(?: (\\d+)(?::(\\d+))?)?\\s+([^\\d].*)$", true, false, false, false)); + _lazyFinal($, "_asyncBody", "$get$_asyncBody", () => A.RegExp_RegExp("<(|[^>]+)_async_body>", true, false, false, false)); + _lazyFinal($, "_initialDot", "$get$_initialDot", () => A.RegExp_RegExp("^\\.", true, false, false, false)); + _lazyFinal($, "Frame__uriRegExp", "$get$Frame__uriRegExp", () => A.RegExp_RegExp("^[a-zA-Z][-+.a-zA-Z\\d]*://", true, false, false, false)); + _lazyFinal($, "Frame__windowsRegExp", "$get$Frame__windowsRegExp", () => A.RegExp_RegExp("^([a-zA-Z]:[\\\\/]|\\\\\\\\)", true, false, false, false)); + _lazyFinal($, "_v8Trace", "$get$_v8Trace", () => A.RegExp_RegExp("\\n ?at ", true, false, false, false)); + _lazyFinal($, "_v8TraceLine", "$get$_v8TraceLine", () => A.RegExp_RegExp(" ?at ", true, false, false, false)); + _lazyFinal($, "_firefoxEvalTrace", "$get$_firefoxEvalTrace", () => A.RegExp_RegExp("@\\S+ line \\d+ >.* (Function|eval):\\d+:\\d+", true, false, false, false)); + _lazyFinal($, "_firefoxSafariTrace", "$get$_firefoxSafariTrace", () => A.RegExp_RegExp("^(([.0-9A-Za-z_$/<]|\\(.*\\))*@)?[^\\s]*:\\d*$", true, false, true, false)); + _lazyFinal($, "_friendlyTrace", "$get$_friendlyTrace", () => A.RegExp_RegExp("^[^\\s<][^\\s]*( \\d+(:\\d+)?)?[ \\t]+[^\\s]+$", true, false, true, false)); + _lazyFinal($, "vmChainGap", "$get$vmChainGap", () => A.RegExp_RegExp("^\\n?$", true, false, true, false)); + })(); + (function nativeSupport() { + !function() { + var intern = function(s) { + var o = {}; + o[s] = 1; + return Object.keys(hunkHelpers.convertToFastObject(o))[0]; + }; + init.getIsolateTag = function(name) { + return intern("___dart_" + name + init.isolateTag); + }; + var tableProperty = "___dart_isolate_tags_"; + var usedProperties = Object[tableProperty] || (Object[tableProperty] = Object.create(null)); + var rootProperty = "_ZxYxX"; + for (var i = 0;; i++) { + var property = intern(rootProperty + "_" + i + "_"); + if (!(property in usedProperties)) { + usedProperties[property] = 1; + init.isolateTag = property; + break; + } + } + init.dispatchPropertyName = init.getIsolateTag("dispatch_record"); + }(); + hunkHelpers.setOrUpdateInterceptorsByTag({SharedArrayBuffer: A.NativeByteBuffer, ArrayBuffer: A.NativeArrayBuffer, ArrayBufferView: A.NativeTypedData, DataView: A.NativeByteData, Float32Array: A.NativeFloat32List, Float64Array: A.NativeFloat64List, Int16Array: A.NativeInt16List, Int32Array: A.NativeInt32List, Int8Array: A.NativeInt8List, Uint16Array: A.NativeUint16List, Uint32Array: A.NativeUint32List, Uint8ClampedArray: A.NativeUint8ClampedList, CanvasPixelArray: A.NativeUint8ClampedList, Uint8Array: A.NativeUint8List}); + hunkHelpers.setOrUpdateLeafTags({SharedArrayBuffer: true, ArrayBuffer: true, ArrayBufferView: false, DataView: true, Float32Array: true, Float64Array: true, Int16Array: true, Int32Array: true, Int8Array: true, Uint16Array: true, Uint32Array: true, Uint8ClampedArray: true, CanvasPixelArray: true, Uint8Array: false}); + A.NativeTypedArray.$nativeSuperclassTag = "ArrayBufferView"; + A._NativeTypedArrayOfDouble_NativeTypedArray_ListMixin.$nativeSuperclassTag = "ArrayBufferView"; + A._NativeTypedArrayOfDouble_NativeTypedArray_ListMixin_FixedLengthListMixin.$nativeSuperclassTag = "ArrayBufferView"; + A.NativeTypedArrayOfDouble.$nativeSuperclassTag = "ArrayBufferView"; + A._NativeTypedArrayOfInt_NativeTypedArray_ListMixin.$nativeSuperclassTag = "ArrayBufferView"; + A._NativeTypedArrayOfInt_NativeTypedArray_ListMixin_FixedLengthListMixin.$nativeSuperclassTag = "ArrayBufferView"; + A.NativeTypedArrayOfInt.$nativeSuperclassTag = "ArrayBufferView"; + })(); + Function.prototype.call$0 = function() { + return this(); + }; + Function.prototype.call$1 = function(a) { + return this(a); + }; + Function.prototype.call$2 = function(a, b) { + return this(a, b); + }; + Function.prototype.call$3$3 = function(a, b, c) { + return this(a, b, c); + }; + Function.prototype.call$2$2 = function(a, b) { + return this(a, b); + }; + Function.prototype.call$1$1 = function(a) { + return this(a); + }; + Function.prototype.call$2$1 = function(a) { + return this(a); + }; + Function.prototype.call$3 = function(a, b, c) { + return this(a, b, c); + }; + Function.prototype.call$4 = function(a, b, c, d) { + return this(a, b, c, d); + }; + Function.prototype.call$3$1 = function(a) { + return this(a); + }; + Function.prototype.call$2$3 = function(a, b, c) { + return this(a, b, c); + }; + Function.prototype.call$1$2 = function(a, b) { + return this(a, b); + }; + Function.prototype.call$5 = function(a, b, c, d, e) { + return this(a, b, c, d, e); + }; + Function.prototype.call$3$4 = function(a, b, c, d) { + return this(a, b, c, d); + }; + Function.prototype.call$2$4 = function(a, b, c, d) { + return this(a, b, c, d); + }; + Function.prototype.call$1$4 = function(a, b, c, d) { + return this(a, b, c, d); + }; + Function.prototype.call$3$6 = function(a, b, c, d, e, f) { + return this(a, b, c, d, e, f); + }; + Function.prototype.call$2$5 = function(a, b, c, d, e) { + return this(a, b, c, d, e); + }; + Function.prototype.call$1$0 = function() { + return this(); + }; + convertAllToFastObject(holders); + convertToFastObject($); + (function(callback) { + if (typeof document === "undefined") { + callback(null); + return; + } + if (typeof document.currentScript != "undefined") { + callback(document.currentScript); + return; + } + var scripts = document.scripts; + function onLoad(event) { + for (var i = 0; i < scripts.length; ++i) { + scripts[i].removeEventListener("load", onLoad, false); + } + callback(event.target); + } + for (var i = 0; i < scripts.length; ++i) { + scripts[i].addEventListener("load", onLoad, false); + } + })(function(currentScript) { + init.currentScript = currentScript; + var callMain = A.main; + if (typeof dartMainRunner === "function") { + dartMainRunner(callMain, []); + } else { + callMain([]); + } + }); +})(); + +//# sourceMappingURL=drift_worker.js.map diff --git a/web/drift_worker.js.deps b/web/drift_worker.js.deps new file mode 100644 index 0000000..2197145 --- /dev/null +++ b/web/drift_worker.js.deps @@ -0,0 +1,672 @@ +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/async.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/async_cache.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/async_memoizer.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/byte_collector.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/cancelable_operation.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/chunked_stream_reader.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/delegate/event_sink.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/delegate/future.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/delegate/sink.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/delegate/stream.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/delegate/stream_consumer.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/delegate/stream_sink.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/delegate/stream_subscription.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/future_group.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/lazy_stream.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/null_stream_sink.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/restartable_timer.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/result/capture_sink.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/result/capture_transformer.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/result/error.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/result/future.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/result/release_sink.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/result/release_transformer.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/result/result.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/result/value.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/single_subscription_transformer.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/sink_base.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/stream_closer.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/stream_completer.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/stream_extensions.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/stream_group.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/stream_queue.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/stream_sink_completer.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/stream_sink_extensions.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/stream_sink_transformer.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/stream_sink_transformer/handler_transformer.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/stream_sink_transformer/reject_errors.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/stream_sink_transformer/stream_transformer_wrapper.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/stream_sink_transformer/typed.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/stream_splitter.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/stream_subscription_transformer.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/stream_zip.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/subscription_stream.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/typed/stream_subscription.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/typed_stream_transformer.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/collection-1.19.1/lib/collection.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/collection-1.19.1/lib/src/algorithms.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/collection-1.19.1/lib/src/boollist.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/collection-1.19.1/lib/src/canonicalized_map.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/collection-1.19.1/lib/src/combined_wrappers/combined_iterable.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/collection-1.19.1/lib/src/combined_wrappers/combined_iterator.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/collection-1.19.1/lib/src/combined_wrappers/combined_list.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/collection-1.19.1/lib/src/combined_wrappers/combined_map.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/collection-1.19.1/lib/src/comparators.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/collection-1.19.1/lib/src/empty_unmodifiable_set.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/collection-1.19.1/lib/src/equality.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/collection-1.19.1/lib/src/equality_map.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/collection-1.19.1/lib/src/equality_set.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/collection-1.19.1/lib/src/functions.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/collection-1.19.1/lib/src/iterable_extensions.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/collection-1.19.1/lib/src/iterable_zip.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/collection-1.19.1/lib/src/list_extensions.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/collection-1.19.1/lib/src/priority_queue.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/collection-1.19.1/lib/src/queue_list.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/collection-1.19.1/lib/src/union_set.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/collection-1.19.1/lib/src/union_set_controller.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/collection-1.19.1/lib/src/unmodifiable_wrappers.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/collection-1.19.1/lib/src/utils.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/collection-1.19.1/lib/src/wrappers.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/convert-3.1.2/lib/convert.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/convert-3.1.2/lib/src/accumulator_sink.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/convert-3.1.2/lib/src/byte_accumulator_sink.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/convert-3.1.2/lib/src/charcodes.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/convert-3.1.2/lib/src/codepage.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/convert-3.1.2/lib/src/fixed_datetime_formatter.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/convert-3.1.2/lib/src/hex.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/convert-3.1.2/lib/src/hex/decoder.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/convert-3.1.2/lib/src/hex/encoder.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/convert-3.1.2/lib/src/identity_codec.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/convert-3.1.2/lib/src/percent.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/convert-3.1.2/lib/src/percent/decoder.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/convert-3.1.2/lib/src/percent/encoder.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/convert-3.1.2/lib/src/string_accumulator_sink.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/convert-3.1.2/lib/src/utils.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/backends.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/drift.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/internal/versioned_schema.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/remote.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/dsl/columns.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/dsl/database.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/dsl/dsl.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/dsl/table.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/remote/client_impl.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/remote/communication.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/remote/protocol.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/remote/server_impl.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/remote/web_protocol.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/api/batch.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/api/compute_with_database_implementation/compute_with_database_unsupported.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/api/connection.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/api/connection_user.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/api/dao_base.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/api/db_base.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/api/options.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/api/runtime_api.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/api/stream_updates.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/cancellation_zone.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/custom_result_set.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/data_class.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/data_verification.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/devtools/devtools.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/devtools/platform_unsupported.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/devtools/service_extension.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/devtools/shared.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/exceptions.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/executor/connection_pool.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/executor/delayed_stream_queries.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/executor/executor.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/executor/helpers/delegates.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/executor/helpers/engines.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/executor/helpers/results.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/executor/interceptor.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/executor/stream_queries.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/executor/transactions.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/manager/composer.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/manager/computed_fields.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/manager/filter.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/manager/join_builder.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/manager/manager.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/manager/ordering.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/manager/references.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/components/group_by.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/components/join.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/components/limit.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/components/order_by.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/components/subquery.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/components/table_valued_function.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/components/where.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/expressions/aggregate.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/expressions/algebra.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/expressions/bitwise.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/expressions/bools.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/expressions/case_when.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/expressions/comparable.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/expressions/custom.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/expressions/datetimes.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/expressions/exists.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/expressions/expression.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/expressions/in.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/expressions/internal.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/expressions/null_check.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/expressions/text.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/expressions/variables.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/expressions/window.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/generation_context.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/helpers.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/migration.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/on_table.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/query_builder.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/schema/column_impl.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/schema/entities.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/schema/table_info.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/schema/view_info.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/statements/delete.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/statements/insert.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/statements/query.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/statements/select/custom_select.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/statements/select/select.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/statements/select/select_with_join.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/statements/update.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/types/converters.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/types/mapping.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/utils.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/sqlite3/database.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/sqlite3/native_functions.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/utils/async.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/utils/async_map.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/utils/lazy_database.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/utils/single_transformer.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/utils/synchronized.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/web/broadcast_stream_queries.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/web/channel_new.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/web/wasm_setup.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/web/wasm_setup/dedicated_worker.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/web/wasm_setup/indexeddb_to_opfs.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/web/wasm_setup/protocol.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/web/wasm_setup/shared.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/web/wasm_setup/shared_worker.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/web/wasm_setup/types.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/drift-2.31.0/lib/wasm.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/meta-1.17.0/lib/meta.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/meta-1.17.0/lib/meta_meta.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/path-1.9.1/lib/path.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/path-1.9.1/lib/src/characters.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/path-1.9.1/lib/src/context.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/path-1.9.1/lib/src/internal_style.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/path-1.9.1/lib/src/parsed_path.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/path-1.9.1/lib/src/path_exception.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/path-1.9.1/lib/src/path_map.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/path-1.9.1/lib/src/path_set.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/path-1.9.1/lib/src/style.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/path-1.9.1/lib/src/style/posix.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/path-1.9.1/lib/src/style/url.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/path-1.9.1/lib/src/style/windows.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/path-1.9.1/lib/src/utils.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/common.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/constants.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/database.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/exception.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/functions.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/implementation/bindings.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/implementation/database.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/implementation/exception.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/implementation/finalizer.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/implementation/session.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/implementation/sqlite3.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/implementation/statement.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/implementation/utils.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/in_memory_vfs.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/jsonb.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/result_set.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/session.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/sqlite3.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/statement.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/utils.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/vfs.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/bindings.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/js_interop.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/js_interop/atomics.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/js_interop/core.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/js_interop/fetch.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/js_interop/indexed_db.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/js_interop/new_file_system_access.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/js_interop/typed_data.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/js_interop/wasm.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/sqlite3.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/sqlite3_wasm.g.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/vfs/async_opfs/client.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/vfs/async_opfs/sync_channel.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/vfs/async_opfs/worker.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/vfs/indexed_db.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/vfs/simple_opfs.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/wasm_interop.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/wasm.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/stack_trace-1.12.1/lib/src/chain.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/stack_trace-1.12.1/lib/src/frame.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/stack_trace-1.12.1/lib/src/lazy_chain.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/stack_trace-1.12.1/lib/src/lazy_trace.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/stack_trace-1.12.1/lib/src/stack_zone_specification.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/stack_trace-1.12.1/lib/src/trace.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/stack_trace-1.12.1/lib/src/unparsed_frame.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/stack_trace-1.12.1/lib/src/utils.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/stack_trace-1.12.1/lib/src/vm_trace.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/stack_trace-1.12.1/lib/stack_trace.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/stream_channel-2.1.4/lib/src/close_guarantee_channel.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/stream_channel-2.1.4/lib/src/delegating_stream_channel.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/stream_channel-2.1.4/lib/src/disconnector.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/stream_channel-2.1.4/lib/src/guarantee_channel.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/stream_channel-2.1.4/lib/src/json_document_transformer.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/stream_channel-2.1.4/lib/src/multi_channel.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/stream_channel-2.1.4/lib/src/stream_channel_completer.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/stream_channel-2.1.4/lib/src/stream_channel_controller.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/stream_channel-2.1.4/lib/src/stream_channel_transformer.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/stream_channel-2.1.4/lib/stream_channel.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/typed_data-1.4.0/lib/src/typed_buffer.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/typed_data-1.4.0/lib/src/typed_queue.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/typed_data-1.4.0/lib/typed_buffers.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/typed_data-1.4.0/lib/typed_data.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/accelerometer.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/angle_instanced_arrays.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/attribution_reporting_api.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/background_sync.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/battery_status.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/clipboard_apis.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/compression.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/console.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/cookie_store.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/credential_management.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/csp.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/css_animations.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/css_animations_2.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/css_cascade.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/css_cascade_6.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/css_conditional.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/css_conditional_5.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/css_contain.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/css_counter_styles.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/css_font_loading.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/css_fonts.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/css_highlight_api.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/css_masking.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/css_paint_api.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/css_properties_values_api.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/css_transitions.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/css_transitions_2.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/css_typed_om.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/css_view_transitions.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/css_view_transitions_2.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/cssom.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/cssom_view.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/digital_identities.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/dom.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/dom_parsing.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/encoding.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/encrypted_media.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/entries_api.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/event_timing.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/ext_blend_minmax.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/ext_color_buffer_float.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/ext_color_buffer_half_float.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/ext_disjoint_timer_query.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/ext_disjoint_timer_query_webgl2.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/ext_float_blend.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/ext_frag_depth.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/ext_shader_texture_lod.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/ext_srgb.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/ext_texture_compression_bptc.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/ext_texture_compression_rgtc.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/ext_texture_filter_anisotropic.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/ext_texture_norm16.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/fedcm.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/fetch.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/fido.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/fileapi.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/filter_effects.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/fs.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/fullscreen.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/gamepad.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/generic_sensor.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/geolocation.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/geometry.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/gyroscope.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/hr_time.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/html.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/image_capture.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/indexeddb.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/intersection_observer.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/khr_parallel_shader_compile.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/largest_contentful_paint.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/mathml_core.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/media_capabilities.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/media_playback_quality.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/media_source.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/mediacapture_fromelement.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/mediacapture_streams.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/mediacapture_transform.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/mediasession.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/mediastream_recording.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/mst_content_hint.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/navigation_timing.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/netinfo.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/notifications.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/oes_draw_buffers_indexed.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/oes_element_index_uint.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/oes_fbo_render_mipmap.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/oes_standard_derivatives.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/oes_texture_float.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/oes_texture_float_linear.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/oes_texture_half_float.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/oes_texture_half_float_linear.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/oes_vertex_array_object.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/orientation_event.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/orientation_sensor.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/ovr_multiview2.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/paint_timing.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/payment_request.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/performance_timeline.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/permissions.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/picture_in_picture.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/pointerevents.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/pointerlock.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/private_network_access.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/push_api.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/referrer_policy.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/remote_playback.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/reporting.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/requestidlecallback.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/resize_observer.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/resource_timing.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/saa_non_cookie_storage.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/sanitizer_api.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/scheduling_apis.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/screen_capture.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/screen_orientation.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/screen_wake_lock.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/secure_payment_confirmation.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/selection_api.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/server_timing.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/service_workers.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/speech_api.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/storage.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/streams.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/svg.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/svg_animations.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/touch_events.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/trust_token_api.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/trusted_types.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/uievents.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/url.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/user_timing.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/vibration.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/video_rvfc.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/wasm_js_api.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/web_animations.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/web_animations_2.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/web_bluetooth.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/web_locks.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/web_otp.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/web_share.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webaudio.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webauthn.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webcodecs.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webcodecs_av1_codec_registration.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webcodecs_avc_codec_registration.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webcodecs_hevc_codec_registration.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webcodecs_vp9_codec_registration.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webcryptoapi.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webgl1.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webgl2.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webgl_color_buffer_float.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webgl_compressed_texture_astc.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webgl_compressed_texture_etc.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webgl_compressed_texture_etc1.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webgl_compressed_texture_pvrtc.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webgl_compressed_texture_s3tc.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webgl_compressed_texture_s3tc_srgb.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webgl_debug_renderer_info.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webgl_debug_shaders.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webgl_depth_texture.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webgl_draw_buffers.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webgl_lose_context.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webgl_multi_draw.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webgpu.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webidl.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webmidi.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webrtc.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webrtc_encoded_transform.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webrtc_identity.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webrtc_priority.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/websockets.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webtransport.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webvtt.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webxr.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/webxr_hand_input.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/dom/xhr.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/helpers.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/helpers/cross_origin.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/helpers/enums.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/helpers/events/events.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/helpers/events/providers.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/helpers/events/streams.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/helpers/extensions.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/helpers/http.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/helpers/lists.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/helpers/renames.dart +file:///Users/martin.seal/.pub-cache/hosted/pub.dev/web-1.1.1/lib/web.dart +file:///Users/martin.seal/StudioProjects/SimpleAAC_Flutter/.dart_tool/package_config.json +file:///Users/martin.seal/StudioProjects/SimpleAAC_Flutter/web/drift_worker.dart +file:///Users/martin.seal/development/flutter/bin/cache/dart-sdk/lib/_internal/dart2js_platform.dill +file:///Users/martin.seal/development/flutter/bin/cache/dart-sdk/lib/libraries.json +org-dartlang-sdk:///lib/_http/crypto.dart +org-dartlang-sdk:///lib/_http/embedder_config.dart +org-dartlang-sdk:///lib/_http/http.dart +org-dartlang-sdk:///lib/_http/http_date.dart +org-dartlang-sdk:///lib/_http/http_headers.dart +org-dartlang-sdk:///lib/_http/http_impl.dart +org-dartlang-sdk:///lib/_http/http_parser.dart +org-dartlang-sdk:///lib/_http/http_session.dart +org-dartlang-sdk:///lib/_http/http_testing.dart +org-dartlang-sdk:///lib/_http/overrides.dart +org-dartlang-sdk:///lib/_http/websocket.dart +org-dartlang-sdk:///lib/_http/websocket_impl.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/annotations.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/async_patch.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/bigint_patch.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/collection_patch.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/constant_map.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/convert_patch.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/core_patch.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/dart2js_only.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/dart2js_runtime_metrics.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/developer_patch.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/foreign_helper.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/instantiation.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/interceptors.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/internal_patch.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/io_patch.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/isolate_patch.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/js_allow_interop_patch.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/js_array.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/js_helper.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/js_names.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/js_number.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/js_patch.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/js_primitives.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/js_string.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/late_helper.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/linked_hash_map.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/math_patch.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/native_helper.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/native_typed_data.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/records.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/regexp_helper.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/string_helper.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/synced/array_flags.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/synced/embedded_names.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/synced/invocation_mirror_constants.dart +org-dartlang-sdk:///lib/_internal/js_runtime/lib/typed_data_patch.dart +org-dartlang-sdk:///lib/_internal/js_shared/lib/convert_utf_patch.dart +org-dartlang-sdk:///lib/_internal/js_shared/lib/date_time_patch.dart +org-dartlang-sdk:///lib/_internal/js_shared/lib/js_interop_patch.dart +org-dartlang-sdk:///lib/_internal/js_shared/lib/js_interop_unsafe_patch.dart +org-dartlang-sdk:///lib/_internal/js_shared/lib/js_types.dart +org-dartlang-sdk:///lib/_internal/js_shared/lib/js_util_patch.dart +org-dartlang-sdk:///lib/_internal/js_shared/lib/rti.dart +org-dartlang-sdk:///lib/_internal/js_shared/lib/synced/async_status_codes.dart +org-dartlang-sdk:///lib/_internal/js_shared/lib/synced/embedded_names.dart +org-dartlang-sdk:///lib/_internal/js_shared/lib/synced/recipe_syntax.dart +org-dartlang-sdk:///lib/async/async.dart +org-dartlang-sdk:///lib/async/async_error.dart +org-dartlang-sdk:///lib/async/broadcast_stream_controller.dart +org-dartlang-sdk:///lib/async/deferred_load.dart +org-dartlang-sdk:///lib/async/future.dart +org-dartlang-sdk:///lib/async/future_extensions.dart +org-dartlang-sdk:///lib/async/future_impl.dart +org-dartlang-sdk:///lib/async/schedule_microtask.dart +org-dartlang-sdk:///lib/async/stream.dart +org-dartlang-sdk:///lib/async/stream_controller.dart +org-dartlang-sdk:///lib/async/stream_impl.dart +org-dartlang-sdk:///lib/async/stream_pipe.dart +org-dartlang-sdk:///lib/async/stream_transformers.dart +org-dartlang-sdk:///lib/async/timer.dart +org-dartlang-sdk:///lib/async/zone.dart +org-dartlang-sdk:///lib/collection/collection.dart +org-dartlang-sdk:///lib/collection/collections.dart +org-dartlang-sdk:///lib/collection/hash_map.dart +org-dartlang-sdk:///lib/collection/hash_set.dart +org-dartlang-sdk:///lib/collection/iterable.dart +org-dartlang-sdk:///lib/collection/iterator.dart +org-dartlang-sdk:///lib/collection/linked_hash_map.dart +org-dartlang-sdk:///lib/collection/linked_hash_set.dart +org-dartlang-sdk:///lib/collection/linked_list.dart +org-dartlang-sdk:///lib/collection/list.dart +org-dartlang-sdk:///lib/collection/maps.dart +org-dartlang-sdk:///lib/collection/queue.dart +org-dartlang-sdk:///lib/collection/set.dart +org-dartlang-sdk:///lib/collection/splay_tree.dart +org-dartlang-sdk:///lib/convert/ascii.dart +org-dartlang-sdk:///lib/convert/base64.dart +org-dartlang-sdk:///lib/convert/byte_conversion.dart +org-dartlang-sdk:///lib/convert/chunked_conversion.dart +org-dartlang-sdk:///lib/convert/codec.dart +org-dartlang-sdk:///lib/convert/convert.dart +org-dartlang-sdk:///lib/convert/converter.dart +org-dartlang-sdk:///lib/convert/encoding.dart +org-dartlang-sdk:///lib/convert/html_escape.dart +org-dartlang-sdk:///lib/convert/json.dart +org-dartlang-sdk:///lib/convert/latin1.dart +org-dartlang-sdk:///lib/convert/line_splitter.dart +org-dartlang-sdk:///lib/convert/string_conversion.dart +org-dartlang-sdk:///lib/convert/utf.dart +org-dartlang-sdk:///lib/core/annotations.dart +org-dartlang-sdk:///lib/core/bigint.dart +org-dartlang-sdk:///lib/core/bool.dart +org-dartlang-sdk:///lib/core/comparable.dart +org-dartlang-sdk:///lib/core/core.dart +org-dartlang-sdk:///lib/core/date_time.dart +org-dartlang-sdk:///lib/core/double.dart +org-dartlang-sdk:///lib/core/duration.dart +org-dartlang-sdk:///lib/core/enum.dart +org-dartlang-sdk:///lib/core/errors.dart +org-dartlang-sdk:///lib/core/exceptions.dart +org-dartlang-sdk:///lib/core/function.dart +org-dartlang-sdk:///lib/core/identical.dart +org-dartlang-sdk:///lib/core/int.dart +org-dartlang-sdk:///lib/core/invocation.dart +org-dartlang-sdk:///lib/core/iterable.dart +org-dartlang-sdk:///lib/core/iterator.dart +org-dartlang-sdk:///lib/core/list.dart +org-dartlang-sdk:///lib/core/map.dart +org-dartlang-sdk:///lib/core/null.dart +org-dartlang-sdk:///lib/core/num.dart +org-dartlang-sdk:///lib/core/object.dart +org-dartlang-sdk:///lib/core/pattern.dart +org-dartlang-sdk:///lib/core/print.dart +org-dartlang-sdk:///lib/core/record.dart +org-dartlang-sdk:///lib/core/regexp.dart +org-dartlang-sdk:///lib/core/set.dart +org-dartlang-sdk:///lib/core/sink.dart +org-dartlang-sdk:///lib/core/stacktrace.dart +org-dartlang-sdk:///lib/core/stopwatch.dart +org-dartlang-sdk:///lib/core/string.dart +org-dartlang-sdk:///lib/core/string_buffer.dart +org-dartlang-sdk:///lib/core/string_sink.dart +org-dartlang-sdk:///lib/core/symbol.dart +org-dartlang-sdk:///lib/core/type.dart +org-dartlang-sdk:///lib/core/uri.dart +org-dartlang-sdk:///lib/core/weak.dart +org-dartlang-sdk:///lib/developer/developer.dart +org-dartlang-sdk:///lib/developer/extension.dart +org-dartlang-sdk:///lib/developer/http_profiling.dart +org-dartlang-sdk:///lib/developer/profiler.dart +org-dartlang-sdk:///lib/developer/service.dart +org-dartlang-sdk:///lib/developer/timeline.dart +org-dartlang-sdk:///lib/html/dart2js/html_dart2js.dart +org-dartlang-sdk:///lib/html/html_common/conversions.dart +org-dartlang-sdk:///lib/html/html_common/conversions_dart2js.dart +org-dartlang-sdk:///lib/html/html_common/css_class_set.dart +org-dartlang-sdk:///lib/html/html_common/device.dart +org-dartlang-sdk:///lib/html/html_common/filtered_element_list.dart +org-dartlang-sdk:///lib/html/html_common/html_common_dart2js.dart +org-dartlang-sdk:///lib/html/html_common/lists.dart +org-dartlang-sdk:///lib/html/html_common/metadata.dart +org-dartlang-sdk:///lib/indexed_db/dart2js/indexed_db_dart2js.dart +org-dartlang-sdk:///lib/internal/async_cast.dart +org-dartlang-sdk:///lib/internal/bytes_builder.dart +org-dartlang-sdk:///lib/internal/cast.dart +org-dartlang-sdk:///lib/internal/errors.dart +org-dartlang-sdk:///lib/internal/internal.dart +org-dartlang-sdk:///lib/internal/iterable.dart +org-dartlang-sdk:///lib/internal/linked_list.dart +org-dartlang-sdk:///lib/internal/list.dart +org-dartlang-sdk:///lib/internal/patch.dart +org-dartlang-sdk:///lib/internal/print.dart +org-dartlang-sdk:///lib/internal/sort.dart +org-dartlang-sdk:///lib/internal/symbol.dart +org-dartlang-sdk:///lib/io/common.dart +org-dartlang-sdk:///lib/io/data_transformer.dart +org-dartlang-sdk:///lib/io/directory.dart +org-dartlang-sdk:///lib/io/directory_impl.dart +org-dartlang-sdk:///lib/io/embedder_config.dart +org-dartlang-sdk:///lib/io/eventhandler.dart +org-dartlang-sdk:///lib/io/file.dart +org-dartlang-sdk:///lib/io/file_impl.dart +org-dartlang-sdk:///lib/io/file_system_entity.dart +org-dartlang-sdk:///lib/io/io.dart +org-dartlang-sdk:///lib/io/io_resource_info.dart +org-dartlang-sdk:///lib/io/io_service.dart +org-dartlang-sdk:///lib/io/io_sink.dart +org-dartlang-sdk:///lib/io/link.dart +org-dartlang-sdk:///lib/io/namespace_impl.dart +org-dartlang-sdk:///lib/io/network_profiling.dart +org-dartlang-sdk:///lib/io/overrides.dart +org-dartlang-sdk:///lib/io/platform.dart +org-dartlang-sdk:///lib/io/platform_impl.dart +org-dartlang-sdk:///lib/io/process.dart +org-dartlang-sdk:///lib/io/secure_server_socket.dart +org-dartlang-sdk:///lib/io/secure_socket.dart +org-dartlang-sdk:///lib/io/security_context.dart +org-dartlang-sdk:///lib/io/service_object.dart +org-dartlang-sdk:///lib/io/socket.dart +org-dartlang-sdk:///lib/io/stdio.dart +org-dartlang-sdk:///lib/io/string_transformer.dart +org-dartlang-sdk:///lib/io/sync_socket.dart +org-dartlang-sdk:///lib/isolate/capability.dart +org-dartlang-sdk:///lib/isolate/isolate.dart +org-dartlang-sdk:///lib/js/_js.dart +org-dartlang-sdk:///lib/js/_js_annotations.dart +org-dartlang-sdk:///lib/js/_js_client.dart +org-dartlang-sdk:///lib/js/js.dart +org-dartlang-sdk:///lib/js_interop/js_interop.dart +org-dartlang-sdk:///lib/js_interop_unsafe/js_interop_unsafe.dart +org-dartlang-sdk:///lib/js_util/js_util.dart +org-dartlang-sdk:///lib/math/math.dart +org-dartlang-sdk:///lib/math/point.dart +org-dartlang-sdk:///lib/math/random.dart +org-dartlang-sdk:///lib/math/rectangle.dart +org-dartlang-sdk:///lib/svg/dart2js/svg_dart2js.dart +org-dartlang-sdk:///lib/typed_data/typed_data.dart +org-dartlang-sdk:///lib/web_audio/dart2js/web_audio_dart2js.dart +org-dartlang-sdk:///lib/web_gl/dart2js/web_gl_dart2js.dart \ No newline at end of file diff --git a/web/drift_worker.js.map b/web/drift_worker.js.map new file mode 100644 index 0000000..1d2f0ad --- /dev/null +++ b/web/drift_worker.js.map @@ -0,0 +1,16 @@ +{ + "version": 3, + "engine": "v2", + "file": "drift_worker.js", + "sourceRoot": "", + "sources": ["org-dartlang-sdk:///lib/_internal/js_runtime/lib/interceptors.dart","org-dartlang-sdk:///lib/_internal/js_runtime/lib/js_helper.dart","org-dartlang-sdk:///lib/_internal/js_runtime/lib/native_helper.dart","org-dartlang-sdk:///lib/_internal/js_runtime/lib/js_array.dart","org-dartlang-sdk:///lib/core/comparable.dart","org-dartlang-sdk:///lib/_internal/js_runtime/lib/js_string.dart","org-dartlang-sdk:///lib/internal/cast.dart","org-dartlang-sdk:///lib/internal/errors.dart","org-dartlang-sdk:///lib/internal/internal.dart","org-dartlang-sdk:///lib/internal/iterable.dart","org-dartlang-sdk:///lib/core/errors.dart","org-dartlang-sdk:///lib/_internal/js_runtime/lib/js_names.dart","org-dartlang-sdk:///lib/_internal/js_shared/lib/rti.dart","org-dartlang-sdk:///lib/_internal/js_shared/lib/date_time_patch.dart","org-dartlang-sdk:///lib/async/zone.dart","org-dartlang-sdk:///lib/_internal/js_runtime/lib/records.dart","org-dartlang-sdk:///lib/_internal/js_runtime/lib/regexp_helper.dart","org-dartlang-sdk:///lib/_internal/js_runtime/lib/string_helper.dart","org-dartlang-sdk:///lib/core/iterable.dart","org-dartlang-sdk:///lib/_internal/js_runtime/lib/late_helper.dart","org-dartlang-sdk:///lib/_internal/js_runtime/lib/native_typed_data.dart","org-dartlang-sdk:///lib/_internal/js_shared/lib/synced/recipe_syntax.dart","org-dartlang-sdk:///lib/_internal/js_runtime/lib/async_patch.dart","org-dartlang-sdk:///lib/core/duration.dart","org-dartlang-sdk:///lib/async/future_impl.dart","org-dartlang-sdk:///lib/async/async_error.dart","org-dartlang-sdk:///lib/async/future.dart","org-dartlang-sdk:///lib/async/timer.dart","org-dartlang-sdk:///lib/_internal/js_runtime/lib/internal_patch.dart","org-dartlang-sdk:///lib/async/schedule_microtask.dart","org-dartlang-sdk:///lib/async/stream.dart","org-dartlang-sdk:///lib/async/stream_impl.dart","org-dartlang-sdk:///lib/async/stream_controller.dart","org-dartlang-sdk:///lib/async/stream_pipe.dart","org-dartlang-sdk:///lib/async/stream_transformers.dart","org-dartlang-sdk:///lib/_internal/js_runtime/lib/collection_patch.dart","org-dartlang-sdk:///lib/_internal/js_runtime/lib/linked_hash_map.dart","org-dartlang-sdk:///lib/collection/hash_map.dart","org-dartlang-sdk:///lib/collection/maps.dart","org-dartlang-sdk:///lib/_internal/js_runtime/lib/core_patch.dart","org-dartlang-sdk:///lib/_internal/js_shared/lib/convert_utf_patch.dart","org-dartlang-sdk:///lib/convert/base64.dart","org-dartlang-sdk:///lib/convert/utf.dart","org-dartlang-sdk:///lib/_internal/js_runtime/lib/bigint_patch.dart","org-dartlang-sdk:///lib/_internal/js_runtime/lib/js_number.dart","org-dartlang-sdk:///lib/core/date_time.dart","org-dartlang-sdk:///lib/core/enum.dart","../../../.pub-cache/hosted/pub.dev/typed_data-1.4.0/lib/src/typed_buffer.dart","org-dartlang-sdk:///lib/core/exceptions.dart","org-dartlang-sdk:///lib/core/object.dart","org-dartlang-sdk:///lib/core/print.dart","org-dartlang-sdk:///lib/core/uri.dart","org-dartlang-sdk:///lib/_internal/js_shared/lib/js_interop_patch.dart","org-dartlang-sdk:///lib/js_interop/js_interop.dart","org-dartlang-sdk:///lib/_internal/js_shared/lib/js_interop_unsafe_patch.dart","org-dartlang-sdk:///lib/_internal/js_runtime/lib/js_allow_interop_patch.dart","org-dartlang-sdk:///lib/_internal/js_shared/lib/js_util_patch.dart","org-dartlang-sdk:///lib/_internal/js_runtime/lib/math_patch.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/remote/communication.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/remote/server_impl.dart","org-dartlang-sdk:///lib/async/broadcast_stream_controller.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/cancellation_zone.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/executor/helpers/delegates.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/executor/helpers/results.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/executor/interceptor.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/sqlite3/native_functions.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/implementation/database.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/web/channel_new.dart","../../../.pub-cache/hosted/pub.dev/stream_channel-2.1.4/lib/src/stream_channel_controller.dart","../../../.pub-cache/hosted/pub.dev/stream_channel-2.1.4/lib/stream_channel.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/remote/web_protocol.dart","../../../.pub-cache/hosted/pub.dev/stream_channel-2.1.4/lib/src/guarantee_channel.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/web/wasm_setup/protocol.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/web/wasm_setup/shared.dart","org-dartlang-sdk:///lib/js_interop_unsafe/js_interop_unsafe.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/js_interop/core.dart","../../../.pub-cache/hosted/pub.dev/web-1.1.1/lib/src/helpers/events/streams.dart","../../../.pub-cache/hosted/pub.dev/path-1.9.1/lib/src/context.dart","../../../.pub-cache/hosted/pub.dev/path-1.9.1/lib/src/parsed_path.dart","../../../.pub-cache/hosted/pub.dev/path-1.9.1/lib/src/path_exception.dart","../../../.pub-cache/hosted/pub.dev/path-1.9.1/lib/src/style.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/exception.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/bindings.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/wasm_interop.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/functions.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/in_memory_vfs.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/vfs.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/js_interop/indexed_db.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/js_interop/wasm.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/sqlite3.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/vfs/async_opfs/sync_channel.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/vfs/async_opfs/worker.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/vfs/indexed_db.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/vfs/simple_opfs.dart","../../../.pub-cache/hosted/pub.dev/path-1.9.1/lib/path.dart","../../../.pub-cache/hosted/pub.dev/stack_trace-1.12.1/lib/src/chain.dart","../../../.pub-cache/hosted/pub.dev/stack_trace-1.12.1/lib/src/frame.dart","../../../.pub-cache/hosted/pub.dev/stack_trace-1.12.1/lib/src/unparsed_frame.dart","../../../.pub-cache/hosted/pub.dev/stack_trace-1.12.1/lib/src/trace.dart","../../../.pub-cache/hosted/pub.dev/stack_trace-1.12.1/lib/src/lazy_trace.dart","org-dartlang-sdk:///lib/_internal/js_runtime/lib/js_primitives.dart","../../../.pub-cache/hosted/pub.dev/path-1.9.1/lib/src/utils.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/implementation/exception.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/implementation/utils.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/utils.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/js_interop.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/js_interop/atomics.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/js_interop/new_file_system_access.dart","drift_worker.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/wasm.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/web/wasm_setup/dedicated_worker.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/utils/synchronized.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/web/wasm_setup/shared_worker.dart","org-dartlang-sdk:///lib/collection/list.dart","org-dartlang-sdk:///lib/internal/list.dart","org-dartlang-sdk:///lib/internal/symbol.dart","org-dartlang-sdk:///lib/_internal/js_runtime/lib/constant_map.dart","org-dartlang-sdk:///lib/core/map.dart","org-dartlang-sdk:///lib/_internal/js_runtime/lib/instantiation.dart","org-dartlang-sdk:///lib/collection/linked_list.dart","org-dartlang-sdk:///lib/collection/set.dart","org-dartlang-sdk:///lib/convert/ascii.dart","org-dartlang-sdk:///lib/core/null.dart","org-dartlang-sdk:///lib/core/stacktrace.dart","org-dartlang-sdk:///lib/core/weak.dart","../../../.pub-cache/hosted/pub.dev/async-2.13.1/lib/src/delegate/stream_sink.dart","../../../.pub-cache/hosted/pub.dev/collection-1.19.1/lib/src/equality.dart","../../../.pub-cache/hosted/pub.dev/stream_channel-2.1.4/lib/src/close_guarantee_channel.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/remote/protocol.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/executor/executor.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/migration.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/api/stream_updates.dart","org-dartlang-sdk:///lib/collection/iterable.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/executor/helpers/engines.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/sqlite3/database.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/runtime/query_builder/query_builder.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/implementation/statement.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/statement.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/utils/lazy_database.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/implementation/sqlite3.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/vfs/async_opfs/client.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/remote.dart","../../../.pub-cache/hosted/pub.dev/drift-2.31.0/lib/src/web/wasm_setup/types.dart","../../../.pub-cache/hosted/pub.dev/path-1.9.1/lib/src/internal_style.dart","../../../.pub-cache/hosted/pub.dev/path-1.9.1/lib/src/style/posix.dart","../../../.pub-cache/hosted/pub.dev/path-1.9.1/lib/src/style/url.dart","../../../.pub-cache/hosted/pub.dev/path-1.9.1/lib/src/style/windows.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/result_set.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/implementation/finalizer.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/sqlite3.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/implementation/bindings.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/constants.dart","../../../.pub-cache/hosted/pub.dev/stack_trace-1.12.1/lib/src/utils.dart","org-dartlang-sdk:///lib/core/list.dart","../../../.pub-cache/hosted/pub.dev/sqlite3-2.9.4/lib/src/wasm/js_interop/typed_data.dart"], + "names": ["makeDispatchRecord","getNativeInterceptor","lookupInterceptorByConstructor","JS_INTEROP_INTERCEPTOR_TAG","cacheInterceptorOnConstructor","JSArray.fixed","JSArray.growable","JSArray.markGrowable","JSArray.markFixed","JSArray._compareAny","JSString._isWhitespace","JSString._skipLeadingWhitespace","JSString._skipTrailingWhitespace","CastIterable","LateError.fieldADI","LateError.fieldNI","LateError.fieldAI","hexDigitValue","SystemHash.combine","SystemHash.finish","checkNotNullable","isToStringVisiting","SubListIterable","MappedIterable","TakeIterable","SkipIterable","EfficientLengthSkipIterable","IndexedIterable","IterableElementError.noElement","IterableElementError.tooFew","unminifyOrTag","isJsIndexable","S","Primitives.objectHashCode","Primitives.parseInt","Primitives.objectTypeName","instanceTypeName","rtiToString","Primitives.safeToString","Primitives.stringSafeToString","Primitives.currentUri","Primitives._fromCharCodeApply","Primitives.stringFromCodePoints","Primitives.stringFromCharCodes","Primitives.stringFromNativeUint8List","Primitives.stringFromCharCode","Primitives.lazyAsJsDate","Primitives.getYear","Primitives.getMonth","Primitives.getDay","Primitives.getHours","Primitives.getMinutes","Primitives.getSeconds","Primitives.getMilliseconds","Primitives.getWeekday","Primitives.extractStackTrace","Primitives.trySetStackTrace","iae","ioore","diagnoseIndexError","diagnoseRangeError","argumentErrorValue","wrapException","initializeExceptionWrapper","toStringWrapper","throwExpression","throwUnsupportedOperation","_diagnoseUnsupportedOperation","throwConcurrentModificationError","TypeErrorDecoder.extractPattern","TypeErrorDecoder.provokeCallErrorOn","TypeErrorDecoder.provokePropertyErrorOn","JsNoSuchMethodError","unwrapException","saveStackTrace","_unwrapNonDartException","getTraceFromException","objectHashCode","fillLiteralMap","_invokeClosure","convertDartClosureToJS","convertDartClosureToJSUncached","Closure.fromTearOff","Closure._computeSignatureFunction","Closure.cspForwardCall","Closure.forwardCallTo","Closure.cspForwardInterceptedCall","Closure.forwardInterceptedCallTo","closureFromTearOff","BoundClosure.evalRecipe","evalInInstance","BoundClosure.receiverOf","BoundClosure.interceptorOf","BoundClosure._computeFieldNamed","getIsolateAffinityTag","wrapZoneUnaryCallback","defineProperty","lookupAndCacheInterceptor","setDispatchProperty","patchInstance","lookupInterceptor","patchProto","patchInteriorProto","makeLeafDispatchRecord","makeDefaultDispatchRecord","initNativeDispatch","initNativeDispatchContinue","initHooks","applyHooksTransformer","createRecordTypePredicate","JSSyntaxRegExp.makeNative","stringContainsUnchecked","stringContainsStringUnchecked","escapeReplacement","stringReplaceFirstRE","quoteStringForRegExp","stringReplaceAllUnchecked","stringReplaceAllGeneral","stringReplaceAllUncheckedString","stringReplaceFirstUnchecked","stringReplaceRangeUnchecked","throwLateFieldNI","throwLateFieldAI","throwLateFieldADI","_Cell.named","_checkLength","_checkViewArguments","_ensureNativeList","NativeByteData.view","NativeInt32List.view","NativeInt8List._create1","NativeUint32List.view","NativeUint8List","NativeUint8List.view","_checkValidIndex","_checkValidRange","Rti._getFutureFromFutureOr","Rti._getFutureOrArgument","Rti._isUnionOfFunctionType","Rti._getKind","Rti._getCanonicalRecipe","findType","instantiatedGenericFunctionType","Rti._getInterfaceTypeArguments","Rti._getGenericFunctionBase","_substitute","Rti._getInterfaceName","Rti._getBindingBase","Rti._getRecordPartialShapeTag","Rti._getReturnType","Rti._getGenericFunctionParameterIndex","_substituteArray","_substituteNamed","_substituteFunctionParameters","_FunctionParameters.allocate","_setArrayType","closureFunctionType","instanceOrFunctionType","instanceType","_arrayInstanceType","_instanceType","_instanceTypeFromConstructor","_instanceTypeFromConstructorMiss","getTypeFromTypesTable","getRuntimeTypeOfDartObject","getRuntimeTypeOfClosure","_structuralTypeOf","getRtiForRecord","_instanceFunctionType","createRuntimeType","_createAndCacheRuntimeType","_Type","evaluateRtiForRecord","typeLiteral","_installSpecializedIsTest","_specializedIsTest","_recordSpecializedIsTest","_simpleSpecializedIsTest","_installSpecializedAsCheck","_generalIsTestImplementation","_generalNullableIsTestImplementation","Rti._getQuestionArgument","_isTestViaProperty","_isListTestViaProperty","_isJSObject","_isJSObjectStandalone","_generalAsCheckImplementation","_generalNullableAsCheckImplementation","_errorForAsCheck","checkTypeBound","_Error.compose","_TypeError.fromMessage","_TypeError.forType","_isFutureOr","_isObject","_asObject","_isTop","_asTop","_isNever","_isBool","_asBool","_asBoolQ","_asDouble","_asDoubleQ","_isInt","_asInt","_asIntQ","_isNum","_asNum","_asNumQ","_isString","_asString","_asStringQ","_asJSObject","_asJSObjectQ","_rtiArrayToString","_recordRtiToString","_functionRtiToString","_rtiToString","_unminifyOrTag","_Universe.findRule","_Universe._findRule","_Universe.findErasedType","_Universe.addRules","_Universe.addErasedTypes","_Universe.eval","_Universe.evalInEnvironment","_Universe.bind","_Universe._installTypeTests","_Universe._lookupTerminalRti","Rti.allocate","_Universe._createTerminalRti","_Universe._installRti","_Universe._lookupQuestionRti","_Universe._createQuestionRti","_Universe._lookupFutureOrRti","_Universe._createFutureOrRti","_Universe._lookupGenericFunctionParameterRti","_Universe._createGenericFunctionParameterRti","_Universe._canonicalRecipeJoin","_Universe._canonicalRecipeJoinNamed","_Universe._lookupInterfaceRti","_Universe._canonicalRecipeOfInterface","_Universe._createInterfaceRti","_Universe._lookupBindingRti","_Universe._createBindingRti","_Universe._lookupRecordRti","_Universe._createRecordRti","_Universe._lookupFunctionRti","_Universe._canonicalRecipeOfFunction","_Universe._canonicalRecipeOfFunctionParameters","_Universe._createFunctionRti","_Universe._lookupGenericFunctionRti","_Universe._createGenericFunctionRti","_Parser.create","_Parser.parse","_Parser.toGenericFunctionParameter","_Parser.pushStackFrame","_Parser.collectArray","_Parser.handleOptionalGroup","_Parser.collectNamed","_Parser.handleNamedGroup","_Parser.handleStartRecord","_Parser.handleDigit","_Parser.handleIdentifier","_Universe.evalTypeVariable","_Parser.handleTypeArguments","_Parser.handleArguments","_Parser.handleExtendedOperations","_Parser.toType","_Parser.toTypes","_Parser.toTypesNamed","_Parser.indexToType","isSubtype","_isSubtype","_isFunctionSubtype","_isInterfaceSubtype","_Utils.newArrayOrEmpty","_areArgumentsSubtypes","_isRecordSubtype","isNullable","isTopType","_Utils.objectAssign","_AsyncRun._initializeScheduleImmediate","_AsyncRun._scheduleImmediateJsOverride","_AsyncRun._scheduleImmediateWithSetImmediate","_AsyncRun._scheduleImmediateWithTimer","Timer._createTimer","_TimerImpl","_TimerImpl.periodic","_makeAsyncAwaitCompleter","_AsyncAwaitCompleter._future","_asyncStartSync","_asyncAwait","_asyncReturn","_asyncRethrow","_awaitOnObject","_wrapJsFunctionForAsync","_SyncStarIterator._terminatedBody","AsyncError.defaultStackTrace","Future","Future.sync","_interceptCaughtError","Future.value","_Future.immediate","Future.delayed","Future.wait","_interceptError","_interceptUserError","_Future.zoneValue","_Future.value","_Future._chainCoreFuture","_Future._asyncCompleteError","_Future._propagateToListeners","_registerErrorHandler","_microtaskLoop","_startMicrotaskLoop","_scheduleAsyncCallback","_schedulePriorityAsyncCallback","scheduleMicrotask","StreamIterator","StreamController","_runGuarded","_ControllerSubscription","_BufferingStreamSubscription","_BufferingStreamSubscription.zoned","_BufferingStreamSubscription._registerDataHandler","_BufferingStreamSubscription._registerErrorHandler","_nullDataHandler","_nullErrorHandler","_nullDoneHandler","_runUserCode","_cancelAndError","_cancelAndErrorClosure","_cancelAndValue","_StreamHandlerTransformer","Timer","_rootHandleUncaughtError","_rootHandleError","_rootRun","_rootRunUnary","_rootRunBinary","_rootRegisterCallback","_rootRegisterUnaryCallback","_rootRegisterBinaryCallback","_rootErrorCallback","_rootScheduleMicrotask","_rootCreateTimer","_rootCreatePeriodicTimer","Timer._createPeriodicTimer","_rootPrint","_printToZone","_rootFork","_CustomZone","runZoned","_runZoned","HashMap","_HashMap._getTableEntry","_HashMap._setTableEntry","_HashMap._newHashTable","LinkedHashMap","LinkedHashMap._literal","LinkedHashMap._empty","LinkedHashSet._empty","_LinkedHashSet._newHashTable","_LinkedHashSetIterator","HashMap.from","MapBase.mapToString","_Utf8Decoder._makeNativeUint8List","_Utf8Decoder._convertInterceptedUint8List","_Utf8Decoder._useTextDecoder","Base64Codec._checkPadding","_Utf8Decoder.errorDescription","BigInt.parse","_BigIntImpl.parse","_BigIntImpl._parseDecimal","_BigIntImpl._codeUnitToRadixValue","_BigIntImpl._parseHex","NativeUint16List","_BigIntImpl._tryParse","_MatchImplementation.[]","_BigIntImpl._normalize","_BigIntImpl._cloneDigits","_BigIntImpl.from","_BigIntImpl._fromInt","_BigIntImpl._fromDouble","NativeByteData.setFloat64","_BigIntImpl._dlShiftDigits","_BigIntImpl._lsh","_BigIntImpl._lShiftDigits","_BigIntImpl._rsh","_BigIntImpl._compareDigits","_BigIntImpl._absAdd","_BigIntImpl._absSub","_BigIntImpl._mulAdd","_BigIntImpl._estimateQuotientDigit","Expando._badExpandoKey","int.parse","Error._throw","List.filled","List.from","List._of","List._ofArray","List.unmodifiable","String.fromCharCodes","String._stringFromIterable","String.fromCharCode","String._stringFromUint8List","RegExp","StringBuffer._writeAll","Uri.base","_Uri._uriEncode","JSSyntaxRegExp.hasMatch","StringBuffer.writeCharCode","StackTrace.current","DateTime._validate","DateTime._fourDigits","DateTime._threeDigits","DateTime._twoDigits","Duration","EnumByName.byName","EnumByName.asNameMap","Error.safeToString","Error.throwWithStackTrace","AssertionError","ArgumentError","ArgumentError.value","ArgumentError.checkNotNull","RangeError.value","RangeError.range","RangeError.checkValueInInterval","RangeError.checkValidIndex","RangeError.checkValidRange","RangeError.checkNotNegative","IndexError","IndexError.withLength","UnsupportedError","UnimplementedError","StateError","ConcurrentModificationError","Exception","FormatException","Iterable.iterableToShortString","Iterable.iterableToFullString","_iterablePartsToStrings","Object.hash","print","Uri.dataFromString","UriData.fromString","Uri.parse","_Uri.notSimple","Uri.decodeComponent","Uri._ipv4FormatError","Uri._parseIPv4Address","Uri._validateIPvAddress","Uri._validateIPvFutureAddress","Uri.parseIPv6Address","_Uri._internal","_Uri","JSString.isNotEmpty","_Uri._defaultPort","_Uri._fail","_Uri.file","_Uri._checkNonWindowsPathReservedCharacters","_Uri._checkWindowsPathReservedCharacters","ListIterable.iterator","_Uri._checkWindowsDriveLetter","_Uri._makeFileUri","_Uri._makeWindowsFileUrl","JSString.replaceAll","_Uri._makePort","_Uri._makeHost","_Uri._checkZoneID","_Uri._normalizeZoneID","StringBuffer.write","_Uri._normalizeRegName","_Uri._makeScheme","_Uri._canonicalizeScheme","_Uri._makeUserInfo","_Uri._makePath","JSArray.map","_Uri._normalizePath","_Uri._makeQuery","_Uri._makeFragment","_Uri._normalizeEscape","_Uri._escapeChar","_Uri._normalizeOrSubstring","_Uri._normalize","_Uri._mayContainDotSegments","_Uri._removeDotSegments","JSArray.isNotEmpty","_Uri._normalizeRelativePath","_Uri._escapeScheme","_Uri._packageNameEnd","_Uri._hexCharPairToByte","_Uri._uriDecode","JSString.codeUnits","_Uri._isAlphabeticCharacter","UriData._writeUri","UriData._parse","UriData._uriEncodeBytes","_scan","_SimpleUri._packageNameEnd","_skipPackageNameChars","_caseInsensitiveCompareStart","ListToJSArray.toJS","JSAnyUtilityExtension.instanceOfString","JSObjectUnsafeUtilExtension.[]","_functionToJS1","_functionToJS2","_functionToJS3","_functionToJS4","_functionToJS5","_callDartFunctionFast1","_callDartFunctionFast2","_callDartFunctionFast3","_callDartFunctionFast4","_callDartFunctionFast5","_noJsifyRequired","jsify","callMethod","callConstructor","promiseToFuture","_Completer.future","Completer","_noDartifyRequired","dartify","max","sqrt","sin","cos","tan","acos","asin","atan","DriftCommunication","ServerImplementation","StreamController.broadcast","runCancellable","Completer.sync","CancellationToken","checkIfCancelled","_defaultSavepoint","_defaultRelease","_defaultRollbackToSavepoint","QueryResult","QueryResult.fromRows","ApplyInterceptor.interceptWith","EnableNativeFunctions.useNativeFunctions","_pow","_unaryNumFunction","_regexpImpl","_containsImpl","WebPortToChannel.channel","StreamChannelController","_StreamController.stream","_StreamController.sink","GuaranteeChannel.stream","ProtocolVersion.negotiate","ProtocolVersion.fromJsObject","WasmInitializationMessage.fromJs","WorkerError.fromJsPayload","ServeDriftDatabase.fromJsPayload","StartFileSystemServer.fromJsPayload","RequestCompatibilityCheck.fromJsPayload","DedicatedWorkerCompatibilityResult.fromJsPayload","DeleteDatabase.fromJsPayload","SharedWorkerCompatibilityResult.fromJsPayload","EncodeLocations.readFromJs","ListBase.iterator","EncodeLocations.encodeToJs","_createObjectLiteral",".sendTyped","storageManager","checkOpfsSupport","checkIndexedDbSupport","checkIndexedDbExists","JSArrayToList.toDart","List.castFrom","deleteDatabaseInIndexedDb","opfsDriftDirectoryHandle","opfsDatabases","AsyncJavaScriptIteratable","Stream.map","deleteDatabaseInOpfs","CompleteIdbRequest.complete","Context","_parseUri","_validateArgList","JSArray.take","ListIterable.map","ParsedPath.parse","PathException","Style._getPlatformStyle","SqliteException","RawSqliteContext..runWithArgsAndSetResult","WasmContext.sqlite3_result_error","WasmBindings.sqlite3_result_error","WasmBindings.free","RawSqliteContext..setResult",".callReturningVoid2","WasmBindings.sqlite3_result_null","WasmContext.sqlite3_result_null","WasmBindings.sqlite3_result_int64","WasmContext.sqlite3_result_int64","JsBigInt|constructor#parse","WasmContext.sqlite3_result_int64BigInt","WasmBindings.sqlite3_result_double","WasmContext.sqlite3_result_double","WasmContext.sqlite3_result_text","WasmBindings.sqlite3_result_text","WasmContext.sqlite3_result_blob64","WasmBindings.sqlite3_result_blob64","JsBigInt|constructor#fromInt","RawSqliteContext..setSubtypedResult","WasmBindings.sqlite3_result_subtype","WasmContext.sqlite3_result_subtype","InMemoryFileSystem","VfsException","BaseVirtualFileSystem.generateRandomness","CompleteOpenIdbRequest.completeOrBlocked","WasmInstance|load","WasmSqlite3.loadFromUrl","WasmSqlite3._load","RequestResponseSynchronizer","SharedArrayBuffer|asInt32List","JSFunctionUnsafeUtilExtension.callAsConstructor","MessageSerializer.readEmpty","MessageSerializer.readFlags","MessageSerializer.readNameAndFlags","MessageSerializer._readString","VfsWorker.create","StorageManagerApi.directory","FileSystemDirectoryHandleApi.getDirectory","VfsWorker._","SharedArrayBuffer|asUint8List","IndexedDbFileSystem.open","IndexedDbFileSystem._","SimpleOpfsFileSystem._resolveDir","SimpleOpfsFileSystem.loadFromStorage","SimpleOpfsFileSystem.inDirectory","SimpleOpfsFileSystem._","WasmBindings.instantiateAsync","WasmBindings._","_runVfs","WrappedMemory.strlen","WrappedMemory.dartBuffer","WrappedMemory.readString","WrappedMemory.readNullableString","WrappedMemory.copyRange","_InjectedValues","_InjectedValues.callbacks","DartCallbacks","Chain.parse","WhereIterable.map","JSArray.where","Frame._#parseVM#tearOff","Frame.parseVM","Frame._#parseV8#tearOff","Frame.parseV8","Frame._parseFirefoxEval","Frame._#parseFirefox#tearOff","Frame.parseFirefox","Frame._#parseFriendly#tearOff","Frame.parseFriendly","Frame._uriOrPathToUri","Frame._catchFormatException","UnparsedFrame","Trace.from","Trace.parse","Trace._#parseVM#tearOff","Trace.parseVM","Trace._parseVM","Iterable.toList","Trace.parseV8","Trace.parseJSCore","Trace.parseFirefox","Trace._#parseFriendly#tearOff","Trace.parseFriendly","Trace","GuaranteeChannel","_EventStreamSubscription","_wrapZone","printString","JSObjectUnsafeUtilExtension._callMethod","current","isAlphabetic","driveLetterEnd","createExceptionRaw","WasmBindings.sqlite3_extended_errcode","WasmDatabase.sqlite3_extended_errcode","WasmBindings.sqlite3_error_offset",".callReturningInt","WasmDatabase.sqlite3_error_offset","createExceptionFromExtendedCode","WasmBindings.sqlite3_errmsg","WasmBindings.sqlite3_errstr","WasmSqliteBindings.sqlite3_errstr","throwException","BigIntRangeCheck.checkRange","ReadDartValue.read","WasmBindings.sqlite3_value_type","WasmValue.sqlite3_value_type","JsBigInt|get#asDartInt","WasmBindings.sqlite3_value_int64","WasmBindings.sqlite3_value_double","WasmBindings.sqlite3_value_bytes","WasmBindings.sqlite3_value_text","WasmBindings.sqlite3_value_blob","GenerateFilename.randomFileName","ReadBlob.byteBuffer","SharedArrayBuffer|asByteData","SharedArrayBuffer|asUint8ListSlice","Atomics.notify","FileSystemSyncAccessHandleApi.readDart","FileSystemSyncAccessHandleApi.writeDart","FileSystemDirectoryHandleApi.remove","main","WasmDatabase.workerMainForOpen","DedicatedDriftWorker._checkCompatibility","DedicatedDriftWorker","DriftServerController","SharedDriftWorker","Interceptor.hashCode","Interceptor.==","Interceptor.toString","Interceptor.runtimeType","JSBool.toString","JSBool.hashCode","JSBool.runtimeType","JSNull.==","JSNull.toString","JSNull.hashCode","LegacyJavaScriptObject.toString","LegacyJavaScriptObject.hashCode","JavaScriptFunction.toString","JavaScriptBigInt.toString","JavaScriptBigInt.hashCode","JavaScriptSymbol.toString","JavaScriptSymbol.hashCode","JSArray.cast","JSArray.add","JSArray.removeAt","JSArray.insert","JSArray.insertAll","JSArray.removeLast","JSArray.remove","JSArray.addAll","JSArray._addAllFromArray","JSArray.clear","JSArray.forEach","JSArray.join","JSArray.join[function-entry$0]","JSArray.skip","JSArray.elementAt","JSArray.sublist","JSArray.getRange","JSArray.first","JSArray.last","JSArray.setRange","JSArray.setRange[function-entry$3]","JSArray.sort","JSArray.sort[function-entry$0]","JSArray._replaceSomeNullsWithUndefined","JSArray.lastIndexOf","JSArray.isEmpty","JSArray.toString","JSArray.toList","JSArray._toListGrowable","JSArray.toList[function-entry$0]","JSArray.iterator","JSArray.hashCode","JSArray.length","JSArray.[]","JSArray.[]=","JSArraySafeToStringHook.tryFormat","ArrayIterator.current","ArrayIterator.moveNext","JSNumber.compareTo","JSNumber.isNegative","JSNumber.toInt","JSNumber.truncateToDouble","JSNumber.ceil","JSNumber.toString","JSNumber.hashCode","JSNumber.%","JSNumber.~/","JSNumber._tdivFast","JSNumber._tdivSlow","JSNumber.<<","JSNumber.>>","JSNumber._shrOtherPositive","JSNumber._shrReceiverPositive","JSNumber._shrBothPositive","JSNumber.runtimeType","JSInt.bitLength","JSInt.runtimeType","JSNumNotInt.runtimeType","JSString.codeUnitAt","JSString.allMatches","allMatchesInStringUnchecked","JSString.allMatches[function-entry$1]","JSString.matchAsPrefix","JSString.endsWith","JSString.replaceFirst","JSString.split","stringSplitUnchecked","regExpHasCaptures","JSString.replaceRange","JSString._defaultSplit","JSString.startsWith","JSString.startsWith[function-entry$1]","JSString.substring","JSString.substring[function-entry$1]","JSString.trim","JSString.*","JSString.padLeft","JSString.padRight","JSString.indexOf","JSString.indexOf[function-entry$1]","JSString.lastIndexOf","JSString.lastIndexOf[function-entry$1]","JSString.contains","JSString.compareTo","JSString.toString","JSString.hashCode","JSString.runtimeType","JSString.length","JSString.[]","_CastIterableBase.iterator","_CastIterableBase.length","_CastIterableBase.isEmpty","_CastIterableBase.skip","_CastIterableBase.take","_CastIterableBase.elementAt","_CastIterableBase.first","_CastIterableBase.last","_CastIterableBase.toString","CastIterator.moveNext","CastIterator.current","_CastListBase.[]","_CastListBase.[]=","_CastListBase.getRange","_CastListBase.setRange","_CastListBase.setRange[function-entry$3]","CastList.cast","LateError.toString","CodeUnits.length","CodeUnits.[]","nullFuture.","ListIterable.isEmpty","ListIterable.first","ListIterable.last","ListIterable.join","ListIterable.join[function-entry$0]","ListIterable.fold","ListIterable.skip","ListIterable.take","ListIterable.toList","ListIterable.toList[function-entry$0]","SubListIterable._endIndex","SubListIterable._startIndex","SubListIterable.length","SubListIterable.elementAt","SubListIterable.skip","SubListIterable.take","SubListIterable.toList","ListIterator.current","ListIterator.moveNext","MappedIterable.iterator","MappedIterable.length","MappedIterable.isEmpty","MappedIterable.first","MappedIterable.last","MappedIterable.elementAt","MappedIterator.moveNext","MappedIterator.current","MappedListIterable.length","MappedListIterable.elementAt","WhereIterable.iterator","WhereIterator.moveNext","WhereIterator.current","ExpandIterable.iterator","ExpandIterator","ExpandIterator.current","ExpandIterator.moveNext","TakeIterable.iterator","EfficientLengthTakeIterable.length","TakeIterator.moveNext","TakeIterator.current","SkipIterable.skip","SkipIterable.iterator","EfficientLengthSkipIterable.length","EfficientLengthSkipIterable.skip","SkipIterator.moveNext","SkipIterator.current","SkipWhileIterable.iterator","SkipWhileIterator.moveNext","SkipWhileIterator.current","EmptyIterable.iterator","EmptyIterable.isEmpty","EmptyIterable.length","EmptyIterable.first","EmptyIterable.last","EmptyIterable.elementAt","EmptyIterable.map","EmptyIterable.skip","EmptyIterable.take","EmptyIterator.moveNext","EmptyIterator.current","WhereTypeIterable.iterator","WhereTypeIterator.moveNext","WhereTypeIterator.current","IndexedIterable.length","IndexedIterable.isEmpty","IndexedIterable.first","IndexedIterable.elementAt","IndexedIterable.take","IndexedIterable.skip","IndexedIterable.iterator","EfficientLengthIndexedIterable.last","EfficientLengthIndexedIterable.take","EfficientLengthIndexedIterable.skip","IndexedIterator.moveNext","IndexedIterator.current","UnmodifiableListMixin.[]=","UnmodifiableListMixin.setRange","UnmodifiableListMixin.setRange[function-entry$3]","ReversedListIterable.length","ReversedListIterable.elementAt","Symbol.hashCode","Symbol.toString","Symbol.==","ConstantMap.toString","ConstantMap.entries","_makeSyncStarIterable","ConstantStringMap.length","ConstantStringMap._keys","ConstantStringMap.containsKey","ConstantStringMap.[]","ConstantStringMap.forEach","ConstantStringMap.keys","ConstantStringMap.values","_KeysOrValues.length","_KeysOrValues.isEmpty","_KeysOrValues.iterator","_KeysOrValuesOrElementsIterator.current","_KeysOrValuesOrElementsIterator.moveNext","Instantiation.==","Instantiation.hashCode","Instantiation.toString","TypeErrorDecoder.matchTypeError","NullError.toString","JsNoSuchMethodError.toString","UnknownJsTypeError.toString","NullThrownFromJavaScriptException.toString","_StackTrace.toString","Closure.toString","StaticClosure.toString","BoundClosure.==","BoundClosure.hashCode","BoundClosure.toString","RuntimeError.toString","JsLinkedHashMap.keys","JsLinkedHashMap.length","JsLinkedHashMap.isEmpty","JsLinkedHashMap.values","JsLinkedHashMap.entries","JsLinkedHashMap.containsKey","JsLinkedHashMap._containsTableEntry","JsLinkedHashMap.internalContainsKey","JsLinkedHashMap._getBucket","JsLinkedHashMap.addAll","JsLinkedHashMap.[]","JsLinkedHashMap.internalGet","JsLinkedHashMap.[]=","JsLinkedHashMap.internalSet","JsLinkedHashMap.putIfAbsent","JsLinkedHashMap.remove","JsLinkedHashMap.internalRemove","JsLinkedHashMap.clear","JsLinkedHashMap.forEach","JsLinkedHashMap._addHashTableEntry","JsLinkedHashMap._removeHashTableEntry","JsLinkedHashMap._modified","JsLinkedHashMap._newLinkedCell","JsLinkedHashMap._unlinkCell","JsLinkedHashMap.internalComputeHashCode","JsLinkedHashMap.internalFindBucketIndex","JsLinkedHashMap.toString","JsLinkedHashMap._newHashTable","JsLinkedHashMap.addAll.","JsLinkedHashMap_addAll_closure","LinkedHashMapKeysIterable.length","LinkedHashMapKeysIterable.isEmpty","LinkedHashMapKeysIterable.iterator","LinkedHashMapKeyIterator.current","LinkedHashMapKeyIterator.moveNext","LinkedHashMapValuesIterable.length","LinkedHashMapValuesIterable.isEmpty","LinkedHashMapValuesIterable.iterator","LinkedHashMapValueIterator.current","LinkedHashMapValueIterator.moveNext","LinkedHashMapEntriesIterable.length","LinkedHashMapEntriesIterable.isEmpty","LinkedHashMapEntriesIterable.iterator","LinkedHashMapEntryIterator.current","LinkedHashMapEntryIterator.moveNext","initHooks.","_Record.toString","_Record._toString","StringBuffer._writeString","_Record._fieldKeys","_Record._computeFieldKeys","JSArray.allocateGrowable","_Record2._getFieldValues","_Record2.==","_Record._sameShape","_Record2.hashCode","JSSyntaxRegExp.toString","JSSyntaxRegExp._nativeGlobalVersion","JSSyntaxRegExp._nativeAnchoredVersion","JSSyntaxRegExp._computeHasCaptures","JSSyntaxRegExp.firstMatch","JSSyntaxRegExp.allMatches","JSSyntaxRegExp.allMatches[function-entry$1]","JSSyntaxRegExp._execGlobal","JSSyntaxRegExp._execAnchored","JSSyntaxRegExp.matchAsPrefix","_MatchImplementation.start","_MatchImplementation.end","_MatchImplementation.namedGroup","_AllMatchesIterable.iterator","_AllMatchesIterator.current","_AllMatchesIterator.moveNext","JSSyntaxRegExp.isUnicode","StringMatch.end","StringMatch.[]","_StringAllMatchesIterable.iterator","_StringAllMatchesIterable.first","_StringAllMatchesIterator.moveNext","_StringAllMatchesIterator.current","_Cell._readField","NativeByteBuffer.runtimeType","NativeByteBuffer.asUint8List","NativeByteBuffer.asByteData","NativeByteBuffer.asByteData[function-entry$0]","NativeTypedData.buffer","NativeTypedData._invalidPosition","NativeTypedData._checkPosition","_UnmodifiableNativeByteBufferView.asUint8List","_UnmodifiableNativeByteBufferView.asByteData","NativeByteData.runtimeType","NativeTypedArray.length","NativeTypedArray._setRangeFast","NativeTypedArrayOfDouble.[]","NativeTypedArrayOfDouble.[]=","NativeTypedArrayOfDouble.setRange","NativeTypedArrayOfDouble.setRange[function-entry$3]","NativeTypedArrayOfInt.[]=","NativeTypedArrayOfInt.setRange","NativeTypedArrayOfInt.setRange[function-entry$3]","NativeFloat32List.sublist","NativeFloat32List.runtimeType","NativeFloat64List.sublist","NativeFloat64List.runtimeType","NativeInt16List.runtimeType","NativeInt16List.[]","NativeInt16List.sublist","NativeInt32List.runtimeType","NativeInt32List.[]","NativeInt32List.sublist","NativeInt8List.runtimeType","NativeInt8List.[]","NativeInt8List.sublist","NativeUint16List.runtimeType","NativeUint16List.[]","NativeUint16List.sublist","NativeUint32List.runtimeType","NativeUint32List.[]","NativeUint32List.sublist","NativeUint8ClampedList.runtimeType","NativeUint8ClampedList.length","NativeUint8ClampedList.[]","NativeUint8ClampedList.sublist","NativeUint8List.runtimeType","NativeUint8List.length","NativeUint8List.[]","NativeUint8List.sublist","Rti._eval","Rti._bind","_Type.toString","_Error.toString","_AsyncRun._initializeScheduleImmediate.internalCallback","_AsyncRun._initializeScheduleImmediate.","_AsyncRun._scheduleImmediateJsOverride.internalCallback","_AsyncRun._scheduleImmediateWithSetImmediate.internalCallback","_TimerImpl.internalCallback","_TimerImpl.periodic.","_AsyncAwaitCompleter.complete","_AsyncAwaitCompleter.completeError","_Future._completeError","_awaitOnObject.","_wrapJsFunctionForAsync.","_SyncStarIterator.current","_SyncStarIterator._resumeBody","_SyncStarIterator.moveNext","_SyncStarIterator._yieldStar","_SyncStarIterable.iterator","AsyncError.toString","_BroadcastSubscription._onPause","_BroadcastSubscription._onResume","_BroadcastSubscription._next","_BroadcastSubscription._previous","_BroadcastStreamController._mayAddEvent","_BroadcastStreamController._removeListener","_BroadcastStreamController._subscribe","_DoneStreamSubscription","_BroadcastSubscription","_BroadcastStreamController._recordCancel","_BroadcastStreamController._recordPause","_BroadcastStreamController._recordResume","_BroadcastStreamController._addEventError","_BroadcastStreamController.add","_BroadcastStreamController.addError","_BroadcastStreamController.close","_BroadcastStreamController._ensureDoneFuture","_BroadcastStreamController._forEachListener","_BroadcastStreamController._callOnCancel","_SyncBroadcastStreamController._mayAddEvent","_SyncBroadcastStreamController._addEventError","_SyncBroadcastStreamController._sendData","_SyncBroadcastStreamController._sendError","_SyncBroadcastStreamController._sendDone","_SyncBroadcastStreamController._sendData.","_SyncBroadcastStreamController__sendData_closure","_SyncBroadcastStreamController._sendError.","_SyncBroadcastStreamController__sendError_closure","_SyncBroadcastStreamController._sendDone.","_SyncBroadcastStreamController__sendDone_closure","Future.","_completeWithErrorCallback","Future.delayed.","Future.wait.handleError","Future.wait.","Future_wait_closure","_Completer.completeError","_Completer.completeError[function-entry$1]","_AsyncCompleter.complete","_AsyncCompleter.complete[function-entry$0]","_AsyncCompleter._completeErrorObject","_SyncCompleter.complete","_SyncCompleter.complete[function-entry$0]","_SyncCompleter._completeErrorObject","_FutureListener.matchesErrorTest","_FutureListener._errorTest","_FutureListener.handleError","_Future.then","_Future.then[function-entry$1]","_Future._thenAwait","_Future.whenComplete","_Future._setErrorObject","_Future._cloneResult","_Future._addListener","_Future._prependListeners","_Future._removeListeners","_Future._reverseListeners","_Future._complete","_Future._completeWithValue","_Future._completeWithResultOf","_Future._completeErrorObject","_Future._asyncComplete","_Future._asyncCompleteWithValue","_Future._chainFuture","_Future._asyncCompleteErrorObject","_Future._addListener.","_Future._prependListeners.","_Future._chainCoreFuture.","_Future._asyncCompleteWithValue.","_Future._asyncCompleteErrorObject.","_Future._propagateToListeners.handleWhenCompleteCallback","_FutureListener.handleWhenComplete","_FutureListener._whenCompleteAction","_Future._newFutureWithSameType","_Future._propagateToListeners.handleWhenCompleteCallback.","_Future._propagateToListeners.handleValueCallback","_FutureListener.handleValue","_FutureListener._onValue","_Future._propagateToListeners.handleError","_FutureListener.hasErrorCallback","Stream.length","Stream.first","Stream.firstWhere","Stream.length.","Stream_length_closure","Stream.first.","Stream_first_closure","Stream.firstWhere.","Stream_firstWhere_closure","Stream.firstWhere..","_StreamController._pendingEvents","_StreamController._ensurePendingEvents","_StreamController._subscription","_StreamController._badEventState","_StreamController._ensureDoneFuture","_StreamController.add","_StreamController._add","_StreamController.addError","_StreamController._addError","_StreamController.addError[function-entry$1]","_StreamController.close","_StreamController._subscribe","_StreamController._recordCancel","_StreamController._recordPause","_StreamController._recordResume","_StreamController.onListen","_StreamController.onResume","_StreamController._subscribe.","_StreamController._recordCancel.complete","_SyncStreamControllerDispatch._sendData","_SyncStreamControllerDispatch._sendError","_SyncStreamControllerDispatch._sendDone","_AsyncStreamControllerDispatch._sendData","_AsyncStreamControllerDispatch._sendError","_AsyncStreamControllerDispatch._sendDone","_ControllerStream.hashCode","_ControllerStream.==","_ControllerSubscription._onCancel","_ControllerSubscription._onPause","_ControllerSubscription._onResume","_StreamSinkWrapper.add","_StreamSinkWrapper.addError","_StreamSinkWrapper.close","_BufferingStreamSubscription._setPendingEvents","_BufferingStreamSubscription.onData","_BufferingStreamSubscription.onError","_BufferingStreamSubscription.pause","_PendingEvents.cancelSchedule","_BufferingStreamSubscription.resume","_BufferingStreamSubscription.cancel","_BufferingStreamSubscription._cancel","_BufferingStreamSubscription._add","_BufferingStreamSubscription._addError","_BufferingStreamSubscription._close","_BufferingStreamSubscription._onPause","_BufferingStreamSubscription._onResume","_BufferingStreamSubscription._onCancel","_BufferingStreamSubscription._addPending","_BufferingStreamSubscription._sendData","_BufferingStreamSubscription._sendError","_BufferingStreamSubscription._sendDone","_BufferingStreamSubscription._guardCallback","_BufferingStreamSubscription._checkState","_BufferingStreamSubscription._mayResumeInput","_BufferingStreamSubscription._sendError.sendError","_BufferingStreamSubscription._sendDone.sendDone","_StreamImpl.listen","_StreamImpl.listen[function-entry$1$onDone$onError]","_StreamImpl.listen[function-entry$1]","_StreamImpl.listen[function-entry$1$onDone]","_DelayedEvent.next","_DelayedData.perform","_DelayedError.perform","_DelayedDone.perform","_DelayedDone.next","_PendingEvents.schedule","_PendingEvents.add","_PendingEvents.schedule.","_DoneStreamSubscription.onData","_DoneStreamSubscription.onError","_DoneStreamSubscription.pause","_DoneStreamSubscription.resume","_DoneStreamSubscription.cancel","_DoneStreamSubscription._onMicrotask","_StreamIterator.current","_StreamIterator.moveNext","_StreamIterator._initializeOrDone","_StreamIterator.cancel","_StreamIterator._onData","_StreamIterator._onError","_StreamIterator._onDone","_cancelAndError.","_cancelAndErrorClosure.","_cancelAndValue.","_ForwardingStream.listen","_ForwardingStream._createSubscription","_ForwardingStreamSubscription","_ForwardingStream.listen[function-entry$1$onDone$onError]","_ForwardingStreamSubscription._add","_ForwardingStreamSubscription._addError","_ForwardingStreamSubscription._onPause","_ForwardingStreamSubscription._onResume","_ForwardingStreamSubscription._onCancel","_ForwardingStreamSubscription._handleData","_ForwardingStreamSubscription._handleError","_ForwardingStreamSubscription._handleDone","_MapStream._handleData","_EventSinkWrapper.add","_SinkTransformerStreamSubscription._add","_EventSinkWrapper.addError","_SinkTransformerStreamSubscription._addError","_EventSinkWrapper.close","_SinkTransformerStreamSubscription._close","_SinkTransformerStreamSubscription._onPause","_SinkTransformerStreamSubscription._onResume","_SinkTransformerStreamSubscription._onCancel","_SinkTransformerStreamSubscription._handleData","_SinkTransformerStreamSubscription._handleError","_SinkTransformerStreamSubscription._handleDone","_StreamSinkTransformer.bind","_BoundSinkStream.listen","_SinkTransformerStreamSubscription","_BoundSinkStream.listen[function-entry$1$onDone$onError]","_HandlerEventSink.add","_HandlerEventSink.addError","_HandlerEventSink.close","_StreamHandlerTransformer.bind","_StreamHandlerTransformer.","_StreamHandlerTransformer_closure","_Zone._processUncaughtError","_CustomZone._delegate","_CustomZone._parentDelegate","_CustomZone.errorZone","_CustomZone.runGuarded","_CustomZone.runUnaryGuarded","_CustomZone.runBinaryGuarded","_CustomZone.bindCallback","_CustomZone.bindUnaryCallback","_CustomZone.bindCallbackGuarded","_CustomZone.bindUnaryCallbackGuarded","_CustomZone.[]","_CustomZone.handleUncaughtError","_CustomZone.fork","_CustomZone.run","_CustomZone.runUnary","_CustomZone.runBinary","_CustomZone.registerCallback","_CustomZone.registerUnaryCallback","_CustomZone.registerBinaryCallback","_CustomZone.errorCallback","_CustomZone.scheduleMicrotask","_CustomZone.createTimer","_CustomZone.print","_CustomZone.bindCallback.","_CustomZone_bindCallback_closure","_CustomZone.bindUnaryCallback.","_CustomZone_bindUnaryCallback_closure","_CustomZone.bindCallbackGuarded.","_CustomZone.bindUnaryCallbackGuarded.","_CustomZone_bindUnaryCallbackGuarded_closure","_rootHandleError.","_RootZone._map","_RootZone._run","_RootZone._runUnary","_RootZone._runBinary","_RootZone._registerCallback","_RootZone._registerUnaryCallback","_RootZone._registerBinaryCallback","_RootZone._errorCallback","_RootZone._scheduleMicrotask","_RootZone._createTimer","_RootZone._createPeriodicTimer","_RootZone._print","_RootZone._fork","_RootZone._handleUncaughtError","_RootZone.parent","_RootZone._delegate","_RootZone._parentDelegate","_RootZone.errorZone","_RootZone.runGuarded","_RootZone.runUnaryGuarded","_RootZone.runBinaryGuarded","_RootZone.bindCallback","_RootZone.bindUnaryCallback","_RootZone.bindCallbackGuarded","_RootZone.bindUnaryCallbackGuarded","_RootZone.[]","_RootZone.handleUncaughtError","_RootZone.fork","_RootZone.run","_RootZone.runUnary","_RootZone.runBinary","_RootZone.registerCallback","_RootZone.registerUnaryCallback","_RootZone.registerBinaryCallback","_RootZone.errorCallback","_RootZone.scheduleMicrotask","_RootZone.createTimer","_RootZone.print","_RootZone.bindCallback.","_RootZone_bindCallback_closure","_RootZone.bindUnaryCallback.","_RootZone_bindUnaryCallback_closure","_RootZone.bindCallbackGuarded.","_RootZone.bindUnaryCallbackGuarded.","_RootZone_bindUnaryCallbackGuarded_closure","_HashMap.keys","_HashMap.length","_HashMap.isEmpty","_HashMap.values","_HashMap.containsKey","_HashMap._containsKey","_HashMap.[]","_HashMap._get","_HashMap.[]=","_HashMap._set","_HashMap.forEach","_HashMap._computeKeys","_HashMap._addHashTableEntry","_HashMap._computeHashCode","_HashMap._getBucket","_HashMap._findBucketIndex","_HashMap.values.","_HashMap_values_closure","_IdentityHashMap._computeHashCode","_IdentityHashMap._findBucketIndex","_HashMapKeyIterable.length","_HashMapKeyIterable.isEmpty","_HashMapKeyIterable.iterator","_HashMapKeyIterator.current","_HashMapKeyIterator.moveNext","_LinkedHashSet.iterator","_LinkedHashSet.length","_LinkedHashSet.isEmpty","_LinkedHashSet.contains","_LinkedHashSet._contains","_LinkedHashSet._getBucket","_LinkedHashSet.first","_LinkedHashSet.last","_LinkedHashSet.add","_LinkedHashSet._add","_LinkedHashSet.remove","_LinkedHashSet._remove","_LinkedHashSet._addHashTableEntry","_LinkedHashSet._removeHashTableEntry","_LinkedHashSet._modified","_LinkedHashSet._newLinkedCell","_LinkedHashSet._unlinkCell","_LinkedHashSet._findBucketIndex","_LinkedHashSetIterator.current","_LinkedHashSetIterator.moveNext","HashMap.from.","LinkedList.remove","LinkedList.iterator","LinkedList.length","LinkedList.first","LinkedList.last","LinkedList.isEmpty","LinkedList._insertBefore","LinkedList._unlink","_LinkedListIterator.current","_LinkedListIterator.moveNext","LinkedListEntry.previous","LinkedListEntry._list","LinkedListEntry._next","LinkedListEntry._previous","ListBase.elementAt","ListBase.isEmpty","ListBase.first","ListBase.last","ListBase.map","ListBase.skip","ListBase.take","ListBase.toList","ListBase.toList[function-entry$0]","ListBase.cast","ListBase.sublist","ListBase.getRange","ListBase.fillRange","ListBase.setRange","ListBase.setRange[function-entry$3]","ListBase.setAll","ListBase.toString","MapBase.forEach","MapBase.entries","MapBase.length","MapBase.isEmpty","MapBase.values","MapBase.toString","MapBase.entries.","MapBase_entries_closure","MapBase.mapToString.","_MapBaseValueIterable.length","_MapBaseValueIterable.isEmpty","_MapBaseValueIterable.first","_MapBaseValueIterable.last","_MapBaseValueIterable.iterator","_MapBaseValueIterator.moveNext","_MapBaseValueIterator.current","SetBase.isEmpty","SetBase.map","SetBase.toString","SetBase.take","SetBase.skip","SetBase.first","SetBase.last","SetBase.elementAt","_Utf8Decoder._decoder.","_Utf8Decoder._decoderNonfatal.","AsciiCodec.encode","_UnicodeSubsetEncoder.convert","Base64Codec.normalize","Utf8Codec.decode","Utf8Decoder.convert","Utf8Encoder.convert","_Utf8Encoder._writeReplacementCharacter","_Utf8Encoder._writeSurrogate","_Utf8Encoder._fillBuffer","_Utf8Decoder._convertGeneral","_Utf8Decoder._decodeRecursive","_Utf8Decoder.decodeGeneral","_BigIntImpl.unary-","_BigIntImpl._dlShift","_BigIntImpl._drShift","_BigIntImpl.<<","_BigIntImpl.>>","_BigIntImpl.compareTo","_BigIntImpl._absAddSetSign","_BigIntImpl._absSubSetSign","_BigIntImpl.+","_BigIntImpl.-","_BigIntImpl.*","_BigIntImpl._div","_BigIntImpl._lastQuoRemUsed","_BigIntImpl._lastRemUsed","_BigIntImpl._lastQuoRemDigits","_BigIntImpl._rem","_BigIntImpl._lastRem_nsh","_BigIntImpl._divRem","_BigIntImpl.hashCode","_BigIntImpl.==","_BigIntImpl.toString","JSArray.reversed","_BigIntImpl.hashCode.combine","_BigIntImpl.hashCode.finish","_FinalizationRegistryWrapper.detach","DateTime.==","DateTime.hashCode","DateTime.compareTo","DateTime.toString","Duration.==","Duration.hashCode","Duration.compareTo","Duration.toString","_Enum.toString","Error.stackTrace","AssertionError.toString","ArgumentError._errorName","ArgumentError._errorExplanation","ArgumentError.toString","RangeError.invalidValue","RangeError._errorName","RangeError._errorExplanation","IndexError.invalidValue","IndexError._errorName","IndexError._errorExplanation","UnsupportedError.toString","UnimplementedError.toString","StateError.toString","ConcurrentModificationError.toString","OutOfMemoryError.toString","OutOfMemoryError.stackTrace","StackOverflowError.toString","StackOverflowError.stackTrace","_Exception.toString","FormatException.toString","IntegerDivisionByZeroException.stackTrace","IntegerDivisionByZeroException.toString","Iterable.cast","Iterable.map","List.of","makeListFixedLength","Iterable.toList[function-entry$0]","Iterable.length","Iterable.isEmpty","Iterable.take","Iterable.skip","Iterable.skipWhile","Iterable.first","Iterable.last","Iterable.elementAt","Iterable.toString","MapEntry.toString","Null.hashCode","Null.toString","Object.hashCode","Object.==","Object.toString","Object.runtimeType","_StringStackTrace.toString","StringBuffer.length","StringBuffer.toString","Uri.parseIPv6Address.error","_Uri._text","_Uri._initializeText","_Uri._writeAuthority","_Uri.pathSegments","_Uri._computePathSegments","_Uri.hashCode","_Uri.userInfo","_Uri.host","_Uri.port","_Uri.query","_Uri.fragment","_Uri.isScheme","_Uri.replace","_Uri.isAbsolute","_Uri._mergePaths","_Uri.resolve","_Uri.resolveUri","_Uri.hasEmptyPath","_Uri.hasAuthority","_Uri.hasQuery","_Uri.hasFragment","_Uri.hasAbsolutePath","_Uri.toFilePath","_Uri._toFilePath","_Uri.toString","_Uri.==","_Uri._makePath.","UriData.uri","UriData._computeUri","UriData.toString","_SimpleUri.hasAbsolutePath","_SimpleUri.hasAuthority","_SimpleUri.hasPort","_SimpleUri.hasQuery","_SimpleUri.hasFragment","_SimpleUri.hasEmptyPath","_SimpleUri.isAbsolute","_SimpleUri.scheme","_SimpleUri._computeScheme","_SimpleUri.userInfo","_SimpleUri.host","_SimpleUri.port","_SimpleUri.path","_SimpleUri.query","_SimpleUri.fragment","_SimpleUri._isPort","_SimpleUri.removeFragment","_SimpleUri.replace","_SimpleUri.resolve","_SimpleUri.resolveUri","_SimpleUri._simpleMerge","_SimpleUri.toFilePath","_SimpleUri._toFilePath","_SimpleUri.hashCode","_SimpleUri.==","_SimpleUri._toNonSimple","_SimpleUri.toString","Expando.[]","Expando.toString","NullRejectionException.toString","jsify._convert","promiseToFuture.","dartify.convert","_dateToDateTime","DateTime.fromMillisecondsSinceEpoch","_JSSecureRandom","_JSSecureRandom.nextInt","NativeByteData.setUint32","DelegatingStreamSink.add","DelegatingStreamSink.addError","DelegatingStreamSink.close","ListEquality.equals","ListEquality.hash","CloseGuaranteeChannel.stream","DriftCommunication.newRequestId","DriftCommunication.close","DriftCommunication.isClosed","_Completer.isCompleted","CloseGuaranteeChannel.sink","DriftCommunication._handleMessage","DriftCommunication._send","DriftCommunication.respondError","DriftCommunication.setRequestHandler","DriftCommunication.incomingRequests","DriftCommunication.","DriftCommunication.setRequestHandler.","DriftCommunication_setRequestHandler_closure","_wrapAwaitedExpression","_PendingRequest.completeWithError","_PendingRequest.completeWithError[function-entry$1]","ConnectionClosedException.toString","DriftRemoteException.toString","DriftProtocol.serialize","DriftProtocol.deserialize","DriftProtocol.encodePayload","DriftProtocol.decodePayload","DriftProtocol._encodeDbValue","NativeUint8List.fromList","DriftProtocol._decodeDbValue","DriftProtocol.decodePayload.readInt","DriftProtocol.decodePayload.readNullableInt","Request.toString","SuccessResponse.toString","ErrorResponse.toString","CancelledResponse.toString","NoArgsRequest._enumToString","StatementMethod._enumToString","ExecuteQuery.toString","RequestCancellation.toString","NestedExecutorControl._enumToString","RunNestedExecutorControl.toString","EnsureOpen.toString","ServerInfo.toString","RunBeforeOpen.toString","NotifyTablesUpdated.toString","ServerImplementation.serve","DriftCommunication.notify","ServerImplementation.shutdown","ServerImplementation._closeRemainingConnections","ServerImplementation._handleRequest","ServerImplementation._handleEnsureOpen","ServerImplementation._runQuery","ServerImplementation._runBatched","ServerImplementation._loadExecutor","ServerImplementation._spawnTransaction","ServerImplementation._spawnExclusive","ServerImplementation._putExecutor","ServerImplementation._transactionControl","ServerImplementation._releaseExecutor","ServerImplementation._notifyActiveExecutorUpdated","ServerImplementation._waitForTurn","_BroadcastStreamController.stream","ServerImplementation.dispatchTableUpdateNotification","ServerImplementation.","ServerImplementation.serve.","ServerImplementation._handleRequest.","ServerImplementation._waitForTurn.idIsActive","ServerImplementation._waitForTurn.","_ServerDbUser.beforeOpen","WebProtocol.serialize","WebProtocol.canSerializeSqliteExceptions","WebProtocol.deserialize","_int","WebProtocol._decodeErrorResponse","WebProtocol._serializeRequest","WebProtocol._deserializeRequest","_nullableInt","WebProtocol._serializeResponse","WebProtocol._serializeSelectResult","WebProtocol._deserializeResponse","WebProtocol._encodeDbValue","WebProtocol._decodeDbValue","WebProtocol._decodeStackStrace","WebProtocol._decodeSqliteErrorResponse","WebProtocol.deserialize.decodeRequest","WebProtocol.deserialize.decodeSuccess","WebProtocol._serializeRequest.","WebProtocol._deserializeRequest.readBatched","WebProtocol._deserializeRequest.readBatched.","WebProtocol._deserializeRequest.","WebProtocol._serializeSelectResult.","WebProtocol._deserializeResponse.","UpdateKind._enumToString","TableUpdate.hashCode","TableUpdate.==","TableUpdate.toString","runCancellable.","CancellationToken.cancel","CancellationException.toString","QueryExecutor.close","BatchedStatements.hashCode","BatchedStatements.==","BatchedStatements.toString","ArgumentsForBatchedStatement.hashCode","ArgumentsForBatchedStatement.==","ArgumentsForBatchedStatement.toString","_BaseExecutor.isSequential","_BaseExecutor.logStatements","_BaseExecutor._synchronized","_BaseExecutor._synchronized[function-entry$1]","_BaseExecutor._log","_BaseExecutor.runSelect","_BaseExecutor.runDelete","_BaseExecutor.runInsert","_BaseExecutor.runCustom","_BaseExecutor.runCustom[function-entry$1]","_BaseExecutor.runBatched","_BaseExecutor.beginExclusive","_BaseExecutor._lock","_BaseExecutor.beginTransaction","_BaseExecutor._synchronized.","_BaseExecutor__synchronized_closure","_BaseExecutor.runSelect.","_BaseExecutor.runDelete.","_BaseExecutor.runInsert.","_BaseExecutor.runCustom.","_BaseExecutor.runBatched.","_TransactionExecutor._checkCanOpen","_TransactionExecutor.beginTransactionInContext","_TransactionExecutor.dialect","_TransactionExecutor.logStatements","_TransactionExecutor.isSequential","_StatementBasedTransactionExecutor.ensureOpen","_StatementBasedTransactionExecutor.impl","_StatementBasedTransactionExecutor.beginTransactionInContext","_StatementBasedTransactionExecutor.send","_StatementBasedTransactionExecutor.rollback","_StatementBasedTransactionExecutor._release","_StatementBasedTransactionExecutor.ensureOpen.","DelegatedDatabase.ensureOpen","DelegatedDatabase.impl","DelegatedDatabase.dialect","DelegatedDatabase._runMigrations","_SqliteVersionDelegate.setSchemaVersion","DelegatedDatabase.beginTransactionInContext","DelegatedDatabase.close","DelegatedDatabase.ensureOpen.","Future.error","_Future.immediateError","DelegatedDatabase.close.","_BeforeOpeningExecutor.beginTransactionInContext","_BeforeOpeningExecutor.ensureOpen","_BeforeOpeningExecutor.impl","_BeforeOpeningExecutor.logStatements","_BeforeOpeningExecutor.dialect","_ExclusiveExecutor.dialect","_ExclusiveExecutor.ensureOpen","_ExclusiveExecutor.impl","_ExclusiveExecutor.beginTransactionInContext","_ExclusiveExecutor.close","_ExclusiveExecutor.ensureOpen.","QueryResult.asMap","QueryResult.asMap.","_InterceptedExecutor.beginTransaction","QueryInterceptor.beginTransaction","_InterceptedExecutor.beginExclusive","_InterceptedExecutor.dialect","_InterceptedExecutor.ensureOpen","_InterceptedExecutor.runBatched","_InterceptedExecutor.runCustom","_InterceptedExecutor.runDelete","_InterceptedExecutor.runInsert","_InterceptedExecutor.runSelect","_InterceptedExecutor.close","_InterceptedTransactionExecutor.rollback","_InterceptedTransactionExecutor.send","SqlDialect._enumToString","Sqlite3Delegate.open","Sqlite3Delegate._initializeDatabase","Sqlite3Delegate.close","Sqlite3Delegate.runBatchSync","StatementImplementation.executeWith","StatementImplementation._reset","WasmBindings.sqlite3_reset","FinalizableStatement._reset","WasmStatement.sqlite3_reset","CommonPreparedStatement.execute","StatementImplementation.dispose","FinalizableStatement.dispose","WasmBindings.sqlite3_finalize","WasmStatement.sqlite3_finalize","Sqlite3Delegate.runWithArgsSync","Sqlite3Delegate.runSelect","Sqlite3Delegate._getPreparedStatement","StatementImplementation.isExplain","WasmStatement.sqlite3_stmt_isexplain","WasmBindings.sqlite3_stmt_isexplain","PreparedStatementsCache.addNew","PreparedStatementsCache.disposeAll","DateTime._now","EnableNativeFunctions|useNativeFunctions.","_unaryNumFunction.","LazyDatabase._delegate","LazyDatabase.dialect","LazyDatabase._awaitOpened","LazyDatabase.beginExclusive","LazyDatabase.beginTransaction","LazyDatabase.ensureOpen","LazyDatabase.runBatched","LazyDatabase.runCustom","LazyDatabase.runDelete","LazyDatabase.runInsert","LazyDatabase.runSelect","LazyDatabase.close","LazyDatabase._awaitOpened.","LazyDatabase.ensureOpen.","Lock.synchronized","Lock.synchronized.callBlockAndComplete","Lock_synchronized_callBlockAndComplete","Lock.synchronized.callBlockAndComplete.","Lock.synchronized.","Lock_synchronized_closure","WebPortToChannel|channel.","StreamChannelController.local","GuaranteeChannel.sink","DedicatedDriftWorker.start","DedicatedDriftWorker._handleMessage","DedicatedDriftWorker.start.","WasmInitializationMessage.read","DedicatedDriftWorker._handleMessage.","ProtocolVersion._enumToString","WasmInitializationMessage.sendToWorker","WasmInitializationMessage.sendToPort","WasmInitializationMessage.sendToClient","WasmInitializationMessage.sendToWorker.","WasmInitializationMessage.sendToPort.","WasmInitializationMessage.sendToClient.","SharedWorkerCompatibilityResult.sendTo","SharedWorkerCompatibilityResult.fromJsPayload.asBoolean","WorkerError.sendTo","WorkerError.toString","ServeDriftDatabase.sendTo","RequestCompatibilityCheck.sendTo","DedicatedWorkerCompatibilityResult.sendTo","StartFileSystemServer.sendTo","DeleteDatabase.sendTo","checkIndexedDbExists.","opfsDatabases.","DriftServerController.serve","DriftServerController.openConnection","Sqlite3Implementation.registerVirtualFileSystem","WasmSqliteBindings.registerVirtualFileSystem","WasmBindings.allocateZeroTerminated","WasmBindings.dart_sqlite3_register_vfs","PreparedStatementsCache","DriftServerController._loadLockedWasmVfs","RequestResponseSynchronizer.createBuffer","Atomics.store","WasmVfs.createOptions","WasmVfs","DriftServerController.serve.","DriftServerController.serve..","DriftServerController.serve...","_CloseVfsOnClose.close","RunningWasmServer.serve","StreamChannelMixin.transformStream","StreamChannel.withCloseGuarantee","CloseGuaranteeChannel","RunningWasmServer.serve.","CompleteIdbRequest|complete.","SharedDriftWorker.start","SharedDriftWorker._newConnection","SharedDriftWorker._messageFromClient","SharedDriftWorker._startFeatureDetection","SharedDriftWorker.start.","SharedDriftWorker._newConnection.","SharedDriftWorker._startFeatureDetection.result","SharedDriftWorker._startFeatureDetection.","WasmStorageImplementation._enumToString","WebStorageApi._enumToString","_WasmDelegate.openDatabase","_WasmDelegate._flush","_WasmDelegate._runWithArgs","_WasmDelegate.runCustom","_WasmDelegate.runInsert","WasmBindings.sqlite3_last_insert_rowid","DatabaseImplementation.lastInsertRowId","WasmDatabase.sqlite3_last_insert_rowid","_WasmDelegate.runUpdate","WasmBindings.sqlite3_changes","DatabaseImplementation.updatedRows","WasmDatabase.sqlite3_changes","_WasmDelegate.runBatched","_WasmDelegate.close","Context.absolute","Context.absolute[function-entry$1]","Context.join","JSArray.whereType","Context.join[function-entry$2]","Context.joinAll","Context.split","Context.normalize","Context._needsNormalization","Context.relative","Context.isRelative","Context.relative[function-entry$1]","Context._isWithinOrEquals","Context._isWithinOrEqualsFast","Context._pathDirection","Context.toUri","Context.prettyUri","Context.joinAll.","Context.split.","_validateArgList.","_PathDirection.toString","_PathRelation.toString","InternalStyle.getRoot","InternalStyle.relativePathToUri","InternalStyle.codeUnitsEqual","InternalStyle.pathsEqual","ParsedPath.hasTrailingSeparator","ParsedPath.removeTrailingSeparators","ParsedPath.normalize","ParsedPath.toString","ParsedPath.parts","PathException.toString","Style.toString","PosixStyle.containsSeparator","PosixStyle.isSeparator","PosixStyle.needsSeparator","PosixStyle.rootLength","PosixStyle.rootLength[function-entry$1]","PosixStyle.isRootRelative","PosixStyle.pathFromUri","PosixStyle.absolutePathToUri","UrlStyle.containsSeparator","UrlStyle.isSeparator","UrlStyle.needsSeparator","UrlStyle.rootLength","UrlStyle.rootLength[function-entry$1]","UrlStyle.isRootRelative","UrlStyle.pathFromUri","UrlStyle.relativePathToUri","UrlStyle.absolutePathToUri","WindowsStyle.containsSeparator","WindowsStyle.isSeparator","WindowsStyle.needsSeparator","WindowsStyle.rootLength","WindowsStyle.rootLength[function-entry$1]","WindowsStyle.isRootRelative","WindowsStyle.pathFromUri","WindowsStyle.absolutePathToUri","WindowsStyle.codeUnitsEqual","WindowsStyle.pathsEqual","WindowsStyle.absolutePathToUri.","SqliteException.toString","SqliteException.toString.","FinalizableDatabase.dispose","WasmBindings.sqlite3_close_v2","WasmDatabase.sqlite3_close_v2","DatabaseImplementation.userVersion","CommonPreparedStatement.select","DatabaseImplementation.createFunction","DatabaseImplementation._validateAndEncodeFunctionName","WasmDatabase.sqlite3_create_function_v2","DatabaseImplementation.createFunction[function-entry$0$argumentCount$deterministic$function$functionName]","DatabaseImplementation.dispose","WasmDatabase.sqlite3_update_hook","WasmBindings.dart_sqlite3_updates","WasmBindings.dart_sqlite3_commits","WasmBindings.dart_sqlite3_rollbacks","DatabaseImplementation.execute","WasmDatabase.sqlite3_exec","DatabaseImplementation._prepareInternal","WasmStatementCompiler","WasmBindings.malloc","WasmDatabase.newCompiler","NativeByteBuffer.asInt32List","WasmStatementCompiler.endOffset","DatabaseImplementation.wrapStatement","StatementImplementation","DatabaseImplementation.prepare","DatabaseImplementation.prepare[function-entry$1]","DatabaseImplementation.createFunction.","DatabaseImplementation._prepareInternal.freeIntermediateResults","ValueList.length","ValueList.[]","ValueList.[]=","disposeFinalizer.","Sqlite3Implementation.open","Sqlite3Implementation.initialize","WasmSqliteBindings.sqlite3_open_v2","WasmBindings.sqlite3_open_v2","WrappedMemory.int32ValueOfPointer","WasmBindings.sqlite3_extended_result_codes","DatabaseImplementation","FinalizableDatabase","Sqlite3Implementation.wrapDatabase","Sqlite3Implementation.open[function-entry$1]","StatementImplementation._columnNames","WasmStatement.sqlite3_column_count","WasmBindings.sqlite3_column_count","WasmBindings.sqlite3_column_name","WasmStatement.sqlite3_column_name","StatementImplementation._tableNames","StatementImplementation._execute","StatementImplementation._step","WasmStatement.sqlite3_step","WasmBindings.sqlite3_step","StatementImplementation._selectResults","Cursor","StatementImplementation._readValue","WasmStatement.sqlite3_column_type","WasmBindings.sqlite3_column_type","WasmBindings.sqlite3_column_int64","JsBigInt|get#asDartBigInt","JsBigInt|jsToString","WasmBindings.sqlite3_column_double","WasmBindings.sqlite3_column_text","WasmBindings.sqlite3_column_bytes","WasmBindings.sqlite3_column_blob","StatementImplementation._bindIndexedParams","WasmBindings.sqlite3_bind_parameter_count","StatementImplementation._ensureMatchingParameters","StatementImplementation.parameterCount","WasmStatement.sqlite3_bind_parameter_count","StatementImplementation._bindParam","WasmBindings.sqlite3_bind_null","WasmStatement.sqlite3_bind_null","WasmBindings.sqlite3_bind_int","WasmStatement.sqlite3_bind_int64","WasmBindings.sqlite3_bind_int64","WasmStatement.sqlite3_bind_int64BigInt","WasmBindings.sqlite3_bind_double","WasmStatement.sqlite3_bind_double","WasmStatement.sqlite3_bind_text","WasmStatement.sqlite3_bind_blob64","StatementImplementation._bindCustomParam","StatementImplementation._bindParams","StatementImplementation.selectWith","InMemoryFileSystem.xAccess","InMemoryFileSystem.xDelete","InMemoryFileSystem.xFullPathName","InMemoryFileSystem.xOpen","InMemoryFileSystem.xSleep","_InMemoryFile.readInto","_InMemoryFile.xCheckReservedLock","_InMemoryFile.xClose","_InMemoryFile.xFileSize","_InMemoryFile.xLock","_InMemoryFile.xSync","_InMemoryFile.xTruncate","_InMemoryFile.xUnlock","_InMemoryFile.xWrite","Cursor._calculateIndexes","ResultSet.iterator","ResultSet.[]","ResultSet.[]=","ResultSet.length","Row.[]","Row.keys","Row.values","_ResultIterator.current","_ResultIterator.moveNext","OpenMode._enumToString","VfsException.toString","BaseVfsFile.xDeviceCharacteristics","BaseVfsFile.xRead","WasmStatementCompiler.close","WasmStatementCompiler.sqlite3_prepare","WasmStatement","WasmStatement.deallocateArguments","WasmValueList.[]","WasmValueList.[]=","AsyncJavaScriptIteratable.listen","AsyncJavaScriptIteratable.listen[function-entry$1$onDone$onError]","AsyncJavaScriptIteratable.listen.fetchNext","AsyncJavaScriptIteratable.listen.fetchNext.","_StreamController.isPaused","AsyncJavaScriptIteratable.listen.fetchNextIfNecessary","_CursorReader.cancel","_CursorReader.current","_CursorReader.moveNext","_CursorReader.moveNext.","CompleteOpenIdbRequest|completeOrBlocked.","WasmInstance|load.","WasmInstance|load..","WasmVfs._runInWorker","Atomics.wait","Atomics.load","WasmVfs.xAccess","WasmVfs.xDelete","WasmVfs.xFullPathName","isWithin","WasmVfs.xOpen","WasmVfs.xSleep","WasmVfs.close","WasmFile.xDeviceCharacteristics","WasmFile.readInto","NativeUint8List.set","WasmFile.xCheckReservedLock","WasmFile.xClose","WasmFile.xFileSize","WasmFile.xLock","WasmFile.xSync","WasmFile.xTruncate","WasmFile.xUnlock","WasmFile.xWrite","MessageSerializer.write","NativeByteData.setInt32","MessageSerializer._writeString","WorkerOperation._enumToString","VfsWorker._resolvePath","VfsWorker._resolvePath[function-entry$1]","VfsWorker._xAccess","FileSystemDirectoryHandleApi.openFile","VfsWorker._xDelete","VfsWorker._xOpen","VfsWorker._xRead","VfsWorker._xWrite","VfsWorker._xClose","VfsWorker._xFileSize","VfsWorker._xTruncate","VfsWorker._xSync","VfsWorker._xLock","VfsWorker._xUnlock","VfsWorker.start","VfsWorker._releaseImplicitLocks","Atomics.waitWithTimeout","SetBase.toList","VfsWorker._releaseImplicitLock","VfsWorker._openForSynchronousAccess","VfsWorker._closeSyncHandleNoThrow","VfsWorker._closeSyncHandle","_OpenedFileHandle.syncHandle","AsynchronousIndexedDbFileSystem._rangeOverFile","AsynchronousIndexedDbFileSystem._rangeOverFile[function-entry$1]","AsynchronousIndexedDbFileSystem._rangeOverFile[function-entry$1$startOffset]","AsynchronousIndexedDbFileSystem.open","AsynchronousIndexedDbFileSystem.close","AsynchronousIndexedDbFileSystem.listFiles","AsynchronousIndexedDbFileSystem.fileIdForPath","AsynchronousIndexedDbFileSystem.createFile","AsynchronousIndexedDbFileSystem._readFile","AsynchronousIndexedDbFileSystem.readFully","AsynchronousIndexedDbFileSystem._write","AsynchronousIndexedDbFileSystem.truncate","AsynchronousIndexedDbFileSystem.deleteFile","AsynchronousIndexedDbFileSystem.open.","AsynchronousIndexedDbFileSystem._readFile.","AsynchronousIndexedDbFileSystem.readFully.","AsynchronousIndexedDbFileSystem._write.writeBlock","AsynchronousIndexedDbFileSystem._write.","_FileWriteRequest._updateBlock","_FileWriteRequest.addWrite","_FileWriteRequest._updateBlock.","IndexedDbFileSystem._submitWork","IndexedDbFileSystem._checkClosed","IndexedDbFileSystem.isClosed","IndexedDbFileSystem._startWorkingIfNeeded","IndexedDbFileSystem.close","IndexedDbFileSystem._fileId","IndexedDbFileSystem._readFiles","TypedDataBuffer.setRange","IndexedDbFileSystem.xAccess","IndexedDbFileSystem.xDelete","IndexedDbFileSystem.xFullPathName","IndexedDbFileSystem.xOpen","IndexedDbFileSystem.xSleep","IndexedDbFileSystem._startWorkingIfNeeded.","_IndexedDbFile.xRead","_IndexedDbFile.xDeviceCharacteristics","_IndexedDbFile.xCheckReservedLock","_IndexedDbFile.xClose","_IndexedDbFile.xFileSize","_IndexedDbFile.xLock","_IndexedDbFile.xSync","_IndexedDbFile.xTruncate","IndexedDbFileSystem._submitWorkFunction","_IndexedDbFile.xUnlock","_IndexedDbFile.xWrite","_WriteFileWorkItem","_IndexedDbFile.xTruncate.","_IndexedDbWorkItem.insertInto","_FunctionWorkItem.run","_DeleteFileWorkItem.insertInto","_DeleteFileWorkItem.run","_CreateFileWorkItem.run","_WriteFileWorkItem.insertInto","_WriteFileWorkItem.run","_FileWriteRequest","FileType._enumToString","SimpleOpfsFileSystem._markExists","SimpleOpfsFileSystem.xAccess","SimpleOpfsFileSystem.xDelete","SimpleOpfsFileSystem.xFullPathName","SimpleOpfsFileSystem.xOpen","SimpleOpfsFileSystem.xSleep","SimpleOpfsFileSystem.close","SimpleOpfsFileSystem.inDirectory.open","_SimpleOpfsFile.readInto","_SimpleOpfsFile.xCheckReservedLock","_SimpleOpfsFile.xClose","_SimpleOpfsFile.xFileSize","_SimpleOpfsFile.xLock","_SimpleOpfsFile.xSync","_SimpleOpfsFile.xTruncate","_SimpleOpfsFile.xUnlock","_SimpleOpfsFile.xWrite","WasmBindings.allocateBytes","WrappedMemory.asBytes","WasmBindings.allocateBytes[function-entry$1]","WasmBindings.sqlite3_initialize",".callReturningInt0","_InjectedValues.","_InjectedValues..","WrappedMemory.setInt32Value","NativeDataView.setBigInt64","WrappedMemory.setInt64Value","WasmBindings.sqlite3_user_data","DartCallbacks.register","DartCallbacks.installedUpdateHook","DartCallbacks.installedCommitHook","DartCallbacks.installedRollbackHook","Chain.toTrace","JSArray.expand","Chain.toString","Chain.parse.","Chain.toTrace.","Chain.toString.","Chain.toString..","Frame.library","Frame.location","Frame.toString","Frame.parseVM.","Frame.parseV8.","Frame.parseV8..parseJsLocation","Frame._parseFirefoxEval.","Frame.parseFirefox.","Frame.parseFriendly.","fromUri","LazyTrace._trace","LazyTrace.frames","LazyTrace.toString","Trace.toString","Trace.from.","Trace._parseVM.","Trace.parseV8.","Trace.parseJSCore.","Trace.parseFirefox.","Trace.parseFriendly.","Trace.toString.","UnparsedFrame.toString","CloseGuaranteeChannel._subscription","_CloseGuaranteeStream.listen","_CloseGuaranteeStream.listen[function-entry$1$onDone$onError]","_CloseGuaranteeStream.listen[function-entry$1$onDone]","_CloseGuaranteeSink.close","GuaranteeChannel._onSinkDisconnected","GuaranteeChannel.","GuaranteeChannel..","_GuaranteeSink.add","_GuaranteeSink.addError","_GuaranteeSink._addError","_GuaranteeSink.close","_GuaranteeSink._onStreamDisconnected","TypedDataBuffer.length","TypedDataBuffer.[]","TypedDataBuffer.[]=","TypedDataBuffer._createBiggerBuffer","TypedDataBuffer.setRange[function-entry$3]","_EventStream.listen","_EventStream.listen[function-entry$1$onDone$onError]","_EventStreamSubscription.cancel","_EventStreamSubscription.onData","_EventStreamSubscription.onError","_EventStreamSubscription.pause","_EventStreamSubscription.resume","_EventStreamSubscription._tryResume","_EventStreamSubscription._unlisten","_EventStreamSubscription.","_EventStreamSubscription.onData.","_rootRun[function-entry$4]","_rootRunUnary[function-entry$5]","_rootRegisterCallback[function-entry$4]","_rootRegisterUnaryCallback[function-entry$4]","_rootRegisterBinaryCallback[function-entry$4]","max[function-entry$2]","DART_CLOSURE_PROPERTY_NAME","nullFuture","_safeToStringHooks","TypeErrorDecoder.noSuchMethodPattern","TypeErrorDecoder.notClosurePattern","TypeErrorDecoder.nullCallPattern","TypeErrorDecoder.nullLiteralCallPattern","TypeErrorDecoder.undefinedCallPattern","TypeErrorDecoder.undefinedLiteralCallPattern","TypeErrorDecoder.nullPropertyPattern","TypeErrorDecoder.nullLiteralPropertyPattern","TypeErrorDecoder.undefinedPropertyPattern","TypeErrorDecoder.undefinedLiteralPropertyPattern","_AsyncRun._scheduleImmediateClosure","Future._nullFuture","Future._falseFuture","_RootZone._rootMap","_Utf8Decoder._reusableBuffer","_Utf8Decoder._decoder","_Utf8Decoder._decoderNonfatal","_Base64Decoder._inverseAlphabet","_BigIntImpl.zero","_BigIntImpl.one","_BigIntImpl.two","_BigIntImpl._minusOne","_BigIntImpl._bigInt10000","_BigIntImpl._parseRE","_BigIntImpl._bitsForFromDouble","_FinalizationRegistryWrapper._finalizationRegistryConstructor","_Uri._needsNoEncoding","_hashSeed","Random._secureRandom","NativeByteData","_JSSecureRandom._buffer","WebStorageApi.byName","windows","url","context","createInternal","Style.posix","PosixStyle","Style.windows","WindowsStyle","Style.url","UrlStyle","Style.platform","bigIntMinValue64","bigIntMaxValue64","disposeFinalizer","Finalizer","BaseVirtualFileSystem._fallbackRandom","AsynchronousIndexedDbFileSystem._storesJs","FileType.byName","DartCallbacks.sqliteVfsPointer","Expando","_vmFrame","_v8JsFrame","_v8JsUrlLocation","_v8WasmFrame","_v8EvalLocation","_firefoxEvalLocation","_firefoxSafariJSFrame","_firefoxWasmFrame","_safariWasmFrame","_friendlyFrame","_asyncBody","_initialDot","Frame._uriRegExp","Frame._windowsRegExp","_v8Trace","_v8TraceLine","_firefoxEvalTrace","_firefoxSafariTrace","_friendlyTrace","vmChainGap","","AggregateContext","AllowedArgumentCount","ApplyInterceptor|interceptWith","ArgumentsForBatchedStatement","ArrayIterator","AsciiCodec","AsciiEncoder","AsyncError","AsyncJavaScriptIteratable_listen_fetchNext","AsyncJavaScriptIteratable_listen_fetchNextIfNecessary","AsyncJavaScriptIteratable_listen_fetchNext_closure","AsynchronousIndexedDbFileSystem","AsynchronousIndexedDbFileSystem__readFile_closure","AsynchronousIndexedDbFileSystem__write_closure","AsynchronousIndexedDbFileSystem__write_writeBlock","AsynchronousIndexedDbFileSystem_open_closure","AsynchronousIndexedDbFileSystem_readFully_closure","Base64Codec","Base64Encoder","BaseVfsFile","BaseVirtualFileSystem","BatchedStatements","BigInt","BigIntRangeCheck|get#checkRange","BoundClosure","ByteBuffer","ByteData","CancellationException","CancelledResponse","CastIterator","CastList","Chain","Chain_Chain$parse_closure","Chain_toString__closure","Chain_toString_closure","Chain_toTrace_closure","Closure","Closure0Args","Closure2Args","CodeUnits","Codec","CommonDatabase","CommonPreparedStatement","CommonSqlite3","Comparable","CompatibilityResult","CompleteIdbRequest_complete_closure","CompleteIdbRequest|complete","CompleteOpenIdbRequest_completeOrBlocked_closure","CompleteOpenIdbRequest|completeOrBlocked","ConnectionClosedException","ConstantMap","ConstantStringMap","Context_joinAll_closure","Context_split_closure","Converter","DatabaseDelegate","DatabaseImplementation__prepareInternal_freeIntermediateResults","DatabaseImplementation_createFunction_closure","DateTime","DbVersionDelegate","DedicatedDriftWorker__handleMessage_closure","DedicatedDriftWorker_start_closure","DedicatedWorkerCompatibilityResult","DefaultEquality","DelegatedDatabase","DelegatedDatabase_close_closure","DelegatedDatabase_ensureOpen_closure","DelegatingStreamSink","DeleteDatabase","DriftCommunication_closure","DriftProtocol","DriftProtocol_decodePayload_readInt","DriftProtocol_decodePayload_readNullableInt","DriftRemoteException","DriftServer","DriftServerController_serve___closure","DriftServerController_serve__closure","DriftServerController_serve_closure","DynamicVersionDelegate","EfficientLengthIndexedIterable","EfficientLengthIterable","EfficientLengthMappedIterable","EfficientLengthTakeIterable","EmptyIterable","EmptyIterator","EmptyMessage","EnableNativeFunctions_useNativeFunctions_closure","EnableNativeFunctions|useNativeFunctions","EncodeLocations|encodeToJs","EncodeLocations|readFromJs","Encoding","EnsureOpen","Enum","EnumByName|asNameMap","EnumByName|byName","Error","ErrorResponse","EventSink","EventStreamProvider","ExceptionAndStackTrace","ExecuteBatchedStatement","ExecuteQuery","ExpandIterable","FileSystemDirectoryHandleApi|remove","FileSystemSyncAccessHandleApi|readDart","FileSystemSyncAccessHandleApi|writeDart","FileType","FinalizablePart","FinalizableStatement","FixedLengthListMixin","Flags","Float32List","Float64List","Frame","Frame_Frame$_parseFirefoxEval_closure","Frame_Frame$parseFirefox_closure","Frame_Frame$parseFriendly_closure","Frame_Frame$parseV8_closure","Frame_Frame$parseV8_closure_parseJsLocation","Frame_Frame$parseVM_closure","Function","Future_Future$delayed_closure","Future_Future_closure","Future_wait_handleError","GenerateFilename|randomFileName","GuaranteeChannel__closure","GuaranteeChannel_closure","HashMap_HashMap$from_closure","IndexedDbFileSystem","IndexedDbFileSystem__startWorkingIfNeeded_closure","IndexedIterator","IndexedParameters","Instantiation","Instantiation1","Int16List","Int32List","Int8List","IntegerDivisionByZeroException","Interceptor","InternalStyle","Iterable","Iterator","JSAnyUtilityExtension|instanceOfString","JSArray","JSArraySafeToStringHook","JSBool","JSIndexable","JSInt","JSNull","JSNumNotInt","JSNumber","JSObject","JSObjectUnsafeUtilExtension|_callMethod","JSString","JSSyntaxRegExp","JSUnmodifiableArray","JS_CONST","JavaScriptBigInt","JavaScriptFunction","JavaScriptIndexingBehavior","JavaScriptObject","JavaScriptSymbol","JsLinkedHashMap","LateError","LazyDatabase","LazyDatabase__awaitOpened_closure","LazyDatabase_ensureOpen_closure","LazyTrace","LegacyJavaScriptObject","LinkedHashMapCell","LinkedHashMapEntriesIterable","LinkedHashMapEntryIterator","LinkedHashMapKeyIterator","LinkedHashMapKeysIterable","LinkedHashMapValueIterator","LinkedHashMapValuesIterable","LinkedList","LinkedListEntry","List","ListBase","ListEquality","ListIterable","ListIterator","ListToJSArray|get#toJS","Lock","Lock_synchronized_callBlockAndComplete_closure","Map","MapBase","MapBase_mapToString_closure","MapEntry","MappedIterator","MappedListIterable","Match","Message","MessageSerializer","NameAndInt32Flags","NativeArrayBuffer","NativeByteBuffer","NativeFloat32List","NativeFloat64List","NativeInt16List","NativeInt32List","NativeInt8List","NativeSharedArrayBuffer","NativeTypedArray","NativeTypedArrayOfDouble","NativeTypedArrayOfInt","NativeTypedData","NativeUint32List","NativeUint8ClampedList","NestedExecutorControl","NoArgsRequest","NoTransactionDelegate","NoVersionDelegate","NonGrowableListMixin","NotifyTablesUpdated","Null","NullError","NullRejectionException","NullThrownFromJavaScriptException","Object","OpenMode","OpeningDetails","OutOfMemoryError","ParsedPath","Pattern","PlainJavaScriptObject","PrimitiveResponsePayload","ProtocolVersion","QueryDelegate","QueryExecutor","QueryExecutorUser","QueryInterceptor","QueryResult_asMap_closure","Random","RangeError","RawSqliteBindings","RawSqliteContext","RawSqliteDatabase","RawSqliteStatement","RawSqliteValue","RawStatementCompiler","ReadBlob|byteBuffer","ReadDartValue|read","Record","RegExpMatch","RegisteredFunctionSet","Request","RequestCancellation","RequestCompatibilityCheck","RequestPayload","ResponsePayload","ResultSet","ReversedListIterable","Row","Rti","RunBeforeOpen","RunNestedExecutorControl","RunningWasmServer","RunningWasmServer_serve_closure","RuntimeError","SafeToStringHook","SelectResult","SentinelValue","ServeDriftDatabase","ServerImplementation__handleRequest_closure","ServerImplementation__waitForTurn_closure","ServerImplementation__waitForTurn_idIsActive","ServerImplementation_closure","ServerImplementation_serve_closure","ServerInfo","SessionApplyCallbacks","Set","SetBase","SharedDriftWorker__newConnection_closure","SharedDriftWorker__startFeatureDetection_closure","SharedDriftWorker__startFeatureDetection_result","SharedDriftWorker_start_closure","SharedWorkerCompatibilityResult","SharedWorkerCompatibilityResult_SharedWorkerCompatibilityResult$fromJsPayload_asBoolean","SimpleOpfsFileSystem","SimpleOpfsFileSystem_inDirectory_open","SkipIterator","SkipWhileIterable","SkipWhileIterator","SqlDialect","Sqlite3Delegate","Sqlite3Filename","Sqlite3Implementation","SqliteArguments","SqliteException_toString_closure","SqliteResult","StackOverflowError","StackTrace","StartFileSystemServer","StatementMethod","StatementParameters","StaticClosure","Stream","StreamChannel","StreamChannelMixin","StreamSink","StreamSubscription","StreamTransformer","StreamTransformerBase","Stream_firstWhere__closure","String","StringBuffer","StringMatch","StringSink","Style","SuccessResponse","Symbol","TableUpdate","TakeIterator","TearOffClosure","Trace$parseFirefox_closure","Trace$parseFriendly_closure","Trace$parseJSCore_closure","Trace$parseV8_closure","Trace_Trace$from_closure","Trace__parseVM_closure","Trace_toString_closure","TransactionDelegate","TransactionExecutor","TrustedGetRuntimeType","TypeError","TypeErrorDecoder","TypedDataBuffer","TypedDataList","Uint16List","Uint32List","Uint8Buffer","Uint8ClampedList","Uint8List","UnknownJavaScriptObject","UnknownJsTypeError","UnmodifiableListBase","UnmodifiableListMixin","UnmodifiableMapMixin","UpdateKind","Uri","UriData","Uri_parseIPv6Address_error","Utf8Codec","Utf8Encoder","ValueList","VfsWorker","VirtualFileSystem","VirtualFileSystemFile","WasmBindings","WasmCompatibility","WasmContext","WasmDatabase","WasmFile","WasmInitializationMessage","WasmInitializationMessage_sendToClient_closure","WasmInitializationMessage_sendToPort_closure","WasmInitializationMessage_sendToWorker_closure","WasmInstance_load__closure","WasmInstance_load_closure","WasmSqlite3","WasmSqliteBindings","WasmStorageImplementation","WasmValue","WasmValueList","WebPortToChannel_channel_closure","WebPortToChannel|channel","WebProtocol","WebProtocol__deserializeRequest_closure","WebProtocol__deserializeRequest_readBatched","WebProtocol__deserializeRequest_readBatched_closure","WebProtocol__deserializeResponse_closure","WebProtocol__serializeRequest_closure","WebProtocol__serializeSelectResult_closure","WebProtocol_deserialize_decodeRequest","WebProtocol_deserialize_decodeSuccess","WebStorageApi","WhereIterable","WhereIterator","WhereTypeIterable","WhereTypeIterator","WindowsStyle_absolutePathToUri_closure","WorkerError","WorkerOperation","WrappedMemory|copyRange","WrappedMemory|readNullableString","WrappedMemory|readString","WrappedMemory|strlen","Zone","ZoneDelegate","ZoneSpecification","_#_lastQuoRemDigits","_#_lastQuoRemUsed","_#_lastRemUsed","_#_lastRem_nsh","_#parseFirefox#tearOff","_#parseFriendly#tearOff","_#parseV8#tearOff","_#parseVM#tearOff","_AddStreamState","_AllMatchesIterable","_AllMatchesIterator","_AsyncAwaitCompleter","_AsyncCallbackEntry","_AsyncCompleter","_AsyncRun__initializeScheduleImmediate_closure","_AsyncRun__initializeScheduleImmediate_internalCallback","_AsyncRun__scheduleImmediateJsOverride_internalCallback","_AsyncRun__scheduleImmediateWithSetImmediate_internalCallback","_AsyncStreamController","_AsyncStreamControllerDispatch","_BaseExecutor","_BaseExecutor_runBatched_closure","_BaseExecutor_runCustom_closure","_BaseExecutor_runDelete_closure","_BaseExecutor_runInsert_closure","_BaseExecutor_runSelect_closure","_BeforeOpeningExecutor","_BigIntImpl","_BigIntImpl_hashCode_combine","_BigIntImpl_hashCode_finish","_BoundSinkStream","_BroadcastStream","_BroadcastStreamController","_BufferingStreamSubscription__sendDone_sendDone","_BufferingStreamSubscription__sendError_sendError","_CastIterableBase","_CastListBase","_Cell","_CloseGuaranteeSink","_CloseGuaranteeStream","_CloseVfsOnClose","_Completer","_ControllerStream","_CreateFileWorkItem","_CursorReader","_CursorReader_moveNext_closure","_CustomZone_bindCallbackGuarded_closure","_DataUri","_DelayedData","_DelayedDone","_DelayedError","_DelayedEvent","_DeleteFileWorkItem","_EfficientLengthCastIterable","_Enum","_Error","_EventDispatch","_EventSink","_EventSinkWrapper","_EventStream","_EventStreamSubscription_closure","_EventStreamSubscription_onData_closure","_Exception","_ExclusiveExecutor","_ExclusiveExecutor_ensureOpen_closure","_FileWriteRequest__updateBlock_closure","_FinalizationRegistryWrapper","_ForwardingStream","_FunctionParameters","_FunctionWorkItem","_FusedCodec","_Future","_FutureListener","_Future__addListener_closure","_Future__asyncCompleteErrorObject_closure","_Future__asyncCompleteWithValue_closure","_Future__chainCoreFuture_closure","_Future__prependListeners_closure","_Future__propagateToListeners_handleError","_Future__propagateToListeners_handleValueCallback","_Future__propagateToListeners_handleWhenCompleteCallback","_Future__propagateToListeners_handleWhenCompleteCallback_closure","_GuaranteeSink","_HandlerEventSink","_HashMap","_HashMapKeyIterable","_HashMapKeyIterator","_IdentityHashMap","_InMemoryFile","_IndexedDbFile","_IndexedDbFile_xTruncate_closure","_IndexedDbWorkItem","_InjectedValues__closure","_InjectedValues_closure","_IntBuffer","_InterceptedExecutor","_InterceptedTransactionExecutor","_JS_INTEROP_INTERCEPTOR_TAG","_KeysOrValues","_KeysOrValuesOrElementsIterator","_LinkedHashSet","_LinkedHashSetCell","_LinkedListIterator","_MapBaseValueIterable","_MapBaseValueIterator","_MapStream","_MatchImplementation","_NativeTypedArrayOfDouble&NativeTypedArray&ListMixin","_NativeTypedArrayOfDouble&NativeTypedArray&ListMixin&FixedLengthListMixin","_NativeTypedArrayOfInt&NativeTypedArray&ListMixin","_NativeTypedArrayOfInt&NativeTypedArray&ListMixin&FixedLengthListMixin","_OffsetAndBuffer","_OpenedFileHandle","_PathDirection","_PathRelation","_PendingEvents","_PendingEvents_schedule_closure","_PendingRequest","_Record","_Record2","_Record_2","_Record_2_file_outFlags","_ResolvedPath","_ResultIterator","_ResultSet&Cursor&ListMixin","_ResultSet&Cursor&ListMixin&NonGrowableListMixin","_RootZone","_RootZone_bindCallbackGuarded_closure","_Row&Object&UnmodifiableMapMixin","_Row&Object&UnmodifiableMapMixin&MapMixin","_ServerDbUser","_SetBase","_SimpleOpfsFile","_SimpleUri","_SqliteVersionDelegate","_StackTrace","_StatementBasedTransactionExecutor","_StatementBasedTransactionExecutor_ensureOpen_closure","_StreamController","_StreamControllerAddStreamState","_StreamControllerLifecycle","_StreamController__recordCancel_complete","_StreamController__subscribe_closure","_StreamImpl","_StreamIterator","_StreamSinkTransformer","_StreamSinkWrapper","_StringAllMatchesIterable","_StringAllMatchesIterator","_StringStackTrace","_SyncBroadcastStreamController","_SyncCompleter","_SyncStarIterable","_SyncStarIterator","_SyncStreamController","_SyncStreamControllerDispatch","_TimerImpl$periodic_closure","_TimerImpl_internalCallback","_TransactionExecutor","_TypeError","_UnicodeSubsetEncoder","_UnmodifiableNativeByteBufferView","_Uri__makePath_closure","_Utf8Decoder","_Utf8Decoder__decoderNonfatal_closure","_Utf8Decoder__decoder_closure","_Utf8Encoder","_WasmDelegate","_Zone","_ZoneDelegate","_ZoneFunction","_ZoneSpecification","__CastListBase&_CastIterableBase&ListMixin","_absAdd","_absSub","_awaitOnObject_closure","_badExpandoKey","_bigInt10000","_bitsForFromDouble","_cachedBaseString","_cachedBaseUri","_cancelAndErrorClosure_closure","_cancelAndError_closure","_cancelAndValue_closure","_canonicalRecipeJoin","_canonicalRecipeJoinNamed","_canonicalizeScheme","_catchFormatException","_chainCoreFuture","_checkNonWindowsPathReservedCharacters","_checkPadding","_checkWindowsDriveLetter","_checkWindowsPathReservedCharacters","_checkZoneID","_cloneDigits","_codeUnitToRadixValue","_compareAny","_compareDigits","_computeFieldNamed","_computeSignatureFunction","_computedFieldKeys","_convertInterceptedUint8List","_create1","_createFutureOrRti","_createGenericFunctionRti","_createQuestionRti","_createTimer","_current","_currentUriBase","_decoder","_decoderNonfatal","_defaultPort","_dlShiftDigits","_empty","_escapeChar","_escapeScheme","_estimateQuotientDigit","_extension#0|runWithArgsAndSetResult","_extension#0|setResult","_extension#1|sendTyped","_fail","_fallbackRandom","_falseFuture","_finalizationRegistryConstructor","_fourDigits","_fromCharCodeApply","_fromDouble","_fromInt","_getCanonicalRecipe","_getFutureFromFutureOr","_getPlatformStyle","_getTableEntry","_hexCharPairToByte","_identityHashCodeProperty","_initializeScheduleImmediate","_installTypeTests","_interceptorFieldNameCache","_interceptors_JSArray__compareAny$closure","_internal","_inverseAlphabet","_ipv4FormatError","_isAlphabeticCharacter","_isInCallbackLoop","_isUnionOfFunctionType","_isWhitespace","_lShiftDigits","_lastCallback","_lastDividendDigits","_lastDividendUsed","_lastDivisorDigits","_lastDivisorUsed","_lastPriorityCallback","_literal","_load","_lookupBindingRti","_lookupFunctionRti","_lookupFutureOrRti","_lookupGenericFunctionParameterRti","_lookupGenericFunctionRti","_lookupInterfaceRti","_lookupQuestionRti","_lookupRecordRti","_lookupTerminalRti","_lsh","_makeFileUri","_makeFragment","_makeHost","_makeNativeUint8List","_makePath","_makePort","_makeQuery","_makeScheme","_makeUserInfo","_makeWindowsFileUrl","_mayContainDotSegments","_minusOne","_mulAdd","_needsNoEncoding","_newHashTable","_nextCallback","_normalize","_normalizeEscape","_normalizeOrSubstring","_normalizePath","_normalizeRegName","_normalizeRelativePath","_normalizeZoneID","_nullFuture","_of","_packageNameEnd","_parse","_parseDecimal","_parseFirefoxEval","_parseHex","_parseIPv4Address","_parseRE","_parseVM","_propagateToListeners","_receiverFieldNameCache","_registerDataHandler","_removeDotSegments","_resolveDir","_reusableBuffer","_rootDelegate","_rootHandleError_closure","_rootMap","_rsh","_scheduleImmediateClosure","_scheduleImmediateJsOverride","_scheduleImmediateWithSetImmediate","_scheduleImmediateWithTimer","_secureRandom","_setTableEntry","_skipLeadingWhitespace","_skipTrailingWhitespace","_storesJs","_stringFromUint8List","_terminatedBody","_threeDigits","_throw","_tryParse","_twoDigits","_unaryNumFunction_closure","_uriDecode","_uriEncode","_uriEncodeBytes","_uriOrPathToUri","_uriRegExp","_useTextDecoder","_validate","_validateArgList_closure","_validateIPvAddress","_validateIPvFutureAddress","_windowsRegExp","_wrapJsFunctionForAsync_closure","_writeAll","_writeUri","addErasedTypes","addRules","alternateTagFunction","async__AsyncRun__scheduleImmediateJsOverride$closure","async__AsyncRun__scheduleImmediateWithSetImmediate$closure","async__AsyncRun__scheduleImmediateWithTimer$closure","async___nullDataHandler$closure","async___nullDoneHandler$closure","async___nullErrorHandler$closure","async___printToZone$closure","async___rootCreatePeriodicTimer$closure","async___rootCreateTimer$closure","async___rootErrorCallback$closure","async___rootFork$closure","async___rootHandleUncaughtError$closure","async___rootPrint$closure","async___rootRegisterBinaryCallback$closure","async___rootRegisterCallback$closure","async___rootRegisterUnaryCallback$closure","async___rootRun$closure","async___rootRunBinary$closure","async___rootRunUnary$closure","async___rootScheduleMicrotask$closure","async___startMicrotaskLoop$closure","base","bind","bool","byName","checkIndexedDbExists_closure","checkNotNegative","checkNotNull","checkValidIndex","checkValidRange","checkValueInInterval","collectArray","combine","compose","core_Uri_decodeComponent$closure","create","cspForwardCall","cspForwardInterceptedCall","currentUri","dartify_convert","dataFromString","decodeComponent","defaultStackTrace","delayed","delegates___defaultRelease$closure","delegates___defaultRollbackToSavepoint$closure","delegates___defaultSavepoint$closure","dispatchRecordsForInstanceTags","disposeFinalizer_closure","double","errorDescription","eval","evalInEnvironment","evalRecipe","extractPattern","extractStackTrace","fieldADI","fieldAI","fieldNI","file","filled","findErasedType","findRule","finish","fixed","forType","forwardCallTo","forwardInterceptedCallTo","frame_Frame___parseFirefox_tearOff$closure","frame_Frame___parseFriendly_tearOff$closure","frame_Frame___parseV8_tearOff$closure","frame_Frame___parseVM_tearOff$closure","from","fromCharCode","fromCharCodes","fromJs","fromJsObject","fromJsPayload","fromMessage","fromRows","fromTearOff","generateRandomness","getDay","getHours","getInterceptor$","getInterceptor$asx","getInterceptor$ax","getInterceptor$ns","getInterceptor$s","getInterceptor$x","getMilliseconds","getMinutes","getMonth","getSeconds","getTagFunction","getWeekday","getYear","growable","handleArguments","handleDigit","handleExtendedOperations","handleIdentifier","handleTypeArguments","hash","inDirectory","indexToType","initHooks_closure","initNativeDispatchFlag","instantiateAsync","int","interceptorOf","interceptorsForUncacheableTags","iterableToFullString","iterableToShortString","jsify__convert","lazyAsJsDate","loadFromStorage","loadFromUrl","makeNative","mapToString","markFixed","math__acos$closure","math__asin$closure","math__atan$closure","math__cos$closure","math__max$closure","math__sin$closure","math__sqrt$closure","math__tan$closure","named","native_functions___containsImpl$closure","native_functions___pow$closure","native_functions___regexpImpl$closure","negotiate","newArrayOrEmpty","noElement","noSuchMethodPattern","notClosurePattern","notify","nullCallPattern","nullFuture_closure","nullLiteralCallPattern","nullLiteralPropertyPattern","nullPropertyPattern","num","objectAssign","objectTypeName","one","open","opfsDatabases_closure","parse","parseFirefox","parseFriendly","parseIPv6Address","parseInt","parseJSCore","parseV8","parseVM","periodic","platform","posix","printToZone","promiseToFuture_closure","prototypeForTagFunction","provokeCallErrorOn","provokePropertyErrorOn","range","readEmpty","readFlags","readNameAndFlags","receiverOf","runCancellable_closure","safeToString","sqliteVfsPointer","stringFromCharCode","stringFromCharCodes","stringFromCodePoints","stringFromNativeUint8List","sync","sync_channel_MessageSerializer_readEmpty$closure","sync_channel_MessageSerializer_readFlags$closure","sync_channel_MessageSerializer_readNameAndFlags$closure","throwWithStackTrace","toStringVisiting","toType","toTypes","toTypesNamed","tooFew","trace_Trace___parseFriendly_tearOff$closure","trace_Trace___parseVM_tearOff$closure","trySetStackTrace","two","undefinedCallPattern","undefinedLiteralCallPattern","undefinedLiteralPropertyPattern","undefinedPropertyPattern","unmodifiable","value","view","wait","withLength","zero","zoneValue","$1","$2","$add","$and","$div","$eq","$ge","$gt","$index","$indexSet","$le","$lt","$mod","$mul","$negate","$not","$or","$shl","$shr","$sub","$tdiv","$xor","%","*","+","-","<<","==",">>","[]","[]=","_add","_addError","_addEventError","_captured_#this_1","_captured_K_1","_captured_R_3","_captured_S_4","_captured_T_2","_captured_V_2","_captured__convertedObjects_0","_captured_abortIfCancelled_0","_captured_action_1","_captured_amount_3","_captured_asList_0","_captured_blockCompleted_1","_captured_blockOffset_1","_captured_blockReleasedLock_2","_captured_block_1","_captured_blocks_0","_captured_bodyFunction_0","_captured_calculation_0","_captured_callBlockAndComplete_0","_captured_cleanUp_4","_captured_clientPort_1","_captured_comm_1","_captured_compiler_0","_captured_computation_0","_captured_controller_2","_captured_createdStatements_1","_captured_dartFdPtr_5","_captured_dartList_1","_captured_data_1","_captured_dispatch_1","_captured_div_1","_captured_eagerError_2","_captured_explicitClose_0","_captured_f_1","_captured_fetchNext_3","_captured_fileId_0","_captured_flags_3","_captured_frame_0","_captured_getTag_0","_captured_getUnknownTag_0","_captured_handleData_0","_captured_handleDone_2","_captured_handler_1","_captured_hasError_2","_captured_idIsActive_0","_captured_importsJs_0","_captured_initPort_0","_captured_initializer_2","_captured_joinedResult_0","_captured_longest_0","_captured_micros_1","_captured_milliseconds_1","_captured_moduleJs_0","_captured_nByte_2","_captured_nOut_2","_captured_openRequest_1","_captured_opened_1","_captured_orElse_1","_captured_originalSource_1","_captured_pOutFlags_6","_captured_pResOut_4","_captured_pos_1","_captured_protected_0","_captured_protocol_3","_captured_prototypeForTag_0","_captured_readWriteUnsafe_1","_captured_registered_1","_captured_request_1","_captured_rowOffset_2","_captured_row_0","_captured_sizePtr_2","_captured_size_1","_captured_sourceResult_1","_captured_span_2","_captured_subscription_1","_captured_syncDir_2","_captured_target_2","_captured_test_0","_captured_this_0","_captured_trace_0","_captured_transactionId_1","_captured_user_1","_captured_wasmServer_2","_captured_webNativeSerialization_2","_captured_worker_0","_captured_writeBlock_0","_captured_zOut_4","_close","_handleMessage","_messageFromClient","_openForSynchronousAccess","_transactionControl","_xAccess","_xOpen","_xTruncate","abs","absolute","absolutePathToUri","add","addAll","addError","addNew","addWrite","aggregateContextId","aggregateContexts","allMatches","allocateBytes","allocateZeroTerminated","allowMalformed","allowRemoteShutdown","allowedArgs","args","arguments","asByteData","asInt32List","asMap","asUint32List","asUint8List","attach","beforeOpen","beginExclusive","beginTransaction","beginTransactionInContext","bindCallback","bindCallbackGuarded","bindUnaryCallback","bindUnaryCallbackGuarded","bindings","bitLength","blobType","booleanType","buffer","byteView","cachePreparedStatements","call","callback","callbacks","canAccessOpfs","canSerializeSqliteExceptions","canSpawnDedicatedWorkers","canUseIndexedDb","cancel","cancelSchedule","canonicalizePart","cast","catchError","causingStatement","ceil","ceilToDouble","changeStream","checkGrowable","checkMayWrite","checkMutable","chroot","clear","close","closeExecutorWhenShutdown","closeUnderlyingWhenClosed","closed","code","codeUnitAt","codeUnits","codeUnitsEqual","collation","column","columnAt","columnNames","commit","commitTransaction","compareTo","complete","completeError","completeWithError","completer","conflict","connection","contains","containsKey","containsSeparator","control","convert","convertChunked","convertSingle","count","createFile","createFunction","createPeriodicTimer","createTimer","create_aggregate_function","create_scalar_function","createdExecutor","currentlyPendingPromise","dart:_interceptors#_addAllFromArray","dart:_interceptors#_clear","dart:_interceptors#_codeUnitAt","dart:_interceptors#_current","dart:_interceptors#_defaultSplit","dart:_interceptors#_index","dart:_interceptors#_isInt32","dart:_interceptors#_iterable","dart:_interceptors#_length","dart:_interceptors#_replaceSomeNullsWithUndefined","dart:_interceptors#_setLengthUnsafe","dart:_interceptors#_shlPositive","dart:_interceptors#_shrBothPositive","dart:_interceptors#_shrOtherPositive","dart:_interceptors#_shrReceiverPositive","dart:_interceptors#_tdivFast","dart:_interceptors#_tdivSlow","dart:_interceptors#_toListFixed","dart:_interceptors#_toListGrowable","dart:_internal#_current","dart:_internal#_currentExpansion","dart:_internal#_endIndex","dart:_internal#_endOrLength","dart:_internal#_f","dart:_internal#_hasSkipped","dart:_internal#_index","dart:_internal#_iterable","dart:_internal#_iterator","dart:_internal#_length","dart:_internal#_message","dart:_internal#_name","dart:_internal#_remaining","dart:_internal#_skipCount","dart:_internal#_source","dart:_internal#_start","dart:_internal#_startIndex","dart:_internal#_string","dart:_internal#_takeCount","dart:_js_helper#_0","dart:_js_helper#_1","dart:_js_helper#_addHashTableEntry","dart:_js_helper#_arguments","dart:_js_helper#_argumentsExpr","dart:_js_helper#_captured_getTag_0","dart:_js_helper#_captured_getUnknownTag_0","dart:_js_helper#_captured_prototypeForTag_0","dart:_js_helper#_captured_this_0","dart:_js_helper#_cell","dart:_js_helper#_computeFieldKeys","dart:_js_helper#_computeHasCaptures","dart:_js_helper#_containsTableEntry","dart:_js_helper#_current","dart:_js_helper#_deleteTableEntry","dart:_js_helper#_elements","dart:_js_helper#_equalFields","dart:_js_helper#_exception","dart:_js_helper#_execAnchored","dart:_js_helper#_execGlobal","dart:_js_helper#_expr","dart:_js_helper#_fieldKeys","dart:_js_helper#_first","dart:_js_helper#_genericClosure","dart:_js_helper#_getBucket","dart:_js_helper#_getFieldValues","dart:_js_helper#_getRti","dart:_js_helper#_getTableBucket","dart:_js_helper#_getTableCell","dart:_js_helper#_hasCaptures","dart:_js_helper#_hasCapturesCache","dart:_js_helper#_index","dart:_js_helper#_input","dart:_js_helper#_interceptor","dart:_js_helper#_irritant","dart:_js_helper#_isCaseSensitive","dart:_js_helper#_isDotAll","dart:_js_helper#_isMultiLine","dart:_js_helper#_isUnicode","dart:_js_helper#_jsIndex","dart:_js_helper#_keys","dart:_js_helper#_last","dart:_js_helper#_length","dart:_js_helper#_map","dart:_js_helper#_match","dart:_js_helper#_message","dart:_js_helper#_method","dart:_js_helper#_modifications","dart:_js_helper#_modified","dart:_js_helper#_name","dart:_js_helper#_nativeAnchoredRegExp","dart:_js_helper#_nativeAnchoredVersion","dart:_js_helper#_nativeGlobalRegExp","dart:_js_helper#_nativeGlobalVersion","dart:_js_helper#_nativeRegExp","dart:_js_helper#_newHashTable","dart:_js_helper#_newLinkedCell","dart:_js_helper#_next","dart:_js_helper#_nextIndex","dart:_js_helper#_nums","dart:_js_helper#_pattern","dart:_js_helper#_previous","dart:_js_helper#_re","dart:_js_helper#_receiver","dart:_js_helper#_regExp","dart:_js_helper#_removeHashTableEntry","dart:_js_helper#_rest","dart:_js_helper#_sameShape","dart:_js_helper#_setKeys","dart:_js_helper#_setTableEntry","dart:_js_helper#_shapeTag","dart:_js_helper#_start","dart:_js_helper#_string","dart:_js_helper#_strings","dart:_js_helper#_target","dart:_js_helper#_toString","dart:_js_helper#_trace","dart:_js_helper#_types","dart:_js_helper#_unlinkCell","dart:_js_helper#_values","dart:_late_helper#_name","dart:_late_helper#_readField","dart:_late_helper#_readLocal","dart:_late_helper#_value","dart:_native_typed_data#_checkMutable","dart:_native_typed_data#_checkPosition","dart:_native_typed_data#_data","dart:_native_typed_data#_getInt32","dart:_native_typed_data#_getUint32","dart:_native_typed_data#_invalidPosition","dart:_native_typed_data#_isUnmodifiable","dart:_native_typed_data#_nativeBuffer","dart:_native_typed_data#_setFloat64","dart:_native_typed_data#_setInt32","dart:_native_typed_data#_setRangeFast","dart:_native_typed_data#_setUint32","dart:_rti#_as","dart:_rti#_bind","dart:_rti#_bindCache","dart:_rti#_cachedRuntimeType","dart:_rti#_canonicalRecipe","dart:_rti#_dynamicCheckData","dart:_rti#_eval","dart:_rti#_evalCache","dart:_rti#_is","dart:_rti#_isSubtypeCache","dart:_rti#_kind","dart:_rti#_message","dart:_rti#_named","dart:_rti#_optionalPositional","dart:_rti#_precomputed1","dart:_rti#_primary","dart:_rti#_requiredPositional","dart:_rti#_rest","dart:_rti#_rti","dart:_rti#_specializedTestResource","dart:async#_#_SinkTransformerStreamSubscription#_transformerSink#A","dart:async#_add","dart:async#_addError","dart:async#_addEventError","dart:async#_addListener","dart:async#_addPending","dart:async#_addStreamState","dart:async#_asyncComplete","dart:async#_asyncCompleteError","dart:async#_asyncCompleteErrorObject","dart:async#_asyncCompleteWithValue","dart:async#_badEventState","dart:async#_body","dart:async#_box_0","dart:async#_box_1","dart:async#_callOnCancel","dart:async#_canFire","dart:async#_cancel","dart:async#_cancelFuture","dart:async#_cancelOnError","dart:async#_captured_R_2","dart:async#_captured_R_3","dart:async#_captured_S_4","dart:async#_captured_T_2","dart:async#_captured_T_3","dart:async#_captured__future_2","dart:async#_captured__future_3","dart:async#_captured_bodyFunction_0","dart:async#_captured_callback_0","dart:async#_captured_callback_1","dart:async#_captured_callback_3","dart:async#_captured_cleanUp_1","dart:async#_captured_cleanUp_4","dart:async#_captured_computation_0","dart:async#_captured_data_1","dart:async#_captured_dispatch_1","dart:async#_captured_div_1","dart:async#_captured_eagerError_2","dart:async#_captured_eagerError_5","dart:async#_captured_error_0","dart:async#_captured_error_1","dart:async#_captured_f_1","dart:async#_captured_future_0","dart:async#_captured_future_1","dart:async#_captured_future_2","dart:async#_captured_future_3","dart:async#_captured_handleData_0","dart:async#_captured_handleDone_2","dart:async#_captured_handleError_1","dart:async#_captured_hasError_2","dart:async#_captured_joinedResult_0","dart:async#_captured_listener_1","dart:async#_captured_milliseconds_1","dart:async#_captured_orElse_1","dart:async#_captured_originalSource_1","dart:async#_captured_pos_1","dart:async#_captured_protected_0","dart:async#_captured_registered_1","dart:async#_captured_result_1","dart:async#_captured_sourceResult_1","dart:async#_captured_span_2","dart:async#_captured_stackTrace_1","dart:async#_captured_stackTrace_2","dart:async#_captured_start_2","dart:async#_captured_subscription_0","dart:async#_captured_subscription_1","dart:async#_captured_subscription_2","dart:async#_captured_target_1","dart:async#_captured_test_0","dart:async#_captured_test_1","dart:async#_captured_this_0","dart:async#_captured_this_1","dart:async#_captured_value_1","dart:async#_captured_value_2","dart:async#_chainForeignFuture","dart:async#_chainFuture","dart:async#_chainSource","dart:async#_checkState","dart:async#_clearPendingComplete","dart:async#_cloneResult","dart:async#_close","dart:async#_closeUnchecked","dart:async#_complete","dart:async#_completeError","dart:async#_completeErrorObject","dart:async#_completeWithResultOf","dart:async#_completeWithValue","dart:async#_controller","dart:async#_createPeriodicTimer","dart:async#_createSubscription","dart:async#_createTimer","dart:async#_current","dart:async#_datum","dart:async#_decrementPauseCount","dart:async#_delegate","dart:async#_delegateCache","dart:async#_delegationTarget","dart:async#_doneFuture","dart:async#_ensureDoneFuture","dart:async#_ensurePendingEvents","dart:async#_error","dart:async#_errorCallback","dart:async#_errorTest","dart:async#_eventScheduled","dart:async#_eventState","dart:async#_expectsEvent","dart:async#_firstSubscription","dart:async#_forEachListener","dart:async#_fork","dart:async#_future","dart:async#_guardCallback","dart:async#_handle","dart:async#_handleData","dart:async#_handleDone","dart:async#_handleError","dart:async#_handleUncaughtError","dart:async#_hasError","dart:async#_hasOneListener","dart:async#_hasPending","dart:async#_hasValue","dart:async#_ignoreError","dart:async#_inCallback","dart:async#_initializeOrDone","dart:async#_isAddingStream","dart:async#_isCanceled","dart:async#_isChained","dart:async#_isClosed","dart:async#_isComplete","dart:async#_isEmpty","dart:async#_isFiring","dart:async#_isInitialState","dart:async#_isInputPaused","dart:async#_isPaused","dart:async#_lastSubscription","dart:async#_map","dart:async#_mayAddEvent","dart:async#_mayAddListener","dart:async#_mayComplete","dart:async#_mayResumeInput","dart:async#_modelGeneratedCode","dart:async#_nestedIterator","dart:async#_newFutureWithSameType","dart:async#_next","dart:async#_nextListener","dart:async#_onCancel","dart:async#_onData","dart:async#_onDone","dart:async#_onError","dart:async#_onListen","dart:async#_onMicrotask","dart:async#_onPause","dart:async#_onResume","dart:async#_onValue","dart:async#_once","dart:async#_outerHelper","dart:async#_parentDelegate","dart:async#_pending","dart:async#_pendingEvents","dart:async#_prependListeners","dart:async#_previous","dart:async#_print","dart:async#_processUncaughtError","dart:async#_recordCancel","dart:async#_recordPause","dart:async#_recordResume","dart:async#_registerBinaryCallback","dart:async#_registerCallback","dart:async#_registerUnaryCallback","dart:async#_removeAfterFiring","dart:async#_removeListener","dart:async#_removeListeners","dart:async#_resultOrListeners","dart:async#_resumeBody","dart:async#_reverseListeners","dart:async#_rootRegisterBinaryCallback","dart:async#_rootRegisterCallback","dart:async#_rootRegisterUnaryCallback","dart:async#_rootRun","dart:async#_rootRunUnary","dart:async#_run","dart:async#_runBinary","dart:async#_runUnary","dart:async#_safeOnError","dart:async#_scheduleMicrotask","dart:async#_sendData","dart:async#_sendDone","dart:async#_sendError","dart:async#_setChained","dart:async#_setErrorObject","dart:async#_setPendingComplete","dart:async#_setPendingEvents","dart:async#_setRemoveAfterFiring","dart:async#_setValue","dart:async#_sink","dart:async#_sinkMapper","dart:async#_source","dart:async#_state","dart:async#_stateData","dart:async#_stream","dart:async#_subscribe","dart:async#_subscription","dart:async#_suspendedBodies","dart:async#_target","dart:async#_thenAwait","dart:async#_tick","dart:async#_toggleEventId","dart:async#_transform","dart:async#_transformerSink","dart:async#_varData","dart:async#_waitsForCancel","dart:async#_whenCompleteAction","dart:async#_yieldStar","dart:async#_zone","dart:collection#_add","dart:collection#_addHashTableEntry","dart:collection#_box_0","dart:collection#_captured_K_1","dart:collection#_captured_V_2","dart:collection#_captured_result_0","dart:collection#_captured_result_1","dart:collection#_captured_this_0","dart:collection#_cell","dart:collection#_closeGap","dart:collection#_computeHashCode","dart:collection#_computeKeys","dart:collection#_contains","dart:collection#_containsKey","dart:collection#_current","dart:collection#_element","dart:collection#_findBucketIndex","dart:collection#_first","dart:collection#_get","dart:collection#_getBucket","dart:collection#_insertBefore","dart:collection#_keys","dart:collection#_last","dart:collection#_length","dart:collection#_list","dart:collection#_map","dart:collection#_modificationCount","dart:collection#_modifications","dart:collection#_modified","dart:collection#_newLinkedCell","dart:collection#_newSimilarSet","dart:collection#_next","dart:collection#_nums","dart:collection#_offset","dart:collection#_previous","dart:collection#_remove","dart:collection#_removeHashTableEntry","dart:collection#_rest","dart:collection#_set","dart:collection#_strings","dart:collection#_unlink","dart:collection#_unlinkCell","dart:collection#_visitedFirst","dart:convert#_allowInvalid","dart:convert#_allowMalformed","dart:convert#_buffer","dart:convert#_bufferIndex","dart:convert#_carry","dart:convert#_charOrIndex","dart:convert#_convertGeneral","dart:convert#_decodeRecursive","dart:convert#_encoder","dart:convert#_fillBuffer","dart:convert#_first","dart:convert#_second","dart:convert#_state","dart:convert#_subsetMask","dart:convert#_urlSafe","dart:convert#_writeReplacementCharacter","dart:convert#_writeSurrogate","dart:core#_#_Uri#_text#FI","dart:core#_#_Uri#hashCode#FI","dart:core#_#_Uri#pathSegments#FI","dart:core#_#_Uri#queryParameters#FI","dart:core#_#_Uri#queryParametersAll#FI","dart:core#_absAddSetSign","dart:core#_absCompare","dart:core#_absSubSetSign","dart:core#_captured_host_0","dart:core#_computeScheme","dart:core#_computeUri","dart:core#_contents","dart:core#_data","dart:core#_digits","dart:core#_div","dart:core#_divRem","dart:core#_dlShift","dart:core#_drShift","dart:core#_duration","dart:core#_enumToString","dart:core#_errorExplanation","dart:core#_errorName","dart:core#_fragment","dart:core#_fragmentStart","dart:core#_hasValue","dart:core#_hashCodeCache","dart:core#_host","dart:core#_hostStart","dart:core#_initializeText","dart:core#_isFile","dart:core#_isHttp","dart:core#_isHttps","dart:core#_isNegative","dart:core#_isPackage","dart:core#_isPort","dart:core#_isScheme","dart:core#_isZero","dart:core#_jsWeakMap","dart:core#_mergePaths","dart:core#_microsecond","dart:core#_name","dart:core#_pathStart","dart:core#_port","dart:core#_portStart","dart:core#_query","dart:core#_queryStart","dart:core#_registry","dart:core#_rem","dart:core#_schemeCache","dart:core#_schemeEnd","dart:core#_separatorIndices","dart:core#_simpleMerge","dart:core#_stackTrace","dart:core#_text","dart:core#_toFilePath","dart:core#_toNonSimple","dart:core#_uri","dart:core#_uriCache","dart:core#_used","dart:core#_userInfo","dart:core#_value","dart:core#_writeAuthority","dart:core#_writeString","dart:js_util#_captured_T_1","dart:js_util#_captured__convertedObjects_0","dart:js_util#_captured_completer_0","dart:math#_buffer","dart:math#_getRandomBytes","dartAggregateContext","dartCleanup","dartException","dart_sqlite3_commits","dart_sqlite3_register_vfs","dart_sqlite3_rollbacks","dart_sqlite3_updates","dataView","database","databaseName","day","db","deallocateAdditionalMemory","deallocateArguments","decode","decodeGeneral","decodePayload","decoder","dedicatedWorkersCanUseOpfs","delegate","deleteFile","deleteOnClose","depth","description","deserialize","detach","details","dialect","directory","dispatchTableUpdateNotification","dispose","disposeAll","done","elementAt","enableMigrations","encode","encodePayload","encoder","end","endOffset","endsWith","ensureOpen","entries","equals","error","errorCallback","errorSubscription","errorZone","escapeChar","execute","executeWith","executorId","existingDatabases","expand","explanation","explicitlyLocked","extendedResultCode","fd","fileData","fileIdForPath","filePath","fileSystem","filename","fillRange","filter","finalizable","first","firstMatch","firstPendingEvent","firstWhere","flag0","flag1","flag2","floorToDouble","flush","fold","forEach","forTarget","foreign","forget","fork","fragment","frames","free","fullMessage","fullPath","function","functions","fuse","future","getInt32","getRange","getRoot","getUint32","group","handleError","handleFinalized","handleNext","handleUncaughtError","handleValue","handleWhenComplete","handlesComplete","handlesError","handlesValue","hasAbsolutePath","hasAuthority","hasEmptyPath","hasErrorCallback","hasErrorTest","hasFragment","hasListener","hasMatch","hasPort","hasQuery","hasScheme","hasTrailingSeparator","hashCode","hashMapCellKey","hashMapCellValue","host","hour","id","impl","inMicroseconds","inMilliseconds","inSameErrorZone","incomingRequests","index","indexOf","indexable","indexedDbExists","initializationPort","initialize","injectedValues","innerStream","input","insert","insertAll","insertInto","installedCommitHook=","installedRollbackHook=","installedUpdateHook=","instance","int32View","integerType","internalComputeHashCode","internalContainsKey","internalFindBucketIndex","internalGet","internalRemove","internalSet","invalidValue","isAbsolute","isBroadcast","isClosed","isCompleted","isCore","isEmpty","isExplain","isInTransaction","isInfinite","isNaN","isNegative","isNotEmpty","isOdd","isOpen","isPaused","isRelative","isRootRelative","isScheduled","isScheme","isSeparator","isSequential","isSync","isUndefined","isUnicode","isUtc","isValid","iterator","join","joinAll","key","keys","kind","last","lastClientDisconnected","lastIndexOf","lastInsertRowId","lastPendingEvent","length","lengthInBytes","library","line","list","listFiles","listen","listener","listenerHasError","listenerValueOrError","listeners","local","location","lockStatus","logStatements","malloc","map","matchAsPrefix","matchTypeError","matchesErrorTest","maxSize","member","memory","memoryFile","message","messageSubscription","messages","method","microsecond","millisecond","millisecondsSinceEpoch","minute","modifiedObject","month","moveNext","name","namedGroup","needsSeparator","needsSeparatorPattern","newCompiler","newFileLength","newRequestId","newSerialization","next","nextInt","normalize","notifyDatabaseOpened","offset","offsetInBytes","onCancel","onData","onError","onListen","onPause","onResume","openConnection","openDatabase","openFile","openInMemory","openedFiles","opener","operation","opfsExists","original","originalContent","originalRequestId","outFlags","package","package:async/src/delegate/stream_sink.dart#_sink","package:collection/src/equality.dart#_elementEquality","package:drift/src/remote/communication.dart#_captured_handler_1","package:drift/src/remote/communication.dart#_captured_this_0","package:drift/src/remote/communication.dart#_channel","package:drift/src/remote/communication.dart#_closeCompleter","package:drift/src/remote/communication.dart#_closeLocally","package:drift/src/remote/communication.dart#_currentRequestId","package:drift/src/remote/communication.dart#_debugLog","package:drift/src/remote/communication.dart#_handleMessage","package:drift/src/remote/communication.dart#_incomingRequests","package:drift/src/remote/communication.dart#_pendingRequests","package:drift/src/remote/communication.dart#_send","package:drift/src/remote/communication.dart#_serialize","package:drift/src/remote/communication.dart#_startedClosingLocally","package:drift/src/remote/protocol.dart#_box_0","package:drift/src/remote/protocol.dart#_decodeDbValue","package:drift/src/remote/protocol.dart#_encodeDbValue","package:drift/src/remote/server_impl.dart#_activeChannels","package:drift/src/remote/server_impl.dart#_backlogUpdated","package:drift/src/remote/server_impl.dart#_cancellableOperations","package:drift/src/remote/server_impl.dart#_captured_comm_1","package:drift/src/remote/server_impl.dart#_captured_idIsActive_0","package:drift/src/remote/server_impl.dart#_captured_payload_1","package:drift/src/remote/server_impl.dart#_captured_request_1","package:drift/src/remote/server_impl.dart#_captured_this_0","package:drift/src/remote/server_impl.dart#_captured_transactionId_1","package:drift/src/remote/server_impl.dart#_closeRemainingConnections","package:drift/src/remote/server_impl.dart#_currentExecutorId","package:drift/src/remote/server_impl.dart#_done","package:drift/src/remote/server_impl.dart#_executorBacklog","package:drift/src/remote/server_impl.dart#_handleEnsureOpen","package:drift/src/remote/server_impl.dart#_handleRequest","package:drift/src/remote/server_impl.dart#_isShuttingDown","package:drift/src/remote/server_impl.dart#_knownSchemaVersion","package:drift/src/remote/server_impl.dart#_loadExecutor","package:drift/src/remote/server_impl.dart#_managedExecutors","package:drift/src/remote/server_impl.dart#_notifyActiveExecutorUpdated","package:drift/src/remote/server_impl.dart#_putExecutor","package:drift/src/remote/server_impl.dart#_releaseExecutor","package:drift/src/remote/server_impl.dart#_runBatched","package:drift/src/remote/server_impl.dart#_runQuery","package:drift/src/remote/server_impl.dart#_server","package:drift/src/remote/server_impl.dart#_spawnExclusive","package:drift/src/remote/server_impl.dart#_spawnTransaction","package:drift/src/remote/server_impl.dart#_tableUpdateNotifications","package:drift/src/remote/server_impl.dart#_transactionControl","package:drift/src/remote/server_impl.dart#_waitForTurn","package:drift/src/remote/web_protocol.dart#_box_0","package:drift/src/remote/web_protocol.dart#_captured_dartList_1","package:drift/src/remote/web_protocol.dart#_captured_this_0","package:drift/src/remote/web_protocol.dart#_captured_this_1","package:drift/src/remote/web_protocol.dart#_decodeDbValue","package:drift/src/remote/web_protocol.dart#_decodeErrorResponse","package:drift/src/remote/web_protocol.dart#_decodeNullableString","package:drift/src/remote/web_protocol.dart#_decodeSqliteErrorResponse","package:drift/src/remote/web_protocol.dart#_decodeStackStrace","package:drift/src/remote/web_protocol.dart#_deserializeRequest","package:drift/src/remote/web_protocol.dart#_deserializeResponse","package:drift/src/remote/web_protocol.dart#_encodeDbValue","package:drift/src/remote/web_protocol.dart#_protocolVersion","package:drift/src/remote/web_protocol.dart#_serializeRequest","package:drift/src/remote/web_protocol.dart#_serializeResponse","package:drift/src/remote/web_protocol.dart#_serializeSelectResult","package:drift/src/runtime/cancellation_zone.dart#_box_0","package:drift/src/runtime/cancellation_zone.dart#_cancellationCallbacks","package:drift/src/runtime/cancellation_zone.dart#_cancellationRequested","package:drift/src/runtime/cancellation_zone.dart#_captured_T_2","package:drift/src/runtime/cancellation_zone.dart#_captured_operation_1","package:drift/src/runtime/cancellation_zone.dart#_resultCompleter","package:drift/src/runtime/executor/helpers/engines.dart#_base","package:drift/src/runtime/executor/helpers/engines.dart#_captured_T_2","package:drift/src/runtime/executor/helpers/engines.dart#_captured_abortIfCancelled_0","package:drift/src/runtime/executor/helpers/engines.dart#_captured_action_1","package:drift/src/runtime/executor/helpers/engines.dart#_captured_args_1","package:drift/src/runtime/executor/helpers/engines.dart#_captured_args_2","package:drift/src/runtime/executor/helpers/engines.dart#_captured_opened_1","package:drift/src/runtime/executor/helpers/engines.dart#_captured_parent_0","package:drift/src/runtime/executor/helpers/engines.dart#_captured_statement_1","package:drift/src/runtime/executor/helpers/engines.dart#_captured_statement_2","package:drift/src/runtime/executor/helpers/engines.dart#_captured_statements_1","package:drift/src/runtime/executor/helpers/engines.dart#_captured_this_0","package:drift/src/runtime/executor/helpers/engines.dart#_captured_user_1","package:drift/src/runtime/executor/helpers/engines.dart#_checkCanOpen","package:drift/src/runtime/executor/helpers/engines.dart#_closed","package:drift/src/runtime/executor/helpers/engines.dart#_commitCommand","package:drift/src/runtime/executor/helpers/engines.dart#_completer","package:drift/src/runtime/executor/helpers/engines.dart#_db","package:drift/src/runtime/executor/helpers/engines.dart#_delegate","package:drift/src/runtime/executor/helpers/engines.dart#_done","package:drift/src/runtime/executor/helpers/engines.dart#_ensureOpenCalled","package:drift/src/runtime/executor/helpers/engines.dart#_lock","package:drift/src/runtime/executor/helpers/engines.dart#_log","package:drift/src/runtime/executor/helpers/engines.dart#_migrationError","package:drift/src/runtime/executor/helpers/engines.dart#_opened","package:drift/src/runtime/executor/helpers/engines.dart#_openingLock","package:drift/src/runtime/executor/helpers/engines.dart#_outer","package:drift/src/runtime/executor/helpers/engines.dart#_parent","package:drift/src/runtime/executor/helpers/engines.dart#_release","package:drift/src/runtime/executor/helpers/engines.dart#_rollbackCommand","package:drift/src/runtime/executor/helpers/engines.dart#_runMigrations","package:drift/src/runtime/executor/helpers/engines.dart#_startCommand","package:drift/src/runtime/executor/helpers/engines.dart#_synchronized","package:drift/src/runtime/executor/helpers/engines.dart#_waitingChildExecutors","package:drift/src/runtime/executor/helpers/results.dart#_captured_this_0","package:drift/src/runtime/executor/helpers/results.dart#_columnIndexes","package:drift/src/runtime/executor/interceptor.dart#_inner","package:drift/src/runtime/executor/interceptor.dart#_interceptor","package:drift/src/sqlite3/database.dart#_#Sqlite3Delegate#versionDelegate#A","package:drift/src/sqlite3/database.dart#_cachedStatements","package:drift/src/sqlite3/database.dart#_database","package:drift/src/sqlite3/database.dart#_getPreparedStatement","package:drift/src/sqlite3/database.dart#_hasInitializedDatabase","package:drift/src/sqlite3/database.dart#_initializeDatabase","package:drift/src/sqlite3/database.dart#_isOpen","package:drift/src/sqlite3/database.dart#_preparedStmtsCache","package:drift/src/sqlite3/database.dart#_returnStatement","package:drift/src/sqlite3/database.dart#_setup","package:drift/src/sqlite3/native_functions.dart#_captured_calculation_0","package:drift/src/utils/lazy_database.dart#_#LazyDatabase#_delegate#F","package:drift/src/utils/lazy_database.dart#_awaitOpened","package:drift/src/utils/lazy_database.dart#_captured_delegate_1","package:drift/src/utils/lazy_database.dart#_captured_this_0","package:drift/src/utils/lazy_database.dart#_captured_user_1","package:drift/src/utils/lazy_database.dart#_delegate","package:drift/src/utils/lazy_database.dart#_delegateAvailable","package:drift/src/utils/lazy_database.dart#_dialect","package:drift/src/utils/lazy_database.dart#_openDelegate","package:drift/src/utils/synchronized.dart#_captured_T_1","package:drift/src/utils/synchronized.dart#_captured_T_4","package:drift/src/utils/synchronized.dart#_captured_blockCompleted_1","package:drift/src/utils/synchronized.dart#_captured_blockCompleted_2","package:drift/src/utils/synchronized.dart#_captured_blockReleasedLock_2","package:drift/src/utils/synchronized.dart#_captured_blockReleasedLock_3","package:drift/src/utils/synchronized.dart#_captured_block_1","package:drift/src/utils/synchronized.dart#_captured_callBlockAndComplete_0","package:drift/src/utils/synchronized.dart#_captured_this_0","package:drift/src/utils/synchronized.dart#_last","package:drift/src/web/channel_new.dart#_captured_#this_1","package:drift/src/web/channel_new.dart#_captured_#this_2","package:drift/src/web/channel_new.dart#_captured_controller_1","package:drift/src/web/channel_new.dart#_captured_explicitClose_0","package:drift/src/web/channel_new.dart#_captured_protocol_1","package:drift/src/web/channel_new.dart#_captured_protocol_3","package:drift/src/web/channel_new.dart#_captured_webNativeSerialization_0","package:drift/src/web/channel_new.dart#_captured_webNativeSerialization_2","package:drift/src/web/wasm_setup/dedicated_worker.dart#_box_0","package:drift/src/web/wasm_setup/dedicated_worker.dart#_captured_this_0","package:drift/src/web/wasm_setup/dedicated_worker.dart#_captured_this_1","package:drift/src/web/wasm_setup/dedicated_worker.dart#_checkCompatibility","package:drift/src/web/wasm_setup/dedicated_worker.dart#_compatibility","package:drift/src/web/wasm_setup/dedicated_worker.dart#_handleMessage","package:drift/src/web/wasm_setup/dedicated_worker.dart#_servers","package:drift/src/web/wasm_setup/protocol.dart#_captured_asList_0","package:drift/src/web/wasm_setup/protocol.dart#_captured_port_0","package:drift/src/web/wasm_setup/protocol.dart#_captured_worker_0","package:drift/src/web/wasm_setup/shared.dart#_box_0","package:drift/src/web/wasm_setup/shared.dart#_captured_#this_1","package:drift/src/web/wasm_setup/shared.dart#_captured_T_2","package:drift/src/web/wasm_setup/shared.dart#_captured_completer_0","package:drift/src/web/wasm_setup/shared.dart#_captured_initPort_0","package:drift/src/web/wasm_setup/shared.dart#_captured_initializer_2","package:drift/src/web/wasm_setup/shared.dart#_captured_message_1","package:drift/src/web/wasm_setup/shared.dart#_captured_openRequest_1","package:drift/src/web/wasm_setup/shared.dart#_captured_this_0","package:drift/src/web/wasm_setup/shared.dart#_captured_wasmServer_2","package:drift/src/web/wasm_setup/shared.dart#_close","package:drift/src/web/wasm_setup/shared.dart#_connectedClients","package:drift/src/web/wasm_setup/shared.dart#_lastClientDisconnected","package:drift/src/web/wasm_setup/shared.dart#_loadLockedWasmVfs","package:drift/src/web/wasm_setup/shared.dart#_root","package:drift/src/web/wasm_setup/shared.dart#_setup","package:drift/src/web/wasm_setup/shared_worker.dart#_box_0","package:drift/src/web/wasm_setup/shared_worker.dart#_captured_canUseIndexedDb_2","package:drift/src/web/wasm_setup/shared_worker.dart#_captured_clientPort_1","package:drift/src/web/wasm_setup/shared_worker.dart#_captured_completer_1","package:drift/src/web/wasm_setup/shared_worker.dart#_captured_result_0","package:drift/src/web/wasm_setup/shared_worker.dart#_captured_result_1","package:drift/src/web/wasm_setup/shared_worker.dart#_captured_this_0","package:drift/src/web/wasm_setup/shared_worker.dart#_captured_worker_2","package:drift/src/web/wasm_setup/shared_worker.dart#_dedicatedWorker","package:drift/src/web/wasm_setup/shared_worker.dart#_messageFromClient","package:drift/src/web/wasm_setup/shared_worker.dart#_newConnection","package:drift/src/web/wasm_setup/shared_worker.dart#_servers","package:drift/src/web/wasm_setup/shared_worker.dart#_startFeatureDetection","package:drift/wasm.dart#_fileSystem","package:drift/wasm.dart#_flush","package:drift/wasm.dart#_path","package:drift/wasm.dart#_runWithArgs","package:drift/wasm.dart#_sqlite3","package:path/src/context.dart#_current","package:path/src/context.dart#_isWithinOrEquals","package:path/src/context.dart#_isWithinOrEqualsFast","package:path/src/context.dart#_needsNormalization","package:path/src/context.dart#_parse","package:path/src/context.dart#_pathDirection","package:sqlite3/src/implementation/database.dart#_cachedCopies","package:sqlite3/src/implementation/database.dart#_captured_compiler_0","package:sqlite3/src/implementation/database.dart#_captured_createdStatements_1","package:sqlite3/src/implementation/database.dart#_captured_function_0","package:sqlite3/src/implementation/database.dart#_commits","package:sqlite3/src/implementation/database.dart#_ensureOpen","package:sqlite3/src/implementation/database.dart#_isClosed","package:sqlite3/src/implementation/database.dart#_prepareInternal","package:sqlite3/src/implementation/database.dart#_rollbacks","package:sqlite3/src/implementation/database.dart#_statements","package:sqlite3/src/implementation/database.dart#_updates","package:sqlite3/src/implementation/database.dart#_validateAndEncodeFunctionName","package:sqlite3/src/implementation/finalizer.dart#_creationTrace","package:sqlite3/src/implementation/statement.dart#_bindCustomParam","package:sqlite3/src/implementation/statement.dart#_bindIndexedParams","package:sqlite3/src/implementation/statement.dart#_bindMapParams","package:sqlite3/src/implementation/statement.dart#_bindParam","package:sqlite3/src/implementation/statement.dart#_bindParams","package:sqlite3/src/implementation/statement.dart#_closed","package:sqlite3/src/implementation/statement.dart#_columnNames","package:sqlite3/src/implementation/statement.dart#_currentCursor","package:sqlite3/src/implementation/statement.dart#_deallocateArguments","package:sqlite3/src/implementation/statement.dart#_ensureMatchingParameters","package:sqlite3/src/implementation/statement.dart#_ensureNotFinalized","package:sqlite3/src/implementation/statement.dart#_execute","package:sqlite3/src/implementation/statement.dart#_inResetState","package:sqlite3/src/implementation/statement.dart#_latestArguments","package:sqlite3/src/implementation/statement.dart#_readValue","package:sqlite3/src/implementation/statement.dart#_reset","package:sqlite3/src/implementation/statement.dart#_selectResults","package:sqlite3/src/implementation/statement.dart#_step","package:sqlite3/src/implementation/statement.dart#_tableNames","package:sqlite3/src/in_memory_vfs.dart#_lockMode","package:sqlite3/src/result_set.dart#_calculateIndexes","package:sqlite3/src/result_set.dart#_calculatedIndexes","package:sqlite3/src/result_set.dart#_columnNames","package:sqlite3/src/result_set.dart#_data","package:sqlite3/src/result_set.dart#_result","package:sqlite3/src/wasm/bindings.dart#_allocatedArguments","package:sqlite3/src/wasm/js_interop/core.dart#_box_0","package:sqlite3/src/wasm/js_interop/core.dart#_captured_controller_1","package:sqlite3/src/wasm/js_interop/core.dart#_captured_controller_2","package:sqlite3/src/wasm/js_interop/core.dart#_captured_controller_3","package:sqlite3/src/wasm/js_interop/core.dart#_captured_fetchNext_2","package:sqlite3/src/wasm/js_interop/core.dart#_captured_fetchNext_3","package:sqlite3/src/wasm/js_interop/core.dart#_captured_iterator_2","package:sqlite3/src/wasm/js_interop/core.dart#_captured_this_1","package:sqlite3/src/wasm/js_interop/core.dart#_jsObject","package:sqlite3/src/wasm/js_interop/indexed_db.dart#_captured_#this_1","package:sqlite3/src/wasm/js_interop/indexed_db.dart#_captured_T_2","package:sqlite3/src/wasm/js_interop/indexed_db.dart#_captured_completer_0","package:sqlite3/src/wasm/js_interop/indexed_db.dart#_captured_completer_1","package:sqlite3/src/wasm/js_interop/indexed_db.dart#_captured_this_0","package:sqlite3/src/wasm/js_interop/indexed_db.dart#_cursor","package:sqlite3/src/wasm/js_interop/indexed_db.dart#_cursorRequest","package:sqlite3/src/wasm/js_interop/indexed_db.dart#_onError","package:sqlite3/src/wasm/js_interop/indexed_db.dart#_onSuccess","package:sqlite3/src/wasm/js_interop/wasm.dart#_captured_importsJs_0","package:sqlite3/src/wasm/js_interop/wasm.dart#_captured_moduleJs_0","package:sqlite3/src/wasm/vfs/async_opfs/client.dart#_runInWorker","package:sqlite3/src/wasm/vfs/async_opfs/sync_channel.dart#_readString","package:sqlite3/src/wasm/vfs/async_opfs/sync_channel.dart#_writeString","package:sqlite3/src/wasm/vfs/async_opfs/worker.dart#_closeSyncHandle","package:sqlite3/src/wasm/vfs/async_opfs/worker.dart#_closeSyncHandleNoThrow","package:sqlite3/src/wasm/vfs/async_opfs/worker.dart#_fdCounter","package:sqlite3/src/wasm/vfs/async_opfs/worker.dart#_implicitlyHeldLocks","package:sqlite3/src/wasm/vfs/async_opfs/worker.dart#_openFiles","package:sqlite3/src/wasm/vfs/async_opfs/worker.dart#_openForSynchronousAccess","package:sqlite3/src/wasm/vfs/async_opfs/worker.dart#_releaseImplicitLock","package:sqlite3/src/wasm/vfs/async_opfs/worker.dart#_releaseImplicitLocks","package:sqlite3/src/wasm/vfs/async_opfs/worker.dart#_resolvePath","package:sqlite3/src/wasm/vfs/async_opfs/worker.dart#_stopped","package:sqlite3/src/wasm/vfs/async_opfs/worker.dart#_xAccess","package:sqlite3/src/wasm/vfs/async_opfs/worker.dart#_xClose","package:sqlite3/src/wasm/vfs/async_opfs/worker.dart#_xDelete","package:sqlite3/src/wasm/vfs/async_opfs/worker.dart#_xFileSize","package:sqlite3/src/wasm/vfs/async_opfs/worker.dart#_xLock","package:sqlite3/src/wasm/vfs/async_opfs/worker.dart#_xOpen","package:sqlite3/src/wasm/vfs/async_opfs/worker.dart#_xRead","package:sqlite3/src/wasm/vfs/async_opfs/worker.dart#_xSync","package:sqlite3/src/wasm/vfs/async_opfs/worker.dart#_xTruncate","package:sqlite3/src/wasm/vfs/async_opfs/worker.dart#_xUnlock","package:sqlite3/src/wasm/vfs/async_opfs/worker.dart#_xWrite","package:sqlite3/src/wasm/vfs/indexed_db.dart#_asynchronous","package:sqlite3/src/wasm/vfs/indexed_db.dart#_captured_blockOffset_1","package:sqlite3/src/wasm/vfs/indexed_db.dart#_captured_blocks_0","package:sqlite3/src/wasm/vfs/indexed_db.dart#_captured_fileId_0","package:sqlite3/src/wasm/vfs/indexed_db.dart#_captured_fileId_1","package:sqlite3/src/wasm/vfs/indexed_db.dart#_captured_length_3","package:sqlite3/src/wasm/vfs/indexed_db.dart#_captured_openRequest_0","package:sqlite3/src/wasm/vfs/indexed_db.dart#_captured_result_1","package:sqlite3/src/wasm/vfs/indexed_db.dart#_captured_rowOffset_2","package:sqlite3/src/wasm/vfs/indexed_db.dart#_captured_row_0","package:sqlite3/src/wasm/vfs/indexed_db.dart#_captured_size_1","package:sqlite3/src/wasm/vfs/indexed_db.dart#_captured_this_0","package:sqlite3/src/wasm/vfs/indexed_db.dart#_captured_writeBlock_0","package:sqlite3/src/wasm/vfs/indexed_db.dart#_captured_writes_1","package:sqlite3/src/wasm/vfs/indexed_db.dart#_checkClosed","package:sqlite3/src/wasm/vfs/indexed_db.dart#_currentWorkItem","package:sqlite3/src/wasm/vfs/indexed_db.dart#_database","package:sqlite3/src/wasm/vfs/indexed_db.dart#_dbName","package:sqlite3/src/wasm/vfs/indexed_db.dart#_fileId","package:sqlite3/src/wasm/vfs/indexed_db.dart#_inMemoryOnlyFiles","package:sqlite3/src/wasm/vfs/indexed_db.dart#_isClosed","package:sqlite3/src/wasm/vfs/indexed_db.dart#_isClosing","package:sqlite3/src/wasm/vfs/indexed_db.dart#_knownFileIds","package:sqlite3/src/wasm/vfs/indexed_db.dart#_memory","package:sqlite3/src/wasm/vfs/indexed_db.dart#_pendingWork","package:sqlite3/src/wasm/vfs/indexed_db.dart#_rangeOverFile","package:sqlite3/src/wasm/vfs/indexed_db.dart#_readFile","package:sqlite3/src/wasm/vfs/indexed_db.dart#_readFiles","package:sqlite3/src/wasm/vfs/indexed_db.dart#_startWorkingIfNeeded","package:sqlite3/src/wasm/vfs/indexed_db.dart#_submitWork","package:sqlite3/src/wasm/vfs/indexed_db.dart#_submitWorkFunction","package:sqlite3/src/wasm/vfs/indexed_db.dart#_updateBlock","package:sqlite3/src/wasm/vfs/indexed_db.dart#_write","package:sqlite3/src/wasm/vfs/simple_opfs.dart#_captured_readWriteUnsafe_1","package:sqlite3/src/wasm/vfs/simple_opfs.dart#_captured_root_0","package:sqlite3/src/wasm/vfs/simple_opfs.dart#_existsList","package:sqlite3/src/wasm/vfs/simple_opfs.dart#_files","package:sqlite3/src/wasm/vfs/simple_opfs.dart#_lockMode","package:sqlite3/src/wasm/vfs/simple_opfs.dart#_markExists","package:sqlite3/src/wasm/vfs/simple_opfs.dart#_memory","package:sqlite3/src/wasm/vfs/simple_opfs.dart#_metaHandle","package:sqlite3/src/wasm/vfs/simple_opfs.dart#_recognizeType","package:sqlite3/src/wasm/wasm_interop.dart#_#_InjectedValues#bindings#A","package:sqlite3/src/wasm/wasm_interop.dart#_#_InjectedValues#injectedValues#A","package:sqlite3/src/wasm/wasm_interop.dart#_#_InjectedValues#memory#A","package:sqlite3/src/wasm/wasm_interop.dart#_captured_amount_3","package:sqlite3/src/wasm/wasm_interop.dart#_captured_dartFdPtr_5","package:sqlite3/src/wasm/wasm_interop.dart#_captured_fd_2","package:sqlite3/src/wasm/wasm_interop.dart#_captured_file_0","package:sqlite3/src/wasm/wasm_interop.dart#_captured_file_1","package:sqlite3/src/wasm/wasm_interop.dart#_captured_flags_1","package:sqlite3/src/wasm/wasm_interop.dart#_captured_flags_2","package:sqlite3/src/wasm/wasm_interop.dart#_captured_flags_3","package:sqlite3/src/wasm/wasm_interop.dart#_captured_memory_0","package:sqlite3/src/wasm/wasm_interop.dart#_captured_memory_1","package:sqlite3/src/wasm/wasm_interop.dart#_captured_memory_3","package:sqlite3/src/wasm/wasm_interop.dart#_captured_memory_4","package:sqlite3/src/wasm/wasm_interop.dart#_captured_micros_1","package:sqlite3/src/wasm/wasm_interop.dart#_captured_nByte_2","package:sqlite3/src/wasm/wasm_interop.dart#_captured_nOut_2","package:sqlite3/src/wasm/wasm_interop.dart#_captured_offset_4","package:sqlite3/src/wasm/wasm_interop.dart#_captured_pOutFlags_6","package:sqlite3/src/wasm/wasm_interop.dart#_captured_pResOut_2","package:sqlite3/src/wasm/wasm_interop.dart#_captured_pResOut_4","package:sqlite3/src/wasm/wasm_interop.dart#_captured_path_1","package:sqlite3/src/wasm/wasm_interop.dart#_captured_path_2","package:sqlite3/src/wasm/wasm_interop.dart#_captured_sizePtr_2","package:sqlite3/src/wasm/wasm_interop.dart#_captured_size_1","package:sqlite3/src/wasm/wasm_interop.dart#_captured_source_2","package:sqlite3/src/wasm/wasm_interop.dart#_captured_syncDir_2","package:sqlite3/src/wasm/wasm_interop.dart#_captured_target_2","package:sqlite3/src/wasm/wasm_interop.dart#_captured_this_0","package:sqlite3/src/wasm/wasm_interop.dart#_captured_vfs_0","package:sqlite3/src/wasm/wasm_interop.dart#_captured_vfs_1","package:sqlite3/src/wasm/wasm_interop.dart#_captured_vfs_3","package:sqlite3/src/wasm/wasm_interop.dart#_captured_zOut_1","package:sqlite3/src/wasm/wasm_interop.dart#_captured_zOut_4","package:sqlite3/src/wasm/wasm_interop.dart#_id","package:stack_trace/src/chain.dart#_captured_longest_0","package:stack_trace/src/frame.dart#_captured_frame_0","package:stack_trace/src/lazy_trace.dart#_#LazyTrace#_trace#FI","package:stack_trace/src/lazy_trace.dart#_thunk","package:stack_trace/src/lazy_trace.dart#_trace","package:stack_trace/src/trace.dart#_captured_longest_0","package:stack_trace/src/trace.dart#_captured_trace_0","package:stream_channel/src/close_guarantee_channel.dart#_#CloseGuaranteeChannel#_sink#F","package:stream_channel/src/close_guarantee_channel.dart#_#CloseGuaranteeChannel#_stream#F","package:stream_channel/src/close_guarantee_channel.dart#_channel","package:stream_channel/src/close_guarantee_channel.dart#_disconnected","package:stream_channel/src/close_guarantee_channel.dart#_inner","package:stream_channel/src/close_guarantee_channel.dart#_sink","package:stream_channel/src/close_guarantee_channel.dart#_stream","package:stream_channel/src/close_guarantee_channel.dart#_subscription=","package:stream_channel/src/guarantee_channel.dart#_#GuaranteeChannel#_sink#F","package:stream_channel/src/guarantee_channel.dart#_#GuaranteeChannel#_streamController#F","package:stream_channel/src/guarantee_channel.dart#_addError","package:stream_channel/src/guarantee_channel.dart#_addStreamCompleter","package:stream_channel/src/guarantee_channel.dart#_addStreamSubscription","package:stream_channel/src/guarantee_channel.dart#_allowErrors","package:stream_channel/src/guarantee_channel.dart#_box_0","package:stream_channel/src/guarantee_channel.dart#_captured_T_2","package:stream_channel/src/guarantee_channel.dart#_captured_this_0","package:stream_channel/src/guarantee_channel.dart#_captured_this_1","package:stream_channel/src/guarantee_channel.dart#_channel","package:stream_channel/src/guarantee_channel.dart#_closed","package:stream_channel/src/guarantee_channel.dart#_disconnected","package:stream_channel/src/guarantee_channel.dart#_doneCompleter","package:stream_channel/src/guarantee_channel.dart#_inAddStream","package:stream_channel/src/guarantee_channel.dart#_inner","package:stream_channel/src/guarantee_channel.dart#_onSinkDisconnected","package:stream_channel/src/guarantee_channel.dart#_onStreamDisconnected","package:stream_channel/src/guarantee_channel.dart#_sink","package:stream_channel/src/guarantee_channel.dart#_streamController","package:stream_channel/src/guarantee_channel.dart#_subscription","package:stream_channel/src/stream_channel_controller.dart#_#StreamChannelController#_foreign#F","package:stream_channel/src/stream_channel_controller.dart#_#StreamChannelController#_local#F","package:stream_channel/src/stream_channel_controller.dart#_foreign","package:stream_channel/src/stream_channel_controller.dart#_local","package:typed_data/src/typed_buffer.dart#_add","package:typed_data/src/typed_buffer.dart#_addAll","package:typed_data/src/typed_buffer.dart#_buffer","package:typed_data/src/typed_buffer.dart#_createBiggerBuffer","package:typed_data/src/typed_buffer.dart#_createBuffer","package:typed_data/src/typed_buffer.dart#_defaultValue","package:typed_data/src/typed_buffer.dart#_ensureCapacity","package:typed_data/src/typed_buffer.dart#_grow","package:typed_data/src/typed_buffer.dart#_insertKnownLength","package:typed_data/src/typed_buffer.dart#_length","package:typed_data/src/typed_buffer.dart#_setRange","package:web/src/helpers/events/streams.dart#_canceled","package:web/src/helpers/events/streams.dart#_captured_handleData_0","package:web/src/helpers/events/streams.dart#_captured_onData_0","package:web/src/helpers/events/streams.dart#_eventType","package:web/src/helpers/events/streams.dart#_onData","package:web/src/helpers/events/streams.dart#_pauseCount","package:web/src/helpers/events/streams.dart#_target","package:web/src/helpers/events/streams.dart#_tryResume","package:web/src/helpers/events/streams.dart#_unlisten","package:web/src/helpers/events/streams.dart#_useCapture","padLeft","padRight","parameterCount","parameters","parametersToStatement","parent","parts","path","pathContext","pathFromUri","pathSegments","pathsEqual","pattern","pause","payload","perform","port","prepare","prettyUri","previous","protocolVersion","putIfAbsent","pzTail","query","random","rawValues","readField","readFully","readInto","readLocal","readRequest","readResponse","readonly","realType","register","registerBinaryCallback","registerCallback","registerFile","registerUnaryCallback","registerVfs","registerVirtualFileSystem","registeredVfs","relative","relativePathToUri","relativeRootPattern","release","remainder","remaining","remoteCause","remoteStackTrace","remove","removeAt","removeFragment","removeLast","removeTrailingSeparators","replace","replaceAll","replaceFirst","replaceRange","replacedBlocks","request","requestAndWaitForResponse","requestId","requestTrace","resolve","resolveUri","respond","respondError","response","result","resultCode","resume","returnCode","reversed","rollback","rollbackToSavepoint","rollbackTransaction","root","rootLength","rootPattern","rows","run","runBatchSync","runBatched","runBinary","runBinaryGuarded","runCustom","runDelete","runGuarded","runInsert","runSelect","runUnary","runUnaryGuarded","runUpdate","runWithArgsSync","runtimeType","savepoint","schedule","schemaVersion","scheme","second","select","selectWith","self","send","sendTo","sendToClient","sendToPort","sendToWorker","separator","separatorPattern","separators","serialize","serializer","serve","server","servers","sessionApply","setAll","setFloat64","setInt32","setRange","setRequestHandler","setSchemaVersion","setUint32","shouldChain","shutdown","sink","skip","skipWhile","sort","source","split","sql","sqlite3","sqlite3Options","sqlite3WasmUri","sqlite3_bind_blob64","sqlite3_bind_double","sqlite3_bind_int","sqlite3_bind_int64","sqlite3_bind_int64BigInt","sqlite3_bind_null","sqlite3_bind_parameter_count","sqlite3_bind_parameter_index","sqlite3_bind_text","sqlite3_changes","sqlite3_close_v2","sqlite3_column_blob","sqlite3_column_bytes","sqlite3_column_count","sqlite3_column_double","sqlite3_column_int64","sqlite3_column_int64OrBigInt","sqlite3_column_name","sqlite3_column_table_name","sqlite3_column_text","sqlite3_column_type","sqlite3_commit_hook","sqlite3_create_function_v2","sqlite3_errmsg","sqlite3_error_offset","sqlite3_errstr","sqlite3_exec","sqlite3_extended_errcode","sqlite3_extended_result_codes","sqlite3_finalize","sqlite3_initialize","sqlite3_last_insert_rowid","sqlite3_open_v2","sqlite3_prepare","sqlite3_prepare_v3","sqlite3_reset","sqlite3_result_blob64","sqlite3_result_double","sqlite3_result_error","sqlite3_result_int64","sqlite3_result_int64BigInt","sqlite3_result_null","sqlite3_result_subtype","sqlite3_result_text","sqlite3_rollback_hook","sqlite3_step","sqlite3_stmt_isexplain","sqlite3_temp_directory","sqlite3_update_hook","sqlite3_user_data","sqlite3_value_blob","sqlite3_value_bytes","sqlite3_value_double","sqlite3_value_int64","sqlite3_value_text","sqlite3_value_type","stackTrace","start","startChunkedConversion","startsWith","state","statement","statementIndex","statements","stmt","stmtOut","stmts","storage","storageApi","storedCallback","stream","style","sublist","substring","supportsIndexedDb","supportsIndexedParameters","supportsNestedWorkers","supportsOpfs","supportsReadingTableNameForColumn","supportsSharedArrayBuffers","syncHandle","synchronized","synchronizer","table","tableNames","take","takeOpcode","textType","then","toDouble","toFilePath","toInt","toList","toLowerCase","toRadixString","toString","toTrace","toUpperCase","toUri","token","traces","transactionDelegate","transform","transformStream","trim","truncate","truncateToDouble","tryFormat","type","unary-","unlink","updatedRows","updates","uri","use","userInfo","userVersion","values","version","versionBefore","versionCode","versionDelegate","versionNow","vfs","viewByteRange","waitForRequest","weekday","whenComplete","where","whereType","work","wrapDatabase","wrapStatement","write","writeAll","writeCharCode","writeToJs","writeln","writes","xAccess","xCheckReservedLock","xClose","xCurrentTime","xDelete","xDeviceCharacteristics","xFileSize","xFinal","xFullPathName","xFunc","xInverse","xLock","xOpen","xRandomness","xRead","xSleep","xStep","xSync","xTruncate","xUnlock","xValue","xWrite","year","zone","~/","_Universe._canonicalRecipeOfQuestion","_Universe._canonicalRecipeOfFutureOr","_Universe._canonicalRecipeOfBinding","_Universe._canonicalRecipeOfGenericFunction","isBottomType","Error._stringToSafeString","DriftCommunication._closeCompleter","ServerImplementation._backlogUpdated","ServerImplementation._done","CancellationToken._resultCompleter","JSObject|constructor#","JsBigInt|constructor#fromBigInt","RequestResponseSynchronizer._","WasmDatabase.sqlite3_errmsg","WasmValue.sqlite3_value_int64","WasmValue.sqlite3_value_double","WasmValue.sqlite3_value_text","WasmValue.sqlite3_value_blob","_Utf8Encoder.withBufferSize","_Utf8Encoder._createBuffer","List._fixedOf","_Uri.hasScheme","DriftCommunication._closeLocally","DriftCommunication.request","_ExclusiveExecutor._completer","_StatementBasedTransactionExecutor.nested","_StatementBasedTransactionExecutor._done","QueryInterceptor.beginExclusive","DateTime.now","Sqlite3Delegate._preparedStmtsCache","RunningWasmServer._lastClientDisconnected","StreamChannelMixin.changeStream","WasmDatabase.sqlite3_commit_hook","WasmDatabase.sqlite3_rollback_hook","WasmDatabase.sqlite3_extended_result_codes","WasmStatement.sqlite3_column_int64OrBigInt","JsBigInt|toDart","WasmStatement.sqlite3_column_double","WasmStatement.sqlite3_column_text","WasmStatement.sqlite3_column_bytes","WasmBindings.sqlite3_bind_blob64","RequestResponseSynchronizer.requestAndWaitForResponse","MessageSerializer.viewByteRange","_ResolvedPath.openFile","RequestResponseSynchronizer.waitForRequest","RequestResponseSynchronizer.takeOpcode","RequestResponseSynchronizer.respond","_IndexedDbWorkItem.completer","BaseVirtualFileSystem.xCurrentTime","_GuaranteeSink._doneCompleter","Uint8Buffer._createBuffer","<",">",">=","ByteBufferToJSArrayBuffer|get#toJS","EnumName|get#name","FileSystemDirectoryHandleApi|getDirectory","FileSystemDirectoryHandleApi|openFile","IterableExtensions|get#indexed","JSAnyUtilityExtension|dartify","JSArrayToList|get#toDart","JSFunctionUnsafeUtilExtension|_callAsConstructor","JSFunctionUnsafeUtilExtension|callAsConstructor","JSNumberToNumber|get#toDartInt","JSObjectUnsafeUtilExtension|[]","JSObjectUnsafeUtilExtension|callMethod","JSObjectUnsafeUtilExtension|getProperty","JSPromiseToFuture|get#toDart","NativeDataView|setBigInt64","NativeUint8List|set","NullableObjectUtilExtension|jsify","NumToJSExtension|get#toJS","StorageClassification|get#isIndexedDbBased","StorageClassification|get#isOpfsBased","StorageManagerApi|get#directory","SubtypedValue|get#originalValue","SubtypedValue|get#subtype","WrappedMemory|get#asBytes","WrappedMemory|get#dartBuffer","WrappedMemory|int32ValueOfPointer","WrappedMemory|setInt32Value","WrappedMemory|setInt64Value","_","_absCompare","_activeChannels","_addErrorWithReplacement","_addListener","_allocatedArguments","_asCheck","_asyncCompleteError","_backlogUpdated","_buffer","_cachedStatements","_calculatedIndexes","_callConstructorUnchecked0","_callConstructorUnchecked1","_callConstructorUnchecked2","_callMethodUnchecked0","_callMethodUnchecked1","_callMethodUnchecked2","_callMethodUnchecked3","_callMethodUnchecked4","_canceled","_cancellableOperations","_cancellationCallbacks","_canonicalRecipeOfBinding","_canonicalRecipeOfFunction","_canonicalRecipeOfFunctionParameters","_canonicalRecipeOfFutureOr","_canonicalRecipeOfGenericFunction","_canonicalRecipeOfInterface","_canonicalRecipeOfQuestion","_canonicalRecipeOfRecord","_caseInsensitiveStartsWith","_chainSource","_checkClosed","_checkCompatibility","_checkCount","_checkMutable","_checkType","_cloneResult","_closeCompleter","_closeLocally","_closeUnchecked","_clz32","_codeUnitAt","_combineSurrogatePair","_completeError","_completer","_computeHashCode","_computeIdentityHashCodeProperty","_computePathSegments","_computeUri","_containsTableEntry","_create2","_create3","_createBindingRti","_createBuffer","_createFunctionRti","_createGenericFunctionParameterRti","_createInterfaceRti","_createLength","_createPeriodicTimer","_createRecordRti","_createSubscription","_createTerminalRti","_currentExpansion","_deallocateArguments","_decodeErrorResponse","_decodeNullableString","_decrementPauseCount","_delegate","_done","_doneCompleter","_ensureDoneFuture","_ensureMatchingParameters","_ensureNotFinalized","_ensureOpen","_equalFields","_error","_errorTest","_executorBacklog","_expectsEvent","_extension#0|setSubtypedResult","_extension#1|callReturningInt","_extension#1|callReturningInt0","_extension#1|callReturningVoid2","_findRule","_fixedOf","_foreign","_future","_getBindCache","_getBindingArguments","_getBindingBase","_getBucket","_getCachedRuntimeType","_getEvalCache","_getFunctionParameters","_getFutureOrArgument","_getGenericFunctionBase","_getGenericFunctionBounds","_getGenericFunctionParameterIndex","_getInterfaceName","_getInterfaceTypeArguments","_getIsSubtypeCache","_getKind","_getNamed","_getOptionalPositional","_getPrimary","_getPropertyTrustType","_getQuestionArgument","_getRandomBytes","_getRecordFields","_getRecordPartialShapeTag","_getRequiredPositional","_getRest","_getReturnType","_getRti","_getRuntimeTypeOfArrayAsRti","_getSpecializedTestResource","_getTableBucket","_getTableCell","_handleDone","_handleError","_hasCaptures","_hasError","_hasOneListener","_hasPending","_hasTableEntry","_hasTimer","_implicitlyHeldLocks","_inMemoryOnlyFiles","_incomingRequests","_initializeDatabase","_initializeText","_installRti","_isAddingStream","_isCanceled","_isChained","_isCheck","_isClosed","_isClosure","_isComplete","_isDartObject","_isDotAll","_isEmpty","_isFile","_isFiring","_isGeneralDelimiter","_isHttp","_isHttps","_isInitialState","_isInputPaused","_isLeadSurrogate","_isMultiLine","_isPackage","_isRegNameChar","_isScheme","_isSchemeCharacter","_isTrailSurrogate","_isUnicode","_isUnreservedChar","_isZero","_isZoneIDChar","_jsWeakMap","_keysFromIndex","_knownFileIds","_lastClientDisconnected","_lastQuoRemDigits","_lastQuoRemUsed","_lastRemUsed","_lastRem_nsh","_local","_lock","_lookupAnyRti","_lookupDynamicRti","_lookupErasedRti","_lookupFutureRti","_lookupNeverRti","_lookupVoidRti","_managedExecutors","_mayAddEvent","_mayAddListener","_mayComplete","_mayResumeInput","_memory","_microtaskEntryCallback","_name","_newFutureWithSameType","_normalized","_notifyActiveExecutorUpdated","_now","_objectToString","_ofArray","_onError","_onValue","_openFiles","_parseRecipe","_pendingRequests","_preparedStmtsCache","_readString","_recipeJoin","_recognizeType","_registerDoneHandler","_releaseImplicitLock","_releaseImplicitLocks","_removeListeners","_reset","_resultCompleter","_returnStatement","_rtiBind","_rtiEval","_sameShape","_scheduleImmediate","_setAsCheckFunction","_setBindCache","_setCachedRuntimeType","_setCanonicalRecipe","_setChained","_setErrorObject","_setEvalCache","_setIsTestFunction","_setKind","_setNamed","_setOptionalPositional","_setPrecomputed1","_setPrimary","_setRange","_setRemoveAfterFiring","_setRequiredPositional","_setRest","_setSpecializedTestResource","_setValue","_shapeTag","_shrOtherPositive","_sink","_specializedAsCheck","_startsWithData","_statements","_step","_stream","_streamController","_stringFromIterable","_stringFromJSArray","_stringOrNullLength","_stringToSafeString","_submitWorkFunction","_tableUpdateNotifications","_target","_toFilePath","_toListGrowable","_transformerSink","_trySetStackTrace","_types","_validateAndEncodeFunctionName","_waitsForCancel","_whenCompleteAction","_withValueChecked","_writeAuthority","_writeOne","_writeString","_zone","allocate","allocateGrowable","arrayAt","arrayConcat","arrayLength","arraySplice","asBool","asBoolOrNull","asInt","asRti","asRtiOrNull","asString","as_Type","broadcast","castFrom","castInt","charCodeAt","check","checkNull","checkString","collectNamed","compare","constructorNameFallback","createBuffer","createException","createObjectLiteral","createOptions","dateNow","dispatchRecordExtension","dispatchRecordIndexability","dispatchRecordInterceptor","dispatchRecordProto","eTextRep","empty","environment","erasedTypes","evalCache","evalTypeVariable","fromList","fromMillisecondsSinceEpoch","fromString","getDispatchProperty","getIndex","getLength","getProperty","getRuntimeTypeOfInterceptorNotArray","handleNamedGroup","handleOptionalGroup","handleStartRecord","hash2","hash3","hash4","identityHashCode","immediate","immediateError","interceptorFieldName","isArray","isDigit","isDriveLetter","isInt","isJavaScriptSimpleObject","jsHasOwnProperty","jsonEncodeNative","listToString","load","lookupSupertype","lookupTypeVariable","mapGet","mapSet","markFixedList","markGrowable","min","nested","nonEfficientLength","notSimple","now","objectKeys","objectToHumanReadableString","of","parseHexByte","pop","position","pow","printToConsole","propertyGet","provokeCallErrorOnNull","provokeCallErrorOnUndefined","provokePropertyErrorOnNull","provokePropertyErrorOnUndefined","push","pushStackFrame","read","receiverFieldName","recipe","regExpGetGlobalNative","regExpGetNative","secure","setToString","sharedEmptyArray","stack","store","stringConcatUnchecked","stringIndexOf","stringIndexOfStringUnchecked","stringLastIndexOfUnchecked","stringReplaceAllUsingSplitJoin","stringReplaceJS","stringSafeToString","stringSplit","substring1Unchecked","substring2Unchecked","thenAwait","toGenericFunctionParameter","tryParse","tryStringifyException","typeAcceptsNull","typeRules","typed","universe","unmangleGlobalNameIfPreservedAnyways","unsafeCast","waitWithTimeout","withBufferSize","withCloseGuarantee","withGuarantees","workerMainForOpen","zoned"], + "mappings": "A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAqGAA;MA6BEA,gEAQFA;K;wBASAC;;uBAjESA;MAoEPA;aACMA;UACFA;yBAtEGA;;MA2EPA;sBAhB6BA;QAkB3BA;UAAoBA,aAnBaA,EA0ErCA;QAtDIA;UAAmBA,aAsDvBA;QArDsBA;QAClBA;UACEA,aAvB+BA,EA0ErCA;kBAxEmCA;UA8B7BA,sBAAMA,kDAA4CA,IAD3BA;;2BAOTA;;QAEdA;;cAuCGC;;UCo7FAC;kCD96FDF;;MA7CNA;QAAyBA,kBAkC3BA;MA9BgBA;MACdA;QAAyBA,kBA6B3BA;MAvBEA;QAIEA,QAHcA,2BAsBlBA;MAjBcA;MACZA;QAEEA,QAIcA,8BAUlBA;;QAPIA,QAHcA,8BAUlBA;MALEA;cAUOG;;UCo7FAD;QCxkGPC,iDF8IOH;QAFLA,QAEKA,gCACTA;;MADEA,QAAOA,gCACTA;K;yBG9LUI;MAWNA;QACEA,sBAAiBA;MAEnBA,OAAOA,4BAAqBA,uBAC9BA;K;4BAmCQC;MAGNA;QACEA,sBAAMA;MAERA,OAsCEA,gBANiCC,6CA/BrCD;K;6BAiCQE;MACkCA;;MAAtCA,SAAoEA;K;uBA0hB7DC;MCtjBuCA;MDujBhDA,wBAA0BA,WAAGA,UAC/BA;K;0BE5cYC;MAGVA;QACEA;;;;;;;;;YASIA,WA4BRA;;YA1BQA,YA0BRA;;MAvBEA;;;;;;;;;;;;;;;;;;;UAmBIA,WAINA;;UAFMA,YAENA;;K;mCAIWC;MAGTA;sBAAsBA,SAAtBA;QACiBA;QAGVA;UACHA;QAEFA;;MAEFA,YACFA;K;oCAIWC;MAGTA;;QACmCA;QAAlBA;wCAAOA;QAAPA;QAGVA;UACHA;;MAIJA,YACFA;K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BCtMQC;MACKA;QACTA,OAUJA,uHAPAA;MADEA,OANFA,uFAOAA;K;sBC5DAC;;IAC4EA,C;qBAQ5EC;;IAC+DA,C;qBAO/DC;;IACmEA,C;iBCkFjEC;MAKEA;;MACJA;QAAgBA,YAIlBA;MAHgBA;MACdA;QAAgCA,kBAElCA;MADEA,SACFA;K;sBAuDaC;MACFA;MACAA;MACPA,wBACFA;K;qBAEWC;MACFA;MACAA;MACPA,gDACFA;K;oBA8oBAC;MAIAA,YACFA;K;sBAsRKC;MACHA;iBAAoBA,iBAAiBA,gBAArCA;wBAAoBA,iBACIA;UAAsBA,WAGhDA;MADEA,YACFA;K;oBCt3BEC;MACaA;MAEXA;QACaA;QACXA;UACEA,kBAAiBA;;MANvBA;IASAA,C;iCA6HQC;MACOA;QACXA,OAsBJA,sIAnBAA;MADEA,OAGFA,wGAFAA;K;6BAwIQC;MACQA;;MACHA;MACEA;QACXA,OAcJA,oGAXAA;MADEA,OAGFA,sEAFAA;K;6BAqFQC;MACNA;MAAaA;QAyCDC;QACHA;QAzCPD,OAsBJC,gGAnBAD;;MAqCcA;MACHA;MAvCTA,OAGFA,kEAFAA;K;mCA8VQE;MAEJA,OAgDJA,oGA7CAA;K;kCAuGkBC;MAAeA,OCzcjCA,8BDycyDA;K;+BAIvCC;MAAYA,OC7c9BA,oCD6c4DA;K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBRn9BvDC;6CUjFEA;MVmFPA;QAAuBA,gBAGzBA;MADEA,mBACFA;K;iBA6BKC;MACHA;;uBDK0CA;QCHxCA;UAAoBA,aAGxBA;;MADEA,OAAcA,oDAChBA;K;KAEOC;MACLA;;QAAqBA,YAsBvBA;MArBEA;QACEA;UAEEA,iBAkBNA;aAhBSA;QACLA,aAeJA;WAdSA;QACLA,cAaJA;WAZSA;QACLA,aAWJA;MATeA;MAQbA,aACFA;K;6BA0JaC;;oBACSA;;QAWhBA;mBATUA;MACZA;;;;MAIAA,WACFA;K;uBAKYC;;kEAGIA;MAIdA;QAIEA,YA0DJA;MAxDyBA;gCAAKA;0BAALA;MACvBA;QACEA;UAEEA,OAAOA,oBAoDbA;QAhDaA,SAFLA;UAEFA,2BAgDNA;QA9CIA,YA8CJA;;MAxCEA;QACEA,sBAAiBA;MAEnBA;QAEEA,OAAOA,oBAmCXA;MA/BEA;;0BAoBsBA;4BACWA,gBAA/BA;UACsBA;YAElBA,YAORA;;MADEA,OAAOA,uBACTA;K;6BAiEcC;MACRA;MWm5C0BC,uBXn5CFD;QAK1BA,sBW65G2BE,6BXz3G/BF;MAjCoBA;MAGPA,qBAFgBA,yCACAA;QCtNtBA,gBAGLA;QDsOEA;UAAwCA,mBAY5CA;6BAXsBA;QAClBA;wCACwBA;UACtBA;YAEEA,sBAMRA;;;MADEA,OW22C8BC,eA+gEDC,6BXz3G/BF;K;2BAecG;MACZA;MAA8CA;QAC5CA,OAAOA,qBAqBXA;MAnBEA;QACEA,OAgnFGC,sBA9lFPD;MAdWA;QAAPA,2BAcJA;MAXWA;QAAPA,+BAWJA;MARgBA;MAEdA;QACkCA,kBAALA;QAC3BA;UAAwBA,iBAI5BA;;MADEA,yBA9BcA,yCA+BhBA;K;yBA4BeE;;QAIXA,oBAAOA,KAIXA;MADEA,WACFA;K;iCAOcC;;mBAEIA;MAChBA;QACEA,OAAOA,sCAeXA;MAZEA;QACkBA;QAOdA;;;MAGJA,aACFA;K;mCAEcC;MACOA;;0BACnBA;;;UACiBA,sBAAMA;QACrBA;UACEA;aACKA;UACLA,oCAAqBA;UACrBA;;UAEAA,sBAAMA;;MAGVA,OAAOA,kCACTA;K;kCAEcC;MACZA;;;;UACiBA,sBAAMA;QACrBA;UAAWA,sBAAMA;QACjBA;UAAgBA,OAAOA,4CAG3BA;;MADEA,OAAOA,0CACTA;K;wCAGcC;MAMZA;MACSA,kDAD8CA;QACrDA,iDAeJA;MAZEA;QACkBA;QAOdA;;;MAGJA,aACFA;K;iCAGcC;MACZA;;QACEA;UACEA,OAAOA,6BAmBbA;QAbIA;UACaA;UAGXA,OAAOA,qBADcA,kFAU3BA;;;MADEA,sBAAiBA;IACnBA,C;2BAuIOC;;yCYrpB2BA;MZ8pBhCA,eAAOA,KACTA;K;sBAmBWC;MACTA,eAAiBA,SAC4BA,2DACHA,qDAC5CA;K;uBAKWC;MACTA,eAAiBA,SAC4BA,wDACHA,kDAC5CA;K;qBAKWC;MACTA,eAAiBA,SAC6BA,uDACHA,iDAC7CA;K;uBAKWC;MACTA,eAAiBA,SAC8BA,wDACHA,kDAC9CA;K;yBAKWC;MACTA,eAAiBA,SACgCA,0DACHA,oDAChDA;K;yBAKWC;MACTA,eAAiBA,SACgCA,0DACHA,oDAChDA;K;8BAKWC;MACTA,eAAiBA,SAITA,+DAE2CA,yDACrDA;K;yBAKWC;MAKTA,OAAgBA,8BAJQA,SACcA,sDACHA,6DAGrCA;K;gCA4TmBC;yBACHA;MACdA;QAAqBA,WAEvBA;MADEA,OAAOA,gCACTA;K;+BAEYC;MACNA;eAAUA;QAEFA;QACVA;;QAEmCA;;IAEvCA,C;OAqBFC;MACEA,sBAAMA;IACRA,C;SAQAC;MACEA;QAA+BA;MAC/BA,sBAAMA;IACRA,C;sBAKMC;MACJA;;QAAmBA,OSnkCnBA,4CTklCFA;MAdMA,mBAAmBA;MAIvBA;QACEA,OAAkBA,8DAStBA;MADEA,OAAkBA,+BACpBA;K;sBAKMC;MAIJA;QACEA,OAAkBA,oDAYtBA;MAVEA;QAIEA;UACEA,OAAkBA,oDAKxBA;MADEA,OSvmCAA,2CTwmCFA;K;sBAOcC;MACZA,OShnCAA,6CTinCFA;K;iBAkCAC;MAEEA,OAAOA,iCADSA,YAElBA;K;8BAOAC;MACEA;;QS1tCIA;;;MT8tCJA;QAKEA;;;QAoBKC;MAPPD,cACFA;K;mBAGAC;MAGEA,yBAAOA,eACTA;K;mBAOMC;MAEJA,MAAyBA,mDADbA;IAEdA,C;6BAYMC;MAKMA;;QAAIA;;;MAEEA;MAChBA,kBAAgBA;IAClBA,C;iCAGMC;MAKGA;MAGPA;QA8CkBA;;oJA3CFA;2BACIA;QACNA;QACZA;UAIgBA;UACNA;;yBAGEA;;wFAMEA,UAEPA;MAMHA;;MAFWA;MASjBA;QAEcA;WACPA;QAEOA;QADFA;;;MAQZA,OS15BAA,kGT25BFA;K;oCAuBAC;MACEA,sBAAMA;IACRA,C;mCAyKSC;MAULA;MAIUA,iCAJAA;MASYA;MAKtBA;QAA2BA;MAKXA;MACIA;MACTA;MACEA;MACEA;MAkBfA,OApIFA,+SAuHmBA,uHAqBnBA;K;uCAMcC;MAmDZA,OAReA;;;;;;;OAQRA,YACTA;K;2CAkCcC;MASZA,OAPeA;;;;;;OAORA,YACTA;K;wBA8CAC;;8BACqCA;MADrCA,gEAEuCA,UAFvCA;IAE6EA,C;mBAgDxEC;MAGLA;;QACEA,OA9BFA,2CA4CFA;;QAVWA,OAAsBA;QAA7BA,yCAA6BA,qBAUjCA;;MANEA;QAA6CA,SAM/CA;MAJEA;QACEA,OAAOA,uBAAmBA,eAG9BA;MADEA,OAAOA,6BACTA;K;kBAKOC;MACKA;iBACeA;;MAKzBA,YACFA;K;2BAEOC;MACLA;;QACEA,SA0GJA;kBAtGgBA;;mBAMCA;QAKKA;QACMA;UAKtBA;;cAEIA,OAAOA,qBAELA,uBAAsBA,qDAiFlCA;;;cA7EgDA;cAAtCA,OAAOA,qBA9HfA,kBA2MFA;;;MAxEEA;QAE8BA;QACMA;QACFA;QACOA;QACNA;QACOA;QACJA;QACOA;QACNA;QACOA;QAC/BA;QAAbA;UACEA,OAAOA,qBAAmBA,uBAAoBA,6BA2DpDA;;UA1DwBA;UAAbA;YAMEA;YAAPA,4BAA0BA,uBAAoBA,6BAoDpDA;iBAnDwBA,kDACPA,qDACAA,+CACAA,sDACAA,kDACAA,qDACAA,mDACAA;YACyBA;YAApCA,OAAOA,qBAhKXA,kBA2MFA;;;QArCIA,OAAOA,qBAzITA,oEA8KFA;;MA/BEA;QCzgEOA;UD2gEHA,OSn4CEA,0BTg6CRA;;;;;;;SAMSA;QAxBLA,OAAOA,qBSp2DTA,oETk2DcA,kDAoBhBA;;MAdEA;QAKEA;UACEA,OSx5CEA,0BTg6CRA;MADEA,SACFA;K;yBAkBWC;MACTA;;QACEA,gBAAiBA,WAiBrBA;MAfEA;QAAuBA,OAoBvBA,4BALFA;uBAduBA;MACrBA;QAAmBA,YAarBA;MAKEA;MAVAA;;MAIAA,YACFA;K;kBAwBIC;MAEFA;QAAoBA,OAAcA,uBAMpCA;MALEA;QACEA,OAAkBA,mCAItBA;MADEA,OAAcA,uBAChBA;K;kBAsBAC;;+BA+CSA;MA1CPA;QACoCA;QACEA;QACpCA,iCAkCKA;;MAhCPA,aACFA;K;kBAuCAC;MAUaA;MAFHA;;UAEJA,OAAOA,gBAWbA;;UATMA,OAAOA,oBASbA;;UAPMA,OAAOA,0BAObA;;UALMA,OAAOA,gCAKbA;;UAHMA,OAAOA,sCAGbA;;MADEA,sBAAMA;IACRA,C;0BAIAC;MACEA;;QAAqBA,WAMvBA;yBALiBA;MACfA;QAAkCA,gBAIpCA;MAHaA;;MAEXA,gBACFA;K;kCAEAC;MAOUA;MACRA;;yBAEYA;UADVA;;yBAGUA;UADVA;;yBAGUA;UADVA;;yBAGUA;UADVA;;yBAGUA;UAVZA;;UAYIA;;MAAJA;QACEA,OAAOA,mBA2BXA;MAZEA;;;;OAAOA,kCAYTA;K;uBA4BSC;;8BAaeA;6BAOJA;kCAMKA;sCAMIA;yCAMEA;gCAOLA;8BAMFA;2BAUNA;4BACKA;6BACAA;uBAMIA;QAKtBA;MA6BKA,sCA2eEA,+CAteFA,cA0gBRA;yCApgB0CA;MAmBDA,0BAbjCA;;UAEAA;;;;;;;MAoBFA;MAAJA;QACeA;;;QAwBOA;;MAbEA;;MAgBxBA,yDAAgCA,SAAhCA;0BACiBA;QAGfA;2BAESA;UASHA;UACAA;;UAbYA;gCAMKA;QAGvBA;UACEA;YACSA;;;QASXA;;;;+CAc+BA;4CASQA;MAczCA,mBACFA;K;qCAEOC;MAKLA;QAEEA,mBAqBJA;MAnBEA;QAEEA;UAEEA;QAGFA;;;;SAAOA,yCAYXA;;MADEA;IACFA,C;0BAEOC;;MAqBLA;;UAEIA;;;;WAAOA,uBA8EbA;;UAnEMA;;;;WAAOA,uBAmEbA;;UAxDMA;;;;WAAOA,uBAwDbA;;UA7CMA;;;;WAAOA,uBA6CbA;;UAlCMA;;;;WAAOA,uBAkCbA;;UAvBMA;;;;WAAOA,uBAuBbA;;UAXMA;;;;WAAOA,wBAWbA;;K;yBAIOC;MAMLA;QACEA,OAAOA,0EAiCXA;MA7BIA,OAAOA,kCAHGA,gDAgCdA;K;qCAEOC;;;MAULA;;UAIIA,sBA6YNA;;UA3YMA;;;;WAAOA,uCAsFbA;;UA1EMA;;;;WAAOA,uCA0EbA;;UA9DMA;;;;WAAOA,uCA8DbA;;UAlDMA;;;;WAAOA,uCAkDbA;;UAtCMA;;;;WAAOA,uCAsCbA;;UA1BMA;;;;WAAOA,uCA0BbA;;UAdMA;;;;;;WAAOA,wCAcbA;;K;oCAEOC;MAKEA;WA0JLA;QAA+BA;WAJ/BA;QAA4BA;uBApJlBA;MAIHA;MAAPA,SA+BJA;K;sBAyBFC;MACEA,OAAeA,iCACjBA;K;2BAwESC;MACLA,OW59EeC,iDAkDDD,sBX06EoBA,oBACpCA;K;2BAIOE;MAAoCA,cAAQA,UAASA;K;8BAIrDC;MAAuCA,cAAQA,aAAYA;K;mCAYpDC;MA/CdA;;aAkDIA;;ME11FKA;qBF41FmBA,gBAA1BA;qBACaA;;UAETA,YAINA;;MADEA,sBAAMA;IACRA,C;yBAgLKC;MAELA,OAAOA,yBACTA;K;yBA4sBkBC;gBa5rGWA;MbgsGfA,YAFaA;QAAMA,eAGjCA;MADEA,oDACFA;K;kBC3xHKC;MACHA;IAQFA,C;6BAwEAC;MAESA;0BAAoBA,CAAdA;kBAIYA,+BApIlBA;MAqIPA;QAvFAC;QAuFoBD,aFlBeE,EEqFrCF;;qBAlEgCA,+BAtIvBA;MAuIPA;QAAyBA,kBAiE3BA;+CAxMSG;MA4IPH;QACUA,sBAA6BA,CAApBA;QACjBA;oBAGuBA,+BAjJlBA;UAkJHA;YApGJC;YAoGwBD,aF/BWE,EEqFrCF;;yBArDgCA,+BAnJvBA;UAoJHA;YAAyBA,kBAoD/BA;mDAxMSG;;;;MA0JPH;QAQEA,WAsCJA;oCAnCgBA;gBAEHA;MAEXA;QACWA;SACGA;QA7HdC;QA8HED,aFzDiCE,EEqFrCF;;MAzBEA;SACcA;QACZA,kBAuBJA;;MApBEA;QACyBA;QAvIzBC,sBAkKoBD;QA3BlBA,SFlEiCI,EEqFrCJ;;MAhBEA;QACEA,OAAOA,sCAeXA;MAZEA;QAEEA,sBAAMA;;QAMiBA;QAtJzBC,sBAkKoBD;QAZlBA,SFjFiCI,EEqFrCJ;;QAFIA,OAAOA,sCAEXA;K;sBAYAK;MACcA;MAvKZJ,gEAwKaI;MAEbA,kBACFA;K;0BAEAC;MAGEA,OAAOA,2FACTA;K;6BAEAC;wCACoBA;MAGTA;QAAPA,4CAIJA;;QAFIA,OAAOA,oDAEXA;K;sBAoBKC;oBACSA;QAAwBA,MAGtCA;;MADEA;IACFA,C;8BAGKC;MACHA;MAAiCA;MACAA;MAEjCA;;MAMeA;MAEfA;QACgBA;QACJA;;QACVA,oBAAyBA,SAAzBA;oBACYA;UACyBA,SAAvBA;UACZA;YAEeA,6CADUA;YAEvBA;cA3ONR;;;;;;MAuPAQ,oBAAyBA,SAAzBA;kBACYA;yBACNA;gCAvSCA;;;;;;;;IAgTTA,C;aAmCKC;MAESA;iBAAcA;MAqBlBA,iCACNA,cALMA,yBAAsBA,cAFtBA,yBADsBA,cAAtBA,yBAAsBA,cADtBA,yBAAsBA,cADtBA,yBAAsBA,cAHtBA,wBANmCA,CAGzCA,cACAA;MAwBFA;QACqBA;QACnBA;UAGmCA;QAA/BA;UACFA,4BAAoBA,SAApBA;sCACoBA;YAClBA;cAmBSA;;;oBAZFA;2BACOA;6BACEA;MAELA;MACMA;MAEGA;IAE5BA,C;yBAEAC;MAEEA,OADeA,2BAEjBA;K;6BanJQC;6BAGeA;6BAKJA;MAEjBA;QAGEA,WAsBJA;MAnBEA;QACEA,gBAkBJA;MANWA,yBAFWA;QAElBA,uCAMJA;MADEA,OAAOA,oBACTA;K;6BCnOSC;;;;;;;;;;;SAeQA;MAiBbA;QAA+CA,aAKjDA;MADEA,sBAAMA,gDADgBA;IAExBA,C;2BCAGC;MACHA;;QACEA,OAnHKC,wCA0HTD;;QAL0BA;QAAtBA,ODgCOA,KAAyBA,uBC3BpCA;;QAFIA,QAAOA,wBADMA,sDCybSA,cDtb1BA;K;qBAYOE;MAtIED;QA+ILC,OAAOA,kCAGXA;MADEA,kBACFA;K;wBAEOC;MAMOA;MACZA;QAAmBA,eAIrBA;MADEA,OAAOA,6CDyD6DA,OAAhEA,QC1DYA,6BAElBA;K;wBAIAC;+BAGMA;QACFA,OAAOA,6CAGXA;MADEA,aACFA;K;6BAEOC;MAKLA;MACAA;QACEA,OAAOA,iEASXA;;QDtL4BA;QCuHnBA;QA2DLA,sCAtDAA,iCA0DJA;;MADEA,OAAOA,yDACTA;K;2BAEOC;MAKLA;MAGoBA,oDAApBA;;QA9LOA,yCA+LwDA;QAE1CA;;MArMdA;MAwMPA,sCACFA;K;mCAMOC;MAKLA;;QACEA;UACEA,kBAgCNA;0BA7B0BA;QAEtBA;4BACeA;QAGfA,sCAuBJA;;MA1PSA;QA2OUA,eAenBA;MA1PSN,YAkPQM;QAEXA,+BAaGA,iBAPTA;MADEA,OA5HOA,iBA2HQA,WADFA,uCArHXA,iCAwHJA;K;+BAwGOC;MAMLA;;QAxWOA;QA0WLA;UAAeA,eAcnBA;QAZIA,OAAOA,8DADmBA,qBAa9BA;;MA3PSA;QAkPLA,kDDnX6CA,gBCsI7CA,oCA+OMA,kEAOVA;MAJ4BA;MAAyCA;MAC9DA;QAAoBA,eAG3BA;MAFwBA;MACtBA,OAAOA,4CAA4BA,mBAAaA,6BAClDA;K;+BAeOC;MAQLA,OAFaA,6CACAA,uBAEfA;K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBEhZKC;MACHA,mCAAgBA,gCAAhBA;IACFA,C;oBAIKC;MACHA,mCAAgBA,gCAAhBA;IACFA,C;qBAIKC;MACHA,mCAAgBA,iCAAhBA;IACFA,C;eAiCEC;;eAEEA,YAFFA;IAGAA,C;;;;;gBCifEC;MAEFA,cACFA;K;uBAMKC;IAULA,C;qBAIKC;MACHA;MAASA;QAAgBA,WAM3BA;MALiCA;MAAZA,4BAAYA;MAC/BA,YAAyBA,yBAAzBA;QACEA,uCAAYA;MAEdA,aACFA;K;sCAmBUC;MAKNA;;MA+TEA;MA9TFA,SAGFA;K;wCAojBQC;MAKNA;MAE0BA,4CA5nCHA;MA6nCvBA,OAkCEA,8CAjCJA;K;2BAkFsBC;MAClBA,yBAA6CA;K;0CAsEzCC;MAKNA;MAGAA,OAkCEA,+CAjCJA;K;mCAiHQC;MAA+BA,OAuCUA,uBAvCyBA;K;wCAKlEC;MAKNA;MACAA,yBAsCEA,wCAGAA,8CAtCJA;K;oBAyxBGC;MACHA;QACEA,sBAAMA;IAEVA,C;oBASIC;MACFA;MAAgCA;QAGoBA;;QAHpBA;MAAhCA;QAIEA,sBAAMA;MAGRA,UACFA;K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BR9mEaC;MAi7EPA,gBAk0CkCA;MA5uHpCA,2BAVIA,yEAqvHyBC,oBA1uH/BD;K;8BAyEYE;oBA6pHmBC;MA3pH7BD;QACEA,OAAOA,gCA8pHoBA,UA3pH/BA;MADEA,iCACFA;K;2BAgJcE;MAGZA,UAsgHmCA,iBArgHrCA;K;YAkJEC;MASFA,OAAiBA,kDACnBA;K;mCAeKC;MAQHA;;QAAgCA,WAuBlCA;2BAhU0CC;gCAuGKD;MA0M7CA;QACUA,0BAzMJA;4BAkhH+BF;MA4EjCE;MAh5GJA;QAAmBA,YASrBA;MARYA,yDAq0GqBE;MA6E7BF;MA34GFA,UACFA;K;eAgCIG;;kBAyxG6BN;MAvxG/BM;;;;;;UAMIA,UAsINA;;wBA+oGiCA;UAlxGDA;UAM1BA;YAAuDA,UA6H7DA;UA5HMA,OAAiBA,mEA4HvBA;;wBA+oGiCA;UAxwGDA;UAM1BA;YAAuDA,UAmH7DA;UAlHMA,OAAiBA,mEAkHvBA;;sCAheWA;UAiXmCA;UAMxCA;YAIEA,UAqGRA;UAnGMA,OAAiBA,6CAgvGgBC,6CA7oGvCD;;oBA+oGiCE;UA3uGLF;0BA1XjBA;UA4XsBA;UAM3BA;YAEEA,UAkFRA;UAhFMA,OAAiBA,8EAgFvBA;;kBA7f6CG;sBAiDlCH;UAoYmBA;UAMxBA;YAAmDA,UAkEzDA;UAjEMA,OAAiBA,6DAiEvBA;;0BA+oGiCI;UA7sGCJ;kCA1XvBA;UAkYDA;UAMJA;YAKEA,UA2CRA;UAzCMA,OAAiBA,8FAyCvBA;;sBA9aWA;yBAomHgCA;UAvtGbA;oBAgrGGD;UAzqGLC;UACtBA;YAEEA,UAuBRA;UArBMA,OAAiBA,yFAqBvBA;;qBA2oGiCK;UAtpG3BL;YAAmBA,UAWzBA;kCAwrGkDA;UA7rG5CA;YAAsBA,UAK5BA;UAJMA,eAINA;;UAFMA,sBAAMA;;IAEZA,C;oBAEQM;MAQkBA;0BA4qGiBA;;MA3qGzCA;sBAooG+BA;QAloGRA;QACrBA;UACYA;;;MAIdA,kCACFA;K;oBAEQC;MASkBA;4BAupGiBA;;MAtpGzCA;uBAwpGgDA;;wBAzCjBA;QA3mGRA;QACrBA;UACYA;QAEZA;;MAWFA,oCACFA;K;iCAEoBC;MASkBA;+CAjXhCA;;+CAUAA;wCAgXgCA;kCA5VhCA;2BAmWmBA;MAMvBA;QAGEA,yBAaJA;MA5ZMC;YAUSD;YAUAA;YAiBAA;MAsXbA,aACFA;K;iBAkBQE;;MAINA,aACFA;K;uBAKKC;6BAEaA;MAChBA;QACEA;UACEA,OAAOA,kCAabA;QAJMA,OAggG2BA,oBA5/FjCA;;MADEA,WACFA;K;0BAOIC;MACFA;MAAQA;+BA7CRA;UAkDeA;UACXA;YAAiBA,UAIvBA;;MADEA,OAAOA,sBACTA;K;gBAKIC;MAUOA,uBA3ETA;QA2EEA,8BASJA;MAu/FoCA;QA5/FhCA,OAAOA,4BAKXA;MADEA,OAAOA,+BADWA,0BAEpBA;K;sBAIIC;sBAiBQA;;MAIVA;QAAiBA,iBAUnBA;;QALIA,iBAKJA;MADEA,UACFA;K;iBAKIC;MAEuCA,gBAD/BA;MACVA,iEACFA;K;gCAOIC;iCACgBA;4BACNA;MACZA;QAAmBA,YAErBA;MADEA,OAAOA,0DACTA;K;oCAGIC;sDAzIFA,iEA6JQA;cAMUA,kEAEdA;;MAIJA,UACFA;K;yBASIC;;;oBAu5F8CA;MAp5FhDA;QAjgBiBA;QAghBVC;QAZLD,UAGJA;;MADEA,WACFA;K;8BAOKC;MAEHA,2BADUA,wBAEZA;K;2BAqCKC;MAEOA;MACVA,OAAOA,kCADmCA,8BAE5CA;K;qBAgBIC;MACFA;MGrjCaC;QHqjCSD,oCG3jCJC,UAMwBA,2BH8jC5CD;MA1FyBA,iCA/KvBE;MAkQAF;QAAyBA,kBAO3BA;MANaA;QAETA,OA8xFiCA,0BA9xFLA,KAIhCA;MA6zFoCA;QA/zFNA,OAxDlBA,4BA0DZA;MADEA,OAAOA,sBACTA;K;qBAIKG;MAuCHC,YAx9BID;MAk7BJA,uBAh7BME,2CAi7BRF;K;wBAQIG;;;wBAEoBA;MACtBA;QAAiBA,qBAenBA;MAZsBA;iCAAMA;MArpBTA,4DAqpBfA,0BAAkBA;MAOpBA;QACkDA;mCAAMA;QArpBvCA,yDAqpBeA,0BAAkBA;;MAGlDA,OAhqBiBA,wEAiqBnBA;K;eAGKC;MACHA,OAAOA,oBAxnBUA,mDAynBnBA;K;6BAuDKC;MAGCA;MACSA,OA9mCPA;MAgnCNA,OAtmCSA,mBAumCXA;K;sBAKQC;MACNA;;QAA2BA,kBAiD7BA;MA/CMA;QAAoBA,eA+C1BA;oBA0nFiCpC;MArqF/BoC;QACEA,6CA0CJA;MAvCEA;QACEA,iBAsCJA;MAnCEA;QACEA,oBAkCJA;MA/BqBA;MACnBA;QAAwBA,iBA8B1BA;MA5BEA;uBAwpFqC7B;QAjpF/B6B,WA59BGA;iBA5FHA;UA+jCFA;YACEA,+BAaRA;;YAVQA,oBAURA;UARMA,2BAQNA;;aAJSA;QA8BmBA,+CAkmFW3B,kBAzlH5B4B;QA2/BQD;QAjCfA,wCAGJA;;MADEA,qCACFA;K;4BAEQE;iBAwnFyBtC;;UAnnF3BsC,eAcNA;;UAVMA,eAUNA;;UAPMA,kBAONA;;UAJMA,gBAINA;;MADEA,WACFA;K;8BAgBQC;;;MAWFA;;;;WAIOA;;;;;;;;;;;;;;;;;;;;;;;;;;MAvtCFA,OATHA;MAutCNA,0BACFA;K;gCA0CKC;MAGCA;MACJA;QAAoBA,OAAOA,qBAG7BA;MADEA,OAAOA,+BADSA,mDAElBA;K;wCAQKC;MACHA;QAAoBA,WAMtBA;MADEA,OAzwCSA,IA4xHsBC,qBAlhFjCD;K;sBAGKE;MAGCA;MACJA;QAAoBA,OAAOA,qBAY7BA;mBAhtCeA;MA8sCKA,uBAriBlBA;QAkiBEA,oBAKJA;MADEA,uCACFA;K;0BAIKC;MAGCA;MACJA;QAAoBA,OAAOA,qBAoB7BA;MAdEA;QAAgDA,YAclDA;MAwgFoCA;QAphFNA,WAY9BA;mBA5uCeA;MA0uCKA,uBAjkBlBA;QA8jBEA,oBAKJA;MADEA,uCACFA;K;eAMKC;MAGCA;MACJA;QAAoBA,YAwBtBA;MAvBEA;+BA9kBAA;UAulBIA,kBAhwCSA,0BA8wCfA;QAZIA,WAYJA;;MAVEA;QAOEA,WAGJA;MADEA,YACFA;K;yBAMKC;MAEHA;QAEkBA,uBA/mBlBA;UA+mBIA,iCAWNA;QATIA,WASJA;;MAPEA;QAIEA,WAGJA;MADEA,YACFA;K;iCAKQC;MAGFA;MACJA;QAEMA;UACFA,aAMNA;aAl4CWA;QA+3CPA,aAGJA;MADEA,mCAAMA,qCAANA;IACFA,C;yCAKQC;MAGFA;MA14CKA;QA44CPA,aAGJA;MADEA,mCAAMA,qCAANA;IACFA,C;oBAEWC;MAETA,OAuCAA,iCAxCwBA,yBA2XQA,+BAzXlCA;K;kBAIIC;MACEA;QAAwCA,WAM9CA;MADEA,mCAAiBA,iDAHSA,iFAkXMA,iGA/WhCA;IACFA,C;kBAagBC;MAIZA,OAHiCA,4CAgWHA,eA+gEDzJ,kGAz2E/ByJ;K;0BAOAC;;IAAqEA,C;iCAE7DC;MACNA,OAHFA,iCAGuCA,+BACvCA;K;eAaGC;MACCA;MACJA,OA78CSA,OA4xHsBxD,yBA90EVwD,yDA98CZA,WA+8CXA;K;aAIKC;MACHA,qBACFA;K;aAKQC;MACNA;QAAoBA,aAEtBA;MADEA,mCAAiBA,mDAAjBA;IACFA,C;UAIKC;MACHA,WACFA;K;UAIQC;MACNA,aACFA;K;YAIKC;MACHA,YACFA;K;WAIKC;MACHA,0CACFA;K;WAOKC;MACHA;QAAoBA,WAGtBA;MAFEA;QAAqBA,YAEvBA;MADEA,mCAAiBA,iDAAjBA;IACFA,C;YAKMC;MACJA;QAAoBA,WAItBA;MAHEA;QAAqBA,YAGvBA;MAFEA;QAAoBA,aAEtBA;MADEA,mCAAiBA,kDAAjBA;IACFA,C;aAKOC;MACLA;QAAoBA,aAEtBA;MADEA,mCAAiBA,mDAAjBA;IACFA,C;cAKQC;MACNA;QAAoBA,aAGtBA;MAFEA;QAAoBA,aAEtBA;MADEA,mCAAiBA,oDAAjBA;IACFA,C;UAIKC;MACHA,iEAEFA;K;UAKIC;;QACkBA,aAEtBA;MADEA,mCAAiBA,gDAAjBA;IACFA,C;WAKKC;;QACiBA,aAGtBA;MAFEA;QAAoBA,aAEtBA;MADEA,mCAAiBA,iDAAjBA;IACFA,C;UAIKC;MACHA,gCACFA;K;UAKIC;MACFA;QAAoBA,aAEtBA;MADEA,mCAAiBA,gDAAjBA;IACFA,C;WAKKC;MACHA;QAAoBA,aAGtBA;MAFEA;QAAoBA,aAEtBA;MADEA,mCAAiBA,iDAAjBA;IACFA,C;aAIKC;MACHA,gCACFA;K;aAKOC;MACLA;QAAuBA,aAEzBA;MADEA,mCAAiBA,mDAAjBA;IACFA,C;cAKQC;MACNA;QAAuBA,aAGzBA;MAFEA;QAAoBA,aAEtBA;MADEA,mCAAiBA,oDAAjBA;IACFA,C;eAKSC;MACHA;QAA+BA,aAErCA;MADEA,mCAAiBA,qDAAjBA;IACFA,C;gBAKUC;MACRA;QAAoBA,aAGtBA;MAFMA;QAA+BA,aAErCA;MADEA,mCAAiBA,sDAAjBA;IACFA,C;qBAEOC;MACEA;MACPA,uCA6sEyCA,SA7sEzCA;QAGMA,+BAmqEyBA;MAhqE/BA,QACFA;K;sBAEOC;;iCA2pEgCpE;2BAzlH5BoE;MAs8CTA;QAEEA,aAAaA,iDAmBjBA;yBAuqE2CA;MAkBrCA;wBAlBqCA;MAlrEzCA;QACEA;QAEAA;UAAqBA;QAChBA,0BAuoEwBA;QAtoE7BA;0BAooEmCA;QAjoEnCA;;MAEFA,eACFA;K;wBAEOC;MAKEA;MAGPA;6BA6pEyCA;QA3pEvCA;UAC2BA;;6CAEWA;+BAEVA;QAC5BA;UACEA;wFAKFA;6BAEsDA;UAAOA;UAArCA;8CAAcA;4EAAdA;2BAsmEKA;yBAJA9E;UAhmE3B8E;YAEoBA;;QAItBA;;QA3B0BA;uBAnhDepE;+BAqElCoE;qCAsILA;mDAw+GqCA;qCA99GrCA;mDA89GqCA;wBA18GrCA;yBA08GqCA;MApnEjBA;MAIxBA;QAGMA,wDAskEyBA;MA/jE/BA;QACEA;QAEAA;UAGMA,wDAyjEuBA;QAnjE7BA;;MAGFA;QACEA;QAEAA;UACEA;mBAqiE6BA;YAniE3BA;UAGEA,qCAuiEuBA,sCAFMA;;QA7hEnCA;;MAGFA;sBAEuCA;;;MAOvCA,0EACFA;K;gBAKOC;;kBAygE0B/E;MAtgE/B+E;QAA4BA,eAgE9BA;MA/DEA;QAA6BA,gBA+D/BA;MA9DEA;QAA0BA,aA8D5BA;MA7DEA;QAA2BA,cA6D7BA;MA5DEA;QAAyBA,YA4D3BA;MA1DEA;8BAogE+BrC;QAlgElBqC;uCA8/DkB/E;QAx/D7B+E,6EAkDJA;;MA/CEA;QAEEA,qBAAmBA,kBAu/DUjF,gCA18DjCiF;MA1CEA;QAESA,4BAg/D4BxE;QAt+DnBwE,gBAvoDTA;QAyoDPA,iBAHcA,2FA+BlBA;;MAzBEA;QACEA,OAAOA,yCAwBXA;MArBEA;QACEA,OAAOA,iDAoBXA;MAjBEA;QAGEA,OAAOA,0BAw9DsB1E,8BA7jHtB0E,OAmnDXA;MAPEA;gBA3rD2CpE;2BA4rDboE;QAEEA;QAAvBA;4CAAOA;QAAdA,qBAAOA,IAIXA;;MADEA,UACFA;K;kBAEOC;6CD35DEA;MC65DPA;QAAuBA,gBAEzBA;MADEA,mBACFA;K;sBAkLiBC;yBAXXC,GASAD;MAIFA;uBAbEC,GASAD;MAOFA,WACFA;K;4BAEWE;;2BAhBPA;wBAkBUA;MACZA;QACEA,OAAOA,sCAcXA;WAbSA;QAiwDsBA;QAliDtBA;QA5NsBA;QAC3BA;;QAGgBA;QAYTC;QAVPD,iBAIJA;;QAFIA,YAEJA;K;sBAKYC;MACRA,qCA3CAA,WA2C+CA;K;4BAoCvCC;MACRA,OAAOA,8BA7EPA,WA6EiDA;K;kBAa1CC;MA0wDPA;wBA32DAA;;MAoGFA;QAAmBA,YAIrBA;MAkEoBA,sBADGA;MAqsDrBA;MAvwDAA,UACFA;K;+BAEWC;;2BAn3DkCA;MAy3D3CA;QACUA,mBAx3DNA;MAknHFA;MAtvDFA;QAAmBA,YAIrBA;MAiDoBA,sBADGA;MAqsDrBA;MAtvDAA,UACFA;K;kBAEWC;;2BAh3DkCA;MAk3D3CA;QACUA,mBAj3DNA;oCAkhH+BvF;MA4EjCuF;MAxuDFA;QAAmBA,YAUrBA;MAHYA,uEAmpDmBxF,2BAjmHtBwF;MAkrHPA;MAluDAA,UACFA;K;+BAiCWC;SAvrELA;SAIAA;MA2rEJA,UACFA;K;gCAmGWC;MAilDPA;wBA32DAA;MA6RFA;QAAmBA,YAErBA;MApzEIC;SAgIEC;SAkLAA;MAwgEGF;MAykDPG,QA92DEA;MA8RFH,SACFA;K;gCASWI;MAmkDPA;sBA5EiC7F;wBA/xDjC6F;MAgTFA;QAAmBA,YAMrBA;MAFIA;MA0jDFD,QA92DEA;MAiTFC,SAKFA;K;gCAEWC;MAMTA;;2BA+9C6B/F;;QA79CvB+F;;YAESA;cAELA,4CA69CmBjG;QAj+C3BiG;UAKEA,eAUNA;aATWA;UACLA,iBAQNA;;MAp2EIJ;SAgIEI;SA4CAA;MAurEGA,GAjjEHA;MAijEJA,mDACFA;K;gCAEWC;MA0hDPA;sBA5EiC/F;wBA/xDjC+F;MAyVFA;QAAmBA,YAMrBA;MAFIA;MAihDFH,QA92DEA;MA0VFG,SAKFA;K;gCAEWC;MAMTA;;qBA9vE+CA;QAgwEzCA;UACFA,eAYNA;aAXWA;UACLA,OAoHFA,+DA1GJA;;UARMA,iCAQNA;;MA34EIN;SAgIEM;SA4CAA;MA8tEGA,GAxlEHA;MAwlEJA,mDACFA;K;gDAEWC;MAm/CPA;;wBA32DAA;MA4XFA;QAAmBA,YAMrBA;MAv5EIP;SAgIEQ;SA4CAA;SAsIAA;MAgnEGD;MAi+CPL,QA92DEA;MA6XFK,SAKFA;K;kCAccE;;4BAw7C2BA;MAr7CvCA;6BA84C6BA,GAFMnG;MAt4CnCmG,QACFA;K;uCAEcC;;4BA46C2BA;MAx6CvCA;uBA06C8CA;4BAhDfA;4CAOFA,OAFMpG;;MAp3CnCoG,QACFA;K;iCAiBWC;MAKFA;;oBAs4CgCC;QAl5CnCD;MAq7CFA,gBA32DAA;MAqcFA;QAAmBA,YAMrBA;MAh+EIX;SAgIEa;SA4CAA;SAeAA;oBAkqHmCA;WA5xHnCA,2BA8xH0CA;SA7iH1CA;MA+rEGF;MAk5CPT,QA92DEA;MAscFS,SAKFA;K;+BAuCWG;MACLA;cA0yCyBzG;sBAIAQ;QAsD3BiG,mBA3pHKA;;QAg0EyCA;QAATA;;MAhBrCA,aAmzCiCxG;MA4EjCwG,gBA32DAA;MA+fFA;QAAmBA,YAMrBA;MA1hFId;SAgIEe;SA4CAA;SAeAA;SAuHAA;MAqvEGD;MA41CPZ,QA92DEA;MAggBFY,SAKFA;K;8BA6BWE;MALPA;;gBA80CAA,QA32DAA;MA0iBFA;QAAmBA,YAMrBA;MArkFIhB;SAgIEiB;SA4CAA;SAeAA;SAuHAA;MAgyEGD;MAizCPd,QA92DEA;MA2iBFc,SAKFA;K;gCAqEWE;MA5BPC;sBAl0EUA;uCAyEVC;qDAw+GqCA;uCA99GrCA;qDA89GqCA;0BA18GrCA;2BA08GqCA;;MA5uCvCD;QAIIA;QAEAA;;MAKJA;QAIIA;QAEAA;;MApa6CA;MAkqD/CD,gBA32DAA;MA6nBFA;QAAmBA,YAMrBA;MAxpFIlB;SAgIEqB;SA4CAA;SAeAA;SAuHAA;MAm3EGH;MA8tCPhB,QA92DEA;MA8nBFgB,SAKFA;K;uCA0BWI;MAJTA;8BAsoCmChH;gBA4EjCgH,QA32DAA;MAsqBFA;QAAmBA,YAYrBA;MARIA;MAosCFpB,QA92DEA;MAuqBFoB,SAWFA;K;uCAEWC;MAOTA;;wBA6oCuCA;QA1oCNA;QAC/BA;wBAkmC2BA;mBAJAlH;;YA1lCvBkH;;;QAGJA;UACwBA;UAMEA;UAMxBA,OAAOA,iHAcbA;;;MAtvFIvB;SAgIEuB;SA4CAA;SAeAA;MA0jFGA,GAn8EHA;MAm8EJA,mDACFA;K;kBA6HcC;MAMZA,0EAeFA;K;iBAqBWC;;uBAhB6BA;sBACDA;sBAmBnBA,gBAAlBA;QAXwCA;QAatCA;UACMA;aACCA;UACDA;aACCA;UACDA;;UAEJA;UACAA;;cAEIA;;cArBRA;cAyBQA;;cAzBRA;cA6BQA;;cA7BRA,WAkCUA,uBA/C8BA,UACCA,IAeNA;cAiC3BA;;cApCRA,WAuaiBA,qDApbuBA,IAu6BXC;cA/2BrBD;;cA3CRA,WAxoBOA,qCA2nBiCA;cA4DhCA;;cA/CRA,WAhoBOA,qCAmnBiCA;cAgEhCA;;cAnDRA,WAxnBOA,qCA2mBiCA;cAoEhCA;;cAvDRE,iBATqCA;8BA88BEA;cA14B/BF;;cAGAA;cACAA;;cAGAA;cACAA;;wBAhFgCA;cAaxCA,WAyEoBA,kCAERA,0BAvF6BA,IAeNA,oBAPIA;cAmF/BA;;wBA5FgCA;cAaxCA,WAqFoBA,kCAERA,0BAnG6BA,IAeNA,oBAPIA;cA+F/BA;;cA3FRA;cAAAE,iBATqCA;8BA88BEA;cAr2B/BF;;cAGAA;cACAA;;cApGRE,iBATqCA;8BA88BEA;cA71B/BF;;cAy2BNG,2BA19BmCA;cAmWrCC,wBAvWwCD,UACCA;cAs6BZA;cA15B7BC;;cA4GQJ;;cA5GRE,iBATqCA;8BA88BEA;cAr1B/BF;;cAi2BNK,2BA19BmCA;cA0WrCC,6BA9WwCD,UACCA;cAs6BZA;cA15B7BC;;cAoHQN;;cAy2BNO;cA79BFA,WA09BEA;cA19BFA;cAAAL,iBATqCA;8BA88BEA;cA7nBhCF;cAhNCA;;cAGAA;;;;MAxH2BA;MA6HnCA,OAAOA,uBA7IiCA,UACCA,SA6I3CA;K;uBAOWQ;MACLA;;sBACcA,SAAlBA;QA5IwCA;QA8ItCA;UAAyBA;QACXA;;MA7IhBA;MAgJAA,QACFA;K;4BAEWC;MAOLA;;sBACcA,SAAlBA;QA7JwCA;QA+JtCA;UACEA;YAAeA;UACHA;;UAC0BA;YSljGKA;;YTijG/BA;UACPA;YAGLA;;;MAuzBFA;MAnzBFA;mBApLwCA;4BACCA;uBAs6BZ7H;mCAIAQ;QAvoDRqH,6CAqoDctH,UAtejCuH;QA5pCFD;UACEA,+CAA4BA;QAquB9BA,WAnuBiBA;;QAmuBjBA;MAmLAA,QACFA;K;+BAEYE;MAEMA;yBArMwBA;;eAgBLA;MAuLnCA;QA1LAA,WA4LwBA;;QAEXA,wCA1M4BA;oBAs6BZ/H;;YA15B7B+H,WAmMkBA,wEAvMqBA;YA8MjCA;;YA1MNA,WA6M4BA;YACtBA;;;IAGRA,C;2BAOYC;MArNyBA;yBAhBKA;;;MA0PxCA;QAEEA;;YA5OiCA;YA+O7BA;;YA/O6BA;YAmP7BA;;YAtPNA;YA0PMA;;;QA1PNA;MAgQ6BA;MA7PMA;MAgQnCA;;UAhQmCA;;yCA7yBgBA;;;UAkjC9BA,8CApRoBA;UA5hFvCjH;oBAUSiH;oBAUAA;oBAiBAA;UAmgFXA,WAqRgBA;UAEZA,MAoBNA;;UA3SEA,WAgSgBA,uCA4nBmBA;UAtnB/BA,MAKNA;;UAFMA,sBAAMA,oDAA8CA;;IAE1DA,C;oCAgCYC;MAxUyBA;MA0UnCA;QA7UAA,WApnBOA,qCAumBiCA;QA4VtCA,MAOJA;;MALEA;QAjVAA,WA5mBOA,qCA+lBiCA;QAgWtCA,MAGJA;;MADEA,sBAAMA,qDAA+CA;IACvDA,C;wBAEeV;MAynBXA,+BA19BmCA;MAmWrCA,wBAvWwCA,UACCA;MAs6BZA;MA9jB7BA,YACFA;K;kBAWWW;MACTA;QAEEA,OAAiBA,wDArpCgCA,KA+pCrDA;WALSA;QACUA,WAAiCA;QAAhDA,yDAIJA;;QAFIA,WAEJA;K;mBAEYC;;uBA8kB6BA;MA5kBvCA;QAEaA,wDA4kBiCA;IAzkBhDA,C;wBAEYC;;uBAqkB6BA;MAlkBvCA;QAEaA,wDAkkBiCA;IA/jBhDA,C;uBAEWC;;0BAghBoBrI;MA9gB7BqI;QACEA;UAAgBA,kBAihBW7H,SA3f/B6H;mCA1mGSA;2BA4oHgCA;QArjBrCA;UACEA,oBA6gByBA,WA3f/BA;QAfIA;iCA0gB2B7H;0BAJAR;aAlgB3BqI;QAAgBA,kBAWpBA;MATEA;QACEA,sBAAMA;iCA5mGDA;gCAspHgCA;QAriBrCA,oBA8f2BA,WA3f/BA;MADEA,sBAAMA,mDAAsCA;IAC9CA,C;aAsCGC;;kBA7wGKA;;QAAoBA,UAApBA;MA4tHgCA;MA5cxCA;QACWA;QA8hBTA;;MA3hBFA,aACFA;K;cAiBKC;MAEHA;;QAA8BA,WAwJhCA;MArJMA;QAAcA,WAqJpBA;eA8RiCvI;MAhb/BuI;QAA0BA,WAkJ5BA;MA/IMA;QAAcA,YA+IpBA;WA8RiCvI;QA1aVuI,WA4IvBA;MAzI0BA;MACxBA;QAGMA,+BAuayBA,EAJA5H;UAnamB4H,WAqIpDA;eA8RiCvI;;;QA1Z7BuI;UACEA,OAAOA,iCA6ZoBzI,gBAlSjCyI;QAzHIA,oDAyHJA;;;QApHIA;UACEA,OAAOA,wBAqZoBzI,yBAlSjCyI;QAjHIA,kBAiHJA;;MA7GEA;QACOA,6BA8YwBzI;UA7Y3ByI,YA2GNA;QAzGIA,OAAOA,uBAEDA,yDAuGVA;;MA/FEA;QACEA,OAAQA,6CACJA,wBA+XyB7F,yBAlSjC6F;MApFEA;QACMA,qCAqXyBzI;UApX3ByI,WAkFNA;QAhFIA,OAAOA,gCAIDA,gDA4EVA;;MAtEEA;QACEA,OAAQA,6CACJA,iCAsWyB7F,gBAlSjC6F;MA9DEA;QAAsBA,YA8DxBA;MA3DiCA;;QAE7BA,WAyDJA;MArDMA;;QAAqDA,WAqD3DA;MAhDEA;;UAC2BA,WA+C7BA;QA9CIA;UAAsCA,YA8C1CA;mBA3xGWA;;yBAomHgCA;;UAjXfA,YAwC5BA;QAwVMA;;QA3XFA;0BAqU6BA;;UAlUtBA,4DACAA;YACHA,YA8BRA;;QA1BIA,OAAOA,gCA4TsBlI,kCAlSjCkI;;MAlBEA;;UAC2BA,WAiB7BA;QAhBIA;UAA+BA,YAgBnCA;QAfIA,OAAOA,gDAeXA;;MAXEA;QACEA;UAAgCA,YAUpCA;QATIA,OAAOA,iDASXA;;MALEA;QACEA,OAAOA,8CAIXA;MADEA,YACFA;K;sBAEKC;MAUCA;MAECA,6BAoR0B9H;QAnR7B8H,YA0FJA;qBA94GWA;;uCAsILA;;qDAw+GqCA;;MA5SzCA;QAA2DA,YA4E7DA;MA1EMA;uCAprGAA;;qDA89GqCA;;MAhSzCA;QAEEA,YA8DJA;MA3DEA;gCA6RgDA;QA1RzCA,+CAiPwBA;UAhP3BA,YAuDNA;;MAnDEA;gCAqRgDA;QAhRzCA,+CAuOwBA;UAtO3BA,YA6CNA;;MAzCEA;gCA2QgDA;QAtQzCA,+CA6NwBA;UA5N3BA,YAmCNA;;0BA1uGMA;;2BA08GqCA;;MAzPzCA;sBAgNqCA;;UA7MjCA;YAA4BA,YAsBlCA;wBAuLuCA;UA3MjCA;UACAA;YAAyCA,YAmB/CA;8BAkLmCA;UAnM7BA;YACEA;cAAiBA,YAgBzBA;YAfQA;;qBAiP0CA;UA9O5CA;YAAiCA,YAYvCA;qBAkOkDA;UA3OvCA,kCAkMsBA;YAlM0BA,YAS3DA;UARMA;;;MAGJA;kBAuLiCA;UAtLwBA,YAI3DA;QAHIA;;MAEFA,WACFA;K;uBAEKC;;iBAqLkClI;;MA3KrCkI;uBAhnDIvD,GASAuD;QAonDFA;UAAkBA,YAmCtBA;QAlCIA;UA6JmCA;UA3JjCA;;sBAxUAA;QA4UFA;UAAqBA,YA4BzBA;yBAoK2CA;QALnCA,oEA1uD+CC;QAkjDnDD;UAE+BA,qEAkJIA;QA9InCA,OAAOA,8DA/9GAA,aAk/GXA;;MADEA,OAAOA,mCAj/GEA,kCAk/GXA;K;yBAEKE;;uBAkKsCA;MAjJzCA;QA+BSA,iCA2EsBA;UA1EzBA,YAKRA;MADEA,WACFA;K;oBAEKC;;mBAxhHMA;;wBAkoHgCA;;QA7FnBA,YAaxBA;WAuCuCnI;QAjDnBmI,YAUpBA;MAREA;QAGOA,mCA8CwBA;UA7C3BA,YAINA;MADEA,WACFA;K;cAEKC;kBAmC4B7I;;;QAhC3B6I;UACKA;YACuBA,iCAkCD/I;MArC/B+I,SAIFA;K;aAGKC;kBA0B4B9I;MAxB/B8I,0FAKFA;K;uBA2CcC;MAFRA;;sBAqBqCA;MAfvCA;kBA1BmCA;QAoC/BL;;IANNK,C;0BAKeL;MAA+BA,2DAzuDOA,IA2uDLA;K;;;;;;;;;;;;;;;;;;;;0CUr3HhCM;MACdA;MAESA,QADLA;QACFA,+DA0CJA;cAxCMA,iCACAA;QAAiCA;QAEzBA;QACCA;;QASIA,0BAGbA,yBATcA,uEAWhBA;QAEAA,OAAOA,mEAoBXA;aAJWA,QADEA;QACTA,qEAIJA;MADEA,OAAOA,uDACTA;K;0CAEYC;MAKVA,uBAGEA,yBAPcA;IASlBA,C;gDAEYC;MAKVA,kBAGEA,yBAPcA;IASlBA,C;yCAEYC;MACJA,sBAAsBA,aAAMA;IACpCA,C;sBAMaC;MC4KaA;MDzKxBA,OAAOA,4DACTA;K;eAkBAC;;;;IAiBAA,C;uBAEAC;;;;IAwBAA,C;4BAiEWC;MACXA,OAjCAA,2BEuIAC,eAAyBA,gBAAzBA,2BFvIAD,sCAkCFA;K;mBAUQE;MAINA;eACUA;MACVA,gBA1BwBA,QA2B1BA;K;eASQC;MACNA;IACFA,C;gBAQQC;MACNA;IACFA,C;iBAOQC;MAENA,0BACEA,2BACAA;IAEJA,C;kBASKC;MACgDA;;wBAG1BA;;QAWvBA;;;;UAEAA;;UEwBFA,wBAAyBA;gBAsJvBA;gBACAA;UF1KAA;;;IAEJA,C;2BAIkBC;;;;;;;;;;;;;OACAA;MAwBhBA,OAAYA,CRqTeA,0CQrTgBA,wFAG7CA;K;qCAkWSC;MAA+BA,QAAiCA;K;gCGvrBrDC;MAChBA;MAAUA;QACeA;QACvBA;UAAwBA,iBAG5BA;;MADEA,QAAkBA,sBACpBA;K;iBC+NQC;MFiGRA,4BAAyBA,gBAAzBA;MGrPEA,eAAeA,aDsJLA;MAUVA,aACFA;K;sBAsDQC;MACMA;;QAEDA;;QADXA;QAEEA;QF0BJA,oBAAyBA,gBAAzBA;QExBwDA;QAAOA;QFxS7DA;;UCjBFC,uCAE+BA;;;QCsTpBD;QAAPA,SAIJA;;MADEA,+BAAcA,uBAAwBA,2BACxCA;K;uBAwCQE;MAC4CA;aFdpDA,eAAqDA,gBAArDA;MACEC;MEaAD,SACFA;K;yBAoDQE;MACNA;ME1Z8BA;QF2Z5BA,sBAAoBA;MF3ExBA,wBAAyBA,gBAAzBA;MEkFEA,wBAAgBA;MAchBA,aACFA;K;eA+CuBC;MFhJvBA;;iCAAyBA,gBAAzBA;;YEwJMA;;MAKYA;;QAmCdA;;sBACYA;UACVA,wBAAYA;;;mBA+BVA;QAAJA;UAESA;kCAA+BA;UAAtCA,SAqBNA;;QAnBaA,MAATA,8CAASA;;QAxCXA;QAyCEA;kBAKIA;UAGKA;UAAyDA;UAAGA;UF9iBvEA;;YCjBFJ,uCAE+BA;;;UC6jBlBI;UAAPA,SAUNA;;gBALMA;gBACAA;;;MAGJA,cACFA;K;mBFtkBUC;;gBACMA;oBACIA;QAAYA,WAKlCA;MAJoBA;MAClBA;QAAyBA,WAG3BA;sBAFgCA;sBAAmBA;MFCvCA;QACGA;MEDbA,kBACFA;K;uBAwBWC;MACLA;WV+mBuBA,oBU9mBNA;QACDA;QAClBA;UAAyBA,kBAkB7BA;;MAhBEA;QAGYA;UACWA;UACnBA;YFnCSA,sCEoCiBA;;;;;WFrCpBA;QACGA;ME6CbA,OCnDAA,mCDoDFA;K;qBAoSEC;;MA4IuBA;QADrBA;QACAA;MA5IFA;IAEAA,C;iBAOAC;8BAAoDA,gBAApDA;MAmIuBD;QADrBA;QACAA;MAnIFC;IAA6DA,C;4BAqRjDC;;;8CA/QYA,yBAiRtBA;QA3JOA;cA4JLA;;MAEFA;QAOeA;QAmKfA,mCCzyBFC,iBf6LAD;Qc2cIA,MA6BJA;;0BA3B2BA;aAClBA;MACPA;QAGmBA,qEAAmBA;cA7RtCA,gBAA0BA;cAC1BA;QA8REA;QACAA,MAmBJA;;MAhBWA;kBACGA;UACeA;;UCrpBZC;;Qf6LDD;McsddA;QAM+BA;QAC7BA,4BAAoBA;QACpBA;QACAA,MAOJA;;;MAHSA,iCAAwBA;IAGjCA,C;iCAkJYE;;;;QAIGA;eA9cQA;QAAOA;QAAeA;QAidzCA;UACEA;YAnWGA;YAqWMA,yCACMA,kBACAA;;UAGfA,MA0KNA;;cArKoBA;gCACyBA;QACzCA;YACWA;UACTA,sCAAsBA;gBACtBA;sCACwBA;;mBAGGA;yBAAOA;cAQ/BA;cACDA;QAKkCA;iBArrBhBA;UAqrBGA;;UAvCpBA;QAuCLA;mBAvrBeA,OAAOA;UAyrBPA;mBAAWA;YVuRdA,6CAAqBA;;YUvRlBA;UAAbA;uBAE0BA;YA1YvBA;YA2YMA,yCACMA,kBACAA;YAEbA,MAqIRA;;qBAjI0BA;UAApBA;;;YA4FIA;qBAbAA,SA9wBmBA;UA8wBvBA;YAxE+BA,yFAyE7BA;eACKA;YACLA;cA9BsBA,8EA+BpBA;iBAGFA;YAzBcA,gEA0BZA;UAKJA;;qBAIIA;;uBACAA;yCAzsBuCA,YAAsBA;;YAwsB9BA;UAAnCA;2BAKmBA,SAASA;mBAxmBTA;cA+MNA,uBAAUA;oBAC3BA;cACOA;oBAtEPA,YACYA,qBAAkCA;oBAC9CA,wBAA4BA;oBAgelBA;cACAA;;cAEAA;YAKJA,MAeRA;;;uBAXqBA,SAASA;QA1aXA,uBAAUA;cAC3BA;QACOA;mBA0aAA;mBACcA;QADnBA;UA/fmBA;gBADrBA;gBACAA;;UAkgBeA;gBA7ffA,gBAAwBA;gBACxBA;;cAggBEA;;;IAEJA,C;yBAkEOC;MACUA;QACfA,OAAOA,4FAaXA;MATmBA;QACfA,OAAOA,yEAQXA;MANEA,sBAAoBA;IAMtBA,C;kBK9iCKC;MACHA;oBAAiBA,gBAAjBA,wBAAuDA;;oBAEpCA;;QAEjBA;;QACAA,KA+EMA;;IA7EVA,C;uBAEKC;;;QAKDA;;;;aAIIA;UPpBJA,6CAAyBA,OOqBMA;;IAGnCA,C;0BAMKC;MAnDHA;wBAsDoCA;MACpCA;;cAEOA;UPpCLA,6CAAyBA,OOqCMA;;sCAGlBA;IAGjBA,C;kCAQKC;;cACCA;MAAJA;QACEA;mCACwBA;QACxBA,MAiBJA;;MA7FEA;8BAgF4CA;MAC5CA;aACQA;;;mCAG0BA;aAC1BA;sDACeA;QAErBA;;;IAIJA,C;qBAwCKC;;uBACsBA;WACXA;QAGZA,wCAHYA;QAIZA,MAcJA;;MAZ6CA,KAN7BA,qDAO0BA;Qfg/BxBA,Mev/BFA,iCfu/BuBA;;Qeh/BSA;MAA9CA;QAEEA,oDAIEA;QAEFA,MAGJA;;Yf4f6BA;Me7ftBA,uBAA+BA;IACtCA,C;iCC89EUC;MAGJA,OC7nDJA,sBACiBA,oDADjBA,iCD6nD8BA;K;qCEvhFtBC;MAONA;oBA0sBEA,wGAJAA,uGAnsBJA;K;eA0sBGC;MACHA;;QAAiCA,MAMnCA;;QAJIA;;QADFA;QAEEA;QACKA,ClBvKoBA;;IkByK7BA,C;4BA8BEC;MDhuBcC,UjByhBaA;;;;aiBxhBZA;8BAgE8BC;MC+pB7CF,0DD/pBSE,sDC+pBTF;IAMiDA,C;qDD9sBzBG;MAImCA;MAAzDA,OAAOA,kDACTA;K;sDAWgBC;;QAEEA;MACAA;QACdA,OAAOA,2FAWXA;MAPkBA;QACdA,OAAOA,wEAMXA;MAJEA,sBAAUA;IAIZA,C;oBAsWGC;IAAiCA,C;qBAGjCC;MAC8BA;MAAOA;MAAnCA,CjBwHsBA;IiBvH7BA,C;oBAGKC;IAAoBA,C;gBEriBzBC;MAKEA;;QACEA,iBAAUA;;QADZA;QAEEA;QAC0BA;QAC1BA;UACEA,0BAAoBA,mBAAmBA;;UAEvCA;;IAGNA,C;mBAIKC;MAKgBA;MACiBA;QAClCA,4BAA0BA;;QAE1BA;IAEJA,C;0BAkBmDC;MAIjDA,OAAOA,0DAGTA;K;mBAIKC;MACgBA;MACiBA;QAClCA,4BAA0BA;;QAE1BA;IAEJA,C;8BCiMEC;6CAIWA,yEAJXA;IAWOA,C;eP5OCC;gBbunBmBA;MannBXA,YAHWA;QAGvBA,2CAMJA;MAJEA,OAAYA,2BAELA,mCAETA;K;4Bbw6CGC;MAOHA,mBAAiBA,oBAAOA;IAC1BA,C;oBAEKC;MACHA,iCAA+BA;IAGjCA,C;YAEEC;MACAA;;;MAA6BA;;YAAVA;MAAnBA;QAAoCA,OAAOA,UAY7CA;;MANQA;;QAEGA;QAAPA,SAIJA;;;;K;iBAEEC;MAOAA;;;MAA6BA;;;YAAVA;MAAnBA;QAAoCA,OAAOA,aAY7CA;;MANQA;;QAEGA;QAAPA,SAIJA;;;;K;kBAEEC;MAQAA;;;MAA6BA;;;;YAAVA;MAAnBA;QAAoCA,OAAOA,oBAY7CA;;MANQA;;QAEGA;QAAPA,SAIJA;;;;K;yBAEgBC;MAMdA,yBAAOA,MACTA;K;8BAEwBC;MAMtBA,sDAAOA,MACTA;K;+BAE8BC;MAM5BA,sEAAOA,MACTA;K;sBAEYC;;;MAMPA,WAAIA;K;0BAEJC;MAMHA;MAGiCA;WAHlBA;QArcCA,MAqcDA;QArcsBA;QAwc7BA,gDAEAA;;MAGRA;IACFA,C;oBAEMC;MAUsBA;MAFKA;MAE/BA,OAAaA,gCAHEA,wBACFA,uDAGfA;K;4BAEMC;MAOJA;MAGkCA;MAFeA;WADlCA;QACFA;MS50CaC;MT80C1BD,OQ7+CoBA,oER8+CtBA;K;cAEKE;Mc5jDHA,cd6jDeA;IACjBA,C;gBAEKC;MACEA,CAx9BsBA;IAy9B7BA,C;aAEKC;MAOHA;MAQIA;MAMAA;MARUA;MAEdA;yBACwBA;MAKxBA;QACkBA;;;QAELA;;MA5cbA,uBACkBA,iBACKA,sBACCA,uBACOA,8BACKA,mCACCA,oCACTA,2BACIA,+BACNA,yBACQA,iCACdA,mBACDA,kBACeA;yCAmEQC;MACxCA;QAp6BIA,EAq6BFA;MA8XJD,SACFA;K;YAmPEE;MA4BAA,OAAOA,uCACTA;K;aAmEEC;MAIGA,OAAKA,CA/0CmBA,0EAi1CxBA,iBAAYA;K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MqBh6DfC;;mBAxDQA;MAQAA,sBAgDRA,wDA3BAA;K;2BAqROC;uBACOA;MAGZA,qCACFA;K;2BAEYC;MAIVA;;;;IAQFA,C;0BAoBOC;MAIOA;MAIZA;MClVFC;MDoVED,YACFA;K;+BA6HQC;MAQAA,6BC1dRA,+DD+eAA;K;wCAOQC;MACNA,OAAOA,iGCvfTA,uFDwfAA;K;sCAMQC;MACNA,OC/fFA,qFDggBAA;K;sCA8fQC;MAA0BA,OAkClCA,qDAlCqDA;K;gCAuT9CC;MAIOA;;;MAMZA,YACFA;K;2BAyGAC;;QACEA,aAAaA;MADfA;IAEAA,C;wBExwCQC;MACiBA;MACvBA,mBAAcA;MAGdA,aACFA;K;uBCnGcC;MAEZA;MAAIA;QACFA,cAwBJA;MCoZAA;;QDxaMA;QACFA;;UAEKA;QACLA,eAAUA;;;QAYVA;gDAAiBA;QAAjBA;;iBCub0CA;MDpb5CA,sCACFA;K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCEjBiBC;MAKLA;;;QAIJA;;QpB81CyC5O;MoB11CrC4O,kDADVA;QACUA;QACRA;UAASA;;;MAOXA,YACFA;K;6CAKeC;MAMoBA,wEAAmBA;MACpDA;QAAqBA,WAevBA;MAbWA,oCAD0BA;QACjCA,yDAaJA;MAVEA,OAAOA,wCAELA,+BAQJA;K;gCAEeC;MAIbA;;QACSA;QAAPA,SAGJA;;;MADEA,WACFA;K;6BC2BYC;MAQNA;QACFA,sBAAMA;MAORA;QACEA,sBAAMA;MAMRA;QACEA,sBAAMA;IAMVA,C;iCCmScC;MACZA;;UAEIA,+BAgBNA;;UAdMA,kCAcNA;;UAZMA,2BAYNA;;UAVMA,0BAUNA;;UARMA,6BAQNA;;UANMA,0BAMNA;;UAJMA,wCAINA;;UAFMA,SAENA;;K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBClhBcC;MAmHCA;MACbA;QACEA,kBAAMA;MApHNA,aAAuCA;K;qBAiHxBC;MACJA;MACbA;QACEA,sBAAMA;MAERA,aACFA;K;6BAKmBC;MAIIA;;mBAIaA;;MAClCA;QANWA;MAOXA;QACqBA;QACbA;QAANA;UACWA,wBAASA,mCAAaA,QAAcA;UAVtCA;;;;MAeXA;QAAgBA,OAAQA,iBAE1BA;MADEA,aACFA;K;qCAUWC;MAQTA;QAAsCA,oBAIxCA;MADEA,gCACFA;K;yBAQoBC;MAGaA;mBADLA;;;iBvBwmCsBC;;;MuBhmChDD;QAC2DA;QAAlBA;mCAAOA;QAA7BA,iDAAsBA;QACvCA;UAAsBA,WAgB1BA;QAfkBA;;MAETA;MAAPA;kCAAMA;;aAENA;QAEEA;UAC2DA;UAAlBA;qCAAOA;UAA7BA,iDAAsBA;UACvCA;YAAsBA,WAO5BA;UANoBA;;QAETA;QAAPA;4CAAMA;;;MAEeA;QAAGA;mCAAMA;mBAANA;;QvBsVfC;MuBtVXD;QAA0CA,OAAOA,yBAEnDA;MAsFiCA;MAvF/BA,OAsFFA,4DArFAA;K;yBAuBoBE;MAClBA;;QAAkBA,WA6CpBA;MA3CcA,sCAASA;MAKrBA;QAAmBA,WAsCrBA;gB3BjDmDC;;;6BAAMA;qBAA7BA;MAAuBA;6BAAMA;uBAA7BA;;MAAuBA;6BAAMA;M2BoBrDD;QAEEA,OAAOA,qDA2BbA;MAzBIA;QAEEA,OAAOA,gDAuBbA;MArBIA,WAqBJA;K;0BAQWE;;;;QACOA;UAAUA;UAAPA;sCAAMA;qBAANA;;UAAHA;;;QAA0BA;;MAC1CA,WACFA;K;4BAiBkBC;MvB6+BgCJ;;;sCuBr+BhDI;QAC2BA;QAAPA;oCAAMA;mBAANA;QAAlBA;yCAAYA;;;MAEdA,mBACFA;K;gCAGQC;MACNA;;QAAgBA,OAAOA,yBASzBA;MAREA;QAAgBA,OAAOA,wBAQzBA;MAPEA;QAAgBA,OAAOA,wBAOzBA;MAHMA;QAA2BA,OAAmBA,mCAASA,+BAG7DA;MAF0CA;MAAnBA,SAEvBA;K;oCAEQC;MACDA;;MAELA;QAIEA;UvB28B8CN;;UuBx/BjBM;UAgD3BA,OAjDNA,uCAyEAA;;QAtBaA;;MAEXA;QvBo8BgDN;;QuBx/BjBM;QAuD7BA,OAxDJA,4DAyEAA;;MAfEA;QvB+7BgDN;;QuB57BlCM;QA5DiBA;QA6D7BA,OA9DJA,4DAyEAA;;MAPgCA,iCADbA;MvBw7B+BN;MuBr7BhDM;QACSA;QAAPA;mCAAMA;;QACEA;;MArEqBA;MAuE/BA,OAxEFA,4DAyEAA;K;uCAMQC;MAGNA;MCxUgBA;QDyUdA,sBAAMA;MAEUA;MAClBA;QAAyBA;MC3NDA;MD8NxBA;QAAgBA,OAAOA,yBA6BzBA;MA3BaA;wCACXA;QACEA;;iCAAIA;;;MAEDA;MvBgELC;MA0UAD;sBuBxYsBA,uBAAiBA;MvBw5BSP;gCuBl5B1BO,sBAAgBA;gCAChBA,sBAAgBA;gCAChBA,sBAAgBA;+BAETA;MAxG/BA;MA4GEA;QACcA;;QAEAA;MAEdA;QAAgBA,OAAQA,oBAE1BA;MADEA,gBACFA;K;8BAoCWE;MAMTA;;QACEA,QAaJA;MAXEA;QACEA,YAUJA;6EAPEA;QACeA;QAASA;oCAAOA;oBAAPA;QAAtBA;;0CAAYA;;;MAEdA;QACEA;;yCAAYA;;;MAEdA,gBACFA;K;oBAmCYC;MAOSA;;mBACFA;;kBAEAA;wFAEjBA;QACgBA;oCAAOA;uBAAPA;QACCA;QAAqBA;QAApCA;;0CAAYA;;QACGA;;MAEjBA;;gDAAYA;;IACdA,C;6BA8BWC;MAMWA;;MACHA;QAEfA,OAAOA,uEAYXA;MAVyBA;MACvBA;0DAEAA;QACEA;;yCAAYA;;;MAEGA;MAAbA;wCAAYA;sBAAZA;QAGGA;MAAPA,iBACFA;K;oBAGYC;MAOUA;;mBACHA;;kBAEAA;;MACLA;4CAAOA;0CAAPA;MACOA;gDACnBA;QAC0BA;QAAVA;qCAAOA;uBAAPA;QACYA;QAA1BA;;yCAAYA;;QACJA;;MAEVA;;0CAAYA;;IACdA,C;8BAmEWC;MAMLA;;MACJA;wEACEA;UACWA;qCAAMA;qBAANA;UAAYA;0CAAWA;mCAAXA;UACrBA;YAAiBA,aAIvBA;;MADEA,aACFA;K;uBAIYC;MAQNA;wGACJA;QACWA;mCAAMA;mBAANA;QAAYA;wCAAWA;iCAAXA;QACrBA;;yCAAYA;;QACZA;;MAEFA;QACWA;mCAAMA;uBAANA;QACTA;;yCAAYA;;QACZA;;MAEFA;;0CAAYA;;IACdA,C;uBAIYC;MASNA;wGACJA;QACWA;mCAAMA;mBAANA;QAAYA;wCAAWA;iCAAXA;QACrBA;;yCAAYA;;QAGEA;;MAEhBA;QACWA;mCAAMA;uBAANA;QACTA;;yCAAYA;;QAGEA;;IAElBA,C;uBA4SYC;MAQVA;;QAEEA,MAgBJA;oHAbEA;QACuCA;QAAnBA;+CAAkBA;+BAAlBA;QACOA;8CAAiBA;6CAAjBA;QACPA;QAAlBA;;QAGIA;;aAENA;QACUA;8CAAiBA;6BAAjBA;QACUA;QAAlBA;;QACIA;;IAERA,C;sCAiDWC;;;MAKLA;iCAAMA;iBAANA;MAAJA;QAAkCA,YAKpCA;MAHwCA;MAAPA;kCAAMA;MAARA,wDAAEA;MAC/BA;QAAgCA,YAElCA;MADEA,oBACFA;K;0BJ19BaC;MACXA,sBAAoBA;IAKtBA,C;aAgGWC;MAaSA;MAPlBA;QAAmBA,YAGrBA;MADEA,sBAAMA;IACRA,C;gBA4CaC;MACHA,4CAAkCA;;QAA1CA;MACiCA;MACjCA;IACFA,C;oBAoCQC;MAEAA;sEACAA;MACNA;QAEEA,sBAA2BA,SAA3BA;;MAMFA,aACFA;K;kBAQQC;MACYA;;MAClBA;QACEA,8BADFA;;MAIAA,WACFA;K;iBAYQC;MACNA;MAAaA;QAAYA,OpC9PvBC,gBANiC3Y,4CoC4QrC0Y;MALoBA;MAClBA;QACEA,8BADFA;MAGAA,WACFA;K;0BAsBQE;MACOA;;MACbA,aACFA;K;+BAeQC;MAKKA;;MACPA;MAAIA;MAARA;QACkBA;QAChBA;UACEA,sBAAiBA;QAEnBA;UACEA,SAcNA;;MAXgBA;QAIIA;mBAgBHA;;UAEEA;QAjBfA,OAwBgBA,0DAFTA,gCAhBXA;;MAJgBA;QACZA,OAAOA,oDAGXA;MAqCEA;QAA6BA;MAC7BA;QAA2BA;MAzHTC;MAkFlBD,OAwCkBA,oCAvCpBA;K;8BAGQE;MACNA,OAAkBA,yCACpBA;K;+BAgBcC;yBAKQA;MACpBA;QAAkBA,SAGpBA;MADEA,OAAkBA,gHACpBA;K;iBAiCQC;MAMFA,OvBheNA,6BAO0BA,mFuB+dzBA;K;0BAyDaC;MACgBA;MACvBA;QAAqBA,aAa5BA;mBlCnLoBA;;UkCsLgCA,cAbVA;eAC7BA;;QAYuCA,cAVZA;QAC7BA;UASyCA,kCAPVA;;MAGxCA,aACFA;K;YAuGeC;MACsBA;;MACnCA;QAAqBA,sBAAMA;mBACTA;4CACkBA;QAAmBA,gBAMzDA;MALkBA;;;MAIhBA,UACFA;K;mBA+BcC;MAMZA;;wBAAwBA;QAASA;QvBvkB1BA,OAAyBA;;QforCtBC;MsC7mBVD;QACEA,WAqBJA;MG1rBeA;qBH4qBaA,yBAA1BA;oBACaA;QACSA;UA/SJE;;uEAsTDF,yBACAA;;MAGjBA,sCACFA;K;sBAwEsBG;MAAWA,+BAAsBA,YAAsBA;K;sBM5YlEC;MAKTA;;QACEA,sBAAiBA;MAEnBA;QAEEA,sBAAiBA;MAOnBA;QAEEA,sBAAoBA;MAQtBA;MAEAA,6BACFA;K;wBAoIcC;MACDA;;MAEXA;QAAkBA,aAIpBA;MAHEA;QAAiBA,wBAGnBA;MAFEA;QAAgBA,yBAElBA;MADEA,0BACFA;K;yBAUcC;MACZA;QAAcA,aAGhBA;MAFEA;QAAaA,cAEfA;MADEA,eACFA;K;uBAEcC;MACZA;QAAaA,aAEfA;MADEA,cACFA;K;atBxcMC;;IAcAA,C;qBuBdJC;MACAA;;;iBACYA;UAAeA,YAG7BA;;MADEA,sBAAoBA;IACtBA,C;wBAUeC;MAA0BA;;MACvCA;;QAAmCA,qBAALA;;MADFA,SAE7BA;K;sBpChHaC;MACgBA;QAC1BA,OAAOA,qBAMXA;MAJEA;QACEA,OTijGG/X,sBS9iGP+X;MADEA,O6BiMkBA,iC7BhMpBA;K;6BA8BaC;MACXA;MACAA;MACAA;IACFA,C;mBAYAC;;IAA8BA,C;kBAuD9BC;;IAEqBA,C;uBAcrBC;;IAEoBA,C;8BAcXC;MACLA,eAA+CA;K;oBAyCnDC;;IAG6DA,C;oBAe7DC;;IAQgEA,C;mCA4BrDC;MAOTA;QACEA,sBAAiBA;MAEnBA,YACFA;K;8BAiBWC;MA8KTA;QAEEA,kBAAiBA;MAxKnBA,YAOFA;K;8BAgBWC;MAUTA;QAEEA,sBAAiBA;MAEnBA;QACEA;UAEEA,sBAAiBA;QAEnBA,UAGJA;;MADEA,cACFA;K;+BAWWC;MACTA;QACEA,sBAAiBA;MAEnBA,YACFA;K;eAoDAC;wBqC3bkBA;MrC2blBA;IASqEA,C;yBASrEC;;IAMqEA,C;qBA8FrEC;;IAAqCA,C;uBAcrCC;;IAAkCA,C;eAyBlCC;;IAAwBA,C;gCAaxBC;;IAAkDA,C;uBsCnmB1CC;MAA4BA,OAOpCA,yBAPuDA;K;oBAiDjDC;;IAA8DA,C;kC9BgxBtDC;MAKZA;MAAIA;QACFA;UAEEA,cAgBNA;QAdIA,6CAcJA;;MAZ+BA;MAC7BA;;QAEEA;;QAGAA,UALFA;UAKEA,gBALFA,sBAKmBA;QAAjBA,CALFA;;MqBvTYA,6CAAqBA;MrB8TjCA,sCAIFA;K;iCAYcC;MAKZA;MAAIA;QACFA,6CAYJA;MqBjXAA;MrBwWEA;;QAEEA;QqBzVUA,EAAZA,wCAAsBA;;QrB4VpBA,UALFA;UAKEA,gBALFA,sBAKmBA;QAAjBA,CALFA;;;iBqBzU4CA;MrBiV5CA,sCACFA;K;2BAwCGC;MAwB6BA;;;;;;QAIzBA;UAAeA,MAkFxBA;QAjFwBA;QACpBA;uBACeA;QACfA;;MAQGA;QACHA;UAAoCA,MAqExCA;QApEqBA;mCAAMA;QAANA;QACGA;mCAAMA;QAANA;;QAEKA;QACzBA;QACKA;UACHA;YACEA,+BAAYA;YACZA,MA4DRA;;UA1DyBA;UACCA;qCAAMA;UAANA;mCACKA;;UAEHA;UACtBA;iBAGOA,iBAAPA;YAEgBA;YACdA;YACAA;;;;gBAUcA;2CAAMA;gBAANA,sBAAmBA;gBAC7BA;;cAEFA;cACAA,MAgCVA;;;UA7B4BA;UACHA;mCACMA,2BAA2BA;;;uBAOtCA;QAEhBA;QAfgBA;;;;mCAqBmBA;;QACzBA;mCAAMA;QAANA,sBAAmBA;QAC7BA;UAEEA;UAzBcA;;;MA4BlBA;QACEA;MAEFA;MACAA;IACFA,C;e+B72BaC;MAsBTA;WAWqBA;QAVaA;QAAkBA;QAAlDA,OzCRKA,oBADAA,qBADAA,qByCUuDA,kCAyShEA;;WA/RuBA;QANTA;QACAA;QACAA;QAHVA,OzCHKA,oBADAA,qBADAA,qBADAA,qByCUHA,4CAkSNA;;MA7RcA;MACAA;MACAA;MACAA;MzCNLA,8BADAA,qBADAA,qBADAA,qBADAA,qByCWHA;MALFA,cA8RJA;K;SCreGC;MACaA;kBACHA;MACbA;QtBkCAA;;QsB/BEA;IAEJA,C;0BCoYUC;MZ+HRC;;kBY4oGsBD;MAYpBA;MACAA,uCZtpGgBC,UAAUA;;MY6pGxBD,+BAA2BA,CAThBA;MA5BfC,WZ5lG8CA;MYhJ5CD,sEAAYA,SACdA;K;aA2aWE;;iBAsEGA;MAGZA;QAmnIWA;gCAAKA;QAALA,wCACJA,0BACAA,yBACAA,0BACAA;QArnILA;UAGEA,OAAeA,6BAD0BA,6DACLA,SA6P1CA;aA5PWA;UACLA,OAAeA,iBAAOA,uDAAwCA,SA2PpEA;;MAnPgBA;MAKdA;;;;;;;;MASYA;QAIVA;yBAEcA;MAChBA;QAEUA;;yBAaMA;yBACAA;yBACAA;0BACCA;6BACGA;MAMpBA;QAOcA;MAHdA;QAYuCA;WARhCA;QAEOA;MAMdA;QAoBaA;wBAXGA;;MAEhBA;QAzE+CA;QA6E7CA;UAKWA;UAAJA;YAIIA;cACWA;gBACbA,kEACGA;;gBAzFiCA;;cAlB/CA;YAwGSA;cAUKA;gBAEJA;;gBApHVA;cAgHSA;gBAeLA;kBAEMA;oBAEFA;sBAKOA;wBACUA;wBA6+HyBA;;wBAh/HpBA;wBAm/HCA;;sBA7+HFA;sBAKnBA;sBACAA;+BAEUA;sBAzHfA;;;2BA0HUA;sBAgBHA;sBADAA;sBAZMA;sBAGNA;;;oBA1BaA;yBAyCRA;oBAKLA;sBAgBAA;sBAFAA;sBACAA;sBAbMA;sBAINA;;;oBAXoBA;;uBA2BSA;kBAK/BA;oBAgBAA;oBAFAA;oBACAA;oBAbMA;oBAINA;;;kBAX8CA;;;;;;;MA8BxDA;QAUEA,OAg3GJA,0BAz3G+BA,UACnBA,iIAgCZA;MA+rBEA;QAEEA;UACWA;;UACJA;YACLA;UAxxBqDA;;;MA8xBzDA;QACsBA;QAEPA;QAENA;QACHA;QAAJA;UZxnDgBC,mCY0nDGD;UAEVA,6CADFA,kBAAMA;;;QAUbA;QAjzBuDA;;MA2yB3CA;MAUJA;MA7uBVA,OAmvBYA,kFAFCA,0DAruBfA;K;uBA+GcE;MAEVA;MADFA,OAAYA,uDAGOA,UACjBA,oBAGJA;K;wBAuHaC;MACXA,sBAAMA;IACRA,C;yBAuBYC;MAQNA;;;;UAEaA;;UAIgBA;wCAAKA;UAALA;;QACnBA;QACZA;UACEA;YAC0BA;YACxBA;cACEA;cACAA;;YAEFA;;UAMFA;;QAEFA;UAEEA;YAAmBA;UACnBA;;QAEoBA;QAAfA;QAAPA;;oCAAMA;;QAENA;UACEA;YAEiBA;;;YA/BJA;YAgCXA;;UAEFA;;QAIFA;UACEA;YAAqBA,MAc3BA;UAbMA;;QAEFA;;;MAMFA;IAKFA,C;2BAmBYC;MAEVA;;QAAkBA,sBAAMA;MACRA;mCAAKA;MAALA;QAEFA;QACZA;UAAmBA;QACnBA,YAKJA;;MAFEA;MACAA,WACFA;K;iCAQwBC;;;;MAMtBA;8CAGAA;QACEA;UACyBA;UAAhBA;wCAAKA;UAALA;UAEPA;YAA0BA;UAEbA;UACbA;YAAwDA;UACxDA;YAEEA;cACEA,OH59CJA,2CGigDNA;YAjBMA;YAdEA;;UAEFA,OHp+CAA,gEGigDNA;;QA1BIA;UACEA,OHx+CAA,0CGigDNA;QAnBIA,OH9+CEA,uEGigDNA;;MAjBEA;QACEA,OHj/CEA,uFGigDNA;;QAXeA;sCAAKA;QAALA;QACPA;sCAAYA;QAAZA;UACIA;UAANA;YAAoBA;UACpBA,WAQNA;;QANIA,OH3/CEA,0EGigDNA;;K;wBAiDiBC;MAUJA;;;MAIXA;QAAqBA;M/BzK0BpU;;M+BqL3CoU;mCAAKA;MARQA;MACDA;MAOZA;QACkBA;QAAhBA;kCAAKA;QAALA;UAGUA;;UAXAA;UAQeA;;UAK3BA;;;;;;;;MAIJA;;UAjBgBA;;UAkBiBA;wCAAKA;UAALA;;;UAIzBA;UAxCRA;UAwCIA;YAU6BA;;YARlBA;YAAJA;cAEMA;;cAGXA;;;UAEFA;YACsBA;YACpBA;YACAA;;UAEFA;;QAEFA;UAEEA;YACEA;cACEA;gBACEA;gBAEAA;gBA6CNA;gBA5CMA;;cAEFA;;YAEFA;;UAGKA;UAAiBA;UAAxBA;sCAAMA;;UACWA;UAAjBA;sCAAMA;;UACNA;UACAA;YACEA;cAIEA;;cA7DQA;cAEAA;cA6DRA;;YAEFA;;UAEFA;;QAGFA;UAGEA;YAEEA;YACcA;;;;YACdA;;UAEFA;;QAIFA;UAGEA;QAEFA;;MAEFA;QAAkBA;MAClBA;QACEA;UACEA;QAOsBA;QACCA;QACzBA;UAC8BA;UAEUA;UACtCA;UAMAA;;;MAGJA,aACFA;K;kBAsEAC;;IAQCA,C;aA+DOC;MAWNA;MAGWA,mEAA8BA;MAE9BA;MAKJA,wDA0nG+CA;MAvnG9CA;MACGA;MACJA;MACQA;MACEA;qB9C5gDCC;;Q8CqgDmCD;MAOrDA;QAhBWA;MAmBUA;MAAKA;MACnBA,wDA+mG+CA;iB9C/nJpCA;M8C4hDqBA;QAE9BA;;QAEAA;MAKTA,OAAYA,yCAHQA,qFAItBA;K;qBA2CWE;MACTA;QAAsBA,SAGxBA;MAFEA;QAAuBA,UAEzBA;MADEA,QACFA;K;cAcaC;MACXA,sBAAMA;IACRA,C;kBA+EQC;MACNA,iBACMA,0CACAA,gCACRA;K;+CAYYC;MAIVA;;;QACMA;UAIMA;UAANA;;;IAIRA,C;4CAEYC;MAKVA;MhD/xDOA,4HMSTC,uBAEuBA,kBAFvBA,kDAK0BD,8B0CixDxBA;e1CjxDeA;;UAASA;Q0CkxDlBA,sCAAiBA;UACnBA;YACEA,sBAAMA;;YAENA,sBAAMA;;IAIdA,C;iCAEYE;MACVA;;MAA6DA;QAC9BA;;QAD8BA;MAA7DA;QAEEA,MAWJA;MATEA;QACEA,sBAAMA,yBAC6BA;;QAGnCA,sBAAMA,4BAC6BA;IAGvCA,C;qBAEWC;MAEMA;;MAIXA;QAEFA,OAAOA,2CAKXA;;QAFIA,OAAOA,0CAEXA;K;4BAEOC;MACLA;MAAIA;QACEA;UACKA;;UAEAA;mBACEA;UlDl1BLC;UkDm1B6BD;YAA7BA;qCAAKA;YAALA;cACAA;uCAAKA;cAALA;;cADmBA;;YAAUA;UADjCA;YAGEA,sBAAoBA;;;Q9C3mEnBA;e8CsnEEA;MAAcA;QACIA;iCAAKA;QAA9BA,gCAAyBA;QACJA;UAAGA;mCAAKA;UAALA;;UlDl2BlBC;QkDk2BND;UACEA,sBAAoBA;QAOHA;QAInBA;QACAA,OAAOA,6CAqCXA;;MAlCMA;QACEA;UAEcA;UACGA;UACbA,0DACAA;UAEaA,0CADsBA,qDACbA;UAC5BA;UAIAA,OAAOA,gDAqBbA;;UAlByBA;UAInBA;UACAA,OAAOA,6CAabA;;;QATuBA;QACnBA;QAMAA,OAAOA,8CAEXA;;K;kBA+GYE;MAEkBA;QAAsBA,WAEpDA;MADEA,WACFA;K;kBAYeC;MAEbA;;QAAkBA,WA6CpBA;MA5CEA;QAAkBA,SA4CpBA;;MAzCMA;mCAAKA;MAALA;QACkBA;QAAhBA;kCAAKA;QAALA;UACFA;QAIkBA;QAAhBA;kCAAKA;QATcA;QASnBA;UACMA;UACRA;YAC2CA;YAGhCA,uCAHUA;;;UAMgCA;QAArCA;QACFA;QAGhBA,uB9C1tEKA,mD8CgvETA;;MAhBIA;QACMA;iCAAKA;QAALA;UAoBIA;UAELA;UAnBDA;YAC2CA;YAGhCA,uCAHUA;;YAjCFA;UAsCfA;UACJA,aAAWA,iEAKnBA;;;MADEA,OAAOA,0CACTA;K;qBAIWC;MACGA;MAEZA,kDACFA;K;yBAYcC;MZ74DdA;;uFY45DEA;QACaA;qCAAKA;QAALA;QACXA;UACwBA;UAClBA;UAAJA;YACEA;YACAA;;;YZl6DRA;UYq6DqBA;UAGfA;YACgBA;eACTA;YACLA;gBZz4DNC;UY44DID;;UApBgBA;eAtBEA;UA8ClBA;;cZl7DNA;YYq7DQA;cACeA;;;;;UAKjBA;;UAvDiDA;UA0DjDA;YAC6BA;YAAhBA;sCAAKA;YAALA;YACXA;cACiBA;cACAA;;;UAGJA;;YZr8DrBA;YAOEA;;;;UYi8DcA;;UACVA;;;;MAIJA;QAAoBA,OAAOA,gDAM7BA;MALEA;QACiBA;;;iBZh7D2BA;MYm7D5CA,sCACFA;K;0BAWcE;;;sGAOZA;QACaA;qCAAKA;QAALA;QACXA;UAEwBA;UAClBA;UAAJA;YACEA;YACAA;;;YZ5+DRA;UY++DqBA;UACfA;Y9Cv2EGA;;U8Ck2EQA;UAQXA;YACgBA;eACTA;YACSA;YACCA;;gBZr9DrBD;UYw9DIC;;UAvBgBA;eAbEA;UAwClBA;;cZ9/DNA;YYigEQA;cACeA;;;;;UAKjBA;eAsXEA;UApXFA;;UAlBiBA;UAqBjBA;YAC6BA;YAAhBA;sCAAKA;YAALA;YACXA;cACiBA;cACAA;;;UAGJA;UACfA;Y9C34EGA;;YkCuXTA;YAOEA;;;;UYghEcA;;UACVA;;;;MAIJA;QAAoBA,OAAOA,gDAO7BA;MANEA;QACiBA;QACfA;U9Ct5EKA;;;iBkCsZqCA;MYmgE5CA,sCACFA;K;oBAKcC;MACZA;;QAAkBA,SAkBpBA;;MAjB4BA;qCAAOA;MAC5BA,mCADqBA;QAExBA;MAGFA;QACuBA;mCAAOA;QAAPA;QAwUAA;UAtUnBA;QAEFA;UACsBA;;MAGfA;MAETA,OAAOA,+C9Cj7EAA,8B8Ck7ETA;K;4BAKcC;MACZA;QAAsBA,aAKxBA;MAJEA;QAAsBA,aAIxBA;MAHEA;QAAuBA,cAGzBA;MAFEA;QAAyBA,gBAE3BA;MADEA,aACFA;K;sBAEcC;MACZA;QAAsBA,SAExBA;MADEA,OAAOA,oEACTA;K;kBAEcC;MAQPA;;;MAGLA;QACEA;UAA0BA,wBAuB9BA;;Q1CvtEAC,wENnHwCD,IgDqzE3BA,iC1ClsEbC,4C0CmsESD;aACAA;QACLA,sBAAMA;;QAEGA;gB9C/tEOA;Q8CyuEhBA;UAAYA,UAMhBA;aALoCA;QACvBA;MAGXA,OADSA,mDAEXA;K;uBAOcE;qB9CtvEMA;M8CyvEbA,2EACAA;QACHA,OAAOA,wDAGXA;MADEA,OAAOA,+BACTA;K;mBAEeC;MAMbA;QAIEA,OAAOA,iEAUXA;MAF+BA,WAE/BA;K;sBAuCeC;MACbA;QAAsBA,WAQxBA;MAPEA,OAAOA,oEAOTA;K;yBAaeC;;;;mBAEWA;MAAxBA;QACEA,UAuBJA;MArBqCA;MAAlBA;kCAAOA;MAAPA;MACCA;kCAAOA;MAAPA;MACIA;MACCA;MACvBA;QACEA,UAgBJA;MAd8BA;MA22BVA;QACZA;uCAAYA;QAAZA;;QADYA;MA12BlBA;QAIEA,OZ9zEgBA,qGYu0EpBA;MAPEA;QAEEA,OAAOA,yD9CtlFFA,a8C2lFTA;MADEA,WACFA;K;oBAEcC;MAEFA;;MACVA;Q/B/yC+CjW;;Q+BmzCRiW;QAAtBA;mCAAWA;QAAXA;QACAA;;QAKfA;UAGEA;YAESA;YAXkCA;;YAOpCA;YATaA;;;UAMXA;UAHDA;;QAaYA;Q/Bj0CuBjW;Q+Bm0C7CiW;UACeA;UACbA;4CAASA;;UACCA;UAAmCA;UAAtBA;qCAAWA;UAAlCA;yCAASA;UAAcA;UACbA;UAAVA;yCAASA;UAAcA;UACvBA;;;MAIJA,OAAcA,iDAChBA;K;8BAMcC;MAQLA;MAAPA,oBAQIA,0DACNA;K;mBAWeC;;;+GAYbA;QACaA;0CAAUA;QAAVA;QACQA;UACjBA;;UAAKA;UAILA;YACgBA;YAEdA;cACEA;cACAA;;YAGFA;cACgBA;;cALLA;iBAUNA;YACSA;eA0CdA;YAvCAA;;;;YAIAA;cAEMA;cAAJA;gBACaA;+CAAUA;gBAAVA;gBACXA;kBAGiBA;kBADAA;;;;YAKPA;;;YZr2EtBA;YAOEA;;;UYi2EcA,EZt0Edb;UYw0EIa;sCAAMA;UAANA;;;;MAIJA;QACEA,YAMJA;MAJEA;QACeA;;;iBZn1E6BA;MYq1E5CA,sCACFA;K;+BAuDYC;MACNA;QAAsBA,WAG5BA;MADEA,OADYA,+CAEdA;K;2BAOcC;MACZA;MAAKA;QAA8BA,WAsBrCA;MApBwBA;MAECA,kCAAvBA;;QAEEA;qBhDlwEgBC;UgDmwEdD;YACEA;wCAAOA;YAAPA;sBhDpwEYA;cgDswEVA;;UAGUA;;UACLA;UAAJA;YAGLA;;;MAGJA;QAAiBA;MACjBA,OAAOA,qCACTA;K;+BAiCcE;MAEZA;MAAKA;QAEHA,sBADyBA,iCA8F7BA;MAxFwBA;MAkBCA,kCAAvBA;;QACEA;UAEgCA,UhDj1EhBA;YgDk1EZA;wCAAOA;YAAPA;;YAEAA;UAJYA;;UAMLA;UAAJA;YA6CLA,uC9C9rFcA,uBF2TAA;;;;QgD64EhBA,WAOJA;MAJEA;QAAiBA;MACjBA;QAA4CA;mCAAMA;QAAhCA,uCAAYA,2BAAcA;;MAE5CA,OADaA,qCAEfA;K;sBAGcC;;;iBACHA;MAAeA,6CAAuBA;QAC7CA;UACaA;UACXA;YACEA,OAAUA,qDAA0BA,2CAQ5CA;UANqBA;YAAKA;0CAAYA;YAAZA;;YAALA;UAAfA;YACEA;;MAINA,WACFA;K;wBAgBWC;MACLA,oCAwLmBA;QAvLrBA,OAAOA,qCAAoCA,QAG/CA;MADEA,SACFA;K;2BA8XWC;MACLA;2CACJA;QAC8BA;QAAbA;+BAAEA;QAAFA;QACfA;UACmBA;;UAGjBA;UACAA;YACmBA;;YAEjBA,sBAAMA;;;MAIZA,WACFA;K;mBAYcC;;;;;;UAWEA;;;QAEGA;iCAAKA;QAALA;QAEUA;UAArBA;;UAJQA;QAGZA;UASwBA;UALtBA;;QANyBA;;MAU7BA;QAEWA,KADLA;UACFA,uDAyBNA;;U3ClgHAC,wB2C2+GcD;;QAGGA;QACbA;UACiBA;mCAAKA;UAALA;UACfA;YACEA,sBAAMA;UAERA;YACEA;cACEA,sBAAMA;YAERA,+BAAUA;YACVA;;YAIAA;;;MAINA,OAAOA,wBACTA;K;+BAEYE;MACNA;MACJA,0CACFA;K;qBA2JYC;YZ/rGVxB,mBAA6CA;IY6vG/CwB,C;kBAkWeC;MASOA;;;oBAIJA,kDAAhBA;QACSA;QACPA;UAAwCA;QACxCA;UACEA;;YAEEA;;UAEFA,sBAAMA;;;MAGVA;QAGEA,sBAAMA;MAERA;QAEEA;QACAA;QAEAA;UACSA;mCAAKA;UAALA;UACPA;YACEA;;iBACKA;YACLA;;QAGJA;UACEA;;UAG4BA;UAGvBA;YACHA,sBAAMA;UAERA;;;MAGJA;MAGgCA;kBAFRA;QAEfA;;QAKSA;QAOhBA;UACSA;;MAGXA,OAhlBFA,uCAilBAA;K;2BAKYC;MAONA;;qBACsBA,4BAA1BA;oBACaA;QACXA;QACoBA;UZvzHJvF;;;;;UY2zH6BuF;UAAtBA;qCAAWA;UZ3zHlBvF,qCY2zHOuF;;UZ3zHPvF,qCY4zHOuF;;;;MAGzBA;QACEA;sBACaA;UACXA;YACEA,sBAAoBA;;IAI5BA,C;SAyMEC;MAeFA;;;QACaA;gCAAIA;QAAJA;QACXA;UAAiCA;QACgBA;QAAhCA;qCAAeA;QAAfA;QACTA;QACRA;;MAEFA,YACFA;K;8BA6QaC;MAtO+BA,OAAnBA,wDAAmBA,wBATjBA;QAmPrBA,OAAOA,2BAA0BA,UAAUA,gBAAgBA,aAG/DA;MADEA,SACFA;K;yBA8SEC;MAGEA;oDACJA;QACaA;mCAAOA;QAAPA;QACXA;UAAoBA,0BAKxBA;QAJIA;UAAwCA,SAI5CA;QAHIA;;MAEFA,SACFA;K;gCA2BIC;MACEA;sBACuBA,gDAA3BA;QAEqCA;QAAlBA;oCAAOA;QAAPA;QADAA;QAGjBA;UACEA;YAEkBA;YAChBA;cAHWA;cAKTA;;;UAGJA,SAINA;;;MADEA,aACFA;K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BC1vJiBC;MAAQA,YAAkBA;K;0CCyLpCC;MACHA;yBhDtIkBA;QgDsIWA,YAQ/BA;MAPgBA;;qBAEdA;yBCphBEC,MDohBFD;QACmCA;QACjCA;UAAyBA,YAG7BA;;MADEA,wBAA8BA,0CAChCA;K;;;;kBE3aiBE;MACjBA;;QACEA,sBAAMA;;;;;OAEOA;MAYWA;MAC1BA,aACFA;K;kBAsBmBC;MACjBA;;QACEA,sBAAMA;;;;;OAEOA;MAYWA;MAC1BA,aACFA;K;kBAsBmBC;MACjBA;;QACEA,sBAAMA;;;;;OAEOA;MAYWA;MAC1BA,aACFA;K;kBAsBmBC;MACjBA;;QACEA,sBAAMA;;;;;OAEOA;MAYWA;MAC1BA,aACFA;K;kBAsBmBC;MACjBA;;QACEA,sBAAMA;;;;;OAEOA;MAYWA;MAC1BA,aACFA;K;0BAsDAC;MAC0BA;MAApBA;QAAaA,OAAOA,qBAE1BA;MADEA,OAAOA,iBACTA;K;0BAEAC;MAC0BA;MAApBA;MAAJA;QAAiBA,OAAOA,2BAG1BA;MAFEA;QAAiBA,OAAOA,qBAE1BA;MADEA,OAAOA,iBACTA;K;0BAEAC;MAC0BA;MAApBA;MAAJA;QAAiBA,OAAOA,iCAI1BA;MAHEA;QAAiBA,OAAOA,2BAG1BA;MAFEA;QAAiBA,OAAOA,qBAE1BA;MADEA,OAAOA,iBACTA;K;0BAEAC;MAC0BA;MAApBA;MAAJA;QAAiBA,OAAOA,uCAK1BA;MAJEA;QAAiBA,OAAOA,iCAI1BA;MAHEA;QAAiBA,OAAOA,2BAG1BA;MAFEA;QAAiBA,OAAOA,qBAE1BA;MADEA,OAAOA,iBACTA;K;0BAEAC;MAS0BA;MAApBA;MAAJA;QAAiBA,OAAOA,6CAM1BA;MALEA;QAAiBA,OAAOA,uCAK1BA;MAJEA;QAAiBA,OAAOA,iCAI1BA;MAHEA;QAAiBA,OAAOA,2BAG1BA;MAFEA;QAAiBA,OAAOA,qBAE1BA;MADEA,OAAOA,iBACTA;K;oBChYKC;MACDA,oBACEA,gEAGAA,yBACAA,0BACAA,iCACAA,0BACAA,2BACAA,0BACAA,2BACAA,4BACAA,4BACAA,2BACAA,qBAAWA;K;SAGTC;MACFA;QACFA,aA8BJA;MADEA,OAzBgBA,qBrBsVPA,uFqB7TFA,cACTA;K;cAyCEC;MAEAA,OAAOA,gCACTA;K;mBAoLEC;MACAA;;QACEA,OAAOA,oBAuEXA;MAlEEA;QAIaA,kBAHSA;;YAGhBA,cAAOA,aA8DfA;;YA1DQA,OAAOA,4BADIA,KA2DnBA;;YArDQA,OAAOA,4BAFIA,eACAA,KAsDnBA;;YA/CQA,OAAOA,4BAHIA,eACAA,eACAA,KAgDnBA;;YAjCQA,OAAOA,4BAJIA,eACAA,eACAA,eACAA,KAkCnBA;;MAbqEA;MAD/CA;MACEA;MAEtBA;MAGAA,OAAOA,6BAQTA;K;mBAsMUC;MhCpNRC,wBAAyBA,gBAAzBA;oBAjQIC;MgCifJF,eAzBgBA,yBAAuBA,kDAQzBA,yBAAuBA;MAkBrCA,SACFA;K;sBAqCKG;MACDA,gZA+BCA;K;WAGGC;MACFA;QACFA,QAgEJA;MADEA,OA1DeA,sBrBhSNA,uFqB0VFA,SACTA;K;;;;;;;;;;;;;;OCxsBEC;;MAAgCA,gBAGvBA,WACAA,UACVA;K;QAGMC;MAAeA,mBAAuCA;K;OAGtDC;MAAoBA,wBAA4CA;K;OAGhEC;MAAoBA,wBAA4CA;K;OAGhEC;MAAoBA,wBAA4CA;K;QAGhEC;MAAeA,mBAAuCA;K;QAGtDC;MAAeA,mBAAuCA;K;QAGtDC;MAAeA,mBAAuCA;K;;;;;;;;;;;;;;;;uBCd3DC;6DARmDA,wEAE/CA,sElCqEAX,sBAiQJD,eAAyBA;MkChUzBY;;IAmBAA,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBCDAC;MAZmCA;;;MAYnCA,yDAzBkDA,+DAISA,+EC8U3DC,+FDhUgDD,gEnCoD5CZ,sBAiQJD,eAAyBA,kEmCjTrBa;MAGJA;;IAMAA,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBE7CmBE;MAIbA;;;MAYFA,gCrCmFAC,qBAkPJhB,eAAyBA,gBAAzBA,2BAlPIgB,kCqCjFiDC,qDAFjDF;QAZJA;;MACAA,WACEA,iDACYA,yCAACA;MAGfA,SAAOA,MACTA;K;oBAwEKG;MACgBA,a/CkkBQA,0B+ClkBAA;uDACaA;QACtCA,uBAAYA;IAEhBA,C;;;;;;;;;;;;;;;;;;;;;;;MC7FoDC;;qBAA7CA;MAAgCA,sCAAmBA;K;mBAEnDC;MAA8BA,qBAAWA,eAAMA;K;+BAE/CC;MAA0CA,yBAAeA,eAAMA;K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBCIpEC;MACuBA;;2BACfA;;QACQA,wBAAEA;;MAHlBA;IAIOA,C;oCAICC;MACNA;MACSA,Q5DksBSA;Q4DlsBhBA,uBAAmBA,eAAUA,aASjCA;MAN0BA,qBAANA,kCAAMA;MACLA;oBACjBA;;;sBAAuBA;UAAyBA,QAAHA,kBAAtBA;QAADA;;MAGxBA,OAAOA,wBACTA;K;;;;;;;MCuFAC;;kCA5GcA;MAMVA,qDAEJA;K;;;;;;;;;;;;;;;;;;;;;;;;;;;4CCVKC;MACHA;gFAGuBA,+BACXA;MAEZA,0EAHuBA,+BACXA;MASZA,0EAGuBA,+BACXA,oBAAkBA;MAE9BA,0EAHuBA,+BAOXA,oBAAkBA;MAE9BA,0EATuBA,+BAaXA,oBAAkBA;MAE9BA,0EAfuBA,+BAmBXA,oBAAkBA;MAE9BA,0EArBuBA,+BAyBXA,oBAAkBA;MAE9BA,0EA3BuBA,+BA+BXA,oBAAkBA;MAE9BA,0EAjCuBA,+BAqCXA,oBAAkBA;MAG9BA,0EArDuBA,+BAyDXA;MAIZA,0EAGuBA,+BAPXA;MAWZA,0EApEuBA,+BAwEXA;MAEZA,0EAVuBA,+BAQXA;MAQZA,qFAIuBA,sCACXA;IAEdA,C;QAGGC;MACWA;iBACCA;MAEfA;QACEA,WAIJA;MADEA,ORlDOA,uBQmDTA;K;qBAO6BC;MAC3BA,OAAOA,4CASTA;K;eAEMC;;;;;;uBCoZcA,UAAUA;MD7Y5BA;QACEA;MAGiBA;MACCA;MAEpBA;QACEA,WAgCJA;MA9BEA;QACEA;MAGFA;QAGgBA;QACJA;UACRA;UACAA;UACAA;UACAA;;;;;QAQWA;QACIA;QACNA;QAJHA;;QADVA;UASEA;;UATFA;;MjDLSA,UAAyBA;MiDiBlCA,2BACFA;K;iBAEMC;;uBCmWcA,UAAUA;MDjW5BA;QACEA;MAGYA;MACCA;MAEfA;QACEA,WAcJA;MAXEA;QACEA;MASFA,yBANuCA,0BAGjCA,+CACMA,8B5DnCHA,0C4DsCXA;K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BExKyBC;MCqBvBA;;;mCACiCC;mCACAA;apC4bTA;aAGEA;aqCnatBA,oBrCuvBJC,uFAiDAC;gBoCz1B4BF;MCiDxBA,yBrCuvBJC,uFAiDAC;gBoCl1B4BF;ME8BtBD,6BHhC4BA;MAa9BA,mCAXUA;aInBiBI;;MvCozB/BF,4BAvVwBE,oBAuVxBF,iCmCpxB0BF,gBAAOA,kFAOpBA;MASXA,SACFA;K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BKrBuBK;MACrBA;;QAEOA;gBADGA;UACHA;;QACHA;gBAAGA;UAAHA;;QACAA;gBAAGA;UAAHA;;QACAA;gBAAGA;UAAHA;;QACEA;gBAAGA;UAAHA;;QACCA,uBAAMA;;MAPbA,SASFA;K;gCAEuBC;MACrBA;QACEA,OAAOA,4BpB+TeA,SoB/TQA,kBlBjD9BpD,KkBqDJoD;;QAFIA,QAAOA,2BAEXA;K;8DAUQC;MACyBA;mClBhE7BrD;;;QkBoEiBqD;UAqJrBC,uBAI8BD,YAzJ4BA;UAArCA;;QACOA;UACmBA;UA+LbA;UAGVA,iBAAyBA,mBlBxQ7CrD;UkByQsBqD,0BlBzQtBrD;UkB2QKqD,0BAD8BA,WACHA,mBlB3QhCrD;UkB4QmCqD,wBlB5QnCrD;UkB6QwCqD,2BlB7QxCrD;sBkBgCKuD;UA+OwBF,gClB/Q7BrD;UkByPJuD,yEAyBwCF,iBlBlRpCrD;UkBqEwBqD;;QAEGA;UAqU/BG,iCApUkDH;UADnBA;;QAEIA;UA4OnCI,qCAG4CJ;UA/OTA;;QAESA;UACmBA;UAyQjBA;UAE5CA;YACEA,8CAC4BA,6BAA+BA,yClBzV3DrD;UkB8VsCqD,sBlB9VtCrD;UkB+VyCqD,sBlB/VzCrD;UkBiW2CqD,sBlBjW3CrD;UkBkWiDqD,sBlBlWjDrD;UkBmW6CqD,sBlBnW7CrD;UkBoWmCqD,sBlBpWnCrD;UkByUJ0D,iFA6B6BL;UAnSpBA;UAQmCA;;QAEHA;UACHA,qFAAsBA;UADnBA;;QAEjBA;UAAwCA;UAiVtCA;UAERA;UAAQA;iCAAMA;UAAdA,kBAAkBA,cAAVA;YAA8BA;UACnDA;iCAAMA;UANXM,0BAIwBN,oBAETA,cAAVA;UApVmBA;;QACfA,uBAAMA;;MAbbA,SAeFA;K;iFA4EQO;MAEQA;;iBAKHA;QACsCA;oCAAMA;QAAjBA,iDAAqBA,yCAAVA;mBAEpCA;UAC4BA;sCAAMA;UAAjBA,sCpBuMNA,SoBvM2BA,mBAAVA;;qBANXA;;6BASRA;QAxBxBA,WAegCA;;MAY9BA,6CAC4BA,cACEA,cACXA,0CACAA,cACLA,aAIhBA;K;8BAsP8BC;MACOA;;aAERA;;M/DpG7BC,4BAEuBA,kBAFvBA;MAK0BD;M+D+FxBA;e/D/FeA;;UAASA;Q+DiGNA,mCAAMA,UAAaA,clBnbnC7D;UkBmbuD6D;QADvDA,kCAAaA,oBAECA,clBpbd7D;;MkBwbF6D,eACFA;K;8BAESE;MACoBA;;qBAC3BA;;QvE88G0BC;wBuE58GND,G1B9THA;wB0B+TGA;QAFlBA;;MAKFA,eACFA;K;0BAIKE;MACGA;;;MAINA;IACFA,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBC5bkBC;MjB6ChBA;MiB1CFA;QACEA,OjByCAA,iCiBrCJA;MADEA,WACFA;K;oBAOaC;MACLA;;;8DADKA;QACLA;;;;;;;;cAAUA;;gBACKA;;;;;cCwBKA;;;;;cDfbA;mCrBsGmBA,kBItCzBA,oEiBhEMA;;;;cAEEA;mCrBoGiBA,kBISzBA,gHiB7GQA;;;;cAGAA;mCrBiGiBA,kBItCzBA,iFiB3DQA;;;;cCUTA;;cDJJA;;;cAEEA;mCrByF4BA,kBqBzFPA,8EAArBA;;;cACAA;;;;;;;cAGFA;;;;;;;;;;;;;cAEAA;;;;;;;;;;;;;;;;gBjB6CKA;;ciBvCLA;;;cACEA;mCrB4E4BA,kBIjBzBA,iHiB3DHA;;;;;;;;;;;;cAGNA;;;;;;MAvCQA;IAuCRA,C;yBAGaC;MACXA;;;mEADWA;QACXA;;;;;;;;;;gBAGEA;;;;;cAGqCA,sBnBnFnCpE;;cmBwFaoE;mCAAqBA,+BjByC/BA,wFiBzCUA;;;;cjBoBVA;cAqBAA;;;;;;;;;ciBrCLA;;;;;;;;;;;;;;cAGFA;;;;;;cACFA;;;;;;MAnBEA;IAmBFA,C;wBAGaC;MACLA;IAyCRA,C;6BA1CaA;MACLA;;;kEADKA;QACLA;;;;;;;;;;;;gBAGmCA,0BnBvGrCrE;;gBmB2GFqE;;;gBACoBA;qCrBsCUA,kBItCzBA,4FiBAeA;;;;;gBAClBA,uBrBkOOA,sDjDxLeC,yBGO1BC;gBmEjDIF;;kBjB9CFA;oBiBgDMA;;;;;;gBAIJA;;;;;;gBjBwCGA;gBiB/BHA;gBACeA;qCAAkBA,yFAAlBA;;;;0BAEjBA;;gBjBnBKA;oCiBsBDA;gBAAJA;;;gBAIEA;qCAAuCA,+BjBLpCA,qGiBKHA;;;;;;;;;;;;;;;;;;;;;;;2BAMGA;gBAAPA;;;;;;gBAzCWA;;;;;;MACLA;IADKA,C;6BA6CAG;MACXA;;;uEADWA;QACXA;;;;;;;;;;;cAEEA;mCAAuCA,+BjBlBlCA,ciBiBkCA,gBnBlJrCxE,YEiIGwE,wFiBkBLA;;;;;;cAEJA;;;MAJEA;IAIFA,C;4BAamCC;;MAE3BA;IAcRA,C;iCAhBmCA;MAE3BA;;;sEAF2BA;QAE3BA;;;;;;;;;cAAUA;;gBACKA;;;;;;cAELA;mCrBrBgBA,kBItCzBA,4EiB2DSA;;;;;;;;cAEPA;mCrBvBuBA,kBISzBA,kGiBcEA;;;;cAAPA;;;;;;;;;;;;cAOAA;;;;;;;;;;;;;;;;cAd+BA;;;;;;MAE3BA;IAF2BA,C;iBAmBdC;MACbA;;;2DADaA;QACbA;;;;;;;;cAAYA;mCAAMA,mDAANA;;;;;sCAETA;;gBAAPA;;;;cjBzHAC,uCAQAA,OARAA;gBmBXEA,kBAAMA;0E7CotBsBD,oFG5iBhCE;cwC9BsBF;yC1CwzBLrQ;;;;;;mC0CvzBjBqQ;;;;;;;;;cjBhIEA;ciBiIAA;;;;cAGIA;mCrBjD0BA,kBIjBzBA,0EiBkEDA;;;cAGAA,kBjBvIJA;;;;;;;;;;;;;;;;;;;;;;ciBgIFA;;;;;;;;;;;;;;;;;;;;;;;cAcAA;;;;;;cACFA;;;;;;MAxBQA;IAwBRA,C;wBAIaG;MACLA;IAaRA,C;6BAdaA;MACLA;;;kEADKA;QACLA;;;;;;;;cAAUA;;;gBACKA;;;;cAELA;mCrBpEgBA,kBItCzBA,wEiB0GSA;;;;;cAEFA;mCrBtEkBA,kBIjBzBA,0FiBuFOA;;;;cACZA;mCrBvE8BA,kBISzBA,2HiB8DLA;;;;;;;;;;;;;;;;;;;;;;;cAPSA;;;;;;MACLA;IADKA,C;gCAwODC;MjD9GV9D,wBAAyBA,gBAAzBA;oBAlPIgB;;;MoDoBA8C,8CACmCA,OH8UoBA;MG/UvDA,4CACmCA,OHiVkBA;MGlVrDA,8CACmCA,OHoVoBA;MAIzDA,SACFA;K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBIhcQC;MACNA;QAIcA;MAWdA,OAQFA,6BAPAA;K;aA+iCEC;MAEcA,UAElBA;K;oBAIKC;MACHA;yBAAyBA,gBAAzBA;gBAEMA,mBAAmBA;UAAqBA;eAG5CA;UACWA;kBAALA;YAA2BA;;QtC7kBnCA;QAOiBA;eA2BflH;QpChPOkH;QMvFTC;;QAAAvjB,yCNuFSsjB;QMuGTE,4EA5PmCF,IoEw7BxBA,mCpE5rBXE,yDoE6rBOF;etCpjBLlH;;QsCsjBAkH,sBAAMA,iBAAcA;;IAExBA,C;;;;;;;;;;;;;;;;;;;+BC/kCUG;MAEOA;;MACUA;MACvBA;QAAyBA,gDAAoBA;;MAGvBA;MACKA;ezE8WTpI;MyE1WEoI;QAAqBA;iCAAKA;QAAvBA,yBAAkBA;;QAArBA;MAApBA;QACiBA;iCAAIA;QAAnBA,wCAAeA;QACPA;;QAERA;QANUA;;MASZA;QACMA,wBAAkBA;UACpBA,+BAAUA;UACVA,wCAAeA;UACPA;;MAKZA;QACEA,+BAAUA;QACVA;;MAGFA,OAGFA,gDAFAA;K;;;;;;MCjEAC;;;;IAA2BA,C;;;;2BC0BdC;MAKHA,iBAAKA;QAAkBA,OAAaA,kBAI9CA;MAHgBA,mCAALA,aAAKA;QAAoBA,OAAaA,kBAGjDA;MAFMA,yCAAiBA;QAAwBA,OAAaA,sBAE5DA;MADEA,OAAaA,oBACfA;K;;;;;;;;;;;;;;;;;;;;MCCAC;;;;;;IAUEA,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCf+aGC;MA6CLA;yCAC2BA,uBAAiBA;;QA1CxCA,gCAAUA;;QADZA;QxBtaaC,oCwByagBD;kBgBsJjBA;;eClWZC;Q3BlFKC,6B0BsbyBF,sBAAsBA;Q1Bhf/CG;;;IU4VPH,C;0BAUKI;MAA6BA;;QVvShCC;QUwSSD;UVvWJE,K0BggBEF,SC1YPG,kCD0YoCH;UhBzJ3BA;;QACLA;UV9UCI,K0B4dLJ,SC5XAK,mCD4X8BL,U1BtfzBM,yC0BsfyCN,uCPjnBUI;UTme9CJ;;;UV9ULI,K0BieLJ,SCjYAO,mCDiY8BP,U1B3fzBM,yCUyW6CN,0CSpeMI;UToe3CJ;;QACAA;UVhVRQ,K0B8cER,SC1WPS,oCD0WsCT;UhB9HzBA;;QACTA;UVjVCI,K0B4dLJ,SC5XAK,mCD4X8BL,U1BtfzBM,yC0BsfyCN,+CPjnBUI;UTse7CJ;;QACEA;UxB7bAU;oBwCulBDV;;iBCnYZU;U3B/BKC,4B0BqaDX,sBAAsBA;U1BzgBrBD;UU4WQC;;;QACTA;UgBkH+BA;oBAAvBA;;iBCvVZY;U3BpCKC,8B0B8XDb,e1BleCc,yC0BkekBd;U1BlelBD;UU6WWC;;QACZA;UAKJA,sCkB3UiCe;yBAGVA;U5B7GvBC,gD0BilBAD,SC/XAE,Q3BlNAD;;YA4HKf,mB0Bqd2Bc;UhBjKZf;;QACXA,uBAAo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MAbsBA;MAAhBA;gCAAKA;MAALA;QAEgBA;QAAlBA;UAA6BA,YAWjCA;QAVQA,iDhGiIGA;UgGhILA,YASNA;QAHqBA;;;MAAnBA;QAA8BA,SAGhCA;MAFMA;gCAAKA;MAALA;QAA2CA,YAEjDA;MADEA,gBACFA;K;sBCnCgBC;M9CwIPC;e0BuFED;eAAkCA;eC1GvCE;gC3BmBGD;aAlELE;oCJiTwBC,S+BybUD,Y3B9oB7BC;;Q2BtC6DC;;QmBhH9DL;UADSA;UACTA;;QADSA;QAEAA;;MrBoBfM,aCHSA;MoBdTN,6BpB0MyBM,6BAAPA,S1BlFXC,yC0BzGAD,6BADWA,S1B0GXE,W2BfmCC,6ImB/F5CT;K;kBAgDMU;MAQJA,sBAlBOA,uBACFA,aACAA;IAuBPA,C;mCChGaC;M5Dw2CqCA,yB4Dv2CnCA,kC5D62CmCA,qB4D72CRA;QACpCA,sBAAMA;MAERA,YACFA;K;sBA8BQC;M/C4GDC;kB0BmjBED;kBAA4BA;eCzd5BE;wB3B1FFD;;Q+CvGKD;QAHeA;UnDyVDG,cI/OnBA,0BAAAC;U+C1GoBJ;;QACFA;U/CyGlBK;U+CzGkBL;;QACDA;U/CwGjBM;U0B8iBAN,kCADWA,S1B7iBXO;U+CxGiBP;;QACAA;U/CuGjBM;U0B6hBAN,iCADWA,S1B5hBXQ;U+CvGiBR;;QAJfA;QAKoBA;;MAL3BA,SAOFA;K;mCC7COS;MAICA;;MACNA;QACwCA;QAAjBA;mCAAMA;QjEybXxS,0CiEzbKwS;;MAGvBA,sCACFA;K;uBCImBC;MACXA;;;iEADWA;QACXA;;;;;;cAASA;mCrDmJeA,kBItCzBA,yFiD7GUA;;;cACfA;;;;;;cACFA;;;MAFQA;IAERA,C;gCCGSC;MlD2DPA;;MFiB0BrF;MACAA;MoD5E1BqF,OhC8F+CA,yBpBzBnCrF,0CoDlEdqF;K;sCAMUC;MlDiDRA;;MFiB0BtF;MACAA;MoDlE1BsF,OhCoF+CA,0BpBzBnCtF,0CoDxDdsF;K;kBA0CYC;MlD+HLA,MApHLA;IkDRFA,C;kBCvEkB5I;MnDuEhBA;MmDpEFA;QACEA,OnDmEAA,iCmD/DJA;MADEA,WACFA;K;0CAOM6I;MnDoJGA;MmDhJH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DC;UAAVA;MAAUA,+BAAUA;K;;;;cjErDlEC;;kBAIKA;M1CseKA;qC0CxeLA,wCAGAA;gBAENA;MAAJA;QhFinBO/+B;gBgF3mBH++B;MAAJA;kBAIYA;QAAiCA;QhFumBtC/+B;kBgFpmBD++B;QAAJA;;UxEwWJlgD,mFNnHwCkgD,I8EpPQA,2CxEuWhDlgD,4CwEjWSkgD;;;;;MAKPA,sCACFA;K;;;;UAZgDC;MAClCA;QACJA,mBAAkBA,mBAIrBA;;QAFGA,OAAOA,gBAEVA;K;;;;;;;;;;;;afnDFC;MACHA;qBAAmBA,qBAAnBA;;iBsEhBKA;cACHA;mBAQGzK;qBACHA;YhFuHGL,W0BuaLC,SCzQiCC,yBDyQVD;gBsD7hBrBI;;mBAKFA;;UhFiHKC,W0BkaLD,SClQoCE,4BDkQVF;;;gBhB/gBJyK;M/D+EpBpuC,qBANiCzvB,aAonB5BwvB;a+D7rBPquC;;;QACEA,EADFA;gBAIaA;MVyGRC,kB0B6EED,SCnG2BE,4BDmGDF;MhBnLnBA,mDAAmBA;MAMjCA;QACEA;IAEJA,C;;;mBAmBQG;MACOA;;;QuEqBNA,2BA+EHC,yBA/EkCD;QvEjBbA,2BiFiClBA;;+BAAKA;QjFjC+BA,qBiFiCpCA;QjFhCLA,cAIJA;;QAFIA;;IAEJA,C;iFA8JKE;MAQGA;;eAAaA;MxBvLNC;2BwBmGSD;QACpBA,kBAAoBA;M9C+zCpB/U,oBA3CSgV;MmFr6CXD;MrB8QIA,iFhBtCKA;agBmCGA;;aC9MLE;MAAQA,oEDoNXF,uBhB3CkBA,qBgB+CTA,wBCkffE;MDleSF;M1BvKFn5C;MU+GLm5C;QACEA;IAEJA,C;sEApBKG;;K;aAqCAC;MACHA;eAAIA;QAAWA,MAcjBA;MAZEA,0BAAiBA;WACjBA;gBAMAA;agBuEAA;aAASA;MAAUA;iBAEWA;aCxNvBC;;M3BhEPC;;QA4HKv5C;M0BiKcq5C;M1B7RnBG;;QA4HKx5C;M0BwKcq5C;M1BpSnBI;;QA4HKz5C;MUuFLq5C;IACFA,C;aAGKK;;;M/DgbeA;iB+D7mBdA;UACFA,kBAAMA;kBAkMSA;egB4CJA;QC9RNC,2CzCMMxH;eyC4FNwH;QAAQA,yCD6LsBD;Q1BxMhC55C;QU4JH45C;UACEA;;QASWA;;UuE1ORA,mBA+FHzL,wBA/FmCyL;;UvE8OnCA;;;IAGNA,C;gEAgB8BE;MAK5BA;eA1OIA;QACFA,kBAAMA;MxB1CKA;gBwBsRIA;MgB5FkBA;aAAvBA;;aC5LLC;M3BmFFC;;M0BwPPC;MhBzCqDH;MAGvBA;qBAQNA,gBgB6CNA,mDhB7ChBA;QAEMA;mBAEOA;QAAXA;UACEA;UACAA;;QVlSJ92C;QpCilC0Bk3C,wCA5nCHv3D;QA+pCrBA;Q+D3vB8Bw3D;QAAdA;gCAAaA;sBAAbA;qBjB/EIL;QACpBA;UAGEA,2CsE9UNM,2CAnCAC,kChGSA5hB,0BAISA;6B0ByWiBqhB;;UACpBA;;;MAIJA;QAGEA;UAEMA;UV7TR92C;UpCilC0Bk3C,wCA5nCHv3D;UA+pCrBA;U+D3vB8Bw3D;UAAdA;kCAAaA;qBAAbA;uBjBzDML;UAEpBA;YAEEA,2CsEpWRM,2CAnCAC;YtEwYQP;YACAA,sBAAoBA;2BAEJA;YAEhBA;YACAA,sBAAoBA;;;MAM1BA;iCAEAA,mBACEA,YAAYA,4CADdA;QACcA,6CADdA,IACsCA;MAGtCA,wBACFA;K;yBAGwBQ;MAERA;e/D0SIA;Q+D/RhBA,sBAAoBA;MAGtBA,OAAaA,kCACfA;K;aAjBwBC;;K;;;;UA/KbC;MACGA,oDAAwBA,YAAUA;IAC3CA,C;;;;UAsGHC;MACWA;MAATA;oBAEmBA,2BAAnBA;;iBsE7EGA;eAAYA;UACfA,8BjG7DErM;UAAJA;YACEA;iBiG9MGA;cACHA;mBAQGC;qBACHA;chFuHGL,W0BuaLC,SCzQiCC,yBDyQVD;gBsD7hBrBI;;mBAKFA;;YhFiHKC,W0BkaLD,SClQoCE,4BDkQVF;;mBsDtRxBoM;iBtE1LGrM;YACSA,6BAAZA,YAAYA;;;IAqQdqM,C;;;;cA2KMC;MAAUA,qBAAUA,OAAMA;K;UAQjBC;;iBARCA;MAgBLA,qDAhBeA;eAkBnBA;;iCAAaA;aAAbA;;QAA0CA,0BAAjBA;QAAzBA;;;MAAPA,SACFA;K;aAGcC;MACZA,sBAAMA;IACRA,C;;;;UkFjhB4DC;MAK5DA,mCAAQA;IACTA,C;;;;cTDgBC;MzD+CNC;iByDtDID;ezDsDJC;;MyDrDPD;QACEA,kBAAMA;MAaRA;;UASIA;;MxDSGE,8CzCMM3I;ayCFN2I;M3BmFFhB;MAoGAiB;MpCjLkBC,4CoCWvBl4C,8B0BlBuB83C,O1BkBvB93C;M2ByXgCg4C;MAAdA;8BAAaA;gBAAbA;M3BvTbh7C;;M0ByEPg7C;MyD5JEF;QACoBA;QnFkFf/B;QmF5EH+B;;MnFsGGK;MU/IPC,uCAH+CC,yDACLA;MA8D1CC;MAEEF;M3B2HoDA;aAFhDA;MAAJA;QAEIA;MoG7IJN,SACFA;K;UAzCeS;;K;;;;aHjBVlN;MACHA;gBAAKA;aACHA;QACAA;kBAcFA;;QhFiHKC,W0BkaLD,SClQoCE,4BDkQVF;;IsD7hB5BA,C;YAEKJ;eACEA;qBACHA;QhFuHGD,W0BuaLC,SCzQiCC,yBDyQVD;YsD7hBrBA;;IAEJA,C;;;oBAqBiBuN;;iBACKA;etDodbA;aAA8BA;aC5T9BC;M3B1DFC;MgF5FEF;uCtDyeSA,8CsDxedA;QhFqHGG;QA5FL34C;Q2ByYsD44C;QzC7Z/B34C,YtB86CrBlgB;QoHn7CgDy4D,QhGjCpD/iB,0BAISA;;MgG4BP+iB,SAGFA;K;mBAEmBK;MAEfA,WAKJA;K;YAoBK9N;mBACHA;;MAtDAA;IA4DFA,C;cAEK+N;;kBAGHA,YAAYA;kBAdCA;etD0egBC;aAAtBA,SChRyBC;;Q3B5J3BC;agF7CLH;MAIAA;QACEA,sBACEA,+CAGmBA,WACJA;IAGrBA,C;oBAEUI;MACoBA;;kBAC5BA,YAAYA;qBAlCCA,mBtD0egBH,cAAtBA,SChRyBC,4B3B5J3BC;QgFnBHC;UhFmBGR;;QgFdgBQ;UAAsCA;QAAzDA;;MAGFA;QAEEA,sBACEA,wDAGmBA,WACJA;MAILA;MACKA;MW5ErBA,mCAvCsCC;MAGpCA;MXkHAD,SACFA;K;gBAEQE;;iBACOA;etDsZNA;aAA6BA;aC3V7BC;M3BxCFC;;UAAAC;UgFVCH,2DpF+NkB31C,SI/OnBA,kCbnIS+1C,oBa8GTC,iCgFkDPL;;UATMA,OhFMCM,gDgFGPN;;UAPMA,OtDkYmBA,6BAAPA,S1B9XXO,kDgFGPP;;U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", + "x_org_dartlang_dart2js": { + "minified_names": { + "global": "$get$AsynchronousIndexedDbFileSystem__storesJs,3135,$get$BaseVirtualFileSystem__fallbackRandom,3041,$get$DART_CLOSURE_PROPERTY_NAME,2351,$get$DartCallbacks_sqliteVfsPointer,3333,$get$FileType_byName,3184,$get$Frame__uriRegExp,3147,$get$Frame__windowsRegExp,3153,$get$Future__falseFuture,3042,$get$Future__nullFuture,3107,$get$Random__secureRandom,3131,$get$Style_platform,3319,$get$Style_posix,3320,$get$Style_url,2387,$get$Style_windows,2386,$get$TypeErrorDecoder_noSuchMethodPattern,3296,$get$TypeErrorDecoder_notClosurePattern,3297,$get$TypeErrorDecoder_nullCallPattern,3299,$get$TypeErrorDecoder_nullLiteralCallPattern,3301,$get$TypeErrorDecoder_nullLiteralPropertyPattern,3302,$get$TypeErrorDecoder_nullPropertyPattern,3303,$get$TypeErrorDecoder_undefinedCallPattern,3352,$get$TypeErrorDecoder_undefinedLiteralCallPattern,3353,$get$TypeErrorDecoder_undefinedLiteralPropertyPattern,3354,$get$TypeErrorDecoder_undefinedPropertyPattern,3355,$get$WebStorageApi_byName,3184,$get$_AsyncRun__scheduleImmediateClosure,3127,$get$_Base64Decoder__inverseAlphabet,3059,$get$_BigIntImpl__bigInt10000,2997,$get$_BigIntImpl__bitsForFromDouble,2998,$get$_BigIntImpl__minusOne,3095,$get$_BigIntImpl__parseRE,3115,$get$_BigIntImpl_one,3307,$get$_BigIntImpl_two,3351,$get$_BigIntImpl_zero,3361,$get$_FinalizationRegistryWrapper__finalizationRegistryConstructor,3043,$get$_RootZone__rootMap,3125,$get$_Uri__needsNoEncoding,3097,$get$_Utf8Decoder__decoder,3029,$get$_Utf8Decoder__decoderNonfatal,3030,$get$_Utf8Decoder__reusableBuffer,3122,$get$_asyncBody,2416,$get$_firefoxEvalLocation,2411,$get$_firefoxEvalTrace,2422,$get$_firefoxSafariJSFrame,2412,$get$_firefoxSafariTrace,2423,$get$_firefoxWasmFrame,2413,$get$_friendlyFrame,2415,$get$_friendlyTrace,2424,$get$_hashSeed,2381,$get$_initialDot,2417,$get$_safariWasmFrame,2414,$get$_safeToStringHooks,2353,$get$_v8EvalLocation,2410,$get$_v8JsFrame,2407,$get$_v8JsUrlLocation,2408,$get$_v8Trace,2420,$get$_v8TraceLine,2421,$get$_v8WasmFrame,2409,$get$_vmFrame,2406,$get$bigIntMaxValue64,2398,$get$bigIntMinValue64,2397,$get$context,2388,$get$disposeFinalizer,2399,$get$nullFuture,2352,$get$url,2387,$get$vmChainGap,2425,$get$windows,2386,AggregateContext,2427,AllowedArgumentCount,2428,ApplyInterceptor_interceptWith,2429,ArgumentError,425,ArgumentError$,2426,ArgumentError$value,3357,ArgumentError_checkNotNull,3187,ArgumentsForBatchedStatement,2430,ArrayIterator,2431,AsciiCodec,2432,AsciiEncoder,2433,AssertionError,424,AssertionError$,2426,AsyncError,2434,AsyncError_defaultStackTrace,3202,AsyncJavaScriptIteratable,582,AsyncJavaScriptIteratable_listen_fetchNext,2435,AsyncJavaScriptIteratable_listen_fetchNextIfNecessary,2436,AsyncJavaScriptIteratable_listen_fetchNext_closure,2437,AsynchronousIndexedDbFileSystem,2438,AsynchronousIndexedDbFileSystem__readFile_closure,2439,AsynchronousIndexedDbFileSystem__storesJs,3135,AsynchronousIndexedDbFileSystem__write_closure,2440,AsynchronousIndexedDbFileSystem__write_writeBlock,2441,AsynchronousIndexedDbFileSystem_open_closure,2442,AsynchronousIndexedDbFileSystem_readFully_closure,2443,Atomics_notify,3298,Base64Codec,2444,Base64Codec__checkPadding,3010,Base64Encoder,2445,BaseVfsFile,2446,BaseVirtualFileSystem,2447,BaseVirtualFileSystem__fallbackRandom,3041,BaseVirtualFileSystem_generateRandomness,3241,BatchedStatements,2448,BigInt,2449,BigIntRangeCheck_get_checkRange,2450,BigInt_parse,3310,BoundClosure,2451,BoundClosure__computeFieldNamed,3018,BoundClosure__interceptorFieldNameCache,3056,BoundClosure__receiverFieldNameCache,3118,BoundClosure_evalRecipe,3213,BoundClosure_interceptorOf,3270,BoundClosure_receiverOf,3330,ByteBuffer,2452,ByteData,2453,CancellationException,2454,CancellationToken,540,CancelledResponse,2455,CastIterable,13,CastIterable_CastIterable,2426,CastIterator,2456,CastList,2457,Chain,2458,Chain_Chain$parse,3310,Chain_Chain$parse_closure,2459,Chain_toString__closure,2460,Chain_toString__closure0,2460,Chain_toString_closure,2461,Chain_toString_closure0,2461,Chain_toTrace_closure,2462,CloseGuaranteeChannel,1930,Closure,2463,Closure0Args,2464,Closure2Args,2465,Closure__computeSignatureFunction,3019,Closure_cspForwardCall,3196,Closure_cspForwardInterceptedCall,3197,Closure_forwardCallTo,3226,Closure_forwardInterceptedCallTo,3227,Closure_fromTearOff,3240,CodeUnits,2466,Codec,2467,CommonDatabase,2468,CommonPreparedStatement,2469,CommonSqlite3,2470,Comparable,2471,CompatibilityResult,2472,CompleteIdbRequest_complete,2474,CompleteIdbRequest_complete0,2474,CompleteIdbRequest_complete_closure,2473,CompleteIdbRequest_complete_closure0,2473,CompleteIdbRequest_complete_closure1,2473,CompleteIdbRequest_complete_closure2,2473,CompleteIdbRequest_complete_closure3,2473,CompleteOpenIdbRequest_completeOrBlocked,2476,CompleteOpenIdbRequest_completeOrBlocked_closure,2475,CompleteOpenIdbRequest_completeOrBlocked_closure0,2475,CompleteOpenIdbRequest_completeOrBlocked_closure1,2475,Completer,524,ConcurrentModificationError,439,ConcurrentModificationError$,2426,ConnectionClosedException,2477,ConstantMap,2478,ConstantStringMap,2479,Context,586,Context_Context,2426,Context_joinAll_closure,2480,Context_split_closure,2481,Converter,2482,Cursor,2073,DART_CLOSURE_PROPERTY_NAME,2351,DartCallbacks,652,DartCallbacks_sqliteVfsPointer,3333,DatabaseDelegate,2483,DatabaseImplementation,2058,DatabaseImplementation__prepareInternal_freeIntermediateResults,2484,DatabaseImplementation_createFunction_closure,2485,DateTime,2486,DateTime__fourDigits,3044,DateTime__threeDigits,3138,DateTime__twoDigits,3141,DateTime__validate,3149,DbVersionDelegate,2487,DedicatedDriftWorker,720,DedicatedDriftWorker__handleMessage_closure,2488,DedicatedDriftWorker_start_closure,2489,DedicatedWorkerCompatibilityResult,2490,DefaultEquality,2491,DelegatedDatabase,2492,DelegatedDatabase_close_closure,2493,DelegatedDatabase_ensureOpen_closure,2494,DelegatingStreamSink,2495,DeleteDatabase,2496,DriftCommunication,535,DriftCommunication$,2426,DriftCommunication_closure,2497,DriftCommunication_setRequestHandler_closure,1679,DriftProtocol,2498,DriftProtocol_decodePayload_readInt,2499,DriftProtocol_decodePayload_readNullableInt,2500,DriftRemoteException,2501,DriftServer,2502,DriftServerController,721,DriftServerController_serve___closure,2503,DriftServerController_serve__closure,2504,DriftServerController_serve__closure0,2504,DriftServerController_serve__closure1,2504,DriftServerController_serve_closure,2505,Duration,419,Duration$,2426,DynamicVersionDelegate,2506,EfficientLengthIndexedIterable,2507,EfficientLengthIterable,2508,EfficientLengthMappedIterable,2509,EfficientLengthSkipIterable,26,EfficientLengthTakeIterable,2510,EmptyIterable,2511,EmptyIterator,2512,EmptyMessage,2513,EnableNativeFunctions_useNativeFunctions,2515,EnableNativeFunctions_useNativeFunctions_closure,2514,EncodeLocations_encodeToJs,2516,EncodeLocations_readFromJs,2517,Encoding,2518,EnsureOpen,2519,Enum,2520,EnumByName_asNameMap,2521,EnumByName_byName,2522,Error,2523,ErrorResponse,2524,Error__throw,3139,Error_safeToString,3332,Error_throwWithStackTrace,3342,EventSink,2525,EventStreamProvider,2526,Exception,440,ExceptionAndStackTrace,2527,Exception_Exception,2426,ExecuteBatchedStatement,2528,ExecuteQuery,2529,ExpandIterable,2530,ExpandIterator,883,Expando,2405,Expando__badExpandoKey,2996,FileSystemDirectoryHandleApi_remove,2531,FileSystemSyncAccessHandleApi_readDart,2532,FileSystemSyncAccessHandleApi_writeDart,2533,FileType,2534,FileType_byName,3184,FinalizableDatabase,2059,FinalizablePart,2535,FinalizableStatement,2536,FixedLengthListMixin,2537,Flags,2538,Float32List,2539,Float64List,2540,FormatException,441,FormatException$,2426,Frame,2541,Frame_Frame$_parseFirefoxEval,3112,Frame_Frame$_parseFirefoxEval_closure,2542,Frame_Frame$parseFirefox,3311,Frame_Frame$parseFirefox_closure,2543,Frame_Frame$parseFriendly,3312,Frame_Frame$parseFriendly_closure,2544,Frame_Frame$parseV8,3316,Frame_Frame$parseV8_closure,2545,Frame_Frame$parseV8_closure_parseJsLocation,2546,Frame_Frame$parseVM,3317,Frame_Frame$parseVM_closure,2547,Frame___parseFirefox_tearOff,2824,Frame___parseFriendly_tearOff,2825,Frame___parseV8_tearOff,2826,Frame___parseVM_tearOff,2827,Frame__catchFormatException,3007,Frame__uriOrPathToUri,3146,Frame__uriRegExp,3147,Frame__windowsRegExp,3153,Function,2548,Future,300,Future_Future,2426,Future_Future$delayed,3203,Future_Future$delayed_closure,2549,Future_Future$sync,3338,Future_Future$value,3357,Future_Future_closure,2550,Future__falseFuture,3042,Future__nullFuture,3107,Future_wait,3359,Future_wait_closure,1145,Future_wait_handleError,2551,GenerateFilename_randomFileName,2552,GuaranteeChannel,680,GuaranteeChannel$,2426,GuaranteeChannel__closure,2553,GuaranteeChannel_closure,2554,HashMap_HashMap,2426,HashMap_HashMap$from,3232,HashMap_HashMap$from_closure,2555,InMemoryFileSystem,617,InMemoryFileSystem$,2426,IndexError,434,IndexError$,2426,IndexError$withLength,3360,IndexedDbFileSystem,2556,IndexedDbFileSystem__startWorkingIfNeeded_closure,2557,IndexedDbFileSystem_open,3308,IndexedIterable,27,IndexedIterable_IndexedIterable,2426,IndexedIterator,2558,IndexedParameters,2559,Instantiation,2560,Instantiation1,2561,Int16List,2562,Int32List,2563,Int8List,2564,IntegerDivisionByZeroException,2565,Interceptor,2566,InternalStyle,2567,Iterable,2568,IterableElementError_noElement,3295,IterableElementError_tooFew,3347,Iterable_iterableToFullString,3272,Iterable_iterableToShortString,3273,Iterator,2569,JSAnyUtilityExtension_instanceOfString,2570,JSArray,2571,JSArraySafeToStringHook,2572,JSArray_JSArray$fixed,3224,JSArray_JSArray$growable,3257,JSArray_JSArray$markFixed,3280,JSArray__compareAny,3016,JSBool,2573,JSIndexable,2574,JSInt,2575,JSNull,2576,JSNumNotInt,2577,JSNumber,2578,JSObject,2579,JSObjectUnsafeUtilExtension__callMethod,2580,JSString,2581,JSString__isWhitespace,3064,JSString__skipLeadingWhitespace,3133,JSString__skipTrailingWhitespace,3134,JSSyntaxRegExp,2582,JSSyntaxRegExp_makeNative,3278,JSUnmodifiableArray,2583,JS_CONST,2584,JavaScriptBigInt,2585,JavaScriptFunction,2586,JavaScriptIndexingBehavior,2587,JavaScriptObject,2588,JavaScriptSymbol,2589,JsLinkedHashMap,2590,JsLinkedHashMap_addAll_closure,992,JsNoSuchMethodError,72,JsNoSuchMethodError$,2426,LateError,2591,LateError$fieldADI,3216,LateError$fieldAI,3217,LateError$fieldNI,3218,LazyDatabase,2592,LazyDatabase__awaitOpened_closure,2593,LazyDatabase_ensureOpen_closure,2594,LazyTrace,2595,LegacyJavaScriptObject,2596,LinkedHashMap,360,LinkedHashMapCell,2597,LinkedHashMapEntriesIterable,2598,LinkedHashMapEntryIterator,2599,LinkedHashMapKeyIterator,2600,LinkedHashMapKeysIterable,2601,LinkedHashMapValueIterator,2602,LinkedHashMapValuesIterable,2603,LinkedHashMap_LinkedHashMap,2426,LinkedHashMap_LinkedHashMap$_empty,3033,LinkedHashMap_LinkedHashMap$_literal,3072,LinkedHashSet_LinkedHashSet$_empty,3033,LinkedList,2604,LinkedListEntry,2605,List,2606,ListBase,2607,ListEquality,2608,ListIterable,2609,ListIterator,2610,ListToJSArray_get_toJS,2611,List_List$_of,3108,List_List$filled,3220,List_List$from,3232,List_List$unmodifiable,3356,Lock,2612,Lock_synchronized_callBlockAndComplete,1881,Lock_synchronized_callBlockAndComplete_closure,2613,Lock_synchronized_closure,1884,Map,2614,MapBase,2615,MapBase_entries_closure,1480,MapBase_mapToString,3279,MapBase_mapToString_closure,2616,MapEntry,2617,MappedIterable,23,MappedIterable_MappedIterable,2426,MappedIterator,2618,MappedListIterable,2619,Match,2620,Message,2621,Message0,2621,MessageSerializer,2622,MessageSerializer_readEmpty,3327,MessageSerializer_readFlags,3328,MessageSerializer_readNameAndFlags,3329,NameAndInt32Flags,2623,NativeArrayBuffer,2624,NativeByteBuffer,2625,NativeByteData,2383,NativeByteData_NativeByteData$view,3358,NativeFloat32List,2626,NativeFloat64List,2627,NativeInt16List,2628,NativeInt32List,2629,NativeInt32List_NativeInt32List$view,3358,NativeInt8List,2630,NativeInt8List__create1,3022,NativeSharedArrayBuffer,2631,NativeTypedArray,2632,NativeTypedArrayOfDouble,2633,NativeTypedArrayOfInt,2634,NativeTypedData,2635,NativeUint16List,378,NativeUint32List,2636,NativeUint32List_NativeUint32List$view,3358,NativeUint8ClampedList,2637,NativeUint8List,132,NativeUint8List_NativeUint8List,2426,NativeUint8List_NativeUint8List$view,3358,NestedExecutorControl,2638,NoArgsRequest,2639,NoTransactionDelegate,2640,NoVersionDelegate,2641,NonGrowableListMixin,2642,NotifyTablesUpdated,2643,Null,2644,NullError,2645,NullRejectionException,2646,NullThrownFromJavaScriptException,2647,Object,2648,Object_hash,3263,OpenMode,2649,OpeningDetails,2650,OutOfMemoryError,2651,ParsedPath,2652,ParsedPath_ParsedPath$parse,3310,PathException,592,PathException$,2426,Pattern,2653,PlainJavaScriptObject,2654,PosixStyle,2391,PreparedStatementsCache,1917,PrimitiveResponsePayload,2655,Primitives__fromCharCodeApply,3045,Primitives__identityHashCodeProperty,3053,Primitives_currentUri,3198,Primitives_extractStackTrace,3215,Primitives_getDay,3242,Primitives_getHours,3243,Primitives_getMilliseconds,3250,Primitives_getMinutes,3251,Primitives_getMonth,3252,Primitives_getSeconds,3253,Primitives_getWeekday,3255,Primitives_getYear,3256,Primitives_lazyAsJsDate,3275,Primitives_objectHashCode,77,Primitives_objectTypeName,3306,Primitives_parseInt,3314,Primitives_safeToString,3332,Primitives_stringFromCharCode,3334,Primitives_stringFromCharCodes,3335,Primitives_stringFromCodePoints,3336,Primitives_stringFromNativeUint8List,3337,Primitives_trySetStackTrace,3350,ProtocolVersion,2656,ProtocolVersion_fromJsObject,3236,ProtocolVersion_negotiate,3293,QueryDelegate,2657,QueryExecutor,2658,QueryExecutorUser,2659,QueryInterceptor,2660,QueryResult,545,QueryResult$,2426,QueryResult_QueryResult$fromRows,3239,QueryResult_asMap_closure,2661,Random,2662,Random__secureRandom,3131,RangeError,2663,RangeError$range,3326,RangeError$value,3357,RangeError_checkNotNegative,3186,RangeError_checkValidIndex,3188,RangeError_checkValidRange,3189,RangeError_checkValueInInterval,3190,RawSqliteBindings,2664,RawSqliteContext,2665,RawSqliteDatabase,2666,RawSqliteStatement,2667,RawSqliteValue,2668,RawStatementCompiler,2669,ReadBlob_byteBuffer,2670,ReadDartValue_read,2671,Record,2672,RegExp,408,RegExpMatch,2673,RegExp_RegExp,2426,RegisteredFunctionSet,2674,Request,2675,RequestCancellation,2676,RequestCompatibilityCheck,2677,RequestPayload,2678,RequestResponseSynchronizer,624,RequestResponseSynchronizer_RequestResponseSynchronizer,2426,ResponsePayload,2679,ResultSet,2680,ReversedListIterable,2681,Row,2682,Rti,2683,Rti__getCanonicalRecipe,3048,Rti__getFutureFromFutureOr,3049,Rti__isUnionOfFunctionType,3063,RunBeforeOpen,2684,RunNestedExecutorControl,2685,RunningWasmServer,2686,RunningWasmServer_serve_closure,2687,RuntimeError,2688,S,32,SafeToStringHook,2689,SelectResult,2690,SentinelValue,2691,ServeDriftDatabase,2692,ServerImplementation,536,ServerImplementation$,2426,ServerImplementation__handleRequest_closure,2693,ServerImplementation__handleRequest_closure0,2693,ServerImplementation__waitForTurn_closure,2694,ServerImplementation__waitForTurn_idIsActive,2695,ServerImplementation_closure,2696,ServerImplementation_serve_closure,2697,ServerImplementation_serve_closure0,2697,ServerInfo,2698,SessionApplyCallbacks,2699,Set,2700,SetBase,2701,SharedArrayBuffer_asByteData,711,SharedArrayBuffer_asUint8ListSlice,712,SharedDriftWorker,722,SharedDriftWorker__newConnection_closure,2702,SharedDriftWorker__startFeatureDetection_closure,2703,SharedDriftWorker__startFeatureDetection_closure0,2703,SharedDriftWorker__startFeatureDetection_result,2704,SharedDriftWorker_start_closure,2705,SharedWorkerCompatibilityResult,2706,SharedWorkerCompatibilityResult_SharedWorkerCompatibilityResult$fromJsPayload,3237,SharedWorkerCompatibilityResult_SharedWorkerCompatibilityResult$fromJsPayload_asBoolean,2707,SimpleOpfsFileSystem,2708,SimpleOpfsFileSystem__resolveDir,3121,SimpleOpfsFileSystem_inDirectory,3264,SimpleOpfsFileSystem_inDirectory_open,2709,SimpleOpfsFileSystem_loadFromStorage,3276,SkipIterable,25,SkipIterable_SkipIterable,2426,SkipIterator,2710,SkipWhileIterable,2711,SkipWhileIterator,2712,SqlDialect,2713,Sqlite3Delegate,2714,Sqlite3Filename,2715,Sqlite3Implementation,2716,SqliteArguments,2717,SqliteException,594,SqliteException$,2426,SqliteException_toString_closure,2718,SqliteResult,2719,StackOverflowError,2720,StackTrace,2721,StackTrace_current,685,StartFileSystemServer,2722,StateError,438,StateError$,2426,StatementImplementation,2043,StatementMethod,2723,StatementParameters,2724,StaticClosure,2725,Stream,2726,StreamChannel,2727,StreamChannelController,554,StreamChannelMixin,2728,StreamController,321,StreamController_StreamController,2426,StreamIterator_StreamIterator,2426,StreamSink,2729,StreamSubscription,2730,StreamTransformer,2731,StreamTransformerBase,2732,Stream_firstWhere__closure,2733,Stream_firstWhere__closure0,2733,Stream_firstWhere_closure,1198,Stream_firstWhere_closure0,1198,Stream_first_closure,1196,Stream_first_closure0,1196,Stream_length_closure,1194,Stream_length_closure0,1194,String,2734,StringBuffer,2735,StringBuffer__writeAll,3155,StringMatch,2736,StringSink,2737,String_String$fromCharCode,3233,String_String$fromCharCodes,3234,String__stringFromUint8List,3136,Style,2738,Style__getPlatformStyle,3050,Style_platform,3319,Style_posix,3320,Style_url,2387,Style_windows,2386,SubListIterable,22,SubListIterable$,2426,SuccessResponse,2739,Symbol,2740,SystemHash_combine,3192,SystemHash_finish,3223,TableUpdate,2741,TakeIterable,24,TakeIterable_TakeIterable,2426,TakeIterator,2742,TearOffClosure,2743,Timer,336,Timer_Timer,2426,Timer__createTimer,3026,Trace,679,Trace$,2426,Trace$parseFirefox,3311,Trace$parseFirefox_closure,2744,Trace$parseFriendly,3312,Trace$parseFriendly_closure,2745,Trace$parseJSCore,3315,Trace$parseJSCore_closure,2746,Trace$parseV8,3316,Trace$parseV8_closure,2747,Trace$parseVM,3317,Trace_Trace$from,3232,Trace_Trace$from_closure,2748,Trace_Trace$parse,3310,Trace___parseFriendly_tearOff,2825,Trace___parseVM_tearOff,2827,Trace__parseVM,3116,Trace__parseVM_closure,2749,Trace_toString_closure,2750,Trace_toString_closure0,2750,TransactionDelegate,2751,TransactionExecutor,2752,TrustedGetRuntimeType,2753,TypeError,2754,TypeErrorDecoder,2755,TypeErrorDecoder_extractPattern,3214,TypeErrorDecoder_noSuchMethodPattern,3296,TypeErrorDecoder_notClosurePattern,3297,TypeErrorDecoder_nullCallPattern,3299,TypeErrorDecoder_nullLiteralCallPattern,3301,TypeErrorDecoder_nullLiteralPropertyPattern,3302,TypeErrorDecoder_nullPropertyPattern,3303,TypeErrorDecoder_provokeCallErrorOn,3324,TypeErrorDecoder_provokePropertyErrorOn,3325,TypeErrorDecoder_undefinedCallPattern,3352,TypeErrorDecoder_undefinedLiteralCallPattern,3353,TypeErrorDecoder_undefinedLiteralPropertyPattern,3354,TypeErrorDecoder_undefinedPropertyPattern,3355,TypedDataBuffer,2756,TypedDataList,2757,Uint16List,2758,Uint32List,2759,Uint8Buffer,2760,Uint8ClampedList,2761,Uint8List,2762,UnimplementedError,437,UnimplementedError$,2426,UnknownJavaScriptObject,2763,UnknownJsTypeError,2764,UnmodifiableListBase,2765,UnmodifiableListMixin,2766,UnmodifiableMapMixin,2767,UnparsedFrame,667,UnsupportedError,436,UnsupportedError$,2426,UpdateKind,2768,Uri,2769,UriData,2770,UriData__parse,3110,UriData__uriEncodeBytes,3145,UriData__writeUri,3156,Uri_Uri$dataFromString,3200,Uri__cachedBaseString,2999,Uri__cachedBaseUri,3000,Uri__ipv4FormatError,3060,Uri__parseIPv4Address,3114,Uri__validateIPvAddress,3151,Uri__validateIPvFutureAddress,3152,Uri_base,3181,Uri_decodeComponent,3201,Uri_parse,3310,Uri_parseIPv6Address,3313,Uri_parseIPv6Address_error,2771,UrlStyle,2395,Utf8Codec,2772,Utf8Encoder,2773,ValueList,2774,VfsException,618,VfsException$,2426,VfsWorker,2775,VfsWorker_create,3195,VirtualFileSystem,2776,VirtualFileSystemFile,2777,WasmBindings,2778,WasmBindings_instantiateAsync,3268,WasmCompatibility,2779,WasmContext,2780,WasmDatabase,2781,WasmDatabase0,2781,WasmFile,2782,WasmInitializationMessage,2783,WasmInitializationMessage_WasmInitializationMessage$fromJs,3235,WasmInitializationMessage_sendToClient_closure,2784,WasmInitializationMessage_sendToPort_closure,2785,WasmInitializationMessage_sendToWorker_closure,2786,WasmInstance_load,621,WasmInstance_load__closure,2787,WasmInstance_load_closure,2788,WasmSqlite3,2789,WasmSqlite3__load,3073,WasmSqlite3_loadFromUrl,3277,WasmSqliteBindings,2790,WasmStatement,2133,WasmStatementCompiler,2037,WasmStorageImplementation,2791,WasmValue,2792,WasmValueList,2793,WasmVfs,1922,WebPortToChannel_channel,2795,WebPortToChannel_channel_closure,2794,WebPortToChannel_channel_closure0,2794,WebPortToChannel_channel_closure1,2794,WebProtocol,2796,WebProtocol__deserializeRequest_closure,2797,WebProtocol__deserializeRequest_readBatched,2798,WebProtocol__deserializeRequest_readBatched_closure,2799,WebProtocol__deserializeRequest_readBatched_closure0,2799,WebProtocol__deserializeResponse_closure,2800,WebProtocol__serializeRequest_closure,2801,WebProtocol__serializeSelectResult_closure,2802,WebProtocol_deserialize_decodeRequest,2803,WebProtocol_deserialize_decodeSuccess,2804,WebStorageApi,2805,WebStorageApi_byName,3184,WhereIterable,2806,WhereIterator,2807,WhereTypeIterable,2808,WhereTypeIterator,2809,WindowsStyle,2393,WindowsStyle_absolutePathToUri_closure,2810,WorkerError,2811,WorkerOperation,2812,WrappedMemory_copyRange,2813,WrappedMemory_readNullableString,2814,WrappedMemory_readString,2815,WrappedMemory_strlen,2816,Zone,2817,ZoneDelegate,2818,ZoneSpecification,2819,Zone__current,3027,_AddStreamState,2828,_AllMatchesIterable,2829,_AllMatchesIterator,2830,_AsyncAwaitCompleter,2831,_AsyncCallbackEntry,2832,_AsyncCompleter,2833,_AsyncRun__initializeScheduleImmediate,3054,_AsyncRun__initializeScheduleImmediate_closure,2834,_AsyncRun__initializeScheduleImmediate_internalCallback,2835,_AsyncRun__scheduleImmediateClosure,3127,_AsyncRun__scheduleImmediateJsOverride,3128,_AsyncRun__scheduleImmediateJsOverride_internalCallback,2836,_AsyncRun__scheduleImmediateWithSetImmediate,3129,_AsyncRun__scheduleImmediateWithSetImmediate_internalCallback,2837,_AsyncRun__scheduleImmediateWithTimer,3130,_AsyncStreamController,2838,_AsyncStreamControllerDispatch,2839,_Base64Decoder__inverseAlphabet,3059,_BaseExecutor,2840,_BaseExecutor__synchronized_closure,1784,_BaseExecutor_runBatched_closure,2841,_BaseExecutor_runCustom_closure,2842,_BaseExecutor_runDelete_closure,2843,_BaseExecutor_runInsert_closure,2844,_BaseExecutor_runSelect_closure,2845,_BeforeOpeningExecutor,2846,_BigIntImpl,2847,_BigIntImpl__BigIntImpl$_fromDouble,3046,_BigIntImpl__BigIntImpl$_fromInt,3047,_BigIntImpl__BigIntImpl$from,3232,_BigIntImpl____lastQuoRemDigits,2820,_BigIntImpl____lastQuoRemUsed,2821,_BigIntImpl____lastRemUsed,2822,_BigIntImpl____lastRem_nsh,2823,_BigIntImpl__absAdd,2993,_BigIntImpl__absSub,2994,_BigIntImpl__bigInt10000,2997,_BigIntImpl__bitsForFromDouble,2998,_BigIntImpl__cloneDigits,3014,_BigIntImpl__codeUnitToRadixValue,3015,_BigIntImpl__compareDigits,3017,_BigIntImpl__dlShiftDigits,3032,_BigIntImpl__estimateQuotientDigit,3036,_BigIntImpl__lShiftDigits,3065,_BigIntImpl__lastDividendDigits,3067,_BigIntImpl__lastDividendUsed,3068,_BigIntImpl__lastDivisorDigits,3069,_BigIntImpl__lastDivisorUsed,3070,_BigIntImpl__lsh,3083,_BigIntImpl__minusOne,3095,_BigIntImpl__mulAdd,3096,_BigIntImpl__normalize,3100,_BigIntImpl__parseDecimal,3111,_BigIntImpl__parseHex,3113,_BigIntImpl__parseRE,3115,_BigIntImpl__rsh,3126,_BigIntImpl__tryParse,3140,_BigIntImpl_hashCode_combine,2848,_BigIntImpl_hashCode_finish,2849,_BigIntImpl_one,3307,_BigIntImpl_parse,3310,_BigIntImpl_two,3351,_BigIntImpl_zero,3361,_BoundSinkStream,2850,_BroadcastStream,2851,_BroadcastStreamController,2852,_BroadcastSubscription,1118,_BufferingStreamSubscription,324,_BufferingStreamSubscription__registerDataHandler,3119,_BufferingStreamSubscription__registerErrorHandler,314,_BufferingStreamSubscription__sendDone_sendDone,2853,_BufferingStreamSubscription__sendError_sendError,2854,_CastIterableBase,2855,_CastListBase,2856,_Cell,2857,_Cell$named,3289,_CloseGuaranteeSink,2858,_CloseGuaranteeStream,2859,_CloseVfsOnClose,2860,_Completer,2861,_ControllerStream,2862,_ControllerSubscription,323,_ControllerSubscription$,2426,_CreateFileWorkItem,2863,_CursorReader,2864,_CursorReader_moveNext_closure,2865,_CursorReader_moveNext_closure0,2865,_CustomZone,353,_CustomZone_bindCallbackGuarded_closure,2866,_CustomZone_bindCallback_closure,1344,_CustomZone_bindUnaryCallbackGuarded_closure,1349,_CustomZone_bindUnaryCallback_closure,1346,_DataUri,2867,_DelayedData,2868,_DelayedDone,2869,_DelayedError,2870,_DelayedEvent,2871,_DeleteFileWorkItem,2872,_DoneStreamSubscription,1117,_EfficientLengthCastIterable,2873,_Enum,2874,_Error,2875,_Error_compose,3193,_EventDispatch,2876,_EventSink,2877,_EventSinkWrapper,2878,_EventStream,2879,_EventStreamSubscription,681,_EventStreamSubscription$,2426,_EventStreamSubscription_closure,2880,_EventStreamSubscription_onData_closure,2881,_Exception,2882,_ExclusiveExecutor,2883,_ExclusiveExecutor_ensureOpen_closure,2884,_FileWriteRequest,2253,_FileWriteRequest__updateBlock_closure,2885,_FinalizationRegistryWrapper,2886,_FinalizationRegistryWrapper__finalizationRegistryConstructor,3043,_ForwardingStream,2887,_ForwardingStreamSubscription,1286,_FunctionParameters,2888,_FunctionWorkItem,2889,_FusedCodec,2890,_Future,2891,_Future$value,3357,_Future$zoneValue,3362,_FutureListener,2892,_Future__addListener_closure,2893,_Future__asyncCompleteErrorObject_closure,2894,_Future__asyncCompleteWithValue_closure,2895,_Future__chainCoreFuture,3008,_Future__chainCoreFuture_closure,2896,_Future__prependListeners_closure,2897,_Future__propagateToListeners,3117,_Future__propagateToListeners_handleError,2898,_Future__propagateToListeners_handleValueCallback,2899,_Future__propagateToListeners_handleWhenCompleteCallback,2900,_Future__propagateToListeners_handleWhenCompleteCallback_closure,2901,_Future__propagateToListeners_handleWhenCompleteCallback_closure0,2901,_GuaranteeSink,2902,_HandlerEventSink,2903,_HashMap,2904,_HashMapKeyIterable,2905,_HashMapKeyIterator,2906,_HashMap__getTableEntry,3051,_HashMap__newHashTable,3098,_HashMap__setTableEntry,3132,_HashMap_values_closure,1413,_IdentityHashMap,2907,_InMemoryFile,2908,_IndexedDbFile,2909,_IndexedDbFile_xTruncate_closure,2910,_IndexedDbWorkItem,2911,_InjectedValues,650,_InjectedValues$,2426,_InjectedValues__closure,2912,_InjectedValues__closure0,2912,_InjectedValues__closure1,2912,_InjectedValues__closure10,2912,_InjectedValues__closure11,2912,_InjectedValues__closure12,2912,_InjectedValues__closure13,2912,_InjectedValues__closure2,2912,_InjectedValues__closure3,2912,_InjectedValues__closure4,2912,_InjectedValues__closure5,2912,_InjectedValues__closure6,2912,_InjectedValues__closure7,2912,_InjectedValues__closure8,2912,_InjectedValues__closure9,2912,_InjectedValues_closure,2913,_InjectedValues_closure0,2913,_InjectedValues_closure1,2913,_InjectedValues_closure10,2913,_InjectedValues_closure11,2913,_InjectedValues_closure12,2913,_InjectedValues_closure13,2913,_InjectedValues_closure14,2913,_InjectedValues_closure15,2913,_InjectedValues_closure16,2913,_InjectedValues_closure17,2913,_InjectedValues_closure18,2913,_InjectedValues_closure19,2913,_InjectedValues_closure2,2913,_InjectedValues_closure20,2913,_InjectedValues_closure21,2913,_InjectedValues_closure22,2913,_InjectedValues_closure23,2913,_InjectedValues_closure24,2913,_InjectedValues_closure25,2913,_InjectedValues_closure26,2913,_InjectedValues_closure27,2913,_InjectedValues_closure28,2913,_InjectedValues_closure29,2913,_InjectedValues_closure3,2913,_InjectedValues_closure4,2913,_InjectedValues_closure5,2913,_InjectedValues_closure6,2913,_InjectedValues_closure7,2913,_InjectedValues_closure8,2913,_InjectedValues_closure9,2913,_IntBuffer,2914,_InterceptedExecutor,2915,_InterceptedTransactionExecutor,2916,_JSSecureRandom,1658,_JS_INTEROP_INTERCEPTOR_TAG,2917,_KeysOrValues,2918,_KeysOrValuesOrElementsIterator,2919,_LinkedHashSet,2920,_LinkedHashSetCell,2921,_LinkedHashSetIterator,365,_LinkedHashSetIterator$,2426,_LinkedHashSet__newHashTable,3098,_LinkedListIterator,2922,_MapBaseValueIterable,2923,_MapBaseValueIterator,2924,_MapStream,2925,_MatchImplementation,2926,_NativeTypedArrayOfDouble_NativeTypedArray_ListMixin,2927,_NativeTypedArrayOfDouble_NativeTypedArray_ListMixin_FixedLengthListMixin,2928,_NativeTypedArrayOfInt_NativeTypedArray_ListMixin,2929,_NativeTypedArrayOfInt_NativeTypedArray_ListMixin_FixedLengthListMixin,2930,_OffsetAndBuffer,2931,_OpenedFileHandle,2932,_Parser_collectArray,3191,_Parser_create,3195,_Parser_handleArguments,3258,_Parser_handleDigit,3259,_Parser_handleExtendedOperations,3260,_Parser_handleIdentifier,3261,_Parser_handleTypeArguments,3262,_Parser_indexToType,3265,_Parser_parse,3310,_Parser_toType,3344,_Parser_toTypes,3345,_Parser_toTypesNamed,3346,_PathDirection,2933,_PathRelation,2934,_PendingEvents,2935,_PendingEvents_schedule_closure,2936,_PendingRequest,2937,_Record,2938,_Record2,2939,_Record_2,2940,_Record_2_file_outFlags,2941,_Record__computedFieldKeys,3020,_ResolvedPath,2942,_ResultIterator,2943,_ResultSet_Cursor_ListMixin,2944,_ResultSet_Cursor_ListMixin_NonGrowableListMixin,2945,_RootZone,2946,_RootZone__rootDelegate,3123,_RootZone__rootMap,3125,_RootZone_bindCallbackGuarded_closure,2947,_RootZone_bindCallback_closure,1390,_RootZone_bindUnaryCallbackGuarded_closure,1395,_RootZone_bindUnaryCallback_closure,1392,_Row_Object_UnmodifiableMapMixin,2948,_Row_Object_UnmodifiableMapMixin_MapMixin,2949,_ServerDbUser,2950,_SetBase,2951,_SimpleOpfsFile,2952,_SimpleUri,2953,_SimpleUri__packageNameEnd,3109,_SinkTransformerStreamSubscription,1311,_SqliteVersionDelegate,2954,_StackTrace,2955,_StatementBasedTransactionExecutor,2956,_StatementBasedTransactionExecutor_ensureOpen_closure,2957,_StatementBasedTransactionExecutor_ensureOpen_closure0,2957,_StreamController,2958,_StreamControllerAddStreamState,2959,_StreamControllerLifecycle,2960,_StreamController__recordCancel_complete,2961,_StreamController__subscribe_closure,2962,_StreamHandlerTransformer,335,_StreamHandlerTransformer$,2426,_StreamHandlerTransformer_closure,1318,_StreamImpl,2963,_StreamIterator,2964,_StreamSinkTransformer,2965,_StreamSinkWrapper,2966,_StringAllMatchesIterable,2967,_StringAllMatchesIterator,2968,_StringStackTrace,2969,_SyncBroadcastStreamController,2970,_SyncBroadcastStreamController__sendData_closure,1135,_SyncBroadcastStreamController__sendDone_closure,1139,_SyncBroadcastStreamController__sendError_closure,1137,_SyncCompleter,2971,_SyncStarIterable,2972,_SyncStarIterator,2973,_SyncStarIterator__terminatedBody,3137,_SyncStreamController,2974,_SyncStreamControllerDispatch,2975,_TimerImpl,288,_TimerImpl$,2426,_TimerImpl$periodic,3318,_TimerImpl$periodic_closure,2976,_TimerImpl_internalCallback,2977,_TransactionExecutor,2978,_Type,171,_TypeError,2979,_TypeError$fromMessage,3238,_TypeError__TypeError$forType,3225,_UnicodeSubsetEncoder,2980,_Universe__canonicalRecipeJoin,3004,_Universe__canonicalRecipeJoinNamed,3005,_Universe__createFutureOrRti,3023,_Universe__createGenericFunctionRti,3024,_Universe__createQuestionRti,3025,_Universe__installTypeTests,3055,_Universe__lookupBindingRti,3074,_Universe__lookupFunctionRti,3075,_Universe__lookupFutureOrRti,3076,_Universe__lookupGenericFunctionParameterRti,3077,_Universe__lookupGenericFunctionRti,3078,_Universe__lookupInterfaceRti,3079,_Universe__lookupQuestionRti,3080,_Universe__lookupRecordRti,3081,_Universe__lookupTerminalRti,3082,_Universe_addErasedTypes,3157,_Universe_addRules,3158,_Universe_bind,3182,_Universe_eval,3211,_Universe_evalInEnvironment,3212,_Universe_findErasedType,3221,_Universe_findRule,3222,_UnmodifiableNativeByteBufferView,2981,_Uri,458,_Uri$_internal,3058,_Uri__Uri,2426,_Uri__Uri$file,3219,_Uri__canonicalizeScheme,3006,_Uri__checkNonWindowsPathReservedCharacters,3009,_Uri__checkWindowsDriveLetter,3011,_Uri__checkWindowsPathReservedCharacters,3012,_Uri__checkZoneID,3013,_Uri__defaultPort,3031,_Uri__escapeChar,3034,_Uri__escapeScheme,3035,_Uri__fail,3040,_Uri__hexCharPairToByte,3052,_Uri__isAlphabeticCharacter,3061,_Uri__makeFileUri,3084,_Uri__makeFragment,3085,_Uri__makeHost,3086,_Uri__makePath,3088,_Uri__makePath_closure,2982,_Uri__makePort,3089,_Uri__makeQuery,3090,_Uri__makeScheme,3091,_Uri__makeUserInfo,3092,_Uri__makeWindowsFileUrl,3093,_Uri__mayContainDotSegments,3094,_Uri__needsNoEncoding,3097,_Uri__normalize,3100,_Uri__normalizeEscape,3101,_Uri__normalizeOrSubstring,3102,_Uri__normalizePath,3103,_Uri__normalizeRegName,3104,_Uri__normalizeRelativePath,3105,_Uri__normalizeZoneID,3106,_Uri__packageNameEnd,3109,_Uri__removeDotSegments,3120,_Uri__uriDecode,3143,_Uri__uriEncode,3144,_Utf8Decoder,2983,_Utf8Decoder__convertInterceptedUint8List,3021,_Utf8Decoder__decoder,3029,_Utf8Decoder__decoderNonfatal,3030,_Utf8Decoder__decoderNonfatal_closure,2984,_Utf8Decoder__decoder_closure,2985,_Utf8Decoder__makeNativeUint8List,3087,_Utf8Decoder__reusableBuffer,3122,_Utf8Decoder__useTextDecoder,3148,_Utf8Decoder_errorDescription,3210,_Utf8Encoder,2986,_Utils_newArrayOrEmpty,3294,_Utils_objectAssign,3305,_WasmDelegate,2987,_WriteFileWorkItem,2244,_Zone,2988,_ZoneDelegate,2989,_ZoneFunction,2990,_ZoneSpecification,2991,__CastListBase__CastIterableBase_ListMixin,2992,_areArgumentsSubtypes,278,_arrayInstanceType,159,_asBool,200,_asBoolQ,201,_asDouble,202,_asDoubleQ,203,_asInt,205,_asIntQ,206,_asJSObject,213,_asJSObjectQ,214,_asNum,208,_asNumQ,209,_asObject,195,_asString,211,_asStringQ,212,_asTop,197,_asyncAwait,293,_asyncBody,2416,_asyncRethrow,295,_asyncReturn,294,_asyncStartSync,292,_awaitOnObject,296,_awaitOnObject_closure,2995,_awaitOnObject_closure0,2995,_callDartFunctionFast1,513,_callDartFunctionFast2,514,_callDartFunctionFast3,515,_callDartFunctionFast4,516,_callDartFunctionFast5,517,_cancelAndError,332,_cancelAndErrorClosure,333,_cancelAndErrorClosure_closure,3001,_cancelAndError_closure,3002,_cancelAndValue,334,_cancelAndValue_closure,3003,_caseInsensitiveCompareStart,504,_checkLength,125,_checkValidIndex,134,_checkValidRange,135,_checkViewArguments,126,_containsImpl,552,_current,3027,_currentUriBase,3028,_defaultRelease,543,_defaultRollbackToSavepoint,544,_defaultSavepoint,542,_diagnoseUnsupportedOperation,67,_ensureNativeList,127,_errorForAsCheck,188,_extension_0_runWithArgsAndSetResult,3037,_extension_0_setResult,3038,_extension_1_sendTyped,3039,_firefoxEvalLocation,2411,_firefoxEvalTrace,2422,_firefoxSafariJSFrame,2412,_firefoxSafariTrace,2423,_firefoxWasmFrame,2413,_friendlyFrame,2415,_friendlyTrace,2424,_functionRtiToString,217,_functionToJS1,508,_functionToJS2,509,_functionToJS3,510,_functionToJS4,511,_functionToJS5,512,_generalAsCheckImplementation,186,_generalIsTestImplementation,179,_generalNullableAsCheckImplementation,187,_generalNullableIsTestImplementation,180,_hashSeed,2381,_initialDot,2417,_installSpecializedAsCheck,178,_installSpecializedIsTest,174,_instanceType,160,_instanceTypeFromConstructor,161,_instanceTypeFromConstructorMiss,162,_interceptError,307,_interceptUserError,308,_interceptors_JSArray__compareAny$closure,3057,_invokeClosure,79,_isBool,199,_isFunctionSubtype,275,_isFutureOr,193,_isInCallbackLoop,3062,_isInt,204,_isInterfaceSubtype,276,_isJSObject,184,_isJSObjectStandalone,185,_isListTestViaProperty,183,_isNever,198,_isNum,207,_isObject,194,_isRecordSubtype,279,_isString,210,_isSubtype,274,_isTestViaProperty,182,_isTop,196,_iterablePartsToStrings,444,_lastCallback,3066,_lastPriorityCallback,3071,_makeAsyncAwaitCompleter,290,_microtaskLoop,315,_nextCallback,3099,_noDartifyRequired,525,_noJsifyRequired,518,_nullDataHandler,328,_nullDoneHandler,330,_nullErrorHandler,329,_parseUri,587,_pow,549,_printToZone,351,_recordRtiToString,216,_regexpImpl,551,_registerErrorHandler,314,_rootCreatePeriodicTimer,348,_rootCreateTimer,347,_rootErrorCallback,345,_rootFork,352,_rootHandleError,338,_rootHandleError_closure,3124,_rootHandleUncaughtError,337,_rootPrint,350,_rootRegisterBinaryCallback,344,_rootRegisterCallback,342,_rootRegisterUnaryCallback,343,_rootRun,339,_rootRunBinary,341,_rootRunUnary,340,_rootScheduleMicrotask,346,_rtiArrayToString,215,_rtiToString,218,_runGuarded,322,_runUserCode,331,_runVfs,644,_runZoned,355,_safariWasmFrame,2414,_safeToStringHooks,2353,_scan,501,_scheduleAsyncCallback,317,_schedulePriorityAsyncCallback,318,_setArrayType,155,_simpleSpecializedIsTest,177,_skipPackageNameChars,503,_specializedIsTest,175,_startMicrotaskLoop,316,_structuralTypeOf,166,_substitute,145,_substituteArray,151,_substituteFunctionParameters,153,_substituteNamed,152,_unaryNumFunction,550,_unaryNumFunction_closure,3142,_unminifyOrTag,219,_unwrapNonDartException,75,_v8EvalLocation,2410,_v8JsFrame,2407,_v8JsUrlLocation,2408,_v8Trace,2420,_v8TraceLine,2421,_v8WasmFrame,2409,_validateArgList,588,_validateArgList_closure,3150,_vmFrame,2406,_wrapJsFunctionForAsync,297,_wrapJsFunctionForAsync_closure,3154,_wrapZone,682,acos,532,alternateTagFunction,3159,applyHooksTransformer,108,argumentErrorValue,61,asin,533,async__AsyncRun__scheduleImmediateJsOverride$closure,3160,async__AsyncRun__scheduleImmediateWithSetImmediate$closure,3161,async__AsyncRun__scheduleImmediateWithTimer$closure,3162,async___nullDataHandler$closure,3163,async___nullDoneHandler$closure,3164,async___nullErrorHandler$closure,3165,async___printToZone$closure,3166,async___rootCreatePeriodicTimer$closure,3167,async___rootCreateTimer$closure,3168,async___rootErrorCallback$closure,3169,async___rootFork$closure,3170,async___rootHandleUncaughtError$closure,3171,async___rootPrint$closure,3172,async___rootRegisterBinaryCallback$closure,3173,async___rootRegisterCallback$closure,3174,async___rootRegisterUnaryCallback$closure,3175,async___rootRun$closure,3176,async___rootRunBinary$closure,3177,async___rootRunUnary$closure,3178,async___rootScheduleMicrotask$closure,3179,async___startMicrotaskLoop$closure,3180,atan,534,bigIntMaxValue64,2398,bigIntMinValue64,2397,bool,3183,callConstructor,521,callMethod,520,checkIfCancelled,541,checkIndexedDbExists,576,checkIndexedDbExists$body,576,checkIndexedDbExists_closure,3185,checkIndexedDbSupport,575,checkNotNullable,20,checkOpfsSupport,574,checkTypeBound,189,closureFromTearOff,88,closureFunctionType,156,context,2388,convertDartClosureToJS,80,convertDartClosureToJSUncached,81,core_Uri_decodeComponent$closure,3194,cos,530,createExceptionRaw,688,createRecordTypePredicate,109,createRuntimeType,169,current,685,dartify,526,dartify_convert,3199,defineProperty,96,delegates___defaultRelease$closure,3204,delegates___defaultRollbackToSavepoint$closure,3205,delegates___defaultSavepoint$closure,3206,deleteDatabaseInIndexedDb,579,deleteDatabaseInOpfs,584,deleteDatabaseInOpfs$body,584,diagnoseIndexError,59,diagnoseRangeError,60,dispatchRecordsForInstanceTags,3207,disposeFinalizer,2399,disposeFinalizer_closure,3208,double,3209,driveLetterEnd,687,escapeReplacement,113,evaluateRtiForRecord,172,fillLiteralMap,78,findType,141,frame_Frame___parseFirefox_tearOff$closure,3228,frame_Frame___parseFriendly_tearOff$closure,3229,frame_Frame___parseV8_tearOff$closure,3230,frame_Frame___parseVM_tearOff$closure,3231,get$context,2388,get$current,685,get$print,446,get$scheduleMicrotask,319,getInterceptor$,3244,getInterceptor$asx,3245,getInterceptor$ax,3246,getInterceptor$ns,3247,getInterceptor$s,3248,getInterceptor$x,3249,getIsolateAffinityTag,94,getNativeInterceptor,1,getRuntimeTypeOfClosure,165,getRuntimeTypeOfDartObject,164,getTagFunction,3254,getTraceFromException,76,getTypeFromTypesTable,163,hexDigitValue,17,iae,57,initHooks,107,initHooks_closure,3266,initHooks_closure0,3266,initHooks_closure1,3266,initNativeDispatch,105,initNativeDispatchContinue,106,initNativeDispatchFlag,3267,initializeExceptionWrapper,63,instanceOrFunctionType,157,instanceType,158,instantiatedGenericFunctionType,142,int,3269,int_parse,3310,interceptorsForUncacheableTags,3271,ioore,58,isAlphabetic,686,isJsIndexable,31,isNullable,280,isSubtype,273,isToStringVisiting,21,isTopType,281,jsify,519,jsify__convert,3274,lookupAndCacheInterceptor,97,main,717,makeDefaultDispatchRecord,104,makeDispatchRecord,0,makeLeafDispatchRecord,103,math__acos$closure,3281,math__asin$closure,3282,math__atan$closure,3283,math__cos$closure,3284,math__max$closure,3285,math__sin$closure,3286,math__sqrt$closure,3287,math__tan$closure,3288,max,527,native_functions___containsImpl$closure,3290,native_functions___pow$closure,3291,native_functions___regexpImpl$closure,3292,nullFuture,2352,nullFuture_closure,3300,num,3304,objectHashCode,77,opfsDatabases,581,opfsDatabases_closure,3309,opfsDriftDirectoryHandle,580,opfsDriftDirectoryHandle$body,580,patchInteriorProto,102,print,446,printString,683,printToZone,3321,promiseToFuture,522,promiseToFuture_closure,3322,promiseToFuture_closure0,3322,prototypeForTagFunction,3323,quoteStringForRegExp,115,runCancellable,538,runCancellable_closure,3331,runZoned,354,saveStackTrace,74,scheduleMicrotask,319,sin,529,sqrt,528,storageManager,573,storageManager0,573,stringContainsUnchecked,111,stringReplaceAllGeneral,117,stringReplaceAllUnchecked,116,stringReplaceAllUncheckedString,118,stringReplaceFirstRE,114,stringReplaceFirstUnchecked,119,stringReplaceRangeUnchecked,120,sync_channel_MessageSerializer_readEmpty$closure,3339,sync_channel_MessageSerializer_readFlags$closure,3340,sync_channel_MessageSerializer_readNameAndFlags$closure,3341,tan,531,throwConcurrentModificationError,68,throwException,698,throwExpression,65,throwLateFieldADI,123,throwLateFieldAI,122,throwLateFieldNI,121,throwUnsupportedOperation,66,toStringVisiting,3343,toStringWrapper,64,trace_Trace___parseFriendly_tearOff$closure,3348,trace_Trace___parseVM_tearOff$closure,3349,typeLiteral,173,unminifyOrTag,30,unwrapException,73,url,2387,vmChainGap,2425,windows,2386,wrapException,62,wrapZoneUnaryCallback,95", + "instance": "$$1,3363,$$2,3364,$add,3365,$and,3366,$arguments,3509,$call,3531,$call$body$DriftCommunication_setRequestHandler_closure,3531,$call$body$_BaseExecutor__synchronized_closure,3531,$div,3367,$eq,3368,$function,4170,$ge,3369,$gt,3370,$index,3371,$indexSet,3372,$le,3373,$lt,3374,$mod,3375,$mul,3376,$negate,3377,$not,3378,$or,3379,$package,4340,$protected,3459,$shl,3380,$shr,3381,$sub,3382,$tdiv,3383,$this,3475,$xor,3384,DriftCommunication$3$debugLog$serialize,2426,GuaranteeChannel$3$allowSinkErrors,2426,K,3398,R,3399,S,3400,ServerImplementation$3,2426,SubListIterable$3,2426,T,3401,V,3402,_,3385,_0,3627,_1,3628,_2,3386,_3,3387,_4,3388,_InjectedValues$0,2426,_JSSecureRandom$0,2426,_TimerImpl$2,2426,_TimerImpl$periodic$2,3318,__,3390,__0,3392,__1,5059,__2,3389,__3,3391,__CloseGuaranteeChannel__sink_F,4705,__CloseGuaranteeChannel__stream_F,4706,__GuaranteeChannel__sink_F,4713,__GuaranteeChannel__streamController_F,4714,__LazyDatabase__delegate_F,4460,__LazyTrace__trace_FI,4700,__Sqlite3Delegate_versionDelegate_A,4449,__StreamChannelController__foreign_F,4734,__StreamChannelController__local_F,4735,___,3393,___InjectedValues_bindings_A,4662,___InjectedValues_injectedValues_A,4663,___InjectedValues_memory_A,4664,___SinkTransformerStreamSubscription__transformerSink_A,3743,___Uri__text_FI,4016,___Uri_hashCode_FI,4017,___Uri_pathSegments_FI,4018,___Uri_queryParametersAll_FI,4020,___Uri_queryParameters_FI,4019,__internal$_current,3608,__internal$_index,3614,__internal$_iterable,3615,__internal$_length,3617,__internal$_message,3618,__internal$_name,3619,__js_helper$_addHashTableEntry,3629,__js_helper$_addHashTableEntry$3,3629,__js_helper$_cell,3636,__js_helper$_current,3640,__js_helper$_first,3649,__js_helper$_getBucket$2,3651,__js_helper$_index,3658,__js_helper$_keys,3667,__js_helper$_last,3668,__js_helper$_length,3669,__js_helper$_map,3670,__js_helper$_message,3672,__js_helper$_modifications,3674,__js_helper$_modified,3675,__js_helper$_modified$0,3675,__js_helper$_name,3676,__js_helper$_newLinkedCell,3683,__js_helper$_newLinkedCell$2,3683,__js_helper$_next,3684,__js_helper$_nums,3686,__js_helper$_previous,3688,__js_helper$_removeHashTableEntry,3692,__js_helper$_removeHashTableEntry$2,3692,__js_helper$_rest,3693,__js_helper$_start,3698,__js_helper$_string,3699,__js_helper$_strings,3700,__js_helper$_target,3701,__js_helper$_unlinkCell,3705,__js_helper$_unlinkCell$1,3705,__late_helper$_name,3707,__native_typed_data$_data,3713,_absAddSetSign,4021,_absAddSetSign$2,4021,_absCompare$1,4022,_absSubSetSign,4023,_absSubSetSign$2,4023,_activeChannels,4359,_add,3956,_add$1,3956,_addAll$3,4739,_addAllFromArray,3589,_addAllFromArray$1,3589,_addError,3745,_addError$2,3745,_addEventError,3746,_addEventError$0,3746,_addHashTableEntry,3957,_addHashTableEntry$2,3957,_addHashTableEntry$3,3957,_addListener,3747,_addListener$1,3747,_addPending,3748,_addPending$1,3748,_addStreamCompleter,4716,_addStreamState,3749,_addStreamSubscription,4717,_allocatedArguments,4575,_allowErrors,4718,_allowInvalid,3999,_allowMalformed,4000,_arguments,3630,_argumentsExpr,3631,_as,3723,_async$_add,3744,_async$_add$1,3744,_async$_captured_this_0,3813,_async$_current,3834,_async$_delegate,3837,_async$_hasValue,3862,_async$_isClosed,3869,_async$_next,3885,_async$_onData,3888,_async$_onData$1,3888,_async$_previous,3902,_async$_sink,3936,_async$_source,3938,_async$_target,3945,_asyncComplete,3750,_asyncComplete$1,3750,_asyncCompleteError$2,3751,_asyncCompleteErrorObject,3752,_asyncCompleteErrorObject$1,3752,_asyncCompleteWithValue,3753,_asyncCompleteWithValue$1,3753,_asynchronous,4620,_awaitOpened,4461,_awaitOpened$0,4461,_backlogUpdated,4360,_badEventState,3754,_badEventState$0,3754,_base,4411,_bind,3724,_bind$1,3724,_bindCache,3725,_bindCustomParam,4550,_bindCustomParam$2,4550,_bindIndexedParams,4551,_bindIndexedParams$1,4551,_bindMapParams$1,4552,_bindParam,4553,_bindParam$2,4553,_bindParams,4554,_bindParams$1,4554,_body,3755,_box_0,3756,_box_1,3757,_buffer,4001,_bufferIndex,4002,_cachedCopies,4537,_cachedRuntimeType,3726,_cachedStatements,4450,_calculateIndexes,4570,_calculateIndexes$0,4570,_calculatedIndexes,4571,_callOnCancel,3758,_callOnCancel$0,3758,_canFire,3759,_cancel,3760,_cancel$0,3760,_cancelFuture,3761,_cancelOnError,3762,_canceled,4749,_cancellableOperations,4361,_cancellationCallbacks,4406,_cancellationRequested,4407,_cancellation_zone$_box_0,4405,_cancellation_zone$_captured_T_2,4408,_canonicalRecipe,3727,_captured_K_1,3959,_captured_R_2,3763,_captured_R_3,3764,_captured_S_4,3765,_captured_T_1,4079,_captured_T_2,3766,_captured_T_3,3767,_captured_T_4,4470,_captured_V_2,3960,_captured__convertedObjects_0,4080,_captured__future_2,3768,_captured__future_3,3769,_captured__this_1,4479,_captured__this_2,4480,_captured_abortIfCancelled_0,4413,_captured_action_1,4414,_captured_amount_3,4665,_captured_args_1,4415,_captured_args_2,4416,_captured_asList_0,4494,_captured_blockCompleted_1,4471,_captured_blockCompleted_2,4472,_captured_blockOffset_1,4621,_captured_blockReleasedLock_2,4473,_captured_blockReleasedLock_3,4474,_captured_block_1,4475,_captured_blocks_0,4622,_captured_bodyFunction_0,3770,_captured_calculation_0,4459,_captured_callBlockAndComplete_0,4476,_captured_callback_0,3771,_captured_callback_1,3772,_captured_callback_3,3773,_captured_canUseIndexedDb_2,4514,_captured_cleanUp_1,3774,_captured_cleanUp_4,3775,_captured_clientPort_1,4515,_captured_comm_1,4362,_captured_compiler_0,4538,_captured_completer_0,4081,_captured_completer_1,4516,_captured_computation_0,3776,_captured_controller_1,4481,_captured_controller_2,4578,_captured_controller_3,4579,_captured_createdStatements_1,4539,_captured_dartFdPtr_5,4666,_captured_dartList_1,4390,_captured_data_1,3777,_captured_delegate_1,4462,_captured_dispatch_1,3778,_captured_div_1,3779,_captured_eagerError_2,3780,_captured_eagerError_5,3781,_captured_error_0,3782,_captured_error_1,3783,_captured_explicitClose_0,4482,_captured_f_1,3784,_captured_fd_2,4667,_captured_fetchNext_2,4580,_captured_fetchNext_3,4581,_captured_fileId_0,4623,_captured_fileId_1,4624,_captured_file_0,4668,_captured_file_1,4669,_captured_flags_1,4670,_captured_flags_2,4671,_captured_flags_3,4672,_captured_frame_0,4699,_captured_function_0,4540,_captured_future_0,3785,_captured_future_1,3786,_captured_future_2,3787,_captured_future_3,3788,_captured_getTag_0,3632,_captured_getUnknownTag_0,3633,_captured_handleData_0,3789,_captured_handleDone_2,3790,_captured_handleError_1,3791,_captured_handler_1,4343,_captured_hasError_2,3792,_captured_host_0,4024,_captured_idIsActive_0,4363,_captured_importsJs_0,4594,_captured_initPort_0,4501,_captured_initializer_2,4502,_captured_iterator_2,4582,_captured_joinedResult_0,3793,_captured_length_3,4625,_captured_listener_1,3794,_captured_longest_0,4698,_captured_memory_0,4673,_captured_memory_1,4674,_captured_memory_3,4675,_captured_memory_4,4676,_captured_message_1,4503,_captured_micros_1,4677,_captured_milliseconds_1,3795,_captured_moduleJs_0,4595,_captured_nByte_2,4678,_captured_nOut_2,4679,_captured_offset_4,4680,_captured_onData_0,4751,_captured_openRequest_0,4626,_captured_openRequest_1,4504,_captured_opened_1,4417,_captured_operation_1,4409,_captured_orElse_1,3796,_captured_originalSource_1,3797,_captured_pOutFlags_6,4681,_captured_pResOut_2,4682,_captured_pResOut_4,4683,_captured_parent_0,4418,_captured_path_1,4684,_captured_path_2,4685,_captured_payload_1,4364,_captured_port_0,4495,_captured_pos_1,3798,_captured_protected_0,3799,_captured_protocol_1,4483,_captured_protocol_3,4484,_captured_prototypeForTag_0,3634,_captured_readWriteUnsafe_1,4653,_captured_registered_1,3800,_captured_request_1,4365,_captured_result_0,3961,_captured_result_1,3801,_captured_root_0,4654,_captured_rowOffset_2,4628,_captured_row_0,4629,_captured_sizePtr_2,4686,_captured_size_1,4630,_captured_sourceResult_1,3802,_captured_source_2,4688,_captured_span_2,3803,_captured_stackTrace_1,3804,_captured_stackTrace_2,3805,_captured_start_2,3806,_captured_statement_1,4419,_captured_statement_2,4420,_captured_statements_1,4421,_captured_subscription_0,3807,_captured_subscription_1,3808,_captured_subscription_2,3809,_captured_syncDir_2,4689,_captured_target_1,3810,_captured_target_2,4690,_captured_test_0,3811,_captured_test_1,3812,_captured_this_0,3635,_captured_this_1,3814,_captured_trace_0,4704,_captured_transactionId_1,4367,_captured_user_1,4423,_captured_value_1,3815,_captured_value_2,3816,_captured_vfs_0,4692,_captured_vfs_1,4693,_captured_vfs_3,4694,_captured_wasmServer_2,4506,_captured_webNativeSerialization_0,4485,_captured_webNativeSerialization_2,4486,_captured_worker_0,4496,_captured_worker_2,4520,_captured_writeBlock_0,4632,_captured_writes_1,4633,_captured_zOut_1,4695,_captured_zOut_4,4696,_carry,4003,_cell,3964,_chainForeignFuture$1,3817,_chainFuture,3818,_chainFuture$1,3818,_chainSource,3819,_channel,4707,_charOrIndex,4004,_checkCanOpen,4424,_checkCanOpen$0,4424,_checkClosed$0,4634,_checkCompatibility,4490,_checkMutable$1,3711,_checkPosition,3712,_checkPosition$3,3712,_checkState,3820,_checkState$1,3820,_clear$0,3590,_clearPendingComplete$0,3821,_cloneResult,3822,_cloneResult$1,3822,_close,3823,_close$0,3823,_closeCompleter,4346,_closeGap$2,3965,_closeLocally$0,4347,_closeRemainingConnections,4368,_closeRemainingConnections$0,4368,_closeSyncHandle,4599,_closeSyncHandle$1,4599,_closeSyncHandleNoThrow,4600,_closeSyncHandleNoThrow$1,4600,_closeUnchecked$0,3824,_close_guarantee_channel$_sink,4710,_close_guarantee_channel$_stream,4711,_close_guarantee_channel$_subscription,4712,_closed,4724,_codeUnitAt$1,3591,_collection$_box_0,3958,_collection$_captured_result_1,3962,_collection$_captured_this_0,3963,_collection$_current,3970,_collection$_last,3978,_collection$_length,3979,_collection$_map,3981,_collection$_rest,3993,_columnIndexes,4446,_columnNames,4556,_commitCommand,4426,_commits,4541,_communication$_captured_this_0,4344,_communication$_channel,4345,_compatibility,4491,_complete,3825,_complete$1,3825,_completeError,3826,_completeError$2,3826,_completeErrorObject,3827,_completeErrorObject$1,3827,_completeWithResultOf,3828,_completeWithResultOf$1,3828,_completeWithValue,3829,_completeWithValue$1,3829,_completer,4427,_computeFieldKeys,3637,_computeFieldKeys$0,3637,_computeHasCaptures,3638,_computeHasCaptures$0,3638,_computeHashCode,3966,_computeHashCode$1,3966,_computeKeys,3967,_computeKeys$0,3967,_computeScheme,4025,_computeScheme$0,4025,_computeUri$0,4026,_connectedClients,4508,_contains,3968,_contains$1,3968,_containsKey,3969,_containsKey$1,3969,_containsTableEntry$2,3639,_contents,4027,_context$_current,4531,_controller,3830,_convert$_first,4009,_convert$_state,4011,_convertGeneral,4005,_convertGeneral$4,4005,_convertedObjects,3403,_core$_data,4028,_core$_value,4076,_core0$_box_0,4576,_core0$_captured_controller_1,4577,_core0$_captured_this_1,4583,_createBiggerBuffer,4741,_createBiggerBuffer$1,4741,_createBuffer$1,4742,_createPeriodicTimer,3831,_createSubscription$4,3832,_createTimer,3833,_creationTrace,4549,_current,3592,_currentCursor,4557,_currentExecutorId,4369,_currentExpansion,3609,_currentRequestId,4348,_currentWorkItem,4635,_cursor,4590,_cursorRequest,4591,_data,4573,_database,4451,_database$_setup,4458,_datum,3835,_db,4428,_dbName,4637,_deallocateArguments$0,4558,_debugLog,4349,_decodeDbValue,4357,_decodeDbValue$1,4357,_decodeErrorResponse$1,4394,_decodeNullableString$1,4395,_decodeRecursive,4006,_decodeRecursive$4,4006,_decodeSqliteErrorResponse,4396,_decodeSqliteErrorResponse$1,4396,_decodeStackStrace,4397,_decodeStackStrace$1,4397,_decrementPauseCount$0,3836,_dedicatedWorker,4521,_dedicated_worker$_box_0,4487,_dedicated_worker$_captured_this_0,4488,_dedicated_worker$_captured_this_1,4489,_dedicated_worker$_handleMessage,4492,_dedicated_worker$_handleMessage$1,4492,_dedicated_worker$_servers,4493,_defaultSplit,3593,_defaultSplit$1,3593,_defaultValue,4743,_delegate,4465,_delegateAvailable,4466,_delegateCache,3838,_delegationTarget,3839,_deleteTableEntry$2,3641,_deserializeRequest,4398,_deserializeRequest$1,4398,_deserializeResponse,4399,_deserializeResponse$1,4399,_dialect,4467,_digits,4029,_disconnected,4708,_div,4030,_div$1,4030,_divRem,4031,_divRem$1,4031,_dlShift,4032,_dlShift$1,4032,_done,4370,_doneCompleter,4726,_doneFuture,3840,_drShift,4033,_drShift$1,4033,_duration,4034,_dynamicCheckData,3728,_element,3971,_elementEquality,4342,_elements,3642,_encodeDbValue,4358,_encodeDbValue$1,4358,_encoder,4007,_endIndex,3610,_endOrLength,3611,_engines$_captured_T_2,4412,_engines$_captured_this_0,4422,_engines$_closed,4425,_engines$_delegate,4429,_engines$_done,4430,_ensureCapacity$1,4744,_ensureDoneFuture,3841,_ensureDoneFuture$0,3841,_ensureMatchingParameters$1,4559,_ensureNotFinalized$0,4560,_ensureOpen$0,4542,_ensureOpenCalled,4431,_ensurePendingEvents,3842,_ensurePendingEvents$0,3842,_enumToString,4035,_enumToString$0,4035,_equalFields$1,3643,_error,3843,_errorCallback,3844,_errorExplanation,4036,_errorName,4037,_errorTest,3845,_eval,3729,_eval$1,3729,_evalCache,3730,_eventScheduled,3846,_eventState,3847,_eventType,4752,_exception,3644,_execAnchored,3645,_execAnchored$2,3645,_execGlobal,3646,_execGlobal$2,3646,_execute,4561,_execute$0,4561,_executorBacklog,4371,_existsList,4655,_expectsEvent$1,3848,_expr,3647,_f,3612,_fdCounter,4601,_fieldKeys,3648,_fieldKeys$0,3648,_fileId,4638,_fileId$1,4638,_fileSystem,4526,_files,4656,_fillBuffer,4008,_fillBuffer$3,4008,_findBucketIndex,3972,_findBucketIndex$2,3972,_first,3973,_firstSubscription,3849,_flush,4527,_flush$0,4527,_forEachListener,3850,_forEachListener$1,3850,_foreign,4736,_fork,3851,_fragment,4038,_fragmentStart,4039,_future,3852,_genericClosure,3650,_get,3974,_get$1,3974,_getBucket,3975,_getBucket$2,3975,_getFieldValues,3652,_getFieldValues$0,3652,_getInt32$2,3714,_getPreparedStatement,4452,_getPreparedStatement$1,4452,_getRandomBytes$2,4083,_getRti$0,3653,_getTableBucket$2,3654,_getTableCell$2,3655,_getUint32$2,3715,_grow$1,4745,_guarantee_channel$_addError,4715,_guarantee_channel$_addError$2,4715,_guarantee_channel$_box_0,4719,_guarantee_channel$_captured_T_2,4720,_guarantee_channel$_captured_this_0,4721,_guarantee_channel$_captured_this_1,4722,_guarantee_channel$_channel,4723,_guarantee_channel$_disconnected,4725,_guarantee_channel$_inner,4728,_guarantee_channel$_sink,4731,_guarantee_channel$_subscription,4733,_guardCallback,3853,_guardCallback$1,3853,_handle,3854,_handleData,3855,_handleData$1,3855,_handleData$2,3855,_handleDone,3856,_handleDone$0,3856,_handleDone$1,3856,_handleEnsureOpen,4372,_handleEnsureOpen$2,4372,_handleError,3857,_handleError$2,3857,_handleError$3,3857,_handleMessage,4350,_handleMessage$1,4350,_handleMessage$body$DedicatedDriftWorker,3485,_handleRequest,4373,_handleRequest$2,4373,_handleUncaughtError,3858,_hasCaptures,3656,_hasCapturesCache,3657,_hasError,3859,_hasInitializedDatabase,4453,_hasOneListener,3860,_hasPending,3861,_hasSkipped,3613,_hasValue,4040,_hashCodeCache,4041,_host,4042,_hostStart,4043,_id,4697,_ignoreError,3863,_implicitlyHeldLocks,4602,_inAddStream,4727,_inCallback,3864,_inMemoryOnlyFiles,4639,_inResetState,4562,_incomingRequests,4351,_index,3594,_indexed_db$_captured_result_1,4627,_indexed_db$_captured_this_0,4631,_indexed_db$_database,4636,_indexed_db$_isClosed,4640,_indexed_db0$_captured_T_2,4586,_indexed_db0$_captured__this_1,4585,_indexed_db0$_captured_completer_0,4587,_indexed_db0$_captured_completer_1,4588,_indexed_db0$_captured_this_0,4589,_indexed_db0$_onError,4592,_initializeDatabase$0,4454,_initializeOrDone,3865,_initializeOrDone$0,3865,_initializeText$0,4044,_inner,4709,_input,3659,_insertBefore,3976,_insertBefore$3$updateFirst,3976,_insertKnownLength$4,4746,_interceptor,3660,_interceptor$_inner,4447,_interceptor$_interceptor,4448,_invalidPosition,3716,_invalidPosition$3,3716,_irritant,3661,_is,3731,_isAddingStream,3866,_isCanceled,3867,_isCaseSensitive,3662,_isChained,3868,_isClosed,4543,_isClosing,4641,_isComplete,3870,_isDotAll,3663,_isEmpty,3871,_isFile,4045,_isFiring,3872,_isHttp,4046,_isHttps,4047,_isInitialState,3873,_isInputPaused,3874,_isInt32$1,3595,_isMultiLine,3664,_isNegative,4048,_isOpen,4455,_isPackage,4049,_isPaused,3875,_isPort,4050,_isPort$1,4050,_isScheme$1,4051,_isShuttingDown,4374,_isSubtypeCache,3732,_isUnicode,3665,_isUnmodifiable$0,3717,_isWithinOrEquals,4532,_isWithinOrEquals$2,4532,_isWithinOrEqualsFast,4533,_isWithinOrEqualsFast$2,4533,_isZero,4052,_iterable,3596,_iterator,3616,_jsIndex,3666,_jsObject,4584,_jsWeakMap,4053,_keys,3977,_kind,3733,_knownFileIds,4642,_knownSchemaVersion,4375,_last,4478,_lastClientDisconnected,4509,_lastSubscription,3876,_latestArguments,4563,_lazy_database$_captured_this_0,4463,_lazy_database$_captured_user_1,4464,_lazy_trace$_trace,4702,_length,3597,_list,3980,_loadExecutor,4376,_loadExecutor$1,4376,_loadLockedWasmVfs,4510,_loadLockedWasmVfs$1,4510,_local,4737,_lock,4432,_lockMode,4569,_log,4433,_log$2,4433,_managedExecutors,4377,_map,3877,_markExists,4658,_markExists$2,4658,_match,3671,_math$_buffer,4082,_mayAddEvent,3878,_mayAddListener,3879,_mayComplete,3880,_mayResumeInput,3881,_memory,4643,_mergePaths,4054,_mergePaths$2,4054,_message,3734,_messageFromClient,4522,_messageFromClient$2,4522,_messageFromClient$body$SharedDriftWorker,3486,_metaHandle,4660,_method,3673,_microsecond,4055,_migrationError,4434,_modelGeneratedCode$0,3882,_modificationCount,3982,_modifications,3983,_modified,3984,_modified$0,3984,_name,4056,_named,3735,_nativeAnchoredRegExp,3677,_nativeAnchoredVersion,3678,_nativeBuffer,3718,_nativeGlobalRegExp,3679,_nativeGlobalVersion,3680,_nativeRegExp,3681,_needsNormalization,4534,_needsNormalization$1,4534,_nestedIterator,3883,_newConnection,4523,_newConnection$1,4523,_newFutureWithSameType$0,3884,_newHashTable,3682,_newHashTable$0,3682,_newLinkedCell,3985,_newLinkedCell$1,3985,_newSimilarSet$1$0,3986,_next,3987,_nextIndex,3685,_nextListener,3886,_notifyActiveExecutorUpdated$0,4378,_nums,3988,_offset,3989,_onCancel,3887,_onCancel$0,3887,_onData,4753,_onDone,3889,_onDone$0,3889,_onError,3890,_onError$2,3890,_onListen$1,3891,_onMicrotask,3892,_onMicrotask$0,3892,_onPause,3893,_onPause$0,3893,_onResume,3894,_onResume$0,3894,_onSinkDisconnected,4729,_onSinkDisconnected$0,4729,_onStreamDisconnected,4730,_onStreamDisconnected$0,4730,_onSuccess,4593,_onValue,3895,_once,3896,_openDelegate,4468,_openFiles,4603,_openForSynchronousAccess,4604,_openForSynchronousAccess$1,4604,_openForSynchronousAccess$body$VfsWorker,3487,_opened,4435,_openingLock,4436,_optionalPositional,3736,_outer,4437,_outerHelper,3897,_parent,4438,_parentDelegate,3898,_parse$1,4535,_path,4528,_pathDirection,4536,_pathDirection$2,4536,_pathStart,4057,_pattern,3687,_pauseCount,4754,_pending,3899,_pendingEvents,3900,_pendingRequests,4352,_pendingWork,4644,_port,4058,_portStart,4059,_precomputed1,3737,_prepareInternal,4544,_prepareInternal$5$checkNoTail$maxStatements$persistent$vtab,4544,_preparedStmtsCache,4456,_prependListeners,3901,_prependListeners$1,3901,_previous,3990,_primary,3738,_print,3903,_processUncaughtError,3904,_processUncaughtError$3,3904,_protocol$_box_0,4356,_protocolVersion,4401,_putExecutor,4379,_putExecutor$2$beforeCurrent,4379,_query,4060,_queryStart,4061,_rangeOverFile,4645,_rangeOverFile$1,4645,_rangeOverFile$2$startOffset,4645,_rangeOverFile$3$endOffsetInclusive$startOffset,4645,_re,3689,_readField,3708,_readField$0,3708,_readFile,4646,_readFile$2,4646,_readFiles,4647,_readFiles$0,4647,_readLocal$0,3709,_readString$1,4597,_readValue,4564,_readValue$1,4564,_receiver,3690,_recognizeType$1,4661,_recordCancel,3905,_recordCancel$1,3905,_recordPause,3906,_recordPause$1,3906,_recordResume,3907,_recordResume$1,3907,_regExp,3691,_registerBinaryCallback,3908,_registerCallback,3909,_registerUnaryCallback,3910,_registry,4062,_release,4439,_release$0,4439,_releaseExecutor,4380,_releaseExecutor$1,4380,_releaseImplicitLock,4605,_releaseImplicitLock$1,4605,_releaseImplicitLocks$0,4606,_rem,4063,_rem$1,4063,_remaining,3620,_remove,3991,_remove$1,3991,_removeAfterFiring,3911,_removeHashTableEntry,3992,_removeHashTableEntry$2,3992,_removeListener,3912,_removeListener$1,3912,_removeListeners,3913,_removeListeners$0,3913,_replaceSomeNullsWithUndefined,3598,_replaceSomeNullsWithUndefined$1,3598,_requiredPositional,3739,_reset,4565,_reset$0,4565,_resolvePath,4607,_resolvePath$1,4607,_resolvePath$2$createDirectories,4607,_rest,3740,_result,4574,_resultCompleter,4410,_resultOrListeners,3914,_result_set$_columnNames,4572,_results$_captured_this_0,4445,_resumeBody,3915,_resumeBody$2,3915,_returnStatement$2,4457,_reverseListeners,3916,_reverseListeners$1,3916,_rollbackCommand,4440,_rollbacks,4545,_root,4511,_rootRegisterBinaryCallback$4,3917,_rootRegisterCallback$4,3918,_rootRegisterUnaryCallback$4,3919,_rootRun$4,3920,_rootRunUnary$5,3921,_rti,3741,_run,3922,_runBatched,4381,_runBatched$2,4381,_runBinary,3923,_runInWorker,4596,_runInWorker$2$2,4596,_runMigrations,4441,_runMigrations$1,4441,_runQuery,4382,_runQuery$4,4382,_runUnary,3924,_runWithArgs,4529,_runWithArgs$2,4529,_safeOnError$1$1,3925,_sameShape$1,3694,_scheduleMicrotask,3926,_schemeCache,4064,_schemeEnd,4065,_second,4010,_selectResults,4566,_selectResults$0,4566,_send,4353,_send$1,4353,_sendData,3927,_sendData$1,3927,_sendDone,3928,_sendDone$0,3928,_sendError,3929,_sendError$2,3929,_separatorIndices,4066,_serialize,4354,_serializeRequest,4402,_serializeRequest$1,4402,_serializeResponse,4403,_serializeResponse$1,4403,_serializeSelectResult,4404,_serializeSelectResult$1,4404,_server,4383,_server_impl$_captured_this_0,4366,_servers,4524,_set,3994,_set$2,3994,_setChained$1,3930,_setErrorObject,3931,_setErrorObject$1,3931,_setFloat64$3,3719,_setInt32$3,3720,_setKeys$1,3695,_setLengthUnsafe$1,3599,_setPendingComplete$0,3932,_setPendingEvents,3933,_setPendingEvents$1,3933,_setRange$4,4748,_setRangeFast,3721,_setRangeFast$4,3721,_setRemoveAfterFiring$0,3934,_setTableEntry$3,3696,_setUint32$3,3722,_setValue$1,3935,_setup,4512,_shapeTag,3697,_shared$_box_0,4497,_shared$_captured_T_2,4499,_shared$_captured__this_1,4498,_shared$_captured_completer_0,4500,_shared$_captured_this_0,4505,_shared$_close,4507,_shared_worker$_box_0,4513,_shared_worker$_captured_result_0,4517,_shared_worker$_captured_result_1,4518,_shared_worker$_captured_this_0,4519,_shlPositive$1,3600,_shrBothPositive,3601,_shrBothPositive$1,3601,_shrOtherPositive,3602,_shrOtherPositive$1,3602,_shrReceiverPositive,3603,_shrReceiverPositive$1,3603,_simpleMerge,4067,_simpleMerge$2,4067,_simple_opfs$_lockMode,4657,_simple_opfs$_memory,4659,_sink,4341,_sinkMapper,3937,_skipCount,3621,_source,3622,_spawnExclusive,4384,_spawnExclusive$2,4384,_spawnTransaction,4385,_spawnTransaction$2,4385,_specializedTestResource,3742,_sqlite3,4530,_stackTrace,4068,_start,3623,_startCommand,4442,_startFeatureDetection,4525,_startFeatureDetection$1,4525,_startIndex,3624,_startWorkingIfNeeded,4648,_startWorkingIfNeeded$0,4648,_startedClosingLocally,4355,_state,3939,_stateData,3940,_statement$_closed,4555,_statements,4546,_step$0,4567,_stopped,4608,_stream,3941,_streamController,4732,_streams$_captured_handleData_0,4750,_string,3625,_strings,3995,_submitWork,4649,_submitWork$1,4649,_submitWorkFunction$2,4650,_subscribe,3942,_subscribe$4,3942,_subscription,3943,_subsetMask,4012,_suspendedBodies,3944,_sync_channel$_writeString$2,4598,_synchronized,4443,_synchronized$1$1,4443,_synchronized$1$2$abortIfCancelled,4443,_synchronized$_captured_T_1,4469,_synchronized$_captured_this_0,4477,_tableNames,4568,_tableUpdateNotifications,4386,_takeCount,3626,_target,4755,_tdivFast,3604,_tdivFast$1,3604,_tdivSlow,3605,_tdivSlow$1,3605,_text,4069,_thenAwait,3946,_thenAwait$1$2,3946,_this,3397,_thunk,4701,_tick,3947,_toFilePath$0,4070,_toListFixed$0,3606,_toListGrowable$0,3607,_toNonSimple,4071,_toNonSimple$0,4071,_toString,3702,_toString$1,3702,_toggleEventId$0,3948,_trace,3703,_trace$_captured_longest_0,4703,_transactionControl,4387,_transactionControl$3,4387,_transactionControl$body$ServerImplementation,3488,_transform,3949,_transformerSink,3950,_tryResume,4756,_tryResume$0,4756,_typed_buffer$_add$1,4738,_typed_buffer$_buffer,4740,_typed_buffer$_length,4747,_types,3704,_unlink,3996,_unlink$1,3996,_unlinkCell,3997,_unlinkCell$1,3997,_unlisten,4757,_unlisten$0,4757,_updateBlock,4651,_updateBlock$3,4651,_updates,4547,_uri,4072,_uriCache,4073,_urlSafe,4013,_useCapture,4758,_used,4074,_userInfo,4075,_validateAndEncodeFunctionName$1,4548,_value,3710,_values,3706,_varData,3951,_visitedFirst,3998,_waitForTurn,4388,_waitForTurn$1,4388,_waitingChildExecutors,4444,_waitsForCancel,3952,_wasm_interop$_captured_size_1,4687,_wasm_interop$_captured_this_0,4691,_web_protocol$_box_0,4389,_web_protocol$_captured_this_0,4391,_web_protocol$_captured_this_1,4392,_web_protocol$_decodeDbValue,4393,_web_protocol$_decodeDbValue$1,4393,_web_protocol$_encodeDbValue,4400,_web_protocol$_encodeDbValue$1,4400,_whenCompleteAction,3953,_write,4652,_write$2,4652,_writeAuthority$1,4077,_writeReplacementCharacter,4014,_writeReplacementCharacter$0,4014,_writeString$1,4078,_writeSurrogate,4015,_writeSurrogate$2,4015,_xAccess,4609,_xAccess$1,4609,_xAccess$body$VfsWorker,3489,_xClose,4610,_xClose$1,4610,_xDelete,4611,_xDelete$1,4611,_xFileSize,4612,_xFileSize$1,4612,_xLock,4613,_xLock$1,4613,_xOpen,4614,_xOpen$1,4614,_xOpen$body$VfsWorker,3490,_xRead,4615,_xRead$1,4615,_xSync,4616,_xSync$1,4616,_xTruncate,4617,_xTruncate$1,4617,_xTruncate$body$VfsWorker,3491,_xUnlock,4618,_xUnlock$1,4618,_xWrite,4619,_xWrite$1,4619,_yieldStar,3954,_yieldStar$1,3954,_zone,3955,abortIfCancelled,3404,abs$0,3492,absolute,3493,absolute$1,3493,absolute$15,3493,absolutePathToUri,3494,absolutePathToUri$1,3494,action,3405,add,3495,add$1,3495,addAll,3496,addAll$1,3496,addError,3497,addError$1,3497,addError$2,3497,addNew$2,3498,addWrite,3499,addWrite$2,3499,aggregateContextId,3500,aggregateContexts,3501,allMatches,3502,allMatches$1,3502,allMatches$2,3502,allocateBytes,3503,allocateBytes$1,3503,allocateBytes$2$additionalLength,3503,allocateZeroTerminated$1,3504,allowMalformed,3505,allowRemoteShutdown,3506,allowedArgs,3507,amount,3406,args,3508,asByteData,3510,asByteData$0,3510,asByteData$2,3510,asInt32List$0,3511,asInt32List$2,3511,asList,3407,asMap,3512,asUint32List$2,3513,asUint8List,3514,asUint8List$2,3514,attach$3$detach,3515,beforeOpen,3516,beforeOpen$2,3516,beforeOpen$body$_ServerDbUser,3516,beginExclusive,3517,beginExclusive$0,3517,beginExclusive$1,3517,beginTransaction,3518,beginTransaction$0,3518,beginTransaction$1,3518,beginTransactionInContext,3519,beginTransactionInContext$1,3519,bind,3182,bind$1,3182,bindCallback,3520,bindCallback$1$1,3520,bindCallbackGuarded,3521,bindCallbackGuarded$1,3521,bindUnaryCallback,3522,bindUnaryCallback$2$1,3522,bindUnaryCallbackGuarded,3523,bindUnaryCallbackGuarded$1$1,3523,bindings,3524,bitLength,3525,blobType,3526,block,3411,blockCompleted,3408,blockOffset,3409,blockReleasedLock,3410,blocks,3412,bodyFunction,3413,booleanType,3527,buffer,3528,byteView,3529,cachePreparedStatements,3530,calculation,3414,callBlockAndComplete,3415,callback,3532,callbacks,3533,canAccessOpfs,3534,canSerializeSqliteExceptions,3535,canSpawnDedicatedWorkers,3536,canUseIndexedDb,3537,cancel,3538,cancel$0,3538,cancelSchedule$0,3539,canonicalizePart$1,3540,cast,3541,cast$1$0,3541,catchError$1,3542,causingStatement,3543,ceil,3544,ceil$0,3544,ceilToDouble$0,3545,changeStream$1,3546,checkGrowable$2,3547,checkMayWrite$0,3548,checkMutable$2,3549,chroot,3550,cleanUp,3416,clear,3551,clear$0,3551,clientPort,3417,close,3552,close$0,3552,close$1,3552,closeExecutorWhenShutdown,3553,closeUnderlyingWhenClosed,3554,closed,3555,code,3556,codeUnitAt,3557,codeUnitAt$1,3557,codeUnits,3558,codeUnitsEqual,3559,codeUnitsEqual$2,3559,collation,3560,column,3561,columnAt$1,3562,columnNames,3563,comm,3418,commit,3564,commitTransaction$1,3565,compareTo,3566,compareTo$1,3566,compiler,3419,complete,3567,complete$0,3567,complete$1,3567,completeError,3568,completeError$1,3568,completeError$2,3568,completeWithError,3569,completeWithError$1,3569,completeWithError$2,3569,completer,3570,computation,3420,conflict,3571,connection,3572,contains,3573,contains$1,3573,containsKey,3574,containsKey$1,3574,containsSeparator,3575,containsSeparator$1,3575,context,2388,control,3576,controller,3421,convert,3577,convert$1,3577,convertChunked$3,3578,convertSingle$3,3579,count,3580,createFile,3581,createFile$1,3581,createFunction,3582,createFunction$4$argumentCount$deterministic$function$functionName,3582,createFunction$5$argumentCount$deterministic$directOnly$function$functionName,3582,createPeriodicTimer,3583,createTimer,3584,createTimer$2,3584,create_aggregate_function$5,3585,create_scalar_function$5,3586,createdExecutor,3587,createdStatements,3422,current,685,currentlyPendingPromise,3588,dartAggregateContext,4084,dartCleanup,4085,dartException,4086,dartFdPtr,3423,dartList,3424,dart_sqlite3_commits$2,4087,dart_sqlite3_register_vfs$3,4088,dart_sqlite3_rollbacks$2,4089,dart_sqlite3_updates$2,4090,data,3425,dataView,4091,database,4092,databaseName,4093,day,4094,db,4095,deallocateAdditionalMemory$0,4096,deallocateArguments,4097,deallocateArguments$0,4097,decode,4098,decode$1,4098,decodeGeneral,4099,decodeGeneral$4,4099,decodePayload,4100,decodePayload$1,4100,decoder,4101,dedicatedWorkersCanUseOpfs,4102,delegate,4103,deleteFile,4104,deleteFile$1,4104,deleteOnClose,4105,depth,4106,description,4107,deserialize,4108,deserialize$1,4108,detach,4109,detach$1,4109,details,4110,dialect,4111,dialect$1,4111,directory,4112,dispatch,3426,dispatchTableUpdateNotification,4113,dispatchTableUpdateNotification$2,4113,dispose,4114,dispose$0,4114,disposeAll,4115,disposeAll$0,4115,div,3427,done,4116,eagerError,3428,elementAt,4117,elementAt$1,4117,enableMigrations,4118,encode,4119,encode$1,4119,encodePayload,4120,encodePayload$1,4120,encoder,4121,end,4122,endOffset,4123,endsWith,4124,endsWith$1,4124,ensureOpen,4125,ensureOpen$1,4125,ensureOpen$2,4125,entries,4126,entries$body$ConstantMap,4126,equals,4127,equals$2,4127,error,4128,errorCallback,4129,errorCallback$2,4129,errorSubscription,4130,errorZone,4131,escapeChar,4132,execute,4133,execute$1,4133,executeWith,4134,executeWith$1,4134,executorId,4135,existingDatabases,4136,expand$1$1,4137,explanation,4138,explicitClose,3429,explicitlyLocked,4139,extendedResultCode,4140,f,3430,fd,4141,fetchNext,3431,file,3219,fileData,4142,fileId,3432,fileIdForPath,4143,fileIdForPath$1,4143,filePath,4144,fileSystem,4145,filename,4146,fillRange,4147,fillRange$3,4147,filter,4148,finalizable,4149,first,4150,firstMatch,4151,firstMatch$1,4151,firstPendingEvent,4152,firstWhere,4153,firstWhere$1,4153,flag0,4154,flag1,4155,flag2,4156,flags,3433,floorToDouble$0,4157,flush$0,4158,flush$1,4158,fold,4159,fold$1$2,4159,forEach,4160,forEach$1,4160,forTarget$1,4161,foreign,4162,forget$1,4163,fork,4164,fork$2$specification$zoneValues,4164,fragment,4165,frame,3434,frames,4166,free$1,4167,fromUri$1,2303,fullMessage,4168,fullPath,4169,functions,4171,fuse$1$1,4172,future,4173,get$$$1,3363,get$$$2,3364,get$$call,3531,get$_,3385,get$_2,3386,get$_3,3387,get$_4,3388,get$__,3390,get$__0,3392,get$__1,5059,get$__2,3389,get$__3,3391,get$___,3393,get$__js_helper$_addHashTableEntry,3629,get$__js_helper$_keys,3667,get$__js_helper$_modified,3675,get$__js_helper$_name,3676,get$__js_helper$_newLinkedCell,3683,get$__js_helper$_removeHashTableEntry,3692,get$__js_helper$_target,3701,get$__js_helper$_unlinkCell,3705,get$_absAddSetSign,4021,get$_absSubSetSign,4023,get$_add,3956,get$_addAllFromArray,3589,get$_addError,3745,get$_addEventError,3746,get$_addHashTableEntry,3957,get$_addListener,3747,get$_addPending,3748,get$_async$_add,3744,get$_async$_delegate,3837,get$_async$_isClosed,3869,get$_async$_onData,3888,get$_asyncComplete,3750,get$_asyncCompleteErrorObject,3752,get$_asyncCompleteWithValue,3753,get$_awaitOpened,4461,get$_badEventState,3754,get$_bind,3724,get$_bindCustomParam,4550,get$_bindIndexedParams,4551,get$_bindParam,4553,get$_bindParams,4554,get$_calculateIndexes,4570,get$_callOnCancel,3758,get$_canFire,3759,get$_cancel,3760,get$_cancelOnError,3762,get$_canceled,4749,get$_chainFuture,3818,get$_chainSource,3819,get$_checkCanOpen,4424,get$_checkPosition,3712,get$_checkState,3820,get$_cloneResult,3822,get$_close,3823,get$_closeRemainingConnections,4368,get$_closeSyncHandle,4599,get$_closeSyncHandleNoThrow,4600,get$_close_guarantee_channel$_sink,4710,get$_close_guarantee_channel$_stream,4711,get$_columnNames,4556,get$_complete,3825,get$_completeError,3826,get$_completeErrorObject,3827,get$_completeWithResultOf,3828,get$_completeWithValue,3829,get$_computeFieldKeys,3637,get$_computeHasCaptures,3638,get$_computeHashCode,3966,get$_computeKeys,3967,get$_computeScheme,4025,get$_contains,3968,get$_containsKey,3969,get$_convertGeneral,4005,get$_createBiggerBuffer,4741,get$_createPeriodicTimer,3831,get$_createTimer,3833,get$_decodeDbValue,4357,get$_decodeRecursive,4006,get$_decodeSqliteErrorResponse,4396,get$_decodeStackStrace,4397,get$_dedicated_worker$_handleMessage,4492,get$_defaultSplit,3593,get$_defaultValue,4743,get$_delegate,4465,get$_deserializeRequest,4398,get$_deserializeResponse,4399,get$_div,4030,get$_divRem,4031,get$_dlShift,4032,get$_drShift,4033,get$_encodeDbValue,4358,get$_endIndex,3610,get$_ensureDoneFuture,3841,get$_ensurePendingEvents,3842,get$_enumToString,4035,get$_error,3843,get$_errorCallback,3844,get$_errorExplanation,4036,get$_errorName,4037,get$_errorTest,3845,get$_eval,3729,get$_eventScheduled,3846,get$_execAnchored,3645,get$_execGlobal,3646,get$_execute,4561,get$_fieldKeys,3648,get$_fileId,4638,get$_fillBuffer,4008,get$_findBucketIndex,3972,get$_flush,4527,get$_forEachListener,3850,get$_foreign,4736,get$_fork,3851,get$_get,3974,get$_getBucket,3975,get$_getFieldValues,3652,get$_getPreparedStatement,4452,get$_guarantee_channel$_addError,4715,get$_guarantee_channel$_sink,4731,get$_guardCallback,3853,get$_handleData,3855,get$_handleDone,3856,get$_handleEnsureOpen,4372,get$_handleError,3857,get$_handleMessage,4350,get$_handleRequest,4373,get$_handleUncaughtError,3858,get$_hasCaptures,3656,get$_hasError,3859,get$_hasOneListener,3860,get$_hasPending,3861,get$_ignoreError,3863,get$_inAddStream,4727,get$_inCallback,3864,get$_indexed_db$_isClosed,4640,get$_initializeOrDone,3865,get$_insertBefore,3976,get$_invalidPosition,3716,get$_isAddingStream,3866,get$_isCanceled,3867,get$_isCaseSensitive,3662,get$_isChained,3868,get$_isComplete,3870,get$_isDotAll,3663,get$_isEmpty,3871,get$_isFile,4045,get$_isFiring,3872,get$_isHttp,4046,get$_isHttps,4047,get$_isInitialState,3873,get$_isInputPaused,3874,get$_isMultiLine,3664,get$_isPackage,4049,get$_isPaused,3875,get$_isPort,4050,get$_isUnicode,3665,get$_isWithinOrEquals,4532,get$_isWithinOrEqualsFast,4533,get$_isZero,4052,get$_lazy_trace$_trace,4702,get$_loadExecutor,4376,get$_loadLockedWasmVfs,4510,get$_local,4737,get$_log,4433,get$_map,3877,get$_markExists,4658,get$_mayAddEvent,3878,get$_mayAddListener,3879,get$_mayComplete,3880,get$_mayResumeInput,3881,get$_mergePaths,4054,get$_messageFromClient,4522,get$_modified,3984,get$_nativeAnchoredVersion,3678,get$_nativeBuffer,3718,get$_nativeGlobalVersion,3680,get$_needsNormalization,4534,get$_newConnection,4523,get$_newHashTable,3682,get$_newLinkedCell,3985,get$_onCancel,3887,get$_onDone,3889,get$_onError,3890,get$_onMicrotask,3892,get$_onPause,3893,get$_onResume,3894,get$_onSinkDisconnected,4729,get$_onStreamDisconnected,4730,get$_onValue,3895,get$_openForSynchronousAccess,4604,get$_parentDelegate,3898,get$_pathDirection,4536,get$_pendingEvents,3900,get$_prepareInternal,4544,get$_prependListeners,3901,get$_print,3903,get$_processUncaughtError,3904,get$_putExecutor,4379,get$_rangeOverFile,4645,get$_readField,3708,get$_readFile,4646,get$_readFiles,4647,get$_readValue,4564,get$_recordCancel,3905,get$_recordPause,3906,get$_recordResume,3907,get$_registerBinaryCallback,3908,get$_registerCallback,3909,get$_registerUnaryCallback,3910,get$_release,4439,get$_releaseExecutor,4380,get$_releaseImplicitLock,4605,get$_rem,4063,get$_remove,3991,get$_removeAfterFiring,3911,get$_removeHashTableEntry,3992,get$_removeListener,3912,get$_removeListeners,3913,get$_replaceSomeNullsWithUndefined,3598,get$_reset,4565,get$_resolvePath,4607,get$_resumeBody,3915,get$_reverseListeners,3916,get$_run,3922,get$_runBatched,4381,get$_runBinary,3923,get$_runInWorker,4596,get$_runMigrations,4441,get$_runQuery,4382,get$_runUnary,3924,get$_runWithArgs,4529,get$_scheduleMicrotask,3926,get$_selectResults,4566,get$_send,4353,get$_sendData,3927,get$_sendDone,3928,get$_sendError,3929,get$_serializeRequest,4402,get$_serializeResponse,4403,get$_serializeSelectResult,4404,get$_set,3994,get$_setErrorObject,3931,get$_setPendingEvents,3933,get$_setRangeFast,3721,get$_shapeTag,3697,get$_shrBothPositive,3601,get$_shrOtherPositive,3602,get$_shrReceiverPositive,3603,get$_simpleMerge,4067,get$_source,3622,get$_spawnExclusive,4384,get$_spawnTransaction,4385,get$_startFeatureDetection,4525,get$_startIndex,3624,get$_startWorkingIfNeeded,4648,get$_streamController,4732,get$_submitWork,4649,get$_subscribe,3942,get$_subscription,3943,get$_synchronized,4443,get$_tableNames,4568,get$_tdivFast,3604,get$_tdivSlow,3605,get$_text,4069,get$_thenAwait,3946,get$_toNonSimple,4071,get$_toString,3702,get$_transactionControl,4387,get$_transformerSink,3950,get$_tryResume,4756,get$_types,3704,get$_unlink,3996,get$_unlinkCell,3997,get$_unlisten,4757,get$_updateBlock,4651,get$_varData,3951,get$_waitForTurn,4388,get$_waitsForCancel,3952,get$_web_protocol$_decodeDbValue,4393,get$_web_protocol$_encodeDbValue,4400,get$_whenCompleteAction,3953,get$_write,4652,get$_writeReplacementCharacter,4014,get$_writeSurrogate,4015,get$_xAccess,4609,get$_xClose,4610,get$_xDelete,4611,get$_xFileSize,4612,get$_xLock,4613,get$_xOpen,4614,get$_xRead,4615,get$_xSync,4616,get$_xTruncate,4617,get$_xUnlock,4618,get$_xWrite,4619,get$_yieldStar,3954,get$_zone,3955,get$absolute,3493,get$absolutePathToUri,3494,get$add,3495,get$addAll,3496,get$addError,3497,get$addWrite,3499,get$allMatches,3502,get$allocateBytes,3503,get$asByteData,3510,get$asMap,3512,get$asUint8List,3514,get$beforeOpen,3516,get$beginExclusive,3517,get$beginTransaction,3518,get$beginTransactionInContext,3519,get$bind,3182,get$bindCallback,3520,get$bindCallbackGuarded,3521,get$bindUnaryCallback,3522,get$bindUnaryCallbackGuarded,3523,get$bindings,3524,get$bitLength,3525,get$buffer,3528,get$canSerializeSqliteExceptions,3535,get$cancel,3538,get$cast,3541,get$ceil,3544,get$clear,3551,get$close,3552,get$closed,3555,get$codeUnitAt,3557,get$codeUnits,3558,get$codeUnitsEqual,3559,get$columnNames,3563,get$compareTo,3566,get$complete,3567,get$completeError,3568,get$completeWithError,3569,get$conflict,3571,get$contains,3573,get$containsKey,3574,get$containsSeparator,3575,get$context,2388,get$convert,3577,get$createFile,3581,get$createFunction,3582,get$createTimer,3584,get$current,685,get$database,4092,get$day,4094,get$deallocateArguments,4097,get$decode,4098,get$decodeGeneral,4099,get$decodePayload,4100,get$decoder,4101,get$deleteFile,4104,get$deserialize,4108,get$detach,4109,get$dialect,4111,get$dispatchTableUpdateNotification,4113,get$dispose,4114,get$disposeAll,4115,get$done,4116,get$elementAt,4117,get$encode,4119,get$encodePayload,4120,get$encoder,4121,get$end,4122,get$endOffset,4123,get$endsWith,4124,get$ensureOpen,4125,get$entries,4126,get$equals,4127,get$errorCallback,4129,get$errorZone,4131,get$execute,4133,get$executeWith,4134,get$file,3219,get$fileIdForPath,4143,get$fillRange,4147,get$filter,4148,get$first,4150,get$firstMatch,4151,get$firstWhere,4153,get$fold,4159,get$forEach,4160,get$foreign,4162,get$fork,4164,get$fragment,4165,get$frames,4166,get$future,4173,get$getRange,4175,get$getRoot,4176,get$handleError,4179,get$handleUncaughtError,4182,get$handlesComplete,4185,get$handlesError,4186,get$handlesValue,4187,get$hasAbsolutePath,4188,get$hasAuthority,4189,get$hasEmptyPath,4190,get$hasErrorCallback,4191,get$hasErrorTest,4192,get$hasFragment,4193,get$hasListener,4194,get$hasPort,4196,get$hasQuery,4197,get$hasScheme,4198,get$hasTrailingSeparator,4199,get$hash,3263,get$hashCode,4200,get$host,4203,get$hour,4204,get$impl,4206,get$inMicroseconds,4207,get$inMilliseconds,4208,get$incomingRequests,4210,get$indexOf,4212,get$injectedValues,4217,get$insert,4220,get$insertAll,4221,get$insertInto,4222,get$internalComputeHashCode,4229,get$internalContainsKey,4230,get$internalFindBucketIndex,4231,get$internalGet,4232,get$internalRemove,4233,get$internalSet,4234,get$invalidValue,4235,get$isAbsolute,4236,get$isBroadcast,4237,get$isClosed,4238,get$isCompleted,4239,get$isEmpty,4241,get$isExplain,4242,get$isInfinite,4244,get$isNaN,4245,get$isNegative,4246,get$isNotEmpty,4247,get$isOdd,4248,get$isOpen,4249,get$isPaused,4250,get$isRootRelative,4252,get$isScheduled,4253,get$isScheme,4254,get$isSeparator,4255,get$isSequential,4256,get$isUnicode,4259,get$iterator,4262,get$join,4263,get$joinAll,4264,get$keys,4266,get$last,4268,get$lastClientDisconnected,4269,get$lastIndexOf,4270,get$lastInsertRowId,4271,get$length,4273,get$lengthInBytes,4274,get$library,4275,get$list,4277,get$listFiles,4278,get$listen,4279,get$local,4284,get$location,4285,get$logStatements,4287,get$map,4289,get$matchAsPrefix,4290,get$matchTypeError,4291,get$matchesErrorTest,4292,get$member,4294,get$memory,4295,get$message,4297,get$microsecond,4301,get$millisecond,4302,get$millisecondsSinceEpoch,4303,get$minute,4304,get$month,4306,get$moveNext,4307,get$name,4308,get$namedGroup,4309,get$needsSeparator,4310,get$newRequestId,4314,get$next,4316,get$nextInt,4317,get$normalize,4318,get$offsetInBytes,4321,get$onData,4323,get$onError,4324,get$open,3308,get$openConnection,4328,get$openDatabase,4329,get$outFlags,4339,get$padLeft,4759,get$padRight,4760,get$parameterCount,4761,get$parent,4764,get$path,4766,get$pathFromUri,4768,get$pathSegments,4769,get$pathsEqual,4770,get$pause,4772,get$perform,4774,get$port,4775,get$prepare,4776,get$prettyUri,4777,get$previous,4778,get$print,446,get$putIfAbsent,4780,get$query,4782,get$readFully,4786,get$readInto,4787,get$register,4793,get$registerBinaryCallback,4794,get$registerCallback,4795,get$registerUnaryCallback,4797,get$relative,4801,get$relativePathToUri,4802,get$remove,4809,get$removeAt,4810,get$removeFragment,4811,get$removeLast,4812,get$removeTrailingSeparators,4813,get$replace,4814,get$replaceFirst,4816,get$replaceRange,4817,get$resolve,4823,get$resolveUri,4824,get$respondError,4826,get$result,4828,get$resume,4830,get$reversed,4832,get$rollback,4833,get$rootLength,4837,get$run,4840,get$runBatchSync,4841,get$runBatched,4842,get$runBinary,4843,get$runBinaryGuarded,4844,get$runCustom,4845,get$runDelete,4846,get$runGuarded,4847,get$runInsert,4848,get$runSelect,4849,get$runUnary,4850,get$runUnaryGuarded,4851,get$runUpdate,4852,get$runWithArgsSync,4853,get$runtimeType,4854,get$schedule,4856,get$scheduleMicrotask,319,get$schemaVersion,4857,get$scheme,4858,get$second,4859,get$selectWith,4861,get$send,4863,get$sendTo,4864,get$sendToClient,4865,get$sendToPort,4866,get$sendToWorker,4867,get$separator,4868,get$serialize,4871,get$serve,4873,get$setAll,4877,get$setRange,4880,get$setRequestHandler,4881,get$shutdown,4885,get$sink,4886,get$skip,4887,get$skipWhile,4888,get$sort,4889,get$split,4891,get$sqlite3_initialize,4926,get$sqlite3_prepare,4929,get$stackTrace,4952,get$start,4953,get$startsWith,4955,get$stream,4966,get$sublist,4968,get$substring,4969,get$supportsReadingTableNameForColumn,4974,get$synchronized,4977,get$take,4981,get$then,4984,get$toFilePath,4986,get$toInt,4987,get$toList,4988,get$toString,4991,get$toTrace,4992,get$toUri,4994,get$transactionDelegate,4997,get$trim,5000,get$truncate,5001,get$tryFormat,5003,get$unary_,5005,get$updatedRows,5007,get$uri,5009,get$userInfo,5011,get$userVersion,5012,get$values,5013,get$versionDelegate,5017,get$weekday,5022,get$whenComplete,5023,get$write,5029,get$xAccess,5035,get$xCheckReservedLock,5036,get$xClose,5037,get$xDelete,5039,get$xDeviceCharacteristics,5040,get$xFileSize,5041,get$xFullPathName,5043,get$xLock,5046,get$xOpen,5047,get$xRead,5049,get$xSleep,5050,get$xSync,5052,get$xTruncate,5053,get$xUnlock,5054,get$xWrite,5056,get$year,5057,getInt32$1,4174,getRange,4175,getRange$2,4175,getRoot,4176,getRoot$1,4176,getTag,3435,getUint32$1,4177,getUnknownTag,3436,group$1,4178,handleData,3437,handleDone,3438,handleError,4179,handleError$1,4179,handleFinalized$1,4180,handleNext$1,4181,handleUncaughtError,4182,handleUncaughtError$2,4182,handleUncaughtError$3,4182,handleValue$1,4183,handleWhenComplete$0,4184,handler,3439,handlesComplete,4185,handlesError,4186,handlesValue,4187,hasAbsolutePath,4188,hasAuthority,4189,hasEmptyPath,4190,hasError,3440,hasErrorCallback,4191,hasErrorTest,4192,hasFragment,4193,hasListener,4194,hasMatch$1,4195,hasPort,4196,hasQuery,4197,hasScheme,4198,hasTrailingSeparator,4199,hash,3263,hash$1,3263,hashCode,4200,hashMapCellKey,4201,hashMapCellValue,4202,host,4203,hour,4204,id,4205,idIsActive,3441,impl,4206,importsJs,3442,inMicroseconds,4207,inMilliseconds,4208,inSameErrorZone$1,4209,incomingRequests,4210,index,4211,indexOf,4212,indexOf$1,4212,indexOf$2,4212,indexable,4213,indexedDbExists,4214,initPort,3443,initializationPort,4215,initialize$0,4216,initializer,3444,injectedValues,4217,innerStream,4218,input,4219,insert,4220,insert$2,4220,insertAll,4221,insertAll$2,4221,insertInto,4222,insertInto$1,4222,installedCommitHook,4223,installedRollbackHook,4224,installedUpdateHook,4225,instance,4226,int32View,4227,integerType,4228,internalComputeHashCode,4229,internalComputeHashCode$1,4229,internalContainsKey,4230,internalContainsKey$1,4230,internalFindBucketIndex,4231,internalFindBucketIndex$2,4231,internalGet,4232,internalGet$1,4232,internalRemove,4233,internalRemove$1,4233,internalSet,4234,internalSet$2,4234,invalidValue,4235,isAbsolute,4236,isAbsolute$1,4236,isBroadcast,4237,isClosed,4238,isCompleted,4239,isCore,4240,isEmpty,4241,isExplain,4242,isInTransaction,4243,isInfinite,4244,isNaN,4245,isNegative,4246,isNotEmpty,4247,isOdd,4248,isOpen,4249,isPaused,4250,isRelative$1,4251,isRootRelative,4252,isRootRelative$1,4252,isScheduled,4253,isScheme,4254,isScheme$1,4254,isSeparator,4255,isSeparator$1,4255,isSequential,4256,isSync,4257,isUndefined,4258,isUnicode,4259,isUtc,4260,isValid,4261,isWithin$2,2156,iterator,4262,join,4263,join$0,4263,join$1,4263,join$16,4263,join$2,4263,joinAll,4264,joinAll$1,4264,joinedResult,3445,key,4265,keys,4266,kind,4267,last,4268,lastClientDisconnected,4269,lastIndexOf,4270,lastIndexOf$1,4270,lastIndexOf$2,4270,lastInsertRowId,4271,lastPendingEvent,4272,length,4273,lengthInBytes,4274,library,4275,line,4276,list,4277,listFiles,4278,listFiles$0,4278,listen,4279,listen$1,4279,listen$2$onDone,4279,listen$3$onDone$onError,4279,listen$4$cancelOnError$onDone$onError,4279,listener,4280,listenerHasError,4281,listenerValueOrError,4282,listeners,4283,local,4284,location,4285,lockStatus,4286,logStatements,4287,longest,3446,malloc$1,4288,map,4289,map$1$1,4289,matchAsPrefix,4290,matchAsPrefix$2,4290,matchTypeError,4291,matchTypeError$1,4291,matchesErrorTest,4292,matchesErrorTest$1,4292,max$2,527,maxSize,4293,member,4294,memory,4295,memoryFile,4296,message,4297,messageSubscription,4298,messages,4299,method,4300,micros,3447,microsecond,4301,millisecond,4302,milliseconds,3448,millisecondsSinceEpoch,4303,minute,4304,modifiedObject,4305,moduleJs,3449,month,4306,moveNext,4307,moveNext$0,4307,nByte,3450,nOut,3451,name,4308,namedGroup,4309,namedGroup$1,4309,needsSeparator,4310,needsSeparator$1,4310,needsSeparatorPattern,4311,newCompiler$1,4312,newFileLength,4313,newRequestId,4314,newRequestId$0,4314,newSerialization,4315,next,4316,nextInt,4317,nextInt$1,4317,normalize,4318,normalize$0,4318,normalize$1,4318,normalize$3,4318,notify$1,3298,notifyDatabaseOpened$1,4319,offset,4320,offsetInBytes,4321,onCancel,4322,onData,4323,onData$1,4323,onError,4324,onError$1,4324,onListen,4325,onPause,4326,onResume,4327,open,3308,open$0,3308,open$1,3308,open$2$vfs,3308,openConnection,4328,openConnection$5$databaseName$enableMigrations$initializer$sqlite3WasmUri$storage,4328,openConnection$body$DriftServerController,4328,openDatabase,4329,openDatabase$0,4329,openFile$1$create,4330,openInMemory$0,4331,openRequest,3452,opened,3453,openedFiles,4332,opener,4333,operation,4334,opfsExists,4335,orElse,3454,original,4336,originalContent,4337,originalRequestId,4338,originalSource,3455,outFlags,4339,pOutFlags,3456,pResOut,3457,padLeft,4759,padLeft$2,4759,padRight,4760,padRight$1,4760,parameterCount,4761,parameters,4762,parametersToStatement,4763,parent,4764,parts,4765,path,4766,pathContext,4767,pathFromUri,4768,pathFromUri$1,4768,pathSegments,4769,pathsEqual,4770,pathsEqual$2,4770,pattern,4771,pause,4772,pause$0,4772,payload,4773,perform,4774,perform$1,4774,port,4775,pos,3458,prepare,4776,prepare$1,4776,prepare$2$checkNoTail,4776,prettyUri,4777,prettyUri$1,4777,previous,4778,print,446,print$1,446,protocol,3460,protocolVersion,4779,prototypeForTag,3461,putIfAbsent,4780,putIfAbsent$2,4780,pzTail,4781,query,4782,random,4783,rawValues,4784,readField$1$0,4785,readFully,4786,readFully$1,4786,readInto,4787,readInto$2,4787,readLocal$1$0,4788,readRequest,4789,readResponse,4790,readWriteUnsafe,3462,readonly,4791,realType,4792,register,4793,register$1,4793,registerBinaryCallback,4794,registerBinaryCallback$3$1,4794,registerCallback,4795,registerCallback$1$1,4795,registerFile$1,4796,registerUnaryCallback,4797,registerUnaryCallback$2$1,4797,registerVfs$1,4798,registerVirtualFileSystem$2,4799,registerVirtualFileSystem$2$makeDefault,4799,registered,3463,registeredVfs,4800,relative,4801,relative$1,4801,relative$2$from,4801,relativePathToUri,4802,relativePathToUri$1,4802,relativeRootPattern,4803,release,4804,remainder$1,4805,remaining,4806,remoteCause,4807,remoteStackTrace,4808,remove,4809,remove$1,4809,removeAt,4810,removeAt$1,4810,removeFragment,4811,removeFragment$0,4811,removeLast,4812,removeLast$0,4812,removeTrailingSeparators,4813,removeTrailingSeparators$0,4813,replace,4814,replace$1$scheme,4814,replaceAll$2,4815,replaceFirst,4816,replaceFirst$2,4816,replaceRange,4817,replaceRange$3,4817,replacedBlocks,4818,request,3464,request$1$1,4819,requestAndWaitForResponse$1,4820,requestId,4821,requestTrace,4822,resolve,4823,resolve$1,4823,resolveUri,4824,resolveUri$1,4824,respond$1,4825,respond$2,4825,respondError,4826,respondError$3,4826,response,4827,result,4828,resultCode,4829,resume,4830,resume$0,4830,returnCode,4831,reversed,4832,rollback,4833,rollback$0,4833,rollbackToSavepoint,4834,rollbackTransaction$1,4835,root,4836,rootLength,4837,rootLength$1,4837,rootLength$2$withDrive,4837,rootPattern,4838,row,3466,rowOffset,3465,rows,4839,run,4840,run$0,4840,run$1$1,4840,runBatchSync,4841,runBatchSync$1,4841,runBatched,4842,runBatched$1,4842,runBatched$2,4842,runBinary,4843,runBinary$3$3,4843,runBinaryGuarded,4844,runBinaryGuarded$2$3,4844,runCustom,4845,runCustom$1,4845,runCustom$2,4845,runCustom$3,4845,runDelete,4846,runDelete$2,4846,runDelete$3,4846,runGuarded,4847,runGuarded$1,4847,runInsert,4848,runInsert$2,4848,runInsert$3,4848,runSelect,4849,runSelect$2,4849,runSelect$3,4849,runSelect$body$Sqlite3Delegate,4849,runUnary,4850,runUnary$2$2,4850,runUnaryGuarded,4851,runUnaryGuarded$1$2,4851,runUpdate,4852,runUpdate$2,4852,runWithArgsSync,4853,runWithArgsSync$2,4853,runtimeType,4854,savepoint,4855,schedule,4856,schedule$1,4856,scheduleMicrotask,319,scheduleMicrotask$1,319,schemaVersion,4857,scheme,4858,second,4859,select$1,4860,selectWith,4861,selectWith$1,4861,self,4862,send,4863,send$0,4863,sendTo,4864,sendTo$1,4864,sendToClient,4865,sendToClient$1,4865,sendToPort,4866,sendToPort$1,4866,sendToWorker,4867,sendToWorker$1,4867,separator,4868,separatorPattern,4869,separators,4870,serialize,4871,serialize$1,4871,serializer,4872,serve,4873,serve$1,4873,serve$2,4873,serve$2$serialize,4873,server,4874,servers,4875,sessionApply,4876,set$_async$_next,3885,set$_async$_previous,3902,set$_close_guarantee_channel$_sink,4710,set$_close_guarantee_channel$_stream,4711,set$_close_guarantee_channel$_subscription,4712,set$_delegate,4465,set$_foreign,4736,set$_guarantee_channel$_sink,4731,set$_list,3980,set$_local,4737,set$_next,3987,set$_previous,3990,set$_streamController,4732,set$_transformerSink,3950,set$_varData,3951,set$bindings,3524,set$injectedValues,4217,set$installedCommitHook,4223,set$installedRollbackHook,4224,set$installedUpdateHook,4225,set$length,4273,set$memory,4295,set$next,4316,set$onListen,4325,set$onResume,4327,set$parts,4765,set$syncHandle,4976,set$userVersion,5012,set$value,3357,set$versionDelegate,5017,setAll,4877,setAll$2,4877,setFloat64$3,4878,setInt32$2,4879,setRange,4880,setRange$3,4880,setRange$4,4880,setRequestHandler,4881,setRequestHandler$1,4881,setSchemaVersion$1,4882,setUint32$2,4883,shouldChain$1,4884,shutdown,4885,shutdown$0,4885,sink,4886,size,3468,sizePtr,3467,skip,4887,skip$1,4887,skipWhile,4888,skipWhile$1,4888,sort,4889,sort$0,4889,sort$1,4889,source,4890,sourceResult,3469,span,3470,split,4891,split$1,4891,sql,4892,sqlite3,4893,sqlite3Options,4894,sqlite3WasmUri,4895,sqlite3_bind_blob64$2,4896,sqlite3_bind_blob64$5,4896,sqlite3_bind_double$2,4897,sqlite3_bind_double$3,4897,sqlite3_bind_int$3,4898,sqlite3_bind_int64$2,4899,sqlite3_bind_int64$3,4899,sqlite3_bind_int64BigInt$2,4900,sqlite3_bind_null$1,4901,sqlite3_bind_null$2,4901,sqlite3_bind_parameter_count$0,4902,sqlite3_bind_parameter_count$1,4902,sqlite3_bind_parameter_index$1,4903,sqlite3_bind_parameter_index$2,4903,sqlite3_bind_text$2,4904,sqlite3_bind_text$5,4904,sqlite3_changes$0,4905,sqlite3_changes$1,4905,sqlite3_close_v2$0,4906,sqlite3_close_v2$1,4906,sqlite3_column_blob$2,4907,sqlite3_column_bytes$1,4908,sqlite3_column_bytes$2,4908,sqlite3_column_count$0,4909,sqlite3_column_count$1,4909,sqlite3_column_double$1,4910,sqlite3_column_double$2,4910,sqlite3_column_int64$2,4911,sqlite3_column_int64OrBigInt$1,4912,sqlite3_column_name$1,4913,sqlite3_column_name$2,4913,sqlite3_column_table_name$1,4914,sqlite3_column_text$1,4915,sqlite3_column_text$2,4915,sqlite3_column_type$1,4916,sqlite3_column_type$2,4916,sqlite3_commit_hook$1,4917,sqlite3_create_function_v2$4$eTextRep$functionName$nArg$xFunc,4918,sqlite3_errmsg$0,4919,sqlite3_errmsg$1,4919,sqlite3_error_offset$0,4920,sqlite3_error_offset$1,4920,sqlite3_errstr$1,4921,sqlite3_exec$1,4922,sqlite3_exec$5,4922,sqlite3_extended_errcode$0,4923,sqlite3_extended_errcode$1,4923,sqlite3_extended_result_codes$1,4924,sqlite3_extended_result_codes$2,4924,sqlite3_finalize$0,4925,sqlite3_finalize$1,4925,sqlite3_initialize,4926,sqlite3_initialize$0,4926,sqlite3_last_insert_rowid$0,4927,sqlite3_last_insert_rowid$1,4927,sqlite3_open_v2$3,4928,sqlite3_open_v2$4,4928,sqlite3_prepare,4929,sqlite3_prepare$3,4929,sqlite3_prepare_v3$6,4930,sqlite3_reset$0,4931,sqlite3_reset$1,4931,sqlite3_result_blob64$1,4932,sqlite3_result_blob64$4,4932,sqlite3_result_double$1,4933,sqlite3_result_double$2,4933,sqlite3_result_error$1,4934,sqlite3_result_error$3,4934,sqlite3_result_int64$1,4935,sqlite3_result_int64$2,4935,sqlite3_result_int64BigInt$1,4936,sqlite3_result_null$0,4937,sqlite3_result_null$1,4937,sqlite3_result_subtype$1,4938,sqlite3_result_subtype$2,4938,sqlite3_result_text$1,4939,sqlite3_result_text$4,4939,sqlite3_rollback_hook$1,4940,sqlite3_step$0,4941,sqlite3_step$1,4941,sqlite3_stmt_isexplain$0,4942,sqlite3_stmt_isexplain$1,4942,sqlite3_temp_directory,4943,sqlite3_update_hook$1,4944,sqlite3_user_data$1,4945,sqlite3_value_blob$0,4946,sqlite3_value_blob$1,4946,sqlite3_value_bytes$1,4947,sqlite3_value_double$0,4948,sqlite3_value_double$1,4948,sqlite3_value_int64$0,4949,sqlite3_value_int64$1,4949,sqlite3_value_text$0,4950,sqlite3_value_text$1,4950,sqlite3_value_type$0,4951,sqlite3_value_type$1,4951,stackTrace,4952,start,4953,start$0,4953,startChunkedConversion$1,4954,startsWith,4955,startsWith$1,4955,startsWith$2,4955,state,4956,statement,4957,statementIndex,4958,statements,4959,stmt,4960,stmtOut,4961,stmts,4962,storage,4963,storageApi,4964,storedCallback,4965,stream,4966,style,4967,sublist,4968,sublist$2,4968,subscription,3471,substring,4969,substring$1,4969,substring$2,4969,super$DelegatingStreamSink$close,3552,super$Iterable$skipWhile,4888,super$LegacyJavaScriptObject$toString,4991,super$ListBase$setRange,4880,super$Sqlite3Delegate$close,3552,super$_BroadcastStreamController$_addEventError,3396,super$_BufferingStreamSubscription$_add,3394,super$_BufferingStreamSubscription$_addError,3395,super$_BufferingStreamSubscription$_close,3484,super$_StreamSinkTransformer$bind,3182,supportsIndexedDb,4970,supportsIndexedParameters,4971,supportsNestedWorkers,4972,supportsOpfs,4973,supportsReadingTableNameForColumn,4974,supportsSharedArrayBuffers,4975,syncDir,3472,syncHandle,4976,synchronized,4977,synchronized$1$1,4977,synchronizer,4978,table,4979,tableNames,4980,take,4981,take$1,4981,takeOpcode$0,4982,target,3473,test,3474,textType,4983,then,4984,then$1$1,4984,then$1$2$onError,4984,toDouble$0,4985,toFilePath,4986,toFilePath$0,4986,toInt,4987,toInt$0,4987,toList,4988,toList$0,4988,toList$1$growable,4988,toLowerCase$0,4989,toRadixString$1,4990,toString,4991,toString$0,4991,toTrace,4992,toTrace$0,4992,toUpperCase$0,4993,toUri,4994,toUri$1,4994,token,4995,trace,3476,traces,4996,transactionDelegate,4997,transactionId,3477,transform$1$1,4998,transformStream$1,4999,trim,5000,trim$0,5000,truncate,5001,truncate$2,5001,truncateToDouble$0,5002,tryFormat,5003,tryFormat$1,5003,type,5004,unary_,5005,unlink$0,5006,updatedRows,5007,updates,5008,uri,5009,use$1,5010,user,3478,userInfo,5011,userVersion,5012,value,3357,values,5013,version,5014,versionBefore,5015,versionCode,5016,versionDelegate,5017,versionNow,5018,vfs,5019,viewByteRange$2,5020,waitForRequest$0,5021,wasmServer,3479,webNativeSerialization,3480,weekday,5022,whenComplete,5023,whenComplete$1,5023,where$1,5024,whereType$1$0,5025,work,5026,worker,3481,wrapDatabase$1,5027,wrapStatement$2,5028,write,5029,write$1,5029,writeAll$2,5030,writeBlock,3482,writeCharCode$1,5031,writeToJs$1,5032,writeln$0,5033,writes,5034,xAccess,5035,xAccess$2,5035,xCheckReservedLock,5036,xCheckReservedLock$0,5036,xClose,5037,xClose$0,5037,xCurrentTime$0,5038,xDelete,5039,xDelete$2,5039,xDeviceCharacteristics,5040,xFileSize,5041,xFileSize$0,5041,xFinal,5042,xFullPathName,5043,xFullPathName$1,5043,xFunc,5044,xInverse,5045,xLock,5046,xLock$1,5046,xOpen,5047,xOpen$2,5047,xRandomness$1,5048,xRead,5049,xRead$2,5049,xSleep,5050,xSleep$1,5050,xStep,5051,xSync,5052,xSync$1,5052,xTruncate,5053,xTruncate$1,5053,xUnlock,5054,xUnlock$1,5054,xValue,5055,xWrite,5056,xWrite$2,5056,year,5057,zOut,3483,zone,5058" + }, + "frames": "uyTAoJem0KmC;+HAKAA6C;4CAKCVY;4CACeDE;sKAIlBAE;oBAGOF8B;8OAaApzKAA8CgBCgEANK2FwG,A,oB;sgBATrC1FAAmB0BDgEAVW2F8E,A,AAUvCEiD,A;ooBGrJSgwKgBAsCwB+C6C,A;kNAwhBbhGyC;qtTGpkBTr7FuH;eAEF4pFuF;0zCG4KT5pFAAAAAwR,A;uPAwIWAsI;eAEF4pFwG;oSA6IE5pFoG;eAEF4pFsE;iKAwFE5pFAAmByC+rFkH,A;OAnBzC/rFAAmBF4pFgG,A;gBAjB4BmC8G;OAA5BnCkE;+EAiWE5pFoG;6DA0GsBA8B;0DAIHAoC;2uKRl9BVuhGsB;4LAmCL1FY;mrBAyLTjPmG;uzCAwJSliKAW0fRCuB,A;uCX1fQDAW0fRCAAo5B6C8vK6B,A,A;uMXv3C1Ba6C;+YAYb5wKAWudNCeAo5B6C8vK6B,A,A;qPXt1CzCkGAARF7CsB,A;gYAyBWeyC;8xFAuRLxpCsB;22EAkdyBl7B4C;ygBAoCnBA2C;uDASAA6C;8LA8CAn6B8F;0xDAuHdAkG;iuBAsPEA+S;u4BAkNAA2C;yxCA4DyBAkB;8oDAkCJAkB;4DAQ1BAoE;wDAKuB2nCkF;OAChB3nC0B;sJAOCkhGc;4BAIgBlhGoE;sOAUjBA0B;4NA8BmBA4B;6FAGtBA4C;ubAsEK28Fe;qJAEDDsB;AACEAyB;yvEAmQJ18F+C;cAKAAgG;grIAyTEA0F;m7DA+F6Bu9FmK;AACHqCsK;wRAwIzB5xKAW16EN6oKiD,sB;sPXg8EU72FoG;iEACKq+FiC;uXA24BblrJsB;qeCjsHIisJa;8BACc3wKAAsE3BDAFzIAFuI,A,A;aEmE2BGAAuEpBqtKE,A;8DAtEWsDa;oGAKK1wKAAzChB0wKa,A;yLA+CMAoB;kCACkB3wKAAyD/BDAFzIAF2I,A,A;aEgF+BGAA0DxBqtKE,A;sEAzDWsDoB;4GAGK1wKAApDhB0wK0D,A;0QA0EE3wKAA+BTDAFzIAFuI,A,A;aE0GSGAAgCFqtKE,A;2NAvBEntKAA2BTHAF9IAFsB,A,oI;SEmHSKAA4BFmtKE,A;iRAbEntKAAYTHAF9IAFsB,A,oI;SEkISKAAaFmtKE,A;4KAMPttKAFrJAFgE,A;27CEwNQEAFxNRFwN,A;iIEsO2B8wK8P;o2BAqFXlwK6E;ugDexRPIAAnGFixKwC,A;wIAqGE9xC4B;6GAGyBoDc;oDAsB9BviIAA9HGixK8C,A;4TA4IWxiBe;ydA2BP+hB2D;AACFYoC;sCAAAAiC;kWAeMIyC;sFAIFDgD;8aA+BCN8C;uBASRjxKAAnOCixKY,A;0FAoOIEiB;eAKJCiB;kDAAAAiC;4KAgHOHuD;4JAONGiD;kDAA0BXgB;AAA1BWoC;wmNEjUR3qEAAAAAY,A;ywBC4iBQi3DgD;4MA6jBMx5BuC;OACLy5B8C;2OAkKAA+C;qEAkH8BMuB;gLAY/BPwC;AACAC8C;isER1zCe0HgB;AAFA+FsB;2BAGf/CyE;AAD0C/HAA6JlC6KoB,A;mEA/ECtKAAxBsBqKc,A;6EA0BECU;qGAsJzBEiB;gTAwLN1KAA/R8BYwC,A;AAkSxBxBmB;qDAGV4HqD;AAEWnwEAAhMD6zEyB,A;AAiMGwD8B;wGAIbtOAA/PU4KyB,A;AAmQT2D2B;0ZAmCQjOAA5ZwBqKc,A;8JAqabCqB;qRAUAAqB;mSAUWxKkB;kRAe3BDAAtYM2K6C,A;sCA0YGpLAA9XHkLqB,A;iGAgYQnLkB;kUAiBHqBAAvYILiC,A;AAwYJIkB;+QAUIIAA9XT2JqB,A;qHAqYiC9KkB;iZAqB5BGiC;AACDsKmB;oGAODvKAAxZH4KqB,A;yTAqaI1KAA3ZJyKqB,A;6EA+ZUN2B;0VAmBNEmE;uEAGDKa;kXAiBCLmE;2EAImBF4B;AACEAiC;AACtBOiB;4YAyB0B7JqL;AASAP8D;0GASbDoC;0PAYiB4JAAhZRh6FkD,A;AAiZrB+3FkE;AAIALkE;AAIADkC;gVA4CFgDoB;iLAaZlIsB;sMAuBFEiB;sCAIO+KmC;k4BAmFkBjLiE;kRAyBX2He;uCAEN/oKgE;+ZAyEyB0BAGl+BtBk+JyC,A;oCHk+BsBl+JAGl+BtBk+JqC,A;QHm+BKj+JiCAlFlBy/JuD,A;uHAsFcqI0B;aAEL4CmC;OAAwBxM4B;iFAOMh+JAAI5BgtEY,A;AAJFyvF2B;uBAA8Bz8JAAI5BgtEAAkCbAAAAAAAACMk3F2C,A,A,A,A;4QAzBSL4D;8JASFDyD;sDAGNCwE;oEAKkB1lKmD;wFA6DrBomK4C;OACOlFmB;0OAWIlCAA7gCwBqKc,A;4UA+hCnBxKAA79BJ2KmB,A;WA89BM1K8C;AAWdgIqD;wOAYC3kK+CA2BmBq9JAA1/BZgKkB,A,AA2/BMjKiB,yD;+JArBPPAA9jCwBqK6D,A;0YAmmC1BlCmlC;AAEFpOO;AADP8MmB;+XAiEO3EI;AADO7BAAlkCFiKqB,A;4JA4kCFxJiC;uBAKVwBiB;iRAsBO+KmC;gCACGvMiC;uBAKVwBiB;iPAkBEAmB;kBAOYxB0B;gOAwBZwBmB;kUA0BSJiC;sMAaWAmD;uKAQRz/DiC;yBADsBjoG+B;wTAUMAiG;mIAmBbAeA8VmB8vKkG,A;6KAhVhC7nEiC;yGAgBTy/DO;AAAazCAAlwCR6KyB,A;yDAmwCRpIW;ijHAwKmB+HS;wDAGDK4B;6JAYA9JAAz8CVgKsC,A;AA08CKjKc;0HAMG0Je;AACFwGyD;AACExG4B;8KAOGK8B;+CAELEsB;kdAgBMPiB;wrBAgBFK8B;AACjB1gKAAukEMo2JAA3pHwBqKkB,A,A;4RA6lDlB1JAAj/CCR0C,A;AAk/CeX6C;AACQiByE;AAGPwJ8C;AACO/JyE;AAGP+JiC;AACNhKkC;AACPgKe;oNAWVK4B;uNAaEA8B;uNAaFHqB;6EAKEGsC;AAIFEuB;8XAsBAxKAA5qDwBqKc,A;sRAqrDVhKAAnlDbiKmB,A;6FAqlDStKAAvrDcqKgB,A;4JAgsDV5KAAzlDb6KgC,A;8DA8lDIzKAAnoDJ2KoB,A;gBA4oDM1KgB;gWAgBOJAAxmDb4K8B,A;AAymDG3KO;2CAUDCAAzmDIOsC,A;wQAinDFiRsB;2JAsLPtSAAHKmSG,oB;uDAKPnSAALOmSG,c;mJAWDjF6B;0IAKO3ByB;AACP9FmE;uYAiBO0MW;oGAqCAjFW;iEAeHgCiC;AADP/B8C;+CAGFrG8E;AACHqI8B;qIASS1OmB;8CAGV4H+B;AAEa6GiC;+CAETpIoF;AACHqI8B;+IAKS/OmB;8CAGV4H6D;AAEuBnwEAAx2Df6zEyB,A;AAy2DKwD0C;sHAGXhOAA5hE6BqK2B,A;AA6hEdlLgC;AAKhB8OuC;6EAyCHpH8C;AACAO0C;iFAuGe4GqC;AADP/BoB;+CAGsBzOAAIpBqMAAjhEPh6FsC,A,AAkhEHw3FwB,AACAL+B,yD;AANGlFAApGAmMQ,AAAOhCwB,A;0FAqHK+B8B;AAFN1SAA7DK3kEAAv9DJ6zEiD,A,A;AAqhEFyBoB;8HAGLnKAAvHAmMQ,AAAOhCwB,A;wKAqIOjMAAttEgBqKmC,A;6LA2tEZ5KAApnEX6KoB,A;+GA0nEATAAzjEPh6FsC,A;AA0jEHw3FqB;AACAI4B;GACAT+B;oIAWegH8B;AAFN7SAApGKxkEAAz9DJ6zEiD,A,A;AA8jEFyBoB;8HAGLnKAAhKAmMQ,AAAOhCwB,A;wJA8KOjMgB;+HAIVwE+D;oIAKGqFAAhmEPh6FsC,A;AAimEHw3FqB;AACAI4B;GACAT+B;sIAOegHqE;AADP/BoB;+CAMV/OAASY2MAAxnEPh6FsC,A,AAynEHw3FsB,AACAI4B,AACAT+B,yD;AAfGlFAAnMAmMQ,AAAOhCwB,A;oHAwNMhCe;wFAEIKG;AACC3zEAA5nEX6zEyB,A;qIAqoEMPe;uFAGmBFiC;AACZIiE;AAIPGO;AACK3zEAA9oEX6zEiC,A;mJAyqEDnPAAjBO4OqB,qE;AAmBD+DgB;AADP/BkB;+CAMV9OAAUY0MAAlsEPh6FsC,A,AAmsEHw3FqB,AACAI4B,AACAIyC,AACgBoCwB,AAEdzC2B,AAA6BuCc,AAE/B/C6B,yD;AArBGlFAA5QAmMQ,AAAOhCsB,A;oJA2TNjMAA54E6BqKsC,A;AA64ErBjLAA/zEFkLmB,A;AAg0EUNmB;AAChB7KkD;iEAIKnEaApBPrkEAA/sEQ6zEyF,A,A;AAquEKwDgB;AADP/BoB;+CAMVlPAAUY8MAA5vEPh6FsC,A,AA6vEHw3FqB,AACAI8B,AACAIgC,AACAb+B,yD;AAjBGlFAAtUAmMQ,AAAOhCwB,A;4FA6WD1Q2H;AAEMySQ;AADP/BoB;+CAMV3OAAUYuMAAvyEPh6FsC,A,AAwyEHw3FsB,AACAIsC,AACAI0B,AACAb+B,yD;AAjBGlFAAjXAmMQ,AAAOhCwB,A;6FAgcDhRAArDbCoD,AADIvkE0D,AACJukEAAM6CuF2E,AAGPwJgD,AACO/J2E,AAGP+JmC,AACNhKoC,AACPgK4F,iX,AAjBtBjEgC,A;AAyDgBgIgB;AADP/BoB;+CAMVhPAAUY4MAA13EPh6FsC,A,AA23EHw3FsB,AACAIiC,AACAI8B,AACAb+B,yD;AAjBGlFAApcAmMQ,AAAOhCwB,A;iHAyeD7QsCAZTzkEAA93EU6zE4F,A,A;AA44EKwDQ;AADP/BoB;qJAGLnKAA7eAmMQ,AAAOhCwB,A;2PAkgBQhCiB;8HAICKwB;AACXtKAAxlFyBqKkE,A;mYAknFvBRAA18EPh6FsC,A;AA28EHw3FsB;AACAIuC;AACAIuB;GACAb+B;iTA0KoB0I0B;AACJM0B;mCAGTnFmC;6eAcHyEiC;0CAIAAgC;0CAIAAW;uBAES6BU;AAAkBpFI;AAAqB8C6B;0CAKhDSW;AAEEuBqD;AAA2BMI;AAA3BNAAgYDxG6B,A;0CA3XDiFW;AAAsB/KqC;AAAiB4M4B;0CAIvC7BW;AAAsBhLqC;AAAkB6M4B;2CAIxC7BW;AAAsB5KqC;AAAeyM4B;0CAIrC5BAA0ERDiB,AAAYRmC,AACe7EuB,A;qQA/DXkHkB;AACR7BW;4DAIcvDI;AAAqB8CoB;AAC/B5oCoB;oDAMIkrCkB;AACR7BW;4DAIcvDI;AAAqB8CoB;AAC/B5oCoB;0CAMJqpC8B;AACACAAqCRDiB,AAAYRmC,AACe7EuB,A;4IA9BnBsFAA6BRDiB,AAAYRmC,AACe7EuB,A;0CA1BnB2CAAmMSltEAA2CEwqE2B,AAAmB4EmB,wBACtBqCU,AAAkBpF0B,AACP1BsC,A,AA5C3BiFiC,AACAA8B,A;2CAjMQCAAqBRDiB,AAAYRmC,AACe7EuB,A;2CAlBnB0CAAiMS1BAA4CEf2B,AAAmB4EmB,6BACjBqCU,AAAkBpF0B,AACZ1BsC,A,AA7C3BiFiC,AACAA8B,A;0CA/LYzCAAwMKsD4C,AAMjBbW,AAAmB1gByC,AACnB0gB8B,AACACAAnMADiB,AAAYRmC,AACe7EuB,A,2B;2GANhB4E0B;8BACGsCU;AAAkBpFS;gKAWrBlBmC;oGAIXyEyB;yNAaWzEmC;sNAIyCyCsD;yEAM7B1e2C;oCAKjBuiBgC;AACApF2B;AAFQGAAz5BClMAA3iEsBqKiD,A,AA6iEjBjLAA/9DNkLmB,A,6CAk+DazKAA9+Db2KU,A,AAi/DYuDkB,oI;AA+4BxBuBW;AAEYpD8E;AAOZoD0B;2GAMqB6B+E;AAEZtCmB;qCAGTSW;2HAE4BvD+B;AAChB/LAAz9FuBqKyC,A;AA29F/BiFW;wEAMIrpCkB;sCAMJqpCW;2JA+BKTyE;AAnBYsCuF;oFAwBItC8C;sCAIbAiC;sCAIRS8B;oCAIJAwB;kEAKKT0B;2CAGIAuG;AAC0BkB+D;AACbAgB;8CACchEqB;AACmBlCAAhzFlBh6F8D,A;AAizFf+3F+D;AAIAL+D;AAIAD2B;AACpBgIW;gHAWAAW;uCAIW9E6C;qMA0CLqE8B;0BAERSW;AAAsB7KqC;AAAgB0MuB;gDAItC7BW;AAAsBjLqC;AAAc8MuB;qKAOnBjH+B;AAAmB4EW;wBACtBqCU;AAAkBpFkB;AACP1B8B;iLAmBb0FK;8QAUM9Fe;8FAEAFU;gGAOAEe;iGAGAFU;mHAOL/JAArqGsBqKc,A;uEAuqGRjLAAzlGfkLS,A;qCA0lGYnLmC;AACP8KiB;gDAEDKW;yDAIElLAAjmGNkLqC,A;AAkmGDtKAAhrGwBqKqB,A;gMAurGbvKwC;AACPmKiB;oBAEDKW;yLA0CDvKkG;AACGqK8B;yFAGX6DqC;yQA2BOjOAAnwGuBqKc,A;iGA0wGnC1VAAyZ0BqLAAnqHSqKsB,A,A;uHAgxGlBCE;AADH1KAA/oGFyKsC,A;4BAopGArKAApxGuBqKmF,A;mEA2xGM5KAAprG7B6KgB,A;0KA4rGoB7KAA5rGpB6KyB,A;oGAmsGgB7KAAnsGhB6KqC,A;kOAktGejKAAvtGfiKyB,A;wEAiuGwB7KAA5tGxB6K4B,A;0OA2uGwBjKAAhvGxBiKgB,A;+YAwwGI3K2B;AACAAiC;AACGsKwC;AACAAmB;sBAGkBD8D;AACAA8D;0DAGjBM+B;AACAAe;mMAShB5KAAxwGQ4KkB,A;AA0wGR5KAA1wGQ4KgB,A;u5BA4yGM3JAAtzGN2JkB,A;AAuzGM3JAAvzGN2J0B,A;mCA4zGsB9K6B;AACAA+C;AAEQiB6D;AAGAA2E;AAGPwJ8D;AACAAe;+MAKO/J6D;AAGAA2E;AAGP+J8D;AACAAe;iOAOAFa;+CACbOgC;4GAOaPa;+CACbO4D;8GAUfPuC;+CAEeOgC;gDAMOrKmC;AACAAoC;AACPgKoC;AACAAe;yFAIFOuC;8EAGEAoB;kGAGILwB;qIAKcJwB;uEAERAwB;kCACbO2C;yGAMVHwB;gMAaMtKAAt8GH2K4B,A;AAu8GG3KAAv8GH2KiB,A;iDAq9GO1LAAnnDLmSG,iB;2FAsnDCzGwB;0CAIMsDiB;sEAEH7DiB;AACWhkEoEA0LjB8pEc,A;6GAxLWvFc;qEAIT1Ka;0DAaFAqB;AACAAa;yHAgBImKe;uEAUAKgB;AACAAsB;2HA8CA/J2B;AACAAgC;AACA0JqC;AACAAiB;yBAEFzJAA3iHFgKe,A;AA4iHEhKAA5iHFgKmB,A;4FAgjHMFkB;AACAAsB;8EASPtKAAlpHwBqKwF,A;4FAspHQ5KAA/iH/B6KkB,A;uDAojHDtKAA3pHwBqKc,A;6IA8sH1BoEqE;AACExEe;kDAEEOa;2IAUDuFI;wkEUryHc5wCgF;+JAqB9BtvD+C;6GAmBA43BwD;kEA0FO53B2BApCSovFAAAApvF0D,A,sC;iJAqDCmtDQ;4yBA+DEntDgF;AAAAk4FqE;geAkCP/kJ0C;0dI5GU6sD6E;AACd82E4B;8XAsEG92EuE;6CACuB5kEkEFxSM4kEyH,A;uQEoV/Bq9FgEFdTAAAAAA+B,A,A;oFEoE8B8D2B;+GAORnhGyE;iJAqEaAkP;m+BAwFa5kEsEF9iBR4kE+H,A;6gBATxCs5F8E;0GA2BgBnmJoB;sTAYVmmJsC;iKAMJA4F;OAEgB1PmC;wHAqSlBpvDAAAAAAACE09D+E,A,A;gIADF19DAASAAAARE09D+E,A,A;iNA+Rc9FyB;uBACIxGsD;kGAGhBzBmCAyKwBnqFiB,A;AAxKRm6B2F;8OAehBi9DiF;uMAhBAjNAAyKwBnqF+B,A;AAxKRm6BiB;6qBA4LOo3DuE;iFAGY9CwD;osBAkCVxgCkB;iHACD8rCyB;uDACExqCiG;4EAESk/BwD;2RAwFpB1gCkB;woBAkBT2rB8D;gGAMgB8YqC;AACFgEgL;AACZtKmI;gNAcIsKmK;0FAEV0BoI;4BAGAboG;0zBKl9BJjCgC;uPAcY2BoD;qGAUiB/2F4E;oJAMjB+2FoD;oYAoBc/2F2E;2rBAiExBuvDM;iCAAAAgD;qLASCp8GsB;gICk+ED6sD2G;2HE/gFIAwG;AACAAuG;mTAgtBD7sDwD;iGAsCH6sDADjvBK8hGU,AAAW3uJ0L,AAAX2uJiGAaKzLoD,A,A;0DCouBVr2FADjvBK8hGAAaKzLsD,A,A;wkCA+ZTljJ6D;+jDJ9fMAsB;6rFbqiDeo8GM;sCAAAAmC;ysBAiCbi+BAQ/+CiBl+B4E,A;OR++CjBk+BoE;4DAIb2Rc;2DAIKhsJkC;ukBA+BE6sD8aAhdPAAAAAAqEAkF2BAE,2J,A,A;uLAstBnB7sD0E;08fqB98DO6sDuC;uCAAAAwD;4aAieAA4C;kGAAAA+D;yLA6BwBAuF;uEAQ9BAqF;mEA+fyBAqD;qXA2alCAAAAAA4B,A;wUG71CeAqD;8YAoBNqgFkB;s/FENDrgFApBszC+ButFuC,A;koGuBv6CvBn2D2K;82CAkLDp3BAvBikCyButFiH,A;qqCuBjkCzBvtFAvBikCuC7vEkB,A;wDuB1iCjCy5JyD;OAAAA4D;+RAkCDttDA3BXckxB+E,A;uB2BWdlxBA3BXckxBmB,A;A2BaTlxBA3BbSkxB0C,A;yB2BaTlxBA3BbSkxBwB,A;A2BcblxBA3BdakxBW,A;A2BeNlxBA3BfMkxB0C,A;kpB2BiFbxtDAvBk8BmButF6H,A;q5BuBr6BrBvtFAvBq6BqButFoE,A;AuBn6Bf3DoD;OAAAAuC;+EAKR5pFAvB85BuButFgE,A;AuB55BjB3DkD;OAAAA4D;mDAGN5pFAvBy5BuButFwE,A;oEuBt5BjB3DkD;OAAAA4D;0GAIR5pFAvBk5ByButFoC,A;+NuB54BnB3DiD;OAAAA4D;uJAUTj4B+D;mKAMFxFiC;iYAOIitBAvByYZ4S4D,qD;gDuBlYsBhsFAvB82BgButFsE,A;qMuBv2BPgImE;i5RJ1KlB0LwD;4iCAiIwBtLAAN9B2IgBpCxPwB+C4C,A,A;u1BoCkUtBxIsD;OAAAA0F;qIAKFDuIAwC+BkGkD,A;OAxC/BlGoC;ydAsEH54FgH;+LAkEUuxDsC;AAEDsoCc;uFAGFAc;yEAGEAkC;ovBA0JoBprCuDvBvkBc0sCkB,A;mCuB8kBnCtxC8D;gKAIRg5BAAzMgBtwDiI,A;qyE7BtdXwmEA6BwMS4HAtCiPX7CsB,A,A;eSvbApIiC;ytCA0QWuFqI;8oBAyHmB1nC8B;sqBsCjcHvzDyB;wvB9Bq1B1B4iF8G;yPAwBc5iFkD;gGAGpB4iFiG;2LAMKvCkB;s0F+B/rBa4c8D;qOAGACmF;+NAQACkH;yMCnMpBgCwC;yEC+YuB3CAAmwGDx8FiF,wJAcHuzDyD,iFASJq2BW,AAAEvJkB,A;iZA7xFCkY8C;UAAAA4J;+kFAAAAkE;gDAAAAyD;m7DAyOTv4F0B;mJAYG0+F2N;iDAAAAgTA8tBAuCmC,gQ;6BA9tBAvCyM;OAAAA4I;06GA6YG1+F2C;gFAQJAgE;+DAIAA0C;iBAMFAuE;mDAGAAuF;2XAUAA0E;6eAsEUAA/BjNkButF2D,A;olI+B2eXuLuB;gOAOIjnCA9C1gDRN4D,A;8J8CihDpBunC+D;AASSvnCqB;muCA4LSsoB4H;AAApBjnBA1C3kE0B5yD2F,A;A0C2kE1B7sD8B;mCAAAAiF;+mDA2DSkiIA9CnnEoC8lBqB,A;2e8CmnEpC9lBoE;4UAAAAA9CnnEoC8lBmB,A;ovF8Ci0EnBhbmD;6JAURx7DiI;isBAyCP3kB4P;kZAeIA2C;8TASX2iFAZt6DJmXyC,A;0FY06DajG6E;8FAGI7zF6C;uQAHJ6zF4B;8dAqBG7zF6C;AAAJ2iFkG;gZAYLtCkB;wuBA4BQrgF2C;4GAEgBmgFiF;2PAS3BwCAZl/DJmXyC,A;qGYs/DaxGoE;8FAGItzF6C;2PAQJ8yFoE;gkBAYkB3SyE;AACfngF6C;AAAJ2iFkG;yXAUiBxCyF;AAGtBEkB;slBAeAmTsF;8QAQyBrT8B;+yBAiCrB5rBAhDpzEJv0DwE,I;iCgDozEIu0DAhDpzEJv0D4C,A;mQgDm0EIuxDyB;2SAeAAqB;m1CAuGPoiCqF;UAAAAkF;uBAIYphEqG;2HAIAguDa;gMAYFvgFA/Bx1CuButFkE,A;kf+Bw2CvBvtFA/Bx2CuButFwC,A;2jE+B07CDuF8E;orBAkBpB9yF6C;AAAJ2iFiE;EAAAAAZh2EZmXuH,A;qXY62EOzZkB;gnBA2EQxuBAhDjwEONmB,A;mIgDmwELA6B;6yBA4EDA4E;uUASAAuB;AAAkBAmE;AA4CvBAuB;sjCA+CyBpDwB;w1CAybGvnBA9C/tGd5mCwB,A;+9B8Ck6GvB2iFAZtuGFmXmC,A;u1DYosHelQuC;8VAkBX/GAZjtHgBtwDyG,A;AYmtHhBswDAZntHgBtwDsF,A;4FYotHhBswDAZptHgBtwDqC,A;mEYqtHhBswDAZrtHgBtwDqC,A;87OY8sIZ8gEuF;AAAmBllC0B;+yKEntIPoDuB;wLAIQm3BAqB5fSEM,A;4yJlBJb5oFuF;+gCA4gBRAA9B4oBKAAFlmCnBAAApBsBmtDAAAAntDuF,A,A,mE,A;+tBgColBAAuF;m8CEvoByBg2FwE;AAE/ClEsE;AAGoC3FAAAAnsFAhCoqCjBAsBFlmCnBAAApBsBmtDAAAAntDwF,A,A,A,A,A;AkC3C1BA8E;4qGCMmC2uFqG;yDAbemG+D;AAIS7J+E;AAWtCbAAAAyQA3B0Ib76F+F,A,A;A2BvIwC8pFgE;AAClBoEAAAAluFAjCqpCPAsBFlmCnBAAApBsBmtDAAAAntDiF,A,A,A,A,A;AmC5BtBi5F4F;AAGJj5F0D;ivGEnCUAgCAasC02FAAAA19DAnCwtCpBh5BqBFtoCxBAAAnCsBmtDAAAAntD0D,A,A,kC,A,A,AqC9C2BkrFqD,6C;kRAkElC/3I0B;6hKExERo+GuB;m0BCLAvxD0D;siHC8FJk/FuB;iVA0Be3rCyB;wiCAwCf9EgC;8GAIe8EyB;sgBAoBhB4sBqB;AAA6BAqB;0+CEhKdngFsMCgBrBAAAAAA4KAI+B4+EwD,AAAiChFwD,AADrDgoBoB,AACoBhjBApC0bP5+EuF,A,AoC1bwC45EApC6btC55EoH,A,AoC9bxBs0FgD,AAEWsNyB,AACkBhjBApCwbP5+EuF,A,AoCxbwC45EApC2btC55EoH,A,AoC5bxBmvFkD,A,A,A;ADnBInvF6B;oNAea4+EAI3CK+Z0G,AAAkB/ZAvCwelB5+E4B,oBAAAAiC,A,A;+jEwCnbuByoFS;kBAAnBCAExBWEK,A;iPFuCfFAEvCeEkC,A;AFwCbFAExCaEqC,A;kCF2CHj2DAAyJ3B3yBuB,Y;wJAvJgB2yBiGAkMa+1DAE/OCEqB,A,0BFgPtBFAEhPsBEkB,A,wDFkPfFAElPeEuD,A,wBFmPbFAEnPaEsB,A,2BFoPRFAEpPQEkC,A,AFqPjBbwB,gCACJWAEtPqBEwB,A,AF8O9B5oFyE,iBAWS0oFAEzPqBEgC,A,A;qFF+CXj2DAAuUnB3yBiC,A;4HArUuB2yBAA8OvB3yBqC,iC;oIA5OgC2yB+PA6QS+1DAEhUXEwB,A,sBFqUvBFAErUuBEmC,A,sBFsUZFAEtUYE2B,A,sBFwUvBFAExUuBEwC,A,sBFyURFAEzUQE+B,A,sBF0UVFAE1UUE6B,A,sBF2UfFAE3UeEwB,A,AFmU9B5oFiF,4D;6YA7QiC2yB6J;YAAAAsI;YAAAAAAkVjC3yB0B,oD;kwBAxPyDyoFS;8JAMzDzoFW;kbAkQP4yDAyC5Z0B5yD6F,A;AzC4Z1B7sDqC;yCAAAAiF;2DAE+Bu1IAE1ZMEgB,A;uFF2Z3BFAE3Z2BEqB,A;4UFqatBxDAnBnWQn5IAD/FvBwvJqC,A,A;GoBmcuBxTgC;4oFC5aP2UwD;4CAGCAiC;o5BAgC8BjUsK;oDAVPEkB;AAAf8BoE;uKAIpB9BkB;AADAgCgH;yKAEkDhCkB;AAAzB8BiF;qHAKiBhCiM;qHAGVEkB;ktCASxB8BgH;qHAI8B9BkB;AAA1B+BiH;k9CAaMlCAC1DcE6D,A;mFD+DZgCwF;iHAClBD8B;AACHCmU;6vDAaqBlCAC9EYEuF,A;2HDmFKCkB;AAAZ8B4F;mLACErCsDrBkON3iDyBjDxLFm1DAsJ2FuB96FmD,A,A,A;wFhFpIjC48FoE;kXAQU/RwE;0eAUfFsD;kNAMGCqG;i5DAaFAc;gBADelCACzHYEY,A;AD0H3BgCwF;24CAoBiC/BkB;AAAf8B4E;6RAKvB9BkB;AAFAgCkG;4yEAiBS7qFAEzIhBAAAAAAAAC6B48FuC,AAAArMO,AAAAqM+C,sL,A,A;AFwIbroCoF3C6kBPv0D4D,A;4F2CzkBTAA3Cm7EIAgR,A;uS2Cl7EQ48F+E;wJAKD/TkB;AADA+B0E;8FAEWgS0oB;qnEAgBuB/TkB;AAAf8BwE;0MAE+B9BkB;AAA/B+B0F;wKAGvB/BkB;AADAgC2H;+9BAiOa7xDA/CqyBQh5BAFtoCxBAAAnCsBmtDAAAAntDuF,A,A,kJ,A;AiDsYU6zDqD;qFAGFAmD;iFAGEAqD;yzII3anB+1B6B;0bAmkCC5pF0C;AAChB2iFkCtC3kBAmXyB,A;AsC4kBcnayC1EjyBP3/EyGMvFTAyC,A,yB;AoEy3BOu0DApEv7BHv0D4E,I;mCoEu7BGu0DApEv7BHv0DyD,A;gCoEs7BF2iFAtC5kBAmXgC,A;AsCglBAnXAtChlBAmX6F,A;6+BuChfSjoCAzE4WaNe,A;60ByEvVJq4BgD;ksFZ+ZD5pFuK;2IAIf48EAgBqJc/yBoC,A;4ChBrJd+yBqEgBwJFAkBCpWQkO6B,A,wCDqWRj+BAChkBQ+9ByD,A,A;kHjB6beiEAAMvB7RAgB2JAAAC9XMgSAA4iBNlEmB,A,A,A,A;gCjBtVY/NAgByJLAAC1YC6NK,A,SD0YD7NkC,qB;qEhBxJMFAgB8IbAAC5XQgOK,A,SD4XRhOmC,UAAAAAC5X+CwIARrPCl3IAAFLy8IyC,A,A,A,uCOmnB3C/NAC5X+CwI4B,A,A;oFjB+O/BvIAgBkJhBDACjYQgOK,A,SDiYRhOmC,UAAAAACjY+CwIARrPCl3IAAFLy8IyC,A,A,A,A;0CTse3B9NAgBkJhBDACjY+CwI4B,A,A;8EjBgP/B1IAgB8HTAAC1WCkOK,A,SD0WDlOoC,6B;sEhB7HOEAgB2IdAAC5XQgOK,A,SD4XRhOmC,UAAAAAC5X+CwIARrPCl3IAAFLy8IyC,A,A,A,+COmnB3C/NAC5X+CwI4B,A,A;8EjBkP/BpIAgByJApzBiE,yEAGhBozBoBCrYQ8N4B,A,8CDuYRl+BACzlBQ+9BqC,A,A;gGjB4bWlO4GgBoHnBAoBCzVQqO8B,A,eDyVRrOACzVsD/tIARpQZi8IyC,A,A,2CO+lB1C/9BACljBQ+9BqC,A,A;uGjB6beiEsCAKNxF+B,AACaCe,AAA9BtMAgB2JAAAC/XQ4fgD,A,SD+XR5fQC/XQ4fgE,AACF5NAA4iBNlEmB,A,A,6B,A;goDE7zBF9qF+D;gCAF2CorDkG;21HEuEvBpyBA7D0pCQh5BAFtoCxBAAAnCsBmtDAAAAntDuF,A,A,kJ,A;A+DiBU6zDqD;oFAGFAmD;mKAUd76BA7D2oCQh5BAFtoCxBAAAnCsBmtDAAAAntDuF,A,A,kJ,A;A+DgCU6zDqD;iGAGFAmD;8FAGEAqD;+mECrF8Bg1BkB;AAA3CgCoB;AAAA0F+F;iHAIWqMwB;AAATA8B;AAASAuE;oCAEtBlUAdW2BEc,A;AcXI+BsB;AAGZiSgG;8hCCyBnBnSoB;AAAA8FK;sBACA7FoB;AAAA6FK;mJACmC1HkB;AAAtBgCsF;mkECnCM+R4C;kGAIMhTAAP2Br6IAgBLvDqtJ4D,A,A;OhBY4BhTkCAP2Br6IAgBL3Ci5I0BhCkGfDiD,A,A,A;sIgBcGvoFY;oCACDotDuB;AACAAuB;AACAAsB;6DAKCptDY;AACLk2FiB;+BAAAA4EAxBa9oC0B,A;AAyBTAuB;AACAAuB;AACAAsB;47CC3C2Bg8BAgB/E+BPkB,AAAf8Bc,A;mBhB+EhBvBAgB/EgBuB8C,A;+IhBgFfiSoD;0RAGd1UAgB5ClBWkB,AAHKgC2C,A;kehBkDUjB+DAX2BgT6D,AACHA+D,AAA1B58FoEDJO/vDAgBhEf2sJ6I,AAAYpU0BhCwFfDyC,A,A,A,AiB1ByCuNqD,AACKlEsF,A;klDCyWnBhIgDAV3B5pFiK,AAPiC6xF0C,AACAmCqF,A;2mJCtWH5KAc1D8BPkB,AAAf8BoF,A;wHd4DzB1Q+C;uSAEciOAcvBpCWkB,AAHKgCiD,A;2kGd6GFDgC;ydAEuD3CiD;kYAGhC2BAA1GKuLgD,AAI7Bn1F8L,A;omDVlCwD+vDmH;4PAExC65BAAVA/0BgI,AADtB+0BAAAAAAAISllD+D,A,A,YAD8Bk4D6E,A;8nBAiavB54DmD;AAAAwlDAAPaoToI,A;2OAmCfpTAAnCeoT0D,A;8BAmCf54DsE;6LAOAwlDAA1CeoTsD,A;8BA0Cf54DsE;wHAIChkCA/Dk9BwButF0C,A;4C+Dj9BtBvpDuC;AAAAwlDAA/CYoTqE,A;wGA0DGz3DAAAAnlCoBAuPkBitDuE,AAGY9pBkF,AAEZmxCmE,AACEpduE,AACCgiB+E,A,A;AA5PrDl5E8B;21NYpU4BAS;AAAhBuxDuB;mBAAgBvxDyB;yPAEjBAqC;AAEFu0DAtFoRLq1BqB,A;AsFrRKtHA5F6FAtiF8C,I;oC4F7FAsiFA5F6FAtiFwD,A;A4F5FAu0DI;4CAAAAAtFoRLq1BqD,A;iFsFjRoC5pFqC;gGAE/BAqC;AAAYu0DA5F0IZv0DyB,A;2D4F1IYu0DgC;8iFCwQVv0DoBCtbKuhFgD,A;2qCCwGPvhFgB;2IAUKuxD2B;i3CAsBgBvxDkC;qQAQvBsiFA/FqHEtiFoB,A;gB+FvHFq1EwC;oCAEAiN+B;4CAGK/wBiD;uDAIGouBwC;yBAAAAiE;AAAMprB6E;4CAAAA8C;AAAuB2rBAhFkWxC4e8B,kD;gNgFpVWjlB4C;wFACAC+E;kFAHT95E8B;AAOSu0DwE;4CAAAA0C;oEAMTv0DkC;AAGSu0DAzF0QXq1BqB,A;AyF3QWtHA/FmFNtiFoB,A;0D+FnFMsiF+B;iEACA/tBgC;yKAYTv0DkC;AAISu0DAzF0PXq1BqB,A;AyF3PWtHA/FmENtiFoB,A;qF+FnEMsiF+B;kEACA/tBgC;uSA4BChD2D;AAMGgDAzFwNfq1BqB,A;AyF1NetHA/FkCVtiFoB,A;qF+FlCUsiF+B;mEAEA/tBgC;4FAPbv0DsD;2tD3BvMNAsE;ozDK6HAAAAAAAyB,A;gEAuPS7sDsB;4sGyBjXEgtImC;gXCfUlEApBqNZAAC1GG2OqC,A,8CD0GH3O0CC1GG2O+C,A,A;AmB1GW9OApByNdAACxGQ8gBoG,AAAsB9NAAorBUrGS,YAAvCoCqD,A,sC,A;qImBhyBHj3IAA8BAosDa,AAHQ+7EiB,A;6BA3BRnoIAA0BWioIsCpBgLkBAACnGU+OyC,A,A,AmB5E/B7OsCpBZGAAC0FgC6OW,6I,A,A;uHmBvC5C4Q8G;sDCxFA3TyB;kCAA2BCqB;oMAmChBjKArB8pBRAACzdQ+MmC,A,oDDydR/MkCCzdQ+MuD,A,A;+CoBpMajNArBipBetpIAPhqBLo0Ic,AAAnBmC0B,A,AOgqBZjNACrciBiNqE,A,A;+DoB3MElNArB2oBnBAAC5bQkNyD,A,A;+DoB9MUhNArBopBVHAClcAmN0D,A,2CDocChNAChcDgNyD,A,A;+DoBrNUpNArBkoBVCACjbAmN0D,A,0CDmbApNAC3aAoNyD,A,A;8ZqB7Pb/HAjEgiBkBtwD0C,A;inBkEvhBes2DkB;AAAd8ByF;meCMdiSoF;AACFpUAhC6FDD+C,A;OgC7FCCyBhC6FDD0C,A;gFgCpFGqUsF;AACFpUAhCmFDD+C,A;OgCnFCC0BhCmFDD0C,A;uDgCrCKuCM;AAAAyF+C;gCCrEOqMwD;4CAGCAiC;uGAeR/RsD;8FAQAAuD;uFA8BPhCkB;AAHKgCmF;sDC9DIgX2FC+RT7hGkCCjR6B8rFAAAA9rFc,A,AAMhBA4BrCqO8Bi5EoF,A,A,8GoC0C3Cj5E+BGjRaA4BvCuO8Bi5EoF,A,A,e;0UzEmGf4lB2C;sDAqB5BhCyD;0+CG1MsB/BAsJ2FuB96FoC,A;sFtJ3FvB86FAsJ2FuB96FqD,A;2GtJzF/CimCwE;mFAKAAgG;4QASAA8F;4SASAAoF;gfAqBAAiG;2KAMAAiF;qTA0DAAiF;ilBAuBAA+G;uaAoBOjmCkE;QAAAAkE;6qCA6HAs+FgBA1UwB+C4B,A;2wBA0W/Bl7DuE;2nCAwGAA0F;smDAqJ4B43DmD;2DAGf3EAAINkFyBA9mBwB+CmB,A,uC;iJAqnBLrhG+C;+BAAAA4B;+nCA4HF6+FyE;qwCyCzzBbltC+B;AACHAwB;gVAyDqBqvBAA6ESj7C0C,AAAiBomB8B,A;kgFAuOhDisCmJ;s/BAkIW9LkB;gevC5gBXCiF;OAAAA0B;mMAcAjyIAYwCF0lDwD,A;4pBZ1BEAkC;khBAoDEplDAY/DJ0jJgBdmF0B+C8C,A,A;wFEnBUxmJAW5EWy2I8I,A;AXyEpD4JoB;yBAKStgJAYlEJ0jJgBdmF0B+CsB,A,A;AElBpBtBsC;upHA+QFQ6C;gfA2BACoC;g0CCnYiBxgGkD;mGAAAA6B;qqEAwKPAqC;oDAAAA8D;2uBGxIOAmD;uBAAAAwC;olBAiHXuxDyB;6QASXoxB0B;2RASAAU;2WAYF3iF2E;gBAAAA+E;02BAqCA8+F+B;28DA6EO9+F0D;oiCAuBei8FyC;uqCAoEEj8Fa;6GAAAA+B;+yCA6DAA8C;8FAAAAqC;+CAIxB4pFyB;iFAAAA8D;6UA6BwB5pF+C;gGAAAAAASW4tFkB,wC;qzBAyC9B5tFa;mHAAAA2B;uvBA0F0C+rFoH;OAA1CnCuB;sEAAAA2B;qCAIA5pFa;mHAAAA2B;oRAsBQ+rFoH;OAFRnCsC;saAqCA5pFkD;kGAAAAyC;2gCAgFqCAmD;6ZAkIlBAkD;4EAAAAyC;oyBA0Gb+rFoH;OADuB0SsB;qEAAAA8B;sCAMvB1SoH;OADuB0SsB;6EAAAA8B;4CAOlCz+FsB;oEAAAA8B;sUAaiBuzD2C;gKAgBNw4BoH;OADuB/rFqC;8FAMvB+rFoH;OADuB/rFqC;6zE2Gx8BpCn9CA9F4qBKm9CwB,A;uD8F5qBLn9CA9F4qBKm9C4C,A;+pB8F5qBuB4pFoG;k/BA4CnBmKuB;4NAkBF8JI;4cAmBe79FoB;8BAAAAqC;yCAEEAwB;UAAAAqC;wJAmCDuzDiB;qCAIrBvzDa;qEAAAAgE;yuBE7KK43EoC;AAAqBAgC;gFAEmBAsE;sEAM/B2hB2D;44DrHk2DYhoCwC;mlDAmiCC2nCmB;AAAeAiB;8IAOQAiB;4DAOlC7DuC;AACAwJgC;6ImCz4FI7+F8C;uNAAAAwC;yCAEEAwC;sBAAAA0C;0CAEcAyC;sBAAAA6C;uNAM7B+sFAA+PiBoEa,A;uLA3PjBpEAA2PiBoEa,A;8OAlPb3BAAiNN0BC,+C;gYA/LqBC+C;2NAKAAe;8QAUf3BaAgLN0B6C,A;6sCAvJMAc;g2CAqCAAc;kyCAqCaCa;qRAUAAa;mZAiBDnxFwB;8iEAqHFuxD0B;qCAGhBvxDa;oGAAAAqE;01BAsDgBuxD0B;qCAGhBvxDa;sGAAAAuE;+1BAmDgBuxD0B;qCAGhBvxDa;sGAAAAyE;kiBA0BM4pFK;mFAAAAkD;y1BrBnbXjHAwBkfFmXAA2BuBuGmC,A,A;mDxBzgBnB1dAwB8eJmXAA2BuBuG8B,A,A;2JxBngBnB1d0B;AAIJAAwBoeAmXAA2BuBuGiB,A,A;yGxBxfRlIuB;wpBA6BY8BAZHpBqEgBAqBwB+C+C,A,A;okBY0CHvKAA/IIqBiB,AAAmBAW,A;AA+IF3JsD;8DAInB2Ja;2UC7G5B/EsB;gFAAAA8B;AAEAMY;AACAhBa;uKAWAUsB;kFAAAA8B;AAEAMY;AACAhBa;wKAuEAgByC;iMAaK1zF6B;4LAmBAA8C;gYAQAAiC;iTAQAAiC;4ZAsCJ+9Ee;SAAAAc;0DAY6BvwB0E;iBAAAAO;0XA2C9BxtDoD;guBA6BY+9E2C;8BAIItrBAAlHEihCkD,A;8YAqHVD6F;oYCpRiBjmC2E;WAAAAQ;kFAuCzBxtD0D;yIAGUugGa;kHAEHvgG4B;yaAmBGugGkC;mKAODvgGK;wpBGtEYo6B+D;yBAAAAAAw5CjB4yD0C,AACACgD,A;kFAx1CgB7yD+DAyfhB4yDkD,A;gUAxMGhtF+C;+kBAqEMgkCwD;sIAmEAJsD;m+CA0afooDoE;yMAWAAuE;4hBAgBAAoE;sMAWAAuE;8aAyCO5mEqD;uSAgDAAqD;mkBAqDAAe;ocAqDAAe;6dAqDAAc;qcAwDAAgB;ucAqDAAgB;mhBA8DAAsB;2gBAmEAAe;2gBRl3CAyxE+B;uIAMyBDsD;uDAiiCbjsKoC;sCAAAAAAytB+B8vKY,A;+jCU7tD9C9I6B;oRAoBAA6B;k4CAyEFlF0BE2fmBzsF6C,A;AFzfnBmqF+BE2kBwBnqF8B,A;uRF5fgBAoC;onDAsWSuxDkC;6mBAsBAAkC;kjBAiCNqBgD;4TAmD3C5yDkD;gEAAAAyC;wgDsC7jBEoxDoC;AACKpxDA7B2gBM7sDwB,0FADjB6sDAAAAAoJ,A,A;+B6BxgBqBAAAlLjBAA5B80BAAADjvBgB7sD6F,AAAX2uJuE,A,A,A;uB6BqFY9hGAAlLjBAA5B80BAAADjvBK8hG8EAaKzL0E,A,A,A,+G6B1GVr2FA5B80BAAADjvBK8hGAAaKzL6E,A,A,A,A6BhHdr2FAAAAAwF,A,A;AA+LEgqFmZ;+XAYiB6IoB;+BACfiF4C;gDAKKjF2B;AAAaFuC;+UAcX3yFS;AADLoxD4B;mFAIGpxDkE;6bAWPy8BsB;yGAII20BwC;6MAMag9BoDArHkCpuFkB,8BAAAA2C,A;kPAyJ/C6yFe;6GAKAF2B;wJAaE/DsB;meAgBF+DqC;uEAOAvhCmD;6dAkB0CyhCkB;wCAIrC7yFS;AADL6yF4B;mOASAF2B;sDACAnByD;6EAMEmBuC;iNAWFAqC;2LAOCAqC;26ClC/IDhjIAA0kCsBv0BkEFhzCY4kEuE,A,I;msBEkfhCysFK;gCAAAAAFoNezsF+E,A;oHE9MfysFK;gCAAAAAF8MezsFuC,A;+/BE9KXysFK;gCAAAAAF8KWzsFuC,A;gPArpBTi1F6B;2aAgBAA6B;2cAeAA6B;gXAkHP3mC4B;8BACEyrC2B;AAA6BrLAAzB7B8SmC,sB;yRAyCIzHqB;qdAUL9rC+B;shBAyIkB96G2C;ycAqBJ6sD6G;oBACP8/EsH;sOASO9/EyE;oBACP+gGsH;wJA+CO/gGwE;yGAIPqiF2F;uXAoDT2Se;kOAQiBpJmF;AACL4GmC;+bAgBZwCe;qeAiBiBpJmF;AACL4GmC;ujCA8Id0FyG;0OASFA2D;4JAMW3GyC;2CAAchiCqF;mgBAiBJvvD0C;41DAuKI8tDmBA7nBlBisCsB,AAAULAAjEV8H6B,gE,A;0FAgsBkC/SS;qDAAAAoB;uDACDAE;gEAAAAiD;gEAEPzuFkF;2MAKqBwyFkD;AAC3BjB8D;AACqB9CE;2DAAAAkC;mKAWrB6GAAiGzB9Q2C,qC;8xBA3F4CxkF6B;yRAUf6tDgB;wBAAAAE;0BAAAAAAttBxBksC2B,AAA+BlEoBA3B/B2LM,2E,A;oJAmvBwBxhG6E;4RAOQyuF8C;OAAAAyD;6DAElBpgCAAxuBdunCoC,A;gPA6uBsBnHsC;OAAAAoC;mMAGIzuFkF;oPMmYXAyF;uOAoSFA4C;sBAAAAsD;8YAkIAAgF;8uBA5HiBq2BArB7jBNr2B8D,A;AqB8jB3Bs5FsC;+BACA3pIAJtSsBv0B+B,A;uDIsStBu0BAJtSsBv0BAFhzCY4kE8B,A,A;+BMslDlCrwCI;0ZAoIiC0mEArBnsBNr2B8D,A;AqBosB3Bs5FsC;+BACA3pIAJ5asBv0B+B,A;uDI4atBu0BAJ5asBv0BAFhzCY4kE8B,A,A;+BM4tDlCrwCI;yiCEhuCCuiI4B;sVAUAA4C;iDAGmBlyFc;wDAAAAuC;oWAkBpBkyF4B;0NAYKlyFS;AADLoxD4B;wEAIGpxD0D;iIA2BWmyFmD;AAAmCnyF0D;4JAIhD+0Fe;4EACLv4DqIA+C6Bx8B+D,A;mKA1CxB+0FsB;sLAELt4DAA6CI+xBe,kJAGyBxuD6C,A;uIAhCzBoxDe;4JAIJi7BiL;iTAiDK4G4B;w6BAsCDf4B;wiBAsBWlyF0E;AAAAmqF+GRsEWnqFuC,A;gdQ7CtBkyF4B;ySAQAA4B;4xBAvBmC+C6B;mlBAgDbj1F8D;sFAIAA6C;yLA4CI8uDkD;4uCDxsBXyC0C;gpBAyDf4gCe;yLAMY1sDAA4bZ0sB6B,2B;+JAvbAggCe;6EAEFnE4B;4yBAwEQvoD2B;qRAoBN0sDe;+HAIcnyF2F;4DAKlBs5FqG;AACInHe;2IAIcnyF6C;8DAMdmyFe;yaAiCuBnyFe;wDAAAAkE;0CAEtByxFe;mUAciByBoB;0SAWAA+G;o5BAiEAAoB;+PAiBlBzB4C;qJAEoByDwFAhM2B3jC8E,A;oPA2M5B2hCwC;wlBA1FjBfe;snBAqCCsHe;6bAoF8B/LuG;mxCA0HjCv7Be;swBAWFxEQ;6BAAAAkM;49CA4YmB3tD4E;wdAqBFA0E;inDA4DjBysFsCPhYmBzsFyD,A;AOmYnBmqF2CPjTwBnqF0C,A;yrBS3vBYA0C;mbAmC/B0tFAASI1tFAAmCTAAFfgB7sDsG,AAAX2uJuE,A,A,kBEpBI9hGAAmCTAAFfK8hG8E,A,uDEeL9hGAFfK8hGAAaKzL0D,A,A,yDEJdr2FAAAAAyI,A,A,A;wSAmBMsyF4B;6HAKAA4B;+yBA8BJjB2C;yEAIAD0B;mPAyDErHyD;2NAAAA0O;mKC5OFvtD2B;gDAAAAAAmDI81D4B,0H;sFA/CJ71DAA2DI61D4B,4I;kEAvDJpwDAAmEIowD4B,wH;uoBA2BF+G8H;iJAEA58D6EAzCE61D8B,8I;8IAkDA71DyG;AAHF48D8H;uMAGE58DAAlDA61DgC,qJ;AAoDA71DmEApDA61DgC,qI;4IA4DF+G8H;4IAEA58D6EA9DE61D8B,8I;2EAgFFtyFyB;qFAAAAoC;0SAuBEAAApIFAAH8EgB7sDsG,AAAX2uJuE,A,A;kBGsDH9hGAApIFAAH8EK8hG8E,A,gEG9EL9hGAH8EK8hGAAaKzL0D,A,A,0EGpGdr2FAAAAAAAUEq5F0F,I,A,A;oBAmIIr5FAA7INAAAAAAAAU4BAmF,iC,A,A;iCAmItBAAA7INAAAAAAwG,A,A;sbAkMI6iCkC;uCAAAAqBA3NFrGwCAmDI81D4B,0H,A;opBAgNQtyF8C;kIAAAAK;+BAAAAkC;86CpBq7BmCAa;wgBAsG7C4tDyF;qTAQAAyF;wYAQAAyF;ymPA4Z4C5tDU;yJAEZiuFAAFYjuFU,gC;4fAoB5C4tDyE;2aAYAAyE;qgBAYAAyE;qxEAsFFuxCyB;s3BqBhwDOn/FuC;iNAAAAkC;kCAIqBgzDsC;uCAAAAAAJrBhzDuE,A;0QAU8B0xFa;gJAGHAa;i2IAyL7BAiE;s0BAuGqB0LuD;umBAmEnBp9Fa;mFAAAA2C;2uBA2oBAAwE;iBAAAAyDA8XTAAAAAA6B,A,A;sYAnX+BinBiB;oPAehBuoECAkOF7CmE,A;qxCAnKAAiE;0qBA2BAAgE;kZA6CgB1lE4B;oQAQAAkB;kQAgBDjnB8D;koEoFjpCAAqH;0HAqBtBuxDoC;0KAOAAoC;0ZAwCSoCwB;sKAMTpCsC;yxBAyBAAyC;8dA2BMAoC;u5BNjNgBvxDyC;uDAAAA2B;yBAAAAoC;2oBA2IUA2E;QAAAA2E;mdA4CXi8FmC;8gBAsFDnBAwChDuB96FyB,A;yBxCgDvB86FAwChDuB96F8D,A;+KxC0FnC8+FqB;syEAiMOfmD;i1B3ErbK/9FkC;sBAAAAsD;iXAhCG4pFoE;gWAmDvBjHqB;AACAAACqaJmXgD,A;ADpaInX2C;soBAkHsB3iFa;4DAAAAqF;wiBkFxMRuzD0B;uCA+EhBvzDyB;wFAAAA6E;0CAUiBigG+C;4OAoFFrtCyG;+FAIPz/GoC;0BAAAA2B;iCAIOy/GiH;0GAMHz/GmJ;sLAgDMy/GkG;2FAGkBz/G8C;gCAAAA2B;80BChPL42GmC;yQAwCpB/pDArGw2CwButFmD,A;i1CqBt0CxBwRwD;cAAAA8I;cAAAAwH;srBAqBmBxrCqE;oVAQdvzD+C;AAAJ2iFuE;mFAAAEAF0ZMtwDqH,A;mRErYPghCiB;sWAUPovBAFsXNmXAA2BuBuG6B,6B,A;sDE7YkBhgBoB;y3BCpHlCt4CAA+RL/nC0B,AAAAioC2C,A;qRArPsBjoCAtBg1CautFiB,A;QsB70CVmUAAyCfvUAAG8BntFAtBiyCLutFoC,A,A,wC;ihCsB7wCxBf0F;+nDAqCA2GiC;w0GAqXenzFwkB;2vBAatB6iFAHzCctwDgG,A;kPGkDRswDAHlDQtwD8G,A;sDGuDRswDAHvDQtwD8G,A;+EG8DRswDAH9DQtwDwE,A;AG+DRswDAH/DZiXgE,A;ypCG2FQjXAH3FYtwD0C,A;yYGuGhBswDAHvGgBtwDgH,A;iLGgHb8tDkB;qQC3OYuJ6C;OAAAAgD;mPAgBE5pFAvBs0BiButFyF,A;wRuBl0BnB3D+D;OAAAA0D;qYAyCE5pFAvByxBiButFkF,A;0RuBrxBX3D0I;geAoDvBgKc;uPAOe5zFAvB0tBmButFkD,A;sGuBxtBnB3D+D;OAAAA0D;0RA6DfgKc;saAYiB5zFAvB+oBiButFkD,A;+FuB7oBX3D0I;8qBA6BZCqG;ugBA8FI7pFAvBkhBmButFkD,A;0FuBhhBnB3D+D;OAAAAkE;gVAiBA5pFAvB+fmButF4C,A;0FuB7fnB3DyD;OAAAAkE;wFAwNfgKc;oDACMAc;sLASN/JqF;iMAQA+Jc;+DACMAc;sLASN/JqF;qcAwDe7pFAvBiNmButFuF,A;kPuB3MnB3D+D;OAAAA0D;2LAoDAuKAAphCL5gBgB,gD;AAohCuB6gBAAnhCvB7gBC,kD;wCAqhCZ2gBAAvhCmB3gBC,iD;AAwhCnB6gBAAthCY7gBC,A;AAmhCuB6gB4C;AAInCDAAxhCY5gBC,A;AAohCK4gBoE;AAOGvKqH;6RAiBpBsKAA7iCmB3gBC,oD;AA+iCnB6gBAA7iCY7gBC,4C;AA8iCZ6gBAA9iCY7gBC,A;AA6iCZ6gBmD;AAGoBxK8B;AAASwKAAhjCjB7gBC,A;AA6iCZ6gB8D;AAGoBxKqD;AAClByKAAhjCU9gBK,wD;kBAijCC8gBAAjjCD9gBC,A;AAgjCV8gBmD;+xBAuCQr0FAvBkF0ButF+C,A;6EuBhFrBvtFAvBgFqButFwD,A;8duBpEtBvtFAvBoEsButFgD,A;6zBuBrDvBvtFAvBqDuButFsC,A;irCuBpBtC2GgCAxpCqB/5D+B,A;AAypCrBg6D8BAxpCch6D8B,A;AAypCdi6D2BAxpCcj6DyB,A;AAypCdk6D2BAxpCcl6DmB,A;6HA6qCVy5Dc;2jCA0tBOhiCoB;mIAEK+iBiH;2WAKP8P+C;8OAIiBnOAxCx6CAt2EkF,A;+0BUjYxBq1DuB;AAAgCAqB;AAChCFuB;AAAqBAqB;wRAyBbEoB;AAAuCAsB;4EAE1CFoB;AAA4BAc;wFgCiaZovB0C;sBACD/uB2C;sBACApNyC;sBACA8G6C;sBACEoG+C;sBACA2iB8C;wBACC7iBwD;AACbD4C;8btBnV8B9FU;oVA2BvBA4I;6uFbyMK4B6C;miJQrBtB6tCqDqBzJqC5P+DAoBhCzkHAXnUM4zHuB,A,A,A;0pBVglB8Br+F6D;WAAAA4C;69CqB7kBb6+FuC;m2BY6uDN7MwBA8oDbngCA9C1hGWNiD,A,A8C8hGlBpDyC,sCAGFw0BAZ75FFmXAA2BuBuGoC,A,A,AYm4FrBzG4BA/BY/nCA9CngGQN2B,A,A8CqgGpBoxBAZj4FFmXAA2BuBuG8B,A,A,qBYw2FJ1dAZn4FnBmXAA2BuBuG8B,A,A,8CY22FrB1d8E,A,oEA4BAAAZl6FFmXAA2BuBuGsC,A,A,8CY24FrB1dAZt6FFmXAA2BuBuGyC,A,A,A;kSYgvCcxTAAihBrBh7BA9Ch6DMNiB,A,iF;Y8C+4Ces7BgMAohBjBt7BiB,wCAGAgDAhDngEbv0DyB,A,+DgDmgEau0DkC,wG;8tCAzUbo3BU;gfAqRSx9Bc;4CAEI0DA9Cp3DEN8E,A;kE8Co4DyBAkC;uUA0nBV5EoB;qrDA+QhBkFA9C7wFCNuB,A;2nC8C+0FLnDAA+FWmD6B,A;iEA7FN3CAAmFKiDA9Cp6FLNuC,A,A;4R8C+1FH3CAAqEQiDA9Cp6FLN6B,A,A;A8C+1FoCrDmG;0uBA+E9BqDa;8VA4BxB6hBe;0HAKAzmBkB;gHAKwDwsCSAIxDhrCmD,yLAWJy0B8B,AADI10BmI,A;yVAkFACyD;SACAszBmD;6LAIA9yBkE;0FACAykB+B;kEACA7kB6E;gtBAuaiBu+B+E;oBAAAAgUAwBd9sFU,A;sDAxBc8sF2F;0zBAupBAl+BuB;AAAcLmC;iRAc/BwkC4F;qBACAC8E;sBACAJuE;qBACASgF;+mBAaANgG;iBACAC8E;+vBA2ECzkCgD;AACEvuDY;AADFuuDiB;0aA2BcglCoH;qcAyBC1hCA9CvxIENsE,A;gK8CuyIkBAkC;05BA8DhC3CmB;8CACATmB;+BACISqB;2CAEDgkC6G;AACSxkC8C;AACF2kCwE;wDAEACkF;yFAQPhzFiB;sVAeHouD+C;uCACEOyB;4FAKC3uDiB;2OAWDuuD+C;AAKCvuDS;gVAaHkuDmG;kNAQCluDiB;yQAWAouDsF;AAAqBD2B;+IAWrBnuDiB;yhBAhGD4uDwC;+cAkEAV0B;oDAAAAsC;AAgG6CAkC;AAAnBUyF;8DAoB3B5uDmC;kYAaiB4yFiF;+cAelBuGwGAWM/mBqE,A;wgBAmBLjkBkB;yGAEAikBgI;AACAzjBuB;uGACAJU;iMZ34JP09BwC;+6CiB2dIjsF8C;obAkGKlwBAAxDKysHe3ChlBN5CqB,A,+B;wN2CqpBJiEwI;2GAGmBgB8D;0cASahC6B;mJAUnBAsC;wqBCjaT58FoH;6GAYRy5EArC+jBAuSkC,A;oDqC/jBAvSArC+jBAuS4D,iC;oDqC7jBkBkTiC;sDAEhBzO8G;AAEaljCyC;sDAKAonB+B;84BqEpJRtqBY;0RAaGh2B8B;2fpEvJDuqDAqErBa8Z2F,A;gpBrEkDlBtnCuDAVyDCOlCgC/B4jCsE,A,A;iFkCpB9B7IsFAMSxSAqEtDeyeuG,A,4B;w6BrEwEGzO8B;8ZAiCvBx4BiDArEyDCOlCgC/B4jC6B,A,A;8KkC8CrBrbAqElHeyeuF,A;wErEkHfx1DqD;sIAWLuuBiDAzFyDCOlCgC/B4jC6B,A,A;yGkC4DtBj1FiD;cAEAA4C;yDASRwvD0BApGwDovBA1B2blC5+E4B,oBAAAAiC,A,A;8O0B7clB4yDAtB2WG5yDc,A;8EsB3WH4yD+BtB2WG5yDqB,A;AsB3WoC2hFoB;AAAvC/uBAtB2WG5yD2C,A;4BsB3WH7sD2C;+qCA0HWm+BqEpCqnBuBkwH+B,A;69BoChnB/BpwC8CAhHsDCOlCgC/B4jCwC,A,A;AkCiF1BlfgM;guBAqBM/1E2E;21CsErIE+6Fe;8BACDAc;8EAIA/6FkB;iRAIAAkD;AAC8BA4C;mCAE9BA0B;mHAGAA2B;2sDAyCSioF8B;6uEAwDc54DuC;yCAM9BsuEqD;qHAII5Ce;snBAekC7aAvH4BxC4e2B,6C;OuH1BS9+FsC;scASD+6Fc;iCADF/6FqB;gDAEG4yDAvHpKe5yD2F,A;AuHoKf7sD8B;8CAAAAoC;gDAAAAuD;8BAFH6sDmE;oLASW+6F4B;qEAER/6F8B;AACHAuC;mCAGGA+B;sHAEAAiB;0EAEAAE;oKAEAAoB;AACLAqB;qqBASe+6F8B;6JAIb/6F6C;8KAAAAwC;kCAIGAkC;ocAiBDs8B8I;0MAAAA0B;uJAGCt8B0B;oCAEAA0B;sDAEyB20B+B;AAAIomES;wPAQrBuBA5GuqCjBl3Ee,8B;uZ4G5pCgBgSoB;yDAGCklEA5GypCjBl3Ee,oB;8L4GpwCwB21EE;4YAGPAwB;qvFrEvInBrxCuB;kdAsBAlzBaDiDMx2Bc,uB;ACjDMA8B;uDAGAymCiC;4SAULijBa;0EAIPkJc;uDAAAAmD;AAAAz/GgB;mCAAAA8D;stBA2Be+iIwC;wqWAgFuBrkBAxDshBhBNe,A;qvLwDxdtBikC+BAoBqBpkC4B,uB;gOAJEwtBACtJD5+ES,A;0DDsJC4+EoBCtJD5+EgC,A;uKDkKtB4yDc;uDAAAAmD;AAAAz/GgB;mCAAAAkF;6BAEIqjFWDvKEx2BkE,A;2oCC+IsBuxDa;0EAEAMAxDgdNNuD,A;4mCwDvadkkB6DDtMUz1EAhCklCGAAFlmCnBAAApBsBmtDAAAAntDmD,A,A,A,A,2O;ghE8CoBbqlCiBAtBT0iD8F,A;4qBAqCYt8EmC;s9CAgCC52BAA+RQ4zGe,8C;uXA5RCqFsK;4BAAAAiF;wBAAAAiF;6BAAAAuIAmPjB9tFyB,AACLnrBAAwCqB4zGS,yB,uE;sNAzRKzoF6B;AAAkBnrBAAyRvB4zGS,6B;0dA7QqCh9EoC;mvBAS7By0EA7DuD7B4eyB,6C;A6DhDIrzFoC;0uCAagBw8E0C;uZAehBx8EqC;uXAC0Dw9EkB;6ZAgBpDp0GAAgNW4zGe,mB;iJApLM5zGAAoLN4zGc,mB;4PArLAzoFmB;qYAAAAyD;AAOjB/qBAAkL8BJAAJb4zGS,6B,A;mJA7KOzoF+B;AAAoBnrBAA6K3B4zGS,mB;4TA1KY5zGAA0KZ4zGc,mB;+OA3KQzoF6D;AAEzB/qBAA6K8BJAAJb4zGS,6B,A;kJAtKjB5zGAAsKiB4zGc,mB;gIAvKFzoF+C;AAEf/qBAAyK8BJAAJb4zGS,6B,A;mJAlKnBzoFsB;oQAEiB/qBAAoKeJAAJb4zGmC,4B,A;oFAhKyB5zGAAgKzB4zGc,mB;qGAjKCzoFyB;AAClBA8B;AACAnrBAA+JiB4zGS,mB;+KA7JoCl0BA7DrFzDv0D6E,A;A6DqFiEkgFA7DhDjE4eqB,A;A6DgDyDvqCA7DrFzDv0DuE,I;uD6DqFiEkgFyC;AAArClgF8C;m4BAuBMwqF4C;kBAAAAM;AAAA+Fc;AAAc/Fa;AAAA+FU;4SAU/B9kFsB;keAWe4jB+B;kFAEAsF+B;AAAI9/CAA+Gf4zGS,uB;oGA3GImUiC;AAAEtUsClBiCH3iDAjDxLFm1DAsJ2FuB96FmB,A,yBtJ3FvB86FAsJ2FuB96FmE,A,A,A;qFnF4DXkgFA7DlGlC4e8B,2C;qF6DoGyBlCiC;uBAAEtUkDlB+BH3iDAjDxLFm1DAsJ2FuB96FmB,A,yBtJ3FvB86FAsJ2FuB96FuF,A,A,A;uInFgEPooF6D;AAApCx1BwE7DgrBF5yDmC,oBAAAA0C,A;6C6DhrBE7sDqK;iRAMK6sDwB;ozBAYqBs8FAlDomC5Bl3EoB,uC;6TkD1lCSvwCAA2EY4zGS,mB;s2BAjEHrxDoB;qLAeL22DuG;8BACQ/tF8C;47CA6BrBnrBAAoBqB4zGqB,+B;AAlBnB5zGAAkBmB4zG8B,wC;4BAhBnBsFmE;AACAA2I;6PAJF/tFkB;AAWE+tF+D;OAbG/tF+B;AAELA2E;kMApROAc;AAAmB48FwB;2CAAkCAI;gLAKrD58FsB;AAA2B48FwB;4CAAgCAI;qcAsF7DtU+BlBkImB3iDAjDxLFm1DAsJ2FuB96FkB,A,wBtJ3FvB86FAsJ2FuB96FsC,A,A,A;wGnFpCxCkgFA7DFL4eoC,yC;6J6DQOn5DkG;AACA4uBgF;+DAAAA8D;AAHL3BsD7DkKsB5yDqB,4BAAAAyC,A;sD6DlKtB7sDW;mCAAAAiF;uCAMI0hCAAiMe4zGc,Y;gFAhMDl0BA7DlDpBv0DwE,A;A6DkD4BkgFA7Db5B4eqB,A;A6DaoBvqCA7DlDpBv0DmE,e;A6DkD4BkgFwC;QAFxBlgF2D;iDAQF/qBAA8LgCJAAJb4zGkC,wB,A;OA5LdzoF8B;AACLA+C;g8BAiCSAgC;AAGqBnrBAAuJX4zGsB,kC;oGA1JVzoFM;q+J+DnMCkgFA5HgJZ4eyB,iD;whC4HxFK9+F+BAue0B0sFAAAA1sFA3GklBZAsBFlmCnBAAApBsBmtDAAAAntDiF,A,A,A,A,A,A6GsiB1BAAAvmBmBu0FAAAAv0Fa,A,A,A;+qGA6JWqpDoB;4WAoDPrpDA3Gs+BAAc,A;iC2Gt+BAAA3Gs+BAAAFlmCnBAAApBsBmtDAAAAntDwG,A,A,A,A;ya6GkLkBw+Fa;2FAAAAAApEdtQAAAAluFA3GwgCPAsBFlmCnBAAApBsBmtDAAAAntD8F,A,A,A,A,A,uF;M6GkLkBw+FAA9C5Cx+FAA1DAAAA3ImBu0FAAAAv0Fa,A,A,A,A;mwMAsegB+hF0I;ugBAYIhKyF;ggCAmB7ByBAC/TCkIE,oF;qDD+TDlIiE;gWAWGx5EUAjWiBkuFAAAAluFA3GwgCPAAFlmCnBAAApBsBmtDAAAAntDsB,A,A,A,A,A,A;iD6G6cP2gF0B;AAEN3gFAAjWiBkuFAAAAluFA3GwgCPAsBFlmCnBAAApBsBmtDAAAAntDyJ,A,A,A,A,A,A6G8H1BAAApDAAAA3ImBu0FAAAAv0Fa,A,A,A,A;u/BAucCsqDqM3GxEhBgzCqDF1BJAAAAAAoD,A,A,A;qV6G6GuCvrC0D;oDAAfzgFiD/G8TgBkwHkC,A;qiF+GvLRpyCS;gGAMA/FoB;qUAmBHrpDA3GqkBNAAFlmCnBAAApBsBmtDAAAAntDiE,A,A,6E,A;inDuCpCjBu0DA5D6RAv0D4D,I;wC4D7RAu0DA5D6RAv0DkD,A;uvB6DzMiCAa;yEACtCokCAAxEAAwC,A;0EA4EKpkC2B;AACHmkCAA1EgDAAqEiF7CnkC6B,A,A;sBrEPHmkCAA1EgDAAqEiF7CnkCAAue0B0sFAAAA1sFA3GklBZAsBFlmCnBAAApBsBmtDAAAAntDiF,A,A,A,A,A,A6GsiB1BAAAvmBmBu0FAAAAv0FmB,A,A,A,A,A;qErE2HOqpDI;iFAIjBcI;4FAKA6sBI;sGAKAGI;0GAKACI;0GAKAEI;0GAMACI;8SAoBAdY;6FAKAtvCQ;05BsE7GO71DqBhH2sBwBkwHO,A;uSgHxsBlCzPAAsBJ7pC2B,sIAG6BAmJ,iDAD7B65BsE,qG;4IAfI17CW;oBAAAA+C;m/CAkCa6hBqF;kTAMbyCAGlDGCADgOP0jCkI,AAEAmIAAzNAA6DA5DEhaAtD8hBFAACzQyCmOW,A,SDyQzCnOyB,uB,6C,AsDheEoRgD,A,iB,ACXiB7tFwC,AAAZ4qDgF,A;+MHsDHpBgGEuJFL4F,AACAKwFAzQAitCqEAQAhaAtD8hBFAACzQyCmOW,A,SDyQzCnOyB,2B,4D,AsDriBEoRoE,AACA1RAtD+hBFAAClQ4CyOW,A,SDkQ5CzO4B,0C,A,uBsDtREzuBuJ,A;gGFjJO6DuB;IACPrJkG;0HAIEyCmBGpEe3qD8D,A;4CHsEf22FuH;k4BAUaze2E;kSAGfyeuL;yMAQmBnV+B;oBAAAAyK;+EAKNt5B4D;AACHsJyBEuJQ4rB6BtD6JbAgBC5KGwNmE,A,A,A;AmDvIN5nDAA4EkBuwBuC,eACmCPAlGjNnChzDoC,oBAAAAyC,A,6E;6BkGuIAwxDAEmJF4rBAtD6JbAAC5KGwN8C,A,A,A;2JmDjDVh4BAlG6IO5yDc,A;gEkG7IP4yD+BlG6IO5yDqB,A;AkG7ImC2hFoB;AAA1C/uBAlG6IO5yD2C,A;mCkG7IP7sDsC;AACEq2G4FEoBALsF,AACAKoFAzQAitCiEAQAhaAtD8hBFAACzQyCmOW,A,SDyQzCnOyB,yB,wD,AsDriBEoRgE,AACA1RAtD+hBFAAClQ4CyOW,A,SDkQ5CzO4B,sC,A,4BsDtREzuB4G,A;4BvE9L2CixCApB4IzBlJAhC/JEkG2E,A,A;qjB6HzDgB1N0F;qnBAiCHjuFAhHyoCdAAFlmCnBAAApBsBmtDAAAAntDmE,A,A,gB,A;0VkHRQiuFsF;mFAGQAsF;qOAStCAsF;iGAIAAsF;qGAIAAsF;qGAIAAsF;qGAKKAsF;sqBAUQAsG;ouBAGPAsG;6lBAnDJAgI;wLAgB8BAsF;8O3B7DXjuFArForCFAAFlmCnBAAApBsBmtDAAAAntDkF,A,A,A,A;iGuF9DDAArForCFAoG,A;smCyClpCG48Fa;0FAIT1oCACbaogCkG,A;ADaP1aAIhCGyemF,A;0DJoCTnkCACjBaogCsD,A;qCDebpgCACfaogCuD,A;ADeP1aAIlCGyeuF,A;kHJoCTnkCACjBaogCuD,A;ADiBP1aAIpCGyeuF,A;YJoCchQ2C;yKAOlCuCe;qEAEAAe;AAAc5BiB;mIAKd4BI;yCAGFDI;2G2C7CgC92BgC;kBAAAA0C;+9FAwCaq1ByI;AACLCoI;68DAmBjCyBW;m5GA3DmC+UiFtC6EE/Cc,A;ynFAOrC/RI;qRAMFAI;qRAMEAI;wyCAkLMzFAnB/LQn5IAD/FvBwvJmB,A,A;uIoBiS0BxTqC;iOAM1BnFoB;gnBAyEesCAnBjRQn5IAD/FvBwvJuD,A,A;+ZoBwXA3YoB;4jBAqDoCmFU;sJC/StB2UmB;YAAAAc;AAAajS0B;6cA6JA5CgC;ojDAoDlB/nFwzB;grDAAAA4E;6SAXU1uB+DnDscmBkwH0G,A;gXmD5btCntB4FkEvQAAyBzDCa/wC4CC1BQumB6B,A,wFD2BDuqBsD,AAERtsBACmBGgjCiB,gG,2JDfDvuDmE,A,A;ATgQLv8BAoCvSPAAA0PJAAyBzQoDi2FAAAAj2FAA8LhDsqFkL,A,A,A,A,A;k1C7DwIsBoRAmEtP6BHAlDjFtC9Q6B,AAAA8FmF,AACKhhJAgBpBbqtJ6E,AAAYpU+BhCkGfDoD,A,A,AgBzEI6XAgBwCQtVW,AAAAyF0C,A,A,AkCoCO9FkI,AAAA8F2C,A;AnEwPR9F6B;AAAA8FQ;qWAORvwF+DmEpU2C48FwD,AACDA0D,AAAhC58FoElDyCK/vDAgBhEf2sJ0C,AAAYpU+BhCwFfDgD,A,A,A,+DkE/DAvoFuN,A;yiBnEiOaAwB;AAAYAmB;8FAQRAAAoHmCi0FAAAAj7DA/C+1B9Bh5BAFtoCxBAAAnCsBmtDAAAAntDyE,A,A,A,A,A,0B;kBiDsNHAAAoHmCi0FAAAAj7DA/C+1B9Bh5B4D,A,A,A;wN+Cv+BEAA/Co7BPAAFlmCnBAAApBsBmtDAAAAntD4F,A,A,A,A;iBiDmML4qF4B;4EADS5qFA/Co7BPA6E,A;sL+Ch7BO48FuD;g/CAsH1BtrHgD;weA4BAuvGqF;mFAAAAYJ/PA76CoCAQc27DAAvEd3hGgF0DtEJAAAAAAAACUAiD,AAARq4F4C,AAAQr4F8B,A,A,A,A,gC1D4IQ2hGAAvEd3hGA0DtEJAAAAAAAAEYAmD,AAAV04F8C,AAAU14FgD,A,A,A,A,A,A;iQtDwYJsmC4BvCpZNpEAAmEIowD4B,wH,A;kMuC0XiBsKe;4GAGKA4B;MAAAA0D;oJAGAA4B;MAAAA0D;4HuC9bpB/oCgC;kBAAAA0C;2jBAImB+oCoE;0BAAMtUsD5DqUL3iDyBjDxLFm1DAsJ2FuB96FoD,A,A,A;AzCvOpC2qFkC;AAEN92B8O;48BAMuC8rC2FxCkEE/CuL,A;uoDwC5CrCjS0U;miDAYqCzBwQ;qkCAaRuBoB;wCAAA8FQ;oJAKlBvwFAtFsmCCAAFlmCnBAAApBsBmtDAAAAntDga,A,A,A,A;AwF0CgB6zDE;sEAAAA8F;AAaFAE;kEAAAAoH;o8BA9BnBxCOxFVW4jC+B,A;cwFWLj1F+D;seAiBkB2/FiFxCbG/CgB,A;8VwC2BnCjSI;46BHgNXr5GsD;u4FAmBO42EmC;AAASmLA3C5BSgpBAgByBlBAACpC2ChoIARpSZo0I8B,AAAnBmC0B,A,AQoSAA6B,A,SDoCZvOqC,qD,A;m8B2BSAn0BmC;AAASm5BA3CxCKtGAgBjEEAACmDkB6PgC,A,SDnDlB7P2B,kD,A;o6D2B0HrB7yBsC;wtBhC9QmBgJkD;AAAsBgBkC;6CAI/B/+G0B;oCAAAAgI;glBAuKGovIA1E0hBaviF+D,A;gb0EpgBXsiFI;uCAAjB1vB4BpEoJ0B5yD+E,A;2GoEpJ1B7sD+B;AACM++GyE;AAGatnC4G;+RASNsmCyC;AACuBgB8G;AAKvBLAxE6FSNmB,A;wOwE1FHmnBoC;AAGfiKAtC2NJmXAA2BuBuG4B,A,A;oIsCnNRz1EiF;4DAEO03DA1E9FftiFsC,A;A0E8FqBkgFA3DsJ1B4eqB,A;A2DtJoBxcA1E9FftiF8C,I;qC0E8FqBkgFiC;iRAqCbt1DgE;2WAwBL0RoD;cAAAA6C;6JAKwBi3B6C;yEACfj3BgD;UAAAAuC;k8BA2EC21BAA9RWfuD,A;kEAgST/9GuF;+CAGlB8+GAAnS2BfgD,A;AAmSPAmC;sCAMpBeAAzS2BfkC,A;AAySPgBmC;qCAMpBDAA/S2BfkC,A;AA+SPAmC;wFAILtmC4D;gCACAA4D;oEAEEinCA1EuMCNe,A;8d0ExLEMA1EwLFNqC,A;kE0EvLDMA1EuLCNmB,A;wnB0E5KDMA1E4KCNe,A;8lB0EnKDAe;81BA4CILkF;AACDAiE;ypCA8BnBeAAra0BfoB,oC;i4JAskBE7nHiE;ioFA8P7B4oHAAp0B2BfsD,A;mEAu0BO/9G4B;0DAAAAwB;saAuCfklDyD;4VA9tB0Bw5DAxEkD3BNa,A;+0B0IjWbAe;4EACQ7zD0C;wgBjEyBTm0DA3EkoBcNuB,A;uR2E/nBTMA3E+nBSNkF,A;8M2E3nBPMA3E2nBONe,A;uf2E/mBLMA3E+mBKNqB,A;uQ2EnmBjBLuB;6HAKQKsB;AAAYLuB;wNAQpBAa;0BAAuBKmD;4IAOf8jBK;8hCkEzGNxjBA3I6XeNe,A;qR2IzXbMA3IyXaNe,A;8e2I5WThhCyD;sQAQIghCuB;klBCzBRAe;yWAYAAe;y6BA4BFMA5IqVeNe,A;quB6IvXbAe;kRAMAAe;24CA8CyCmsC6C;2HAOvBroByD;OAAhB9kDyD;4OAWsB+xDA/IiK1BtiFgC,A;uD+IjK0BsiF+B;qXAkBd/wB8D;6HAOS8jBuD;kCAAEAoD;8uCjE7EfsNkF;8GAObAA1CkeFmXAA2BuBuGqC,A,A;mJ0CvfrB1dA1C4dFmXAA2BuBuG+D,A,A;qG0ChfiB9rCA9EoPjCv0DmF,I;2C8EpPiCu0DA9EoPjCv0D4C,A;89B+D/RLwpDoFsEfAitC+DAQAhaAtD8hBFAACzQyCmOW,A,SDyQzCnOyB,yB,sD,AsDriBEoR4D,AACA1RAtD+hBFAAClQ4CyOW,A,SDkQ5CzO4B,2C,A;oBhB/gBsB+DA/DyrBTkZAAINkFqBA9mBwB+Ca,A,wC,A;qL+D3ElBrmBAgBsLNAACnGmC4PkB,A,SDmGnC5P4B,a;6WhBpJU9C2BuEmBCl4EyB,wB;2BvEjBOgnCmE;+BAAAAc;sZA4KTwyDAAvFU3vCwF,qJAOTyyCA9CgxCfl3EoB,+C,A;A8C9rCU42E0C;AAHOpgBiF;8EAAAAgFgB4CRpzCoF,uB;qBhB5CQozCwBgBiDa57EmE,uBAehC6sDACrPQ+9BiC,A,A;+lBjB4NRtN+GgByEAt1B8DCxNe40CoE,AAAsB5NAA+rBrClEiC,A,A,A;AjB/iBAnPwCgB+EA9zBAC3Ne+0CoE,AAAsB5NAA2rBrClEiC,A,A,A;AjB9iBA5N0CgBqFAn1BAC9Ne60CsE,AAAwB5NAAurBvClEiC,A,A,A;2IjBviBev5B2D;AAGbg9BmH;0BAEevSmBgB4CJ14C2CC9RQumBmD,A,AD+RNmyB2D,yCACfnvBACxRQ+9BoC,A,A;iLjBuPJjgCmBuE5Oe3qDwB,4E;gVvEsQnBuuFqG;AAEc1kCwD;iBACGiMuGgB1FV91DAA8IgBs0DgBC5URs2BgD,A,AD6UOt2BAC7UPs2BgD,A,+D,A;yPjBuTc3gCmD;uSAAAAAgBmCNw/BACgDhBDAAnBoBoTgC,A,AAmBpB/4DA/DpYgBzJwCA4lCXo5ByB,AACLy5B6C,A,A,gH,A;wB8C5yBsBhjCAgBmCNw/BiC,A;wFhB3BG/GAA9RnB1iF2CsE/CWAkC,A,A;AtE2UO+nCAxBjCvB/nC0B,AAAAioCkF,A;oOwBmDoBgiBAgBWCw/BACgDhBDAAnBoBoTkC,A,AAmBpB/4DA/DpYgBzJwCA4lCXo5B2B,AACLy5B+C,A,A,oH,A;uB8CpxBehjCAgBWCw/BmC,A;8FhBLK/GAApTrB1iF2CsE/CWAoD,A,A;s5BtEoYRuxDuB;+0BA7EN/H4FsE7EFLwF,AACAKoFAzQAitCiEAQAhaAtD8hBFAACzQyCmOW,A,SDyQzCnOyB,yB,wD,AsDriBEoRgE,AACA1RAtD+hBFAAClQ4CyOW,A,SDkQ5CzO4B,wC,A,4BsDtREzuB0G,A;+KtEuQ+C6FkB;qDAAAAyB;+rByE/fjDzDAAZWssByF,0BAAAAyD,kJ;4DAoCIEAzDLCh5C8CCEKumBsD,A,ADDPyKgBCKCs2BmD,A,ADFAtOAC4DAyOmE,A,AD3DetBAC2YvB5lD4C,AAAA2lDAAnBoBoT8B,A,A,ODxXGnTAC2YvBDAAnBoBoT2B,A,+G,A;kBwDxXZtgBAzDAemNY,AAG9B58BACEQ+9BqC,A,ADFR/9BACEQ+9B+B,A,ADGoB5qF2C,A;4HyDDnBg7EAzD0JFAACnGmC4P8C,A,A;gDwDnDf1OAzD0K3BAACzGe2O4D,A,A;AwDjERpIAAzDAziFAzE0EWAuCAhE2Bw4FyD,AACL7wC4D,A,qDA8D1C3nDAAAAAsCAEEikCoH,A,A,A,A;4UsEvEE4pDwD;AACA1RAtD+hBFAAClQ4CyOW,A,SDkQ5CzO4B,qB;8FsDzhBEMAtD8hBFAACzQyCmOW,A,SDyQzCnOyB,qB;oNsDrgBoBtB4CtDodbAgBC5TQyP2D,A,A;uFqDrJyBrP8C;gCAAAAAtDuexBAAC9UDsP2D,A,AD+UQxyEACtEXmxEAAnCeoTgC,A,kDAkCpBp0CY,AACKxkBA/D/aW5JAAy5CjB6yD0C,A,A,A,A;QoH54CkC1RAtDwejBljEACvEhBmwCAzC5ZAzgBAA+RL/nC0B,AAAAioCqD,A,A,A,A;iJ8FlQA4lD0C;8HAaS4K2BAlBEtb6BtD0eNA2BChRiCyNqD,A,A,A;qaqDnLnB6NmBAvCRtbuBtD0eNA4BChRiCyN2E,A,A,A;kCqD9KtBzPAtDwYXAAC5TQyP8E,A,A;uXqDvDR5qFmCW9ETAAATUAAAAAAAA9B4BuqFmB,A,A,A,AAEtCvqFAAqCAAgC,A,A;+GXkFe07E4CtDsZNAgBC3VQmPiF,A,A;AqDlDFvPAtDsXIDAChUOwP+E,A,A;2DqDtDXvPAtDuXGwLAPjfOzyIAAfeo0IS,AAAnBmCkC,A,AAegBxgGAAbHgtCoB,AAAM/sCAAiBHsgGiC,A,A,A,A;mC6D0HxBvPAtDuWJAACjTQyPgD,A,A;mCqDpDJpPsCtDiYCAACrUGoPkD,A,A;4BqD1DJ3PAtDsVIAAChSA2PkE,A,A;OqDtDJ3PqCtDuVCDACzRG4PqD,A,A;kHqDtDfwDAAtGctcAAoPU6IAtD8JjBAACvTQgQ+B,A,A,A,0BqD3FD7YqCAoPU6IAtD8JjBAACvTQgQE,A,SDuTRhQwC,e,A,qK;AsD3SsBrpBe;gVAkDnBopBAtDoPHAAC9SQkQgB,A,SD8SRlQ6B,sB;oGsDnPIFAtDyOJDAC3RQsQgB,A,SD2RRtQ8B,UAAAAAC1RmB7rIAR/JgBi8I8D,A,A,A;mH6DiN5BlQAtD6OPDACrSQqQgB,A,SDqSRrQ8B,UAAAAACpSmB4KARzJsBl3IAAFLy8IyC,A,A,A,A;yC6DkN7BlQAtD6OPDACpSmB4K6B,A,A;qGqDwDd5KkCtDuOLDAC3RQsQgB,A,SD2RRtQ8B,UAAAAAC1RmB7rIAR/JgBi8I+D,A,A,A;6G6DmN5BrQAtDiOPAACjRQuQgB,A,SDiRRvQ+B,6B;6GsDhOOOAtD6QEjxB6D,kIAITixBsD,yD;+HsDhRURgKtD0NVAwD,eAAAAACjQyB3rIAR9KUi8IyC,A,A,qD;o1B6DwQxCl9B8F;yEAMF4gCiG;8KAUAAiG;4qBnDpQwBtuFkBtCkRmBAA3B0nCNutF+C,A,A;uFiEp4C7BvtFyD;wNAwBiBuzD0C;gBAEPgrC2B;aAAwBhrCwC;6EACxBzuByE;AAA2ByuBwC;8JAa3C8vBI;IAAAA0B;kXAsBqBrjFkBtC4MoBAA3B0nCNutFgC,A,A;wUiErzC5BvtFyBtC2LkCAA3B0nCNutF+B,A,A;yGiEhzCjBh6BgC;gkB8D5DQvzD0C;sMAGAA2C;6vBAgDrBgnCgG;iBAAAAO;mDAIwBCyB;qSAqCdjnCyC;45CjE0OR6sDgBC7UD+9B0B,A;aD6UC/9BAC7UD+9B0B,A;iBD6UC/9BAC7UD+9B0B,A;qND4VgBpOuD;qFASciNACiC/B5lD4C,AAAA2lDAAnBoBoT8B,A,A;ODdWnTACiC/BDAAnBoBoT0B,A,4G;iBDdWnTY;AACMzpFqEAWJiqF+C,A;OATjCjqFwF;iLAgBL6sDyB;wFAAAAACxXM+9BuB,A;kLD2pBHnBACrRE5lDa,A;+DDqRF4lDACrREDAAnBoBoT8B,A,A;ODwStBnTACrREDAAnBoBoTiC,A,wC;8BDwStBnTqD;eACEzpFsB;AADFypFK;ohBPjpBsBduE;YAA6BiUiC;AAAArMO;AAAAqMqD;8XAwCtCheA3CgYI5+EoC,4BAAAAiC,A;kU2Cla+B2qF2E;6IAE3C9B2D;6UAEgB+TuF;2CACCAmC;8QAUH5qCA3CuatBxDiB,8CAA4B0kCgD,A;gR2C7ZuBlhCA3C6ZnDxDiB,+CAA4B0kC2D,A;gzCuDxdrBvIqB;AAES3xDA7D8rCQh5BAFtoCxBAAAnCsBmtDAAAAntD+D,A,A,iF,A;oG+DnBnB6zDK;yDAAAAO;2EASAAK;kEAAAAO;yRALsB+oCkB;uNAQcAsB;eAAAA0D;kMAyBpBAe;4GAGKA4B;MAAAA0D;+MAYLAe;yHAGKA4B;MAAAA0D;iKAGAA4B;MAAAA0D;sQC9FPxXAnC2FIn5IAD/FvBwvJsB,A,A;iwBwF8CW/lBqClDPH0qBAgB+BQtVW,AAAAyFkC,A,AhB9BR6PAgB8BQtVW,AAAAyF+B,A,A;gBkCxBL7a+BlDDHr7CAgBSQywDc,AAAAyFiC,A,AhBRDyNAgB4BCnTgB,AAAA0F6B,A,A;gNkCjBavwFiF;iGAOAAgG;6FAMtB9QqB9C4SmCAuE,A;gO8CjSf8Q2C;gKAIOA2B;oIAKGAY;AAAesvDoG;0gBAoDnC4yBqG;+BARKqcuD;sHAIhBv+F8D;gBAIWkiFAlD5CHptIAgB/EP8nJoC,AACFpUAhCmFDDsE,A,A,A;AkEuCKQAclJJJyD,A;AdkJYzGAlD5CHptIAgB9ET0zIOhCmFDDsE,A,A,A;gTkE8DqCvoFgB;+LAMOAgB;mMASNAiB;2LAQFAgB;gKAKIAgB;iNASAAgB;wWAYrBu+FwD;AAOGxVAcjOrBJ2H,A;kNdoOC3oFgF;kWlD3IJq5EAtEstBF2S+D,sB;0BsErtBE3SsB;0BACAAsB;oFAGEygBAAiBYjwC2C,A;oBAjBZiwCAAkBJzgBuB,kI;6nECJsB6OAgB1DpBWkB,AAHKgCuD,A;++DhByEC7zBAA9DSmxBAgBlBoDUkB,AAA9DgCgB,A,4F;63JhB8GkB7zBsC;oDAAAAAA5FRmxBAgBlBoDUkB,AAA9DgCgB,A,uF;+0DhB4IH3IgD;SAAAAe;2vCAcAAgD;SAAAAmC;yqFA4BsByIiH;sYAIxB2LuY;+lCAMFpwDgH;4OAIa0kDuB;0SAEX0LiX;6lCAaW3LwD;2wIAsGL4LgB;aAcNxgByC;wEAdMwgBkCAmBRrWmK,A;qIAjFqBiCAD7ONsfAgBSC1WkB,AAAAwFkE,A,A;AfuOZgGAA8EJrWA6BzQE4e+C,A,4F;4L7BoMkClfADpPboeAgBmBPnTqB,AAAA0FqC,A,AhBlBR6PAgBcQtVW,AAAAyFiG,A,A;gjEf4ORgGAA8DRrWA6BzQE4e6C,A,oD;oyI7BsPMvIAAmBRrWA6BzQE4e6C,A,uF;4I7BwLmB3cuR;kYAGjBoUAA8EJrWA6BzQE4eAjFqPqC5PAAoBhCzkHAXnUM4zHiT,A,A,A,A,A;A+D8TXtoBkCD7SMqqBAgBQQtVW,AAAAyF2C,A,AhBPR/5DAgBGCs0DE,AAAAyFiF,A,A;w5DfoU0D1HkB;AAAzB8BoF;ypEAsC7BAgC;kSClYUEqC;qBAAAAM;AAAA0FmB;g4BAOLv3DAlEmrCQh5BAFtoCxBAAAnCsBmtDAAAAntDuD,A,A,A,A;AoETO6qF4B;AAAX+RiC;AAAW/RgB;gxBAmBpBFgB;moBAoBNAc;AADACc;AADAAc;AAJ0BCyB;yDAI1BDsB;AACAAmB;AACADoH;uUAIkBx3IiJ;AAETypJsB;gEACHA6B;iDAAyBnUS;0mCAShBmCc;AAF+BAc;AAAzBAc;AADKCyB;yDACLDsB;AAAyBAmB;AAE/BAqD;2EAAwCnCoG;22BAQ5CmCc;AAHUAc;AADKCyB;0DACLDsB;AAGVAkE;2EACLnCoG;mVAKEmCc;AADaAgD;AACbAuC;svBAWkBC2C;gFACJDyE;oOAGGgSqF;4GAKzBhSgC;4gBAGgBz3IyI;cACFypJmE;yJACsBnUqB;+KACxB8Ve;AAAqB3B6F;ssCAkGP/R2C;iFACJDyE;2QAuBkB53ByBxD5OvBhzDuD,A;AwD4OuBkgFA1E0O3C4e0E,yC;uP0EzOgBvqC4IzFwCXv0D6E,A;2EyFrC0B48FoB;gCAAAAgC;gGAENhSc;AADCAgD;AACDAkE;0PAIpBAc;yBAAAAc;AAA6BgSsC;i8BAML/R2C;iFACLDuE;AACCAyE;mOAIHgSqE;iJAOjBhS4B;2SAKkBAsF;4PAIpBAc;yBAAAAc;AAA6BgSsF;8zBAM7B/R2C;sWAKmCDc;AAA1BAiD;AAA0BA2B;8BACDAc;AAAzBAgD;AAAyBAgF;ubAzQRgSgB;AAClBAiD;AAGH9Rc;AAFiBD0E;AAEjBC0D;AAGGFiE;m8BA4FDgSsG;0FACYAwB;kPAENAqG;ylCAkGXhS4B;AAA2BAoB;AAAA2FkB;uMAGLvIoC;2SAKpB6C4B;qVAGQDwD;6zCAiHT2T4E;AAGWA6C;oQAWHl1JI;qJA5CA22DAxE+kCqButFmD,A;uOwExkC7BgRiC;yLAuHR1SAA8CIz6BkCAjD2CkhCwC,A,8C;gRAsBFzgCS;83BAgB5BmnCmF;4EAAAAAApBEh5FAAoNrBAAAxB4CwnCAAAAxOAlEikBhBh5BAFtoCxBAAAnCsBmtDAAAAntD8F,A,A,A,A,A,A,A,A;8OoEmcA6xD4C;ilHAgCtBynBsL7CpSFuekG,A;mZ6CoTqC5UI;QAAAAqC;sEAIrCIK;QAAAAmC;6EAGcrjFuCAgJhBAAAlC4CwnCAAAAxOAlEikBhBh5BqBFtoCxBAAAnCsBmtDAAAAntDsF,A,A,A,A,A,A,A;4CoE+fWyjFoC;kPAKbRuD;0BAEajjF8C;8IASnBA0CA0LlBAAAjG4CwnCAAAAxOAlEikBhBh5BqBFtoCxBAAAnCsBmtDAAAAntDwF,A,A,A,A,A,A,A;qCoEqhBhBAwC;ggBA0BkBkjFuB;iJASJUyB;oIAStBiIAAtHIz6B+BAjD2CkhCwC,A,8C;wGA2K7C0GiBAzJiBh5FwB,wB;sDAyJjBg5FAAzJiBh5FAAoNrBAAAxB4CwnCAAAAxOAlEikBhBh5BqBFtoCxBAAAnCsBmtDAAAAntDsF,A,A,A,A,A,A,A,A;8CoE4kBAokFyB;oKAIxByHAArIIz6B+BAjD2CkhCwC,A,wD;iPA+LOtyFoC7CrWXAA3B0nCNutF6B,A,A;iCwEnxBjBzoD+F;AAAsCyuB+B;qDAK7CvzDAxE8wBwButF4B,A;2EwE5wBrBvtFAAqHoBgjFsE,AAEtChjFAAjH4CwnCAAAAxOAlEikBhBh5BAFtoCxBAAAnCsBmtDAAAAntDsB,A,A,A,A,A,A,A;4BoEmmBTAiD;iBADCAmDAuHlBAAAjH4CwnCAAAAxOAlEikBhBh5BqBFtoCxBAAAnCsBmtDAAAAntDyE,A,A,A,A,A,A,A;22CoEqnBxB6iCmH;2RAyBYgvBuC;sbAsBJuvByQ;0CAQAAiJ;4HAaRv+CmH;23EAoCsB0uB6E;sdAwBtB1uBmH;slBAMgB7iCAApeyBw1EoE,6C;i3CCvK5B4gB2E;iCAEJnTI;qBAAAAqC;oSASImT2D;4BAEJ/SI;qBAAAAqC;qWAgBU+SgE;obAaJxL0B;qJASP5qFmE;+DAUI2qFI;4BACZ/3BAzD6JO5yDkB,A;qDyD7JP4yD+BzD6JO5yDqB,A;AyD7JmB2hFoB;AAA1B/uBAzD6JO5yD2C,A;0ByD5JA2qFE;AADPx3ImC;4rBA7F4Bg1IAcxGyCUkB,AAA9DgCyB,A;2Id8GQFoG;oDAEkB9BwD;+tBAiHtB8BK;gJASOAa;+HAUPAI;0DAKACI;ggBVxPCt2BAAaGs2BmB,6B;iDAZRrBAAqYuBvlD4C,AAAP44DgC,A;OArYhBrTAAqYgBqT0B,A;+WA/WAAiE;QAAAAiD;8BACH7NAA4uBsBtGc,YAAlCmC6B,A;0KAnUqBHmE;AAAA8FY;AAAAAoC;AAAT17BgG;AAEpB9E2F;spGAUmB/vDsB;sVAIAk0EsC;yEAEJwVAAvDf7lD4C,AAAA2lDAAxB2BoTmC,A,8C;sBA+EZlT6G;+EAEEAAAzDjB7lD4C,AAAA2lDAAxB2BoTqC,A,0K;utCAiGZlTAAzEf7lDuC,AAAA2lDAAxB2BoTiC,A,A;OAiGZlTAAzEfFAAxB2BoTiC,A,yC;oBAiGZlT6G;yjBASS7/BsE;0JAMT0/BAA9GevlD4C,AAAP44DiC,A;OA8GRrTAA9GQqToC,A;knBAuHc54D0E;AAAP44DiC;OAAAAe;2EAGpB9YkF;svBAsBiBn1IARljBei8I8C,A;AQ6iBvBxHAG5aeubAzCqFdlJAhC/JEkGoB,A,A,A;AsE0fThSAApHWbAuEpcnBH0C,A,AvEocL/kDqC,AAAA4lDAA7B2BoTgC,A,A;OAiJdjTAApHbHAA7B2BoTgE,A,A;0rCAkKM54DuC;AAAP44DiC;OAAAAe;wBACGvoJARhkBSo0IS,AAAnBmC+B,A;wjBQskBe5mDuC;AAAP44DiC;OAAAAe;wBACEvoJARvkBSo0IS,AAAnBmC+B,A;scQ4kBsCv2IAR5kBnBo0IS,AAAnBmC8B,A;64BQslBJlBAAjKf7lDuC,AAAA2lDAAxB2BoTgC,A,A;OAyLZlTAAjKfFAAxB2BoTiC,A,wC;oBAyLZlT6G;u1CAeAAAAhLf7lDuC,AAAA2lDAAxB2BoTgC,A,A;OAwMZlTAAhLfFAAxB2BoTiC,A,wC;oBAwMZlT6G;2PAIEhlDuF;sCAAA64CAA3VFqNW,iC;qBA6VKlmDqC;UAAZ1kC4B;AACAA2C;8NAIS0kCuF;sCAAA64CAAlWFqNW,iC;qBAoWKlmDqC;UAAZ1kC4B;AACAA2C;8NAIS0kCuF;iCAAA64CAAzWFqNW,iC;wBA2WKlmD0C;OAAZ1kC4B;AACAA2C;oKAIS0kCuF;iCAAA64CAAhXFqNW,iC;eAkXmB5qFoB;AAAY0kC0C;oKAG7BAuF;iCAAA64CAArXFqNW,iC;6BAuXmB5qFoB;AAAY0kC0C;+FAGxC+nBI;gBAAAAuB;2wCAqC0B8vC0BtErqBxB5CqB,A;AsEoqBqBtlJAR5qBSo0IS,AAAnBmC2E,A;AQ+qBkB7mDoD;AAAP64DgC;OAAAA+B;wJACD3kBuD;wDACA3iBuD;wDACApGqD;wDACA9GmD;wDACAoNyD;wDACA+uB2D;0BAGAnC6C;m5CYheNr3BA5FiChB/qD0D,I;gC4FjCgB+qDA5FiChB/qD6C,A;6G4FpBAu0DA5FmEAv0DyD,A;6B4F3EOu0DA5F2EPv0DkD,I;kC4F3EOu0DA5F2EPv0DyC,A;yC4FnEAu0DA5FmEAv0D4C,A;2J4F/IqB6xDA1F4ONNa,A;mV0FvKIgDA5F0EnBv0DkD,I;mC4F1EmBu0DA5F0EnBv0DyC,A;oY4FlEmBu0DA5FkEnBv0DqD,I;8C4FlEmBu0DA5FkEnBv0D4C,A;gb6F5IK+yEgC;gpBAoCC/yEY;yJAIiBAoBCpNhBuhFiD,A;kBDwNGjlDAhFcekxBgE,A;egFdflxBAhFcekxBa,A;iDgFdP6nB2D;AAChBA+E;AAEK/4CAhFWkBkxBiD,A;egFXlBlxBAhFWkBkxB4B,A;qIgFTZlxBAhFSYkxBmB,A;wDgFPRlxBAhFOQkxBiD,A;0BgFPRlxBAhFOQkxBwC,A;0FgFFrBxtDgC;8qBAcEAqB;OAAAA2C;+KA6BHs8BAhFzCsBkxBqF,A;iBgFyCtBlxBAhFzCsBkxBa,A;4BgF8CpBlxBAhF9CoBkxBqB,A;4BgF+CpBlxBAhF/CoBkxBiB,A;qBgF+CZ6nBqE;AACHA4E;qBACAA8D;6BAKc/4CAhFtDCkxB8C,A;mBgFsDDlxBAhFtDCkxBe,A;kFgF0DrBxtDoBChSGuhF8C,A;4VD4POjlDAhFtBWkxBoE,A;iBgFsBXlxBAhFtBWkxBe,A;6GgF2BfxtDY;6JAIoBAoBCrQvBuhFkD,A;4BDuQsBjlDAhFjCJkxBgE,A;egFiCIlxBAhFjCJkxBa,A;0DgFkCDlxBAhFlCCkxBiD,A;egFkCDlxBAhFlCCkxBa,A;sDgFmCJlxBAhFnCIkxBiD,A;QgFqCjBxtDgB;AAFas8BAhFnCIkxBW,A;4XgFiFFxtDoBCvThBuhFiD,A;kBDwTGjlDAhFlFekxBgE,A;egFkFflxBAhFlFekxBa,A;iBgFkFP6nB0D;AACO/4CAhFnFAkxBiD,A;egFmFAlxBAhFnFAkxBa,A;0DgFoFLlxBAhFpFKkxBiD,A;egFoFLlxBAhFpFKkxBa,A;6DgFwFrBxtDoC;AAHIuxD0D;yTAULj1BAhF/FsBkxBoE,A;iBgF+FtBlxBAhF/FsBkxBgC,A;kIgFoGAlxBAhFpGAkxBmB,A;sFgFsGblxBAhFtGakxB4C,A;qBgFsGblxBAhFtGakxBa,A;gCgFyGOlxBAhFzGPkxB8C,A;mBgFyGOlxBAhFzGPkxBiB,A;uWgFmHflxBAhFnHekxBmD,A;iBgFmHflxBAhFnHekxBsC,A;uCgFmHmBlxBAhFnHnBkxBqB,A;sEgFqHtBlxBAhFrHsBkxBmD,A;iBgFqHtBlxBAhFrHsBkxBoD,A;yCgFqHgClxBAhFrHhCkxBqB,A;+EgFsHnBxtDsC;qcAWI6xDA3F8CKN0B,A;A2F/CTvxDiB;OAAAA2C;kJAOAAE;6HAGFAoBChXGuhFiD,A;qZDwYAjlDAhFlKkBkxBgE,A;egFkKlBlxBAhFlKkBkxB0C,A;yDgFoKZlxBAhFpKYkxBmB,A;+FgFwKUn1D+B;AAAzBmoFiB;AAAW79Ce;AAActqCAF2BfA4J,A;AExBZikCAhF3KiBkxBiD,A;egF2KjBlxBAhF3KiBkxBmC,A;mCgF2KmBlxBAhF3KnBkxBmB,A;gEgF4KflxBAhF5KekxBiD,A;egF4KflxBAhF5KekxBmC,A;qCgF4KqBlxBAhF5KrBkxBmB,A;kEgF6KIlxBAhF7KJkxBiD,A;egF6KrBxtDiC;AAAyBs8BAhF7KJkxBI,A;8uBkF8FzB+GA/FZAv0DyD,A;6B+FSHu0DA/FTGv0DkD,I;kC+FSHu0DA/FTGv0DyC,A;yC+FYAu0DA/FZAv0D4C,A;+U+FvKmB6xDA7FoQJNa,A;qc6FlNYMA7FkNZNyC,A;q7EkEjZAonC0G;OAAkB/ZAvCwelB5+E4B,oBAAAAgC,A;6CuCreEq4FkF;gMAkBxBAI;AAAQr4FuCAiDamuFAAAAnuFA7C2mCAAsBFlmCnBAAApBsBmtDAAAAntDuF,A,A,A,A,A,yC;A+CtCxBq4FiK;AASAMI;+GAAAA4J;6PAuBAA0G;8OAjByCA0G;ySAEjCNkF;2CACAM0G;qYAsER91DgE;oVAoBEEI;0BAAAAqD;oGAsCkB2mBsB;8LAKMpjBK;0BAAAA0C;YAGnBojBsB;8IASa2HO/C9GU4jC6B,A;6VuBhEjB1hCgC;iWAMAAgC;oqBAcG45BAAoRmBntFA3BunCEutFkE,A,A;8jB2B5rC9BJAAqE4BntFA3BunCEutFyB,A,A;mT2B/qCrCsKgR;y2B6BrEI7M0B;oPAaAA0B;qcAsBAA0B;2HAcAAyB;AAAch5B2B;4KAMMA2B;AACb84BK;8IAMAAI;km4F3E8+BoC9qF0E;+1BA4T/Cq/FsK;CAAAAG;oWAYAC0K;CAAAAG;kWAYAC0G;CAAAAG;wXAYiBC8G;CAAAAG;whCwCjgCgClD8C;m0DQO/BckB;yGQlhBgBp9F+BAsLpBqqFAAAArqFArCyVsBolB6B,4B,A,AqCvVtCplB8B,A;+aqCnMsBrCAjB5CY6pB4C,A;8DGAPxnBiBgEMF24EiD,AAEK9iBqD,AAEV+gBiD,A;kEhELS52EmBkEMJ24EuD,AAEK9iByD,AAEV+gBiG,AAEQnCkE,A;0DlEJHz0EeiEPA24EiD,AAEK9iBmF,AAEV+gB+E,AAEQnCiD,A;0YGKsBz0EA7GmKzCAwK,A;4E6GnKyCAA7GmKzCAmG,A;yH+C1BoCggG6B;+nBHymBbhgGc5C1qBN8zF0C,A;" + } +} diff --git a/web/favicon.png b/web/favicon.png new file mode 100644 index 0000000..f0974a8 Binary files /dev/null and b/web/favicon.png differ diff --git a/web/icons/Icon-192.png b/web/icons/Icon-192.png new file mode 100644 index 0000000..ae4ff36 Binary files /dev/null and b/web/icons/Icon-192.png differ diff --git a/web/icons/Icon-512.png b/web/icons/Icon-512.png new file mode 100644 index 0000000..e392552 Binary files /dev/null and b/web/icons/Icon-512.png differ diff --git a/web/icons/Icon-maskable-192.png b/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000..ae4ff36 Binary files /dev/null and b/web/icons/Icon-maskable-192.png differ diff --git a/web/icons/Icon-maskable-512.png b/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000..e392552 Binary files /dev/null and b/web/icons/Icon-maskable-512.png differ diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..001206a --- /dev/null +++ b/web/index.html @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + SimpleAAC + + + + + + diff --git a/web/manifest.json b/web/manifest.json new file mode 100644 index 0000000..882853e --- /dev/null +++ b/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "SimpleAAC", + "short_name": "SimpleAAC", + "start_url": ".", + "display": "standalone", + "background_color": "#FFFFFF", + "theme_color": "#FFFFFF", + "description": "SimpleAAC - Augmentative and Alternative Communication app.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} \ No newline at end of file diff --git a/web/sqlite3.wasm b/web/sqlite3.wasm new file mode 100644 index 0000000..be71fe4 Binary files /dev/null and b/web/sqlite3.wasm differ