diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 308c5ccbf9..b68574fc01 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -5,7 +5,7 @@ * [Flutter](https://flutter.dev/docs/get-started/install) version in the `kraken/pubspec.yaml` * [CMake](https://cmake.org/) v3.10.0 or later * [Xcode](https://developer.apple.com/xcode/) (10.12) or later (Running on macOS or iOS) - * [Android NDK](https://developer.android.com/studio/projects/install-ndk) version `21.4.7075529` (Running on Android) + * [Android NDK](https://developer.android.com/studio/projects/install-ndk) version `23.2.8568313` (Running on Android) 1. Install diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index dc61ad5541..0000000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: Sample Page Benchmark - -on: - push: - branches: [main] - workflow_dispatch: - -env: - nodeVersion: "16" - cmakeVersion: "3.22.x" - flutterVersion: "2.8.1" - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - benchmark: - runs-on: [self-hosted, benchmark] - timeout-minutes: 30 - steps: - - uses: actions/checkout@v2 - - uses: subosito/flutter-action@v2 - with: - flutter-version: ${{ env.flutterVersion }} - - run: flutter doctor -v - - name: Run Benchmark - run: npm run benchmark - id: benchmark diff --git a/.github/workflows/bridge_compile_test.yml b/.github/workflows/bridge_compile_test.yml deleted file mode 100644 index 617d5d0dad..0000000000 --- a/.github/workflows/bridge_compile_test.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: Bridge Compile Test - -on: - push: - paths: - - 'bridge/**' -jobs: - build_for_android: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: nttld/setup-ndk@v1 - id: setup-ndk - with: - ndk-version: r21e - - name: npm install - run: npm install - - name: compile for android - run: npm run build:bridge:android:release - env: - ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }} - - build_for_ios: - runs-on: macos-latest - steps: - - uses: actions/checkout@v2 - - uses: nttld/setup-ndk@v1 - id: setup-ndk - with: - ndk-version: r21e - - name: npm install - run: npm install - - name: compile for ios - run: npm run build:bridge:ios:release - - build_for_macos: - runs-on: macos-latest - steps: - - uses: actions/checkout@v2 - - uses: nttld/setup-ndk@v1 - id: setup-ndk - with: - ndk-version: r21e - - name: npm install - run: npm install - - name: compile for macos - run: npm run build:bridge:macos:release diff --git a/.github/workflows/contributors.yml b/.github/workflows/contributors.yml index 6d89c28612..c560266a11 100644 --- a/.github/workflows/contributors.yml +++ b/.github/workflows/contributors.yml @@ -20,8 +20,8 @@ jobs: - name: Deploy uses: taixw2/deploy-aliyun-oss@main with: - access-key-id: ${{ secrets.OSS_AK }} - access-key-secret: ${{ secrets.OSS_SK }} - bucket: kraken - region: oss-cn-hangzhou + access-key-id: ${{ secrets.ALIYUN_OSS_AK }} + access-key-secret: ${{ secrets.ALIYUN_OSS_SK }} + bucket: andycall + region: oss-cn-beijing entry: CONTRIBUTORS.svg diff --git a/.github/workflows/integration_test_flutter.yml b/.github/workflows/integration_test_flutter.yml index cfffcee22c..27f730d843 100644 --- a/.github/workflows/integration_test_flutter.yml +++ b/.github/workflows/integration_test_flutter.yml @@ -10,20 +10,54 @@ env: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: integration_test: - runs-on: [self-hosted] + runs-on: macos-latest steps: - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: ${{ env.nodeVersion }} + - uses: jwlawson/actions-setup-cmake@v1.11 + with: + cmake-version: ${{ env.cmakeVersion }} - uses: subosito/flutter-action@v2 with: flutter-version: ${{ env.flutterVersion }} + - run: flutter config --enable-macos-desktop + - run: flutter doctor -v - name: Run Test run: npm test id: test continue-on-error: true - - name: Upload Snapshots - run: node scripts/upload_snapshots.js + - uses: actions/upload-artifact@v2 + with: + name: integration_snapshots + path: integration_tests/snapshots + - name: Check on failures + if: steps.test.outcome != 'success' + run: exit 1 + plugin_test: + runs-on: macos-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: ${{ env.nodeVersion }} + - uses: jwlawson/actions-setup-cmake@v1.11 + with: + cmake-version: ${{ env.cmakeVersion }} + - uses: subosito/flutter-action@v2 + with: + flutter-version: ${{ env.flutterVersion }} + - run: flutter config --enable-macos-desktop + - run: flutter doctor -v + - name: Run Plugin Test + run: npm run pretest && npm run plugin_test + id: test continue-on-error: true + - uses: actions/upload-artifact@v2 + with: + name: plugin_snapshots + path: integration_tests/snapshots/plugins - name: Check on failures if: steps.test.outcome != 'success' run: exit 1 - diff --git a/.github/workflows/plugin_test_flutter.yml b/.github/workflows/plugin_test_flutter.yml deleted file mode 100644 index 7720959284..0000000000 --- a/.github/workflows/plugin_test_flutter.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: Plugin Test - -on: [workflow_dispatch, pull_request] - -env: - nodeVersion: "16" - cmakeVersion: "3.22.x" - flutterVersion: "2.8.1" - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - plugin_test: - runs-on: [self-hosted] - steps: - - uses: actions/checkout@v2 - - uses: subosito/flutter-action@v2 - with: - flutter-version: ${{ env.flutterVersion }} - - name: Run Plugin Test - run: npm run pretest && npm run plugin_test - id: test - continue-on-error: true - - name: Upload Snapshots - run: node scripts/upload_snapshots.js - continue-on-error: true - - name: Check on failures - if: steps.test.outcome != 'success' - run: exit 1 diff --git a/.github/workflows/publish_to_dart_dev.yml b/.github/workflows/publish_to_dart_dev.yml index 41d1428d1e..7eb84e3ecd 100644 --- a/.github/workflows/publish_to_dart_dev.yml +++ b/.github/workflows/publish_to_dart_dev.yml @@ -29,19 +29,102 @@ jobs: with: name: linux_binary path: bridge/build/linux/ - - publishToPubDev: - needs: build_linux_binary - runs-on: [self-hosted, flutter_2.2.0] + build_macos_binary: + runs-on: macos-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: "16" + - uses: jwlawson/actions-setup-cmake@v1.11 + with: + cmake-version: ${{ env.cmakeVersion }} + - name: NPM INSTALL + run: npm install + - name: Build bridge binary + run: npm run build:bridge:macos:release + - uses: actions/upload-artifact@v2 + with: + name: macos_binary + path: bridge/build/macos/ + build_ios_binary: + runs-on: macos-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: "16" + - uses: jwlawson/actions-setup-cmake@v1.11 + with: + cmake-version: ${{ env.cmakeVersion }} + - name: NPM INSTALL + run: npm install + - name: Build bridge binary + run: npm run build:bridge:ios:release + - uses: actions/upload-artifact@v2 + with: + name: ios_binary + path: bridge/build/ios/ + build_android_binary: + runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: "16" + - uses: nttld/setup-ndk@v1 + id: setup-ndk + with: + ndk-version: r23c + env: + ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }} + - uses: jwlawson/actions-setup-cmake@v1.11 + with: + cmake-version: ${{ env.cmakeVersion }} - name: NPM INSTALL run: npm install - name: Build bridge binary - run: npm run build:bridge:all:release + run: npm run build:bridge:android:release + - uses: actions/upload-artifact@v2 + with: + name: android_binary + path: bridge/build/android/ + publish: + needs: [build_linux_binary, build_android_binary, build_ios_binary, build_macos_binary] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: subosito/flutter-action@v2 + with: + flutter-version: ${{ env.flutterVersion }} + - name: NPM INSTALL + run: npm install + - name: Set up nightly version + run: node scripts/set_up_nightly_release.js - uses: actions/download-artifact@v2 with: name: linux_binary path: bridge/build/linux/ - - name: Publish to dart.dev - run: cd kraken && flutter pub publish --force + - uses: actions/download-artifact@v2 + with: + name: ios_binary + path: bridge/build/ios/ + - uses: actions/download-artifact@v2 + with: + name: macos_binary + path: bridge/build/macos/ + - uses: actions/download-artifact@v2 + with: + name: android_binary + path: bridge/build/android/ + - name: Prepare distribute binaries + run: node scripts/pre_publish_kraken.js + - name: Publish + uses: k-paxian/dart-package-publisher@master + with: + credentialJson: ${{ secrets.CREDENTIAL_JSON }} + force: true + flutter: true + skipTests: true + relativePath: ./kraken + diff --git a/.github/workflows/publish_to_dart_dev_nightly.yml b/.github/workflows/publish_to_dart_dev_nightly.yml index c7475a61c1..11ad4d90eb 100644 --- a/.github/workflows/publish_to_dart_dev_nightly.yml +++ b/.github/workflows/publish_to_dart_dev_nightly.yml @@ -4,7 +4,7 @@ on: schedule: # https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule # Run workflow every day at 21:00 - - cron: '0 21 * * *' + - cron: '0 0 * * 0' workflow_dispatch: env: @@ -31,21 +31,101 @@ jobs: with: name: linux_binary path: bridge/build/linux/ - - publishToPubDev: - needs: build_linux_binary - runs-on: [self-hosted, flutter_2.2.0] + build_macos_binary: + runs-on: macos-latest steps: - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: "16" + - uses: jwlawson/actions-setup-cmake@v1.11 + with: + cmake-version: ${{ env.cmakeVersion }} + - name: NPM INSTALL + run: npm install + - name: Build bridge binary + run: npm run build:bridge:macos:release + - uses: actions/upload-artifact@v2 + with: + name: macos_binary + path: bridge/build/macos/ + build_ios_binary: + runs-on: macos-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: "16" + - uses: jwlawson/actions-setup-cmake@v1.11 + with: + cmake-version: ${{ env.cmakeVersion }} + - name: NPM INSTALL + run: npm install + - name: Build bridge binary + run: npm run build:bridge:ios:release + - uses: actions/upload-artifact@v2 + with: + name: ios_binary + path: bridge/build/ios/ + build_android_binary: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: "16" + - uses: nttld/setup-ndk@v1 + id: setup-ndk + with: + ndk-version: r23c + env: + ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }} + - uses: jwlawson/actions-setup-cmake@v1.11 + with: + cmake-version: ${{ env.cmakeVersion }} + - name: NPM INSTALL + run: npm install + - name: Build bridge binary + run: npm run build:bridge:android:release + - uses: actions/upload-artifact@v2 + with: + name: android_binary + path: bridge/build/android/ + publish: + needs: [build_linux_binary, build_android_binary, build_ios_binary, build_macos_binary] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: subosito/flutter-action@v2 + with: + flutter-version: ${{ env.flutterVersion }} - name: NPM INSTALL run: npm install - name: Set up nightly version run: node scripts/set_up_nightly_release.js - - name: Build bridge binary - run: npm run build:bridge:all:release - uses: actions/download-artifact@v2 with: name: linux_binary path: bridge/build/linux/ - - name: Publish to dart.dev - run: cd kraken && flutter pub publish --force + - uses: actions/download-artifact@v2 + with: + name: ios_binary + path: bridge/build/ios/ + - uses: actions/download-artifact@v2 + with: + name: macos_binary + path: bridge/build/macos/ + - uses: actions/download-artifact@v2 + with: + name: android_binary + path: bridge/build/android/ + - name: Prepare distribute binaries + run: node scripts/pre_publish_kraken.js + - name: Publish + uses: k-paxian/dart-package-publisher@master + with: + credentialJson: ${{ secrets.CREDENTIAL_JSON }} + force: true + flutter: true + skipTests: true + relativePath: ./kraken diff --git a/README.md b/README.md index f6db6c0637..3c62ea82d8 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ Read our [contributing guide](https://github.com/openkraken/kraken/blob/main/.gi Thank you to all the people who already contributed to Kraken! -![CONTRIBUTORS](https://kraken.oss-cn-hangzhou.aliyuncs.com/CONTRIBUTORS.svg) +![CONTRIBUTORS](https://andycall.oss-cn-beijing.aliyuncs.com/CONTRIBUTORS.svg) Copyright (c) 2019-present, The Kraken authors. diff --git a/bridge/CMakeLists.txt b/bridge/CMakeLists.txt index a9f5e734b8..9094fc889c 100644 --- a/bridge/CMakeLists.txt +++ b/bridge/CMakeLists.txt @@ -162,6 +162,8 @@ if ($ENV{KRAKEN_JS_ENGINE} MATCHES "quickjs") ) list(APPEND QUICK_JS_SOURCE + ${CMAKE_CURRENT_SOURCE_DIR}/third_party/quickjs/libbf.c + ${CMAKE_CURRENT_SOURCE_DIR}/third_party/quickjs/libbf.h ${CMAKE_CURRENT_SOURCE_DIR}/third_party/quickjs/cutils.c ${CMAKE_CURRENT_SOURCE_DIR}/third_party/quickjs/cutils.h ${CMAKE_CURRENT_SOURCE_DIR}/third_party/quickjs/libregexp.c diff --git a/bridge/bindings/qjs/dom/style_declaration.cc b/bridge/bindings/qjs/dom/style_declaration.cc new file mode 100644 index 0000000000..e69de29bb2 diff --git a/bridge/core/css_property_list.h b/bridge/core/css_property_list.h new file mode 100644 index 0000000000..e69de29bb2 diff --git a/bridge/core/dom/element_test.cc b/bridge/core/dom/element_test.cc index 67f024053b..c63f2c8301 100644 --- a/bridge/core/dom/element_test.cc +++ b/bridge/core/dom/element_test.cc @@ -78,6 +78,23 @@ TEST(Element, setAttributeWithHTML) { EXPECT_EQ(errorCalled, false); } +TEST(Element, style) { + bool static errorCalled = false; + bool static logCalled = false; + kraken::KrakenPage::consoleMessageHandler = [](void* ctx, const std::string& message, int logLevel) { + logCalled = true; + EXPECT_STREQ(message.c_str(), "true false"); + }; + auto bridge = TEST_init([](int32_t contextId, const char* errmsg) { + KRAKEN_LOG(VERBOSE) << errmsg; + errorCalled = true; + }); + auto context = bridge->getContext(); + const char* code = "console.log('borderTop' in document.body.style, 'borderXXX' in document.body.style)"; + bridge->evaluateScript(code, strlen(code), "vm://", 0); + EXPECT_EQ(errorCalled, false); +} + TEST(Element, instanceofNode) { bool static errorCalled = false; bool static logCalled = false; diff --git a/integration_tests/assets/defineA.js b/integration_tests/assets/defineA.js index cef5151903..39cd6772a2 100644 --- a/integration_tests/assets/defineA.js +++ b/integration_tests/assets/defineA.js @@ -1,2 +1,2 @@ window.A = 'A'; -window.bundleALoadTime = Date.now(); +window.bundleALoadTime = performance.now(); diff --git a/integration_tests/assets/defineB.js b/integration_tests/assets/defineB.js index f794306e9a..f55f57f894 100644 --- a/integration_tests/assets/defineB.js +++ b/integration_tests/assets/defineB.js @@ -1,2 +1,2 @@ window.B = 'B'; -window.bundleBLoadTime = Date.now(); +window.bundleBLoadTime = performance.now(); diff --git a/integration_tests/assets/large-script.js b/integration_tests/assets/large-script.js new file mode 100644 index 0000000000..7e2926b07b --- /dev/null +++ b/integration_tests/assets/large-script.js @@ -0,0 +1,386 @@ +/* + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + * Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling Filling + */ +window.C = 'C'; +window.bundleCLoadTime = performance.now(); diff --git a/integration_tests/lib/bridge/match_snapshots.dart b/integration_tests/lib/bridge/match_snapshots.dart index 5c737e3812..04fc079d1e 100644 --- a/integration_tests/lib/bridge/match_snapshots.dart +++ b/integration_tests/lib/bridge/match_snapshots.dart @@ -94,12 +94,14 @@ bool matchImage(Uint8List imageA, List imageB, String filename) { diff /= height * width; - if (diff > 0) { + bool isMatch = (diff * 10e5) < 1; + + if (!isMatch) { final newSnap = File('$filename.diff.png'); newSnap.writeAsBytesSync(encodePng(diffImg)); } - return (diff * 10e5) < 300; // < 0.03% + return isMatch; // < 0.001% } bool matchFile(List left, List right) { diff --git a/integration_tests/runtime/global.ts b/integration_tests/runtime/global.ts index 6963550ece..4bf133ac79 100644 --- a/integration_tests/runtime/global.ts +++ b/integration_tests/runtime/global.ts @@ -12,6 +12,8 @@ */ // Should by getter because body will reset before each spec +declare const BODY: HTMLBodyElement + Object.defineProperty(global, 'BODY', { get() { return document.body; diff --git a/integration_tests/scripts/core_integration_starter.js b/integration_tests/scripts/core_integration_starter.js index ad408ba39b..4e1f028089 100644 --- a/integration_tests/scripts/core_integration_starter.js +++ b/integration_tests/scripts/core_integration_starter.js @@ -19,6 +19,8 @@ function startIntegrationTest() { env: { ...process.env, KRAKEN_ENABLE_TEST: 'true', + 'enable-software-rendering': true, + 'skia-deterministic-rendering': true, KRAKEN_TEST_DIR: path.join(__dirname, '../') }, cwd: process.cwd(), diff --git a/integration_tests/snapshots/css/css-align/baseline-rules.ts.6b461d0a1.png b/integration_tests/snapshots/css/css-align/baseline-rules.ts.6b461d0a1.png index cc7976f265..79e4c3b0d2 100644 Binary files a/integration_tests/snapshots/css/css-align/baseline-rules.ts.6b461d0a1.png and b/integration_tests/snapshots/css/css-align/baseline-rules.ts.6b461d0a1.png differ diff --git a/integration_tests/snapshots/css/css-align/text-align.ts.8cfeee3d2.png b/integration_tests/snapshots/css/css-align/text-align.ts.8cfeee3d2.png index 6bf4ec7b10..cac5de516f 100644 Binary files a/integration_tests/snapshots/css/css-align/text-align.ts.8cfeee3d2.png and b/integration_tests/snapshots/css/css-align/text-align.ts.8cfeee3d2.png differ diff --git a/integration_tests/snapshots/css/css-backgrounds/background-position.ts.9a91243b1.png b/integration_tests/snapshots/css/css-backgrounds/background-position.ts.9a91243b1.png index 5085a7c6d5..ebc1dc334d 100644 Binary files a/integration_tests/snapshots/css/css-backgrounds/background-position.ts.9a91243b1.png and b/integration_tests/snapshots/css/css-backgrounds/background-position.ts.9a91243b1.png differ diff --git a/integration_tests/snapshots/css/css-backgrounds/background-position.ts.b9d68cff1.png b/integration_tests/snapshots/css/css-backgrounds/background-position.ts.b9d68cff1.png index 8ff4c904fc..2cdc1e07f1 100644 Binary files a/integration_tests/snapshots/css/css-backgrounds/background-position.ts.b9d68cff1.png and b/integration_tests/snapshots/css/css-backgrounds/background-position.ts.b9d68cff1.png differ diff --git a/integration_tests/snapshots/css/css-backgrounds/background-shorthand.ts.0506c71e1.png b/integration_tests/snapshots/css/css-backgrounds/background-shorthand.ts.0506c71e1.png index e61be99f21..19872657d2 100644 Binary files a/integration_tests/snapshots/css/css-backgrounds/background-shorthand.ts.0506c71e1.png and b/integration_tests/snapshots/css/css-backgrounds/background-shorthand.ts.0506c71e1.png differ diff --git a/integration_tests/snapshots/css/css-backgrounds/background-shorthand.ts.319e54341.png b/integration_tests/snapshots/css/css-backgrounds/background-shorthand.ts.319e54341.png index d030549585..74ac2a16ab 100644 Binary files a/integration_tests/snapshots/css/css-backgrounds/background-shorthand.ts.319e54341.png and b/integration_tests/snapshots/css/css-backgrounds/background-shorthand.ts.319e54341.png differ diff --git a/integration_tests/snapshots/css/css-backgrounds/background-size.ts.26c3528a1.png b/integration_tests/snapshots/css/css-backgrounds/background-size.ts.26c3528a1.png index b5f561db32..30fe04db6e 100644 Binary files a/integration_tests/snapshots/css/css-backgrounds/background-size.ts.26c3528a1.png and b/integration_tests/snapshots/css/css-backgrounds/background-size.ts.26c3528a1.png differ diff --git a/integration_tests/snapshots/css/css-backgrounds/background-size.ts.567e2d931.png b/integration_tests/snapshots/css/css-backgrounds/background-size.ts.567e2d931.png index 6703c48adf..c4fa696f2a 100644 Binary files a/integration_tests/snapshots/css/css-backgrounds/background-size.ts.567e2d931.png and b/integration_tests/snapshots/css/css-backgrounds/background-size.ts.567e2d931.png differ diff --git a/integration_tests/snapshots/css/css-backgrounds/background-size.ts.c21f24bb1.png b/integration_tests/snapshots/css/css-backgrounds/background-size.ts.c21f24bb1.png index d3ca3c3fa0..b07f57d23c 100644 Binary files a/integration_tests/snapshots/css/css-backgrounds/background-size.ts.c21f24bb1.png and b/integration_tests/snapshots/css/css-backgrounds/background-size.ts.c21f24bb1.png differ diff --git a/integration_tests/snapshots/css/css-backgrounds/border-radius.ts.81b273f11.png b/integration_tests/snapshots/css/css-backgrounds/border-radius.ts.81b273f11.png index f06c009cf7..9512e74a9c 100644 Binary files a/integration_tests/snapshots/css/css-backgrounds/border-radius.ts.81b273f11.png and b/integration_tests/snapshots/css/css-backgrounds/border-radius.ts.81b273f11.png differ diff --git a/integration_tests/snapshots/css/css-backgrounds/border-radius.ts.f402f9b71.png b/integration_tests/snapshots/css/css-backgrounds/border-radius.ts.f402f9b71.png index 17478e99be..923448dc3d 100644 Binary files a/integration_tests/snapshots/css/css-backgrounds/border-radius.ts.f402f9b71.png and b/integration_tests/snapshots/css/css-backgrounds/border-radius.ts.f402f9b71.png differ diff --git a/integration_tests/snapshots/css/css-backgrounds/linear-gradient.ts.1b281f111.png b/integration_tests/snapshots/css/css-backgrounds/linear-gradient.ts.1b281f111.png index 4eb824e48d..c46fec7421 100644 Binary files a/integration_tests/snapshots/css/css-backgrounds/linear-gradient.ts.1b281f111.png and b/integration_tests/snapshots/css/css-backgrounds/linear-gradient.ts.1b281f111.png differ diff --git a/integration_tests/snapshots/css/css-backgrounds/linear-gradient.ts.5a95d2ab1.png b/integration_tests/snapshots/css/css-backgrounds/linear-gradient.ts.5a95d2ab1.png index 3b55805168..7b8e36d953 100644 Binary files a/integration_tests/snapshots/css/css-backgrounds/linear-gradient.ts.5a95d2ab1.png and b/integration_tests/snapshots/css/css-backgrounds/linear-gradient.ts.5a95d2ab1.png differ diff --git a/integration_tests/snapshots/css/css-backgrounds/linear-gradient.ts.ae22b2d61.png b/integration_tests/snapshots/css/css-backgrounds/linear-gradient.ts.ae22b2d61.png index 9e09003549..cb0d683803 100644 Binary files a/integration_tests/snapshots/css/css-backgrounds/linear-gradient.ts.ae22b2d61.png and b/integration_tests/snapshots/css/css-backgrounds/linear-gradient.ts.ae22b2d61.png differ diff --git a/integration_tests/snapshots/css/css-borders/border-bottom.ts.224244f71.png b/integration_tests/snapshots/css/css-borders/border-bottom.ts.224244f71.png index 44ce77c142..fee7fd7378 100644 Binary files a/integration_tests/snapshots/css/css-borders/border-bottom.ts.224244f71.png and b/integration_tests/snapshots/css/css-borders/border-bottom.ts.224244f71.png differ diff --git a/integration_tests/snapshots/css/css-box/box-shadow.ts.50213b181.png b/integration_tests/snapshots/css/css-box/box-shadow.ts.50213b181.png index 01be640866..b832edea73 100644 Binary files a/integration_tests/snapshots/css/css-box/box-shadow.ts.50213b181.png and b/integration_tests/snapshots/css/css-box/box-shadow.ts.50213b181.png differ diff --git a/integration_tests/snapshots/css/css-box/box-shadow.ts.529d3d4b1.png b/integration_tests/snapshots/css/css-box/box-shadow.ts.529d3d4b1.png index 00dbe57afd..24fe82da91 100644 Binary files a/integration_tests/snapshots/css/css-box/box-shadow.ts.529d3d4b1.png and b/integration_tests/snapshots/css/css-box/box-shadow.ts.529d3d4b1.png differ diff --git a/integration_tests/snapshots/css/css-box/box-shadow.ts.8f9635b21.png b/integration_tests/snapshots/css/css-box/box-shadow.ts.8f9635b21.png index d73602a0a9..02df269d64 100644 Binary files a/integration_tests/snapshots/css/css-box/box-shadow.ts.8f9635b21.png and b/integration_tests/snapshots/css/css-box/box-shadow.ts.8f9635b21.png differ diff --git a/integration_tests/snapshots/css/css-box/box-shadow.ts.900322241.png b/integration_tests/snapshots/css/css-box/box-shadow.ts.900322241.png index 209b75869c..d095622c57 100644 Binary files a/integration_tests/snapshots/css/css-box/box-shadow.ts.900322241.png and b/integration_tests/snapshots/css/css-box/box-shadow.ts.900322241.png differ diff --git a/integration_tests/snapshots/css/css-box/box-shadow.ts.91d600351.png b/integration_tests/snapshots/css/css-box/box-shadow.ts.91d600351.png index 4a13a445d8..07b09f2c1b 100644 Binary files a/integration_tests/snapshots/css/css-box/box-shadow.ts.91d600351.png and b/integration_tests/snapshots/css/css-box/box-shadow.ts.91d600351.png differ diff --git a/integration_tests/snapshots/css/css-box/box-shadow.ts.ab9ebe811.png b/integration_tests/snapshots/css/css-box/box-shadow.ts.ab9ebe811.png index 595d963821..27f8e10d01 100644 Binary files a/integration_tests/snapshots/css/css-box/box-shadow.ts.ab9ebe811.png and b/integration_tests/snapshots/css/css-box/box-shadow.ts.ab9ebe811.png differ diff --git a/integration_tests/snapshots/css/css-box/horizontal-formatting.ts.0ca660af1.png b/integration_tests/snapshots/css/css-box/horizontal-formatting.ts.0ca660af1.png index 4f91313aec..f09172d495 100644 Binary files a/integration_tests/snapshots/css/css-box/horizontal-formatting.ts.0ca660af1.png and b/integration_tests/snapshots/css/css-box/horizontal-formatting.ts.0ca660af1.png differ diff --git a/integration_tests/snapshots/css/css-color/text.ts.06020d761.png b/integration_tests/snapshots/css/css-color/text.ts.06020d761.png index a19bf65b87..a437b33996 100644 Binary files a/integration_tests/snapshots/css/css-color/text.ts.06020d761.png and b/integration_tests/snapshots/css/css-color/text.ts.06020d761.png differ diff --git a/integration_tests/snapshots/css/css-color/text.ts.096412841.png b/integration_tests/snapshots/css/css-color/text.ts.096412841.png index 9ec64625c7..fd5ca83e2b 100644 Binary files a/integration_tests/snapshots/css/css-color/text.ts.096412841.png and b/integration_tests/snapshots/css/css-color/text.ts.096412841.png differ diff --git a/integration_tests/snapshots/css/css-color/text.ts.1f75ec201.png b/integration_tests/snapshots/css/css-color/text.ts.1f75ec201.png index 3ffcb6d72e..5d900b2e68 100644 Binary files a/integration_tests/snapshots/css/css-color/text.ts.1f75ec201.png and b/integration_tests/snapshots/css/css-color/text.ts.1f75ec201.png differ diff --git a/integration_tests/snapshots/css/css-color/text.ts.45f1ccac1.png b/integration_tests/snapshots/css/css-color/text.ts.45f1ccac1.png index b86cd0782e..e9e28212ae 100644 Binary files a/integration_tests/snapshots/css/css-color/text.ts.45f1ccac1.png and b/integration_tests/snapshots/css/css-color/text.ts.45f1ccac1.png differ diff --git a/integration_tests/snapshots/css/css-color/text.ts.4d554e521.png b/integration_tests/snapshots/css/css-color/text.ts.4d554e521.png index d8d671b877..a7eb5dcce4 100644 Binary files a/integration_tests/snapshots/css/css-color/text.ts.4d554e521.png and b/integration_tests/snapshots/css/css-color/text.ts.4d554e521.png differ diff --git a/integration_tests/snapshots/css/css-color/text.ts.4fd11e261.png b/integration_tests/snapshots/css/css-color/text.ts.4fd11e261.png index 112d25c0a9..3ce78be4dd 100644 Binary files a/integration_tests/snapshots/css/css-color/text.ts.4fd11e261.png and b/integration_tests/snapshots/css/css-color/text.ts.4fd11e261.png differ diff --git a/integration_tests/snapshots/css/css-color/text.ts.5b89eaa01.png b/integration_tests/snapshots/css/css-color/text.ts.5b89eaa01.png index 0e0a7807f9..587d2a2641 100644 Binary files a/integration_tests/snapshots/css/css-color/text.ts.5b89eaa01.png and b/integration_tests/snapshots/css/css-color/text.ts.5b89eaa01.png differ diff --git a/integration_tests/snapshots/css/css-color/text.ts.940d416d1.png b/integration_tests/snapshots/css/css-color/text.ts.940d416d1.png index 109134550e..b0ddf853dd 100644 Binary files a/integration_tests/snapshots/css/css-color/text.ts.940d416d1.png and b/integration_tests/snapshots/css/css-color/text.ts.940d416d1.png differ diff --git a/integration_tests/snapshots/css/css-color/text.ts.c51731ca1.png b/integration_tests/snapshots/css/css-color/text.ts.c51731ca1.png index 397a5863a9..9b5cb2764d 100644 Binary files a/integration_tests/snapshots/css/css-color/text.ts.c51731ca1.png and b/integration_tests/snapshots/css/css-color/text.ts.c51731ca1.png differ diff --git a/integration_tests/snapshots/css/css-color/text.ts.ccb41dbf1.png b/integration_tests/snapshots/css/css-color/text.ts.ccb41dbf1.png index 7c473c26b2..f3ca545599 100644 Binary files a/integration_tests/snapshots/css/css-color/text.ts.ccb41dbf1.png and b/integration_tests/snapshots/css/css-color/text.ts.ccb41dbf1.png differ diff --git a/integration_tests/snapshots/css/css-color/text.ts.d00210ee1.png b/integration_tests/snapshots/css/css-color/text.ts.d00210ee1.png index 781ec943df..061bc37cac 100644 Binary files a/integration_tests/snapshots/css/css-color/text.ts.d00210ee1.png and b/integration_tests/snapshots/css/css-color/text.ts.d00210ee1.png differ diff --git a/integration_tests/snapshots/css/css-color/text.ts.e9cf302e1.png b/integration_tests/snapshots/css/css-color/text.ts.e9cf302e1.png index ff4dc56971..85f84aa03a 100644 Binary files a/integration_tests/snapshots/css/css-color/text.ts.e9cf302e1.png and b/integration_tests/snapshots/css/css-color/text.ts.e9cf302e1.png differ diff --git a/integration_tests/snapshots/css/css-color/text.ts.f2d1f32e1.png b/integration_tests/snapshots/css/css-color/text.ts.f2d1f32e1.png index 2aa3e0bf5e..0077fa9daf 100644 Binary files a/integration_tests/snapshots/css/css-color/text.ts.f2d1f32e1.png and b/integration_tests/snapshots/css/css-color/text.ts.f2d1f32e1.png differ diff --git a/integration_tests/snapshots/css/css-color/text.ts.f40a51571.png b/integration_tests/snapshots/css/css-color/text.ts.f40a51571.png index ddf4a9c084..1ad3cd17d0 100644 Binary files a/integration_tests/snapshots/css/css-color/text.ts.f40a51571.png and b/integration_tests/snapshots/css/css-color/text.ts.f40a51571.png differ diff --git a/integration_tests/snapshots/css/css-display/block-in.ts.39bde26f1.png b/integration_tests/snapshots/css/css-display/block-in.ts.39bde26f1.png index be9901688e..7eb64d85b1 100644 Binary files a/integration_tests/snapshots/css/css-display/block-in.ts.39bde26f1.png and b/integration_tests/snapshots/css/css-display/block-in.ts.39bde26f1.png differ diff --git a/integration_tests/snapshots/css/css-display/block-in.ts.520006241.png b/integration_tests/snapshots/css/css-display/block-in.ts.520006241.png index be9901688e..7eb64d85b1 100644 Binary files a/integration_tests/snapshots/css/css-display/block-in.ts.520006241.png and b/integration_tests/snapshots/css/css-display/block-in.ts.520006241.png differ diff --git a/integration_tests/snapshots/css/css-flexbox/align-items.ts.2d1a0d721.png b/integration_tests/snapshots/css/css-flexbox/align-items.ts.2d1a0d721.png index a882f487c4..206661e9f6 100644 Binary files a/integration_tests/snapshots/css/css-flexbox/align-items.ts.2d1a0d721.png and b/integration_tests/snapshots/css/css-flexbox/align-items.ts.2d1a0d721.png differ diff --git a/integration_tests/snapshots/css/css-flexbox/align-self.ts.fad1228c1.png b/integration_tests/snapshots/css/css-flexbox/align-self.ts.fad1228c1.png index 77da60515c..5b1ec5562b 100644 Binary files a/integration_tests/snapshots/css/css-flexbox/align-self.ts.fad1228c1.png and b/integration_tests/snapshots/css/css-flexbox/align-self.ts.fad1228c1.png differ diff --git a/integration_tests/snapshots/css/css-flexbox/dynamic-change.ts.ecef70d21.png b/integration_tests/snapshots/css/css-flexbox/dynamic-change.ts.ecef70d21.png index 07852310b2..ef8d77e04c 100644 Binary files a/integration_tests/snapshots/css/css-flexbox/dynamic-change.ts.ecef70d21.png and b/integration_tests/snapshots/css/css-flexbox/dynamic-change.ts.ecef70d21.png differ diff --git a/integration_tests/snapshots/css/css-flexbox/flex-align.ts.7a24ba2d1.png b/integration_tests/snapshots/css/css-flexbox/flex-align.ts.7a24ba2d1.png index 5403d20bf6..0ffe4ce04b 100644 Binary files a/integration_tests/snapshots/css/css-flexbox/flex-align.ts.7a24ba2d1.png and b/integration_tests/snapshots/css/css-flexbox/flex-align.ts.7a24ba2d1.png differ diff --git a/integration_tests/snapshots/css/css-flexbox/flex-align.ts.f66f88801.png b/integration_tests/snapshots/css/css-flexbox/flex-align.ts.f66f88801.png index f7118bde0c..a104cd7308 100644 Binary files a/integration_tests/snapshots/css/css-flexbox/flex-align.ts.f66f88801.png and b/integration_tests/snapshots/css/css-flexbox/flex-align.ts.f66f88801.png differ diff --git a/integration_tests/snapshots/css/css-flexbox/flex-minimum.ts.fce64c8b1.png b/integration_tests/snapshots/css/css-flexbox/flex-minimum.ts.fce64c8b1.png index 0693ab8f73..c8df14be6c 100644 Binary files a/integration_tests/snapshots/css/css-flexbox/flex-minimum.ts.fce64c8b1.png and b/integration_tests/snapshots/css/css-flexbox/flex-minimum.ts.fce64c8b1.png differ diff --git a/integration_tests/snapshots/css/css-flexbox/flex_basis.ts.9feaa3b01.png b/integration_tests/snapshots/css/css-flexbox/flex_basis.ts.9feaa3b01.png index d0b26fff60..5e25ab59e8 100644 Binary files a/integration_tests/snapshots/css/css-flexbox/flex_basis.ts.9feaa3b01.png and b/integration_tests/snapshots/css/css-flexbox/flex_basis.ts.9feaa3b01.png differ diff --git a/integration_tests/snapshots/css/css-flexbox/flex_grow.ts.c325dbf81.png b/integration_tests/snapshots/css/css-flexbox/flex_grow.ts.c325dbf81.png index bc1dc5ba48..bd977be5a2 100644 Binary files a/integration_tests/snapshots/css/css-flexbox/flex_grow.ts.c325dbf81.png and b/integration_tests/snapshots/css/css-flexbox/flex_grow.ts.c325dbf81.png differ diff --git a/integration_tests/snapshots/css/css-flexbox/flex_shrink.ts.20336cf81.png b/integration_tests/snapshots/css/css-flexbox/flex_shrink.ts.20336cf81.png index 214e01456a..2ef9e6ddc6 100644 Binary files a/integration_tests/snapshots/css/css-flexbox/flex_shrink.ts.20336cf81.png and b/integration_tests/snapshots/css/css-flexbox/flex_shrink.ts.20336cf81.png differ diff --git a/integration_tests/snapshots/css/css-flexbox/flex_shrink.ts.dbdb03df1.png b/integration_tests/snapshots/css/css-flexbox/flex_shrink.ts.dbdb03df1.png index 543fecccb6..fe5583360a 100644 Binary files a/integration_tests/snapshots/css/css-flexbox/flex_shrink.ts.dbdb03df1.png and b/integration_tests/snapshots/css/css-flexbox/flex_shrink.ts.dbdb03df1.png differ diff --git a/integration_tests/snapshots/css/css-flexbox/flexbox_flex-natural.ts.59289a8d1.png b/integration_tests/snapshots/css/css-flexbox/flexbox_flex-natural.ts.59289a8d1.png index 23180be83d..e527f5f7b9 100644 Binary files a/integration_tests/snapshots/css/css-flexbox/flexbox_flex-natural.ts.59289a8d1.png and b/integration_tests/snapshots/css/css-flexbox/flexbox_flex-natural.ts.59289a8d1.png differ diff --git a/integration_tests/snapshots/css/css-flexbox/flexbox_flex-natural.ts.6fff1fb91.png b/integration_tests/snapshots/css/css-flexbox/flexbox_flex-natural.ts.6fff1fb91.png index a2cda1d70b..cb0d7e0b0b 100644 Binary files a/integration_tests/snapshots/css/css-flexbox/flexbox_flex-natural.ts.6fff1fb91.png and b/integration_tests/snapshots/css/css-flexbox/flexbox_flex-natural.ts.6fff1fb91.png differ diff --git a/integration_tests/snapshots/css/css-flexbox/flexbox_flex.ts.45c47ad81.png b/integration_tests/snapshots/css/css-flexbox/flexbox_flex.ts.45c47ad81.png index d70ad1c625..67301c1b10 100644 Binary files a/integration_tests/snapshots/css/css-flexbox/flexbox_flex.ts.45c47ad81.png and b/integration_tests/snapshots/css/css-flexbox/flexbox_flex.ts.45c47ad81.png differ diff --git a/integration_tests/snapshots/css/css-flexbox/justify-content_space.ts.f986e23e1.png b/integration_tests/snapshots/css/css-flexbox/justify-content_space.ts.f986e23e1.png index d8c1aac86e..84c2399286 100644 Binary files a/integration_tests/snapshots/css/css-flexbox/justify-content_space.ts.f986e23e1.png and b/integration_tests/snapshots/css/css-flexbox/justify-content_space.ts.f986e23e1.png differ diff --git a/integration_tests/snapshots/css/css-flexbox/multiline-reverse.ts.cf282b9a1.png b/integration_tests/snapshots/css/css-flexbox/multiline-reverse.ts.cf282b9a1.png index eb14eb05cf..709850c235 100644 Binary files a/integration_tests/snapshots/css/css-flexbox/multiline-reverse.ts.cf282b9a1.png and b/integration_tests/snapshots/css/css-flexbox/multiline-reverse.ts.cf282b9a1.png differ diff --git a/integration_tests/snapshots/css/css-flow/block-in.ts.39bde26f1.png b/integration_tests/snapshots/css/css-flow/block-in.ts.39bde26f1.png index be9901688e..7eb64d85b1 100644 Binary files a/integration_tests/snapshots/css/css-flow/block-in.ts.39bde26f1.png and b/integration_tests/snapshots/css/css-flow/block-in.ts.39bde26f1.png differ diff --git a/integration_tests/snapshots/css/css-flow/block-in.ts.520006241.png b/integration_tests/snapshots/css/css-flow/block-in.ts.520006241.png index be9901688e..7eb64d85b1 100644 Binary files a/integration_tests/snapshots/css/css-flow/block-in.ts.520006241.png and b/integration_tests/snapshots/css/css-flow/block-in.ts.520006241.png differ diff --git a/integration_tests/snapshots/css/css-flow/block-non.ts.82e1bc981.png b/integration_tests/snapshots/css/css-flow/block-non.ts.82e1bc981.png index fc3846f10d..d4ed049243 100644 Binary files a/integration_tests/snapshots/css/css-flow/block-non.ts.82e1bc981.png and b/integration_tests/snapshots/css/css-flow/block-non.ts.82e1bc981.png differ diff --git a/integration_tests/snapshots/css/css-flow/block-non.ts.a8c2e12b1.png b/integration_tests/snapshots/css/css-flow/block-non.ts.a8c2e12b1.png index f6eec62534..f649f77ebe 100644 Binary files a/integration_tests/snapshots/css/css-flow/block-non.ts.a8c2e12b1.png and b/integration_tests/snapshots/css/css-flow/block-non.ts.a8c2e12b1.png differ diff --git a/integration_tests/snapshots/css/css-flow/block-non.ts.ffbc635b1.png b/integration_tests/snapshots/css/css-flow/block-non.ts.ffbc635b1.png index f6eec62534..f649f77ebe 100644 Binary files a/integration_tests/snapshots/css/css-flow/block-non.ts.ffbc635b1.png and b/integration_tests/snapshots/css/css-flow/block-non.ts.ffbc635b1.png differ diff --git a/integration_tests/snapshots/css/css-flow/block-replaced.ts.3799ae211.png b/integration_tests/snapshots/css/css-flow/block-replaced.ts.3799ae211.png index e326daca63..594992bdce 100644 Binary files a/integration_tests/snapshots/css/css-flow/block-replaced.ts.3799ae211.png and b/integration_tests/snapshots/css/css-flow/block-replaced.ts.3799ae211.png differ diff --git a/integration_tests/snapshots/css/css-flow/block-replaced.ts.6a250f881.png b/integration_tests/snapshots/css/css-flow/block-replaced.ts.6a250f881.png index df4dfb5015..9b1f1d0d45 100644 Binary files a/integration_tests/snapshots/css/css-flow/block-replaced.ts.6a250f881.png and b/integration_tests/snapshots/css/css-flow/block-replaced.ts.6a250f881.png differ diff --git a/integration_tests/snapshots/css/css-flow/blocks-013.ts.e95845821.png b/integration_tests/snapshots/css/css-flow/blocks-013.ts.e95845821.png index 4290ae5062..aabcb85ce8 100644 Binary files a/integration_tests/snapshots/css/css-flow/blocks-013.ts.e95845821.png and b/integration_tests/snapshots/css/css-flow/blocks-013.ts.e95845821.png differ diff --git a/integration_tests/snapshots/css/css-flow/blocks.ts.24b616ae1.png b/integration_tests/snapshots/css/css-flow/blocks.ts.24b616ae1.png index ee97e081ce..d477aa5f22 100644 Binary files a/integration_tests/snapshots/css/css-flow/blocks.ts.24b616ae1.png and b/integration_tests/snapshots/css/css-flow/blocks.ts.24b616ae1.png differ diff --git a/integration_tests/snapshots/css/css-flow/blocks.ts.3b2912e01.png b/integration_tests/snapshots/css/css-flow/blocks.ts.3b2912e01.png index ee97e081ce..d477aa5f22 100644 Binary files a/integration_tests/snapshots/css/css-flow/blocks.ts.3b2912e01.png and b/integration_tests/snapshots/css/css-flow/blocks.ts.3b2912e01.png differ diff --git a/integration_tests/snapshots/css/css-fonts/font-family.ts.6aa7abed1.png b/integration_tests/snapshots/css/css-fonts/font-family.ts.6aa7abed1.png index 076fa861eb..42ce0b349e 100644 Binary files a/integration_tests/snapshots/css/css-fonts/font-family.ts.6aa7abed1.png and b/integration_tests/snapshots/css/css-fonts/font-family.ts.6aa7abed1.png differ diff --git a/integration_tests/snapshots/css/css-fonts/font-family.ts.6aa7abed2.png b/integration_tests/snapshots/css/css-fonts/font-family.ts.6aa7abed2.png index ba857000e5..61ee48e550 100644 Binary files a/integration_tests/snapshots/css/css-fonts/font-family.ts.6aa7abed2.png and b/integration_tests/snapshots/css/css-fonts/font-family.ts.6aa7abed2.png differ diff --git a/integration_tests/snapshots/css/css-fonts/font-size.ts.ad07fea11.png b/integration_tests/snapshots/css/css-fonts/font-size.ts.ad07fea11.png new file mode 100644 index 0000000000..35d5dfa75b Binary files /dev/null and b/integration_tests/snapshots/css/css-fonts/font-size.ts.ad07fea11.png differ diff --git a/integration_tests/snapshots/css/css-fonts/font-size.ts.e8ff22021.png b/integration_tests/snapshots/css/css-fonts/font-size.ts.e8ff22021.png new file mode 100644 index 0000000000..115d0e73ef Binary files /dev/null and b/integration_tests/snapshots/css/css-fonts/font-size.ts.e8ff22021.png differ diff --git a/integration_tests/snapshots/css/css-images/css-image.ts.c81ce1841.png b/integration_tests/snapshots/css/css-images/css-image.ts.c81ce1841.png index b15dbb3e76..aaee6f6335 100644 Binary files a/integration_tests/snapshots/css/css-images/css-image.ts.c81ce1841.png and b/integration_tests/snapshots/css/css-images/css-image.ts.c81ce1841.png differ diff --git a/integration_tests/snapshots/css/css-images/gradient-move.ts.dc3b91881.png b/integration_tests/snapshots/css/css-images/gradient-move.ts.dc3b91881.png index 7f2f7f61a2..d8e649d14d 100644 Binary files a/integration_tests/snapshots/css/css-images/gradient-move.ts.dc3b91881.png and b/integration_tests/snapshots/css/css-images/gradient-move.ts.dc3b91881.png differ diff --git a/integration_tests/snapshots/css/css-images/gradient-move.ts.f025c47a1.png b/integration_tests/snapshots/css/css-images/gradient-move.ts.f025c47a1.png index 898e1b20a8..d8e649d14d 100644 Binary files a/integration_tests/snapshots/css/css-images/gradient-move.ts.f025c47a1.png and b/integration_tests/snapshots/css/css-images/gradient-move.ts.f025c47a1.png differ diff --git a/integration_tests/snapshots/css/css-images/gradients-with.ts.01f5d79e1.png b/integration_tests/snapshots/css/css-images/gradients-with.ts.01f5d79e1.png index 874c9841f4..2fb11a7cc2 100644 Binary files a/integration_tests/snapshots/css/css-images/gradients-with.ts.01f5d79e1.png and b/integration_tests/snapshots/css/css-images/gradients-with.ts.01f5d79e1.png differ diff --git a/integration_tests/snapshots/css/css-images/gradients-with.ts.11592ca21.png b/integration_tests/snapshots/css/css-images/gradients-with.ts.11592ca21.png index 02d656167a..7f6474a55d 100644 Binary files a/integration_tests/snapshots/css/css-images/gradients-with.ts.11592ca21.png and b/integration_tests/snapshots/css/css-images/gradients-with.ts.11592ca21.png differ diff --git a/integration_tests/snapshots/css/css-images/linear-gradient.ts.1bf75b8f1.png b/integration_tests/snapshots/css/css-images/linear-gradient.ts.1bf75b8f1.png index 227d6bd26e..ea67c0cb3b 100644 Binary files a/integration_tests/snapshots/css/css-images/linear-gradient.ts.1bf75b8f1.png and b/integration_tests/snapshots/css/css-images/linear-gradient.ts.1bf75b8f1.png differ diff --git a/integration_tests/snapshots/css/css-images/multiple-position.ts.9375e2321.png b/integration_tests/snapshots/css/css-images/multiple-position.ts.9375e2321.png index 318441f56b..54cf2aac22 100644 Binary files a/integration_tests/snapshots/css/css-images/multiple-position.ts.9375e2321.png and b/integration_tests/snapshots/css/css-images/multiple-position.ts.9375e2321.png differ diff --git a/integration_tests/snapshots/css/css-images/multiple-position.ts.da6da43e1.png b/integration_tests/snapshots/css/css-images/multiple-position.ts.da6da43e1.png index ab15142222..54cf2aac22 100644 Binary files a/integration_tests/snapshots/css/css-images/multiple-position.ts.da6da43e1.png and b/integration_tests/snapshots/css/css-images/multiple-position.ts.da6da43e1.png differ diff --git a/integration_tests/snapshots/css/css-images/object-fit.ts.1b9ca8a61.png b/integration_tests/snapshots/css/css-images/object-fit.ts.1b9ca8a61.png index fbd2d686c8..739b8ea7f2 100644 Binary files a/integration_tests/snapshots/css/css-images/object-fit.ts.1b9ca8a61.png and b/integration_tests/snapshots/css/css-images/object-fit.ts.1b9ca8a61.png differ diff --git a/integration_tests/snapshots/css/css-images/object-fit.ts.1e62c1a91.png b/integration_tests/snapshots/css/css-images/object-fit.ts.1e62c1a91.png index d6b428aa98..1f80096933 100644 Binary files a/integration_tests/snapshots/css/css-images/object-fit.ts.1e62c1a91.png and b/integration_tests/snapshots/css/css-images/object-fit.ts.1e62c1a91.png differ diff --git a/integration_tests/snapshots/css/css-images/object-fit.ts.233e07761.png b/integration_tests/snapshots/css/css-images/object-fit.ts.233e07761.png index fbd2d686c8..739b8ea7f2 100644 Binary files a/integration_tests/snapshots/css/css-images/object-fit.ts.233e07761.png and b/integration_tests/snapshots/css/css-images/object-fit.ts.233e07761.png differ diff --git a/integration_tests/snapshots/css/css-images/object-fit.ts.2f30d1191.png b/integration_tests/snapshots/css/css-images/object-fit.ts.2f30d1191.png index 1f83fb4605..beea856d7c 100644 Binary files a/integration_tests/snapshots/css/css-images/object-fit.ts.2f30d1191.png and b/integration_tests/snapshots/css/css-images/object-fit.ts.2f30d1191.png differ diff --git a/integration_tests/snapshots/css/css-images/object-fit.ts.3404d5191.png b/integration_tests/snapshots/css/css-images/object-fit.ts.3404d5191.png index d7160bbe8c..546259d232 100644 Binary files a/integration_tests/snapshots/css/css-images/object-fit.ts.3404d5191.png and b/integration_tests/snapshots/css/css-images/object-fit.ts.3404d5191.png differ diff --git a/integration_tests/snapshots/css/css-images/object-fit.ts.4141956a1.png b/integration_tests/snapshots/css/css-images/object-fit.ts.4141956a1.png index 09248df131..37ae3bc1b8 100644 Binary files a/integration_tests/snapshots/css/css-images/object-fit.ts.4141956a1.png and b/integration_tests/snapshots/css/css-images/object-fit.ts.4141956a1.png differ diff --git a/integration_tests/snapshots/css/css-images/object-fit.ts.451465f91.png b/integration_tests/snapshots/css/css-images/object-fit.ts.451465f91.png index 240da25385..dc58f7b03d 100644 Binary files a/integration_tests/snapshots/css/css-images/object-fit.ts.451465f91.png and b/integration_tests/snapshots/css/css-images/object-fit.ts.451465f91.png differ diff --git a/integration_tests/snapshots/css/css-images/object-fit.ts.504e745a1.png b/integration_tests/snapshots/css/css-images/object-fit.ts.504e745a1.png index afde323349..f71684e170 100644 Binary files a/integration_tests/snapshots/css/css-images/object-fit.ts.504e745a1.png and b/integration_tests/snapshots/css/css-images/object-fit.ts.504e745a1.png differ diff --git a/integration_tests/snapshots/css/css-images/object-fit.ts.5f9fbdc21.png b/integration_tests/snapshots/css/css-images/object-fit.ts.5f9fbdc21.png index 6e9d2a4486..beea856d7c 100644 Binary files a/integration_tests/snapshots/css/css-images/object-fit.ts.5f9fbdc21.png and b/integration_tests/snapshots/css/css-images/object-fit.ts.5f9fbdc21.png differ diff --git a/integration_tests/snapshots/css/css-images/object-fit.ts.675f217e1.png b/integration_tests/snapshots/css/css-images/object-fit.ts.675f217e1.png index 0b25b61560..f71684e170 100644 Binary files a/integration_tests/snapshots/css/css-images/object-fit.ts.675f217e1.png and b/integration_tests/snapshots/css/css-images/object-fit.ts.675f217e1.png differ diff --git a/integration_tests/snapshots/css/css-images/object-fit.ts.76ea674e1.png b/integration_tests/snapshots/css/css-images/object-fit.ts.76ea674e1.png index 82af6824e6..c9e8ba76df 100644 Binary files a/integration_tests/snapshots/css/css-images/object-fit.ts.76ea674e1.png and b/integration_tests/snapshots/css/css-images/object-fit.ts.76ea674e1.png differ diff --git a/integration_tests/snapshots/css/css-images/object-fit.ts.81b38c151.png b/integration_tests/snapshots/css/css-images/object-fit.ts.81b38c151.png index 970c90a384..6d7b69e89e 100644 Binary files a/integration_tests/snapshots/css/css-images/object-fit.ts.81b38c151.png and b/integration_tests/snapshots/css/css-images/object-fit.ts.81b38c151.png differ diff --git a/integration_tests/snapshots/css/css-images/object-fit.ts.93d87b8c1.png b/integration_tests/snapshots/css/css-images/object-fit.ts.93d87b8c1.png index 5a2293cdba..1f80096933 100644 Binary files a/integration_tests/snapshots/css/css-images/object-fit.ts.93d87b8c1.png and b/integration_tests/snapshots/css/css-images/object-fit.ts.93d87b8c1.png differ diff --git a/integration_tests/snapshots/css/css-images/object-fit.ts.9e31e89e1.png b/integration_tests/snapshots/css/css-images/object-fit.ts.9e31e89e1.png index 870a8f78c1..6d7b69e89e 100644 Binary files a/integration_tests/snapshots/css/css-images/object-fit.ts.9e31e89e1.png and b/integration_tests/snapshots/css/css-images/object-fit.ts.9e31e89e1.png differ diff --git a/integration_tests/snapshots/css/css-images/object-fit.ts.cc78b6c41.png b/integration_tests/snapshots/css/css-images/object-fit.ts.cc78b6c41.png index b4518c37ed..546259d232 100644 Binary files a/integration_tests/snapshots/css/css-images/object-fit.ts.cc78b6c41.png and b/integration_tests/snapshots/css/css-images/object-fit.ts.cc78b6c41.png differ diff --git a/integration_tests/snapshots/css/css-images/object-fit.ts.eddc63cc1.png b/integration_tests/snapshots/css/css-images/object-fit.ts.eddc63cc1.png index 321a3b4d5e..dc58f7b03d 100644 Binary files a/integration_tests/snapshots/css/css-images/object-fit.ts.eddc63cc1.png and b/integration_tests/snapshots/css/css-images/object-fit.ts.eddc63cc1.png differ diff --git a/integration_tests/snapshots/css/css-images/object-fit.ts.fe830b201.png b/integration_tests/snapshots/css/css-images/object-fit.ts.fe830b201.png index 82af6824e6..c9e8ba76df 100644 Binary files a/integration_tests/snapshots/css/css-images/object-fit.ts.fe830b201.png and b/integration_tests/snapshots/css/css-images/object-fit.ts.fe830b201.png differ diff --git a/integration_tests/snapshots/css/css-inline/vertical-align.ts.7919b0971.png b/integration_tests/snapshots/css/css-inline/vertical-align.ts.7919b0971.png index a882f487c4..206661e9f6 100644 Binary files a/integration_tests/snapshots/css/css-inline/vertical-align.ts.7919b0971.png and b/integration_tests/snapshots/css/css-inline/vertical-align.ts.7919b0971.png differ diff --git a/integration_tests/snapshots/css/css-position/absolute-non.ts.24e1a8b11.png b/integration_tests/snapshots/css/css-position/absolute-non.ts.24e1a8b11.png index 391de2a154..51f379064b 100644 Binary files a/integration_tests/snapshots/css/css-position/absolute-non.ts.24e1a8b11.png and b/integration_tests/snapshots/css/css-position/absolute-non.ts.24e1a8b11.png differ diff --git a/integration_tests/snapshots/css/css-position/absolute-non.ts.677416b81.png b/integration_tests/snapshots/css/css-position/absolute-non.ts.677416b81.png index 9589a6ad2a..70c5536852 100644 Binary files a/integration_tests/snapshots/css/css-position/absolute-non.ts.677416b81.png and b/integration_tests/snapshots/css/css-position/absolute-non.ts.677416b81.png differ diff --git a/integration_tests/snapshots/css/css-position/absolute-non.ts.78377ee51.png b/integration_tests/snapshots/css/css-position/absolute-non.ts.78377ee51.png index 5250c27fe6..f5efe3f8a8 100644 Binary files a/integration_tests/snapshots/css/css-position/absolute-non.ts.78377ee51.png and b/integration_tests/snapshots/css/css-position/absolute-non.ts.78377ee51.png differ diff --git a/integration_tests/snapshots/css/css-position/absolute-non.ts.79bce9d11.png b/integration_tests/snapshots/css/css-position/absolute-non.ts.79bce9d11.png index d8f07735ef..725e4dbb03 100644 Binary files a/integration_tests/snapshots/css/css-position/absolute-non.ts.79bce9d11.png and b/integration_tests/snapshots/css/css-position/absolute-non.ts.79bce9d11.png differ diff --git a/integration_tests/snapshots/css/css-position/absolute-non.ts.9c8674271.png b/integration_tests/snapshots/css/css-position/absolute-non.ts.9c8674271.png index 8c7dd54325..ca2e930071 100644 Binary files a/integration_tests/snapshots/css/css-position/absolute-non.ts.9c8674271.png and b/integration_tests/snapshots/css/css-position/absolute-non.ts.9c8674271.png differ diff --git a/integration_tests/snapshots/css/css-position/absolute-non.ts.b454e4e51.png b/integration_tests/snapshots/css/css-position/absolute-non.ts.b454e4e51.png index 0f7442cf02..953bdbde32 100644 Binary files a/integration_tests/snapshots/css/css-position/absolute-non.ts.b454e4e51.png and b/integration_tests/snapshots/css/css-position/absolute-non.ts.b454e4e51.png differ diff --git a/integration_tests/snapshots/css/css-position/absolute-non.ts.c8f01d891.png b/integration_tests/snapshots/css/css-position/absolute-non.ts.c8f01d891.png index 9b132da353..97c092bf1f 100644 Binary files a/integration_tests/snapshots/css/css-position/absolute-non.ts.c8f01d891.png and b/integration_tests/snapshots/css/css-position/absolute-non.ts.c8f01d891.png differ diff --git a/integration_tests/snapshots/css/css-position/absolute-non.ts.db652a221.png b/integration_tests/snapshots/css/css-position/absolute-non.ts.db652a221.png index b62b540723..6f7b60684d 100644 Binary files a/integration_tests/snapshots/css/css-position/absolute-non.ts.db652a221.png and b/integration_tests/snapshots/css/css-position/absolute-non.ts.db652a221.png differ diff --git a/integration_tests/snapshots/css/css-position/abspos-inline.ts.ee0c64241.png b/integration_tests/snapshots/css/css-position/abspos-inline.ts.ee0c64241.png index bbe0fbe915..52039a7590 100644 Binary files a/integration_tests/snapshots/css/css-position/abspos-inline.ts.ee0c64241.png and b/integration_tests/snapshots/css/css-position/abspos-inline.ts.ee0c64241.png differ diff --git a/integration_tests/snapshots/css/css-position/abspos-negative.ts.7ce6f3f81.png b/integration_tests/snapshots/css/css-position/abspos-negative.ts.7ce6f3f81.png index 0cdf2169c1..4307c231ec 100644 Binary files a/integration_tests/snapshots/css/css-position/abspos-negative.ts.7ce6f3f81.png and b/integration_tests/snapshots/css/css-position/abspos-negative.ts.7ce6f3f81.png differ diff --git a/integration_tests/snapshots/css/css-position/abspos.ts.1f92a0931.png b/integration_tests/snapshots/css/css-position/abspos.ts.1f92a0931.png index b160031c83..06f68e00cc 100644 Binary files a/integration_tests/snapshots/css/css-position/abspos.ts.1f92a0931.png and b/integration_tests/snapshots/css/css-position/abspos.ts.1f92a0931.png differ diff --git a/integration_tests/snapshots/css/css-position/hypothetical-box.ts.f3ef18b91.png b/integration_tests/snapshots/css/css-position/hypothetical-box.ts.f3ef18b91.png index ef69f6f074..35a20906b3 100644 Binary files a/integration_tests/snapshots/css/css-position/hypothetical-box.ts.f3ef18b91.png and b/integration_tests/snapshots/css/css-position/hypothetical-box.ts.f3ef18b91.png differ diff --git a/integration_tests/snapshots/css/css-position/hypothetical-box.ts.fc4d38c51.png b/integration_tests/snapshots/css/css-position/hypothetical-box.ts.fc4d38c51.png index b1ac6a21f5..042dcd4c0d 100644 Binary files a/integration_tests/snapshots/css/css-position/hypothetical-box.ts.fc4d38c51.png and b/integration_tests/snapshots/css/css-position/hypothetical-box.ts.fc4d38c51.png differ diff --git a/integration_tests/snapshots/css/css-position/position-legacy.ts.961829731.png b/integration_tests/snapshots/css/css-position/position-legacy.ts.961829731.png index 97d72bebe2..04cae15966 100644 Binary files a/integration_tests/snapshots/css/css-position/position-legacy.ts.961829731.png and b/integration_tests/snapshots/css/css-position/position-legacy.ts.961829731.png differ diff --git a/integration_tests/snapshots/css/css-position/position-relative.ts.3717418d1.png b/integration_tests/snapshots/css/css-position/position-relative.ts.3717418d1.png index e91f3b2426..5636029241 100644 Binary files a/integration_tests/snapshots/css/css-position/position-relative.ts.3717418d1.png and b/integration_tests/snapshots/css/css-position/position-relative.ts.3717418d1.png differ diff --git a/integration_tests/snapshots/css/css-position/position-relative.ts.48ed5b0b1.png b/integration_tests/snapshots/css/css-position/position-relative.ts.48ed5b0b1.png index aeb612baf8..1bbd1c63a3 100644 Binary files a/integration_tests/snapshots/css/css-position/position-relative.ts.48ed5b0b1.png and b/integration_tests/snapshots/css/css-position/position-relative.ts.48ed5b0b1.png differ diff --git a/integration_tests/snapshots/css/css-position/position-sticky.ts.266b77d31.png b/integration_tests/snapshots/css/css-position/position-sticky.ts.266b77d31.png index 3b12560b1d..ea3b2aabb8 100644 Binary files a/integration_tests/snapshots/css/css-position/position-sticky.ts.266b77d31.png and b/integration_tests/snapshots/css/css-position/position-sticky.ts.266b77d31.png differ diff --git a/integration_tests/snapshots/css/css-position/position-sticky.ts.5a61cec31.png b/integration_tests/snapshots/css/css-position/position-sticky.ts.5a61cec31.png index c20d93a805..c7c3d0dfdc 100644 Binary files a/integration_tests/snapshots/css/css-position/position-sticky.ts.5a61cec31.png and b/integration_tests/snapshots/css/css-position/position-sticky.ts.5a61cec31.png differ diff --git a/integration_tests/snapshots/css/css-position/position.ts.961829731.png b/integration_tests/snapshots/css/css-position/position.ts.961829731.png index 97d72bebe2..04cae15966 100644 Binary files a/integration_tests/snapshots/css/css-position/position.ts.961829731.png and b/integration_tests/snapshots/css/css-position/position.ts.961829731.png differ diff --git a/integration_tests/snapshots/css/css-sizing/min-height.ts.4f1de8991.png b/integration_tests/snapshots/css/css-sizing/min-height.ts.4f1de8991.png index 8c41419762..e684a29ceb 100644 Binary files a/integration_tests/snapshots/css/css-sizing/min-height.ts.4f1de8991.png and b/integration_tests/snapshots/css/css-sizing/min-height.ts.4f1de8991.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.0365cf511.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.0365cf511.png index 26170b34a5..4bf03ed0d6 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.0365cf511.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.0365cf511.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.044329ed1.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.044329ed1.png index 9c8b0af7b0..d01d376a6b 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.044329ed1.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.044329ed1.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.04a3756f1.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.04a3756f1.png index 13afc3cc83..0d4407c195 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.04a3756f1.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.04a3756f1.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.084e77061.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.084e77061.png index d687a4996c..e900e5809d 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.084e77061.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.084e77061.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.128cd3561.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.128cd3561.png index a746a737a7..80bb6e0953 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.128cd3561.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.128cd3561.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.26e8a4041.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.26e8a4041.png index 54c591c740..aa3adb074b 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.26e8a4041.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.26e8a4041.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.28a905b21.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.28a905b21.png index 5bdb045a5a..eb6cf6b26b 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.28a905b21.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.28a905b21.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.2c5a34581.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.2c5a34581.png index b3621d9d29..b7dd702b8e 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.2c5a34581.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.2c5a34581.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.2fc4b05c1.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.2fc4b05c1.png index 3934efc074..b6f04b4d12 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.2fc4b05c1.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.2fc4b05c1.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.3482634e1.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.3482634e1.png index 928b368ba8..80f2d9b5b6 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.3482634e1.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.3482634e1.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.3a9c747e1.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.3a9c747e1.png index 5b78ff1493..528c750011 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.3a9c747e1.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.3a9c747e1.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.3c67dca11.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.3c67dca11.png index 032b3fc2bd..bdf6d072ad 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.3c67dca11.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.3c67dca11.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.3fda4ddb1.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.3fda4ddb1.png index bb35063096..c92215f870 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.3fda4ddb1.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.3fda4ddb1.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.412eead91.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.412eead91.png index 5f722c2eef..a7745c1f9b 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.412eead91.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.412eead91.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.422fe0a01.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.422fe0a01.png index d45291215b..33904912d0 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.422fe0a01.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.422fe0a01.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.4414a46e1.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.4414a46e1.png index b5447da8f1..a123b9a991 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.4414a46e1.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.4414a46e1.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.49551e3c1.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.49551e3c1.png index 127c7489c1..d78471ff90 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.49551e3c1.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.49551e3c1.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.4f17db861.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.4f17db861.png index 6420c1cd63..fa88049730 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.4f17db861.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.4f17db861.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.536e68621.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.536e68621.png index e28148cef0..837cca7770 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.536e68621.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.536e68621.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.58c338781.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.58c338781.png index 9cb5f6038d..a53c9123ca 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.58c338781.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.58c338781.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.5a61086e1.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.5a61086e1.png index 7b734428f6..4ab9e0de9a 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.5a61086e1.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.5a61086e1.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.5d8586e91.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.5d8586e91.png index 266298940e..b52fa4da93 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.5d8586e91.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.5d8586e91.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.6bc7bd591.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.6bc7bd591.png index a874a2c292..352fef8149 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.6bc7bd591.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.6bc7bd591.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.6fd106a11.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.6fd106a11.png index 3a0c2f8f0d..e202ee1ca6 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.6fd106a11.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.6fd106a11.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.73f2d41c1.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.73f2d41c1.png index 9e3abe5209..42af2eeef7 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.73f2d41c1.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.73f2d41c1.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.7a1c0cbd1.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.7a1c0cbd1.png index 24add6b2b4..64ac1aecb0 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.7a1c0cbd1.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.7a1c0cbd1.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.807cf5981.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.807cf5981.png index 43421ef097..e38668fe3a 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.807cf5981.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.807cf5981.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.8899d83b1.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.8899d83b1.png index 7e26829bb0..97e0d7a304 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.8899d83b1.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.8899d83b1.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.8b11b45c1.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.8b11b45c1.png index b16ca7a7a8..0a2e53854c 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.8b11b45c1.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.8b11b45c1.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.8e79d12c1.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.8e79d12c1.png index e2f06f5d2f..7f13f53986 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.8e79d12c1.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.8e79d12c1.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.9127ce1f1.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.9127ce1f1.png index 4ad2a9b882..8e704a993d 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.9127ce1f1.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.9127ce1f1.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.98e7f0eb1.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.98e7f0eb1.png index 3ca8211bad..50f48dd0bf 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.98e7f0eb1.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.98e7f0eb1.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.9a0d63a31.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.9a0d63a31.png index 89b4c3c0d0..a7ca90e664 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.9a0d63a31.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.9a0d63a31.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.a4ca98f81.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.a4ca98f81.png index 5a9ebe9916..8cb32b7d4e 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.a4ca98f81.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.a4ca98f81.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.ab19af871.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.ab19af871.png index 01077080f2..9fe36f573f 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.ab19af871.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.ab19af871.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.adc757a01.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.adc757a01.png index 9cb82d9d3c..afb1ec0785 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.adc757a01.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.adc757a01.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.ae9f2e361.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.ae9f2e361.png index 5b734e779e..6d0b1dfffd 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.ae9f2e361.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.ae9f2e361.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.b0f7bbb01.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.b0f7bbb01.png index 2146ff59c6..0c6193072f 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.b0f7bbb01.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.b0f7bbb01.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.b6fda3581.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.b6fda3581.png index 33ccb35ec0..84058bba74 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.b6fda3581.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.b6fda3581.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.b77df5581.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.b77df5581.png index c6db0e4311..2efff5e0b6 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.b77df5581.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.b77df5581.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.bc5146c91.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.bc5146c91.png index 2ee3a8b714..c3862e347d 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.bc5146c91.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.bc5146c91.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.bcf870381.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.bcf870381.png index 7c647dbf46..2c560693ac 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.bcf870381.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.bcf870381.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.bd3482a81.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.bd3482a81.png index 0f0d36176e..8e65b2fc9d 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.bd3482a81.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.bd3482a81.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.c245ffc21.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.c245ffc21.png index 9e49bb450d..64820249e2 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.c245ffc21.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.c245ffc21.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.cf84b64f1.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.cf84b64f1.png index d15e0aaf4a..2db8ab3bd7 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.cf84b64f1.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.cf84b64f1.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.d0744cb91.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.d0744cb91.png index 804281aeba..2d7c3c85b1 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.d0744cb91.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.d0744cb91.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.d8b0fea11.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.d8b0fea11.png index 9e56663fac..ce1a2c8c44 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.d8b0fea11.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.d8b0fea11.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.dd37837f1.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.dd37837f1.png index 13c5f35d14..19befd080a 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.dd37837f1.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.dd37837f1.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.e9f615861.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.e9f615861.png index 5994c4a043..cbfd91064c 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.e9f615861.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.e9f615861.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.ebde23601.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.ebde23601.png index f1cdc03448..2a1063c6e2 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.ebde23601.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.ebde23601.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.ee4bf2e31.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.ee4bf2e31.png index 970fd3ca40..0ec8da03fc 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.ee4bf2e31.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.ee4bf2e31.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.f4de5c5c1.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.f4de5c5c1.png index 9bd0333600..321b8dc096 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.f4de5c5c1.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.f4de5c5c1.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.f634a3101.png b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.f634a3101.png index 455bc7e47b..560b233dd1 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.f634a3101.png and b/integration_tests/snapshots/css/css-text-decor/text-decoration.ts.f634a3101.png differ diff --git a/integration_tests/snapshots/css/css-text-decor/text-shadow.ts.13c9173d1.png b/integration_tests/snapshots/css/css-text-decor/text-shadow.ts.13c9173d1.png index 0c9655f7a4..555bc34166 100644 Binary files a/integration_tests/snapshots/css/css-text-decor/text-shadow.ts.13c9173d1.png and b/integration_tests/snapshots/css/css-text-decor/text-shadow.ts.13c9173d1.png differ diff --git a/integration_tests/snapshots/css/css-text/text-align.ts.151eec951.png b/integration_tests/snapshots/css/css-text/text-align.ts.151eec951.png index 5df53c781a..57ac8d127c 100644 Binary files a/integration_tests/snapshots/css/css-text/text-align.ts.151eec951.png and b/integration_tests/snapshots/css/css-text/text-align.ts.151eec951.png differ diff --git a/integration_tests/snapshots/css/css-text/text-align.ts.ec90ffe11.png b/integration_tests/snapshots/css/css-text/text-align.ts.ec90ffe11.png index 5df53c781a..57ac8d127c 100644 Binary files a/integration_tests/snapshots/css/css-text/text-align.ts.ec90ffe11.png and b/integration_tests/snapshots/css/css-text/text-align.ts.ec90ffe11.png differ diff --git a/integration_tests/snapshots/css/css-text/white-space.ts.0ba038b41.png b/integration_tests/snapshots/css/css-text/white-space.ts.0ba038b41.png index 371daa2ca6..642d577651 100644 Binary files a/integration_tests/snapshots/css/css-text/white-space.ts.0ba038b41.png and b/integration_tests/snapshots/css/css-text/white-space.ts.0ba038b41.png differ diff --git a/integration_tests/snapshots/css/filter-effects/filter.ts.b5a089141.png b/integration_tests/snapshots/css/filter-effects/filter.ts.b5a089141.png index 734fecf7cd..739c395fc4 100644 Binary files a/integration_tests/snapshots/css/filter-effects/filter.ts.b5a089141.png and b/integration_tests/snapshots/css/filter-effects/filter.ts.b5a089141.png differ diff --git a/integration_tests/snapshots/css/filter-effects/filter.ts.c4af58341.png b/integration_tests/snapshots/css/filter-effects/filter.ts.c4af58341.png index 251ffe9dba..ad84223824 100644 Binary files a/integration_tests/snapshots/css/filter-effects/filter.ts.c4af58341.png and b/integration_tests/snapshots/css/filter-effects/filter.ts.c4af58341.png differ diff --git a/integration_tests/snapshots/dom/elements/canvas/context2d.ts.05fab60c1.png b/integration_tests/snapshots/dom/elements/canvas/context2d.ts.05fab60c1.png index d2b958d095..e0b8eb2d34 100644 Binary files a/integration_tests/snapshots/dom/elements/canvas/context2d.ts.05fab60c1.png and b/integration_tests/snapshots/dom/elements/canvas/context2d.ts.05fab60c1.png differ diff --git a/integration_tests/snapshots/dom/elements/canvas/context2d.ts.3e9e6a8e1.png b/integration_tests/snapshots/dom/elements/canvas/context2d.ts.3e9e6a8e1.png index 0edd7c1856..854515b38b 100644 Binary files a/integration_tests/snapshots/dom/elements/canvas/context2d.ts.3e9e6a8e1.png and b/integration_tests/snapshots/dom/elements/canvas/context2d.ts.3e9e6a8e1.png differ diff --git a/integration_tests/snapshots/dom/elements/canvas/context2d.ts.a14425e31.png b/integration_tests/snapshots/dom/elements/canvas/context2d.ts.a14425e31.png index 2d109475ea..a54cd5403a 100644 Binary files a/integration_tests/snapshots/dom/elements/canvas/context2d.ts.a14425e31.png and b/integration_tests/snapshots/dom/elements/canvas/context2d.ts.a14425e31.png differ diff --git a/integration_tests/snapshots/dom/elements/canvas/context2d.ts.c221919b1.png b/integration_tests/snapshots/dom/elements/canvas/context2d.ts.c221919b1.png index e7e1f8ecf5..cfffecb605 100644 Binary files a/integration_tests/snapshots/dom/elements/canvas/context2d.ts.c221919b1.png and b/integration_tests/snapshots/dom/elements/canvas/context2d.ts.c221919b1.png differ diff --git a/integration_tests/snapshots/dom/elements/img.ts.0bb0c4911.png b/integration_tests/snapshots/dom/elements/img.ts.0bb0c4911.png index 1cbe6400e6..fd14b350c2 100644 Binary files a/integration_tests/snapshots/dom/elements/img.ts.0bb0c4911.png and b/integration_tests/snapshots/dom/elements/img.ts.0bb0c4911.png differ diff --git a/integration_tests/snapshots/dom/elements/img.ts.1637881b1.png b/integration_tests/snapshots/dom/elements/img.ts.1637881b1.png index 969e18422c..b0e007b621 100644 Binary files a/integration_tests/snapshots/dom/elements/img.ts.1637881b1.png and b/integration_tests/snapshots/dom/elements/img.ts.1637881b1.png differ diff --git a/integration_tests/snapshots/dom/elements/img.ts.7fa17e651.png b/integration_tests/snapshots/dom/elements/img.ts.7fa17e651.png index 3d8be3d0e5..c1d8f0da07 100644 Binary files a/integration_tests/snapshots/dom/elements/img.ts.7fa17e651.png and b/integration_tests/snapshots/dom/elements/img.ts.7fa17e651.png differ diff --git a/integration_tests/snapshots/dom/elements/img.ts.bfd390a41.png b/integration_tests/snapshots/dom/elements/img.ts.bfd390a41.png index 3ae6ca4304..530ea4d793 100644 Binary files a/integration_tests/snapshots/dom/elements/img.ts.bfd390a41.png and b/integration_tests/snapshots/dom/elements/img.ts.bfd390a41.png differ diff --git a/integration_tests/snapshots/dom/elements/img.ts.c2bc25131.png b/integration_tests/snapshots/dom/elements/img.ts.c2bc25131.png index 84a6b807d2..6bd7a87030 100644 Binary files a/integration_tests/snapshots/dom/elements/img.ts.c2bc25131.png and b/integration_tests/snapshots/dom/elements/img.ts.c2bc25131.png differ diff --git a/integration_tests/snapshots/dom/elements/img.ts.f73745501.png b/integration_tests/snapshots/dom/elements/img.ts.f73745501.png index a272a06757..d13fbf333d 100644 Binary files a/integration_tests/snapshots/dom/elements/img.ts.f73745501.png and b/integration_tests/snapshots/dom/elements/img.ts.f73745501.png differ diff --git a/integration_tests/snapshots/dom/elements/input.ts.2f2856f71.png b/integration_tests/snapshots/dom/elements/input.ts.2f2856f71.png index d800d962c6..2579748bcc 100644 Binary files a/integration_tests/snapshots/dom/elements/input.ts.2f2856f71.png and b/integration_tests/snapshots/dom/elements/input.ts.2f2856f71.png differ diff --git a/integration_tests/snapshots/dom/elements/input.ts.b3e814401.png b/integration_tests/snapshots/dom/elements/input.ts.b3e814401.png index 83dc1e437e..22f96742f0 100644 Binary files a/integration_tests/snapshots/dom/elements/input.ts.b3e814401.png and b/integration_tests/snapshots/dom/elements/input.ts.b3e814401.png differ diff --git a/integration_tests/snapshots/dom/elements/input.ts.ea8aa0621.png b/integration_tests/snapshots/dom/elements/input.ts.ea8aa0621.png index b04b6df5c0..0cf3b8e2ed 100644 Binary files a/integration_tests/snapshots/dom/elements/input.ts.ea8aa0621.png and b/integration_tests/snapshots/dom/elements/input.ts.ea8aa0621.png differ diff --git a/integration_tests/snapshots/dom/elements/textarea.ts.81c69fff2.png b/integration_tests/snapshots/dom/elements/textarea.ts.81c69fff2.png index 95c3a207ff..add24eb2d1 100644 Binary files a/integration_tests/snapshots/dom/elements/textarea.ts.81c69fff2.png and b/integration_tests/snapshots/dom/elements/textarea.ts.81c69fff2.png differ diff --git a/integration_tests/snapshots/dom/nodes/clone-node.ts.dbc7c42b1.png b/integration_tests/snapshots/dom/nodes/clone-node.ts.dbc7c42b1.png index 03b23cdeb0..940a541c2f 100644 Binary files a/integration_tests/snapshots/dom/nodes/clone-node.ts.dbc7c42b1.png and b/integration_tests/snapshots/dom/nodes/clone-node.ts.dbc7c42b1.png differ diff --git a/integration_tests/snapshots/dom/nodes/remove-child.ts.6108a5311.png b/integration_tests/snapshots/dom/nodes/remove-child.ts.6108a5311.png index b8ab3e3c60..2b82e1d356 100644 Binary files a/integration_tests/snapshots/dom/nodes/remove-child.ts.6108a5311.png and b/integration_tests/snapshots/dom/nodes/remove-child.ts.6108a5311.png differ diff --git a/integration_tests/specs/css/css-backgrounds/background-attachment.ts b/integration_tests/specs/css/css-backgrounds/background-attachment.ts index 4b464d6f05..e2d14164f3 100644 --- a/integration_tests/specs/css/css-backgrounds/background-attachment.ts +++ b/integration_tests/specs/css/css-backgrounds/background-attachment.ts @@ -5,7 +5,7 @@ describe('background-attachment', () => { 'background-attachment': 'fixed', 'background-position': '1em 5em', 'background-image': - 'url(https://kraken.oss-cn-hangzhou.aliyuncs.com/images/cat.png)', + 'url(assets/cat.png)', 'background-repeat': 'no-repeat', border: '1px solid blue', height: '250px', @@ -25,7 +25,7 @@ describe('background-attachment', () => { let container = createElementWithStyle('div', { 'background-attachment': 'local', 'background-image': - 'url(https://kraken.oss-cn-hangzhou.aliyuncs.com/images/cat.png)', + 'url(assets/cat.png)', 'background-repeat': 'no-repeat', 'background-color': 'yellow', border: '10px solid rgba(0, 0, 0, 0.3)', @@ -50,7 +50,7 @@ describe('background-attachment', () => { 'background-attachment': 'local', backgroundRepeat: 'no-repeat', 'background-image': - 'url(https://kraken.oss-cn-hangzhou.aliyuncs.com/images/cat.png)', + 'url(assets/cat.png)', 'background-color': 'yellow', border: '10px solid rgba(0, 0, 0, 0.3)', height: '250px', diff --git a/integration_tests/specs/css/css-backgrounds/background-color.ts b/integration_tests/specs/css/css-backgrounds/background-color.ts index 2b17f820f3..9b71b1b9a5 100644 --- a/integration_tests/specs/css/css-backgrounds/background-color.ts +++ b/integration_tests/specs/css/css-backgrounds/background-color.ts @@ -50,7 +50,7 @@ describe('Background-color', () => { position: 'relative', bottom: '60px', backgroundImage: - 'url(https://kraken.oss-cn-hangzhou.aliyuncs.com/images/green-60-60.png)', + 'url(assets/green-60-60.png)', backgroundRepeat: 'no-repeat', }); append(BODY, red); diff --git a/integration_tests/specs/css/css-backgrounds/background-repeat.ts b/integration_tests/specs/css/css-backgrounds/background-repeat.ts index 64b79d96d1..6e757e9c4c 100644 --- a/integration_tests/specs/css/css-backgrounds/background-repeat.ts +++ b/integration_tests/specs/css/css-backgrounds/background-repeat.ts @@ -128,7 +128,7 @@ describe('background-repeat', () => { height: '220px', backgroundColor: 'red', backgroundImage: - 'url(https://kraken.oss-cn-hangzhou.aliyuncs.com/images/cat.png)', + 'url(assets/cat.png)', backgroundRepeat: 'round', }); append(BODY, div); @@ -143,7 +143,7 @@ describe('background-repeat', () => { height: '220px', backgroundColor: 'red', backgroundImage: - 'url(https://kraken.oss-cn-hangzhou.aliyuncs.com/images/cat.png)', + 'url(assets/cat.png)', backgroundRepeat: 'round', }); append(BODY, div); diff --git a/integration_tests/specs/css/css-borders/border-bottom.ts b/integration_tests/specs/css/css-borders/border-bottom.ts index 697fd207dc..69f726105d 100644 --- a/integration_tests/specs/css/css-borders/border-bottom.ts +++ b/integration_tests/specs/css/css-borders/border-bottom.ts @@ -1,31 +1,5 @@ /*auto generated*/ describe('border-bottom', () => { - it('001-ref', async () => { - let p; - let div; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if there is a filled black square.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'background-color': 'black', - height: '100px', - position: 'relative', - top: '100px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - - await snapshot(); - }); it('001', async () => { let p; let div; @@ -52,5941 +26,6 @@ describe('border-bottom', () => { BODY.appendChild(p); BODY.appendChild(div); - await snapshot(); - }); - it('003', async () => { - let p; - let div; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if there is a blue line.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'border-bottom': 'blue', - 'border-bottom-style': 'solid', - height: '100px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - - await snapshot(); - }); - it('005-ref', async () => { - let p; - let div; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if there is a filled blue square.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'background-color': 'blue', - height: '100px', - position: 'relative', - top: '100px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - - await snapshot(); - }); - it('005', async () => { - let p; - let div; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if there is a filled blue square.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'border-bottom': '100px solid blue', - height: '100px', - width: '100px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - - await snapshot(); - }); - it('006', async () => { - let p; - let div; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if there is a filled black square.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'border-bottom': '100px solid #000', - height: '100px', - width: '100px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - - await snapshot(); - }); - it('008', async () => { - let p; - let div; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if there is a filled blue square.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'border-bottom': '100px solid blue', - height: '100px', - width: '100px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - - await snapshot(); - }); - it('010', async () => { - let p; - let div; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if there is a dashed blue line below.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'border-bottom': '5px solid blue', - height: '100px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - - await snapshot(); - }); - it('016-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if there are 2 black lines.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'background-color': 'black', - height: '3px', - 'margin-top': '112px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'background-color': 'black', - height: '3px', - 'margin-top': '10px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(); - }); - it('016', async () => { - let p; - let div1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if there are 2 black lines.`)] - ); - div1 = createElement( - 'div', - { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'div1', - style: { - 'border-bottom': '4px solid #000', - 'padding-bottom': '10px', - height: '100px', - 'box-sizing': 'border-box', - }, - }, - [ - createElement('div', { - style: { - height: '100px', - 'box-sizing': 'border-box', - }, - }), - ] - ); - BODY.appendChild(p); - BODY.appendChild(div1); - - await snapshot(); - }); - it('018-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if there are 2 large blue rectangles.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'background-color': 'blue', - height: '96px', - 'margin-top': '112px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'background-color': 'blue', - height: '96px', - 'margin-top': '10px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(); - }); - it('018', async () => { - let p; - let div1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if there are 2 large blue rectangles.`)] - ); - div1 = createElement( - 'div', - { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'div1', - style: { - 'border-bottom': '100px solid blue', - 'padding-bottom': '10px', - height: '100px', - 'box-sizing': 'border-box', - }, - }, - [ - createElement('div', { - style: { - height: '100px', - 'box-sizing': 'border-box', - }, - }), - ] - ); - BODY.appendChild(p); - BODY.appendChild(div1); - - await snapshot(); - }); - it('applies-to-001-ref', async () => { - let p; - let div; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if there is a short horizontal green line.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'background-color': 'green', - height: '3px', - width: '96px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - - await snapshot(); - }); - it('applies-to-008', async () => { - let div; - div = createElement( - 'div', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'border-bottom': '10px solid green', - display: 'inline', - 'font-size': '100px', - 'box-sizing': 'border-box', - }, - }, - [createText(`1111`)] - ); - BODY.appendChild(div); - - await snapshot(); - }); - it('applies-to-009', async () => { - let div; - div = createElement( - 'div', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [ - createElement('span', { - style: { - 'border-bottom': '3px solid green', - display: 'block', - width: '100px', - 'box-sizing': 'border-box', - }, - }), - ] - ); - BODY.appendChild(div); - - await snapshot(); - }); - it('applies-to-012', async () => { - let p; - let blockDescendant; - let blockDescendant_1; - let inlineBlock; - let div; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if there is a short horizontal green line.`)] - ); - div = createElement( - 'div', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [ - (inlineBlock = createElement( - 'span', - { - id: 'inline-block', - style: { - 'border-bottom': '3px solid green', - display: 'inline-block', - 'vertical-align': 'top', - width: '100px', - 'box-sizing': 'border-box', - }, - }, - [ - (blockDescendant = createElement('span', { - class: 'block-descendant', - style: { - display: 'block', - 'box-sizing': 'border-box', - }, - })), - (blockDescendant_1 = createElement('span', { - class: 'block-descendant', - style: { - display: 'block', - 'box-sizing': 'border-box', - }, - })), - ] - )), - ] - ); - BODY.appendChild(p); - BODY.appendChild(div); - - await snapshot(); - }); - it('color-001-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/000_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/000_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(); - }); - it('color-001', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#00000', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#000000', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-002', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#000000', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#000000', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-003-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/010101_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/010101_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await sleep(0.5); - await snapshot(); - }); - it('color-003', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#010101', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#010101', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-004-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/999_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/999_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.1); - }); - it('color-004', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#999999', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#999999', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-005-ref', async () => { - let div; - let div_1; - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/fefefe_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/fefefe_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.1); - }); - it('color-005', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - color: 'white', - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#fefefe', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#fefefe', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-006-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - color: 'white', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/000_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/000_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.1); - }); - it('color-006', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - color: 'white', - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#000', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#000', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-007', async () => { - let p; - let div; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if there is a filled black square.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#1000000', - - width: '100px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - - await snapshot(); - }); - it('color-008', async () => { - let p; - let div; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if there is a filled black square.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#fgfgfg', - - width: '100px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - - await snapshot(); - }); - it('color-009-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/010000_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/010000_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.1); - }); - it('color-009', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#010000', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#010000', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-010-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'background-color': '#990000', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'background-color': '#990000', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(); - }); - it('color-010', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#990000', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#990000', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-011-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/fe0000_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/fe0000_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.1); - }); - it('color-011', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#fe0000', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#fe0000', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-012-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/f00_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/f00_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.1); - }); - it('color-012', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#ff0000', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#ff0000', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-013', async () => { - let p; - let div; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if there is a filled black square.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#fg0000', - - width: '100px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - - await snapshot(); - }); - it('color-014-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/000100_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/000100_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.1); - }); - it('color-014', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#000100', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#000100', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-015-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/090_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/090_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.1); - }); - it('color-015', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#009900', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#009900', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-016-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/00fe00_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/00fe00_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.1); - }); - it('color-016', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#00fe00', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#00fe00', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-017-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/0f0_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/0f0_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.1); - }); - it('color-017', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#00ff00', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#00ff00', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-018', async () => { - let p; - let div; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if there is a filled black square.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#00fg00', - - width: '100px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - - await snapshot(); - }); - it('color-019-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/000001_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/000001_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.1); - }); - it('color-019', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#000001', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#000001', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-020-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/009_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/009_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.1); - }); - it('color-020', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#000099', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#000099', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-021-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/0000fe_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/0000fe_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.1); - }); - it('color-021', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#0000fe', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#0000fe', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-022-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/00f_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/00f_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.1); - }); - it('color-022', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#0000ff', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#0000ff', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-023', async () => { - let p; - let div; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if there is a filled black square.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#0000fg', - - width: '100px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - - await snapshot(); - }); - it('color-024', async () => { - let p; - let div; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if there is a filled black square.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#00', - - width: '100px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - - await snapshot(); - }); - it('color-025', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#000', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#000', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-026-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/111_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/111_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.1); - }); - it('color-026', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#111', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#111', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-027-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/999_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/999_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.1); - }); - it('color-027', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#999', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#999', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-028-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/eee_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/eee_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.1); - }); - it('color-028', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#eee', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#eee', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-030', async () => { - let p; - let test; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [ - createText( - `Test passes if there is a filled black or transparent square surrounded by a blue border.` - ), - ] - ); - test = createElement( - 'div', - { - xmlns: 'http://www.w3.org/1999/xhtml', - class: 'test', - style: { - border: '5px solid blue', - height: '100px', - width: '100px', - 'box-sizing': 'border-box', - }, - }, - [ - createElement('div', { - style: { - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#1000', - - width: '100px', - 'box-sizing': 'border-box', - }, - }), - ] - ); - BODY.appendChild(p); - BODY.appendChild(test); - - await snapshot(); - }); - it('color-031', async () => { - let p; - let div; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if there is a filled black square.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#ggg', - - width: '100px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - - await snapshot(); - }); - it('color-032-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/100_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/100_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.1); - }); - it('color-032', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#100', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#100', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-033', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#900', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#900', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-034-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/e00_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/e00_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.1); - }); - it('color-034', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#e00', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#e00', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-035', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#f00', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#f00', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-036', async () => { - let p; - let div; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if there is a filled black square.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#g00', - - width: '100px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - - await snapshot(); - }); - it('color-037-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/010_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/010_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await sleep(0.5); - - await snapshot(0.1); - }); - it('color-037', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#010', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#010', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-038-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/090_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/090_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.1); - }); - it('color-038', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#090', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#090', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-039-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/0e0_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/0e0_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.1); - }); - it('color-039', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#0e0', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#0e0', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-040', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#0f0', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#0f0', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-041', async () => { - let p; - let div; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if there is a filled black square.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#0g0', - - width: '100px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - - await snapshot(); - }); - it('color-042-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/001_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/001_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.1); - }); - it('color-042', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#001', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#001', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-043', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#009', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#009', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-044-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/00e_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/00e_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.1); - }); - it('color-044', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#00e', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#00e', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-045', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#00f', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': '#00f', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-046', async () => { - let p; - let div; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if there is a filled black square.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': '#00g', - - width: '100px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - - await snapshot(); - }); - it('color-047', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(-1%, -1%, -1%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 0%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-048', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(0%, 0%, 0%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 0%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-049-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(1%, 1%, 1%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(1%, 1%, 1%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(); - }); - it('color-049', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(1%, 1%, 1%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(1%, 1%, 1%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-050', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(-0%, -0%, -0%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 0%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-051', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(+0%, +0%, +0%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 0%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-052-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(40%, 40%, 40%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(40%, 40%, 40%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(); - }); - it('color-053', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(+40%, +40%, +40%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(40%, 40%, 40%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-054-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - color: 'white', - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(99%, 99%, 99%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(99%, 99%, 99%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(); - }); - it('color-054', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - color: 'white', - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(99%, 99%, 99%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(99%, 99%, 99%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-063-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/808080_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/808080_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.2); - }); - it('color-063', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(128, 128, 128)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(128, 128, 128)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-064', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(+128, +128, +128)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(128, 128, 128)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-070-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(1%, 0%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(1%, 0%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(); - }); - it('color-070', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(1%, 0%, 0%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(1%, 0%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-071', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(-0%, 0%, 0%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 0%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-073-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(40%, 0%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(40%, 0%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(); - }); - it('color-073', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(40%, 0%, 0%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(40%, 0%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-074', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(+40%, 0%, 0%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(40%, 0%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-075-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(99%, 0%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(99%, 0%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(); - }); - it('color-075', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(99%, 0%, 0%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(99%, 0%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-076', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(100%, 0%, 0%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(100%, 0%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-077', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(+100%, 0%, 0%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(100%, 0%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-078', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(101%, 0%, 0%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(100%, 0%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-079', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(-1, 0, 0)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0, 0, 0)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-080', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(1, 0, 0)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(1, 0, 0)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-081', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(-0, 0, 0)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0, 0, 0)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-082', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(+0, 0, 0)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0, 0, 0)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-083-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/800000_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/800000_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.2); - }); - it('color-083', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(128, 0, 0)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(128, 0, 0)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-084', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(+128, 0, 0)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(128, 0, 0)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-085', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(254, 0, 0)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(254, 0, 0)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-086', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(255, 0, 0)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(255, 0, 0)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-087', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(+255, 0, 0)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(255, 0, 0)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-088', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(256, 0, 0)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(255, 0, 0)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-089', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(0%, -1%, 0%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 0%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-090-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 1%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 1%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(); - }); - it('color-090', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(0%, 1%, 0%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 1%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-093-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 40%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 40%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(); - }); - it('color-093', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(0%, 40%, 0%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 40%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-094', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(0%, +40%, 0%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 40%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-095-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 99%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 99%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(); - }); - it('color-095', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(0%, 99%, 0%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 99%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-096', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(0%, 100%, 0%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 100%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-097', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(0%, +100%, 0%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 100%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-098', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(0%, 101%, 0%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 100%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-099', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(0, -1, 0)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0, 0, 0)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-100-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'background-color': 'rgb(0, 1, 0)', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'background-color': 'rgb(0, 1, 0)', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(); - }); - it('color-100', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(0, 1, 0)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0, 1, 0)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-101', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(0, -0, 0)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0, 0, 0)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-102', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(0, +0, 0)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0, 0, 0)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-103-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: {}, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/008000_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - background: 'url("assets/008000_color.png")', - height: '100px', - 'margin-top': '10px', - width: '100px', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(0.2); - }); - it('color-103', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(0, 128, 0)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0, 128, 0)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-105', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(0, 254, 0)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0, 254, 0)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-106', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(0, 255, 0)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0, 255, 0)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-107', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(0, +255, 0)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0, 255, 0)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-108', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(0, 256, 0)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0, 255, 0)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-109', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(0%, 0%, -1%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 0%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-110-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 0%, 1%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 0%, 1%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(); - }); - it('color-110', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(0%, 0%, 1%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 0%, 1%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-111', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(0%, 0%, -0%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 0%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-112', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(0%, 0%, +0%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 0%, 0%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-113-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 0%, 40%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 0%, 40%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - - await snapshot(); - }); - it('color-113', async () => { - let p; - let test; - let reference; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - test = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'test', - style: { - width: '100px', - 'border-bottom-style': 'solid', - 'border-bottom-width': '100px', - 'border-bottom-color': 'rgb(0%, 0%, 40%)', - 'box-sizing': 'border-box', - }, - }); - reference = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - id: 'reference', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 0%, 40%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(test); - BODY.appendChild(reference); - - await snapshot(); - }); - it('color-115-ref', async () => { - let p; - let div; - let div_1; - p = createElement( - 'p', - { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - 'box-sizing': 'border-box', - }, - }, - [createText(`Test passes if the boxes below are the same color.`)] - ); - div = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 0%, 99%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - div_1 = createElement('div', { - xmlns: 'http://www.w3.org/1999/xhtml', - style: { - height: '100px', - width: '100px', - 'background-color': 'rgb(0%, 0%, 99%)', - 'margin-top': '10px', - 'box-sizing': 'border-box', - }, - }); - BODY.appendChild(p); - BODY.appendChild(div); - BODY.appendChild(div_1); - await snapshot(); }); }); diff --git a/integration_tests/specs/css/css-box/horizontal-formatting.ts b/integration_tests/specs/css/css-box/horizontal-formatting.ts index d155a0b5cb..3ca5df4329 100644 --- a/integration_tests/specs/css/css-box/horizontal-formatting.ts +++ b/integration_tests/specs/css/css-box/horizontal-formatting.ts @@ -12,7 +12,7 @@ describe('Horizontal formatting', () => { ruleImg.setAttribute( 'src', - 'https://kraken.oss-cn-hangzhou.aliyuncs.com/images/scaleplate.png' + 'assets/scaleplate.png' ); setElementStyle(ruleImg, { @@ -58,7 +58,7 @@ describe('Horizontal formatting', () => { ruleImg2.setAttribute( 'src', - 'https://kraken.oss-cn-hangzhou.aliyuncs.com/images/content-area.png' + 'assets/content-area.png' ); setElementStyle(ruleImg2, { width: '640px', diff --git a/integration_tests/specs/css/css-fonts/font-size.ts b/integration_tests/specs/css/css-fonts/font-size.ts index 1cd4ab4987..635ec00207 100644 --- a/integration_tests/specs/css/css-fonts/font-size.ts +++ b/integration_tests/specs/css/css-fonts/font-size.ts @@ -164,4 +164,44 @@ describe('FontSize', () => { done(); }); }); + + it('should works with absolute-size keyword', async () => { + for (const fontSize of ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large', 'xxx-large']) { + const div = createElement('div', { + style: { + fontSize: fontSize + } + }, [ + createText(fontSize) + ]); + BODY.appendChild(div); + } + + await snapshot(); + }); + + it('should works with relative-size keyword', async () => { + for (const parentSize of ['16px', '32px', '48px']) { + const div = createElement('div', { + style: { + fontSize: parentSize + } + }, [ + createElement('div', { + style: { + fontSize: 'smaller' + } + }, [createText(`${parentSize} smaller`)]), + createElement('div', {}, [createText(`${parentSize}`)]), + createElement('div', { + style: { + fontSize: 'larger' + } + }, [createText(`${parentSize} larger`)]) + ]); + BODY.appendChild(div); + } + + await snapshot(); + }); }); diff --git a/integration_tests/specs/css/css-position/absolute.ts b/integration_tests/specs/css/css-position/absolute.ts index b21982528d..a36e9f62c5 100644 --- a/integration_tests/specs/css/css-position/absolute.ts +++ b/integration_tests/specs/css/css-position/absolute.ts @@ -301,16 +301,16 @@ describe('Position absolute', () => { div.style.backgroundColor = 'red'; div.style.position = 'absolute'; - setTimeout(async () => { + requestAnimationFrame(async () => { div.style.bottom = '100px'; await snapshot(); - }, 200); + requestAnimationFrame(async () => { + div.style.bottom = '-200px'; + await snapshot(); + done(); + }); + }); - setTimeout(async () => { - div.style.bottom = '-200px'; - await snapshot(); - done(); - }, 300); document.body.appendChild(div); await snapshot(); @@ -323,16 +323,15 @@ describe('Position absolute', () => { div.style.backgroundColor = 'red'; div.style.position = 'absolute'; - setTimeout(async () => { + requestAnimationFrame(async () => { div.style.width = '100px'; await snapshot(); - }, 200); - - setTimeout(async () => { - div.style.width = '400px'; - await snapshot(); - done(); - }, 300); + requestAnimationFrame(async () => { + div.style.width = '400px'; + await snapshot(); + done(); + }) + }) document.body.appendChild(div); await snapshot(); @@ -345,16 +344,16 @@ describe('Position absolute', () => { div.style.backgroundColor = 'red'; div.style.position = 'absolute'; - setTimeout(async () => { + requestAnimationFrame(async () => { div.style.height = '100px'; await snapshot(); - }, 200); - setTimeout(async () => { - div.style.height = '400px'; - await snapshot(); - done(); - }, 300); + requestAnimationFrame(async () => { + div.style.height = '400px'; + await snapshot(); + done(); + }); + }); document.body.appendChild(div); await snapshot(); @@ -367,16 +366,16 @@ describe('Position absolute', () => { div.style.backgroundColor = 'red'; div.style.position = 'absolute'; - setTimeout(async () => { + requestAnimationFrame(async () => { div.style.top = '100px'; await snapshot(); - }, 200); - setTimeout(async () => { - div.style.top = '-50px'; - await snapshot(); - done(); - }, 300); + requestAnimationFrame(async () => { + div.style.top = '-50px'; + await snapshot(); + done(); + }); + }); document.body.appendChild(div); await snapshot(); @@ -389,16 +388,16 @@ describe('Position absolute', () => { div.style.backgroundColor = 'red'; div.style.position = 'absolute'; - setTimeout(async () => { + requestAnimationFrame(async () => { div.style.left = '100px'; await snapshot(); - }, 200); - setTimeout(async () => { - div.style.left = '-50px'; - await snapshot(); - done(); - }, 300); + requestAnimationFrame(async () => { + div.style.left = '-50px'; + await snapshot(); + done(); + }); + }); document.body.appendChild(div); await snapshot(); @@ -411,16 +410,15 @@ describe('Position absolute', () => { div.style.backgroundColor = 'red'; div.style.position = 'absolute'; - setTimeout(async () => { + requestAnimationFrame(async () => { div.style.right = '100px'; await snapshot(); - }, 200); - - setTimeout(async () => { - div.style.right = '-50px'; - await snapshot(); - done(); - }, 300); + requestAnimationFrame(async () => { + div.style.right = '-50px'; + await snapshot(); + done(); + }); + }); document.body.appendChild(div); await snapshot(); @@ -739,7 +737,7 @@ describe('Position absolute', () => { backgroundColor: 'green' }, }); - + BODY.appendChild(div1); await snapshot(); }); @@ -919,17 +917,17 @@ describe('Position absolute', () => { }, [ createElement('div', { style: { - backgroundColor: '#999', - position: 'absolute', + backgroundColor: '#999', + position: 'absolute', left: 0, - right: 0, - bottom: 0, - top: 0, + right: 0, + bottom: 0, + top: 0, } }, [ createElement('div', { style: { - backgroundColor: 'green', + backgroundColor: 'green', height: '100px', } }) @@ -951,19 +949,19 @@ describe('Position absolute', () => { }, [ createElement('div', { style: { - backgroundColor: '#999', - position: 'absolute', + backgroundColor: '#999', + position: 'absolute', left: 0, - right: 0, - bottom: 0, - top: 0, - display: 'flex', - flexDirection: 'column', + right: 0, + bottom: 0, + top: 0, + display: 'flex', + flexDirection: 'column', } }, [ createElement('div', { style: { - backgroundColor: 'green', + backgroundColor: 'green', height: '100px', } }) @@ -985,18 +983,18 @@ describe('Position absolute', () => { }, [ createElement('div', { style: { - backgroundColor: '#999', - position: 'absolute', + backgroundColor: '#999', + position: 'absolute', left: 0, - right: 0, - bottom: 0, - top: 0, - display: 'flex', + right: 0, + bottom: 0, + top: 0, + display: 'flex', } }, [ createElement('div', { style: { - backgroundColor: 'green', + backgroundColor: 'green', width: '100px', } }) @@ -1023,7 +1021,7 @@ describe('Position absolute', () => { transform: 'translateX(64px)', }, }, - [ + [ createElement( 'div', { @@ -1038,7 +1036,7 @@ describe('Position absolute', () => { transform: 'translateX(64px)', }, }, - [ + [ (child = createElement('div', { style: { "display": "flex", @@ -1063,9 +1061,9 @@ describe('Position absolute', () => { "borderLeftColor": "rgba(0, 0, 0, 0.000)", transform: 'translateX(14px)', }, - })) + })) ] - ) + ) ] ); @@ -1100,14 +1098,14 @@ describe('Position absolute', () => { overflow: 'scroll' }, }, - [ - createElement('div', { + [ + createElement('div', { style: { "width": "300px", "height": "300px", "background-color": "green", }, - }), + }), (child = createElement('div', { style: { "position": "absolute", @@ -1115,7 +1113,7 @@ describe('Position absolute', () => { "height": "50px", "background-color": "yellow", }, - })) + })) ] )) ] diff --git a/integration_tests/specs/css/css-position/position-sticky.ts b/integration_tests/specs/css/css-position/position-sticky.ts index ffd71c8011..14a12a53a8 100644 --- a/integration_tests/specs/css/css-position/position-sticky.ts +++ b/integration_tests/specs/css/css-position/position-sticky.ts @@ -79,7 +79,7 @@ describe('position-sticky', () => { spacer = createElementWithStyle('div', { height: '200vh', 'background-image': - 'url(https://kraken.oss-cn-hangzhou.aliyuncs.com/images/ruler-v-50px.png)', + 'url(assets/ruler-v-50px.png)', 'background-repeat': 'repeat', 'box-sizing': 'border-box', }); diff --git a/integration_tests/specs/css/css-transitions/all.ts b/integration_tests/specs/css/css-transitions/all.ts index 894858f4fb..2f802f6bb8 100644 --- a/integration_tests/specs/css/css-transitions/all.ts +++ b/integration_tests/specs/css/css-transitions/all.ts @@ -12,16 +12,15 @@ describe('Transition all', () => { }); container1.appendChild(document.createTextNode('DIV 1')); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); + requestAnimationFrame(() => { setElementStyle(container1, { top: 0, }); - - // Wait for animation finished. - setTimeout(async () => { - await snapshot(); - done(); - }, 1100); }); }); @@ -155,18 +154,19 @@ describe('Transition all', () => { requestAnimationFrame(() => { container.style.width = '200px'; - setTimeout(() => { + requestAnimationFrame(() => { container.style.transition = 'height 0.5s ease 0.5s'; + + container.addEventListener('transitionend', async () => { + await snapshot(); + doneFn(); + }); + requestAnimationFrame(async () => { await snapshot(); container.style.height = '200px'; - - setTimeout(async () => { - await snapshot(); - doneFn(); - }, 1200); }); - }, 100); + }); }); }); @@ -184,6 +184,10 @@ describe('Transition all', () => { [createText('1234')] ); + container.addEventListener('transitionstart', () => { + doneFn.fail('transition will not start'); + }); + BODY.appendChild(container); await snapshot(); @@ -245,16 +249,15 @@ describe('Transition all', () => { container1.appendChild(document.createTextNode('DIV')); await snapshot(); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); + requestAnimationFrame(() => { setElementStyle(container1, { transform: 'translate3d(200px, 0, 0)', }); - - // Wait for animation finished. - setTimeout(async () => { - await snapshot(); - done(); - }, 1100); }); }); @@ -271,17 +274,16 @@ describe('Transition all', () => { container1.appendChild(document.createTextNode('DIV')); await snapshot(); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); + requestAnimationFrame(() => { setElementStyle(container1, { transform: 'translate3d(200px, 0, 0)', transition: 'all 1s linear', }); - - // Wait for animation finished. - setTimeout(async () => { - await snapshot(); - done(); - }, 1100); }); }); @@ -298,17 +300,17 @@ describe('Transition all', () => { container1.appendChild(document.createTextNode('DIV')); await snapshot(); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); + requestAnimationFrame(() => { setElementStyle(container1, { transform: 'translate3d(200px, 0, 0)', transition: 'all 1s linear', }); - // Wait for animation finished. - setTimeout(async () => { - await snapshot(); - done(); - }, 1100); }); }); }); diff --git a/integration_tests/specs/css/css-transitions/transform-matrix.ts b/integration_tests/specs/css/css-transitions/transform-matrix.ts index 98310383ef..06e692793d 100644 --- a/integration_tests/specs/css/css-transitions/transform-matrix.ts +++ b/integration_tests/specs/css/css-transitions/transform-matrix.ts @@ -14,16 +14,16 @@ describe('Transition transform', () => { }); container1.appendChild(document.createTextNode('DIV 1')); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); + requestAnimationFrame(async () => { await snapshot(); setElementStyle(container1, { transform: 'matrix(0,1,1,1,10,10)', }); - // Wait for animation finished. - setTimeout(async () => { - await snapshot(); - done(); - }, 1100); }); }); }); @@ -44,15 +44,16 @@ describe('Transition transform', () => { }); container1.appendChild(document.createTextNode('DIV 1')); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); + requestAnimationFrame(async () => { await snapshot(); setElementStyle(container1, { transform: 'matrix3d(0,1,1,1,10,10,1,0,0,1,1,1,1,1,0)', }); - setTimeout(async () => { - await snapshot(); - done(); - }, 1100); }); }); }); diff --git a/integration_tests/specs/css/css-transitions/transform-origin.ts b/integration_tests/specs/css/css-transitions/transform-origin.ts index f4aa800517..c8ecee535b 100644 --- a/integration_tests/specs/css/css-transitions/transform-origin.ts +++ b/integration_tests/specs/css/css-transitions/transform-origin.ts @@ -14,21 +14,20 @@ describe('Transition transform origin', () => { }); container1.appendChild(document.createTextNode('DIV 1')); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); + requestAnimationFrame(async () => { await snapshot(); setElementStyle(container1, { - transform: 'rotateZ(0.6turn)', transformOrigin: '10px 10px', + transform: 'rotateZ(0.6turn)', }); - setTimeout(async () => { - await snapshot(); - done(); - }, 1100); }); }); -}); -describe('Transition transform origin', () => { it('percent', done => { const container1 = document.createElement('div'); document.body.appendChild(container1); @@ -44,16 +43,17 @@ describe('Transition transform origin', () => { }); container1.appendChild(document.createTextNode('DIV 1')); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); + requestAnimationFrame(async () => { await snapshot(); setElementStyle(container1, { - transform: 'rotateZ(0.6turn)', transformOrigin: '80% 80%', + transform: 'rotateZ(0.6turn)', }); - setTimeout(async () => { - await snapshot(); - done(); - }, 1100); }); }); }); @@ -74,16 +74,17 @@ describe('Transition transform', () => { }); container1.appendChild(document.createTextNode('DIV 1')); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); + requestAnimationFrame(async () => { await snapshot(); setElementStyle(container1, { transform: 'rotateZ(0.1turn)', transformOrigin: 'top left', }); - setTimeout(async () => { - await snapshot(); - done(); - }, 1100); }); }); }); diff --git a/integration_tests/specs/css/css-transitions/transform-rotate.ts b/integration_tests/specs/css/css-transitions/transform-rotate.ts index 3b05189040..7b7267c280 100644 --- a/integration_tests/specs/css/css-transitions/transform-rotate.ts +++ b/integration_tests/specs/css/css-transitions/transform-rotate.ts @@ -14,15 +14,16 @@ describe('Transition transform', () => { }); container1.appendChild(document.createTextNode('DIV 1')); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); + requestAnimationFrame(async () => { await snapshot(); setElementStyle(container1, { transform: 'rotateZ(0.6turn)', }); - setTimeout(async () => { - await snapshot(); - done(); - }, 1100); }); }); }); @@ -43,15 +44,16 @@ describe('Transition transform', () => { }); container1.appendChild(document.createTextNode('DIV 1')); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); + requestAnimationFrame(async () => { await snapshot(); setElementStyle(container1, { transform: 'rotate3d(10, 10, 10, 0.6turn)', }); - setTimeout(async () => { - await snapshot(); - done(); - }, 1100); }); }); }); @@ -71,16 +73,16 @@ describe('Transition transform', () => { transitionTimingFunction: 'ease', }); container1.appendChild(document.createTextNode('DIV 1')); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); requestAnimationFrame(async () => { await snapshot(); setElementStyle(container1, { transform: 'rotateX(0.6turn)', }); - setTimeout(async () => { - await snapshot(); - done(); - }, 1100); }); }); }); @@ -101,15 +103,15 @@ describe('Transition transform', () => { }); container1.appendChild(document.createTextNode('DIV 1')); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); requestAnimationFrame(async () => { await snapshot(); setElementStyle(container1, { transform: 'rotateY(0.6turn)', }); - setTimeout(async () => { - await snapshot(); - done(); - }, 1100); }); }); }); diff --git a/integration_tests/specs/css/css-transitions/transform-scale.ts b/integration_tests/specs/css/css-transitions/transform-scale.ts index abae5984a1..19b001314d 100644 --- a/integration_tests/specs/css/css-transitions/transform-scale.ts +++ b/integration_tests/specs/css/css-transitions/transform-scale.ts @@ -14,15 +14,15 @@ describe('Transition transform', () => { }); container1.appendChild(document.createTextNode('DIV 1')); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); requestAnimationFrame(async () => { await snapshot(); setElementStyle(container1, { transform: 'scale(2,2)', }); - setTimeout(async () => { - await snapshot(); - done(); - }, 1100); }); }); }); @@ -43,15 +43,15 @@ describe('Transition transform', () => { }); container1.appendChild(document.createTextNode('DIV 1')); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); requestAnimationFrame(async () => { await snapshot(); setElementStyle(container1, { transform: 'scale3d(2, 2, 2)', }); - setTimeout(async () => { - await snapshot(); - done(); - }, 1100); }); }); }); @@ -72,15 +72,15 @@ describe('Transition transform', () => { }); container1.appendChild(document.createTextNode('DIV 1')); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); requestAnimationFrame(async () => { await snapshot(); setElementStyle(container1, { transform: 'scaleX(2)', }); - setTimeout(async () => { - await snapshot(); - done(); - }, 1100); }); }); }); @@ -101,15 +101,15 @@ describe('Transition transform', () => { }); container1.appendChild(document.createTextNode('DIV 1')); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); requestAnimationFrame(async () => { await snapshot(); setElementStyle(container1, { transform: 'scaleY(2)', }); - setTimeout(async () => { - await snapshot(); - done(); - }, 1100); }); }); }); diff --git a/integration_tests/specs/css/css-transitions/transform-skew.ts b/integration_tests/specs/css/css-transitions/transform-skew.ts index 6fd451407b..0d8252a8e4 100644 --- a/integration_tests/specs/css/css-transitions/transform-skew.ts +++ b/integration_tests/specs/css/css-transitions/transform-skew.ts @@ -14,15 +14,15 @@ describe('Transition transform', () => { }); container1.appendChild(document.createTextNode('DIV 1')); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); requestAnimationFrame(async () => { await snapshot(); setElementStyle(container1, { transform: 'skew(0.3turn,0.6turn)', }); - setTimeout(async () => { - await snapshot(); - done(); - }, 1100); }); }); }); @@ -43,15 +43,15 @@ describe('Transition transform', () => { }); container1.appendChild(document.createTextNode('DIV 1')); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); requestAnimationFrame(async () => { await snapshot(); setElementStyle(container1, { transform: 'skewX(0.3turn)', }); - setTimeout(async () => { - await snapshot(); - done(); - }, 1100); }); }); }); @@ -72,15 +72,15 @@ describe('Transition transform', () => { }); container1.appendChild(document.createTextNode('DIV 1')); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); requestAnimationFrame(async () => { await snapshot(); setElementStyle(container1, { transform: 'skewY(0.3turn)', }); - setTimeout(async () => { - await snapshot(); - done(); - }, 1100); }); }); }); diff --git a/integration_tests/specs/css/css-transitions/transform-translate.ts b/integration_tests/specs/css/css-transitions/transform-translate.ts index 2713a20dda..a68803fd78 100644 --- a/integration_tests/specs/css/css-transitions/transform-translate.ts +++ b/integration_tests/specs/css/css-transitions/transform-translate.ts @@ -14,15 +14,16 @@ describe('Transition transform', () => { }); container1.appendChild(document.createTextNode('DIV 1')); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); + requestAnimationFrame(async () => { await snapshot(); setElementStyle(container1, { transform: 'translate(10px,20px)', }); - setTimeout(async () => { - await snapshot(); - done(); - }, 1100); }); }); }); @@ -43,21 +44,22 @@ describe('Transition transform', () => { }); container1.appendChild(document.createTextNode('DIV 1')); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); + requestAnimationFrame(async () => { await snapshot(); setElementStyle(container1, { transform: 'translate3d(10px, 10px, 20px)', }); - setTimeout(async () => { - await snapshot(); - done(); - }, 1100); }); }); }); describe('Transition transform', () => { - it('translateX', async () => { + it('translateX', async (done) => { const container1 = document.createElement('div'); document.body.appendChild(container1); setElementStyle(container1, { @@ -72,14 +74,17 @@ describe('Transition transform', () => { }); container1.appendChild(document.createTextNode('DIV 1')); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); + requestAnimationFrame(async () => { await snapshot(); setElementStyle(container1, { transform: 'translateX(20px)', }); }); - - await snapshot(1.1); }); }); @@ -99,15 +104,16 @@ describe('Transition transform', () => { }); container1.appendChild(document.createTextNode('DIV 1')); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); + requestAnimationFrame(async () => { await snapshot(); setElementStyle(container1, { transform: 'translateY(10px)', }); - setTimeout(async () => { - await snapshot(); - done(); - }, 1100); }); }); }); @@ -137,6 +143,11 @@ describe('Multiple transition transform', () => { div.appendChild(container1); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); + requestAnimationFrame(async () => { await snapshot(); setElementStyle(container1, { @@ -145,10 +156,6 @@ describe('Multiple transition transform', () => { setElementStyle(container1, { transform: 'translate3d(-100px, 0px, 0px)', }); - setTimeout(async () => { - await snapshot(); - done(); - }, 1000); }); }); }); diff --git a/integration_tests/specs/css/css-transitions/transition-property.ts b/integration_tests/specs/css/css-transitions/transition-property.ts index 3cf948bfbb..30fe9e2d64 100644 --- a/integration_tests/specs/css/css-transitions/transition-property.ts +++ b/integration_tests/specs/css/css-transitions/transition-property.ts @@ -10,16 +10,15 @@ describe('Transition property', () => { container1.appendChild(document.createTextNode('DIV')); await snapshot(); + container1.addEventListener('transitionend', async () => { + await snapshot(); + done(); + }); + requestAnimationFrame(() => { setElementStyle(container1, { backgroundColor: 'red', }); - - // Wait for animation finished. - setTimeout(async () => { - await snapshot(); - done(); - }, 1100); }); }); diff --git a/integration_tests/specs/dom/elements/script.ts b/integration_tests/specs/dom/elements/script.ts index a633caba06..fc5b25d806 100644 --- a/integration_tests/specs/dom/elements/script.ts +++ b/integration_tests/specs/dom/elements/script.ts @@ -17,7 +17,7 @@ describe('script element', () => { script.onerror = () => { done(); }; - script.src = 'http://127.0.0.1/path/to/a/file'; + script.src = 'http://example.com/404'; }); it('async script execute in delayed order', async (done) => { @@ -37,8 +37,36 @@ describe('script element', () => { expect(window.B).toEqual('B'); // Bundle B load earlier than A. - expect(window.bundleALoadTime - window.bundleBLoadTime > 0).toEqual(true); + expect(window.bundleALoadTime - window.bundleBLoadTime >= 0).toEqual(true); done(); }; }); + + it('Waiting order for large script loaded', (done) => { + const scriptLarge = document.createElement('script'); + scriptLarge.src = 'assets:///assets/large-script.js'; + + const scriptSmall = document.createElement('script'); + scriptSmall.src = 'assets:///assets/defineA.js'; + + function waitForLoad(script) { + return new Promise((resolve) => { + script.onload = () => { + resolve(); + }; + }); + } + + document.body.appendChild(scriptLarge); + document.body.appendChild(scriptSmall); + + Promise.all([ + waitForLoad(scriptLarge), + waitForLoad(scriptSmall), + ]).then(() => { + // Bundle C load earlier than A. + expect(window.bundleALoadTime - window.bundleCLoadTime >= 0).toEqual(true); + done(); + }); + }); }); diff --git a/integration_tests/specs/fetch/fetch.ts b/integration_tests/specs/fetch/fetch.ts index 59cbf7e268..3595ed49db 100644 --- a/integration_tests/specs/fetch/fetch.ts +++ b/integration_tests/specs/fetch/fetch.ts @@ -397,7 +397,7 @@ describe('Response', function() { describe('json', () => { it('parses json response', function() { - return fetch('https://kraken.oss-cn-hangzhou.aliyuncs.com/data/data.json') + return fetch('https://andycall.oss-cn-beijing.aliyuncs.com/data/data.json') .then(function(response) { return response.json(); }) @@ -427,7 +427,7 @@ describe('Response', function() { describe('text', function() { it('resolves text promise', function() { - return fetch('https://kraken.oss-cn-hangzhou.aliyuncs.com/data/data.json') + return fetch('https://andycall.oss-cn-beijing.aliyuncs.com/data/data.json') .then(function(response) { return response.text(); }) diff --git a/integration_tests/specs/navigator/navigator.ts b/integration_tests/specs/navigator/navigator.ts index 01ebf450a5..3830100acc 100644 --- a/integration_tests/specs/navigator/navigator.ts +++ b/integration_tests/specs/navigator/navigator.ts @@ -22,14 +22,13 @@ describe('Navigator', () => { }); it('language', async () => { + console.log(navigator.languages); expect(navigator.language).toBeDefined(); - expect(navigator.language.includes('-')).toBeTrue(); }); it('languages', async () => { expect(navigator.languages instanceof Array).toBeTrue(); expect(navigator.languages[0]).toBeDefined(); - expect(navigator.languages[0].includes('-')).toBeTrue(); }); it('userAgent', () => { diff --git a/integration_tests/specs/plugins/iframe.ts b/integration_tests/specs/plugins/iframe.ts deleted file mode 100644 index 6525b35bb9..0000000000 --- a/integration_tests/specs/plugins/iframe.ts +++ /dev/null @@ -1,27 +0,0 @@ -describe('IframeElement', () => { - it('basic', async () => { - const iframe = document.createElement('iframe'); - iframe.setAttribute( - 'src', - 'https://dev.g.alicdn.com/kraken/kraken-demos/todomvc/build/web/index.html' - ); - iframe.style.width = '360px'; - iframe.style.height = '375px'; - - const div = document.createElement('div'); - div.style.width = div.style.height = '200px'; - div.style.backgroundColor = 'cyan'; - document.body.appendChild(div); - document.body.appendChild(iframe); - - const div2 = document.createElement('div'); - div2.style.width = div2.style.height = '100px'; - div2.style.backgroundColor = 'red'; - document.body.appendChild(div2); - - // There are no load event fired at desktop kraken. - // MOCK async logic. - await sleep(2); - await snapshot(); - }); -}); diff --git a/integration_tests/specs/timer/timer.ts b/integration_tests/specs/timer/timer.ts index be82adc51c..59b1fab6d4 100644 --- a/integration_tests/specs/timer/timer.ts +++ b/integration_tests/specs/timer/timer.ts @@ -4,7 +4,7 @@ describe('setTimeout', () => { setTimeout(() => { const duration = Date.now() - startTime; // 20ms delay accepted - expect(duration - 100).toBeLessThanOrEqual(40); + expect(duration - 100).toBeLessThanOrEqual(100); done(); }, 100); }); diff --git a/integration_tests/specs/xhr/xhr.ts b/integration_tests/specs/xhr/xhr.ts index 96799d624a..8a7bebbfa8 100644 --- a/integration_tests/specs/xhr/xhr.ts +++ b/integration_tests/specs/xhr/xhr.ts @@ -31,7 +31,7 @@ describe('XMLHttpRequest', () => { done(); } }; - xhr.open('GET', 'https://kraken.oss-cn-hangzhou.aliyuncs.com/data/foo.json', true); + xhr.open('GET', 'https://andycall.oss-cn-beijing.aliyuncs.com/data/foo.json', true); xhr.setRequestHeader('Accept', 'application/json'); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.send(); @@ -66,7 +66,7 @@ describe('XMLHttpRequest', () => { done(); } }; - xhr.open('POST', 'https://kraken.oss-cn-hangzhou.aliyuncs.com/data/data.json', true); + xhr.open('POST', 'https://andycall.oss-cn-beijing.aliyuncs.com/data/data.json', true); xhr.setRequestHeader('Accept', 'application/json'); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.send('foobar'); diff --git a/kraken/lib/src/css/overflow.dart b/kraken/lib/src/css/overflow.dart index 78971a81b7..b780744828 100644 --- a/kraken/lib/src/css/overflow.dart +++ b/kraken/lib/src/css/overflow.dart @@ -3,6 +3,7 @@ */ import 'package:flutter/animation.dart'; +import 'package:flutter/gestures.dart'; import 'package:flutter/rendering.dart'; import 'package:kraken/css.dart'; import 'package:kraken/dom.dart'; @@ -338,12 +339,11 @@ mixin ElementOverflowMixin on ElementBase { void _scrollablePointerListener(PointerEvent event) { if (event is PointerDownEvent) { - if (_scrollableX != null) { - _scrollableX!.handlePointerDown(event); - } - if (_scrollableY != null) { - _scrollableY!.handlePointerDown(event); - } + _scrollableX?.handlePointerDown(event); + _scrollableY?.handlePointerDown(event); + } else if (event is PointerSignalEvent) { + _scrollableX?.handlePinterSignal(event); + _scrollableY?.handlePinterSignal(event); } } diff --git a/kraken/lib/src/css/render_style.dart b/kraken/lib/src/css/render_style.dart index 86008d0736..ec8b4c1b57 100644 --- a/kraken/lib/src/css/render_style.dart +++ b/kraken/lib/src/css/render_style.dart @@ -437,7 +437,6 @@ class CSSRenderStyle case MARGIN_TOP: case MARGIN_RIGHT: case MARGIN_BOTTOM: - case FONT_SIZE: value = CSSLength.resolveLength(propertyValue, renderStyle, propertyName); break; case FLEX_DIRECTION: @@ -557,6 +556,9 @@ class CSSRenderStyle case FONT_WEIGHT: value = CSSText.resolveFontWeight(propertyValue); break; + case FONT_SIZE: + value = CSSText.resolveFontSize(propertyValue, renderStyle, propertyName); + break; case FONT_STYLE: value = CSSText.resolveFontStyle(propertyValue); break; diff --git a/kraken/lib/src/css/style_property.dart b/kraken/lib/src/css/style_property.dart index 96d5530b8f..c2299a52ec 100644 --- a/kraken/lib/src/css/style_property.dart +++ b/kraken/lib/src/css/style_property.dart @@ -577,7 +577,7 @@ class CSSStyleProperty { ) { weight = value; } else if (size == null - && (isValueVariableFunction || CSSLength.isNonNegativeLength(value)) + && (isValueVariableFunction || CSSText.isValidFontSizeValue(value)) ) { size = value; } else if (value == '/') { diff --git a/kraken/lib/src/css/text.dart b/kraken/lib/src/css/text.dart index 150e45fe2f..fa5f9ce16c 100644 --- a/kraken/lib/src/css/text.dart +++ b/kraken/lib/src/css/text.dart @@ -516,6 +516,20 @@ class CSSText { } } + static bool isValidFontSizeValue(String value) { + return CSSLength.isNonNegativeLength(value) || + value == 'xx-small' || + value == 'x-small' || + value == 'small' || + value == 'medium' || + value == 'large' || + value == 'x-large' || + value == 'xx-large' || + value == 'xxx-large' || + value == 'larger' || + value == 'smaller'; + } + static bool isValidLineHeightValue(String value) { return CSSLength.isNonNegativeLength(value) || CSSPercentage.isNonNegativePercentage(value) || value == 'normal' || double.tryParse(value) != null; @@ -658,6 +672,37 @@ class CSSText { } } + // https://drafts.csswg.org/css-fonts/#absolute-size-mapping + static CSSLengthValue resolveFontSize( + String fontSize, RenderStyle renderStyle, String propertyName) { + switch (fontSize) { + case 'xx-small': + return CSSLengthValue(3 / 5 * 16, CSSLengthType.PX); + case 'x-small': + return CSSLengthValue(3 / 4 * 16, CSSLengthType.PX); + case 'small': + return CSSLengthValue(8 / 9 * 16, CSSLengthType.PX); + case 'medium': + return CSSLengthValue(16, CSSLengthType.PX); + case 'large': + return CSSLengthValue(6 / 5 * 16, CSSLengthType.PX); + case 'x-large': + return CSSLengthValue(3 / 2 * 16, CSSLengthType.PX); + case 'xx-large': + return CSSLengthValue(2 / 1 * 16, CSSLengthType.PX); + case 'xxx-large': + return CSSLengthValue(3 / 1 * 16, CSSLengthType.PX); + case 'smaller': + return CSSLengthValue( + 5 / 6, CSSLengthType.EM, renderStyle, propertyName); + case 'larger': + return CSSLengthValue( + 6 / 5, CSSLengthType.EM, renderStyle, propertyName); + default: + return CSSLength.parseLength(fontSize, renderStyle, propertyName); + } + } + static FontStyle resolveFontStyle(String? fontStyle) { switch (fontStyle) { case 'oblique': diff --git a/kraken/lib/src/css/transition.dart b/kraken/lib/src/css/transition.dart index 521fe99d46..5b8231d584 100644 --- a/kraken/lib/src/css/transition.dart +++ b/kraken/lib/src/css/transition.dart @@ -2,12 +2,10 @@ * Copyright (C) 2021-present The Kraken authors. All rights reserved. */ -import 'dart:ui'; - +import 'package:flutter/rendering.dart'; import 'package:flutter/animation.dart' show Curve; import 'package:kraken/css.dart'; import 'package:kraken/dom.dart'; -import 'package:vector_math/vector_math_64.dart'; // CSS Transitions: https://drafts.csswg.org/css-transitions/ const String _0s = '0s'; @@ -107,12 +105,23 @@ void _updateTransform(Matrix4 begin, Matrix4 end, double t, String property, CSS renderStyle.transformMatrix = newMatrix4; } +CSSOrigin? _parseTransformOrigin(String value, RenderStyle renderStyle, String property) { + return CSSOrigin.parseOrigin(value, renderStyle, property); +} + +void _updateTransformOrigin(CSSOrigin begin, CSSOrigin end, double progress, String property, CSSRenderStyle renderStyle) { + Offset offset = begin.offset + (end.offset - begin.offset) * progress; + Alignment alignment = begin.alignment + (end.alignment - begin.alignment) * progress; + renderStyle.transformOrigin = CSSOrigin(offset, alignment); +} + const List _colorHandler = [_parseColor, _updateColor]; const List _lengthHandler = [_parseLength, _updateLength]; const List _fontWeightHandler = [_parseFontWeight, _updateFontWeight]; const List _numberHandler = [_parseNumber, _updateNumber]; const List _lineHeightHandler = [_parseLineHeight, _updateLineHeight]; const List _transformHandler = [_parseTransform, _updateTransform]; +const List _transformOriginHandler = [_parseTransformOrigin, _updateTransformOrigin]; Map> CSSTransitionHandlers = { COLOR: _colorHandler, @@ -130,6 +139,7 @@ Map> CSSTransitionHandlers = { FONT_WEIGHT: _fontWeightHandler, LINE_HEIGHT: _lineHeightHandler, TRANSFORM: _transformHandler, + TRANSFORM_ORIGIN: _transformOriginHandler, BORDER_BOTTOM_LEFT_RADIUS: _lengthHandler, BORDER_BOTTOM_RIGHT_RADIUS: _lengthHandler, BORDER_TOP_LEFT_RADIUS: _lengthHandler, diff --git a/kraken/lib/src/css/value.dart b/kraken/lib/src/css/value.dart index 18f52bf336..f9c85bb4a6 100644 --- a/kraken/lib/src/css/value.dart +++ b/kraken/lib/src/css/value.dart @@ -46,6 +46,7 @@ Map CSSInitialValues = { TOP: AUTO, TEXT_SHADOW: '0px 0px 0px transparent', TRANSFORM: 'matrix3d(${CSSMatrix.initial.storage.join(',')})', + TRANSFORM_ORIGIN: '50% 50% 0', VERTICAL_ALIGN: ZERO, VISIBILITY: VISIBLE, WORD_SPACING: NORMAL, diff --git a/kraken/lib/src/dom/document.dart b/kraken/lib/src/dom/document.dart index babef11c91..ad08a6e3e9 100644 --- a/kraken/lib/src/dom/document.dart +++ b/kraken/lib/src/dom/document.dart @@ -192,7 +192,6 @@ class Document extends Node { @override void dispose() { - _viewport?.dispose(); _viewport = null; gestureListener = null; widgetDelegate = null; diff --git a/kraken/lib/src/dom/elements/script.dart b/kraken/lib/src/dom/elements/script.dart index d7df336cc4..03c78fe841 100644 --- a/kraken/lib/src/dom/elements/script.dart +++ b/kraken/lib/src/dom/elements/script.dart @@ -29,7 +29,8 @@ class ScriptRunner { final int _contextId; final List _syncScriptTasks = []; - final List _asyncScriptTasks = []; + // Indicate the sync pending scripts. + int _resolvingCount = 0; static void _evaluateScriptBundle(int contextId, KrakenBundle bundle, { bool async = false }) async { // Evaluate bundle. @@ -64,18 +65,22 @@ class ScriptRunner { // The bundle execution task. void task(bool async) { // If bundle is not resolved, should wait for it resolve to prevent the next script running. - if (!bundle.isResolved) return; + assert(bundle.isResolved, '${bundle.url} is not resolved'); try { _evaluateScriptBundle(_contextId, bundle, async: async); } catch (err, stack) { debugPrint('$err\n$stack'); - bundle.dispose(); _document.decrementLoadEventDelayCount(); - rethrow; + return; + } finally { + bundle.dispose(); } - bundle.dispose(); + // Dispatch the load event. + Timer.run(() { + element.dispatchEvent(Event(EVENT_LOAD)); + }); // Decrement load event delay count after eval. _document.decrementLoadEventDelayCount(); @@ -83,66 +88,59 @@ class ScriptRunner { // @TODO: Differ async and defer. final bool shouldAsync = element.async || element.defer; - if (shouldAsync) { - _asyncScriptTasks.add(task); - } else { + if (!shouldAsync) { _syncScriptTasks.add(task); + _resolvingCount++; } // Script loading phrase. + // Increment count when request. + _document.incrementRequestCount(); try { - // Increment count when request. - _document.incrementRequestCount(); - await bundle.resolve(_contextId); - assert(bundle.isResolved, 'Failed to obtain ${bundle.url}'); - // Decrement count when response. - _document.decrementRequestCount(); + if (!bundle.isResolved) { + throw FlutterError('Network error.'); + } } catch (e, st) { // A load error occurred. - debugPrint('Failed to load script: $url, reason: $e\n$st'); + debugPrint('Failed to load: $url, reason: $e\n$st'); Timer.run(() { element.dispatchEvent(Event(EVENT_ERROR)); }); _document.decrementLoadEventDelayCount(); + // Cancel failed task. + _syncScriptTasks.remove(task); return; + } finally { + // Decrease the resolving count. + if (!shouldAsync) { + _resolvingCount--; + } + + // Decrement count when response. + _document.decrementRequestCount(); } // Script executing phrase. if (shouldAsync) { // @TODO: Use requestIdleCallback SchedulerBinding.instance!.scheduleFrameCallback((_) { - try { - _execute(_asyncScriptTasks, async: true); - } catch (error, stack) { - debugPrint('$error\n$stack'); - } finally { - Timer.run(() { - element.dispatchEvent(Event(EVENT_LOAD)); - }); - } + task(shouldAsync); }); } else { - try { - _execute(_syncScriptTasks, async: false); - } catch (error, stack) { - debugPrint('$error\n$stack'); - } finally { - // Always emit load event. - Timer.run(() { - element.dispatchEvent(Event(EVENT_LOAD)); - }); - } + scheduleMicrotask(() { + if (_resolvingCount == 0) { + _execute(_syncScriptTasks, async: false); + } + }); } } } // https://www.w3.org/TR/2011/WD-html5-author-20110809/the-link-element.html class ScriptElement extends Element { - ScriptElement([BindingContext? context]) - : super(context, defaultStyle: _defaultStyle) { - } + ScriptElement([BindingContext? context]) : super(context, defaultStyle: _defaultStyle); final String _type = _MIME_TEXT_JAVASCRIPT; diff --git a/kraken/lib/src/gesture/scroll_position.dart b/kraken/lib/src/gesture/scroll_position.dart index f4dde00042..7cd2953551 100644 --- a/kraken/lib/src/gesture/scroll_position.dart +++ b/kraken/lib/src/gesture/scroll_position.dart @@ -570,6 +570,21 @@ abstract class ScrollPosition extends ViewportOffset with ScrollMetrics { @override void jumpTo(double? value); + /// Changes the scrolling position based on a pointer signal from current + /// value to delta without animation and without checking if new value is in + /// range, taking min/max scroll extent into account. + /// + /// Any active animation is canceled. If the user is currently scrolling, that + /// action is canceled. + /// + /// This method dispatches the start/update/end sequence of scrolling + /// notifications. + /// + /// This method is very similar to [jumpTo], but [pointerScroll] will + /// update the [ScrollDirection]. + /// + void pointerScroll(double delta); + /// Calls [jumpTo] if duration is null or [Duration.zero], otherwise /// [animateTo] is called. /// diff --git a/kraken/lib/src/gesture/scroll_position_with_single_context.dart b/kraken/lib/src/gesture/scroll_position_with_single_context.dart index f158aa7507..9fd9b33cae 100644 --- a/kraken/lib/src/gesture/scroll_position_with_single_context.dart +++ b/kraken/lib/src/gesture/scroll_position_with_single_context.dart @@ -6,6 +6,7 @@ // found in the LICENSE file. import 'dart:async'; +import 'dart:math' as math; import 'package:flutter/animation.dart'; import 'package:flutter/gestures.dart'; @@ -148,6 +149,15 @@ class ScrollPositionWithSingleContext extends ScrollPosition implements ScrollAc ScrollDirection get userScrollDirection => _userScrollDirection; ScrollDirection _userScrollDirection = ScrollDirection.idle; + /// Set [userScrollDirection] to the given value. + /// + /// If this changes the value, then a [UserScrollNotification] is dispatched. + void updateUserScrollDirection(ScrollDirection value) { + if (userScrollDirection == value) + return; + _userScrollDirection = value; + } + @override Future animateTo( double? to, { @@ -182,6 +192,24 @@ class ScrollPositionWithSingleContext extends ScrollPosition implements ScrollAc goBallistic(0.0); } + @override + void pointerScroll(double delta) { + assert(delta != 0.0); + + final double targetPixels = + math.min(math.max(pixels + delta, minScrollExtent), maxScrollExtent); + if (targetPixels != pixels) { + goIdle(); + updateUserScrollDirection( + -delta > 0.0 ? ScrollDirection.forward : ScrollDirection.reverse, + ); + forcePixels(targetPixels); + isScrollingNotifier.value = true; + notifyListeners(); + goBallistic(0.0); + } + } + @Deprecated( 'This will lead to bugs.') // ignore: flutter_deprecation_syntax, https://github.com/flutter/flutter/issues/44609 @override diff --git a/kraken/lib/src/gesture/scrollable.dart b/kraken/lib/src/gesture/scrollable.dart index bf99efc404..42ddf79fb3 100644 --- a/kraken/lib/src/gesture/scrollable.dart +++ b/kraken/lib/src/gesture/scrollable.dart @@ -3,6 +3,7 @@ */ import 'package:flutter/gestures.dart'; +import 'dart:math' as math; import 'package:flutter/physics.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/scheduler.dart'; @@ -77,6 +78,10 @@ class KrakenScrollable with _CustomTickerProviderStateMixin implements ScrollCon } } + void handlePinterSignal(PointerSignalEvent event) { + _receivedPointerSignal(event); + } + @override AxisDirection get axisDirection => _axisDirection; @@ -205,6 +210,46 @@ class KrakenScrollable with _CustomTickerProviderStateMixin implements ScrollCon _drag?.update(details); } + void _receivedPointerSignal(PointerSignalEvent event) { + if (event is PointerScrollEvent && position != null) { + if (!_physics.shouldAcceptUserOffset(position!)) { + return; + } + final double delta = _pointerSignalEventDelta(event); + final double targetScrollOffset = _targetScrollOffsetForPointerScroll(delta); + // Only express interest in the event if it would actually result in a scroll. + if (delta != 0.0 && targetScrollOffset != position?.pixels) { + GestureBinding.instance!.pointerSignalResolver.register(event, _handlePointerScroll); + } + } + } + double _pointerSignalEventDelta(PointerScrollEvent event) { + double delta = axis == Axis.horizontal + ? event.scrollDelta.dx + : event.scrollDelta.dy; + + if (axisDirectionIsReversed(axisDirection)) { + delta *= -1; + } + return delta; + } + + double _targetScrollOffsetForPointerScroll(double delta) { + return math.min( + math.max(position!.pixels + delta, position!.minScrollExtent), + position!.maxScrollExtent, + ); + } + + void _handlePointerScroll(PointerSignalEvent event) { + assert(event is PointerScrollEvent); + final double delta = _pointerSignalEventDelta(event as PointerScrollEvent); + final double targetScrollOffset = _targetScrollOffsetForPointerScroll(delta); + if (delta != 0.0 && targetScrollOffset != position!.pixels) { + position!.pointerScroll(delta); + } + } + void _handleDragEnd(DragEndDetails details) { // _drag might be null if the drag activity ended and called _disposeDrag. assert(_hold == null || _drag == null); diff --git a/kraken/lib/src/rendering/sliver_list.dart b/kraken/lib/src/rendering/sliver_list.dart index 5cac0129dc..4c6ab31193 100644 --- a/kraken/lib/src/rendering/sliver_list.dart +++ b/kraken/lib/src/rendering/sliver_list.dart @@ -5,6 +5,7 @@ import 'dart:ui'; import 'package:flutter/foundation.dart'; +import 'package:flutter/gestures.dart'; import 'package:flutter/rendering.dart'; import 'package:kraken/css.dart'; import 'package:kraken/gesture.dart'; @@ -124,6 +125,8 @@ class RenderSliverListLayout extends RenderLayoutBox { void _scrollablePointerListener(PointerEvent event) { if (event is PointerDownEvent) { scrollable.handlePointerDown(event); + } else if (event is PointerSignalEvent) { + scrollable.handlePinterSignal(event); } } @@ -255,6 +258,13 @@ class RenderSliverListLayout extends RenderLayoutBox { return false; } + + @override + void applyPaintTransform(RenderBox child, Matrix4 transform) { + super.applyPaintTransform(child, transform); + transform.translate(scrollLeft, scrollTop); + } + Offset getChildScrollOffset(RenderObject child, Offset offset) { final RenderLayoutParentData? childParentData = child.parentData as RenderLayoutParentData?; diff --git a/kraken/lib/src/rendering/text_control.dart b/kraken/lib/src/rendering/text_control.dart index 082920b152..de6cc69105 100644 --- a/kraken/lib/src/rendering/text_control.dart +++ b/kraken/lib/src/rendering/text_control.dart @@ -3,6 +3,7 @@ */ import 'dart:math' as math; +import 'package:flutter/gestures.dart'; import 'package:flutter/rendering.dart'; import 'package:kraken/css.dart'; import 'package:kraken/dom.dart'; @@ -26,6 +27,8 @@ class RenderTextControlLeaderLayer extends RenderLeaderLayer { void _pointerListener(PointerEvent event) { if (event is PointerDownEvent) { scrollable.handlePointerDown(event); + } else if (event is PointerSignalEvent) { + scrollable.handlePinterSignal(event); } } diff --git a/kraken/lib/src/widget/text_control.dart b/kraken/lib/src/widget/text_control.dart index 21cdf879d0..c68b7b9077 100644 --- a/kraken/lib/src/widget/text_control.dart +++ b/kraken/lib/src/widget/text_control.dart @@ -27,23 +27,23 @@ typedef OnControllerCreated = void Function(KrakenController controller); /// Delegate methods of widget class WidgetDelegate { - GetContext getContext; - RequestFocus requestFocus; - GetTargetPlatform getTargetPlatform; - GetCursorColor getCursorColor; - GetSelectionColor getSelectionColor; - GetCursorRadius getCursorRadius; - GetTextSelectionControls getTextSelectionControls; - - WidgetDelegate( - this.getContext, - this.requestFocus, - this.getTargetPlatform, - this.getCursorColor, - this.getSelectionColor, - this.getCursorRadius, - this.getTextSelectionControls, - ); + final GetContext getContext; + final RequestFocus requestFocus; + final GetTargetPlatform getTargetPlatform; + final GetCursorColor getCursorColor; + final GetSelectionColor getSelectionColor; + final GetCursorRadius getCursorRadius; + final GetTextSelectionControls getTextSelectionControls; + + const WidgetDelegate( + this.getContext, + this.requestFocus, + this.getTargetPlatform, + this.getCursorColor, + this.getSelectionColor, + this.getCursorRadius, + this.getTextSelectionControls, + ); } // Widget involves actions of text control elements(input, textarea). diff --git a/package.json b/package.json index 5d9dbe35a5..3f9eed2557 100644 --- a/package.json +++ b/package.json @@ -43,5 +43,8 @@ "uuid": "^8.3.2", "ws": "^7.3.0", "http-server": "^14.1.0" + }, + "dependencies": { + "prepend-file": "^2.0.1" } } diff --git a/scripts/pre_publish_kraken.js b/scripts/pre_publish_kraken.js new file mode 100644 index 0000000000..40a04fe118 --- /dev/null +++ b/scripts/pre_publish_kraken.js @@ -0,0 +1,41 @@ +const exec = require("child_process").execSync; +const fs = require("fs"); +const PATH = require("path"); + +function symbolicToRealFile(path) { + let realPath = PATH.join(path, "../", fs.readlinkSync(path)); + + if (fs.lstatSync(realPath).isDirectory()) { + exec(`rm ${path}`); + exec(`cp -r ${realPath} ${path}`); + } else { + let buffer = fs.readFileSync(realPath); + fs.rmSync(path); + fs.writeFileSync(path, buffer); + } +} + +const krakenDir = PATH.join(__dirname, "../kraken"); + +const files = [ + "android/jniLibs/arm64-v8a/libc++_shared.so", + "android/jniLibs/arm64-v8a/libkraken.so", + "android/jniLibs/arm64-v8a/libquickjs.so", + "android/jniLibs/armeabi-v7a/libc++_shared.so", + "android/jniLibs/armeabi-v7a/libkraken.so", + "android/jniLibs/armeabi-v7a/libquickjs.so", + "android/jniLibs/x86/libc++_shared.so", + "android/jniLibs/x86/libkraken.so", + "android/jniLibs/x86/libquickjs.so", + "ios/kraken_bridge.xcframework", + "ios/quickjs.xcframework", + "linux/libkraken.so", + "linux/libquickjs.so", + "macos/libkraken.dylib", + "macos/libquickjs.dylib", +]; + +for (let file of files) { + symbolicToRealFile(PATH.join(krakenDir, file)); +} + diff --git a/scripts/set_up_nightly_release.js b/scripts/set_up_nightly_release.js index 753a248698..cfce10e36f 100644 --- a/scripts/set_up_nightly_release.js +++ b/scripts/set_up_nightly_release.js @@ -1,19 +1,48 @@ -const exec = require('child_process').execSync; -const fs = require('fs'); -const path = require('path'); +const exec = require("child_process").execSync; +const fs = require("fs"); +const path = require("path"); +const prependFile = require('prepend-file'); function getCurrentGitRev() { - return exec('git rev-parse --short HEAD', {encoding: 'utf-8'}).trim(); + return exec("git rev-parse --short HEAD", { encoding: "utf-8" }).trim(); } function setPubVersion(version) { - const pubSepcPath = path.join(__dirname, '../kraken/pubspec.yaml'); - const pubSpec = fs.readFileSync(pubSepcPath, {encoding: 'utf-8'}) - const replaced = pubSpec.replace(/version: ([\d\w.+]+)/, 'version: $1-nightly.' + version); + const pubSepcPath = path.join(__dirname, "../kraken/pubspec.yaml"); + const pubSpec = fs.readFileSync(pubSepcPath, { encoding: "utf-8" }); + const replaced = pubSpec.replace( + /version: ([\d\w.+]+)/, + "version: $1-nightly." + version + ); fs.writeFileSync(pubSepcPath, replaced); + + return replaced; +} + +function setChangeLog(version) { + const pubSepcPath = path.join(__dirname, "../kraken/pubspec.yaml"); + const pubSpec = fs.readFileSync(pubSepcPath, { encoding: "utf-8" }); + const baseVersion = pubSpec.match( + /version: ([\d\w.+]+)/, + ); + + const changeLogpath = path.join(__dirname, '../kraken/CHANGELOG.md'); + prependFile(changeLogpath, `## ${baseVersion[1]}-nightly.${version} +nightly version. +`); +} + +function getDate() { + var today = new Date(); + var dd = String(today.getDate()).padStart(2, "0"); + var mm = String(today.getMonth() + 1).padStart(2, "0"); //January is 0! + var yyyy = today.getFullYear(); + + return mm + "-" + dd + "-" + yyyy; } +let nightlyVersion = getDate() + '-' + getCurrentGitRev(); -let currentGitRev = getCurrentGitRev(); -setPubVersion(currentGitRev); +setPubVersion(nightlyVersion); +setChangeLog(nightlyVersion); diff --git a/scripts/tasks.js b/scripts/tasks.js index 519b2ddf5a..ce50ce93d8 100644 --- a/scripts/tasks.js +++ b/scripts/tasks.js @@ -596,11 +596,11 @@ task('build-android-kraken-lib', (done) => { } else { androidHome = path.join(process.env.HOME, 'Library/Android/sdk') } - const ndkVersion = '21.4.7075529'; + const ndkVersion = '23.2.8568313'; ndkDir = path.join(androidHome, 'ndk', ndkVersion); if (!fs.existsSync(ndkDir)) { - throw new Error('Android NDK version (21.4.7075529) not installed.'); + throw new Error('Android NDK version (23.2.8568313) not installed.'); } } @@ -669,8 +669,8 @@ task('build-android-kraken-lib', (done) => { // Strip release binary in release mode. if (buildMode === 'Release' || buildMode === 'RelWithDebInfo') { - const strip = path.join(ndkDir, `./toolchains/llvm/prebuilt/${os.platform()}-x86_64/${toolChainMap[arch]}/bin/strip`); - const objcopy = path.join(ndkDir, `./toolchains/llvm/prebuilt/${os.platform()}-x86_64/${toolChainMap[arch]}/bin/objcopy`); + const strip = path.join(ndkDir, `./toolchains/llvm/prebuilt/${os.platform()}-x86_64/bin/llvm-strip`); + const objcopy = path.join(ndkDir, `./toolchains/llvm/prebuilt/${os.platform()}-x86_64/bin/llvm-objcopy`); for (let soFileName of soFileNames) { const soBinaryFile = path.join(soBinaryDirectory, soFileName + '.so');