From 6e6216de35e3eead5b5af156ba3afc582b460894 Mon Sep 17 00:00:00 2001 From: Daniel LaCosse <3759828+daniellacosse@users.noreply.github.com> Date: Wed, 9 Aug 2023 10:39:48 -0500 Subject: [PATCH] a commit lol --- README.md | 6 +- commitlint.config.js | 27 +- .../.browserslistrc | 0 .eslintignore => outline_client/.eslintignore | 0 .../.eslintrc.json | 0 .../.prettierignore | 0 .../.prettierrc.json | 0 .../build/electron/electron/index.js | 6 + .../build/electron/electron/preload.js | 6 + config.xml => outline_client/config.xml | 0 .../docs}/invitation-instructions.md | 4 +- .../docs}/invitation_instructions.md | 0 .../docs}/life_of_a_packet.md | 0 .../resources/invitation_instructions_001.png | Bin .../resources/invitation_instructions_002.png | Bin .../resources/invitation_instructions_003.png | Bin .../list.action.mjs | 0 outline_client/package-lock.json | 35448 +++++ outline_client/package.json | 159 + .../resources}/electron/icon.png | Bin .../resources}/icons/android/icon_hdpi.png | Bin .../resources}/icons/android/icon_mdpi.png | Bin .../resources}/icons/android/icon_xhdpi.png | Bin .../resources}/icons/android/icon_xxhdpi.png | Bin .../resources}/icons/android/icon_xxxhdpi.png | Bin .../resources}/icons/ios/Icon-20@2x.png | Bin .../resources}/icons/ios/Icon-20@3x.png | Bin .../resources}/icons/ios/Icon-29@1x.png | Bin .../resources}/icons/ios/Icon-29@2x.png | Bin .../resources}/icons/ios/Icon-29@3x.png | Bin .../resources}/icons/ios/Icon-40@2x.png | Bin .../resources}/icons/ios/Icon-40@3x.png | Bin .../resources}/icons/ios/Icon-50@1x.png | Bin .../resources}/icons/ios/Icon-50@2x.png | Bin .../resources}/icons/ios/Icon-512@2x.png | Bin .../resources}/icons/ios/Icon-57@1x.png | Bin .../resources}/icons/ios/Icon-57@2x.png | Bin .../resources}/icons/ios/Icon-60@2x.png | Bin .../resources}/icons/ios/Icon-60@3x.png | Bin .../resources}/icons/ios/Icon-72@1x.png | Bin .../resources}/icons/ios/Icon-72@2x.png | Bin .../resources}/icons/ios/Icon-76@1x.png | Bin .../resources}/icons/ios/Icon-76@2x.png | Bin .../resources}/icons/ios/Icon-83.5@2x.png | Bin .../resources}/icons/osx/icon-1024.png | Bin .../resources}/icons/osx/icon-128.png | Bin .../resources}/icons/osx/icon-16.png | Bin .../resources}/icons/osx/icon-256.png | Bin .../resources}/icons/osx/icon-32.png | Bin .../resources}/icons/osx/icon-512.png | Bin .../resources}/icons/osx/icon-64.png | Bin .../resources}/original_messages.json | 0 .../android/splashscreen_hdpi.png | Bin .../android/splashscreen_xhdpi.png | Bin .../android/splashscreen_xxhdpi.png | Bin .../android/splashscreen_xxxhdpi.png | Bin .../ios/splashscreen@2x~universal~anyany.png | Bin .../resources}/tray/connected.png | Bin .../resources}/tray/disconnected.png | Bin .../src}/build/download_file.mjs | 0 .../src}/build/get_build_parameters.mjs | 0 .../src}/build/get_file_checksum.mjs | 0 .../src}/build/get_root_dir.mjs | 2 +- .../src}/build/get_webpack_build_mode.mjs | 0 .../src}/build/run_action.mjs | 2 +- .../src}/build/run_webpack.mjs | 0 .../src}/build/spawn_stream.mjs | 0 .../android/OutlineAndroidLib/.gitignore | 0 .../android/OutlineAndroidLib/build.gradle | 0 .../OutlineAndroidLib/gradle.properties | 0 .../gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 0 .../cordova/android/OutlineAndroidLib/gradlew | 0 .../android/OutlineAndroidLib/gradlew.bat | 0 .../OutlineAndroidLib/outline/.gitignore | 0 .../OutlineAndroidLib/outline/build.gradle | 0 .../outline/consumer-rules.pro | 0 .../outline/proguard-rules.pro | 0 .../org/outline/vpn/VpnTunnelStoreTest.java | 0 .../outline/src/main/AndroidManifest.xml | 0 .../aidl/org/outline/IVpnTunnelService.aidl | 0 .../main/aidl/org/outline/TunnelConfig.aidl | 0 .../shadowsocks/ShadowsocksConfig.aidl | 0 .../java/org/outline/log/OutlineLogger.java | 0 .../org/outline/log/SentryErrorReporter.java | 0 .../org/outline/vpn/VpnServiceStarter.java | 0 .../main/java/org/outline/vpn/VpnTunnel.java | 0 .../org/outline/vpn/VpnTunnelService.java | 0 .../java/org/outline/vpn/VpnTunnelStore.java | 0 .../java/org/outline/vpn/VpnTunnelTest.java | 0 .../android/OutlineAndroidLib/settings.gradle | 0 .../src}/cordova/android/README.md | 0 .../cordova/android/get_native_locale.mjs | 0 .../cordova/apple/OutlineAppleLib/.gitignore | 0 .../apple/OutlineAppleLib/Package.swift | 0 .../cordova/apple/OutlineAppleLib/README.md | 0 .../OutlineSentryLogger.swift | 0 .../Sources/OutlineTunnel/OutlineTunnel.swift | 0 .../OutlineTunnel/OutlineTunnelStore.swift | 0 .../Sources/OutlineTunnel/OutlineVpn.swift | 0 .../Sources/OutlineTunnel/Subnet.swift | 0 .../PacketTunnelProvider.m | 0 .../include/PacketTunnelProvider.h | 0 .../OutlineTunnelTest/OutlineTunnelTest.swift | 0 .../src}/cordova/apple/README.md | 0 .../ios.xcworkspace/contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../xcshareddata/WorkspaceSettings.xcsettings | 0 .../xcshareddata/swiftpm/Package.resolved | 0 .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../xcshareddata/WorkspaceSettings.xcsettings | 0 .../xcshareddata/swiftpm/Package.resolved | 0 .../src}/cordova/apple/scripts/xconfig.sh | 0 .../ios/Outline.xcodeproj/project.pbxproj | 0 .../xcshareddata/xcschemes/Outline.xcscheme | 0 .../xcschemes/VpnExtension.xcscheme | 0 .../xcode/ios/Outline/Outline-Info.plist | 0 .../xcode/ios/Outline/Outline.entitlements | 0 .../xcode/ios/Outline/VpnExtension-Info.plist | 0 .../ios/Outline/VpnExtension.entitlements | 0 .../macos/Outline.xcodeproj/project.pbxproj | 0 .../xcshareddata/xcschemes/Outline.xcscheme | 0 .../xcschemes/OutlineLauncher.xcscheme | 0 .../xcschemes/VpnExtension.xcscheme | 0 .../xcode/macos/Outline/Classes/AppDelegate.m | 0 .../Outline/Classes/CDVMacOsUrlHandler.swift | 0 .../macos/Outline/Classes/EventMonitor.swift | 0 .../Contents.json | 0 .../outline-black-off-2x.png | Bin .../Contents.json | 0 .../outline-black-on-2x.png | Bin .../macos/Outline/MainViewController.xib | 0 .../xcode/macos/Outline/Outline-Info.plist | 0 .../xcode/macos/Outline/Outline.entitlements | 0 .../macos/Outline/VpnExtension-Info.plist | 0 .../macos/Outline/VpnExtension.entitlements | 0 .../apple/xcode/macos/Outline/config.xml | 0 .../macos/OutlineLauncher/AppDelegate.swift | 0 .../Base.lproj/Main.storyboard | 0 .../xcode/macos/OutlineLauncher/Info.plist | 0 .../OutlineLauncher.entitlements | 0 .../src}/cordova/apple/xcode/macos/osx.json | 0 .../apple/xcode/macos/www/cordova_plugins.js | 0 .../src}/cordova/build.action.mjs | 0 .../src}/cordova/import_messages.action.mjs | 0 .../src}/cordova/plugin/README.md | 0 .../plugin/android/java/build-extras.gradle | 0 .../java/org/outline/OutlinePlugin.java | 0 .../android/resources/bypass_subnets.xml | 0 .../plugin/android/resources/small_icon.png | Bin .../resources/strings/values-af/strings.xml | 0 .../resources/strings/values-am/strings.xml | 0 .../resources/strings/values-ar/strings.xml | 0 .../resources/strings/values-az/strings.xml | 0 .../strings/values-b+sr+Latn/strings.xml | 0 .../resources/strings/values-bg/strings.xml | 0 .../resources/strings/values-bn/strings.xml | 0 .../resources/strings/values-bs/strings.xml | 0 .../resources/strings/values-ca/strings.xml | 0 .../resources/strings/values-cs/strings.xml | 0 .../resources/strings/values-da/strings.xml | 0 .../resources/strings/values-de/strings.xml | 0 .../resources/strings/values-el/strings.xml | 0 .../strings/values-en-rGB/strings.xml | 0 .../resources/strings/values-en/strings.xml | 0 .../resources/strings/values-es/strings.xml | 0 .../resources/strings/values-et/strings.xml | 0 .../resources/strings/values-fa/strings.xml | 0 .../resources/strings/values-fi/strings.xml | 0 .../resources/strings/values-fil/strings.xml | 0 .../resources/strings/values-fr/strings.xml | 0 .../resources/strings/values-he/strings.xml | 0 .../resources/strings/values-hi/strings.xml | 0 .../resources/strings/values-hr/strings.xml | 0 .../resources/strings/values-hu/strings.xml | 0 .../resources/strings/values-hy/strings.xml | 0 .../resources/strings/values-id/strings.xml | 0 .../resources/strings/values-is/strings.xml | 0 .../resources/strings/values-it/strings.xml | 0 .../resources/strings/values-ja/strings.xml | 0 .../resources/strings/values-ka/strings.xml | 0 .../resources/strings/values-kk/strings.xml | 0 .../resources/strings/values-km/strings.xml | 0 .../resources/strings/values-ko/strings.xml | 0 .../resources/strings/values-lo/strings.xml | 0 .../resources/strings/values-lt/strings.xml | 0 .../resources/strings/values-lv/strings.xml | 0 .../resources/strings/values-mk/strings.xml | 0 .../resources/strings/values-mn/strings.xml | 0 .../resources/strings/values-mr/strings.xml | 0 .../resources/strings/values-ms/strings.xml | 0 .../resources/strings/values-my/strings.xml | 0 .../resources/strings/values-ne/strings.xml | 0 .../resources/strings/values-nl/strings.xml | 0 .../resources/strings/values-no/strings.xml | 0 .../resources/strings/values-pl/strings.xml | 0 .../strings/values-pt-rBR/strings.xml | 0 .../strings/values-pt-rPT/strings.xml | 0 .../resources/strings/values-ro/strings.xml | 0 .../resources/strings/values-ru/strings.xml | 0 .../resources/strings/values-si/strings.xml | 0 .../resources/strings/values-sk/strings.xml | 0 .../resources/strings/values-sl/strings.xml | 0 .../resources/strings/values-sq/strings.xml | 0 .../resources/strings/values-sr/strings.xml | 0 .../resources/strings/values-sv/strings.xml | 0 .../resources/strings/values-sw/strings.xml | 0 .../resources/strings/values-ta/strings.xml | 0 .../resources/strings/values-th/strings.xml | 0 .../resources/strings/values-tr/strings.xml | 0 .../resources/strings/values-uk/strings.xml | 0 .../resources/strings/values-ur/strings.xml | 0 .../resources/strings/values-vi/strings.xml | 0 .../strings/values-zh-rCN/strings.xml | 0 .../strings/values-zh-rTW/strings.xml | 0 .../resources/strings/values/strings.xml | 0 .../android/scripts/copy_third_party.js | 0 .../plugin/apple/src/OutlinePlugin.swift | 0 .../apple/src/macos/Outline-Bridging-Header.h | 0 .../src}/cordova/plugin/package.json | 0 .../src}/cordova/plugin/plugin.xml | 0 .../src}/cordova/setup.action.mjs | 0 .../src}/cordova/test.action.mjs | 0 .../src}/electron/README.md | 0 .../src}/electron/add_tap_device.bat | 0 .../src}/electron/build.action.mjs | 0 .../src}/electron/build_main.action.mjs | 0 .../src}/electron/custom_install_steps.nsh | 338 +- .../src}/electron/electron-builder.json | 0 .../src}/electron/find_tap_device_name.bat | 0 .../src}/electron/go_vpn_tunnel.ts | 0 .../src}/electron/icons/mac/icon.icns | Bin .../src}/electron/icons/png/1024x1024.png | Bin .../src}/electron/icons/png/128x128.png | Bin .../src}/electron/icons/png/16x16.png | Bin .../src}/electron/icons/png/24x24.png | Bin .../src}/electron/icons/png/256x256.png | Bin .../src}/electron/icons/png/32x32.png | Bin .../src}/electron/icons/png/48x48.png | Bin .../src}/electron/icons/png/512x512.png | Bin .../src}/electron/icons/png/64x64.png | Bin .../src}/electron/icons/win/icon.ico | Bin {src => outline_client/src}/electron/index.ts | 0 .../src}/electron/install_windows_service.bat | 0 .../src}/electron/preload.d.ts | 0 .../src}/electron/preload.ts | 0 .../src}/electron/process.ts | 0 .../src}/electron/routing_service.ts | 0 .../src}/electron/start.action.mjs | 0 .../src}/electron/tsconfig.json | 0 .../src}/electron/tunnel_store.ts | 0 .../src}/electron/types/socks/index.d.ts | 0 .../src}/electron/vpn_tunnel.ts | 0 .../src}/electron/webpack_electron_main.mjs | 0 .../digicert-usb-config/eToken-macos.cfg | 0 .../digicert-usb-config/eToken-windows.cfg | 0 .../electron_builder_signing_plugin.cjs | 0 .../sign_windows_executable.action.mjs | 0 .../src}/infrastructure/custom_error.ts | 0 .../src}/infrastructure/electron/app_paths.ts | 0 .../src}/infrastructure/memory_storage.ts | 0 .../src}/infrastructure/timeout_promise.ts | 0 .../src}/www/.storybook/localize.ts | 0 .../src}/www/.storybook/main.js | 0 .../src}/www/.storybook/preview-head.html | 0 .../src}/www/.storybook/preview.js | 0 {src => outline_client/src}/www/TODO.spec.ts | 0 .../src}/www/app/app.spec.ts | 0 {src => outline_client/src}/www/app/app.ts | 0 .../src}/www/app/clipboard.ts | 0 .../src}/www/app/cordova_main.ts | 0 .../src}/www/app/electron_main.ts | 0 .../src}/www/app/electron_outline_tunnel.ts | 0 .../src}/www/app/environment.ts | 0 .../src}/www/app/error_reporter.ts | 0 .../src}/www/app/fake_tunnel.ts | 0 {src => outline_client/src}/www/app/main.ts | 0 .../access_key_serialization.ts | 0 .../app/outline_server_repository/index.ts | 0 .../outline_server_repository.spec.ts | 0 .../app/outline_server_repository/server.ts | 0 .../src}/www/app/platform.ts | 0 .../src}/www/app/settings.spec.ts | 0 .../src}/www/app/settings.ts | 0 {src => outline_client/src}/www/app/tunnel.ts | 0 .../src}/www/app/updater.ts | 0 .../src}/www/app/url_interceptor.ts | 0 .../src}/www/app/vpn_installer.ts | 0 .../src}/www/assets/brand-logo.png | Bin .../src}/www/assets/circle.png | Bin .../src}/www/assets/icons/about.png | Bin .../src}/www/assets/icons/add.png | Bin .../src}/www/assets/icons/back.png | Bin .../src}/www/assets/icons/change_language.png | Bin .../src}/www/assets/icons/feedback.png | Bin .../src}/www/assets/icons/help.png | Bin .../src}/www/assets/icons/menu.png | Bin .../src}/www/assets/icons/outline.png | Bin .../src}/www/assets/icons/quit.png | Bin .../src}/www/assets/jigsaw-logo.png | Bin .../src}/www/assets/jigsaw-logo.svg | 0 .../src}/www/assets/logo-nav.png | Bin .../src}/www/assets/material_icons.woff2 | Bin .../src}/www/assets/outline-client-logo.png | Bin .../src}/www/assets/outline-client-logo.svg | 0 .../src}/www/assets/privacy-lock.png | Bin .../src}/www/build.action.mjs | 0 {src => outline_client/src}/www/favicon.ico | Bin .../src}/www/get_browser_webpack_config.mjs | 0 .../src}/www/index_cordova.html | 0 .../src}/www/index_electron.html | 0 {src => outline_client/src}/www/karma.conf.js | 0 .../src}/www/messages/af.json | 0 .../src}/www/messages/am.json | 0 .../src}/www/messages/ar.json | 0 .../src}/www/messages/az.json | 0 .../src}/www/messages/bg.json | 0 .../src}/www/messages/bn.json | 0 .../src}/www/messages/bs.json | 0 .../src}/www/messages/ca.json | 0 .../src}/www/messages/cs.json | 0 .../src}/www/messages/da.json | 0 .../src}/www/messages/de.json | 0 .../src}/www/messages/el.json | 0 .../src}/www/messages/en-GB.json | 0 .../src}/www/messages/en.json | 0 .../src}/www/messages/es-419.json | 0 .../src}/www/messages/es.json | 0 .../src}/www/messages/et.json | 0 .../src}/www/messages/fa.json | 0 .../src}/www/messages/fi.json | 0 .../src}/www/messages/fil.json | 0 .../src}/www/messages/fr.json | 0 .../src}/www/messages/he.json | 0 .../src}/www/messages/hi.json | 0 .../src}/www/messages/hr.json | 0 .../src}/www/messages/hu.json | 0 .../src}/www/messages/hy.json | 0 .../src}/www/messages/id.json | 0 .../src}/www/messages/is.json | 0 .../src}/www/messages/it.json | 0 .../src}/www/messages/ja.json | 0 .../src}/www/messages/ka.json | 0 .../src}/www/messages/kk.json | 0 .../src}/www/messages/km.json | 0 .../src}/www/messages/ko.json | 0 .../src}/www/messages/lo.json | 0 .../src}/www/messages/lt.json | 0 .../src}/www/messages/lv.json | 0 .../src}/www/messages/mk.json | 0 .../src}/www/messages/mn.json | 0 .../src}/www/messages/mr.json | 0 .../src}/www/messages/ms.json | 0 .../src}/www/messages/my.json | 0 .../src}/www/messages/ne.json | 0 .../src}/www/messages/nl.json | 0 .../src}/www/messages/no.json | 0 .../src}/www/messages/pl.json | 0 .../src}/www/messages/pt-BR.json | 0 .../src}/www/messages/pt-PT.json | 0 .../src}/www/messages/ro.json | 0 .../src}/www/messages/ru.json | 0 .../src}/www/messages/si.json | 0 .../src}/www/messages/sk.json | 0 .../src}/www/messages/sl.json | 0 .../src}/www/messages/sq.json | 0 .../src}/www/messages/sr-Latn.json | 0 .../src}/www/messages/sr.json | 0 .../src}/www/messages/sv.json | 0 .../src}/www/messages/sw.json | 0 .../src}/www/messages/ta.json | 0 .../src}/www/messages/th.json | 0 .../src}/www/messages/tr.json | 0 .../src}/www/messages/uk.json | 0 .../src}/www/messages/ur.json | 0 .../src}/www/messages/vi.json | 0 .../src}/www/messages/zh-CN.json | 0 .../src}/www/messages/zh-TW.json | 0 .../src}/www/model/errors.ts | 0 .../src}/www/model/events.spec.ts | 0 .../src}/www/model/events.ts | 0 .../src}/www/model/server.ts | 0 .../src}/www/start.action.mjs | 0 .../src}/www/storybook.action.mjs | 0 {src => outline_client/src}/www/style.css | 0 .../src}/www/test.action.mjs | 0 {src => outline_client/src}/www/tsconfig.json | 0 .../src}/www/types/clipboard.d.ts | 0 .../src}/www/types/shims.d.ts | 0 .../src}/www/types/webintents.d.ts | 0 .../src}/www/ui_components/about-view.js | 0 .../src}/www/ui_components/add-server-view.js | 0 .../src}/www/ui_components/app-root.js | 0 .../src}/www/ui_components/feedback-view.js | 0 .../src}/www/ui_components/language-view.js | 0 .../src}/www/ui_components/licenses-view.js | 0 .../src}/www/ui_components/licenses/README.md | 0 .../www/ui_components/licenses/licenses.txt | 0 .../www/ui_components/licenses/third_party.sh | 0 .../src}/www/ui_components/outline-icons.js | 0 .../src}/www/ui_components/privacy-view.js | 0 .../www/ui_components/server-rename-dialog.js | 0 .../www/ui_components/user-comms-dialog.js | 0 .../src}/www/views/servers_view/index.ts | 0 .../server_connection_indicator/index.ts | 0 .../server_connection_indicator/stories.ts | 0 .../views/servers_view/server_list/index.ts | 0 .../views/servers_view/server_list/stories.ts | 0 .../servers_view/server_list_item/index.ts | 0 .../server_list_item/server_card/index.ts | 0 .../server_list_item/server_card/stories.ts | 0 .../src}/www/webpack_base.mjs | 0 .../src}/www/webpack_cordova.mjs | 0 .../src}/www/webpack_css_rtl_loader.cjs | 0 .../src}/www/webpack_electron.mjs | 0 .../src}/www/webpack_test.mjs | 0 .../tools}/OutlineService/OutlineService.sln | 62 +- .../OutlineService/OutlineService/App.config | 10 +- .../OutlineService/OutlineService.Designer.cs | 108 +- .../OutlineService/OutlineService.cs | 2186 +- .../OutlineService/OutlineService.csproj | 182 +- .../OutlineService/OutlineService.resx | 244 +- .../OutlineService/OutlineService/Program.cs | 140 +- .../OutlineService/Properties/AssemblyInfo.cs | 100 +- .../OutlineService/bin/OutlineService.exe | Bin .../bin/Release/OutlineService.exe.config | 40 +- .../OutlineService/packages.config | 6 +- .../tools}/build/Dockerfile | 0 .../tools}/build/README.md | 0 .../tools}/build/android_tools_versions.sh | 0 .../tools}/build/build.action.sh | 0 .../tools}/build/build.sh | 0 .../tools}/build/setup_linux_android.sh | 0 .../tools}/build/setup_macos_android.sh | 0 .../find_tap_name/bin/386/find_tap_name.exe | Bin .../find_tap_name/bin/amd64/find_tap_name.exe | Bin .../tools}/find_tap_name/build.action.sh | 0 .../tools}/find_tap_name/main.go | 0 .../outline_proxy_controller/.gitignore | 0 .../outline_proxy_controller/CMakeLists.txt | 0 .../outline_proxy_controller/Dockerfile | 0 .../OutlineProxyControllerConfig.h.in | 0 .../tools}/outline_proxy_controller/README.md | 0 .../outline_proxy_controller/build.action.sh | 0 .../dist/OutlineProxyController | Bin .../dist/install_linux_service.sh | 0 .../dist/outline_proxy_controller.service | 0 .../outline_proxy_controller/logger.cpp | 0 .../tools}/outline_proxy_controller/logger.h | 0 .../network_monitor.cpp | 0 .../network_monitor.h | 0 .../outline_controller_server.cpp | 0 .../outline_controller_server.h | 0 .../outline_daemon.cpp | 0 .../outline_error.cpp | 0 .../outline_proxy_controller/outline_error.h | 0 .../outline_proxy_controller.cpp | 0 .../outline_proxy_controller.h | 0 .../tools}/smartdnsblock/README.md | 0 .../smartdnsblock/bin/smartdnsblock.exe | Bin .../tools}/smartdnsblock/smartdnsblock.sln | 0 .../smartdnsblock/smartdnsblock.cpp | 0 .../smartdnsblock/smartdnsblock.filters | 0 .../smartdnsblock/smartdnsblock.user | 0 .../smartdnsblock/smartdnsblock.vcxproj | 0 tsconfig.json => outline_client/tsconfig.json | 0 .../www/6a9a3c1460491e5495ea8899784fc0fe.png | Bin 0 -> 41918 bytes .../8c59cf2168143c4cc938073f1a28650e.woff2 | Bin 0 -> 127500 bytes outline_client/www/assets/brand-logo.png | Bin 0 -> 4138 bytes outline_client/www/assets/circle.png | Bin 0 -> 41918 bytes outline_client/www/assets/icons/about.png | Bin 0 -> 1699 bytes outline_client/www/assets/icons/add.png | Bin 0 -> 863 bytes outline_client/www/assets/icons/back.png | Bin 0 -> 1107 bytes .../www/assets/icons/change_language.png | Bin 0 -> 2193 bytes outline_client/www/assets/icons/feedback.png | Bin 0 -> 1241 bytes outline_client/www/assets/icons/help.png | Bin 0 -> 1950 bytes outline_client/www/assets/icons/menu.png | Bin 0 -> 800 bytes outline_client/www/assets/icons/outline.png | Bin 0 -> 2436 bytes outline_client/www/assets/icons/quit.png | Bin 0 -> 1965 bytes outline_client/www/assets/jigsaw-logo.png | Bin 0 -> 2281 bytes outline_client/www/assets/jigsaw-logo.svg | 30 + outline_client/www/assets/logo-nav.png | Bin 0 -> 3240 bytes .../www/assets/material_icons.woff2 | Bin 0 -> 127500 bytes .../www/assets/outline-client-logo.png | Bin 0 -> 937 bytes .../www/assets/outline-client-logo.svg | 34 + outline_client/www/assets/privacy-lock.png | Bin 0 -> 32285 bytes outline_client/www/index_electron.html | 33 + outline_client/www/main.js | 117852 +++++++++++++++ outline_client/www/messages/af.json | 96 + outline_client/www/messages/am.json | 96 + outline_client/www/messages/ar.json | 96 + outline_client/www/messages/az.json | 96 + outline_client/www/messages/bg.json | 96 + outline_client/www/messages/bn.json | 96 + outline_client/www/messages/bs.json | 96 + outline_client/www/messages/ca.json | 96 + outline_client/www/messages/cs.json | 96 + outline_client/www/messages/da.json | 96 + outline_client/www/messages/de.json | 96 + outline_client/www/messages/el.json | 96 + outline_client/www/messages/en-GB.json | 96 + outline_client/www/messages/en.json | 102 + outline_client/www/messages/es-419.json | 96 + outline_client/www/messages/es.json | 96 + outline_client/www/messages/et.json | 96 + outline_client/www/messages/fa.json | 98 + outline_client/www/messages/fi.json | 96 + outline_client/www/messages/fil.json | 96 + outline_client/www/messages/fr.json | 96 + outline_client/www/messages/he.json | 96 + outline_client/www/messages/hi.json | 96 + outline_client/www/messages/hr.json | 96 + outline_client/www/messages/hu.json | 96 + outline_client/www/messages/hy.json | 96 + outline_client/www/messages/id.json | 96 + outline_client/www/messages/is.json | 96 + outline_client/www/messages/it.json | 96 + outline_client/www/messages/ja.json | 96 + outline_client/www/messages/ka.json | 96 + outline_client/www/messages/kk.json | 96 + outline_client/www/messages/km.json | 96 + outline_client/www/messages/ko.json | 96 + outline_client/www/messages/lo.json | 96 + outline_client/www/messages/lt.json | 96 + outline_client/www/messages/lv.json | 96 + outline_client/www/messages/mk.json | 96 + outline_client/www/messages/mn.json | 96 + outline_client/www/messages/mr.json | 96 + outline_client/www/messages/ms.json | 96 + outline_client/www/messages/my.json | 96 + outline_client/www/messages/ne.json | 96 + outline_client/www/messages/nl.json | 96 + outline_client/www/messages/no.json | 96 + outline_client/www/messages/pl.json | 96 + outline_client/www/messages/pt-BR.json | 96 + outline_client/www/messages/pt-PT.json | 96 + outline_client/www/messages/ro.json | 96 + outline_client/www/messages/ru.json | 96 + outline_client/www/messages/si.json | 96 + outline_client/www/messages/sk.json | 96 + outline_client/www/messages/sl.json | 96 + outline_client/www/messages/sq.json | 96 + outline_client/www/messages/sr-Latn.json | 96 + outline_client/www/messages/sr.json | 96 + outline_client/www/messages/sv.json | 96 + outline_client/www/messages/sw.json | 96 + outline_client/www/messages/ta.json | 96 + outline_client/www/messages/th.json | 96 + outline_client/www/messages/tr.json | 96 + outline_client/www/messages/uk.json | 96 + outline_client/www/messages/ur.json | 96 + outline_client/www/messages/vi.json | 96 + outline_client/www/messages/zh-CN.json | 96 + outline_client/www/messages/zh-TW.json | 96 + .../www/ui_components/licenses/licenses.txt | 10319 ++ package-lock.json | 26728 +--- package.json | 163 +- 558 files changed, 180027 insertions(+), 20552 deletions(-) rename .browserslistrc => outline_client/.browserslistrc (100%) rename .eslintignore => outline_client/.eslintignore (100%) rename .eslintrc.json => outline_client/.eslintrc.json (100%) rename .prettierignore => outline_client/.prettierignore (100%) rename .prettierrc.json => outline_client/.prettierrc.json (100%) create mode 100644 outline_client/build/electron/electron/index.js create mode 100644 outline_client/build/electron/electron/preload.js rename config.xml => outline_client/config.xml (100%) rename {docs => outline_client/docs}/invitation-instructions.md (64%) rename {docs => outline_client/docs}/invitation_instructions.md (100%) rename {docs => outline_client/docs}/life_of_a_packet.md (100%) rename {docs => outline_client/docs}/resources/invitation_instructions_001.png (100%) rename {docs => outline_client/docs}/resources/invitation_instructions_002.png (100%) rename {docs => outline_client/docs}/resources/invitation_instructions_003.png (100%) rename list.action.mjs => outline_client/list.action.mjs (100%) create mode 100644 outline_client/package-lock.json create mode 100644 outline_client/package.json rename {resources => outline_client/resources}/electron/icon.png (100%) rename {resources => outline_client/resources}/icons/android/icon_hdpi.png (100%) rename {resources => outline_client/resources}/icons/android/icon_mdpi.png (100%) rename {resources => outline_client/resources}/icons/android/icon_xhdpi.png (100%) rename {resources => outline_client/resources}/icons/android/icon_xxhdpi.png (100%) rename {resources => outline_client/resources}/icons/android/icon_xxxhdpi.png (100%) rename {resources => outline_client/resources}/icons/ios/Icon-20@2x.png (100%) rename {resources => outline_client/resources}/icons/ios/Icon-20@3x.png (100%) rename {resources => outline_client/resources}/icons/ios/Icon-29@1x.png (100%) rename {resources => outline_client/resources}/icons/ios/Icon-29@2x.png (100%) rename {resources => outline_client/resources}/icons/ios/Icon-29@3x.png (100%) rename {resources => outline_client/resources}/icons/ios/Icon-40@2x.png (100%) rename {resources => outline_client/resources}/icons/ios/Icon-40@3x.png (100%) rename {resources => outline_client/resources}/icons/ios/Icon-50@1x.png (100%) rename {resources => outline_client/resources}/icons/ios/Icon-50@2x.png (100%) rename {resources => outline_client/resources}/icons/ios/Icon-512@2x.png (100%) rename {resources => outline_client/resources}/icons/ios/Icon-57@1x.png (100%) rename {resources => outline_client/resources}/icons/ios/Icon-57@2x.png (100%) rename {resources => outline_client/resources}/icons/ios/Icon-60@2x.png (100%) rename {resources => outline_client/resources}/icons/ios/Icon-60@3x.png (100%) rename {resources => outline_client/resources}/icons/ios/Icon-72@1x.png (100%) rename {resources => outline_client/resources}/icons/ios/Icon-72@2x.png (100%) rename {resources => outline_client/resources}/icons/ios/Icon-76@1x.png (100%) rename {resources => outline_client/resources}/icons/ios/Icon-76@2x.png (100%) rename {resources => outline_client/resources}/icons/ios/Icon-83.5@2x.png (100%) rename {resources => outline_client/resources}/icons/osx/icon-1024.png (100%) rename {resources => outline_client/resources}/icons/osx/icon-128.png (100%) rename {resources => outline_client/resources}/icons/osx/icon-16.png (100%) rename {resources => outline_client/resources}/icons/osx/icon-256.png (100%) rename {resources => outline_client/resources}/icons/osx/icon-32.png (100%) rename {resources => outline_client/resources}/icons/osx/icon-512.png (100%) rename {resources => outline_client/resources}/icons/osx/icon-64.png (100%) rename {resources => outline_client/resources}/original_messages.json (100%) rename {resources => outline_client/resources}/splashscreen/android/splashscreen_hdpi.png (100%) rename {resources => outline_client/resources}/splashscreen/android/splashscreen_xhdpi.png (100%) rename {resources => outline_client/resources}/splashscreen/android/splashscreen_xxhdpi.png (100%) rename {resources => outline_client/resources}/splashscreen/android/splashscreen_xxxhdpi.png (100%) rename {resources => outline_client/resources}/splashscreen/ios/splashscreen@2x~universal~anyany.png (100%) rename {resources => outline_client/resources}/tray/connected.png (100%) rename {resources => outline_client/resources}/tray/disconnected.png (100%) rename {src => outline_client/src}/build/download_file.mjs (100%) rename {src => outline_client/src}/build/get_build_parameters.mjs (100%) rename {src => outline_client/src}/build/get_file_checksum.mjs (100%) rename {src => outline_client/src}/build/get_root_dir.mjs (91%) rename {src => outline_client/src}/build/get_webpack_build_mode.mjs (100%) rename {src => outline_client/src}/build/run_action.mjs (97%) rename {src => outline_client/src}/build/run_webpack.mjs (100%) rename {src => outline_client/src}/build/spawn_stream.mjs (100%) rename {src => outline_client/src}/cordova/android/OutlineAndroidLib/.gitignore (100%) rename {src => outline_client/src}/cordova/android/OutlineAndroidLib/build.gradle (100%) rename {src => outline_client/src}/cordova/android/OutlineAndroidLib/gradle.properties (100%) rename {src => outline_client/src}/cordova/android/OutlineAndroidLib/gradle/wrapper/gradle-wrapper.jar (100%) rename {src => outline_client/src}/cordova/android/OutlineAndroidLib/gradle/wrapper/gradle-wrapper.properties (100%) rename {src => outline_client/src}/cordova/android/OutlineAndroidLib/gradlew (100%) rename {src => outline_client/src}/cordova/android/OutlineAndroidLib/gradlew.bat (100%) rename {src => outline_client/src}/cordova/android/OutlineAndroidLib/outline/.gitignore (100%) rename {src => outline_client/src}/cordova/android/OutlineAndroidLib/outline/build.gradle (100%) rename {src => outline_client/src}/cordova/android/OutlineAndroidLib/outline/consumer-rules.pro (100%) rename {src => outline_client/src}/cordova/android/OutlineAndroidLib/outline/proguard-rules.pro (100%) rename {src => outline_client/src}/cordova/android/OutlineAndroidLib/outline/src/androidTest/java/org/outline/vpn/VpnTunnelStoreTest.java (100%) rename {src => outline_client/src}/cordova/android/OutlineAndroidLib/outline/src/main/AndroidManifest.xml (100%) rename {src => outline_client/src}/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/IVpnTunnelService.aidl (100%) rename {src => outline_client/src}/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/TunnelConfig.aidl (100%) rename {src => outline_client/src}/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/shadowsocks/ShadowsocksConfig.aidl (100%) rename {src => outline_client/src}/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/log/OutlineLogger.java (100%) rename {src => outline_client/src}/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/log/SentryErrorReporter.java (100%) rename {src => outline_client/src}/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnServiceStarter.java (100%) rename {src => outline_client/src}/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnel.java (100%) rename {src => outline_client/src}/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnelService.java (100%) rename {src => outline_client/src}/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnelStore.java (100%) rename {src => outline_client/src}/cordova/android/OutlineAndroidLib/outline/src/test/java/org/outline/vpn/VpnTunnelTest.java (100%) rename {src => outline_client/src}/cordova/android/OutlineAndroidLib/settings.gradle (100%) rename {src => outline_client/src}/cordova/android/README.md (100%) rename {src => outline_client/src}/cordova/android/get_native_locale.mjs (100%) rename {src => outline_client/src}/cordova/apple/OutlineAppleLib/.gitignore (100%) rename {src => outline_client/src}/cordova/apple/OutlineAppleLib/Package.swift (100%) rename {src => outline_client/src}/cordova/apple/OutlineAppleLib/README.md (100%) rename {src => outline_client/src}/cordova/apple/OutlineAppleLib/Sources/OutlineSentryLogger/OutlineSentryLogger.swift (100%) rename {src => outline_client/src}/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineTunnel.swift (100%) rename {src => outline_client/src}/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineTunnelStore.swift (100%) rename {src => outline_client/src}/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineVpn.swift (100%) rename {src => outline_client/src}/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/Subnet.swift (100%) rename {src => outline_client/src}/cordova/apple/OutlineAppleLib/Sources/PacketTunnelProvider/PacketTunnelProvider.m (100%) rename {src => outline_client/src}/cordova/apple/OutlineAppleLib/Sources/PacketTunnelProvider/include/PacketTunnelProvider.h (100%) rename {src => outline_client/src}/cordova/apple/OutlineAppleLib/Tests/OutlineTunnelTest/OutlineTunnelTest.swift (100%) rename {src => outline_client/src}/cordova/apple/README.md (100%) rename {src => outline_client/src}/cordova/apple/ios.xcworkspace/contents.xcworkspacedata (100%) rename {src => outline_client/src}/cordova/apple/ios.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename {src => outline_client/src}/cordova/apple/ios.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings (100%) rename {src => outline_client/src}/cordova/apple/ios.xcworkspace/xcshareddata/swiftpm/Package.resolved (100%) rename {src => outline_client/src}/cordova/apple/macos.xcworkspace/contents.xcworkspacedata (100%) rename {src => outline_client/src}/cordova/apple/macos.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename {src => outline_client/src}/cordova/apple/macos.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings (100%) rename {src => outline_client/src}/cordova/apple/macos.xcworkspace/xcshareddata/swiftpm/Package.resolved (100%) rename {src => outline_client/src}/cordova/apple/scripts/xconfig.sh (100%) rename {src => outline_client/src}/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj (100%) rename {src => outline_client/src}/cordova/apple/xcode/ios/Outline.xcodeproj/xcshareddata/xcschemes/Outline.xcscheme (100%) rename {src => outline_client/src}/cordova/apple/xcode/ios/Outline.xcodeproj/xcshareddata/xcschemes/VpnExtension.xcscheme (100%) rename {src => outline_client/src}/cordova/apple/xcode/ios/Outline/Outline-Info.plist (100%) rename {src => outline_client/src}/cordova/apple/xcode/ios/Outline/Outline.entitlements (100%) rename {src => outline_client/src}/cordova/apple/xcode/ios/Outline/VpnExtension-Info.plist (100%) rename {src => outline_client/src}/cordova/apple/xcode/ios/Outline/VpnExtension.entitlements (100%) rename {src => outline_client/src}/cordova/apple/xcode/macos/Outline.xcodeproj/project.pbxproj (100%) rename {src => outline_client/src}/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/Outline.xcscheme (100%) rename {src => outline_client/src}/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/OutlineLauncher.xcscheme (100%) rename {src => outline_client/src}/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/VpnExtension.xcscheme (100%) rename {src => outline_client/src}/cordova/apple/xcode/macos/Outline/Classes/AppDelegate.m (100%) rename {src => outline_client/src}/cordova/apple/xcode/macos/Outline/Classes/CDVMacOsUrlHandler.swift (100%) rename {src => outline_client/src}/cordova/apple/xcode/macos/Outline/Classes/EventMonitor.swift (100%) rename {src => outline_client/src}/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImage.imageset/Contents.json (100%) rename {src => outline_client/src}/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImage.imageset/outline-black-off-2x.png (100%) rename {src => outline_client/src}/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImageConnected.imageset/Contents.json (100%) rename {src => outline_client/src}/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImageConnected.imageset/outline-black-on-2x.png (100%) rename {src => outline_client/src}/cordova/apple/xcode/macos/Outline/MainViewController.xib (100%) rename {src => outline_client/src}/cordova/apple/xcode/macos/Outline/Outline-Info.plist (100%) rename {src => outline_client/src}/cordova/apple/xcode/macos/Outline/Outline.entitlements (100%) rename {src => outline_client/src}/cordova/apple/xcode/macos/Outline/VpnExtension-Info.plist (100%) rename {src => outline_client/src}/cordova/apple/xcode/macos/Outline/VpnExtension.entitlements (100%) rename {src => outline_client/src}/cordova/apple/xcode/macos/Outline/config.xml (100%) rename {src => outline_client/src}/cordova/apple/xcode/macos/OutlineLauncher/AppDelegate.swift (100%) rename {src => outline_client/src}/cordova/apple/xcode/macos/OutlineLauncher/Base.lproj/Main.storyboard (100%) rename {src => outline_client/src}/cordova/apple/xcode/macos/OutlineLauncher/Info.plist (100%) rename {src => outline_client/src}/cordova/apple/xcode/macos/OutlineLauncher/OutlineLauncher.entitlements (100%) rename {src => outline_client/src}/cordova/apple/xcode/macos/osx.json (100%) rename {src => outline_client/src}/cordova/apple/xcode/macos/www/cordova_plugins.js (100%) rename {src => outline_client/src}/cordova/build.action.mjs (100%) rename {src => outline_client/src}/cordova/import_messages.action.mjs (100%) rename {src => outline_client/src}/cordova/plugin/README.md (100%) rename {src => outline_client/src}/cordova/plugin/android/java/build-extras.gradle (100%) rename {src => outline_client/src}/cordova/plugin/android/java/org/outline/OutlinePlugin.java (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/bypass_subnets.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/small_icon.png (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-af/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-am/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-ar/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-az/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-b+sr+Latn/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-bg/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-bn/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-bs/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-ca/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-cs/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-da/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-de/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-el/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-en-rGB/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-en/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-es/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-et/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-fa/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-fi/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-fil/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-fr/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-he/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-hi/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-hr/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-hu/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-hy/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-id/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-is/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-it/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-ja/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-ka/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-kk/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-km/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-ko/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-lo/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-lt/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-lv/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-mk/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-mn/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-mr/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-ms/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-my/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-ne/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-nl/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-no/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-pl/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-pt-rBR/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-pt-rPT/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-ro/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-ru/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-si/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-sk/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-sl/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-sq/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-sr/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-sv/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-sw/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-ta/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-th/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-tr/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-uk/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-ur/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-vi/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-zh-rCN/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values-zh-rTW/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/resources/strings/values/strings.xml (100%) rename {src => outline_client/src}/cordova/plugin/android/scripts/copy_third_party.js (100%) rename {src => outline_client/src}/cordova/plugin/apple/src/OutlinePlugin.swift (100%) rename {src => outline_client/src}/cordova/plugin/apple/src/macos/Outline-Bridging-Header.h (100%) rename {src => outline_client/src}/cordova/plugin/package.json (100%) rename {src => outline_client/src}/cordova/plugin/plugin.xml (100%) rename {src => outline_client/src}/cordova/setup.action.mjs (100%) rename {src => outline_client/src}/cordova/test.action.mjs (100%) rename {src => outline_client/src}/electron/README.md (100%) rename {src => outline_client/src}/electron/add_tap_device.bat (100%) rename {src => outline_client/src}/electron/build.action.mjs (100%) rename {src => outline_client/src}/electron/build_main.action.mjs (100%) rename {src => outline_client/src}/electron/custom_install_steps.nsh (97%) rename {src => outline_client/src}/electron/electron-builder.json (100%) rename {src => outline_client/src}/electron/find_tap_device_name.bat (100%) rename {src => outline_client/src}/electron/go_vpn_tunnel.ts (100%) rename {src => outline_client/src}/electron/icons/mac/icon.icns (100%) rename {src => outline_client/src}/electron/icons/png/1024x1024.png (100%) rename {src => outline_client/src}/electron/icons/png/128x128.png (100%) rename {src => outline_client/src}/electron/icons/png/16x16.png (100%) rename {src => outline_client/src}/electron/icons/png/24x24.png (100%) rename {src => outline_client/src}/electron/icons/png/256x256.png (100%) rename {src => outline_client/src}/electron/icons/png/32x32.png (100%) rename {src => outline_client/src}/electron/icons/png/48x48.png (100%) rename {src => outline_client/src}/electron/icons/png/512x512.png (100%) rename {src => outline_client/src}/electron/icons/png/64x64.png (100%) rename {src => outline_client/src}/electron/icons/win/icon.ico (100%) rename {src => outline_client/src}/electron/index.ts (100%) rename {src => outline_client/src}/electron/install_windows_service.bat (100%) rename {src => outline_client/src}/electron/preload.d.ts (100%) rename {src => outline_client/src}/electron/preload.ts (100%) rename {src => outline_client/src}/electron/process.ts (100%) rename {src => outline_client/src}/electron/routing_service.ts (100%) rename {src => outline_client/src}/electron/start.action.mjs (100%) rename {src => outline_client/src}/electron/tsconfig.json (100%) rename {src => outline_client/src}/electron/tunnel_store.ts (100%) rename {src => outline_client/src}/electron/types/socks/index.d.ts (100%) rename {src => outline_client/src}/electron/vpn_tunnel.ts (100%) rename {src => outline_client/src}/electron/webpack_electron_main.mjs (100%) rename {src => outline_client/src}/electron/windows/digicert-usb-config/eToken-macos.cfg (100%) rename {src => outline_client/src}/electron/windows/digicert-usb-config/eToken-windows.cfg (100%) rename {src => outline_client/src}/electron/windows/electron_builder_signing_plugin.cjs (100%) rename {src => outline_client/src}/electron/windows/sign_windows_executable.action.mjs (100%) rename {src => outline_client/src}/infrastructure/custom_error.ts (100%) rename {src => outline_client/src}/infrastructure/electron/app_paths.ts (100%) rename {src => outline_client/src}/infrastructure/memory_storage.ts (100%) rename {src => outline_client/src}/infrastructure/timeout_promise.ts (100%) rename {src => outline_client/src}/www/.storybook/localize.ts (100%) rename {src => outline_client/src}/www/.storybook/main.js (100%) rename {src => outline_client/src}/www/.storybook/preview-head.html (100%) rename {src => outline_client/src}/www/.storybook/preview.js (100%) rename {src => outline_client/src}/www/TODO.spec.ts (100%) rename {src => outline_client/src}/www/app/app.spec.ts (100%) rename {src => outline_client/src}/www/app/app.ts (100%) rename {src => outline_client/src}/www/app/clipboard.ts (100%) rename {src => outline_client/src}/www/app/cordova_main.ts (100%) rename {src => outline_client/src}/www/app/electron_main.ts (100%) rename {src => outline_client/src}/www/app/electron_outline_tunnel.ts (100%) rename {src => outline_client/src}/www/app/environment.ts (100%) rename {src => outline_client/src}/www/app/error_reporter.ts (100%) rename {src => outline_client/src}/www/app/fake_tunnel.ts (100%) rename {src => outline_client/src}/www/app/main.ts (100%) rename {src => outline_client/src}/www/app/outline_server_repository/access_key_serialization.ts (100%) rename {src => outline_client/src}/www/app/outline_server_repository/index.ts (100%) rename {src => outline_client/src}/www/app/outline_server_repository/outline_server_repository.spec.ts (100%) rename {src => outline_client/src}/www/app/outline_server_repository/server.ts (100%) rename {src => outline_client/src}/www/app/platform.ts (100%) rename {src => outline_client/src}/www/app/settings.spec.ts (100%) rename {src => outline_client/src}/www/app/settings.ts (100%) rename {src => outline_client/src}/www/app/tunnel.ts (100%) rename {src => outline_client/src}/www/app/updater.ts (100%) rename {src => outline_client/src}/www/app/url_interceptor.ts (100%) rename {src => outline_client/src}/www/app/vpn_installer.ts (100%) rename {src => outline_client/src}/www/assets/brand-logo.png (100%) rename {src => outline_client/src}/www/assets/circle.png (100%) rename {src => outline_client/src}/www/assets/icons/about.png (100%) rename {src => outline_client/src}/www/assets/icons/add.png (100%) rename {src => outline_client/src}/www/assets/icons/back.png (100%) rename {src => outline_client/src}/www/assets/icons/change_language.png (100%) rename {src => outline_client/src}/www/assets/icons/feedback.png (100%) rename {src => outline_client/src}/www/assets/icons/help.png (100%) rename {src => outline_client/src}/www/assets/icons/menu.png (100%) rename {src => outline_client/src}/www/assets/icons/outline.png (100%) rename {src => outline_client/src}/www/assets/icons/quit.png (100%) rename {src => outline_client/src}/www/assets/jigsaw-logo.png (100%) rename {src => outline_client/src}/www/assets/jigsaw-logo.svg (100%) rename {src => outline_client/src}/www/assets/logo-nav.png (100%) rename {src => outline_client/src}/www/assets/material_icons.woff2 (100%) rename {src => outline_client/src}/www/assets/outline-client-logo.png (100%) rename {src => outline_client/src}/www/assets/outline-client-logo.svg (100%) rename {src => outline_client/src}/www/assets/privacy-lock.png (100%) rename {src => outline_client/src}/www/build.action.mjs (100%) rename {src => outline_client/src}/www/favicon.ico (100%) rename {src => outline_client/src}/www/get_browser_webpack_config.mjs (100%) rename {src => outline_client/src}/www/index_cordova.html (100%) rename {src => outline_client/src}/www/index_electron.html (100%) rename {src => outline_client/src}/www/karma.conf.js (100%) rename {src => outline_client/src}/www/messages/af.json (100%) rename {src => outline_client/src}/www/messages/am.json (100%) rename {src => outline_client/src}/www/messages/ar.json (100%) rename {src => outline_client/src}/www/messages/az.json (100%) rename {src => outline_client/src}/www/messages/bg.json (100%) rename {src => outline_client/src}/www/messages/bn.json (100%) rename {src => outline_client/src}/www/messages/bs.json (100%) rename {src => outline_client/src}/www/messages/ca.json (100%) rename {src => outline_client/src}/www/messages/cs.json (100%) rename {src => outline_client/src}/www/messages/da.json (100%) rename {src => outline_client/src}/www/messages/de.json (100%) rename {src => outline_client/src}/www/messages/el.json (100%) rename {src => outline_client/src}/www/messages/en-GB.json (100%) rename {src => outline_client/src}/www/messages/en.json (100%) rename {src => outline_client/src}/www/messages/es-419.json (100%) rename {src => outline_client/src}/www/messages/es.json (100%) rename {src => outline_client/src}/www/messages/et.json (100%) rename {src => outline_client/src}/www/messages/fa.json (100%) rename {src => outline_client/src}/www/messages/fi.json (100%) rename {src => outline_client/src}/www/messages/fil.json (100%) rename {src => outline_client/src}/www/messages/fr.json (100%) rename {src => outline_client/src}/www/messages/he.json (100%) rename {src => outline_client/src}/www/messages/hi.json (100%) rename {src => outline_client/src}/www/messages/hr.json (100%) rename {src => outline_client/src}/www/messages/hu.json (100%) rename {src => outline_client/src}/www/messages/hy.json (100%) rename {src => outline_client/src}/www/messages/id.json (100%) rename {src => outline_client/src}/www/messages/is.json (100%) rename {src => outline_client/src}/www/messages/it.json (100%) rename {src => outline_client/src}/www/messages/ja.json (100%) rename {src => outline_client/src}/www/messages/ka.json (100%) rename {src => outline_client/src}/www/messages/kk.json (100%) rename {src => outline_client/src}/www/messages/km.json (100%) rename {src => outline_client/src}/www/messages/ko.json (100%) rename {src => outline_client/src}/www/messages/lo.json (100%) rename {src => outline_client/src}/www/messages/lt.json (100%) rename {src => outline_client/src}/www/messages/lv.json (100%) rename {src => outline_client/src}/www/messages/mk.json (100%) rename {src => outline_client/src}/www/messages/mn.json (100%) rename {src => outline_client/src}/www/messages/mr.json (100%) rename {src => outline_client/src}/www/messages/ms.json (100%) rename {src => outline_client/src}/www/messages/my.json (100%) rename {src => outline_client/src}/www/messages/ne.json (100%) rename {src => outline_client/src}/www/messages/nl.json (100%) rename {src => outline_client/src}/www/messages/no.json (100%) rename {src => outline_client/src}/www/messages/pl.json (100%) rename {src => outline_client/src}/www/messages/pt-BR.json (100%) rename {src => outline_client/src}/www/messages/pt-PT.json (100%) rename {src => outline_client/src}/www/messages/ro.json (100%) rename {src => outline_client/src}/www/messages/ru.json (100%) rename {src => outline_client/src}/www/messages/si.json (100%) rename {src => outline_client/src}/www/messages/sk.json (100%) rename {src => outline_client/src}/www/messages/sl.json (100%) rename {src => outline_client/src}/www/messages/sq.json (100%) rename {src => outline_client/src}/www/messages/sr-Latn.json (100%) rename {src => outline_client/src}/www/messages/sr.json (100%) rename {src => outline_client/src}/www/messages/sv.json (100%) rename {src => outline_client/src}/www/messages/sw.json (100%) rename {src => outline_client/src}/www/messages/ta.json (100%) rename {src => outline_client/src}/www/messages/th.json (100%) rename {src => outline_client/src}/www/messages/tr.json (100%) rename {src => outline_client/src}/www/messages/uk.json (100%) rename {src => outline_client/src}/www/messages/ur.json (100%) rename {src => outline_client/src}/www/messages/vi.json (100%) rename {src => outline_client/src}/www/messages/zh-CN.json (100%) rename {src => outline_client/src}/www/messages/zh-TW.json (100%) rename {src => outline_client/src}/www/model/errors.ts (100%) rename {src => outline_client/src}/www/model/events.spec.ts (100%) rename {src => outline_client/src}/www/model/events.ts (100%) rename {src => outline_client/src}/www/model/server.ts (100%) rename {src => outline_client/src}/www/start.action.mjs (100%) rename {src => outline_client/src}/www/storybook.action.mjs (100%) rename {src => outline_client/src}/www/style.css (100%) rename {src => outline_client/src}/www/test.action.mjs (100%) rename {src => outline_client/src}/www/tsconfig.json (100%) rename {src => outline_client/src}/www/types/clipboard.d.ts (100%) rename {src => outline_client/src}/www/types/shims.d.ts (100%) rename {src => outline_client/src}/www/types/webintents.d.ts (100%) rename {src => outline_client/src}/www/ui_components/about-view.js (100%) rename {src => outline_client/src}/www/ui_components/add-server-view.js (100%) rename {src => outline_client/src}/www/ui_components/app-root.js (100%) rename {src => outline_client/src}/www/ui_components/feedback-view.js (100%) rename {src => outline_client/src}/www/ui_components/language-view.js (100%) rename {src => outline_client/src}/www/ui_components/licenses-view.js (100%) rename {src => outline_client/src}/www/ui_components/licenses/README.md (100%) rename {src => outline_client/src}/www/ui_components/licenses/licenses.txt (100%) rename {src => outline_client/src}/www/ui_components/licenses/third_party.sh (100%) rename {src => outline_client/src}/www/ui_components/outline-icons.js (100%) rename {src => outline_client/src}/www/ui_components/privacy-view.js (100%) rename {src => outline_client/src}/www/ui_components/server-rename-dialog.js (100%) rename {src => outline_client/src}/www/ui_components/user-comms-dialog.js (100%) rename {src => outline_client/src}/www/views/servers_view/index.ts (100%) rename {src => outline_client/src}/www/views/servers_view/server_connection_indicator/index.ts (100%) rename {src => outline_client/src}/www/views/servers_view/server_connection_indicator/stories.ts (100%) rename {src => outline_client/src}/www/views/servers_view/server_list/index.ts (100%) rename {src => outline_client/src}/www/views/servers_view/server_list/stories.ts (100%) rename {src => outline_client/src}/www/views/servers_view/server_list_item/index.ts (100%) rename {src => outline_client/src}/www/views/servers_view/server_list_item/server_card/index.ts (100%) rename {src => outline_client/src}/www/views/servers_view/server_list_item/server_card/stories.ts (100%) rename {src => outline_client/src}/www/webpack_base.mjs (100%) rename {src => outline_client/src}/www/webpack_cordova.mjs (100%) rename {src => outline_client/src}/www/webpack_css_rtl_loader.cjs (100%) rename {src => outline_client/src}/www/webpack_electron.mjs (100%) rename {src => outline_client/src}/www/webpack_test.mjs (100%) rename {tools => outline_client/tools}/OutlineService/OutlineService.sln (97%) rename {tools => outline_client/tools}/OutlineService/OutlineService/App.config (97%) rename {tools => outline_client/tools}/OutlineService/OutlineService/OutlineService.Designer.cs (96%) rename {tools => outline_client/tools}/OutlineService/OutlineService/OutlineService.cs (97%) rename {tools => outline_client/tools}/OutlineService/OutlineService/OutlineService.csproj (97%) rename {tools => outline_client/tools}/OutlineService/OutlineService/OutlineService.resx (97%) rename {tools => outline_client/tools}/OutlineService/OutlineService/Program.cs (97%) rename {tools => outline_client/tools}/OutlineService/OutlineService/Properties/AssemblyInfo.cs (97%) rename {tools => outline_client/tools}/OutlineService/OutlineService/bin/OutlineService.exe (100%) rename {tools => outline_client/tools}/OutlineService/OutlineService/bin/Release/OutlineService.exe.config (97%) rename {tools => outline_client/tools}/OutlineService/OutlineService/packages.config (97%) rename {tools => outline_client/tools}/build/Dockerfile (100%) rename {tools => outline_client/tools}/build/README.md (100%) rename {tools => outline_client/tools}/build/android_tools_versions.sh (100%) rename {tools => outline_client/tools}/build/build.action.sh (100%) rename {tools => outline_client/tools}/build/build.sh (100%) rename {tools => outline_client/tools}/build/setup_linux_android.sh (100%) rename {tools => outline_client/tools}/build/setup_macos_android.sh (100%) rename {tools => outline_client/tools}/find_tap_name/bin/386/find_tap_name.exe (100%) rename {tools => outline_client/tools}/find_tap_name/bin/amd64/find_tap_name.exe (100%) rename {tools => outline_client/tools}/find_tap_name/build.action.sh (100%) rename {tools => outline_client/tools}/find_tap_name/main.go (100%) rename {tools => outline_client/tools}/outline_proxy_controller/.gitignore (100%) rename {tools => outline_client/tools}/outline_proxy_controller/CMakeLists.txt (100%) rename {tools => outline_client/tools}/outline_proxy_controller/Dockerfile (100%) rename {tools => outline_client/tools}/outline_proxy_controller/OutlineProxyControllerConfig.h.in (100%) rename {tools => outline_client/tools}/outline_proxy_controller/README.md (100%) rename {tools => outline_client/tools}/outline_proxy_controller/build.action.sh (100%) rename {tools => outline_client/tools}/outline_proxy_controller/dist/OutlineProxyController (100%) rename {tools => outline_client/tools}/outline_proxy_controller/dist/install_linux_service.sh (100%) rename {tools => outline_client/tools}/outline_proxy_controller/dist/outline_proxy_controller.service (100%) rename {tools => outline_client/tools}/outline_proxy_controller/logger.cpp (100%) rename {tools => outline_client/tools}/outline_proxy_controller/logger.h (100%) rename {tools => outline_client/tools}/outline_proxy_controller/network_monitor.cpp (100%) rename {tools => outline_client/tools}/outline_proxy_controller/network_monitor.h (100%) rename {tools => outline_client/tools}/outline_proxy_controller/outline_controller_server.cpp (100%) rename {tools => outline_client/tools}/outline_proxy_controller/outline_controller_server.h (100%) rename {tools => outline_client/tools}/outline_proxy_controller/outline_daemon.cpp (100%) rename {tools => outline_client/tools}/outline_proxy_controller/outline_error.cpp (100%) rename {tools => outline_client/tools}/outline_proxy_controller/outline_error.h (100%) rename {tools => outline_client/tools}/outline_proxy_controller/outline_proxy_controller.cpp (100%) rename {tools => outline_client/tools}/outline_proxy_controller/outline_proxy_controller.h (100%) rename {tools => outline_client/tools}/smartdnsblock/README.md (100%) rename {tools => outline_client/tools}/smartdnsblock/bin/smartdnsblock.exe (100%) rename {tools => outline_client/tools}/smartdnsblock/smartdnsblock.sln (100%) rename {tools => outline_client/tools}/smartdnsblock/smartdnsblock/smartdnsblock.cpp (100%) rename {tools => outline_client/tools}/smartdnsblock/smartdnsblock/smartdnsblock.filters (100%) rename {tools => outline_client/tools}/smartdnsblock/smartdnsblock/smartdnsblock.user (100%) rename {tools => outline_client/tools}/smartdnsblock/smartdnsblock/smartdnsblock.vcxproj (100%) rename tsconfig.json => outline_client/tsconfig.json (100%) create mode 100644 outline_client/www/6a9a3c1460491e5495ea8899784fc0fe.png create mode 100644 outline_client/www/8c59cf2168143c4cc938073f1a28650e.woff2 create mode 100644 outline_client/www/assets/brand-logo.png create mode 100644 outline_client/www/assets/circle.png create mode 100644 outline_client/www/assets/icons/about.png create mode 100644 outline_client/www/assets/icons/add.png create mode 100644 outline_client/www/assets/icons/back.png create mode 100644 outline_client/www/assets/icons/change_language.png create mode 100644 outline_client/www/assets/icons/feedback.png create mode 100644 outline_client/www/assets/icons/help.png create mode 100644 outline_client/www/assets/icons/menu.png create mode 100644 outline_client/www/assets/icons/outline.png create mode 100644 outline_client/www/assets/icons/quit.png create mode 100644 outline_client/www/assets/jigsaw-logo.png create mode 100644 outline_client/www/assets/jigsaw-logo.svg create mode 100644 outline_client/www/assets/logo-nav.png create mode 100644 outline_client/www/assets/material_icons.woff2 create mode 100644 outline_client/www/assets/outline-client-logo.png create mode 100644 outline_client/www/assets/outline-client-logo.svg create mode 100644 outline_client/www/assets/privacy-lock.png create mode 100644 outline_client/www/index_electron.html create mode 100644 outline_client/www/main.js create mode 100644 outline_client/www/messages/af.json create mode 100644 outline_client/www/messages/am.json create mode 100644 outline_client/www/messages/ar.json create mode 100644 outline_client/www/messages/az.json create mode 100644 outline_client/www/messages/bg.json create mode 100644 outline_client/www/messages/bn.json create mode 100644 outline_client/www/messages/bs.json create mode 100644 outline_client/www/messages/ca.json create mode 100644 outline_client/www/messages/cs.json create mode 100644 outline_client/www/messages/da.json create mode 100644 outline_client/www/messages/de.json create mode 100644 outline_client/www/messages/el.json create mode 100644 outline_client/www/messages/en-GB.json create mode 100644 outline_client/www/messages/en.json create mode 100644 outline_client/www/messages/es-419.json create mode 100644 outline_client/www/messages/es.json create mode 100644 outline_client/www/messages/et.json create mode 100644 outline_client/www/messages/fa.json create mode 100644 outline_client/www/messages/fi.json create mode 100644 outline_client/www/messages/fil.json create mode 100644 outline_client/www/messages/fr.json create mode 100644 outline_client/www/messages/he.json create mode 100644 outline_client/www/messages/hi.json create mode 100644 outline_client/www/messages/hr.json create mode 100644 outline_client/www/messages/hu.json create mode 100644 outline_client/www/messages/hy.json create mode 100644 outline_client/www/messages/id.json create mode 100644 outline_client/www/messages/is.json create mode 100644 outline_client/www/messages/it.json create mode 100644 outline_client/www/messages/ja.json create mode 100644 outline_client/www/messages/ka.json create mode 100644 outline_client/www/messages/kk.json create mode 100644 outline_client/www/messages/km.json create mode 100644 outline_client/www/messages/ko.json create mode 100644 outline_client/www/messages/lo.json create mode 100644 outline_client/www/messages/lt.json create mode 100644 outline_client/www/messages/lv.json create mode 100644 outline_client/www/messages/mk.json create mode 100644 outline_client/www/messages/mn.json create mode 100644 outline_client/www/messages/mr.json create mode 100644 outline_client/www/messages/ms.json create mode 100644 outline_client/www/messages/my.json create mode 100644 outline_client/www/messages/ne.json create mode 100644 outline_client/www/messages/nl.json create mode 100644 outline_client/www/messages/no.json create mode 100644 outline_client/www/messages/pl.json create mode 100644 outline_client/www/messages/pt-BR.json create mode 100644 outline_client/www/messages/pt-PT.json create mode 100644 outline_client/www/messages/ro.json create mode 100644 outline_client/www/messages/ru.json create mode 100644 outline_client/www/messages/si.json create mode 100644 outline_client/www/messages/sk.json create mode 100644 outline_client/www/messages/sl.json create mode 100644 outline_client/www/messages/sq.json create mode 100644 outline_client/www/messages/sr-Latn.json create mode 100644 outline_client/www/messages/sr.json create mode 100644 outline_client/www/messages/sv.json create mode 100644 outline_client/www/messages/sw.json create mode 100644 outline_client/www/messages/ta.json create mode 100644 outline_client/www/messages/th.json create mode 100644 outline_client/www/messages/tr.json create mode 100644 outline_client/www/messages/uk.json create mode 100644 outline_client/www/messages/ur.json create mode 100644 outline_client/www/messages/vi.json create mode 100644 outline_client/www/messages/zh-CN.json create mode 100644 outline_client/www/messages/zh-TW.json create mode 100644 outline_client/www/ui_components/licenses/licenses.txt diff --git a/README.md b/README.md index 398dd5d194..99bab79444 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -# Outline Client +# Outline Apps -![Build and Test](https://github.com/Jigsaw-Code/outline-client/actions/workflows/build_and_test_debug.yml/badge.svg?branch=master) [![Mattermost](https://badgen.net/badge/Mattermost/Outline%20Community/blue)](https://community.internetfreedomfestival.org/community/channels/outline-community) [![Reddit](https://badgen.net/badge/Reddit/r%2Foutlinevpn/orange)](https://www.reddit.com/r/outlinevpn/) +![Build and Test](https://github.com/Jigsaw-Code/outline-apps/actions/workflows/build_and_test_debug.yml/badge.svg?branch=master) [![Mattermost](https://badgen.net/badge/Mattermost/Outline%20Community/blue)](https://community.internetfreedomfestival.org/community/channels/outline-community) [![Reddit](https://badgen.net/badge/Reddit/r%2Foutlinevpn/orange)](https://www.reddit.com/r/outlinevpn/) > **Test coverage currently only tracks the Apple Libraries and core web view code:** > -> [![codecov](https://codecov.io/gh/Jigsaw-Code/outline-client/branch/master/graph/badge.svg?token=gasD8v5tjn)](https://codecov.io/gh/Jigsaw-Code/outline-client) +> [![codecov](https://codecov.io/gh/Jigsaw-Code/outline-apps/branch/master/graph/badge.svg?token=gasD8v5tjn)](https://codecov.io/gh/Jigsaw-Code/outline-client) The Outline Client is a cross-platform VPN or proxy client for Windows, macOS, iOS, Android, and ChromeOS. The Outline Client is designed for use with the [Outline Server](https://github.com/Jigsaw-Code/outline-server) software, but it is fully compatible with any [Shadowsocks](https://shadowsocks.org/) server. diff --git a/commitlint.config.js b/commitlint.config.js index d53855c5e3..765fb7304d 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -5,21 +5,18 @@ module.exports = { 2, 'always', [ - 'build', - 'cordova', - 'cordova/android', - 'cordova/apple', - 'cordova/apple/ios', - 'cordova/apple/macos', - 'devtools', - 'docs', - 'electron', - 'electron/linux', - 'electron/windows', - 'www', - 'service', - 'service/linux', - 'service/windows', + 'client/build', + 'client/cordova', + 'client/cordova/android', + 'client/cordova/apple', + 'client/cordova/apple/ios', + 'client/cordova/apple/macos', + 'client/dotfiles', + 'client/docs', + 'client/electron', + 'client/electron/linux', + 'client/electron/windows', + 'client/www' ], ], }, diff --git a/.browserslistrc b/outline_client/.browserslistrc similarity index 100% rename from .browserslistrc rename to outline_client/.browserslistrc diff --git a/.eslintignore b/outline_client/.eslintignore similarity index 100% rename from .eslintignore rename to outline_client/.eslintignore diff --git a/.eslintrc.json b/outline_client/.eslintrc.json similarity index 100% rename from .eslintrc.json rename to outline_client/.eslintrc.json diff --git a/.prettierignore b/outline_client/.prettierignore similarity index 100% rename from .prettierignore rename to outline_client/.prettierignore diff --git a/.prettierrc.json b/outline_client/.prettierrc.json similarity index 100% rename from .prettierrc.json rename to outline_client/.prettierrc.json diff --git a/outline_client/build/electron/electron/index.js b/outline_client/build/electron/electron/index.js new file mode 100644 index 0000000000..697d5c2903 --- /dev/null +++ b/outline_client/build/electron/electron/index.js @@ -0,0 +1,6 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ +/******/ +/******/ })() +; \ No newline at end of file diff --git a/outline_client/build/electron/electron/preload.js b/outline_client/build/electron/electron/preload.js new file mode 100644 index 0000000000..697d5c2903 --- /dev/null +++ b/outline_client/build/electron/electron/preload.js @@ -0,0 +1,6 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ +/******/ +/******/ })() +; \ No newline at end of file diff --git a/config.xml b/outline_client/config.xml similarity index 100% rename from config.xml rename to outline_client/config.xml diff --git a/docs/invitation-instructions.md b/outline_client/docs/invitation-instructions.md similarity index 64% rename from docs/invitation-instructions.md rename to outline_client/docs/invitation-instructions.md index 5146eebe86..1b0837fc10 100644 --- a/docs/invitation-instructions.md +++ b/outline_client/docs/invitation-instructions.md @@ -1 +1,3 @@ -Moved to [`invitation_instructions.md`](./invitation_instructions.md). \ No newline at end of file +Moved to [`invitation_instructions.md`](./invitation_instructions.md). + +# What do we do about this?? \ No newline at end of file diff --git a/docs/invitation_instructions.md b/outline_client/docs/invitation_instructions.md similarity index 100% rename from docs/invitation_instructions.md rename to outline_client/docs/invitation_instructions.md diff --git a/docs/life_of_a_packet.md b/outline_client/docs/life_of_a_packet.md similarity index 100% rename from docs/life_of_a_packet.md rename to outline_client/docs/life_of_a_packet.md diff --git a/docs/resources/invitation_instructions_001.png b/outline_client/docs/resources/invitation_instructions_001.png similarity index 100% rename from docs/resources/invitation_instructions_001.png rename to outline_client/docs/resources/invitation_instructions_001.png diff --git a/docs/resources/invitation_instructions_002.png b/outline_client/docs/resources/invitation_instructions_002.png similarity index 100% rename from docs/resources/invitation_instructions_002.png rename to outline_client/docs/resources/invitation_instructions_002.png diff --git a/docs/resources/invitation_instructions_003.png b/outline_client/docs/resources/invitation_instructions_003.png similarity index 100% rename from docs/resources/invitation_instructions_003.png rename to outline_client/docs/resources/invitation_instructions_003.png diff --git a/list.action.mjs b/outline_client/list.action.mjs similarity index 100% rename from list.action.mjs rename to outline_client/list.action.mjs diff --git a/outline_client/package-lock.json b/outline_client/package-lock.json new file mode 100644 index 0000000000..929576d7ff --- /dev/null +++ b/outline_client/package-lock.json @@ -0,0 +1,35448 @@ +{ + "name": "outline-client", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "outline-client", + "version": "0.0.0", + "workspaces": [ + "src/cordova/plugin" + ], + "dependencies": { + "@material/mwc-button": "^0.25.3", + "@material/mwc-icon-button": "^0.25.3", + "@material/mwc-menu": "^0.25.3", + "@polymer/app-layout": "^3.1.0", + "@polymer/app-localize-behavior": "^3.0.1", + "@polymer/app-route": "^3.0.2", + "@polymer/decorators": "^3.0.0", + "@polymer/font-roboto": "^3.0.2", + "@polymer/iron-icons": "^3.0.1", + "@polymer/iron-iconset-svg": "^3.0.1", + "@polymer/iron-pages": "^3.0.1", + "@polymer/paper-behaviors": "^3.0.1", + "@polymer/paper-button": "^3.0.1", + "@polymer/paper-card": "^3.0.1", + "@polymer/paper-dialog": "^3.0.1", + "@polymer/paper-dropdown-menu": "^3.1.0", + "@polymer/paper-icon-button": "^3.0.2", + "@polymer/paper-input": "^3.2.1", + "@polymer/paper-item": "^3.0.1", + "@polymer/paper-listbox": "^3.0.1", + "@polymer/paper-menu-button": "^3.0.1", + "@polymer/paper-ripple": "^3.0.2", + "@polymer/paper-styles": "^3.0.1", + "@polymer/paper-toast": "^3.0.1", + "@sentry/browser": "^7.31.1", + "@sentry/electron": "^4.2.0", + "@webcomponents/webcomponentsjs": "^2.4.4", + "auto-launch": "^5.0.5", + "browserslist": "^4.20.3", + "cordova-plugin-splashscreen": "^6.0.0", + "cordova-plugin-statusbar": "^2.2.3", + "electron-updater": "^5.0.5", + "lit": "^2.2.2", + "ShadowsocksConfig": "github:Jigsaw-Code/outline-shadowsocksconfig#v0.2.1", + "socks": "^1.1.10", + "sudo-prompt": "^9.2.1", + "uuidv4": "^4.0.0", + "web-animations-js": "^2.3.2" + }, + "devDependencies": { + "@babel/core": "^7.12.10", + "@babel/polyfill": "^7.12.1", + "@babel/preset-env": "^7.12.11", + "@commitlint/config-conventional": "^16.2.4", + "@jsdevtools/coverage-istanbul-loader": "^3.0.5", + "@rollup/plugin-image": "^2.1.1", + "@types/auto-launch": "^5.0.0", + "@types/cordova": "^0.0.34", + "@types/jasmine": "^2.8.6", + "@types/node": "^14.14.7", + "@types/polymer": "^1.2.9", + "@types/uuidv4": "^2.0.0", + "@typescript-eslint/eslint-plugin": "^5.32.0", + "@typescript-eslint/parser": "^5.32.0", + "@web/dev-server": "^0.1.35", + "@web/dev-server-esbuild": "^0.3.3", + "@web/dev-server-storybook": "^0.5.4", + "babel-loader": "^8.2.2", + "chalk": "^5.0.1", + "copy-dir": "^1.3.0", + "copy-webpack-plugin": "^5.1.1", + "cordova-android": "^11.0.0", + "cordova-browser": "~6.0.0", + "cordova-ios": "~6.3.0", + "cordova-lib": "^11.0.0", + "cordova-osx": "github:apache/cordova-osx", + "cordova-plugin-clipboard": "github:Jigsaw-Code/outline-cordova-plugin-clipboard#v2.0.0", + "cordova-plugin-outline": "file:src/cordova/plugin", + "cordova-webintent": "github:cordova-misc/cordova-webintent#v2.0.0", + "css-loader": "^5.0.1", + "electron": "^19.1.9", + "electron-builder": "^23.6.0", + "electron-icon-maker": "^0.0.5", + "eslint": "^8.15.0", + "eslint-import-resolver-typescript": "^3.4.0", + "eslint-plugin-compat": "^4.0.2", + "eslint-plugin-import": "^2.26.0", + "esm": "^3.2.25", + "file-loader": "^6.2.0", + "html-webpack-plugin": "^5.1.0", + "husky": "^1.3.1", + "intl-messageformat": "^9.12.0", + "istanbul": "^0.4.5", + "karma": "^6.3.16", + "karma-chrome-launcher": "^3.1.0", + "karma-coverage-istanbul-reporter": "^3.0.3", + "karma-jasmine": "^4.0.1", + "karma-webpack": "^5.0.0", + "minimist": "^1.2.6", + "node-fetch": "^3.3.0", + "outline-i18n": "Jigsaw-Code/outline-i18n#v0.0.7", + "postcss": "^7.0.39", + "postcss-rtl": "^1.7.3", + "prettier": "^1.19.1", + "pretty-quick": "^2.0.1", + "puppeteer": "^13.1.2", + "replace-in-file": "^6.3.5", + "rimraf": "^2.7.1", + "rmfr": "^2.0.0", + "style-loader": "^2.0.0", + "ts-loader": "^9.3.1", + "typescript": "^4.7.4", + "url": "^0.11.0", + "webpack": "^5.16.0", + "webpack-cli": "^4.4.0", + "webpack-dev-server": "^4.5.0", + "webpack-merge": "^5.8.0", + "webpack-shell-plugin-next": "^2.1.1", + "xmlbuilder2": "^3.1.1" + }, + "engines": { + "node": "^18.16.0", + "npm": "^9.5.1" + }, + "optionalDependencies": { + "ios-deploy": "^1.11.4" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.18.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.18.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.18.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.10", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.18.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.18.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-function-name": "^7.18.9", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.11", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.18.11", + "dev": true, + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.18.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.18.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.18.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-identifier": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.18.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.18.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/polyfill": { + "version": "7.12.1", + "dev": true, + "license": "MIT", + "dependencies": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.18.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.18.10", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.18.9", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.18.9", + "@babel/plugin-transform-classes": "^7.18.9", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.18.9", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.18.9", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.18.9", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.18.10", + "babel-plugin-polyfill-corejs2": "^0.3.2", + "babel-plugin-polyfill-corejs3": "^0.5.3", + "babel-plugin-polyfill-regenerator": "^0.4.0", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.18.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.18.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.11", + "@babel/types": "^7.18.10", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.18.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@commitlint/config-conventional": { + "version": "16.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-changelog-conventionalcommits": "^4.3.1" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@develar/schema-utils": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", + "dev": true, + "dependencies": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@electron/get": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.14.1.tgz", + "integrity": "sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^9.6.0", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=8.6" + }, + "optionalDependencies": { + "global-agent": "^3.0.0", + "global-tunnel-ng": "^2.7.1" + } + }, + "node_modules/@electron/get/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@electron/get/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/get/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@electron/universal": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.2.1.tgz", + "integrity": "sha512-7323HyMh7KBAl/nPDppdLsC87G6RwRU02dy5FPeGB1eS7rUePh55+WNWiDPLhFQqqVPHzh77M69uhmoT8XnwMQ==", + "dev": true, + "dependencies": { + "@malept/cross-spawn-promise": "^1.1.0", + "asar": "^3.1.0", + "debug": "^4.3.1", + "dir-compare": "^2.4.0", + "fs-extra": "^9.0.1", + "minimatch": "^3.0.4", + "plist": "^3.0.4" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.17.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@formatjs/ecma402-abstract": { + "version": "1.11.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@formatjs/intl-localematcher": "0.2.25", + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/fast-memoize": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/icu-skeleton-parser": "1.3.6", + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@formatjs/ecma402-abstract": "1.11.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/intl-localematcher": { + "version": "0.2.25", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.10.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "dev": true, + "license": "Apache-2.0", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jimp/bmp": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "bmp-js": "^0.1.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/core": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "exif-parser": "^0.1.12", + "file-type": "^9.0.0", + "load-bmfont": "^1.3.1", + "mkdirp": "^0.5.1", + "phin": "^2.9.1", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.4.1" + } + }, + "node_modules/@jimp/custom": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.14.0" + } + }, + "node_modules/@jimp/gif": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "gifwrap": "^0.9.2", + "omggif": "^1.0.9" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/jpeg": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "jpeg-js": "^0.4.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-blit": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-blur": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-circle": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-color": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "tinycolor2": "^1.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-contain": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5", + "@jimp/plugin-scale": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-cover": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-crop": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5", + "@jimp/plugin-scale": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-crop": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-displace": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-dither": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-fisheye": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-flip": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-rotate": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-gaussian": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-invert": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-mask": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-normalize": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-print": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "load-bmfont": "^1.4.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-resize": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-rotate": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5", + "@jimp/plugin-crop": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-scale": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-shadow": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blur": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-threshold": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-color": ">=0.8.0", + "@jimp/plugin-resize": ">=0.8.0" + } + }, + "node_modules/@jimp/plugins": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.14.0", + "@jimp/plugin-blur": "^0.14.0", + "@jimp/plugin-circle": "^0.14.0", + "@jimp/plugin-color": "^0.14.0", + "@jimp/plugin-contain": "^0.14.0", + "@jimp/plugin-cover": "^0.14.0", + "@jimp/plugin-crop": "^0.14.0", + "@jimp/plugin-displace": "^0.14.0", + "@jimp/plugin-dither": "^0.14.0", + "@jimp/plugin-fisheye": "^0.14.0", + "@jimp/plugin-flip": "^0.14.0", + "@jimp/plugin-gaussian": "^0.14.0", + "@jimp/plugin-invert": "^0.14.0", + "@jimp/plugin-mask": "^0.14.0", + "@jimp/plugin-normalize": "^0.14.0", + "@jimp/plugin-print": "^0.14.0", + "@jimp/plugin-resize": "^0.14.0", + "@jimp/plugin-rotate": "^0.14.0", + "@jimp/plugin-scale": "^0.14.0", + "@jimp/plugin-shadow": "^0.14.0", + "@jimp/plugin-threshold": "^0.14.0", + "timm": "^1.6.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/png": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "pngjs": "^3.3.3" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/tiff": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "utif": "^2.0.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/types": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.14.0", + "@jimp/gif": "^0.14.0", + "@jimp/jpeg": "^0.14.0", + "@jimp/png": "^0.14.0", + "@jimp/tiff": "^0.14.0", + "timm": "^1.6.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/utils": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "regenerator-runtime": "^0.13.3" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.14", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@jsdevtools/coverage-istanbul-loader": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", + "integrity": "sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==", + "dev": true, + "dependencies": { + "convert-source-map": "^1.7.0", + "istanbul-lib-instrument": "^4.0.3", + "loader-utils": "^2.0.0", + "merge-source-map": "^1.1.0", + "schema-utils": "^2.7.0" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@lion/accordion": { + "version": "0.9.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@lion/core": "^0.22.0" + } + }, + "node_modules/@lion/core": { + "version": "0.22.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@open-wc/dedupe-mixin": "^1.3.0", + "@open-wc/scoped-elements": "^2.1.1", + "lit": "^2.0.2" + } + }, + "node_modules/@lit/reactive-element": { + "version": "1.0.0-rc.4", + "license": "BSD-3-Clause" + }, + "node_modules/@malept/cross-spawn-promise": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", + "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" + } + ], + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@material/animation": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/base": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/density": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/dom": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/elevation": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/feature-targeting": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/list": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/density": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/typography": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/menu": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/elevation": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/list": "14.0.0-canary.261f2db59.0", + "@material/menu-surface": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/menu-surface": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/elevation": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/mwc-base": { + "version": "0.25.3", + "license": "Apache-2.0", + "dependencies": { + "@lit/reactive-element": "1.0.0-rc.4", + "@material/base": "=14.0.0-canary.261f2db59.0", + "@material/dom": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-button": { + "version": "0.25.3", + "license": "Apache-2.0", + "dependencies": { + "@material/mwc-icon": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-checkbox": { + "version": "0.25.3", + "license": "Apache-2.0", + "dependencies": { + "@material/mwc-base": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-icon": { + "version": "0.25.3", + "license": "Apache-2.0", + "dependencies": { + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-icon-button": { + "version": "0.25.3", + "license": "Apache-2.0", + "dependencies": { + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-list": { + "version": "0.25.3", + "license": "Apache-2.0", + "dependencies": { + "@material/base": "=14.0.0-canary.261f2db59.0", + "@material/dom": "=14.0.0-canary.261f2db59.0", + "@material/list": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/mwc-checkbox": "^0.25.3", + "@material/mwc-radio": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-menu": { + "version": "0.25.3", + "license": "Apache-2.0", + "dependencies": { + "@material/menu": "=14.0.0-canary.261f2db59.0", + "@material/menu-surface": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/mwc-list": "^0.25.3", + "@material/shape": "=14.0.0-canary.261f2db59.0", + "@material/theme": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-radio": { + "version": "0.25.3", + "license": "Apache-2.0", + "dependencies": { + "@material/mwc-base": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "@material/radio": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-ripple": { + "version": "0.25.3", + "license": "Apache-2.0", + "dependencies": { + "@material/dom": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/ripple": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/radio": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/density": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/touch-target": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/ripple": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/rtl": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/shape": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/theme": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/touch-target": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/typography": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@mdjs/core": { + "version": "0.9.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@mdjs/mdjs-preview": "^0.5.8", + "@mdjs/mdjs-story": "^0.3.2", + "@types/unist": "^2.0.3", + "es-module-lexer": "^0.9.3", + "github-markdown-css": "^4.0.0", + "plugins-manager": "^0.3.0", + "rehype-autolink-headings": "^5.0.1", + "rehype-prism": "^1.0.1", + "rehype-raw": "^5.0.0", + "rehype-slug": "^4.0.1", + "rehype-stringify": "^8.0.0", + "remark": "^13.0.0", + "remark-gfm": "^1.0.0", + "remark-parse": "^9.0.0", + "remark-rehype": "^8.0.0", + "slash": "^3.0.0", + "unified": "^9.2.0", + "unist-util-remove": "^2.0.1", + "unist-util-visit": "^2.0.3" + } + }, + "node_modules/@mdjs/core/node_modules/es-module-lexer": { + "version": "0.9.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@mdjs/core/node_modules/remark-parse": { + "version": "9.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdjs/mdjs-preview": { + "version": "0.5.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@lion/accordion": "^0.9.0", + "@open-wc/scoped-elements": "^2.0.0", + "lit": "^2.2.5" + } + }, + "node_modules/@mdjs/mdjs-story": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "lit": "^2.2.5" + } + }, + "node_modules/@mdn/browser-compat-data": { + "version": "4.2.1", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/@mdx-js/mdx": { + "version": "1.6.22", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", + "camelcase-css": "2.0.1", + "detab": "2.0.4", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "10.0.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.22", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/@babel/core": { + "version": "7.12.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@mdx-js/mdx/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@mdx-js/mdx/node_modules/source-map": { + "version": "0.5.7", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@mdx-js/util": { + "version": "1.6.22", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@netflix/nerror": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "extsprintf": "^1.4.0", + "lodash": "^4.17.15" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/git": { + "version": "2.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + } + }, + "node_modules/@npmcli/git/node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/git/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "1.0.7", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "installed-package-contents": "index.js" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "1.0.3", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/promise-spawn": { + "version": "1.3.2", + "dev": true, + "license": "ISC", + "dependencies": { + "infer-owner": "^1.0.4" + } + }, + "node_modules/@npmcli/run-script": { + "version": "1.8.6", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "node-gyp": "^7.1.0", + "read-package-json-fast": "^2.0.1" + } + }, + "node_modules/@oozcitak/dom": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-1.15.10.tgz", + "integrity": "sha512-0JT29/LaxVgRcGKvHmSrUTEvZ8BXvZhGl2LASRUgHqDTC1M5g1pLmVv56IYNyt3bG2CUjDkc67wnyZC14pbQrQ==", + "dev": true, + "dependencies": { + "@oozcitak/infra": "1.0.8", + "@oozcitak/url": "1.0.4", + "@oozcitak/util": "8.3.8" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/@oozcitak/infra": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@oozcitak/infra/-/infra-1.0.8.tgz", + "integrity": "sha512-JRAUc9VR6IGHOL7OGF+yrvs0LO8SlqGnPAMqyzOuFZPSZSXI7Xf2O9+awQPSMXgIWGtgUf/dA6Hs6X6ySEaWTg==", + "dev": true, + "dependencies": { + "@oozcitak/util": "8.3.8" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/@oozcitak/url": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@oozcitak/url/-/url-1.0.4.tgz", + "integrity": "sha512-kDcD8y+y3FCSOvnBI6HJgl00viO/nGbQoCINmQ0h98OhnGITrWR3bOGfwYCthgcrV8AnTJz8MzslTQbC3SOAmw==", + "dev": true, + "dependencies": { + "@oozcitak/infra": "1.0.8", + "@oozcitak/util": "8.3.8" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/@oozcitak/util": { + "version": "8.3.8", + "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-8.3.8.tgz", + "integrity": "sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==", + "dev": true, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/@open-wc/dedupe-mixin": { + "version": "1.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@open-wc/scoped-elements": { + "version": "2.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@lit/reactive-element": "^1.0.0", + "@open-wc/dedupe-mixin": "^1.3.0" + } + }, + "node_modules/@open-wc/scoped-elements/node_modules/@lit/reactive-element": { + "version": "1.3.4", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@pkgr/utils": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "is-glob": "^4.0.3", + "open": "^8.4.0", + "picocolors": "^1.0.0", + "tiny-glob": "^0.2.9", + "tslib": "^2.4.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@pkgr/utils/node_modules/picocolors": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/@polymer/app-layout": { + "version": "3.1.0", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/iron-media-query": "^3.0.0-pre.26", + "@polymer/iron-resizable-behavior": "^3.0.0-pre.26", + "@polymer/iron-scroll-target-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/app-localize-behavior": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-ajax": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0", + "intl-messageformat": "^2.2.0" + } + }, + "node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat": { + "version": "2.2.0", + "license": "BSD-3-Clause", + "dependencies": { + "intl-messageformat-parser": "1.4.0" + } + }, + "node_modules/@polymer/app-route": { + "version": "3.0.2", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-location": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/decorators": { + "version": "3.0.0", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.5" + } + }, + "node_modules/@polymer/font-roboto": { + "version": "3.0.2", + "license": "BSD-3-Clause" + }, + "node_modules/@polymer/iron-a11y-announcer": { + "version": "3.2.0", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-a11y-keys-behavior": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-ajax": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-autogrow-textarea": { + "version": "3.0.3", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/iron-validatable-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-behaviors": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-checked-element-behavior": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-form-element-behavior": "^3.0.0-pre.26", + "@polymer/iron-validatable-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-dropdown": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-overlay-behavior": "^3.0.0-pre.27", + "@polymer/neon-animation": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-fit-behavior": { + "version": "3.1.0", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-flex-layout": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-form-element-behavior": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-icon": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/iron-meta": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-icons": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-icon": "^3.0.0-pre.26", + "@polymer/iron-iconset-svg": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-iconset-svg": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-meta": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-image": { + "version": "3.0.2", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-input": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-a11y-announcer": "^3.0.0-pre.26", + "@polymer/iron-validatable-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-location": { + "version": "3.0.2", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-media-query": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-menu-behavior": { + "version": "3.0.2", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/iron-selector": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-meta": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-overlay-behavior": { + "version": "3.0.3", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/iron-fit-behavior": "^3.0.0-pre.26", + "@polymer/iron-resizable-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-pages": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-resizable-behavior": "^3.0.0-pre.26", + "@polymer/iron-selector": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-resizable-behavior": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-scroll-target-behavior": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-selector": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-validatable-behavior": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-meta": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/neon-animation": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-resizable-behavior": "^3.0.0-pre.26", + "@polymer/iron-selector": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-behaviors": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-checked-element-behavior": "^3.0.0-pre.26", + "@polymer/paper-ripple": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-button": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/paper-behaviors": "^3.0.0-pre.27", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-card": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/iron-image": "^3.0.0-pre.26", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-dialog": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-overlay-behavior": "^3.0.0-pre.27", + "@polymer/neon-animation": "^3.0.0-pre.26", + "@polymer/paper-dialog-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-dialog-behavior": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-overlay-behavior": "^3.0.0-pre.27", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-dropdown-menu": { + "version": "3.2.0", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/iron-form-element-behavior": "^3.0.0-pre.26", + "@polymer/iron-icon": "^3.0.0-pre.26", + "@polymer/iron-iconset-svg": "^3.0.0-pre.26", + "@polymer/iron-validatable-behavior": "^3.0.0-pre.26", + "@polymer/paper-behaviors": "^3.0.0-pre.27", + "@polymer/paper-input": "^3.1.0", + "@polymer/paper-menu-button": "^3.1.0", + "@polymer/paper-ripple": "^3.0.0-pre.26", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.3.1" + } + }, + "node_modules/@polymer/paper-icon-button": { + "version": "3.0.2", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-icon": "^3.0.0-pre.26", + "@polymer/paper-behaviors": "^3.0.0-pre.27", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-input": { + "version": "3.2.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/iron-autogrow-textarea": "^3.0.0-pre.26", + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-form-element-behavior": "^3.0.0-pre.26", + "@polymer/iron-input": "^3.0.0-pre.26", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-item": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-listbox": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-menu-behavior": "^3.0.0-pre.26", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-menu-button": { + "version": "3.1.0", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-dropdown": "^3.0.0-pre.26", + "@polymer/iron-fit-behavior": "^3.1.0", + "@polymer/neon-animation": "^3.0.0-pre.26", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-ripple": { + "version": "3.0.2", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-styles": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/font-roboto": "^3.0.1", + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-toast": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-a11y-announcer": "^3.0.0-pre.26", + "@polymer/iron-fit-behavior": "^3.0.0-pre.26", + "@polymer/iron-overlay-behavior": "^3.0.0-pre.27", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/polymer": { + "version": "3.5.1", + "license": "BSD-3-Clause", + "dependencies": { + "@webcomponents/shadycss": "^1.9.1" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-image": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "mini-svg-data-uri": "^1.2.3" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "13.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^2.42.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@sentry/browser": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.31.1.tgz", + "integrity": "sha512-Rg9F61S1tz1Dv3iUyyGP26bxoi7WJAG2+f2fBbSmFuJ+JTH4Jvu2/F1bBig8Dz01ejzVhbNSUUCfoDhSvksIsQ==", + "dependencies": { + "@sentry/core": "7.31.1", + "@sentry/replay": "7.31.1", + "@sentry/types": "7.31.1", + "@sentry/utils": "7.31.1", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/browser/node_modules/@sentry/core": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.31.1.tgz", + "integrity": "sha512-quaNU6z8jabmatBTDi28Wpff2yzfWIp/IU4bbi2QOtEiCNT+TQJXqlRTRMu9xLrX7YzyKCL5X2gbit/85lyWUg==", + "dependencies": { + "@sentry/types": "7.31.1", + "@sentry/utils": "7.31.1", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/browser/node_modules/@sentry/types": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.31.1.tgz", + "integrity": "sha512-1uzr2l0AxEnxUX/S0EdmXUQ15/kDsam8Nbdw4Gai8SU764XwQgA/TTjoewVP597CDI/AHKan67Y630/Ylmkx9w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/browser/node_modules/@sentry/utils": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.31.1.tgz", + "integrity": "sha512-ZsIPq29aNdP9q3R7qIzJhZ9WW+4DzE9g5SfGwx3UjTIxoRRBfdUJUbf7S+LKEdvCkKbyoDt6FLt5MiSJV43xBA==", + "dependencies": { + "@sentry/types": "7.31.1", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/core": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.30.0.tgz", + "integrity": "sha512-NeLigkBlpcK63ymM63GoIHurml6V3BUe1Vi+trwm4/qqOTzT7PQhvdJCX+o3+atzRBH+zdb6kd4VWx44Oye3KA==", + "dependencies": { + "@sentry/types": "7.30.0", + "@sentry/utils": "7.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/electron": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@sentry/electron/-/electron-4.2.0.tgz", + "integrity": "sha512-9r7Kb4BOPXNClsYvzWJ1Nppf5cL8sck9Li4KIAgCq/ofogPiE54fbUdJtx5Fkagon5sBSjy0gu74xuhnPexhoA==", + "dependencies": { + "@sentry/browser": "7.30.0", + "@sentry/core": "7.30.0", + "@sentry/node": "7.30.0", + "@sentry/types": "7.30.0", + "@sentry/utils": "7.30.0", + "deepmerge": "4.2.2", + "tslib": "^2.3.1" + } + }, + "node_modules/@sentry/electron/node_modules/@sentry/browser": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.30.0.tgz", + "integrity": "sha512-9hpaNAqIBDLdnrZ51iWkqenRotqqweE1f2AlHO56nyT/UE+u+GdmAiBrgRNqdFQQM13JtTG/gu4HGOyLWb9HEA==", + "dependencies": { + "@sentry/core": "7.30.0", + "@sentry/replay": "7.30.0", + "@sentry/types": "7.30.0", + "@sentry/utils": "7.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/electron/node_modules/@sentry/browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/electron/node_modules/@sentry/replay": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.30.0.tgz", + "integrity": "sha512-qJgz1tG0uStqMF5V7gN7KqxZuZY0MMQQY7siwPcSQVYj7X3AQswHjmvD4npEKbIa+jP6aQ6fFjoBjl3c0t3Mmg==", + "dependencies": { + "@sentry/core": "7.30.0", + "@sentry/types": "7.30.0", + "@sentry/utils": "7.30.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "@sentry/browser": ">=7.24.0" + } + }, + "node_modules/@sentry/node": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.30.0.tgz", + "integrity": "sha512-YYasu6C3I0HBP4N1oc/ed2nunxhGJgtAWaKwq3lo8uk3uF6cB1A8+2e0CpjzU5ejhbaFPUBxHyj4th39Bvku/w==", + "dependencies": { + "@sentry/core": "7.30.0", + "@sentry/types": "7.30.0", + "@sentry/utils": "7.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/node/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/replay": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.31.1.tgz", + "integrity": "sha512-sLArvwZn6IwA/bASctyhxN7LhdCXJvMmyTynRfmk7pzuNzBMc5CNlHeIsDpHrfQuH53IKicvl6cHnHyclu5DSA==", + "dependencies": { + "@sentry/core": "7.31.1", + "@sentry/types": "7.31.1", + "@sentry/utils": "7.31.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@sentry/replay/node_modules/@sentry/core": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.31.1.tgz", + "integrity": "sha512-quaNU6z8jabmatBTDi28Wpff2yzfWIp/IU4bbi2QOtEiCNT+TQJXqlRTRMu9xLrX7YzyKCL5X2gbit/85lyWUg==", + "dependencies": { + "@sentry/types": "7.31.1", + "@sentry/utils": "7.31.1", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/replay/node_modules/@sentry/types": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.31.1.tgz", + "integrity": "sha512-1uzr2l0AxEnxUX/S0EdmXUQ15/kDsam8Nbdw4Gai8SU764XwQgA/TTjoewVP597CDI/AHKan67Y630/Ylmkx9w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/replay/node_modules/@sentry/utils": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.31.1.tgz", + "integrity": "sha512-ZsIPq29aNdP9q3R7qIzJhZ9WW+4DzE9g5SfGwx3UjTIxoRRBfdUJUbf7S+LKEdvCkKbyoDt6FLt5MiSJV43xBA==", + "dependencies": { + "@sentry/types": "7.31.1", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/replay/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/types": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.30.0.tgz", + "integrity": "sha512-l4A86typvt/SfWh5JffpdxNGkg5EEA8m35BzpIcKmCAQZUDmnb4b478r8jdD2uuOjLmPNmZr1tifdRW4NCLuxQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/utils": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.30.0.tgz", + "integrity": "sha512-tSlBhr5u/LdE2emxIDTDmjmyRr99GnZGIAh5GwRxUgeDQ3VEfNUFlyFodBCbZ6yeYTYd6PWNih5xoHn1+Rf3Sw==", + "dependencies": { + "@sentry/types": "7.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/csf": { + "version": "0.0.2--canary.4566f4d.1", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/@storybook/csf-tools": { + "version": "6.5.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.12.10", + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/plugin-transform-react-jsx": "^7.12.12", + "@babel/preset-env": "^7.12.11", + "@babel/traverse": "^7.12.11", + "@babel/types": "^7.12.11", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/mdx1-csf": "^0.0.1", + "core-js": "^3.8.2", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "@storybook/mdx2-csf": "^0.0.3" + }, + "peerDependenciesMeta": { + "@storybook/mdx2-csf": { + "optional": true + } + } + }, + "node_modules/@storybook/csf-tools/node_modules/core-js": { + "version": "3.24.1", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/@storybook/mdx1-csf": { + "version": "0.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/preset-env": "^7.12.11", + "@babel/types": "^7.12.11", + "@mdx-js/mdx": "^1.6.22", + "@types/lodash": "^4.14.167", + "js-string-escape": "^1.0.1", + "loader-utils": "^2.0.0", + "lodash": "^4.17.21", + "prettier": ">=2.2.1 <=2.3.0", + "ts-dedent": "^2.0.0" + } + }, + "node_modules/@storybook/mdx1-csf/node_modules/prettier": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/accepts": { + "version": "1.3.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/auto-launch": { + "version": "5.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/command-line-args": { + "version": "5.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/component-emitter": { + "version": "1.2.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.3.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/content-disposition": { + "version": "0.5.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/cookies": { + "version": "0.7.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/express": "*", + "@types/keygrip": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cordova": { + "version": "0.0.34", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/cors": { + "version": "2.8.12", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dev": true, + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.4.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.30", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "optional": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/hast": { + "version": "2.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-assert": { + "version": "1.5.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "1.8.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "2.8.19", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/keygrip": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/koa": { + "version": "2.13.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/accepts": "*", + "@types/content-disposition": "*", + "@types/cookies": "*", + "@types/http-assert": "*", + "@types/http-errors": "*", + "@types/keygrip": "*", + "@types/koa-compose": "*", + "@types/node": "*" + } + }, + "node_modules/@types/koa-compose": { + "version": "3.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/koa": "*" + } + }, + "node_modules/@types/lodash": { + "version": "4.14.182", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "3.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mime": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "14.18.23", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/parse5": { + "version": "6.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/plist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.2.tgz", + "integrity": "sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*", + "xmlbuilder": ">=11.0.1" + } + }, + "node_modules/@types/polymer": { + "version": "1.2.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/webcomponents.js": "*" + } + }, + "node_modules/@types/prismjs": { + "version": "1.26.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.3.11", + "license": "MIT" + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/uuidv4": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/verror": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.6.tgz", + "integrity": "sha512-NNm+gdePAX1VGvPcGZCDKQZKYSiAWigKhKaz5KF94hG6f2s8de9Ow5+7AbXoeKxL8gavZfk4UquSAygOF2duEQ==", + "dev": true, + "optional": true + }, + "node_modules/@types/webcomponents.js": { + "version": "0.6.37", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "7.4.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "5.33.0", + "@typescript-eslint/type-utils": "5.33.0", + "@typescript-eslint/utils": "5.33.0", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.33.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "5.33.0", + "@typescript-eslint/types": "5.33.0", + "@typescript-eslint/typescript-estree": "5.33.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.33.0", + "@typescript-eslint/visitor-keys": "5.33.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "5.33.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.33.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.33.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.33.0", + "@typescript-eslint/visitor-keys": "5.33.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.33.0", + "@typescript-eslint/types": "5.33.0", + "@typescript-eslint/typescript-estree": "5.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.33.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@web/config-loader": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/config-loader/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@web/dev-server": { + "version": "0.1.35", + "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.35.tgz", + "integrity": "sha512-E7TSTSFdGPzhkiE3kIVt8i49gsiAYpJIZHzs1vJmVfdt8U4rsmhE+5roezxZo0hkEw4mNsqj9zCc4Dzqy/IFHg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.11", + "@types/command-line-args": "^5.0.0", + "@web/config-loader": "^0.1.3", + "@web/dev-server-core": "^0.3.19", + "@web/dev-server-rollup": "^0.3.19", + "camelcase": "^6.2.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.1", + "debounce": "^1.2.0", + "deepmerge": "^4.2.2", + "ip": "^1.1.5", + "nanocolors": "^0.2.1", + "open": "^8.0.2", + "portfinder": "^1.0.32" + }, + "bin": { + "wds": "dist/bin.js", + "web-dev-server": "dist/bin.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/dev-server-core": { + "version": "0.3.19", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/koa": "^2.11.6", + "@types/ws": "^7.4.0", + "@web/parse5-utils": "^1.2.0", + "chokidar": "^3.4.3", + "clone": "^2.1.2", + "es-module-lexer": "^1.0.0", + "get-stream": "^6.0.0", + "is-stream": "^2.0.0", + "isbinaryfile": "^4.0.6", + "koa": "^2.13.0", + "koa-etag": "^4.0.0", + "koa-send": "^5.0.1", + "koa-static": "^5.0.0", + "lru-cache": "^6.0.0", + "mime-types": "^2.1.27", + "parse5": "^6.0.1", + "picomatch": "^2.2.2", + "ws": "^7.4.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/dev-server-esbuild": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@web/dev-server-esbuild/-/dev-server-esbuild-0.3.3.tgz", + "integrity": "sha512-hB9C8X9NsFWUG2XKT3W+Xcw3IZ/VObf4LNbK14BTjApnNyZfV6hVhSlJfvhgOoJ4DxsImfhIB5+gMRKOG9NmBw==", + "dev": true, + "dependencies": { + "@mdn/browser-compat-data": "^4.0.0", + "@web/dev-server-core": "^0.3.19", + "esbuild": "^0.12 || ^0.13 || ^0.14", + "parse5": "^6.0.1", + "ua-parser-js": "^1.0.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/dev-server-rollup": { + "version": "0.3.19", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/plugin-node-resolve": "^13.0.4", + "@web/dev-server-core": "^0.3.19", + "nanocolors": "^0.2.1", + "parse5": "^6.0.1", + "rollup": "^2.67.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/dev-server-storybook": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@web/dev-server-storybook/-/dev-server-storybook-0.5.4.tgz", + "integrity": "sha512-zZg2cRrE9HjObL2rtD+P6OvV0qDcxOkSeY13iLxv938/01vAsNUS8eTvdGi2Hzz+EzxvuM6QitKKlxFGG3rKZw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/preset-env": "^7.16.4", + "@mdx-js/mdx": "^1.6.22", + "@rollup/plugin-babel": "^5.3.0", + "@rollup/plugin-node-resolve": "^13.0.4", + "@storybook/csf-tools": "^6.4.9", + "@web/dev-server-core": "^0.3.19", + "@web/rollup-plugin-html": "^1.10.1", + "@web/rollup-plugin-polyfills-loader": "^1.1.1", + "@web/storybook-prebuilt": "^0.1.32", + "babel-plugin-bundled-import-meta": "^0.3.2", + "babel-plugin-template-html-minifier": "^4.1.0", + "es-module-lexer": "^1.0.2", + "globby": "^11.0.1", + "path-is-inside": "^1.0.2", + "rollup": "^2.66.1", + "rollup-plugin-terser": "^7.0.2", + "storybook-addon-markdown-docs": "^1.0.4" + }, + "bin": { + "build-storybook": "dist/build/cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/parse5-utils": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/parse5": "^6.0.1", + "parse5": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/polyfills-loader": { + "version": "1.3.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.12.10", + "@web/parse5-utils": "^1.3.0", + "@webcomponents/shadycss": "^1.11.0", + "@webcomponents/webcomponentsjs": "^2.5.0", + "abortcontroller-polyfill": "^1.5.0", + "construct-style-sheets-polyfill": "^3.0.5", + "core-js-bundle": "^3.8.1", + "dynamic-import-polyfill": "^0.1.1", + "es-module-shims": "^1.4.1", + "intersection-observer": "^0.12.0", + "parse5": "^6.0.1", + "regenerator-runtime": "^0.13.7", + "resize-observer-polyfill": "^1.5.1", + "shady-css-scoped-element": "^0.0.2", + "systemjs": "^6.8.1", + "terser": "^5.14.2", + "whatwg-fetch": "^3.5.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@web/rollup-plugin-html": { + "version": "1.10.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@web/parse5-utils": "^1.3.0", + "glob": "^7.1.6", + "html-minifier-terser": "^6.0.0", + "parse5": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@web/rollup-plugin-polyfills-loader": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@web/polyfills-loader": "^1.3.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@web/storybook-prebuilt": { + "version": "0.1.34", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webcomponents/shadycss": { + "version": "1.11.0", + "license": "BSD-3-Clause" + }, + "node_modules/@webcomponents/webcomponentsjs": { + "version": "2.6.0", + "license": "BSD-3-Clause" + }, + "node_modules/@webpack-cli/configtest": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "1.7.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/7zip-bin": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz", + "integrity": "sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "dev": true, + "license": "ISC" + }, + "node_modules/abortcontroller-polyfill": { + "version": "1.7.3", + "dev": true, + "license": "MIT" + }, + "node_modules/accepts": { + "version": "1.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.0", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/agentkeepalive/node_modules/depd": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-errors": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": ">=5.0.0" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/android-versions": { + "version": "1.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^5.7.1" + } + }, + "node_modules/android-versions/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/ansi": { + "version": "0.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-colors": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-base": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/app-builder-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz", + "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", + "dev": true + }, + "node_modules/app-builder-lib": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-23.6.0.tgz", + "integrity": "sha512-dQYDuqm/rmy8GSCE6Xl/3ShJg6Ab4bZJMT8KaTKGzT436gl1DN4REP3FCWfXoh75qGTJ+u+WsdnnpO9Jl8nyMA==", + "dev": true, + "dependencies": { + "@develar/schema-utils": "~2.6.5", + "@electron/universal": "1.2.1", + "@malept/flatpak-bundler": "^0.4.0", + "7zip-bin": "~5.1.1", + "async-exit-hook": "^2.0.1", + "bluebird-lst": "^1.0.9", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", + "chromium-pickle-js": "^0.2.0", + "debug": "^4.3.4", + "ejs": "^3.1.7", + "electron-osx-sign": "^0.6.0", + "electron-publish": "23.6.0", + "form-data": "^4.0.0", + "fs-extra": "^10.1.0", + "hosted-git-info": "^4.1.0", + "is-ci": "^3.0.0", + "isbinaryfile": "^4.0.10", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.5", + "minimatch": "^3.1.2", + "read-config-file": "6.2.0", + "sanitize-filename": "^1.6.3", + "semver": "^7.3.7", + "tar": "^6.1.11", + "temp-file": "^3.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/app-builder-lib/node_modules/builder-util-runtime": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", + "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/app-builder-lib/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/app-builder-lib/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/append-type": { + "version": "1.0.2", + "dev": true, + "license": "MIT-0" + }, + "node_modules/applescript": { + "version": "1.0.0" + }, + "node_modules/aproba": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "node_modules/are-we-there-yet": { + "version": "1.1.7", + "dev": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "license": "Python-2.0" + }, + "node_modules/args": { + "version": "2.6.1", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "4.1.0", + "chalk": "1.1.3", + "minimist": "1.2.0", + "pkginfo": "0.4.0", + "string-similarity": "1.1.0" + }, + "engines": { + "node": ">= 6.6.0" + } + }, + "node_modules/args/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/args/node_modules/ansi-styles": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/args/node_modules/camelcase": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/args/node_modules/chalk": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/args/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/args/node_modules/minimist": { + "version": "1.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/args/node_modules/strip-ansi": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/args/node_modules/supports-color": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/array-back": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/array-differ": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/array-ify": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-to-sentence": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/asar": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/asar/-/asar-3.2.0.tgz", + "integrity": "sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg==", + "deprecated": "Please use @electron/asar moving forward. There is no API change, just a package name change", + "dev": true, + "dependencies": { + "chromium-pickle-js": "^0.2.0", + "commander": "^5.0.0", + "glob": "^7.1.6", + "minimatch": "^3.0.4" + }, + "bin": { + "asar": "bin/asar.js" + }, + "engines": { + "node": ">=10.12.0" + }, + "optionalDependencies": { + "@types/glob": "^7.1.1" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assert-valid-glob-opts": { + "version": "1.0.0", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "glob-option-error": "^1.0.0", + "validate-glob-opts": "^1.0.0" + } + }, + "node_modules/ast-metadata-inferer": { + "version": "0.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@mdn/browser-compat-data": "^3.3.14" + } + }, + "node_modules/ast-metadata-inferer/node_modules/@mdn/browser-compat-data": { + "version": "3.3.14", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/auto-launch": { + "version": "5.0.5", + "license": "MIT", + "dependencies": { + "applescript": "^1.0.0", + "mkdirp": "^0.5.1", + "path-is-absolute": "^1.0.0", + "untildify": "^3.0.2", + "winreg": "1.2.4" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-loader": { + "version": "8.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-plugin-apply-mdx-type-prop": { + "version": "1.6.22", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.22" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@babel/core": "^7.11.6" + } + }, + "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-plugin-bundled-import-meta": { + "version": "0.3.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/plugin-syntax-import-meta": "^7.2.0", + "@babel/template": "^7.7.0" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "@babel/core": "^7.7.0" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-extract-import-names": { + "version": "1.6.22", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.2", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.2", + "core-js-compat": "^3.21.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-template-html-minifier": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-css": "^4.2.1", + "html-minifier-terser": "^5.0.0", + "is-builtin-module": "^3.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/babel-plugin-template-html-minifier/node_modules/commander": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/babel-plugin-template-html-minifier/node_modules/html-minifier-terser": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/babel-plugin-template-html-minifier/node_modules/terser": { + "version": "4.8.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/babel-plugin-template-html-minifier/node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "dev": true, + "license": "MIT" + }, + "node_modules/bail": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/base64id": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "dev": true, + "license": "MIT" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/big-integer": { + "version": "1.6.51", + "dev": true, + "license": "Unlicense", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "dev": true, + "license": "MIT" + }, + "node_modules/bluebird-lst": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", + "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5" + } + }, + "node_modules/bmp-js": { + "version": "0.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.0.13", + "dev": true, + "license": "MIT", + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/bonjour-service/node_modules/array-flatten": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "dev": true, + "optional": true + }, + "node_modules/bplist-creator": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "stream-buffers": "2.2.x" + } + }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.3", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "dev": true + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/builder-util": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-23.6.0.tgz", + "integrity": "sha512-QiQHweYsh8o+U/KNCZFSvISRnvRctb8m/2rB2I1JdByzvNKxPeFLlHFRPQRXab6aYeXc18j9LpsDLJ3sGQmWTQ==", + "dev": true, + "dependencies": { + "@types/debug": "^4.1.6", + "@types/fs-extra": "^9.0.11", + "7zip-bin": "~5.1.1", + "app-builder-bin": "4.0.0", + "bluebird-lst": "^1.0.9", + "builder-util-runtime": "9.1.1", + "chalk": "^4.1.1", + "cross-spawn": "^7.0.3", + "debug": "^4.3.4", + "fs-extra": "^10.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-ci": "^3.0.0", + "js-yaml": "^4.1.0", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.4.0" + } + }, + "node_modules/builder-util-runtime": { + "version": "9.0.3", + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/builder-util/node_modules/builder-util-runtime": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", + "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/builder-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/builder-util/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtins": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "12.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "5.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/cacache/node_modules/yallist": { + "version": "3.1.1", + "dev": true, + "license": "ISC" + }, + "node_modules/cache-content-type": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "^2.1.18", + "ylru": "^1.2.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-callsite/node_modules/callsites": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001451", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001451.tgz", + "integrity": "sha512-XY7UbUpGRatZzoRft//5xOa69/1iGJRBlrieH6QYrkKLIFn3m7OVEJ81dSrKoy2BnKsdbX5cLrOispZNYo9v2w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/caseless": { + "version": "0.12.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/ccount": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "1.2.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "dev": true, + "license": "ISC" + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/chromium-pickle-js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", + "dev": true + }, + "node_modules/ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-css": { + "version": "4.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "optional": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/co": { + "version": "4.6.0", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collapse-white-space": { + "version": "1.0.6", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.19", + "dev": true, + "license": "MIT" + }, + "node_modules/colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/comma-separated-tokens": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/command-line-args": { + "version": "5.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage": { + "version": "6.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/command-line-usage/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/command-line-usage/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/command-line-usage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/command-line-usage/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/compare-func": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/compare-version": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/compressible": { + "version": "2.0.18", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "optional": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/connect": { + "version": "3.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/finalhandler": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/connect/node_modules/on-finished": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "node_modules/construct-style-sheets-polyfill": { + "version": "3.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/content-type": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/conventional-changelog-conventionalcommits": { + "version": "4.6.3", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0", + "lodash": "^4.17.15", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cookie": { + "version": "0.4.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/cookies": { + "version": "0.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "keygrip": "~1.1.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/copy-concurrently": { + "version": "1.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "node_modules/copy-dir": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-webpack-plugin": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "cacache": "^12.0.3", + "find-cache-dir": "^2.1.0", + "glob-parent": "^3.1.0", + "globby": "^7.1.1", + "is-glob": "^4.0.1", + "loader-utils": "^1.2.3", + "minimatch": "^3.0.4", + "normalize-path": "^3.0.0", + "p-limit": "^2.2.1", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "webpack-log": "^2.0.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/array-union": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/dir-glob": { + "version": "2.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/find-cache-dir": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/copy-webpack-plugin/node_modules/find-up": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "3.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "7.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ignore": { + "version": "3.3.10", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-webpack-plugin/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/copy-webpack-plugin/node_modules/loader-utils": { + "version": "1.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/locate-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/copy-webpack-plugin/node_modules/make-dir": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/copy-webpack-plugin/node_modules/make-dir/node_modules/pify": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/copy-webpack-plugin/node_modules/p-locate": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/copy-webpack-plugin/node_modules/path-exists": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/path-type": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/pkg-dir": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cordova-android": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-11.0.0.tgz", + "integrity": "sha512-ZhvSF5BYY8gmrAu1PtMPdHFsRoom/emT4OtTcecmh3Zj22900y4Golg5whhBPcYcTPC7BU6PG/EmG9BBHcX9tQ==", + "dev": true, + "dependencies": { + "android-versions": "^1.7.0", + "cordova-common": "^4.0.2", + "execa": "^5.1.1", + "fast-glob": "^3.2.11", + "fs-extra": "^10.1.0", + "is-path-inside": "^3.0.3", + "nopt": "^5.0.0", + "properties-parser": "^0.3.1", + "semver": "^7.3.7", + "untildify": "^4.0.0", + "which": "^2.0.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/cordova-android/node_modules/fs-extra": { + "version": "10.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cordova-android/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cordova-android/node_modules/untildify": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cordova-browser": { + "version": "6.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "cordova-common": "^3.1.0", + "cordova-serve": "^3.0.0", + "nopt": "^4.0.1", + "shelljs": "^0.5.3" + }, + "bin": { + "cordova-browser": "bin/create" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/cordova-browser/node_modules/bplist-parser": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "big-integer": "^1.6.7" + } + }, + "node_modules/cordova-browser/node_modules/cordova-common": { + "version": "3.2.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "ansi": "^0.3.1", + "bplist-parser": "^0.1.0", + "cross-spawn": "^6.0.5", + "elementtree": "0.1.7", + "endent": "^1.1.1", + "fs-extra": "^8.0.0", + "glob": "^7.1.2", + "minimatch": "^3.0.0", + "plist": "^3.0.1", + "q": "^1.4.1", + "strip-bom": "^3.0.0", + "underscore": "^1.8.3", + "which": "^1.3.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/cordova-browser/node_modules/cross-spawn": { + "version": "6.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cordova-browser/node_modules/fs-extra": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/cordova-browser/node_modules/jsonfile": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/cordova-browser/node_modules/nopt": { + "version": "4.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "1", + "osenv": "^0.1.4" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/cordova-browser/node_modules/path-key": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/cordova-browser/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/cordova-browser/node_modules/shebang-command": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cordova-browser/node_modules/shebang-regex": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cordova-browser/node_modules/strip-bom": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/cordova-browser/node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/cordova-browser/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/cordova-common": { + "version": "4.0.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@netflix/nerror": "^1.1.3", + "ansi": "^0.3.1", + "bplist-parser": "^0.2.0", + "cross-spawn": "^7.0.1", + "elementtree": "^0.1.7", + "endent": "^1.4.1", + "fast-glob": "^3.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "plist": "^3.0.1", + "q": "^1.5.1", + "read-chunk": "^3.2.0", + "strip-bom": "^4.0.0", + "underscore": "^1.9.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/cordova-fetch": { + "version": "3.0.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "cordova-common": "^4.0.0", + "fs-extra": "^9.0.0", + "npm-package-arg": "^8.0.1", + "pacote": "^11.1.11", + "pify": "^5.0.0", + "resolve": "^1.15.1", + "semver": "^7.1.3", + "which": "^2.0.2" + }, + "engines": { + "node": ">= 10", + "npm": ">= 5.6.0" + } + }, + "node_modules/cordova-fetch/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cordova-ios": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/cordova-ios/-/cordova-ios-6.3.0.tgz", + "integrity": "sha512-BZybgFzc7D0HmhkTYurFrRXiWgvYohmT7bwQsLPhf+VdiDjwGXbiSWgg3uP9MChvacCNcGXXUl2NhOaNC9UVaA==", + "dev": true, + "dependencies": { + "cordova-common": "^4.0.2", + "fs-extra": "^9.1.0", + "ios-sim": "^8.0.2", + "nopt": "^5.0.0", + "plist": "^3.0.1", + "semver": "^7.3.4", + "unorm": "^1.6.0", + "which": "^2.0.2", + "xcode": "^3.0.1", + "xml-escape": "^1.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cordova-ios/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cordova-lib": { + "version": "11.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "cordova-common": "^4.0.2", + "cordova-fetch": "^3.0.1", + "cordova-serve": "^4.0.0", + "dep-graph": "^1.1.0", + "detect-indent": "^6.1.0", + "detect-newline": "^3.1.0", + "elementtree": "^0.1.7", + "execa": "^5.1.1", + "fs-extra": "^10.0.0", + "globby": "^11.0.4", + "init-package-json": "^2.0.5", + "md5-file": "^5.0.0", + "pify": "^5.0.0", + "semver": "^7.3.5", + "stringify-package": "^1.0.1", + "write-file-atomic": "^3.0.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cordova-lib/node_modules/chalk": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cordova-lib/node_modules/cordova-serve": { + "version": "4.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "chalk": "^3.0.0", + "compression": "^1.7.4", + "express": "^4.17.1", + "open": "^7.0.3", + "which": "^2.0.2" + }, + "engines": { + "node": ">= 10", + "npm": ">= 5.6.0" + } + }, + "node_modules/cordova-lib/node_modules/fs-extra": { + "version": "10.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cordova-lib/node_modules/open": { + "version": "7.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cordova-lib/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cordova-osx": { + "version": "7.1.0-dev", + "resolved": "git+ssh://git@github.com/apache/cordova-osx.git#16b56e4a9297c5195a06a57450aeb983e7053184", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "cordova-common": "^4.0.2", + "nopt": "^5.0.0", + "plist": "^3.0.4", + "shelljs": "^0.8.5", + "underscore": "^1.13.2", + "unorm": "^1.4.1", + "xcode": "^3.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/cordova-osx/node_modules/interpret": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cordova-osx/node_modules/rechoir": { + "version": "0.6.2", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cordova-osx/node_modules/shelljs": { + "version": "0.8.5", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cordova-plugin-clipboard": { + "version": "2.0.0", + "resolved": "git+ssh://git@github.com/Jigsaw-Code/outline-cordova-plugin-clipboard.git#8cc5101b7a264122c71f7f3a3cb5744a8fad8498", + "dev": true, + "license": "MIT" + }, + "node_modules/cordova-plugin-outline": { + "resolved": "src/cordova/plugin", + "link": true + }, + "node_modules/cordova-plugin-splashscreen": { + "version": "6.0.2", + "license": "Apache-2.0", + "engines": { + "cordovaDependencies": { + ">=4.0.0": { + "cordova-android": ">=3.6.0", + "cordova-windows": ">=4.4.0" + }, + "2.0.0": { + "cordova-android": ">=3.6.0" + }, + "6.0.2": { + "cordova-android": ">=3.6.0 <11.0.0", + "cordova-windows": ">=4.4.0" + }, + "7.0.0": { + "cordova": ">100" + } + } + } + }, + "node_modules/cordova-plugin-statusbar": { + "version": "2.4.3", + "license": "Apache-2.0", + "engines": { + "cordovaDependencies": { + "0.1.0": { + "cordova": ">=3.0.0" + }, + "3.0.0": { + "cordova": ">100" + } + } + } + }, + "node_modules/cordova-serve": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "chalk": "^2.4.1", + "compression": "^1.6.0", + "express": "^4.13.3", + "opn": "^5.3.0", + "which": "^1.3.0" + }, + "engines": { + "node": ">= 6", + "npm": ">= 3" + } + }, + "node_modules/cordova-serve/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cordova-serve/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cordova-serve/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/cordova-serve/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/cordova-serve/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/cordova-serve/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/cordova-serve/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cordova-serve/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/cordova-webintent": { + "version": "2.0.0", + "resolved": "git+ssh://git@github.com/cordova-misc/cordova-webintent.git#6c045cece3e49e4dd061d56fc15569053e9a0c4a", + "dev": true, + "license": "MIT" + }, + "node_modules/core-js": { + "version": "2.6.12", + "dev": true, + "hasInstallScript": true, + "license": "MIT" + }, + "node_modules/core-js-bundle": { + "version": "3.24.1", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.24.1", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.3", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "5.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/cosmiconfig/node_modules/import-fresh": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/cosmiconfig/node_modules/resolve-from": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/cosmiconfig/node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "optional": true, + "dependencies": { + "buffer": "^5.1.0" + } + }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "node-fetch": "2.6.7" + } + }, + "node_modules/cross-fetch/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/cross-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/cross-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/cross-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-loader": { + "version": "5.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } + }, + "node_modules/css-loader/node_modules/icss-utils": { + "version": "5.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/css-loader/node_modules/picocolors": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/css-loader/node_modules/postcss": { + "version": "8.4.16", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/css-loader/node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/css-loader/node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/css-loader/node_modules/postcss-modules-scope": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/css-loader/node_modules/postcss-modules-values": { + "version": "4.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/css-loader/node_modules/schema-utils": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-selector-parser": { + "version": "1.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/css-what": { + "version": "6.1.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/custom-event": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/cyclist": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/dashdash": { + "version": "1.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", + "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/date-format": { + "version": "4.0.13", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debounce": { + "version": "1.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.3.4", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-equal": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/del": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/del/node_modules/array-union": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/dep-graph": { + "version": "1.1.0", + "dev": true, + "dependencies": { + "underscore": "1.2.1" + } + }, + "node_modules/dep-graph/node_modules/underscore": { + "version": "1.2.1", + "dev": true + }, + "node_modules/depd": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detab": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "repeat-string": "^1.5.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/devtools-protocol": { + "version": "0.0.981744", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/di": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/dir-compare": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz", + "integrity": "sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA==", + "dev": true, + "dependencies": { + "buffer-equal": "1.0.0", + "colors": "1.0.3", + "commander": "2.9.0", + "minimatch": "3.0.4" + }, + "bin": { + "dircompare": "src/cli/dircompare.js" + } + }, + "node_modules/dir-compare/node_modules/commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==", + "dev": true, + "dependencies": { + "graceful-readlink": ">= 1.0.0" + }, + "engines": { + "node": ">= 0.6.x" + } + }, + "node_modules/dir-compare/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dmg-builder": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-23.6.0.tgz", + "integrity": "sha512-jFZvY1JohyHarIAlTbfQOk+HnceGjjAdFjVn3n8xlDWKsYNqbO4muca6qXEZTfGXeQMG7TYim6CeS5XKSfSsGA==", + "dev": true, + "dependencies": { + "app-builder-lib": "23.6.0", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", + "fs-extra": "^10.0.0", + "iconv-lite": "^0.6.2", + "js-yaml": "^4.1.0" + }, + "optionalDependencies": { + "dmg-license": "^1.0.11" + } + }, + "node_modules/dmg-builder/node_modules/builder-util-runtime": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", + "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/dmg-builder/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dmg-license": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", + "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "@types/plist": "^3.0.1", + "@types/verror": "^1.10.3", + "ajv": "^6.10.0", + "crc": "^3.8.0", + "iconv-corefoundation": "^1.1.7", + "plist": "^3.0.4", + "smart-buffer": "^4.0.2", + "verror": "^1.10.0" + }, + "bin": { + "dmg-license": "bin/dmg-license.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-walk": { + "version": "0.1.2", + "dev": true + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "4.3.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", + "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "node_modules/duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", + "dev": true + }, + "node_modules/duplexify": { + "version": "3.7.1", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/dynamic-import-polyfill": { + "version": "0.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron": { + "version": "19.1.9", + "resolved": "https://registry.npmjs.org/electron/-/electron-19.1.9.tgz", + "integrity": "sha512-XT5LkTzIHB+ZtD3dTmNnKjVBWrDWReCKt9G1uAFLz6uJMEVcIUiYO+fph5pLXETiBw/QZBx8egduMEfIccLx+g==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@electron/get": "^1.14.1", + "@types/node": "^16.11.26", + "extract-zip": "^1.0.3" + }, + "bin": { + "electron": "cli.js" + }, + "engines": { + "node": ">= 8.6" + } + }, + "node_modules/electron-builder": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-23.6.0.tgz", + "integrity": "sha512-y8D4zO+HXGCNxFBV/JlyhFnoQ0Y0K7/sFH+XwIbj47pqaW8S6PGYQbjoObolKBR1ddQFPt4rwp4CnwMJrW3HAw==", + "dev": true, + "dependencies": { + "@types/yargs": "^17.0.1", + "app-builder-lib": "23.6.0", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", + "chalk": "^4.1.1", + "dmg-builder": "23.6.0", + "fs-extra": "^10.0.0", + "is-ci": "^3.0.0", + "lazy-val": "^1.0.5", + "read-config-file": "6.2.0", + "simple-update-notifier": "^1.0.7", + "yargs": "^17.5.1" + }, + "bin": { + "electron-builder": "cli.js", + "install-app-deps": "install-app-deps.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/electron-builder/node_modules/builder-util-runtime": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", + "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/electron-builder/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/electron-builder/node_modules/fs-extra": { + "version": "10.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-icon-maker": { + "version": "0.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "args": "^2.3.0", + "icon-gen": "2.0.0", + "jimp": "^0.14.0" + }, + "bin": { + "electron-icon-maker": "index.js" + } + }, + "node_modules/electron-osx-sign": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.6.0.tgz", + "integrity": "sha512-+hiIEb2Xxk6eDKJ2FFlpofCnemCbjbT5jz+BKGpVBrRNT3kWTGs4DfNX6IzGwgi33hUcXF+kFs9JW+r6Wc1LRg==", + "deprecated": "Please use @electron/osx-sign moving forward. Be aware the API is slightly different", + "dev": true, + "dependencies": { + "bluebird": "^3.5.0", + "compare-version": "^0.1.2", + "debug": "^2.6.8", + "isbinaryfile": "^3.0.2", + "minimist": "^1.2.0", + "plist": "^3.0.1" + }, + "bin": { + "electron-osx-flat": "bin/electron-osx-flat.js", + "electron-osx-sign": "bin/electron-osx-sign.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/electron-osx-sign/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/electron-osx-sign/node_modules/isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, + "dependencies": { + "buffer-alloc": "^1.2.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/electron-osx-sign/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/electron-publish": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-23.6.0.tgz", + "integrity": "sha512-jPj3y+eIZQJF/+t5SLvsI5eS4mazCbNYqatv5JihbqOstIM13k0d1Z3vAWntvtt13Itl61SO6seicWdioOU5dg==", + "dev": true, + "dependencies": { + "@types/fs-extra": "^9.0.11", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", + "chalk": "^4.1.1", + "fs-extra": "^10.0.0", + "lazy-val": "^1.0.5", + "mime": "^2.5.2" + } + }, + "node_modules/electron-publish/node_modules/builder-util-runtime": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", + "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/electron-publish/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/electron-publish/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.215", + "license": "ISC" + }, + "node_modules/electron-updater": { + "version": "5.2.1", + "license": "MIT", + "dependencies": { + "@types/semver": "^7.3.6", + "builder-util-runtime": "9.0.3", + "fs-extra": "^10.0.0", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.5", + "lodash.escaperegexp": "^4.1.2", + "lodash.isequal": "^4.5.0", + "semver": "^7.3.5", + "typed-emitter": "^2.1.0" + } + }, + "node_modules/electron-updater/node_modules/fs-extra": { + "version": "10.1.0", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-updater/node_modules/semver": { + "version": "7.3.7", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/electron/node_modules/@types/node": { + "version": "16.11.47", + "dev": true, + "license": "MIT" + }, + "node_modules/elementtree": { + "version": "0.1.7", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "sax": "1.1.4" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/elementtree/node_modules/sax": { + "version": "1.1.4", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/endent": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "dedent": "^0.7.0", + "fast-json-parse": "^1.0.3", + "objectorarray": "^1.0.4" + } + }, + "node_modules/engine.io": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/ws": { + "version": "8.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/enhanced-resolve": { + "version": "5.10.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ent": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "2.2.0", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/envinfo": { + "version": "7.8.1", + "dev": true, + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.20.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-module-lexer": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/es-module-shims": { + "version": "1.5.14", + "dev": true, + "license": "MIT" + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "optional": true + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.12.29", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", + "dev": true, + "dependencies": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.12.0" + }, + "optionalDependencies": { + "source-map": "~0.2.0" + } + }, + "node_modules/escodegen/node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", + "dev": true, + "optional": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.3", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.4.0", + "dev": true, + "license": "ISC", + "dependencies": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.10.0", + "get-tsconfig": "^4.2.0", + "globby": "^13.1.2", + "is-core-module": "^2.9.0", + "is-glob": "^4.0.3", + "synckit": "^0.8.1" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-import-resolver-typescript/node_modules/globby": { + "version": "13.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-import-resolver-typescript/node_modules/slash": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.3", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils/node_modules/find-up": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/locate-path": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/p-limit": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/p-locate": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/p-try": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/path-exists": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-compat": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@mdn/browser-compat-data": "^4.1.5", + "ast-metadata-inferer": "^0.7.0", + "browserslist": "^4.16.8", + "caniuse-lite": "^1.0.30001304", + "core-js": "^3.16.2", + "find-up": "^5.0.0", + "lodash.memoize": "4.1.2", + "semver": "7.3.5" + }, + "engines": { + "node": ">=9.x" + }, + "peerDependencies": { + "eslint": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-compat/node_modules/core-js": { + "version": "3.24.1", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/eslint-plugin-compat/node_modules/semver": { + "version": "7.3.5", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.26.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.17.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esm": { + "version": "3.2.25", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/espree": { + "version": "9.3.3", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exif-parser": { + "version": "0.1.12", + "dev": true + }, + "node_modules/express": { + "version": "4.18.1", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/extract-zip": { + "version": "1.7.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + } + }, + "node_modules/extract-zip/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/extract-zip/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/extsprintf": { + "version": "1.4.1", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.2.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-parse": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.13.0", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/figgy-pudding": { + "version": "3.5.2", + "dev": true, + "license": "ISC" + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/file-type": { + "version": "9.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/file-url": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-replace": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/findup": { + "version": "0.1.5", + "dev": true, + "dependencies": { + "colors": "~0.6.0-1", + "commander": "~2.1.0" + }, + "bin": { + "findup": "bin/findup.js" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/findup/node_modules/colors": { + "version": "0.6.2", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/findup/node_modules/commander": { + "version": "2.1.0", + "dev": true, + "engines": { + "node": ">= 0.6.x" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flatted": { + "version": "3.2.6", + "dev": true, + "license": "ISC" + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.3", + "dev": true, + "license": "Unlicense" + }, + "node_modules/fs-write-stream-atomic": { + "version": "1.0.10", + "dev": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "2.7.4", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/gauge/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/string-width": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/strip-ansi": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stdin": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/gifwrap": { + "version": "0.9.4", + "dev": true, + "license": "MIT", + "dependencies": { + "image-q": "^4.0.0", + "omggif": "^1.0.10" + } + }, + "node_modules/github-markdown-css": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/github-slugger": { + "version": "1.4.0", + "dev": true, + "license": "ISC" + }, + "node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-option-error": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/global": { + "version": "4.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/global-agent/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "optional": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/global-tunnel-ng": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", + "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", + "dev": true, + "optional": true, + "dependencies": { + "encodeurl": "^1.0.2", + "lodash": "^4.17.10", + "npm-conf": "^1.1.3", + "tunnel": "^0.0.6" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "optional": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globalyzer": { + "version": "0.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/globby": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globrex": { + "version": "0.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/got/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "license": "ISC" + }, + "node_modules/graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==", + "dev": true + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/hasha": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-stream": "^1.0.1", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hasha/node_modules/is-stream": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hast-to-hyperscript": { + "version": "9.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5/node_modules/@types/parse5": { + "version": "5.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/hast-util-has-property": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-heading-rank": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "2.2.5", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-sanitize": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "7.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ccount": "^1.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-is-element": "^1.0.0", + "hast-util-whitespace": "^1.0.0", + "html-void-elements": "^1.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0", + "stringify-entities": "^3.0.1", + "unist-util-is": "^4.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-string": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/he": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.3.3", + "dev": true, + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-minifier-terser/node_modules/clean-css": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-void-elements": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-assert": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-equal": "~1.0.1", + "http-errors": "~1.8.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-assert/node_modules/depd": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-assert/node_modules/http-errors": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-assert/node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/husky": { + "version": "1.3.1", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "cosmiconfig": "^5.0.7", + "execa": "^1.0.0", + "find-up": "^3.0.0", + "get-stdin": "^6.0.0", + "is-ci": "^2.0.0", + "pkg-dir": "^3.0.0", + "please-upgrade-node": "^3.1.1", + "read-pkg": "^4.0.1", + "run-node": "^1.0.0", + "slash": "^2.0.0" + }, + "bin": { + "husky-upgrade": "lib/upgrader/bin.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/husky/node_modules/ci-info": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/husky/node_modules/cross-spawn": { + "version": "6.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/husky/node_modules/execa": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/husky/node_modules/find-up": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/husky/node_modules/get-stream": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/husky/node_modules/is-ci": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/husky/node_modules/is-stream": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/husky/node_modules/locate-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/husky/node_modules/npm-run-path": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/husky/node_modules/p-locate": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/husky/node_modules/path-exists": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/husky/node_modules/path-key": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/husky/node_modules/pkg-dir": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/husky/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/husky/node_modules/shebang-command": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/husky/node_modules/shebang-regex": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/husky/node_modules/slash": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/husky/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/icon-gen": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "del": "^3.0.0", + "mkdirp": "^0.5.1", + "pngjs-nozlib": "^1.0.0", + "svg2png": "4.1.1", + "uuid": "^3.3.2" + }, + "bin": { + "icon-gen": "dist/bin/index.js" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/iconv-corefoundation": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", + "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "cli-truncate": "^2.1.0", + "node-addon-api": "^1.6.3" + }, + "engines": { + "node": "^8.11.2 || >=10" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/iferr": { + "version": "0.1.5", + "dev": true, + "license": "MIT" + }, + "node_modules/ignore": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "3.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "node_modules/image-q": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "16.9.1" + } + }, + "node_modules/image-q/node_modules/@types/node": { + "version": "16.9.1", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/indexed-filter": { + "version": "1.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "append-type": "^1.0.1" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "dev": true, + "license": "ISC" + }, + "node_modules/inflight": { + "version": "1.0.6", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "optional": true + }, + "node_modules/init-package-json": { + "version": "2.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^8.1.5", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "^4.1.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/init-package-json/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/inspect-with-kind": { + "version": "1.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "kind-of": "^6.0.2" + } + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/intersection-observer": { + "version": "0.12.2", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/intl-messageformat": { + "version": "9.13.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/fast-memoize": "1.2.1", + "@formatjs/icu-messageformat-parser": "2.1.0", + "tslib": "^2.1.0" + } + }, + "node_modules/intl-messageformat-parser": { + "version": "1.4.0", + "license": "BSD-3-Clause" + }, + "node_modules/invert-kv": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ios-deploy": { + "version": "1.11.4", + "hasInstallScript": true, + "license": "GPLv3", + "optional": true, + "os": [ + "darwin" + ], + "bin": { + "ios-deploy": "build/Release/ios-deploy" + } + }, + "node_modules/ios-sim": { + "version": "8.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "bplist-parser": "^0.0.6", + "nopt": "1.0.9", + "plist": "^3.0.1", + "simctl": "^2" + }, + "bin": { + "ios-sim": "bin/ios-sim" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ios-sim/node_modules/bplist-parser": { + "version": "0.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/ios-sim/node_modules/nopt": { + "version": "1.0.9", + "dev": true, + "license": "MIT", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/ip": { + "version": "1.1.8", + "license": "MIT" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-builtin-module": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-callable": { + "version": "1.2.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.10.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-directory": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-function": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-module": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-cwd": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-in-cwd": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-path-inside": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-in-cwd/node_modules/is-path-inside": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-is-inside": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-whitespace-character": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-word-character": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha512-nMtdn4hvK0HjUlzr1DrKSUY8ychprt8dzHOgY2KXsIhHu5PuQQEOTM27gV9Xblyon7aUH/TSFIjRHEODF/FRPg==", + "deprecated": "This module is no longer maintained, try this instead:\n npm i nyc\nVisit https://istanbul.js.org/integrations for other alternatives.", + "dev": true, + "dependencies": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "istanbul": "lib/cli.js" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul/node_modules/abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "dev": true + }, + "node_modules/istanbul/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/istanbul/node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true + }, + "node_modules/istanbul/node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul/node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "dev": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/istanbul/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/istanbul/node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/istanbul/node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/istanbul/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true + }, + "node_modules/istanbul/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/istanbul/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/istanbul/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jasmine-core": { + "version": "3.99.1", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-worker": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jimp": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.14.0", + "@jimp/plugins": "^0.14.0", + "@jimp/types": "^0.14.0", + "regenerator-runtime": "^0.13.3" + } + }, + "node_modules/jpeg-js": { + "version": "0.4.4", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/js-base64": { + "version": "3.7.2", + "license": "BSD-3-Clause" + }, + "node_modules/js-string-escape": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "dev": true, + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/jsprim": { + "version": "1.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/jsprim/node_modules/core-util-is": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/jsprim/node_modules/extsprintf": { + "version": "1.3.0", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/jsprim/node_modules/verror": { + "version": "1.10.0", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/karma": { + "version": "6.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-chrome-launcher/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/karma-coverage-istanbul-reporter": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-3.0.3.tgz", + "integrity": "sha512-wE4VFhG/QZv2Y4CdAYWDbMmcAHeS926ZIji4z+FkB2aF/EposRb6DP6G5ncT/wXhqUfAb/d7kZrNKPonbvsATw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^3.0.6", + "istanbul-reports": "^3.0.2", + "minimatch": "^3.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/mattlewis92" + } + }, + "node_modules/karma-jasmine": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "jasmine-core": "^3.6.0" + }, + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "karma": "*" + } + }, + "node_modules/karma-webpack": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "webpack-merge": "^4.1.5" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/karma-webpack/node_modules/webpack-merge": { + "version": "4.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/karma/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/karma/node_modules/ua-parser-js": { + "version": "0.7.33", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.33.tgz", + "integrity": "sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/karma/node_modules/y18n": { + "version": "5.0.8", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/kew": { + "version": "0.7.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/keygrip": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tsscmp": "1.0.6" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klaw": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/koa": { + "version": "2.13.4", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "^1.3.5", + "cache-content-type": "^1.0.0", + "content-disposition": "~0.5.2", + "content-type": "^1.0.4", + "cookies": "~0.8.0", + "debug": "^4.3.2", + "delegates": "^1.0.0", + "depd": "^2.0.0", + "destroy": "^1.0.4", + "encodeurl": "^1.0.2", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.3.0", + "http-errors": "^1.6.3", + "is-generator-function": "^1.0.7", + "koa-compose": "^4.1.0", + "koa-convert": "^2.0.0", + "on-finished": "^2.3.0", + "only": "~0.0.2", + "parseurl": "^1.3.2", + "statuses": "^1.5.0", + "type-is": "^1.6.16", + "vary": "^1.1.2" + }, + "engines": { + "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4" + } + }, + "node_modules/koa-compose": { + "version": "4.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/koa-convert": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "co": "^4.6.0", + "koa-compose": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/koa-etag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "etag": "^1.8.1" + } + }, + "node_modules/koa-send": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "http-errors": "^1.7.3", + "resolve-path": "^1.4.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/koa-send/node_modules/depd": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/koa-send/node_modules/http-errors": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/koa-send/node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/koa-static": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.1.0", + "koa-send": "^5.0.0" + }, + "engines": { + "node": ">= 7.6.0" + } + }, + "node_modules/koa-static/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/koa/node_modules/http-errors": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/koa/node_modules/http-errors/node_modules/depd": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/koa/node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/lazy-val": { + "version": "1.0.5", + "license": "MIT" + }, + "node_modules/lcid": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "invert-kv": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lit": { + "version": "2.2.8", + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.3.0", + "lit-element": "^3.2.0", + "lit-html": "^2.2.0" + } + }, + "node_modules/lit-element": { + "version": "3.2.2", + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.2.0" + } + }, + "node_modules/lit-element/node_modules/@lit/reactive-element": { + "version": "1.3.4", + "license": "BSD-3-Clause" + }, + "node_modules/lit-html": { + "version": "2.2.7", + "license": "BSD-3-Clause", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, + "node_modules/lit/node_modules/@lit/reactive-element": { + "version": "1.3.4", + "license": "BSD-3-Clause" + }, + "node_modules/load-bmfont": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^2.9.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" + } + }, + "node_modules/load-bmfont/node_modules/buffer-equal": { + "version": "0.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/load-bmfont/node_modules/mime": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/log4js": { + "version": "6.6.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "date-format": "^4.0.13", + "debug": "^4.3.4", + "flatted": "^3.2.6", + "rfdc": "^1.3.0", + "streamroller": "^3.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/longest-streak": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-fetch-happen": { + "version": "9.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/node_modules/@tootallnate/once": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/make-fetch-happen/node_modules/cacache": { + "version": "15.3.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/node_modules/chownr": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/http-proxy-agent": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/make-fetch-happen/node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/p-map": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-fetch-happen/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "8.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/markdown-escapes": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/markdown-table": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "repeat-string": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/md5-file": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "bin": { + "md5-file": "cli.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/mdast-squeeze-paragraphs": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "unist-util-remove": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-definitions": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^4.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "0.8.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-util-gfm-autolink-literal": "^0.1.0", + "mdast-util-gfm-strikethrough": "^0.2.0", + "mdast-util-gfm-table": "^0.1.0", + "mdast-util-gfm-task-list-item": "^0.1.0", + "mdast-util-to-markdown": "^0.6.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ccount": "^1.0.0", + "mdast-util-find-and-replace": "^1.1.0", + "micromark": "^2.11.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "0.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-util-to-markdown": "^0.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "markdown-table": "^2.0.0", + "mdast-util-to-markdown": "~0.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-util-to-markdown": "~0.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "10.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "0.6.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "longest-streak": "^2.0.0", + "mdast-util-to-string": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdurl": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.4.7", + "dev": true, + "license": "Unlicense", + "dependencies": { + "fs-monkey": "^1.0.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromark": { + "version": "2.11.4", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark": "~2.11.0", + "micromark-extension-gfm-autolink-literal": "~0.5.0", + "micromark-extension-gfm-strikethrough": "~0.6.5", + "micromark-extension-gfm-table": "~0.4.0", + "micromark-extension-gfm-tagfilter": "~0.3.0", + "micromark-extension-gfm-task-list-item": "~0.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "0.5.7", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark": "~2.11.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "0.6.5", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark": "~2.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "0.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark": "~2.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark": "~2.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/min-document": { + "version": "2.19.0", + "dev": true, + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "dev": true, + "license": "MIT", + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "license": "MIT" + }, + "node_modules/minipass": { + "version": "3.3.4", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mississippi": { + "version": "3.0.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "dev": true, + "license": "MIT" + }, + "node_modules/move-concurrently": { + "version": "1.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multimatch": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "dev": true, + "license": "ISC" + }, + "node_modules/nanocolors": { + "version": "0.2.13", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.4", + "dev": true, + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/no-case": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "dev": true, + "optional": true + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.0.tgz", + "integrity": "sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "7.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/node-gyp/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-releases": { + "version": "2.0.6", + "license": "MIT" + }, + "node_modules/nopt": { + "version": "5.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-bundled": { + "version": "1.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "dev": true, + "optional": true, + "dependencies": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-conf/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-install-checks": { + "version": "4.0.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-install-checks/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/npm-package-arg": { + "version": "8.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-package-arg/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-packlist": { + "version": "2.2.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "npm-packlist": "bin/index.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-pick-manifest": { + "version": "6.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + }, + "node_modules/npm-pick-manifest/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-registry-fetch": { + "version": "11.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "4.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/objectorarray": { + "version": "1.0.5", + "dev": true, + "license": "ISC" + }, + "node_modules/obuf": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/omggif": { + "version": "1.0.10", + "dev": true, + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/only": { + "version": "0.0.2", + "dev": true + }, + "node_modules/open": { + "version": "8.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opn": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/opn/node_modules/is-wsl": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-locale": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lcid": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/osenv": { + "version": "0.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "node_modules/outline-i18n": { + "version": "0.0.7", + "resolved": "git+ssh://git@github.com/Jigsaw-Code/outline-i18n.git#4642c3657074246b8eca09486941434718f66608", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pacote": { + "version": "11.3.5", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^2.1.0", + "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.8.2", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^11.0.0", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^2.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.0" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/cacache": { + "version": "15.3.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/pacote/node_modules/chownr": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/p-map": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pacote/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pacote/node_modules/ssri": { + "version": "8.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "dev": true, + "license": "(MIT AND Zlib)" + }, + "node_modules/parallel-transform": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-bmfont-ascii": { + "version": "1.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-bmfont-binary": { + "version": "1.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-bmfont-xml": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.4.5" + } + }, + "node_modules/parse-entities": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-headers": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-json": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/phantomjs-prebuilt": { + "version": "2.1.16", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "es6-promise": "^4.0.3", + "extract-zip": "^1.6.5", + "fs-extra": "^1.0.0", + "hasha": "^2.2.0", + "kew": "^0.7.0", + "progress": "^1.1.8", + "request": "^2.81.0", + "request-progress": "^2.0.1", + "which": "^1.2.10" + }, + "bin": { + "phantomjs": "bin/phantomjs" + } + }, + "node_modules/phantomjs-prebuilt/node_modules/fs-extra": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" + } + }, + "node_modules/phantomjs-prebuilt/node_modules/jsonfile": { + "version": "2.4.0", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/phantomjs-prebuilt/node_modules/progress": { + "version": "1.1.8", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/phantomjs-prebuilt/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/phin": { + "version": "2.9.3", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "0.2.1", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pixelmatch": { + "version": "4.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "pngjs": "^3.0.0" + }, + "bin": { + "pixelmatch": "bin/pixelmatch" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkginfo": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/please-upgrade-node": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver-compare": "^1.0.0" + } + }, + "node_modules/plist": { + "version": "3.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/plugins-manager": { + "version": "0.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/pn": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/pngjs": { + "version": "3.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pngjs-nozlib": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/portfinder": { + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", + "dev": true, + "dependencies": { + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/postcss": { + "version": "7.0.39", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-rtl": { + "version": "1.7.3", + "dev": true, + "license": "MIT", + "dependencies": { + "rtlcss": "2.5.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/prettier": { + "version": "1.19.1", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-quick": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.4.2", + "execa": "^2.1.0", + "find-up": "^4.1.0", + "ignore": "^5.1.4", + "mri": "^1.1.4", + "multimatch": "^4.0.0" + }, + "bin": { + "pretty-quick": "bin/pretty-quick.js" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "prettier": ">=1.8.0" + } + }, + "node_modules/pretty-quick/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pretty-quick/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pretty-quick/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/pretty-quick/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/pretty-quick/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/pretty-quick/node_modules/execa": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^3.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": "^8.12.0 || >=9.7.0" + } + }, + "node_modules/pretty-quick/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-quick/node_modules/get-stream": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-quick/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pretty-quick/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-quick/node_modules/npm-run-path": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-quick/node_modules/p-finally": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-quick/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-quick/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prismjs": { + "version": "1.28.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/process": { + "version": "0.11.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/progress": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/promzard": { + "version": "0.3.0", + "dev": true, + "license": "ISC", + "dependencies": { + "read": "1" + } + }, + "node_modules/properties-parser": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "string.prototype.codepointat": "^0.2.0" + }, + "engines": { + "node": ">= 0.3.1" + } + }, + "node_modules/property-information": { + "version": "5.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true, + "optional": true + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/psl": { + "version": "1.9.0", + "dev": true, + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "1.4.1", + "license": "MIT" + }, + "node_modules/puppeteer": { + "version": "13.7.0", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.981744", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "pkg-dir": "4.2.0", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.5.0" + }, + "engines": { + "node": ">=10.18.1" + } + }, + "node_modules/puppeteer/node_modules/extract-zip": { + "version": "2.0.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/puppeteer/node_modules/get-stream": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/puppeteer/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/puppeteer/node_modules/ws": { + "version": "8.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/q": { + "version": "1.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qjobs": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.10.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read": { + "version": "1.0.7", + "dev": true, + "license": "ISC", + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/read-chunk": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "with-open-file": "^0.1.6" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/read-chunk/node_modules/pify": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/read-config-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.2.0.tgz", + "integrity": "sha512-gx7Pgr5I56JtYz+WuqEbQHj/xWo+5Vwua2jhb1VwM4Wid5PqYmZ4i00ZB0YEGIfkVBsCv9UrjgyqCiQfS/Oosg==", + "dev": true, + "dependencies": { + "dotenv": "^9.0.2", + "dotenv-expand": "^5.1.0", + "js-yaml": "^4.1.0", + "json5": "^2.2.0", + "lazy-val": "^1.0.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/read-package-json": { + "version": "4.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^3.0.0", + "npm-normalize-package-bin": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-package-json-fast": { + "version": "2.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-pkg": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/read-pkg-up": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/hosted-git-info": { + "version": "2.8.9", + "dev": true, + "license": "ISC" + }, + "node_modules/read-pkg-up/node_modules/normalize-package-data": { + "version": "2.5.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/path-type": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/pify": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/read-pkg": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "dev": true, + "license": "ISC" + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.7.1", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/reduce-flatten": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.6.0", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.8.4", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/rehype-autolink-headings": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "extend": "^3.0.0", + "hast-util-has-property": "^1.0.0", + "hast-util-heading-rank": "^1.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "hast-util-from-parse5": "^6.0.0", + "parse5": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-prism": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "^14.14.31", + "@types/prismjs": "^1.16.6", + "prismjs": "^1.24.1", + "rehype-parse": "^7.0.1", + "unist-util-is": "^4.1.0", + "unist-util-select": "^4.0.0", + "unist-util-visit": "^3.1.0" + }, + "peerDependencies": { + "unified": "^9 || ^10" + } + }, + "node_modules/rehype-prism/node_modules/unist-util-visit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-prism/node_modules/unist-util-visit-parents": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-prism/node_modules/unist-util-visit-parents/node_modules/unist-util-is": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-prism/node_modules/unist-util-visit/node_modules/unist-util-is": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-raw": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "hast-util-raw": "^6.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-raw/node_modules/hast-util-raw": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-slug": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "github-slugger": "^1.1.1", + "hast-util-has-property": "^1.0.0", + "hast-util-heading-rank": "^1.0.0", + "hast-util-to-string": "^1.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "8.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "hast-util-to-html": "^7.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remark": { + "version": "13.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "remark-parse": "^9.0.0", + "remark-stringify": "^9.0.0", + "unified": "^9.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-footnotes": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-util-gfm": "^0.1.0", + "micromark-extension-gfm": "^0.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-html": { + "version": "13.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "hast-util-sanitize": "^3.0.0", + "hast-util-to-html": "^7.0.0", + "mdast-util-to-hast": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "1.6.22", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx/node_modules/@babel/core": { + "version": "7.12.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "dev": true, + "license": "MIT" + }, + "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/remark-mdx/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/remark-mdx/node_modules/source-map": { + "version": "0.5.7", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-parse": { + "version": "8.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-util-to-hast": "^10.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype/node_modules/mdast-util-to-hast": { + "version": "10.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-slug": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "github-slugger": "^1.0.0", + "mdast-util-to-string": "^1.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-slug/node_modules/mdast-util-to-string": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-squeeze-paragraphs": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-squeeze-paragraphs": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "9.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-util-to-markdown": "^0.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark/node_modules/remark-parse": { + "version": "9.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/replace-in-file": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-6.3.5.tgz", + "integrity": "sha512-arB9d3ENdKva2fxRnSjwBEXfK1npgyci7ZZuwysgAp7ORjHSyxz6oqIjTEv8R0Ydl4Ll7uOAZXL4vbkhGIizCg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "glob": "^7.2.0", + "yargs": "^17.2.1" + }, + "bin": { + "replace-in-file": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/replace-in-file/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/request": { + "version": "2.88.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-progress": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "throttleit": "^1.0.0" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-path": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "http-errors": "~1.6.2", + "path-is-absolute": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/resolve-path/node_modules/depd": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/resolve-path/node_modules/http-errors": { + "version": "1.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/resolve-path/node_modules/inherits": { + "version": "2.0.3", + "dev": true, + "license": "ISC" + }, + "node_modules/resolve-path/node_modules/setprototypeof": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "node_modules/resolve-path/node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "2.7.1", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rmfr": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "assert-valid-glob-opts": "^1.0.0", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "inspect-with-kind": "^1.0.4", + "rimraf": "^2.6.2" + } + }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dev": true, + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/rollup": { + "version": "2.77.3", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rtlcss": { + "version": "2.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.4.2", + "findup": "^0.1.5", + "mkdirp": "^0.5.1", + "postcss": "^6.0.23", + "strip-json-comments": "^2.0.0" + }, + "bin": { + "rtlcss": "bin/rtlcss.js" + } + }, + "node_modules/rtlcss/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/rtlcss/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/rtlcss/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/rtlcss/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/rtlcss/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/rtlcss/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/rtlcss/node_modules/postcss": { + "version": "6.0.23", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/rtlcss/node_modules/strip-json-comments": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rtlcss/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/run-node": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "bin": { + "run-node": "run-node" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/run-queue": { + "version": "1.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.1.1" + } + }, + "node_modules/rxjs": { + "version": "7.5.6", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "dev": true, + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "license": "ISC" + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/send": { + "version": "0.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "node_modules/ShadowsocksConfig": { + "name": "outline-shadowsocksconfig", + "version": "0.2.1", + "resolved": "git+ssh://git@github.com/Jigsaw-Code/outline-shadowsocksconfig.git#6d01c4b1beae3a3bc2a1074e5e310dfa023be57d", + "license": "Apache-2.0", + "dependencies": { + "ipaddr.js": "^2.0.0", + "js-base64": "^3.5.2", + "punycode": "^1.4.1" + } + }, + "node_modules/ShadowsocksConfig/node_modules/ipaddr.js": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/shady-css-scoped-element": { + "version": "0.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shelljs": { + "version": "0.5.3", + "dev": true, + "license": "BSD*", + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "dev": true, + "license": "ISC" + }, + "node_modules/simctl": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "shelljs": "^0.8.5", + "tail": "^0.4.0" + } + }, + "node_modules/simctl/node_modules/interpret": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/simctl/node_modules/rechoir": { + "version": "0.6.2", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/simctl/node_modules/shelljs": { + "version": "0.8.5", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/simple-plist": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "bplist-creator": "0.1.0", + "bplist-parser": "0.3.1", + "plist": "^3.0.5" + } + }, + "node_modules/simple-plist/node_modules/bplist-parser": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "big-integer": "1.6.x" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/simple-update-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dev": true, + "dependencies": { + "semver": "~7.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "optional": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.2.0", + "socket.io-adapter": "~2.4.0", + "socket.io-parser": "~4.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/socket.io-parser": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "dev": true, + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sockjs/node_modules/uuid": { + "version": "8.3.2", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/socks": { + "version": "1.1.10", + "license": "MIT", + "dependencies": { + "ip": "^1.1.4", + "smart-buffer": "^1.0.13" + }, + "engines": { + "node": ">= 0.10.0", + "npm": ">= 1.3.5" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/socks-proxy-agent/node_modules/ip": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/socks-proxy-agent/node_modules/socks": { + "version": "2.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks/node_modules/smart-buffer": { + "version": "1.1.15", + "license": "MIT", + "engines": { + "node": ">= 0.10.15", + "npm": ">= 1.3.5" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/spdy": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true, + "optional": true + }, + "node_modules/sshpk": { + "version": "1.17.0", + "dev": true, + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/stat-mode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", + "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/state-toggle": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/storybook-addon-markdown-docs": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/core": "^7.17.5", + "@babel/generator": "^7.17.3", + "@babel/parser": "^7.17.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-transform-react-jsx": "^7.17.3", + "@mdjs/core": "^0.9.2", + "@mdx-js/mdx": "^1.6.22", + "detab": "^2.0.4", + "mdurl": "^1.0.1", + "remark-html": "^13.0.2", + "remark-parse": "^9.0.0", + "remark-slug": "^6.1.0", + "unified": "^9.2.2", + "unist-builder": "^2.0.3", + "unist-util-visit-parents": "^3.1.1" + } + }, + "node_modules/storybook-addon-markdown-docs/node_modules/remark-parse": { + "version": "9.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/storybook-addon-markdown-docs/node_modules/unified": { + "version": "9.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/stream-buffers": { + "version": "2.2.0", + "dev": true, + "license": "Unlicense", + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/stream-each": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/streamroller": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "date-format": "^4.0.13", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/streamroller/node_modules/fs-extra": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/streamroller/node_modules/jsonfile": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/streamroller/node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-similarity": { + "version": "1.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "lodash": "^4.13.1" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.codepointat": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-entities": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stringify-package": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-loader": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/style-loader/node_modules/schema-utils": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/style-to-object": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/sudo-prompt": { + "version": "9.2.1", + "license": "MIT" + }, + "node_modules/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "dev": true, + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg2png": { + "version": "4.1.1", + "dev": true, + "license": "WTFPL", + "dependencies": { + "file-url": "^2.0.0", + "phantomjs-prebuilt": "^2.1.14", + "pn": "^1.0.0", + "yargs": "^6.5.0" + }, + "bin": { + "svg2png": "bin/svg2png-cli.js" + } + }, + "node_modules/svg2png/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg2png/node_modules/camelcase": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg2png/node_modules/cliui": { + "version": "3.2.0", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/svg2png/node_modules/get-caller-file": { + "version": "1.0.3", + "dev": true, + "license": "ISC" + }, + "node_modules/svg2png/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg2png/node_modules/string-width": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg2png/node_modules/strip-ansi": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg2png/node_modules/wrap-ansi": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg2png/node_modules/y18n": { + "version": "3.2.2", + "dev": true, + "license": "ISC" + }, + "node_modules/svg2png/node_modules/yargs": { + "version": "6.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.2.0" + } + }, + "node_modules/svg2png/node_modules/yargs-parser": { + "version": "4.2.1", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^3.0.0" + } + }, + "node_modules/synckit": { + "version": "0.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/utils": "^2.3.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/systemjs": { + "version": "6.12.2", + "dev": true, + "license": "MIT" + }, + "node_modules/table-layout": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tail": { + "version": "0.4.0", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.1.11", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tar/node_modules/chownr": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/temp-file": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", + "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", + "dev": true, + "dependencies": { + "async-exit-hook": "^2.0.1", + "fs-extra": "^10.0.0" + } + }, + "node_modules/temp-file/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/terser": { + "version": "5.14.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.7", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.7.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { + "version": "6.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "dev": true, + "license": "MIT" + }, + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/throttleit": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/through2": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/timm": { + "version": "1.7.1", + "dev": true, + "license": "MIT" + }, + "node_modules/tiny-glob": { + "version": "0.2.9", + "dev": true, + "license": "MIT", + "dependencies": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, + "node_modules/tinycolor2": { + "version": "1.4.2", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/tmp": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "dev": true, + "dependencies": { + "tmp": "^0.2.0" + } + }, + "node_modules/tmp/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tough-cookie/node_modules/punycode": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/tr46/node_modules/punycode": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/trim": { + "version": "0.0.1", + "dev": true + }, + "node_modules/trim-trailing-lines": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "dev": true, + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.10" + } + }, + "node_modules/ts-loader": { + "version": "9.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-loader/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ts-loader/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "license": "0BSD" + }, + "node_modules/tsscmp": { + "version": "1.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.x" + } + }, + "node_modules/tsutils": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "dev": true, + "license": "Unlicense" + }, + "node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-emitter": { + "version": "2.1.0", + "license": "MIT", + "optionalDependencies": { + "rxjs": "*" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.7.4", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/typical": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ua-parser-js": { + "version": "1.0.33", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.33.tgz", + "integrity": "sha512-RqshF7TPTE0XLYAqmjlu5cLLuGdKrNu9O1KLA/qp39QtbZwuzwv1dT46DZSopoUMsYgXpB3Cv8a03FI8b74oFQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/underscore": { + "version": "1.13.4", + "dev": true, + "license": "MIT" + }, + "node_modules/unherit": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unified": { + "version": "9.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/unist-builder": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-generated": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-select": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "css-selector-parser": "^1.0.0", + "nth-check": "^2.0.0", + "unist-util-is": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-select/node_modules/unist-util-is": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-select/node_modules/zwitch": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unorm": { + "version": "1.6.0", + "dev": true, + "license": "MIT or GPL-2.0", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/untildify": { + "version": "3.0.3", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.5", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/update-browserslist-db/node_modules/picocolors": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/url": { + "version": "0.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "dev": true, + "license": "MIT" + }, + "node_modules/utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==", + "dev": true + }, + "node_modules/utif": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "pako": "^1.0.5" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/utila": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/uuidv4": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "uuid": "3.3.2" + } + }, + "node_modules/uuidv4/node_modules/uuid": { + "version": "3.3.2", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/validate-glob-opts": { + "version": "1.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "array-to-sentence": "^1.1.0", + "indexed-filter": "^1.0.0", + "inspect-with-kind": "^1.0.4", + "is-plain-obj": "^1.1.0" + } + }, + "node_modules/validate-glob-opts/node_modules/is-plain-obj": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "builtins": "^1.0.3" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, + "optional": true + }, + "node_modules/vfile": { + "version": "4.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "dev": true, + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-animations-js": { + "version": "2.3.2", + "license": "Apache-2.0" + }, + "node_modules/web-namespaces": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/webpack": { + "version": "5.74.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "4.10.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.10.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/@types/ws": { + "version": "8.5.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-server/node_modules/ipaddr.js": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.8.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-log": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-shell-plugin-next": { + "version": "2.2.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "webpack": "^5.18.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/@types/estree": { + "version": "0.0.51", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/es-module-lexer": { + "version": "0.9.3", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/wide-align": { + "version": "1.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wildcard": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/winreg": { + "version": "1.2.4", + "license": "BSD-2-Clause" + }, + "node_modules/with-open-file": { + "version": "0.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0", + "p-try": "^2.1.0", + "pify": "^4.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/with-open-file/node_modules/pify": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "dev": true, + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.9", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xcode": { + "version": "3.0.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "simple-plist": "^1.1.0", + "uuid": "^7.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/xcode/node_modules/uuid": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/xhr": { + "version": "2.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/xml-escape": { + "version": "1.1.0", + "dev": true, + "license": "MIT License" + }, + "node_modules/xml-parse-from-string": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/xml2js": { + "version": "0.4.23", + "dev": true, + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xml2js/node_modules/xmlbuilder": { + "version": "11.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0" + } + }, + "node_modules/xmlbuilder2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder2/-/xmlbuilder2-3.1.1.tgz", + "integrity": "sha512-WCSfbfZnQDdLQLiMdGUQpMxxckeQ4oZNMNhLVkcekTu7xhD4tuUDyAPoY8CwXvBYE6LwBHd6QW2WZXlOWr1vCw==", + "dev": true, + "dependencies": { + "@oozcitak/dom": "1.15.10", + "@oozcitak/infra": "1.0.8", + "@oozcitak/util": "8.3.8", + "js-yaml": "3.14.1" + }, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/xmlbuilder2/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/xmlbuilder2/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/xmlbuilder2/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "dev": true, + "license": "ISC" + }, + "node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/y18n": { + "version": "5.0.8", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/ylru": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zwitch": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "src/cordova/plugin": { + "name": "cordova-plugin-outline", + "version": "0.0.0" + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.18.8", + "dev": true + }, + "@babel/core": { + "version": "7.18.10", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.18.12", + "dev": true, + "requires": { + "@babel/types": "^7.18.10", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.2", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "dev": true + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-function-name": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.18.9", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-replace-supers": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-simple-access": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.18.10", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.18.6", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.18.11", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.18.9", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.11", + "@babel/types": "^7.18.10" + } + }, + "@babel/helpers": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.18.11", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.18.10", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.18.8" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.18.8", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-identifier": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.18.8", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.18.10", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.18.10" + }, + "dependencies": { + "@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + } + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/polyfill": { + "version": "7.12.1", + "dev": true, + "requires": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/preset-env": { + "version": "7.18.10", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.18.10", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.18.9", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.18.9", + "@babel/plugin-transform-classes": "^7.18.9", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.18.9", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.18.9", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.18.9", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.18.10", + "babel-plugin-polyfill-corejs2": "^0.3.2", + "babel-plugin-polyfill-corejs3": "^0.5.3", + "babel-plugin-polyfill-regenerator": "^0.4.0", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.18.9", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.18.10", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } + }, + "@babel/traverse": { + "version": "7.18.11", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.11", + "@babel/types": "^7.18.10", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.18.10", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + } + }, + "@colors/colors": { + "version": "1.5.0", + "dev": true + }, + "@commitlint/config-conventional": { + "version": "16.2.4", + "dev": true, + "requires": { + "conventional-changelog-conventionalcommits": "^4.3.1" + } + }, + "@develar/schema-utils": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", + "dev": true, + "requires": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + } + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "dev": true + }, + "@electron/get": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.14.1.tgz", + "integrity": "sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "global-agent": "^3.0.0", + "global-tunnel-ng": "^2.7.1", + "got": "^9.6.0", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + } + } + }, + "@electron/universal": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.2.1.tgz", + "integrity": "sha512-7323HyMh7KBAl/nPDppdLsC87G6RwRU02dy5FPeGB1eS7rUePh55+WNWiDPLhFQqqVPHzh77M69uhmoT8XnwMQ==", + "dev": true, + "requires": { + "@malept/cross-spawn-promise": "^1.1.0", + "asar": "^3.1.0", + "debug": "^4.3.1", + "dir-compare": "^2.4.0", + "fs-extra": "^9.0.1", + "minimatch": "^3.0.4", + "plist": "^3.0.4" + } + }, + "@eslint/eslintrc": { + "version": "1.3.0", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.17.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "type-fest": { + "version": "0.20.2", + "dev": true + } + } + }, + "@formatjs/ecma402-abstract": { + "version": "1.11.4", + "dev": true, + "requires": { + "@formatjs/intl-localematcher": "0.2.25", + "tslib": "^2.1.0" + } + }, + "@formatjs/fast-memoize": { + "version": "1.2.1", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "@formatjs/icu-messageformat-parser": { + "version": "2.1.0", + "dev": true, + "requires": { + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/icu-skeleton-parser": "1.3.6", + "tslib": "^2.1.0" + } + }, + "@formatjs/icu-skeleton-parser": { + "version": "1.3.6", + "dev": true, + "requires": { + "@formatjs/ecma402-abstract": "1.11.4", + "tslib": "^2.1.0" + } + }, + "@formatjs/intl-localematcher": { + "version": "0.2.25", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "@gar/promisify": { + "version": "1.1.3", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.10.4", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jimp/bmp": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "bmp-js": "^0.1.0" + } + }, + "@jimp/core": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "exif-parser": "^0.1.12", + "file-type": "^9.0.0", + "load-bmfont": "^1.3.1", + "mkdirp": "^0.5.1", + "phin": "^2.9.1", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.4.1" + } + }, + "@jimp/custom": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.14.0" + } + }, + "@jimp/gif": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "gifwrap": "^0.9.2", + "omggif": "^1.0.9" + } + }, + "@jimp/jpeg": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "jpeg-js": "^0.4.0" + } + }, + "@jimp/plugin-blit": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-blur": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-circle": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-color": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "tinycolor2": "^1.4.1" + } + }, + "@jimp/plugin-contain": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-cover": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-crop": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-displace": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-dither": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-fisheye": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-flip": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-gaussian": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-invert": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-mask": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-normalize": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-print": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "load-bmfont": "^1.4.0" + } + }, + "@jimp/plugin-resize": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-rotate": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-scale": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-shadow": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-threshold": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugins": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.14.0", + "@jimp/plugin-blur": "^0.14.0", + "@jimp/plugin-circle": "^0.14.0", + "@jimp/plugin-color": "^0.14.0", + "@jimp/plugin-contain": "^0.14.0", + "@jimp/plugin-cover": "^0.14.0", + "@jimp/plugin-crop": "^0.14.0", + "@jimp/plugin-displace": "^0.14.0", + "@jimp/plugin-dither": "^0.14.0", + "@jimp/plugin-fisheye": "^0.14.0", + "@jimp/plugin-flip": "^0.14.0", + "@jimp/plugin-gaussian": "^0.14.0", + "@jimp/plugin-invert": "^0.14.0", + "@jimp/plugin-mask": "^0.14.0", + "@jimp/plugin-normalize": "^0.14.0", + "@jimp/plugin-print": "^0.14.0", + "@jimp/plugin-resize": "^0.14.0", + "@jimp/plugin-rotate": "^0.14.0", + "@jimp/plugin-scale": "^0.14.0", + "@jimp/plugin-shadow": "^0.14.0", + "@jimp/plugin-threshold": "^0.14.0", + "timm": "^1.6.1" + } + }, + "@jimp/png": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "pngjs": "^3.3.3" + } + }, + "@jimp/tiff": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "utif": "^2.0.1" + } + }, + "@jimp/types": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.14.0", + "@jimp/gif": "^0.14.0", + "@jimp/jpeg": "^0.14.0", + "@jimp/png": "^0.14.0", + "@jimp/tiff": "^0.14.0", + "timm": "^1.6.1" + } + }, + "@jimp/utils": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "regenerator-runtime": "^0.13.3" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.14", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jsdevtools/coverage-istanbul-loader": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", + "integrity": "sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==", + "dev": true, + "requires": { + "convert-source-map": "^1.7.0", + "istanbul-lib-instrument": "^4.0.3", + "loader-utils": "^2.0.0", + "merge-source-map": "^1.1.0", + "schema-utils": "^2.7.0" + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "dev": true + }, + "@lion/accordion": { + "version": "0.9.0", + "dev": true, + "requires": { + "@lion/core": "^0.22.0" + } + }, + "@lion/core": { + "version": "0.22.0", + "dev": true, + "requires": { + "@open-wc/dedupe-mixin": "^1.3.0", + "@open-wc/scoped-elements": "^2.1.1", + "lit": "^2.0.2" + } + }, + "@lit/reactive-element": { + "version": "1.0.0-rc.4" + }, + "@malept/cross-spawn-promise": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", + "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.1" + } + }, + "@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" + } + }, + "@material/animation": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "tslib": "^2.1.0" + } + }, + "@material/base": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "tslib": "^2.1.0" + } + }, + "@material/density": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "tslib": "^2.1.0" + } + }, + "@material/dom": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/elevation": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/feature-targeting": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "tslib": "^2.1.0" + } + }, + "@material/list": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/density": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/typography": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/menu": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/elevation": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/list": "14.0.0-canary.261f2db59.0", + "@material/menu-surface": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/menu-surface": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/elevation": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/mwc-base": { + "version": "0.25.3", + "requires": { + "@lit/reactive-element": "1.0.0-rc.4", + "@material/base": "=14.0.0-canary.261f2db59.0", + "@material/dom": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-button": { + "version": "0.25.3", + "requires": { + "@material/mwc-icon": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-checkbox": { + "version": "0.25.3", + "requires": { + "@material/mwc-base": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-icon": { + "version": "0.25.3", + "requires": { + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-icon-button": { + "version": "0.25.3", + "requires": { + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-list": { + "version": "0.25.3", + "requires": { + "@material/base": "=14.0.0-canary.261f2db59.0", + "@material/dom": "=14.0.0-canary.261f2db59.0", + "@material/list": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/mwc-checkbox": "^0.25.3", + "@material/mwc-radio": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-menu": { + "version": "0.25.3", + "requires": { + "@material/menu": "=14.0.0-canary.261f2db59.0", + "@material/menu-surface": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/mwc-list": "^0.25.3", + "@material/shape": "=14.0.0-canary.261f2db59.0", + "@material/theme": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-radio": { + "version": "0.25.3", + "requires": { + "@material/mwc-base": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "@material/radio": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-ripple": { + "version": "0.25.3", + "requires": { + "@material/dom": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/ripple": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/radio": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/density": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/touch-target": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/ripple": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/rtl": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/shape": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/theme": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/touch-target": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/typography": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@mdjs/core": { + "version": "0.9.5", + "dev": true, + "requires": { + "@mdjs/mdjs-preview": "^0.5.8", + "@mdjs/mdjs-story": "^0.3.2", + "@types/unist": "^2.0.3", + "es-module-lexer": "^0.9.3", + "github-markdown-css": "^4.0.0", + "plugins-manager": "^0.3.0", + "rehype-autolink-headings": "^5.0.1", + "rehype-prism": "^1.0.1", + "rehype-raw": "^5.0.0", + "rehype-slug": "^4.0.1", + "rehype-stringify": "^8.0.0", + "remark": "^13.0.0", + "remark-gfm": "^1.0.0", + "remark-parse": "^9.0.0", + "remark-rehype": "^8.0.0", + "slash": "^3.0.0", + "unified": "^9.2.0", + "unist-util-remove": "^2.0.1", + "unist-util-visit": "^2.0.3" + }, + "dependencies": { + "es-module-lexer": { + "version": "0.9.3", + "dev": true + }, + "remark-parse": { + "version": "9.0.0", + "dev": true, + "requires": { + "mdast-util-from-markdown": "^0.8.0" + } + } + } + }, + "@mdjs/mdjs-preview": { + "version": "0.5.9", + "dev": true, + "requires": { + "@lion/accordion": "^0.9.0", + "@open-wc/scoped-elements": "^2.0.0", + "lit": "^2.2.5" + } + }, + "@mdjs/mdjs-story": { + "version": "0.3.2", + "dev": true, + "requires": { + "lit": "^2.2.5" + } + }, + "@mdn/browser-compat-data": { + "version": "4.2.1", + "dev": true + }, + "@mdx-js/mdx": { + "version": "1.6.22", + "dev": true, + "requires": { + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", + "camelcase-css": "2.0.1", + "detab": "2.0.4", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "10.0.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.22", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + }, + "dependencies": { + "@babel/core": { + "version": "7.12.9", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "semver": { + "version": "5.7.1", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "dev": true + } + } + }, + "@mdx-js/util": { + "version": "1.6.22", + "dev": true + }, + "@netflix/nerror": { + "version": "1.1.3", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "extsprintf": "^1.4.0", + "lodash": "^4.17.15" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@npmcli/fs": { + "version": "1.1.1", + "dev": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@npmcli/git": { + "version": "2.1.0", + "dev": true, + "requires": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "dev": true + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@npmcli/installed-package-contents": { + "version": "1.0.7", + "dev": true, + "requires": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "@npmcli/node-gyp": { + "version": "1.0.3", + "dev": true + }, + "@npmcli/promise-spawn": { + "version": "1.3.2", + "dev": true, + "requires": { + "infer-owner": "^1.0.4" + } + }, + "@npmcli/run-script": { + "version": "1.8.6", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "node-gyp": "^7.1.0", + "read-package-json-fast": "^2.0.1" + } + }, + "@oozcitak/dom": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-1.15.10.tgz", + "integrity": "sha512-0JT29/LaxVgRcGKvHmSrUTEvZ8BXvZhGl2LASRUgHqDTC1M5g1pLmVv56IYNyt3bG2CUjDkc67wnyZC14pbQrQ==", + "dev": true, + "requires": { + "@oozcitak/infra": "1.0.8", + "@oozcitak/url": "1.0.4", + "@oozcitak/util": "8.3.8" + } + }, + "@oozcitak/infra": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@oozcitak/infra/-/infra-1.0.8.tgz", + "integrity": "sha512-JRAUc9VR6IGHOL7OGF+yrvs0LO8SlqGnPAMqyzOuFZPSZSXI7Xf2O9+awQPSMXgIWGtgUf/dA6Hs6X6ySEaWTg==", + "dev": true, + "requires": { + "@oozcitak/util": "8.3.8" + } + }, + "@oozcitak/url": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@oozcitak/url/-/url-1.0.4.tgz", + "integrity": "sha512-kDcD8y+y3FCSOvnBI6HJgl00viO/nGbQoCINmQ0h98OhnGITrWR3bOGfwYCthgcrV8AnTJz8MzslTQbC3SOAmw==", + "dev": true, + "requires": { + "@oozcitak/infra": "1.0.8", + "@oozcitak/util": "8.3.8" + } + }, + "@oozcitak/util": { + "version": "8.3.8", + "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-8.3.8.tgz", + "integrity": "sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==", + "dev": true + }, + "@open-wc/dedupe-mixin": { + "version": "1.3.1", + "dev": true + }, + "@open-wc/scoped-elements": { + "version": "2.1.3", + "dev": true, + "requires": { + "@lit/reactive-element": "^1.0.0", + "@open-wc/dedupe-mixin": "^1.3.0" + }, + "dependencies": { + "@lit/reactive-element": { + "version": "1.3.4", + "dev": true + } + } + }, + "@pkgr/utils": { + "version": "2.3.0", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "is-glob": "^4.0.3", + "open": "^8.4.0", + "picocolors": "^1.0.0", + "tiny-glob": "^0.2.9", + "tslib": "^2.4.0" + }, + "dependencies": { + "picocolors": { + "version": "1.0.0", + "dev": true + } + } + }, + "@polymer/app-layout": { + "version": "3.1.0", + "requires": { + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/iron-media-query": "^3.0.0-pre.26", + "@polymer/iron-resizable-behavior": "^3.0.0-pre.26", + "@polymer/iron-scroll-target-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/app-localize-behavior": { + "version": "3.0.1", + "requires": { + "@polymer/iron-ajax": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0", + "intl-messageformat": "^2.2.0" + }, + "dependencies": { + "intl-messageformat": { + "version": "2.2.0", + "requires": { + "intl-messageformat-parser": "1.4.0" + } + } + } + }, + "@polymer/app-route": { + "version": "3.0.2", + "requires": { + "@polymer/iron-location": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/decorators": { + "version": "3.0.0", + "requires": { + "@polymer/polymer": "^3.0.5" + } + }, + "@polymer/font-roboto": { + "version": "3.0.2" + }, + "@polymer/iron-a11y-announcer": { + "version": "3.2.0", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-a11y-keys-behavior": { + "version": "3.0.1", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-ajax": { + "version": "3.0.1", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-autogrow-textarea": { + "version": "3.0.3", + "requires": { + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/iron-validatable-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-behaviors": { + "version": "3.0.1", + "requires": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-checked-element-behavior": { + "version": "3.0.1", + "requires": { + "@polymer/iron-form-element-behavior": "^3.0.0-pre.26", + "@polymer/iron-validatable-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-dropdown": { + "version": "3.0.1", + "requires": { + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-overlay-behavior": "^3.0.0-pre.27", + "@polymer/neon-animation": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-fit-behavior": { + "version": "3.1.0", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-flex-layout": { + "version": "3.0.1", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-form-element-behavior": { + "version": "3.0.1", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-icon": { + "version": "3.0.1", + "requires": { + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/iron-meta": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-icons": { + "version": "3.0.1", + "requires": { + "@polymer/iron-icon": "^3.0.0-pre.26", + "@polymer/iron-iconset-svg": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-iconset-svg": { + "version": "3.0.1", + "requires": { + "@polymer/iron-meta": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-image": { + "version": "3.0.2", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-input": { + "version": "3.0.1", + "requires": { + "@polymer/iron-a11y-announcer": "^3.0.0-pre.26", + "@polymer/iron-validatable-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-location": { + "version": "3.0.2", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-media-query": { + "version": "3.0.1", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-menu-behavior": { + "version": "3.0.2", + "requires": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/iron-selector": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-meta": { + "version": "3.0.1", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-overlay-behavior": { + "version": "3.0.3", + "requires": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/iron-fit-behavior": "^3.0.0-pre.26", + "@polymer/iron-resizable-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-pages": { + "version": "3.0.1", + "requires": { + "@polymer/iron-resizable-behavior": "^3.0.0-pre.26", + "@polymer/iron-selector": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-resizable-behavior": { + "version": "3.0.1", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-scroll-target-behavior": { + "version": "3.0.1", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-selector": { + "version": "3.0.1", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-validatable-behavior": { + "version": "3.0.1", + "requires": { + "@polymer/iron-meta": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/neon-animation": { + "version": "3.0.1", + "requires": { + "@polymer/iron-resizable-behavior": "^3.0.0-pre.26", + "@polymer/iron-selector": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-behaviors": { + "version": "3.0.1", + "requires": { + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-checked-element-behavior": "^3.0.0-pre.26", + "@polymer/paper-ripple": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-button": { + "version": "3.0.1", + "requires": { + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/paper-behaviors": "^3.0.0-pre.27", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-card": { + "version": "3.0.1", + "requires": { + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/iron-image": "^3.0.0-pre.26", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-dialog": { + "version": "3.0.1", + "requires": { + "@polymer/iron-overlay-behavior": "^3.0.0-pre.27", + "@polymer/neon-animation": "^3.0.0-pre.26", + "@polymer/paper-dialog-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-dialog-behavior": { + "version": "3.0.1", + "requires": { + "@polymer/iron-overlay-behavior": "^3.0.0-pre.27", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-dropdown-menu": { + "version": "3.2.0", + "requires": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/iron-form-element-behavior": "^3.0.0-pre.26", + "@polymer/iron-icon": "^3.0.0-pre.26", + "@polymer/iron-iconset-svg": "^3.0.0-pre.26", + "@polymer/iron-validatable-behavior": "^3.0.0-pre.26", + "@polymer/paper-behaviors": "^3.0.0-pre.27", + "@polymer/paper-input": "^3.1.0", + "@polymer/paper-menu-button": "^3.1.0", + "@polymer/paper-ripple": "^3.0.0-pre.26", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.3.1" + } + }, + "@polymer/paper-icon-button": { + "version": "3.0.2", + "requires": { + "@polymer/iron-icon": "^3.0.0-pre.26", + "@polymer/paper-behaviors": "^3.0.0-pre.27", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-input": { + "version": "3.2.1", + "requires": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/iron-autogrow-textarea": "^3.0.0-pre.26", + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-form-element-behavior": "^3.0.0-pre.26", + "@polymer/iron-input": "^3.0.0-pre.26", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-item": { + "version": "3.0.1", + "requires": { + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-listbox": { + "version": "3.0.1", + "requires": { + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-menu-behavior": "^3.0.0-pre.26", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-menu-button": { + "version": "3.1.0", + "requires": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-dropdown": "^3.0.0-pre.26", + "@polymer/iron-fit-behavior": "^3.1.0", + "@polymer/neon-animation": "^3.0.0-pre.26", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-ripple": { + "version": "3.0.2", + "requires": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-styles": { + "version": "3.0.1", + "requires": { + "@polymer/font-roboto": "^3.0.1", + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-toast": { + "version": "3.0.1", + "requires": { + "@polymer/iron-a11y-announcer": "^3.0.0-pre.26", + "@polymer/iron-fit-behavior": "^3.0.0-pre.26", + "@polymer/iron-overlay-behavior": "^3.0.0-pre.27", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/polymer": { + "version": "3.5.1", + "requires": { + "@webcomponents/shadycss": "^1.9.1" + } + }, + "@rollup/plugin-babel": { + "version": "5.3.1", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + } + }, + "@rollup/plugin-image": { + "version": "2.1.1", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "mini-svg-data-uri": "^1.2.3" + } + }, + "@rollup/plugin-node-resolve": { + "version": "13.3.0", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + } + }, + "@sentry/browser": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.31.1.tgz", + "integrity": "sha512-Rg9F61S1tz1Dv3iUyyGP26bxoi7WJAG2+f2fBbSmFuJ+JTH4Jvu2/F1bBig8Dz01ejzVhbNSUUCfoDhSvksIsQ==", + "requires": { + "@sentry/core": "7.31.1", + "@sentry/replay": "7.31.1", + "@sentry/types": "7.31.1", + "@sentry/utils": "7.31.1", + "tslib": "^1.9.3" + }, + "dependencies": { + "@sentry/core": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.31.1.tgz", + "integrity": "sha512-quaNU6z8jabmatBTDi28Wpff2yzfWIp/IU4bbi2QOtEiCNT+TQJXqlRTRMu9xLrX7YzyKCL5X2gbit/85lyWUg==", + "requires": { + "@sentry/types": "7.31.1", + "@sentry/utils": "7.31.1", + "tslib": "^1.9.3" + } + }, + "@sentry/types": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.31.1.tgz", + "integrity": "sha512-1uzr2l0AxEnxUX/S0EdmXUQ15/kDsam8Nbdw4Gai8SU764XwQgA/TTjoewVP597CDI/AHKan67Y630/Ylmkx9w==" + }, + "@sentry/utils": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.31.1.tgz", + "integrity": "sha512-ZsIPq29aNdP9q3R7qIzJhZ9WW+4DzE9g5SfGwx3UjTIxoRRBfdUJUbf7S+LKEdvCkKbyoDt6FLt5MiSJV43xBA==", + "requires": { + "@sentry/types": "7.31.1", + "tslib": "^1.9.3" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/core": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.30.0.tgz", + "integrity": "sha512-NeLigkBlpcK63ymM63GoIHurml6V3BUe1Vi+trwm4/qqOTzT7PQhvdJCX+o3+atzRBH+zdb6kd4VWx44Oye3KA==", + "requires": { + "@sentry/types": "7.30.0", + "@sentry/utils": "7.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/electron": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@sentry/electron/-/electron-4.2.0.tgz", + "integrity": "sha512-9r7Kb4BOPXNClsYvzWJ1Nppf5cL8sck9Li4KIAgCq/ofogPiE54fbUdJtx5Fkagon5sBSjy0gu74xuhnPexhoA==", + "requires": { + "@sentry/browser": "7.30.0", + "@sentry/core": "7.30.0", + "@sentry/node": "7.30.0", + "@sentry/types": "7.30.0", + "@sentry/utils": "7.30.0", + "deepmerge": "4.2.2", + "tslib": "^2.3.1" + }, + "dependencies": { + "@sentry/browser": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.30.0.tgz", + "integrity": "sha512-9hpaNAqIBDLdnrZ51iWkqenRotqqweE1f2AlHO56nyT/UE+u+GdmAiBrgRNqdFQQM13JtTG/gu4HGOyLWb9HEA==", + "requires": { + "@sentry/core": "7.30.0", + "@sentry/replay": "7.30.0", + "@sentry/types": "7.30.0", + "@sentry/utils": "7.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/replay": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.30.0.tgz", + "integrity": "sha512-qJgz1tG0uStqMF5V7gN7KqxZuZY0MMQQY7siwPcSQVYj7X3AQswHjmvD4npEKbIa+jP6aQ6fFjoBjl3c0t3Mmg==", + "requires": { + "@sentry/core": "7.30.0", + "@sentry/types": "7.30.0", + "@sentry/utils": "7.30.0" + } + } + } + }, + "@sentry/node": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.30.0.tgz", + "integrity": "sha512-YYasu6C3I0HBP4N1oc/ed2nunxhGJgtAWaKwq3lo8uk3uF6cB1A8+2e0CpjzU5ejhbaFPUBxHyj4th39Bvku/w==", + "requires": { + "@sentry/core": "7.30.0", + "@sentry/types": "7.30.0", + "@sentry/utils": "7.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/replay": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.31.1.tgz", + "integrity": "sha512-sLArvwZn6IwA/bASctyhxN7LhdCXJvMmyTynRfmk7pzuNzBMc5CNlHeIsDpHrfQuH53IKicvl6cHnHyclu5DSA==", + "requires": { + "@sentry/core": "7.31.1", + "@sentry/types": "7.31.1", + "@sentry/utils": "7.31.1" + }, + "dependencies": { + "@sentry/core": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.31.1.tgz", + "integrity": "sha512-quaNU6z8jabmatBTDi28Wpff2yzfWIp/IU4bbi2QOtEiCNT+TQJXqlRTRMu9xLrX7YzyKCL5X2gbit/85lyWUg==", + "requires": { + "@sentry/types": "7.31.1", + "@sentry/utils": "7.31.1", + "tslib": "^1.9.3" + } + }, + "@sentry/types": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.31.1.tgz", + "integrity": "sha512-1uzr2l0AxEnxUX/S0EdmXUQ15/kDsam8Nbdw4Gai8SU764XwQgA/TTjoewVP597CDI/AHKan67Y630/Ylmkx9w==" + }, + "@sentry/utils": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.31.1.tgz", + "integrity": "sha512-ZsIPq29aNdP9q3R7qIzJhZ9WW+4DzE9g5SfGwx3UjTIxoRRBfdUJUbf7S+LKEdvCkKbyoDt6FLt5MiSJV43xBA==", + "requires": { + "@sentry/types": "7.31.1", + "tslib": "^1.9.3" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/types": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.30.0.tgz", + "integrity": "sha512-l4A86typvt/SfWh5JffpdxNGkg5EEA8m35BzpIcKmCAQZUDmnb4b478r8jdD2uuOjLmPNmZr1tifdRW4NCLuxQ==" + }, + "@sentry/utils": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.30.0.tgz", + "integrity": "sha512-tSlBhr5u/LdE2emxIDTDmjmyRr99GnZGIAh5GwRxUgeDQ3VEfNUFlyFodBCbZ6yeYTYd6PWNih5xoHn1+Rf3Sw==", + "requires": { + "@sentry/types": "7.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@storybook/csf": { + "version": "0.0.2--canary.4566f4d.1", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "@storybook/csf-tools": { + "version": "6.5.10", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/plugin-transform-react-jsx": "^7.12.12", + "@babel/preset-env": "^7.12.11", + "@babel/traverse": "^7.12.11", + "@babel/types": "^7.12.11", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/mdx1-csf": "^0.0.1", + "core-js": "^3.8.2", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + }, + "dependencies": { + "core-js": { + "version": "3.24.1", + "dev": true + } + } + }, + "@storybook/mdx1-csf": { + "version": "0.0.1", + "dev": true, + "requires": { + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/preset-env": "^7.12.11", + "@babel/types": "^7.12.11", + "@mdx-js/mdx": "^1.6.22", + "@types/lodash": "^4.14.167", + "js-string-escape": "^1.0.1", + "loader-utils": "^2.0.0", + "lodash": "^4.17.21", + "prettier": ">=2.2.1 <=2.3.0", + "ts-dedent": "^2.0.0" + }, + "dependencies": { + "prettier": { + "version": "2.3.0", + "dev": true + } + } + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, + "@types/accepts": { + "version": "1.3.5", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/auto-launch": { + "version": "5.0.2", + "dev": true + }, + "@types/body-parser": { + "version": "1.19.2", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.10", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/command-line-args": { + "version": "5.2.0", + "dev": true + }, + "@types/component-emitter": { + "version": "1.2.11", + "dev": true + }, + "@types/connect": { + "version": "3.4.35", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.3.5", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/content-disposition": { + "version": "0.5.5", + "dev": true + }, + "@types/cookie": { + "version": "0.4.1", + "dev": true + }, + "@types/cookies": { + "version": "0.7.7", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/express": "*", + "@types/keygrip": "*", + "@types/node": "*" + } + }, + "@types/cordova": { + "version": "0.0.34", + "dev": true + }, + "@types/cors": { + "version": "2.8.12", + "dev": true + }, + "@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dev": true, + "requires": { + "@types/ms": "*" + } + }, + "@types/eslint": { + "version": "8.4.5", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.39", + "dev": true + }, + "@types/express": { + "version": "4.17.13", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.30", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "optional": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/hast": { + "version": "2.3.4", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/html-minifier-terser": { + "version": "6.1.0", + "dev": true + }, + "@types/http-assert": { + "version": "1.5.3", + "dev": true + }, + "@types/http-errors": { + "version": "1.8.2", + "dev": true + }, + "@types/http-proxy": { + "version": "1.17.9", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/jasmine": { + "version": "2.8.19", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.11", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "dev": true + }, + "@types/keygrip": { + "version": "1.0.2", + "dev": true + }, + "@types/koa": { + "version": "2.13.5", + "dev": true, + "requires": { + "@types/accepts": "*", + "@types/content-disposition": "*", + "@types/cookies": "*", + "@types/http-assert": "*", + "@types/http-errors": "*", + "@types/keygrip": "*", + "@types/koa-compose": "*", + "@types/node": "*" + } + }, + "@types/koa-compose": { + "version": "3.2.5", + "dev": true, + "requires": { + "@types/koa": "*" + } + }, + "@types/lodash": { + "version": "4.14.182", + "dev": true + }, + "@types/mdast": { + "version": "3.0.10", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/mime": { + "version": "3.0.1", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.5", + "dev": true + }, + "@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true + }, + "@types/node": { + "version": "14.18.23", + "dev": true + }, + "@types/parse5": { + "version": "6.0.3", + "dev": true + }, + "@types/plist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.2.tgz", + "integrity": "sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*", + "xmlbuilder": ">=11.0.1" + } + }, + "@types/polymer": { + "version": "1.2.12", + "dev": true, + "requires": { + "@types/webcomponents.js": "*" + } + }, + "@types/prismjs": { + "version": "1.26.0", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "dev": true + }, + "@types/resolve": { + "version": "1.17.1", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/retry": { + "version": "0.12.0", + "dev": true + }, + "@types/semver": { + "version": "7.3.11" + }, + "@types/serve-index": { + "version": "1.9.1", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.0", + "dev": true, + "requires": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/sockjs": { + "version": "0.3.33", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/trusted-types": { + "version": "2.0.2" + }, + "@types/unist": { + "version": "2.0.6", + "dev": true + }, + "@types/uuidv4": { + "version": "2.0.0", + "dev": true + }, + "@types/verror": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.6.tgz", + "integrity": "sha512-NNm+gdePAX1VGvPcGZCDKQZKYSiAWigKhKaz5KF94hG6f2s8de9Ow5+7AbXoeKxL8gavZfk4UquSAygOF2duEQ==", + "dev": true, + "optional": true + }, + "@types/webcomponents.js": { + "version": "0.6.37", + "dev": true + }, + "@types/ws": { + "version": "7.4.7", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/yargs": { + "version": "17.0.11", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "dev": true + }, + "@types/yauzl": { + "version": "2.10.0", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.33.0", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.33.0", + "@typescript-eslint/type-utils": "5.33.0", + "@typescript-eslint/utils": "5.33.0", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "5.33.0", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.33.0", + "@typescript-eslint/types": "5.33.0", + "@typescript-eslint/typescript-estree": "5.33.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.33.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.33.0", + "@typescript-eslint/visitor-keys": "5.33.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.33.0", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.33.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.33.0", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.33.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.33.0", + "@typescript-eslint/visitor-keys": "5.33.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "5.33.0", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.33.0", + "@typescript-eslint/types": "5.33.0", + "@typescript-eslint/typescript-estree": "5.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.33.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.33.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "@web/config-loader": { + "version": "0.1.3", + "dev": true, + "requires": { + "semver": "^7.3.4" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@web/dev-server": { + "version": "0.1.35", + "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.35.tgz", + "integrity": "sha512-E7TSTSFdGPzhkiE3kIVt8i49gsiAYpJIZHzs1vJmVfdt8U4rsmhE+5roezxZo0hkEw4mNsqj9zCc4Dzqy/IFHg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.11", + "@types/command-line-args": "^5.0.0", + "@web/config-loader": "^0.1.3", + "@web/dev-server-core": "^0.3.19", + "@web/dev-server-rollup": "^0.3.19", + "camelcase": "^6.2.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.1", + "debounce": "^1.2.0", + "deepmerge": "^4.2.2", + "ip": "^1.1.5", + "nanocolors": "^0.2.1", + "open": "^8.0.2", + "portfinder": "^1.0.32" + } + }, + "@web/dev-server-core": { + "version": "0.3.19", + "dev": true, + "requires": { + "@types/koa": "^2.11.6", + "@types/ws": "^7.4.0", + "@web/parse5-utils": "^1.2.0", + "chokidar": "^3.4.3", + "clone": "^2.1.2", + "es-module-lexer": "^1.0.0", + "get-stream": "^6.0.0", + "is-stream": "^2.0.0", + "isbinaryfile": "^4.0.6", + "koa": "^2.13.0", + "koa-etag": "^4.0.0", + "koa-send": "^5.0.1", + "koa-static": "^5.0.0", + "lru-cache": "^6.0.0", + "mime-types": "^2.1.27", + "parse5": "^6.0.1", + "picomatch": "^2.2.2", + "ws": "^7.4.2" + } + }, + "@web/dev-server-esbuild": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@web/dev-server-esbuild/-/dev-server-esbuild-0.3.3.tgz", + "integrity": "sha512-hB9C8X9NsFWUG2XKT3W+Xcw3IZ/VObf4LNbK14BTjApnNyZfV6hVhSlJfvhgOoJ4DxsImfhIB5+gMRKOG9NmBw==", + "dev": true, + "requires": { + "@mdn/browser-compat-data": "^4.0.0", + "@web/dev-server-core": "^0.3.19", + "esbuild": "^0.12 || ^0.13 || ^0.14", + "parse5": "^6.0.1", + "ua-parser-js": "^1.0.2" + } + }, + "@web/dev-server-rollup": { + "version": "0.3.19", + "dev": true, + "requires": { + "@rollup/plugin-node-resolve": "^13.0.4", + "@web/dev-server-core": "^0.3.19", + "nanocolors": "^0.2.1", + "parse5": "^6.0.1", + "rollup": "^2.67.0", + "whatwg-url": "^11.0.0" + } + }, + "@web/dev-server-storybook": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@web/dev-server-storybook/-/dev-server-storybook-0.5.4.tgz", + "integrity": "sha512-zZg2cRrE9HjObL2rtD+P6OvV0qDcxOkSeY13iLxv938/01vAsNUS8eTvdGi2Hzz+EzxvuM6QitKKlxFGG3rKZw==", + "dev": true, + "requires": { + "@babel/core": "^7.16.0", + "@babel/preset-env": "^7.16.4", + "@mdx-js/mdx": "^1.6.22", + "@rollup/plugin-babel": "^5.3.0", + "@rollup/plugin-node-resolve": "^13.0.4", + "@storybook/csf-tools": "^6.4.9", + "@web/dev-server-core": "^0.3.19", + "@web/rollup-plugin-html": "^1.10.1", + "@web/rollup-plugin-polyfills-loader": "^1.1.1", + "@web/storybook-prebuilt": "^0.1.32", + "babel-plugin-bundled-import-meta": "^0.3.2", + "babel-plugin-template-html-minifier": "^4.1.0", + "es-module-lexer": "^1.0.2", + "globby": "^11.0.1", + "path-is-inside": "^1.0.2", + "rollup": "^2.66.1", + "rollup-plugin-terser": "^7.0.2", + "storybook-addon-markdown-docs": "^1.0.4" + } + }, + "@web/parse5-utils": { + "version": "1.3.0", + "dev": true, + "requires": { + "@types/parse5": "^6.0.1", + "parse5": "^6.0.1" + } + }, + "@web/polyfills-loader": { + "version": "1.3.5", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@web/parse5-utils": "^1.3.0", + "@webcomponents/shadycss": "^1.11.0", + "@webcomponents/webcomponentsjs": "^2.5.0", + "abortcontroller-polyfill": "^1.5.0", + "construct-style-sheets-polyfill": "^3.0.5", + "core-js-bundle": "^3.8.1", + "dynamic-import-polyfill": "^0.1.1", + "es-module-shims": "^1.4.1", + "intersection-observer": "^0.12.0", + "parse5": "^6.0.1", + "regenerator-runtime": "^0.13.7", + "resize-observer-polyfill": "^1.5.1", + "shady-css-scoped-element": "^0.0.2", + "systemjs": "^6.8.1", + "terser": "^5.14.2", + "whatwg-fetch": "^3.5.0" + } + }, + "@web/rollup-plugin-html": { + "version": "1.10.3", + "dev": true, + "requires": { + "@web/parse5-utils": "^1.3.0", + "glob": "^7.1.6", + "html-minifier-terser": "^6.0.0", + "parse5": "^6.0.1" + } + }, + "@web/rollup-plugin-polyfills-loader": { + "version": "1.3.1", + "dev": true, + "requires": { + "@web/polyfills-loader": "^1.3.4" + } + }, + "@web/storybook-prebuilt": { + "version": "0.1.34", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webcomponents/shadycss": { + "version": "1.11.0" + }, + "@webcomponents/webcomponentsjs": { + "version": "2.6.0" + }, + "@webpack-cli/configtest": { + "version": "1.2.0", + "dev": true, + "requires": {} + }, + "@webpack-cli/info": { + "version": "1.5.0", + "dev": true, + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.7.0", + "dev": true, + "requires": {} + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "dev": true + }, + "7zip-bin": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz", + "integrity": "sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "dev": true + }, + "abortcontroller-polyfill": { + "version": "1.7.3", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.8.0", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.8.0", + "dev": true, + "requires": {} + }, + "acorn-jsx": { + "version": "5.3.2", + "dev": true, + "requires": {} + }, + "agent-base": { + "version": "6.0.2", + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.2.1", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "dev": true + } + } + }, + "aggregate-error": { + "version": "3.1.0", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "dev": true, + "requires": {} + }, + "ajv-formats": { + "version": "2.1.1", + "dev": true, + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "dev": true + } + } + }, + "ajv-keywords": { + "version": "3.5.2", + "dev": true, + "requires": {} + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "optional": true + }, + "android-versions": { + "version": "1.7.0", + "dev": true, + "requires": { + "semver": "^5.7.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "dev": true + } + } + }, + "ansi": { + "version": "0.3.1", + "dev": true + }, + "ansi-colors": { + "version": "3.2.4", + "dev": true + }, + "ansi-html-community": { + "version": "0.0.8", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "any-base": { + "version": "1.1.0", + "dev": true + }, + "anymatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "app-builder-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz", + "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", + "dev": true + }, + "app-builder-lib": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-23.6.0.tgz", + "integrity": "sha512-dQYDuqm/rmy8GSCE6Xl/3ShJg6Ab4bZJMT8KaTKGzT436gl1DN4REP3FCWfXoh75qGTJ+u+WsdnnpO9Jl8nyMA==", + "dev": true, + "requires": { + "@develar/schema-utils": "~2.6.5", + "@electron/universal": "1.2.1", + "@malept/flatpak-bundler": "^0.4.0", + "7zip-bin": "~5.1.1", + "async-exit-hook": "^2.0.1", + "bluebird-lst": "^1.0.9", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", + "chromium-pickle-js": "^0.2.0", + "debug": "^4.3.4", + "ejs": "^3.1.7", + "electron-osx-sign": "^0.6.0", + "electron-publish": "23.6.0", + "form-data": "^4.0.0", + "fs-extra": "^10.1.0", + "hosted-git-info": "^4.1.0", + "is-ci": "^3.0.0", + "isbinaryfile": "^4.0.10", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.5", + "minimatch": "^3.1.2", + "read-config-file": "6.2.0", + "sanitize-filename": "^1.6.3", + "semver": "^7.3.7", + "tar": "^6.1.11", + "temp-file": "^3.4.0" + }, + "dependencies": { + "builder-util-runtime": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", + "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "sax": "^1.2.4" + } + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "append-type": { + "version": "1.0.2", + "dev": true + }, + "applescript": { + "version": "1.0.0" + }, + "aproba": { + "version": "1.2.0", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.7", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "argparse": { + "version": "2.0.1" + }, + "args": { + "version": "2.6.1", + "dev": true, + "requires": { + "camelcase": "4.1.0", + "chalk": "1.1.3", + "minimist": "1.2.0", + "pkginfo": "0.4.0", + "string-similarity": "1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "dev": true + } + } + }, + "array-back": { + "version": "3.1.0", + "dev": true + }, + "array-differ": { + "version": "3.0.0", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "dev": true + }, + "array-ify": { + "version": "1.0.0", + "dev": true + }, + "array-includes": { + "version": "3.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "array-to-sentence": { + "version": "1.1.0", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "dev": true + }, + "array-uniq": { + "version": "1.0.3", + "dev": true + }, + "array.prototype.flat": { + "version": "1.3.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + } + }, + "arrify": { + "version": "2.0.1", + "dev": true + }, + "asar": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/asar/-/asar-3.2.0.tgz", + "integrity": "sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "chromium-pickle-js": "^0.2.0", + "commander": "^5.0.0", + "glob": "^7.1.6", + "minimatch": "^3.0.4" + } + }, + "asn1": { + "version": "0.2.6", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "dev": true + }, + "assert-valid-glob-opts": { + "version": "1.0.0", + "dev": true, + "requires": { + "glob-option-error": "^1.0.0", + "validate-glob-opts": "^1.0.0" + } + }, + "ast-metadata-inferer": { + "version": "0.7.0", + "dev": true, + "requires": { + "@mdn/browser-compat-data": "^3.3.14" + }, + "dependencies": { + "@mdn/browser-compat-data": { + "version": "3.3.14", + "dev": true + } + } + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "optional": true + }, + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "dev": true + }, + "auto-launch": { + "version": "5.0.5", + "requires": { + "applescript": "^1.0.0", + "mkdirp": "^0.5.1", + "path-is-absolute": "^1.0.0", + "untildify": "^3.0.2", + "winreg": "1.2.4" + } + }, + "aws-sign2": { + "version": "0.7.0", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "dev": true + }, + "babel-loader": { + "version": "8.2.5", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + } + }, + "babel-plugin-apply-mdx-type-prop": { + "version": "1.6.22", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.22" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "dev": true + } + } + }, + "babel-plugin-bundled-import-meta": { + "version": "0.3.2", + "dev": true, + "requires": { + "@babel/plugin-syntax-import-meta": "^7.2.0", + "@babel/template": "^7.7.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-extract-import-names": { + "version": "1.6.22", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.2", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.2", + "semver": "^6.1.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.5.3", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.2", + "core-js-compat": "^3.21.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.4.0", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.2" + } + }, + "babel-plugin-template-html-minifier": { + "version": "4.1.0", + "dev": true, + "requires": { + "clean-css": "^4.2.1", + "html-minifier-terser": "^5.0.0", + "is-builtin-module": "^3.0.0" + }, + "dependencies": { + "commander": { + "version": "4.1.1", + "dev": true + }, + "html-minifier-terser": { + "version": "5.1.1", + "dev": true, + "requires": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + } + }, + "terser": { + "version": "4.8.1", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "dev": true + } + } + } + } + }, + "bail": { + "version": "1.0.5", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "dev": true + }, + "base64id": { + "version": "2.0.0", + "dev": true + }, + "batch": { + "version": "0.6.1", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "big-integer": { + "version": "1.6.51", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "dev": true + }, + "bl": { + "version": "4.1.0", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "bluebird": { + "version": "3.7.2", + "dev": true + }, + "bluebird-lst": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", + "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", + "dev": true, + "requires": { + "bluebird": "^3.5.5" + } + }, + "bmp-js": { + "version": "0.1.0", + "dev": true + }, + "body-parser": { + "version": "1.20.0", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "dev": true + }, + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "bonjour-service": { + "version": "1.0.13", + "dev": true, + "requires": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.2", + "dev": true + } + } + }, + "boolbase": { + "version": "1.0.0", + "dev": true + }, + "boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "dev": true, + "optional": true + }, + "bplist-creator": { + "version": "0.1.0", + "dev": true, + "requires": { + "stream-buffers": "2.2.x" + } + }, + "bplist-parser": { + "version": "0.2.0", + "dev": true, + "requires": { + "big-integer": "^1.6.44" + } + }, + "brace-expansion": { + "version": "1.1.11", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.3", + "requires": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + } + }, + "buffer": { + "version": "5.7.1", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "buffer-crc32": { + "version": "0.2.13", + "dev": true + }, + "buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ==", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "dev": true + }, + "buffer-from": { + "version": "1.1.2", + "dev": true + }, + "builder-util": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-23.6.0.tgz", + "integrity": "sha512-QiQHweYsh8o+U/KNCZFSvISRnvRctb8m/2rB2I1JdByzvNKxPeFLlHFRPQRXab6aYeXc18j9LpsDLJ3sGQmWTQ==", + "dev": true, + "requires": { + "@types/debug": "^4.1.6", + "@types/fs-extra": "^9.0.11", + "7zip-bin": "~5.1.1", + "app-builder-bin": "4.0.0", + "bluebird-lst": "^1.0.9", + "builder-util-runtime": "9.1.1", + "chalk": "^4.1.1", + "cross-spawn": "^7.0.3", + "debug": "^4.3.4", + "fs-extra": "^10.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-ci": "^3.0.0", + "js-yaml": "^4.1.0", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.4.0" + }, + "dependencies": { + "builder-util-runtime": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", + "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "sax": "^1.2.4" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "builder-util-runtime": { + "version": "9.0.3", + "requires": { + "debug": "^4.3.4", + "sax": "^1.2.4" + } + }, + "builtin-modules": { + "version": "3.3.0", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "dev": true + }, + "cacache": { + "version": "12.0.4", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "dev": true + } + } + }, + "cache-content-type": { + "version": "1.0.1", + "dev": true, + "requires": { + "mime-types": "^2.1.18", + "ylru": "^1.2.0" + } + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "call-bind": { + "version": "1.0.2", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "caller-callsite": { + "version": "2.0.0", + "dev": true, + "requires": { + "callsites": "^2.0.0" + }, + "dependencies": { + "callsites": { + "version": "2.0.0", + "dev": true + } + } + }, + "caller-path": { + "version": "2.0.0", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "3.1.0", + "dev": true + }, + "camel-case": { + "version": "4.1.2", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "camelcase": { + "version": "6.3.0", + "dev": true + }, + "camelcase-css": { + "version": "2.0.1", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001451", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001451.tgz", + "integrity": "sha512-XY7UbUpGRatZzoRft//5xOa69/1iGJRBlrieH6QYrkKLIFn3m7OVEJ81dSrKoy2BnKsdbX5cLrOispZNYo9v2w==" + }, + "caseless": { + "version": "0.12.0", + "dev": true + }, + "ccount": { + "version": "1.1.0", + "dev": true + }, + "chalk": { + "version": "5.0.1", + "dev": true + }, + "character-entities": { + "version": "1.2.4", + "dev": true + }, + "character-entities-html4": { + "version": "1.1.4", + "dev": true + }, + "character-entities-legacy": { + "version": "1.1.4", + "dev": true + }, + "character-reference-invalid": { + "version": "1.1.4", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chownr": { + "version": "1.1.4", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.3", + "dev": true + }, + "chromium-pickle-js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", + "dev": true + }, + "ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "dev": true + }, + "clean-css": { + "version": "4.2.4", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "clean-stack": { + "version": "2.2.0", + "dev": true + }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "optional": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "cliui": { + "version": "7.0.4", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "2.1.2", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "co": { + "version": "4.6.0", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "dev": true + }, + "collapse-white-space": { + "version": "1.0.6", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "colorette": { + "version": "2.0.19", + "dev": true + }, + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "comma-separated-tokens": { + "version": "1.0.8", + "dev": true + }, + "command-line-args": { + "version": "5.2.1", + "dev": true, + "requires": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + } + }, + "command-line-usage": { + "version": "6.1.3", + "dev": true, + "requires": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "array-back": { + "version": "4.0.2", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "typical": { + "version": "5.2.0", + "dev": true + } + } + }, + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "dev": true + }, + "compare-func": { + "version": "2.0.0", + "dev": true, + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "compare-version": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "optional": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "connect": { + "version": "3.7.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "finalhandler": { + "version": "1.1.2", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "statuses": { + "version": "1.5.0", + "dev": true + } + } + }, + "connect-history-api-fallback": { + "version": "2.0.0", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "dev": true + }, + "construct-style-sheets-polyfill": { + "version": "3.1.0", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "dev": true + } + } + }, + "content-type": { + "version": "1.0.4", + "dev": true + }, + "conventional-changelog-conventionalcommits": { + "version": "4.6.3", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "lodash": "^4.17.15", + "q": "^1.5.1" + } + }, + "convert-source-map": { + "version": "1.8.0", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.2" + }, + "cookie-signature": { + "version": "1.0.6", + "dev": true + }, + "cookies": { + "version": "0.8.0", + "dev": true, + "requires": { + "depd": "~2.0.0", + "keygrip": "~1.1.0" + } + }, + "copy-concurrently": { + "version": "1.0.5", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-dir": { + "version": "1.3.0", + "dev": true + }, + "copy-webpack-plugin": { + "version": "5.1.2", + "dev": true, + "requires": { + "cacache": "^12.0.3", + "find-cache-dir": "^2.1.0", + "glob-parent": "^3.1.0", + "globby": "^7.1.1", + "is-glob": "^4.0.1", + "loader-utils": "^1.2.3", + "minimatch": "^3.0.4", + "normalize-path": "^3.0.0", + "p-limit": "^2.2.1", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "array-union": { + "version": "1.0.2", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "dir-glob": { + "version": "2.2.2", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "globby": { + "version": "7.1.1", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + } + }, + "ignore": { + "version": "3.3.10", + "dev": true + }, + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.2", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "dev": true + } + } + }, + "p-locate": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "5.7.1", + "dev": true + }, + "slash": { + "version": "1.0.0", + "dev": true + } + } + }, + "cordova-android": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-11.0.0.tgz", + "integrity": "sha512-ZhvSF5BYY8gmrAu1PtMPdHFsRoom/emT4OtTcecmh3Zj22900y4Golg5whhBPcYcTPC7BU6PG/EmG9BBHcX9tQ==", + "dev": true, + "requires": { + "android-versions": "^1.7.0", + "cordova-common": "^4.0.2", + "execa": "^5.1.1", + "fast-glob": "^3.2.11", + "fs-extra": "^10.1.0", + "is-path-inside": "^3.0.3", + "nopt": "^5.0.0", + "properties-parser": "^0.3.1", + "semver": "^7.3.7", + "untildify": "^4.0.0", + "which": "^2.0.2" + }, + "dependencies": { + "fs-extra": { + "version": "10.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "untildify": { + "version": "4.0.0", + "dev": true + } + } + }, + "cordova-browser": { + "version": "6.0.0", + "dev": true, + "requires": { + "cordova-common": "^3.1.0", + "cordova-serve": "^3.0.0", + "nopt": "^4.0.1", + "shelljs": "^0.5.3" + }, + "dependencies": { + "bplist-parser": { + "version": "0.1.1", + "dev": true, + "requires": { + "big-integer": "^1.6.7" + } + }, + "cordova-common": { + "version": "3.2.1", + "dev": true, + "requires": { + "ansi": "^0.3.1", + "bplist-parser": "^0.1.0", + "cross-spawn": "^6.0.5", + "elementtree": "0.1.7", + "endent": "^1.1.1", + "fs-extra": "^8.0.0", + "glob": "^7.1.2", + "minimatch": "^3.0.0", + "plist": "^3.0.1", + "q": "^1.4.1", + "strip-bom": "^3.0.0", + "underscore": "^1.8.3", + "which": "^1.3.0" + } + }, + "cross-spawn": { + "version": "6.0.5", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "fs-extra": { + "version": "8.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "nopt": { + "version": "4.0.3", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "path-key": { + "version": "2.0.1", + "dev": true + }, + "semver": { + "version": "5.7.1", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "dev": true + }, + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "cordova-common": { + "version": "4.0.2", + "dev": true, + "requires": { + "@netflix/nerror": "^1.1.3", + "ansi": "^0.3.1", + "bplist-parser": "^0.2.0", + "cross-spawn": "^7.0.1", + "elementtree": "^0.1.7", + "endent": "^1.4.1", + "fast-glob": "^3.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "plist": "^3.0.1", + "q": "^1.5.1", + "read-chunk": "^3.2.0", + "strip-bom": "^4.0.0", + "underscore": "^1.9.2" + } + }, + "cordova-fetch": { + "version": "3.0.1", + "dev": true, + "requires": { + "cordova-common": "^4.0.0", + "fs-extra": "^9.0.0", + "npm-package-arg": "^8.0.1", + "pacote": "^11.1.11", + "pify": "^5.0.0", + "resolve": "^1.15.1", + "semver": "^7.1.3", + "which": "^2.0.2" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "cordova-ios": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/cordova-ios/-/cordova-ios-6.3.0.tgz", + "integrity": "sha512-BZybgFzc7D0HmhkTYurFrRXiWgvYohmT7bwQsLPhf+VdiDjwGXbiSWgg3uP9MChvacCNcGXXUl2NhOaNC9UVaA==", + "dev": true, + "requires": { + "cordova-common": "^4.0.2", + "fs-extra": "^9.1.0", + "ios-sim": "^8.0.2", + "nopt": "^5.0.0", + "plist": "^3.0.1", + "semver": "^7.3.4", + "unorm": "^1.6.0", + "which": "^2.0.2", + "xcode": "^3.0.1", + "xml-escape": "^1.1.0" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "cordova-lib": { + "version": "11.0.0", + "dev": true, + "requires": { + "cordova-common": "^4.0.2", + "cordova-fetch": "^3.0.1", + "cordova-serve": "^4.0.0", + "dep-graph": "^1.1.0", + "detect-indent": "^6.1.0", + "detect-newline": "^3.1.0", + "elementtree": "^0.1.7", + "execa": "^5.1.1", + "fs-extra": "^10.0.0", + "globby": "^11.0.4", + "init-package-json": "^2.0.5", + "md5-file": "^5.0.0", + "pify": "^5.0.0", + "semver": "^7.3.5", + "stringify-package": "^1.0.1", + "write-file-atomic": "^3.0.3" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cordova-serve": { + "version": "4.0.0", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "compression": "^1.7.4", + "express": "^4.17.1", + "open": "^7.0.3", + "which": "^2.0.2" + } + }, + "fs-extra": { + "version": "10.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "open": { + "version": "7.4.2", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "cordova-osx": { + "version": "git+ssh://git@github.com/apache/cordova-osx.git#16b56e4a9297c5195a06a57450aeb983e7053184", + "dev": true, + "from": "cordova-osx@github:apache/cordova-osx", + "requires": { + "cordova-common": "^4.0.2", + "nopt": "^5.0.0", + "plist": "^3.0.4", + "shelljs": "^0.8.5", + "underscore": "^1.13.2", + "unorm": "^1.4.1", + "xcode": "^3.0.1" + }, + "dependencies": { + "interpret": { + "version": "1.4.0", + "dev": true + }, + "rechoir": { + "version": "0.6.2", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "shelljs": { + "version": "0.8.5", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + } + } + }, + "cordova-plugin-clipboard": { + "version": "git+ssh://git@github.com/Jigsaw-Code/outline-cordova-plugin-clipboard.git#8cc5101b7a264122c71f7f3a3cb5744a8fad8498", + "dev": true, + "from": "cordova-plugin-clipboard@github:Jigsaw-Code/outline-cordova-plugin-clipboard#v2.0.0" + }, + "cordova-plugin-outline": { + "version": "file:src/cordova/plugin" + }, + "cordova-plugin-splashscreen": { + "version": "6.0.2" + }, + "cordova-plugin-statusbar": { + "version": "2.4.3" + }, + "cordova-serve": { + "version": "3.0.0", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "compression": "^1.6.0", + "express": "^4.13.3", + "opn": "^5.3.0", + "which": "^1.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "cordova-webintent": { + "version": "git+ssh://git@github.com/cordova-misc/cordova-webintent.git#6c045cece3e49e4dd061d56fc15569053e9a0c4a", + "dev": true, + "from": "cordova-webintent@github:cordova-misc/cordova-webintent#v2.0.0" + }, + "core-js": { + "version": "2.6.12", + "dev": true + }, + "core-js-bundle": { + "version": "3.24.1", + "dev": true + }, + "core-js-compat": { + "version": "3.24.1", + "dev": true, + "requires": { + "browserslist": "^4.21.3", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.3", + "dev": true + }, + "cors": { + "version": "2.8.5", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cosmiconfig": { + "version": "5.2.1", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "import-fresh": { + "version": "2.0.0", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "dev": true + } + } + }, + "crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "optional": true, + "requires": { + "buffer": "^5.1.0" + } + }, + "cross-fetch": { + "version": "3.1.5", + "dev": true, + "requires": { + "node-fetch": "2.6.7" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, + "cross-spawn": { + "version": "7.0.3", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "css-loader": { + "version": "5.2.7", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "dependencies": { + "icss-utils": { + "version": "5.1.0", + "dev": true, + "requires": {} + }, + "picocolors": { + "version": "1.0.0", + "dev": true + }, + "postcss": { + "version": "8.4.16", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "schema-utils": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "css-select": { + "version": "4.3.0", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-selector-parser": { + "version": "1.4.1", + "dev": true + }, + "css-what": { + "version": "6.1.0", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "dev": true + }, + "custom-event": { + "version": "1.0.1", + "dev": true + }, + "cyclist": { + "version": "1.0.1", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-uri-to-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", + "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==", + "dev": true + }, + "date-format": { + "version": "4.0.13", + "dev": true + }, + "debounce": { + "version": "1.2.1", + "dev": true + }, + "debug": { + "version": "4.3.4", + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "dev": true + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "dedent": { + "version": "0.7.0", + "dev": true + }, + "deep-equal": { + "version": "1.0.1", + "dev": true + }, + "deep-extend": { + "version": "0.6.0", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "dev": true + }, + "deepmerge": { + "version": "4.2.2" + }, + "default-gateway": { + "version": "6.0.3", + "dev": true, + "requires": { + "execa": "^5.0.0" + } + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "define-lazy-prop": { + "version": "2.0.0", + "dev": true + }, + "define-properties": { + "version": "1.1.4", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "del": { + "version": "3.0.0", + "dev": true, + "requires": { + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" + }, + "dependencies": { + "array-union": { + "version": "1.0.2", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "globby": { + "version": "6.1.0", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "dev": true + } + } + }, + "pify": { + "version": "3.0.0", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "dev": true + }, + "dep-graph": { + "version": "1.1.0", + "dev": true, + "requires": { + "underscore": "1.2.1" + }, + "dependencies": { + "underscore": { + "version": "1.2.1", + "dev": true + } + } + }, + "depd": { + "version": "2.0.0", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "dev": true + }, + "detab": { + "version": "2.0.4", + "dev": true, + "requires": { + "repeat-string": "^1.5.4" + } + }, + "detect-indent": { + "version": "6.1.0", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "dev": true + }, + "devtools-protocol": { + "version": "0.0.981744", + "dev": true + }, + "di": { + "version": "0.0.1", + "dev": true + }, + "dir-compare": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz", + "integrity": "sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA==", + "dev": true, + "requires": { + "buffer-equal": "1.0.0", + "colors": "1.0.3", + "commander": "2.9.0", + "minimatch": "3.0.4" + }, + "dependencies": { + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==", + "dev": true, + "requires": { + "graceful-readlink": ">= 1.0.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "dir-glob": { + "version": "3.0.1", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dmg-builder": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-23.6.0.tgz", + "integrity": "sha512-jFZvY1JohyHarIAlTbfQOk+HnceGjjAdFjVn3n8xlDWKsYNqbO4muca6qXEZTfGXeQMG7TYim6CeS5XKSfSsGA==", + "dev": true, + "requires": { + "app-builder-lib": "23.6.0", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", + "dmg-license": "^1.0.11", + "fs-extra": "^10.0.0", + "iconv-lite": "^0.6.2", + "js-yaml": "^4.1.0" + }, + "dependencies": { + "builder-util-runtime": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", + "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "sax": "^1.2.4" + } + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "dmg-license": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", + "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "dev": true, + "optional": true, + "requires": { + "@types/plist": "^3.0.1", + "@types/verror": "^1.10.3", + "ajv": "^6.10.0", + "crc": "^3.8.0", + "iconv-corefoundation": "^1.1.7", + "plist": "^3.0.4", + "smart-buffer": "^4.0.2", + "verror": "^1.10.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "dev": true + }, + "dns-packet": { + "version": "5.4.0", + "dev": true, + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, + "doctrine": { + "version": "3.0.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-converter": { + "version": "0.2.0", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-serialize": { + "version": "2.2.1", + "dev": true, + "requires": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "dom-serializer": { + "version": "1.4.1", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "dom-walk": { + "version": "0.1.2", + "dev": true + }, + "domelementtype": { + "version": "2.3.0", + "dev": true + }, + "domhandler": { + "version": "4.3.1", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-case": { + "version": "3.0.4", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dot-prop": { + "version": "5.3.0", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "dotenv": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", + "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "dynamic-import-polyfill": { + "version": "0.1.1", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "dev": true + }, + "ejs": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "dev": true, + "requires": { + "jake": "^10.8.5" + } + }, + "electron": { + "version": "19.1.9", + "resolved": "https://registry.npmjs.org/electron/-/electron-19.1.9.tgz", + "integrity": "sha512-XT5LkTzIHB+ZtD3dTmNnKjVBWrDWReCKt9G1uAFLz6uJMEVcIUiYO+fph5pLXETiBw/QZBx8egduMEfIccLx+g==", + "dev": true, + "requires": { + "@electron/get": "^1.14.1", + "@types/node": "^16.11.26", + "extract-zip": "^1.0.3" + }, + "dependencies": { + "@types/node": { + "version": "16.11.47", + "dev": true + } + } + }, + "electron-builder": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-23.6.0.tgz", + "integrity": "sha512-y8D4zO+HXGCNxFBV/JlyhFnoQ0Y0K7/sFH+XwIbj47pqaW8S6PGYQbjoObolKBR1ddQFPt4rwp4CnwMJrW3HAw==", + "dev": true, + "requires": { + "@types/yargs": "^17.0.1", + "app-builder-lib": "23.6.0", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", + "chalk": "^4.1.1", + "dmg-builder": "23.6.0", + "fs-extra": "^10.0.0", + "is-ci": "^3.0.0", + "lazy-val": "^1.0.5", + "read-config-file": "6.2.0", + "simple-update-notifier": "^1.0.7", + "yargs": "^17.5.1" + }, + "dependencies": { + "builder-util-runtime": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", + "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "sax": "^1.2.4" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "fs-extra": { + "version": "10.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "electron-icon-maker": { + "version": "0.0.5", + "dev": true, + "requires": { + "args": "^2.3.0", + "icon-gen": "2.0.0", + "jimp": "^0.14.0" + } + }, + "electron-osx-sign": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.6.0.tgz", + "integrity": "sha512-+hiIEb2Xxk6eDKJ2FFlpofCnemCbjbT5jz+BKGpVBrRNT3kWTGs4DfNX6IzGwgi33hUcXF+kFs9JW+r6Wc1LRg==", + "dev": true, + "requires": { + "bluebird": "^3.5.0", + "compare-version": "^0.1.2", + "debug": "^2.6.8", + "isbinaryfile": "^3.0.2", + "minimist": "^1.2.0", + "plist": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, + "requires": { + "buffer-alloc": "^1.2.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "electron-publish": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-23.6.0.tgz", + "integrity": "sha512-jPj3y+eIZQJF/+t5SLvsI5eS4mazCbNYqatv5JihbqOstIM13k0d1Z3vAWntvtt13Itl61SO6seicWdioOU5dg==", + "dev": true, + "requires": { + "@types/fs-extra": "^9.0.11", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", + "chalk": "^4.1.1", + "fs-extra": "^10.0.0", + "lazy-val": "^1.0.5", + "mime": "^2.5.2" + }, + "dependencies": { + "builder-util-runtime": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", + "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "sax": "^1.2.4" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "electron-to-chromium": { + "version": "1.4.215" + }, + "electron-updater": { + "version": "5.2.1", + "requires": { + "@types/semver": "^7.3.6", + "builder-util-runtime": "9.0.3", + "fs-extra": "^10.0.0", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.5", + "lodash.escaperegexp": "^4.1.2", + "lodash.isequal": "^4.5.0", + "semver": "^7.3.5", + "typed-emitter": "^2.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "10.1.0", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "semver": { + "version": "7.3.7", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "elementtree": { + "version": "0.1.7", + "dev": true, + "requires": { + "sax": "1.1.4" + }, + "dependencies": { + "sax": { + "version": "1.1.4", + "dev": true + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "end-of-stream": { + "version": "1.4.4", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "endent": { + "version": "1.4.1", + "dev": true, + "requires": { + "dedent": "^0.7.0", + "fast-json-parse": "^1.0.3", + "objectorarray": "^1.0.4" + } + }, + "engine.io": { + "version": "6.2.0", + "dev": true, + "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3" + }, + "dependencies": { + "ws": { + "version": "8.2.3", + "dev": true, + "requires": {} + } + } + }, + "engine.io-parser": { + "version": "5.0.4", + "dev": true + }, + "enhanced-resolve": { + "version": "5.10.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "ent": { + "version": "2.2.0", + "dev": true + }, + "entities": { + "version": "2.2.0", + "dev": true + }, + "env-paths": { + "version": "2.2.1", + "dev": true + }, + "envinfo": { + "version": "7.8.1", + "dev": true + }, + "err-code": { + "version": "2.0.3", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.20.1", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-module-lexer": { + "version": "1.0.3", + "dev": true + }, + "es-module-shims": { + "version": "1.5.14", + "dev": true + }, + "es-shim-unscopables": { + "version": "1.0.0", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "optional": true + }, + "es6-promise": { + "version": "4.2.8", + "dev": true + }, + "esbuild": { + "version": "0.12.29", + "dev": true + }, + "escalade": { + "version": "3.1.1" + }, + "escape-html": { + "version": "1.0.3", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "dev": true + }, + "escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", + "dev": true, + "requires": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" + }, + "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true + }, + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true + }, + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", + "dev": true, + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, + "eslint": { + "version": "8.21.0", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.3", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "eslint-scope": { + "version": "7.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.17.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "type-fest": { + "version": "0.20.2", + "dev": true + } + } + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-import-resolver-typescript": { + "version": "3.4.0", + "dev": true, + "requires": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.10.0", + "get-tsconfig": "^4.2.0", + "globby": "^13.1.2", + "is-core-module": "^2.9.0", + "is-glob": "^4.0.3", + "synckit": "^0.8.1" + }, + "dependencies": { + "globby": { + "version": "13.1.2", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "slash": { + "version": "4.0.0", + "dev": true + } + } + }, + "eslint-module-utils": { + "version": "2.7.3", + "dev": true, + "requires": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "find-up": { + "version": "2.1.0", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "dev": true + } + } + }, + "eslint-plugin-compat": { + "version": "4.0.2", + "dev": true, + "requires": { + "@mdn/browser-compat-data": "^4.1.5", + "ast-metadata-inferer": "^0.7.0", + "browserslist": "^4.16.8", + "caniuse-lite": "^1.0.30001304", + "core-js": "^3.16.2", + "find-up": "^5.0.0", + "lodash.memoize": "4.1.2", + "semver": "7.3.5" + }, + "dependencies": { + "core-js": { + "version": "3.24.1", + "dev": true + }, + "semver": { + "version": "7.3.5", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.26.0", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "dev": true + }, + "esm": { + "version": "3.2.25", + "dev": true + }, + "espree": { + "version": "9.3.3", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esprima": { + "version": "4.0.1", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "dev": true + }, + "estree-walker": { + "version": "1.0.1", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "dev": true + }, + "etag": { + "version": "1.8.1", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "dev": true + }, + "events": { + "version": "3.3.0", + "dev": true + }, + "execa": { + "version": "5.1.1", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "exif-parser": { + "version": "0.1.12", + "dev": true + }, + "express": { + "version": "4.18.1", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "cookie": { + "version": "0.5.0", + "dev": true + }, + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "dev": true + }, + "extract-zip": { + "version": "1.7.0", + "dev": true, + "requires": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "extsprintf": { + "version": "1.4.1", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "dev": true + }, + "fast-glob": { + "version": "3.2.11", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-parse": { + "version": "1.0.3", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.16", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fd-slicer": { + "version": "1.1.0", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, + "requires": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + } + }, + "figgy-pudding": { + "version": "3.5.2", + "dev": true + }, + "file-entry-cache": { + "version": "6.0.1", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-loader": { + "version": "6.2.0", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "file-type": { + "version": "9.0.0", + "dev": true + }, + "file-url": { + "version": "2.0.2", + "dev": true + }, + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "fill-range": { + "version": "7.0.1", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-replace": { + "version": "3.0.0", + "dev": true, + "requires": { + "array-back": "^3.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "findup": { + "version": "0.1.5", + "dev": true, + "requires": { + "colors": "~0.6.0-1", + "commander": "~2.1.0" + }, + "dependencies": { + "colors": { + "version": "0.6.2", + "dev": true + }, + "commander": { + "version": "2.1.0", + "dev": true + } + } + }, + "flat-cache": { + "version": "3.0.4", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "3.2.6", + "dev": true + }, + "flush-write-stream": { + "version": "1.1.1", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "dev": true + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "requires": { + "fetch-blob": "^3.1.2" + } + }, + "forwarded": { + "version": "0.2.0", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "dev": true + }, + "from2": { + "version": "2.3.0", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-constants": { + "version": "1.0.0", + "dev": true + }, + "fs-extra": { + "version": "9.1.0", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs-monkey": { + "version": "1.0.3", + "dev": true + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.2", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-stdin": { + "version": "6.0.0", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "dev": true + }, + "get-symbol-description": { + "version": "1.0.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "get-tsconfig": { + "version": "4.2.0", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "gifwrap": { + "version": "0.9.4", + "dev": true, + "requires": { + "image-q": "^4.0.0", + "omggif": "^1.0.10" + } + }, + "github-markdown-css": { + "version": "4.0.0", + "dev": true + }, + "github-slugger": { + "version": "1.4.0", + "dev": true + }, + "glob": { + "version": "7.2.3", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-option-error": { + "version": "1.0.0", + "dev": true + }, + "glob-parent": { + "version": "5.1.2", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "dev": true + }, + "global": { + "version": "4.4.0", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, + "optional": true, + "requires": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "optional": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "global-tunnel-ng": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", + "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", + "dev": true, + "optional": true, + "requires": { + "encodeurl": "^1.0.2", + "lodash": "^4.17.10", + "npm-conf": "^1.1.3", + "tunnel": "^0.0.6" + } + }, + "globals": { + "version": "11.12.0", + "dev": true + }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "optional": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "globalyzer": { + "version": "0.1.0", + "dev": true + }, + "globby": { + "version": "11.1.0", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "globrex": { + "version": "0.1.2", + "dev": true + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "dependencies": { + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "graceful-fs": { + "version": "4.2.10" + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==", + "dev": true + }, + "grapheme-splitter": { + "version": "1.0.4", + "dev": true + }, + "handle-thing": { + "version": "2.0.1", + "dev": true + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "dev": true + } + } + }, + "has-bigints": { + "version": "1.0.2", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-unicode": { + "version": "2.0.1", + "dev": true + }, + "hasha": { + "version": "2.2.0", + "dev": true, + "requires": { + "is-stream": "^1.0.1", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "is-stream": { + "version": "1.1.0", + "dev": true + } + } + }, + "hast-to-hyperscript": { + "version": "9.0.1", + "dev": true, + "requires": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + } + }, + "hast-util-from-parse5": { + "version": "6.0.1", + "dev": true, + "requires": { + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" + }, + "dependencies": { + "@types/parse5": { + "version": "5.0.3", + "dev": true + } + } + }, + "hast-util-has-property": { + "version": "1.0.4", + "dev": true + }, + "hast-util-heading-rank": { + "version": "1.0.1", + "dev": true + }, + "hast-util-is-element": { + "version": "1.1.0", + "dev": true + }, + "hast-util-parse-selector": { + "version": "2.2.5", + "dev": true + }, + "hast-util-raw": { + "version": "6.0.1", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + } + }, + "hast-util-sanitize": { + "version": "3.0.2", + "dev": true, + "requires": { + "xtend": "^4.0.0" + } + }, + "hast-util-to-html": { + "version": "7.1.3", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-is-element": "^1.0.0", + "hast-util-whitespace": "^1.0.0", + "html-void-elements": "^1.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0", + "stringify-entities": "^3.0.1", + "unist-util-is": "^4.0.0", + "xtend": "^4.0.0" + } + }, + "hast-util-to-parse5": { + "version": "6.0.0", + "dev": true, + "requires": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + } + }, + "hast-util-to-string": { + "version": "1.0.4", + "dev": true + }, + "hast-util-whitespace": { + "version": "1.0.4", + "dev": true + }, + "hastscript": { + "version": "6.0.0", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + } + }, + "he": { + "version": "1.2.0", + "dev": true + }, + "hosted-git-info": { + "version": "4.1.0", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "hpack.js": { + "version": "2.1.6", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "html-entities": { + "version": "2.3.3", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "html-minifier-terser": { + "version": "6.1.0", + "dev": true, + "requires": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "dependencies": { + "clean-css": { + "version": "5.3.1", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "commander": { + "version": "8.3.0", + "dev": true + } + } + }, + "html-void-elements": { + "version": "1.0.5", + "dev": true + }, + "html-webpack-plugin": { + "version": "5.5.0", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + } + }, + "htmlparser2": { + "version": "6.1.0", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "http-assert": { + "version": "1.5.0", + "dev": true, + "requires": { + "deep-equal": "~1.0.1", + "http-errors": "~1.8.0" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "dev": true + }, + "http-errors": { + "version": "1.8.1", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + } + }, + "statuses": { + "version": "1.5.0", + "dev": true + } + } + }, + "http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.8", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "http-proxy-middleware": { + "version": "2.0.6", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "dependencies": { + "is-plain-obj": { + "version": "3.0.0", + "dev": true + } + } + }, + "http-signature": { + "version": "1.2.0", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "dev": true + }, + "humanize-ms": { + "version": "1.2.1", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "husky": { + "version": "1.3.1", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.7", + "execa": "^1.0.0", + "find-up": "^3.0.0", + "get-stdin": "^6.0.0", + "is-ci": "^2.0.0", + "pkg-dir": "^3.0.0", + "please-upgrade-node": "^3.1.1", + "read-pkg": "^4.0.1", + "run-node": "^1.0.0", + "slash": "^2.0.0" + }, + "dependencies": { + "ci-info": { + "version": "2.0.0", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-ci": { + "version": "2.0.0", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "semver": { + "version": "5.7.1", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "dev": true + }, + "slash": { + "version": "2.0.0", + "dev": true + }, + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "icon-gen": { + "version": "2.0.0", + "dev": true, + "requires": { + "del": "^3.0.0", + "mkdirp": "^0.5.1", + "pngjs-nozlib": "^1.0.0", + "svg2png": "4.1.1", + "uuid": "^3.3.2" + } + }, + "iconv-corefoundation": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", + "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", + "dev": true, + "optional": true, + "requires": { + "cli-truncate": "^2.1.0", + "node-addon-api": "^1.6.3" + } + }, + "iconv-lite": { + "version": "0.6.3", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "ieee754": { + "version": "1.2.1", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "dev": true + }, + "ignore": { + "version": "5.2.0", + "dev": true + }, + "ignore-walk": { + "version": "3.0.4", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "image-q": { + "version": "4.0.0", + "dev": true, + "requires": { + "@types/node": "16.9.1" + }, + "dependencies": { + "@types/node": { + "version": "16.9.1", + "dev": true + } + } + }, + "import-fresh": { + "version": "3.3.0", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-local": { + "version": "3.1.0", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "dev": true + }, + "indexed-filter": { + "version": "1.0.3", + "dev": true, + "requires": { + "append-type": "^1.0.1" + } + }, + "infer-owner": { + "version": "1.0.4", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "optional": true + }, + "init-package-json": { + "version": "2.0.5", + "dev": true, + "requires": { + "npm-package-arg": "^8.1.5", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "^4.1.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "inline-style-parser": { + "version": "0.1.1", + "dev": true + }, + "inspect-with-kind": { + "version": "1.0.5", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "internal-slot": { + "version": "1.0.3", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "interpret": { + "version": "2.2.0", + "dev": true + }, + "intersection-observer": { + "version": "0.12.2", + "dev": true + }, + "intl-messageformat": { + "version": "9.13.0", + "dev": true, + "requires": { + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/fast-memoize": "1.2.1", + "@formatjs/icu-messageformat-parser": "2.1.0", + "tslib": "^2.1.0" + } + }, + "intl-messageformat-parser": { + "version": "1.4.0" + }, + "invert-kv": { + "version": "1.0.0", + "dev": true + }, + "ios-deploy": { + "version": "1.11.4", + "optional": true + }, + "ios-sim": { + "version": "8.0.2", + "dev": true, + "requires": { + "bplist-parser": "^0.0.6", + "nopt": "1.0.9", + "plist": "^3.0.1", + "simctl": "^2" + }, + "dependencies": { + "bplist-parser": { + "version": "0.0.6", + "dev": true + }, + "nopt": { + "version": "1.0.9", + "dev": true, + "requires": { + "abbrev": "1" + } + } + } + }, + "ip": { + "version": "1.1.8" + }, + "ipaddr.js": { + "version": "1.9.1", + "dev": true + }, + "is-alphabetical": { + "version": "1.0.4", + "dev": true + }, + "is-alphanumerical": { + "version": "1.0.4", + "dev": true, + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "2.0.5", + "dev": true + }, + "is-builtin-module": { + "version": "3.2.0", + "dev": true, + "requires": { + "builtin-modules": "^3.3.0" + } + }, + "is-callable": { + "version": "1.2.4", + "dev": true + }, + "is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "requires": { + "ci-info": "^3.2.0" + } + }, + "is-core-module": { + "version": "2.10.0", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-decimal": { + "version": "1.0.4", + "dev": true + }, + "is-directory": { + "version": "0.3.1", + "dev": true + }, + "is-docker": { + "version": "2.2.1", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true + }, + "is-function": { + "version": "1.0.2", + "dev": true + }, + "is-generator-function": { + "version": "1.0.10", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.4", + "dev": true + }, + "is-lambda": { + "version": "1.0.1", + "dev": true + }, + "is-module": { + "version": "1.0.0", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.2", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "dev": true + }, + "is-path-cwd": { + "version": "1.0.0", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "dev": true, + "requires": { + "is-path-inside": "^1.0.0" + }, + "dependencies": { + "is-path-inside": { + "version": "1.0.1", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + } + } + }, + "is-path-inside": { + "version": "3.0.3", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "2.0.1", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typedarray": { + "version": "1.0.0", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "dev": true + }, + "is-weakref": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-whitespace-character": { + "version": "1.0.4", + "dev": true + }, + "is-word-character": { + "version": "1.0.4", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "dev": true + }, + "isbinaryfile": { + "version": "4.0.10", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "dev": true + }, + "istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha512-nMtdn4hvK0HjUlzr1DrKSUY8ychprt8dzHOgY2KXsIhHu5PuQQEOTM27gV9Xblyon7aUH/TSFIjRHEODF/FRPg==", + "dev": true, + "requires": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "dependencies": { + "abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "dependencies": { + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "dev": true, + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jasmine-core": { + "version": "3.99.1", + "dev": true + }, + "jest-worker": { + "version": "26.6.2", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "jimp": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.14.0", + "@jimp/plugins": "^0.14.0", + "@jimp/types": "^0.14.0", + "regenerator-runtime": "^0.13.3" + } + }, + "jpeg-js": { + "version": "0.4.4", + "dev": true + }, + "js-base64": { + "version": "3.7.2" + }, + "js-string-escape": { + "version": "1.0.1", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "requires": { + "argparse": "^2.0.1" + } + }, + "jsbn": { + "version": "0.1.1", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "dev": true + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "dev": true + }, + "json-schema": { + "version": "0.4.0", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsonparse": { + "version": "1.3.1", + "dev": true + }, + "jsprim": { + "version": "1.4.2", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "dev": true + }, + "extsprintf": { + "version": "1.3.0", + "dev": true + }, + "verror": { + "version": "1.10.0", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + } + } + }, + "karma": { + "version": "6.4.0", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ua-parser-js": { + "version": "0.7.33", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.33.tgz", + "integrity": "sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "dev": true + } + } + }, + "karma-chrome-launcher": { + "version": "3.1.1", + "dev": true, + "requires": { + "which": "^1.2.1" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "karma-coverage-istanbul-reporter": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-3.0.3.tgz", + "integrity": "sha512-wE4VFhG/QZv2Y4CdAYWDbMmcAHeS926ZIji4z+FkB2aF/EposRb6DP6G5ncT/wXhqUfAb/d7kZrNKPonbvsATw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^3.0.6", + "istanbul-reports": "^3.0.2", + "minimatch": "^3.0.4" + } + }, + "karma-jasmine": { + "version": "4.0.2", + "dev": true, + "requires": { + "jasmine-core": "^3.6.0" + } + }, + "karma-webpack": { + "version": "5.0.0", + "dev": true, + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "webpack-merge": "^4.1.5" + }, + "dependencies": { + "webpack-merge": { + "version": "4.2.2", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + } + } + }, + "kew": { + "version": "0.7.0", + "dev": true + }, + "keygrip": { + "version": "1.1.0", + "dev": true, + "requires": { + "tsscmp": "1.0.6" + } + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "kind-of": { + "version": "6.0.3", + "dev": true + }, + "klaw": { + "version": "1.3.1", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "koa": { + "version": "2.13.4", + "dev": true, + "requires": { + "accepts": "^1.3.5", + "cache-content-type": "^1.0.0", + "content-disposition": "~0.5.2", + "content-type": "^1.0.4", + "cookies": "~0.8.0", + "debug": "^4.3.2", + "delegates": "^1.0.0", + "depd": "^2.0.0", + "destroy": "^1.0.4", + "encodeurl": "^1.0.2", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.3.0", + "http-errors": "^1.6.3", + "is-generator-function": "^1.0.7", + "koa-compose": "^4.1.0", + "koa-convert": "^2.0.0", + "on-finished": "^2.3.0", + "only": "~0.0.2", + "parseurl": "^1.3.2", + "statuses": "^1.5.0", + "type-is": "^1.6.16", + "vary": "^1.1.2" + }, + "dependencies": { + "http-errors": { + "version": "1.8.1", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "dev": true + } + } + }, + "statuses": { + "version": "1.5.0", + "dev": true + } + } + }, + "koa-compose": { + "version": "4.1.0", + "dev": true + }, + "koa-convert": { + "version": "2.0.0", + "dev": true, + "requires": { + "co": "^4.6.0", + "koa-compose": "^4.1.0" + } + }, + "koa-etag": { + "version": "4.0.0", + "dev": true, + "requires": { + "etag": "^1.8.1" + } + }, + "koa-send": { + "version": "5.0.1", + "dev": true, + "requires": { + "debug": "^4.1.1", + "http-errors": "^1.7.3", + "resolve-path": "^1.4.0" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "dev": true + }, + "http-errors": { + "version": "1.8.1", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + } + }, + "statuses": { + "version": "1.5.0", + "dev": true + } + } + }, + "koa-static": { + "version": "5.0.0", + "dev": true, + "requires": { + "debug": "^3.1.0", + "koa-send": "^5.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "lazy-val": { + "version": "1.0.5" + }, + "lcid": { + "version": "1.0.0", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "levn": { + "version": "0.4.1", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lit": { + "version": "2.2.8", + "requires": { + "@lit/reactive-element": "^1.3.0", + "lit-element": "^3.2.0", + "lit-html": "^2.2.0" + }, + "dependencies": { + "@lit/reactive-element": { + "version": "1.3.4" + } + } + }, + "lit-element": { + "version": "3.2.2", + "requires": { + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.2.0" + }, + "dependencies": { + "@lit/reactive-element": { + "version": "1.3.4" + } + } + }, + "lit-html": { + "version": "2.2.7", + "requires": { + "@types/trusted-types": "^2.0.2" + } + }, + "load-bmfont": { + "version": "1.4.1", + "dev": true, + "requires": { + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^2.9.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" + }, + "dependencies": { + "buffer-equal": { + "version": "0.0.1", + "dev": true + }, + "mime": { + "version": "1.6.0", + "dev": true + } + } + }, + "load-json-file": { + "version": "1.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "pify": { + "version": "2.3.0", + "dev": true + }, + "strip-bom": { + "version": "2.0.0", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + } + } + }, + "loader-runner": { + "version": "4.3.0", + "dev": true + }, + "loader-utils": { + "version": "2.0.4", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "locate-path": { + "version": "6.0.0", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "dev": true + }, + "lodash.escaperegexp": { + "version": "4.1.2" + }, + "lodash.isequal": { + "version": "4.5.0" + }, + "lodash.memoize": { + "version": "4.1.2", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "dev": true + }, + "log4js": { + "version": "6.6.1", + "dev": true, + "requires": { + "date-format": "^4.0.13", + "debug": "^4.3.4", + "flatted": "^3.2.6", + "rfdc": "^1.3.0", + "streamroller": "^3.1.2" + } + }, + "longest-streak": { + "version": "2.0.4", + "dev": true + }, + "lower-case": { + "version": "2.0.2", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" + }, + "lru-cache": { + "version": "6.0.0", + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "make-fetch-happen": { + "version": "9.1.0", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "dependencies": { + "@tootallnate/once": { + "version": "1.1.2", + "dev": true + }, + "cacache": { + "version": "15.3.0", + "dev": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + } + }, + "chownr": { + "version": "2.0.0", + "dev": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "mkdirp": { + "version": "1.0.4", + "dev": true + }, + "p-map": { + "version": "4.0.0", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ssri": { + "version": "8.0.1", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + } + } + }, + "markdown-escapes": { + "version": "1.0.4", + "dev": true + }, + "markdown-table": { + "version": "2.0.0", + "dev": true, + "requires": { + "repeat-string": "^1.0.0" + } + }, + "matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, + "optional": true, + "requires": { + "escape-string-regexp": "^4.0.0" + } + }, + "md5-file": { + "version": "5.0.0", + "dev": true + }, + "mdast-squeeze-paragraphs": { + "version": "4.0.0", + "dev": true, + "requires": { + "unist-util-remove": "^2.0.0" + } + }, + "mdast-util-definitions": { + "version": "4.0.0", + "dev": true, + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "mdast-util-find-and-replace": { + "version": "1.1.1", + "dev": true, + "requires": { + "escape-string-regexp": "^4.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "mdast-util-from-markdown": { + "version": "0.8.5", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "mdast-util-gfm": { + "version": "0.1.2", + "dev": true, + "requires": { + "mdast-util-gfm-autolink-literal": "^0.1.0", + "mdast-util-gfm-strikethrough": "^0.2.0", + "mdast-util-gfm-table": "^0.1.0", + "mdast-util-gfm-task-list-item": "^0.1.0", + "mdast-util-to-markdown": "^0.6.1" + } + }, + "mdast-util-gfm-autolink-literal": { + "version": "0.1.3", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "mdast-util-find-and-replace": "^1.1.0", + "micromark": "^2.11.3" + } + }, + "mdast-util-gfm-strikethrough": { + "version": "0.2.3", + "dev": true, + "requires": { + "mdast-util-to-markdown": "^0.6.0" + } + }, + "mdast-util-gfm-table": { + "version": "0.1.6", + "dev": true, + "requires": { + "markdown-table": "^2.0.0", + "mdast-util-to-markdown": "~0.6.0" + } + }, + "mdast-util-gfm-task-list-item": { + "version": "0.1.6", + "dev": true, + "requires": { + "mdast-util-to-markdown": "~0.6.0" + } + }, + "mdast-util-to-hast": { + "version": "10.0.1", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "mdast-util-to-markdown": { + "version": "0.6.5", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "longest-streak": "^2.0.0", + "mdast-util-to-string": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.0.0", + "zwitch": "^1.0.0" + } + }, + "mdast-util-to-string": { + "version": "2.0.0", + "dev": true + }, + "mdurl": { + "version": "1.0.1", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "dev": true + }, + "memfs": { + "version": "3.4.7", + "dev": true, + "requires": { + "fs-monkey": "^1.0.3" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "dev": true + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + } + }, + "merge-stream": { + "version": "2.0.0", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "dev": true + }, + "methods": { + "version": "1.1.2", + "dev": true + }, + "micromark": { + "version": "2.11.4", + "dev": true, + "requires": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + } + }, + "micromark-extension-gfm": { + "version": "0.3.3", + "dev": true, + "requires": { + "micromark": "~2.11.0", + "micromark-extension-gfm-autolink-literal": "~0.5.0", + "micromark-extension-gfm-strikethrough": "~0.6.5", + "micromark-extension-gfm-table": "~0.4.0", + "micromark-extension-gfm-tagfilter": "~0.3.0", + "micromark-extension-gfm-task-list-item": "~0.3.0" + } + }, + "micromark-extension-gfm-autolink-literal": { + "version": "0.5.7", + "dev": true, + "requires": { + "micromark": "~2.11.3" + } + }, + "micromark-extension-gfm-strikethrough": { + "version": "0.6.5", + "dev": true, + "requires": { + "micromark": "~2.11.0" + } + }, + "micromark-extension-gfm-table": { + "version": "0.4.3", + "dev": true, + "requires": { + "micromark": "~2.11.0" + } + }, + "micromark-extension-gfm-tagfilter": { + "version": "0.3.0", + "dev": true + }, + "micromark-extension-gfm-task-list-item": { + "version": "0.3.3", + "dev": true, + "requires": { + "micromark": "~2.11.0" + } + }, + "micromatch": { + "version": "4.0.5", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "2.6.0", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "dev": true + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "min-document": { + "version": "2.19.0", + "dev": true, + "requires": { + "dom-walk": "^0.1.0" + } + }, + "mini-svg-data-uri": { + "version": "1.4.4", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6" + }, + "minipass": { + "version": "3.3.4", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "1.4.1", + "dev": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "dev": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mississippi": { + "version": "3.0.0", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mkdirp": { + "version": "0.5.6", + "requires": { + "minimist": "^1.2.6" + } + }, + "mkdirp-classic": { + "version": "0.5.3", + "dev": true + }, + "move-concurrently": { + "version": "1.0.1", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "mri": { + "version": "1.2.0", + "dev": true + }, + "ms": { + "version": "2.1.2" + }, + "multicast-dns": { + "version": "7.2.5", + "dev": true, + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + } + }, + "multimatch": { + "version": "4.0.0", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + } + }, + "mute-stream": { + "version": "0.0.8", + "dev": true + }, + "nanocolors": { + "version": "0.2.13", + "dev": true + }, + "nanoid": { + "version": "3.3.4", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "dev": true + }, + "no-case": { + "version": "3.0.4", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "dev": true, + "optional": true + }, + "node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true + }, + "node-fetch": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.0.tgz", + "integrity": "sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==", + "dev": true, + "requires": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + } + }, + "node-forge": { + "version": "1.3.1", + "dev": true + }, + "node-gyp": { + "version": "7.1.2", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "node-releases": { + "version": "2.0.6" + }, + "nopt": { + "version": "5.0.0", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "3.0.3", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "normalize-path": { + "version": "3.0.0", + "dev": true + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true + }, + "npm-bundled": { + "version": "1.1.2", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "dev": true, + "optional": true, + "requires": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "optional": true + } + } + }, + "npm-install-checks": { + "version": "4.0.0", + "dev": true, + "requires": { + "semver": "^7.1.1" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "dev": true + }, + "npm-package-arg": { + "version": "8.1.5", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "npm-packlist": { + "version": "2.2.2", + "dev": true, + "requires": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "6.1.1", + "dev": true, + "requires": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "npm-registry-fetch": { + "version": "11.0.0", + "dev": true, + "requires": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + }, + "npm-run-path": { + "version": "4.0.1", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "nth-check": { + "version": "2.1.1", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "dev": true + }, + "object-inspect": { + "version": "1.12.2", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "dev": true + }, + "object.assign": { + "version": "4.1.3", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.values": { + "version": "1.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "objectorarray": { + "version": "1.0.5", + "dev": true + }, + "obuf": { + "version": "1.1.2", + "dev": true + }, + "omggif": { + "version": "1.0.10", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "dev": true + }, + "once": { + "version": "1.4.0", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "only": { + "version": "0.0.2", + "dev": true + }, + "open": { + "version": "8.4.0", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "opn": { + "version": "5.5.0", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + }, + "dependencies": { + "is-wsl": { + "version": "1.1.0", + "dev": true + } + } + }, + "optionator": { + "version": "0.9.1", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "os-homedir": { + "version": "1.0.2", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "outline-i18n": { + "version": "git+ssh://git@github.com/Jigsaw-Code/outline-i18n.git#4642c3657074246b8eca09486941434718f66608", + "dev": true, + "from": "outline-i18n@Jigsaw-Code/outline-i18n#v0.0.7" + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + } + } + }, + "p-map": { + "version": "1.2.0", + "dev": true + }, + "p-retry": { + "version": "4.6.2", + "dev": true, + "requires": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "dependencies": { + "retry": { + "version": "0.13.1", + "dev": true + } + } + }, + "p-try": { + "version": "2.2.0", + "dev": true + }, + "pacote": { + "version": "11.3.5", + "dev": true, + "requires": { + "@npmcli/git": "^2.1.0", + "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.8.2", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^11.0.0", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^2.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.0" + }, + "dependencies": { + "cacache": { + "version": "15.3.0", + "dev": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + } + }, + "chownr": { + "version": "2.0.0", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "dev": true + }, + "p-map": { + "version": "4.0.0", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ssri": { + "version": "8.0.1", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + } + } + }, + "pako": { + "version": "1.0.11", + "dev": true + }, + "parallel-transform": { + "version": "1.2.0", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "param-case": { + "version": "3.0.4", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parent-module": { + "version": "1.0.1", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-bmfont-ascii": { + "version": "1.0.6", + "dev": true + }, + "parse-bmfont-binary": { + "version": "1.0.6", + "dev": true + }, + "parse-bmfont-xml": { + "version": "1.1.4", + "dev": true, + "requires": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.4.5" + } + }, + "parse-entities": { + "version": "2.0.0", + "dev": true, + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "parse-headers": { + "version": "2.0.5", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse5": { + "version": "6.0.1", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "dev": true + }, + "pascal-case": { + "version": "3.1.2", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "path-dirname": { + "version": "1.0.2", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1" + }, + "path-is-inside": { + "version": "1.0.2", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "dev": true + }, + "pend": { + "version": "1.2.0", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "dev": true + }, + "phantomjs-prebuilt": { + "version": "2.1.16", + "dev": true, + "requires": { + "es6-promise": "^4.0.3", + "extract-zip": "^1.6.5", + "fs-extra": "^1.0.0", + "hasha": "^2.2.0", + "kew": "^0.7.0", + "progress": "^1.1.8", + "request": "^2.81.0", + "request-progress": "^2.0.1", + "which": "^1.2.10" + }, + "dependencies": { + "fs-extra": { + "version": "1.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" + } + }, + "jsonfile": { + "version": "2.4.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "progress": { + "version": "1.1.8", + "dev": true + }, + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "phin": { + "version": "2.9.3", + "dev": true + }, + "picocolors": { + "version": "0.2.1", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "dev": true + }, + "pify": { + "version": "5.0.0", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pixelmatch": { + "version": "4.0.2", + "dev": true, + "requires": { + "pngjs": "^3.0.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, + "pkginfo": { + "version": "0.4.0", + "dev": true + }, + "please-upgrade-node": { + "version": "3.2.0", + "dev": true, + "requires": { + "semver-compare": "^1.0.0" + } + }, + "plist": { + "version": "3.0.6", + "dev": true, + "requires": { + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + } + }, + "plugins-manager": { + "version": "0.3.1", + "dev": true + }, + "pn": { + "version": "1.1.0", + "dev": true + }, + "pngjs": { + "version": "3.4.0", + "dev": true + }, + "pngjs-nozlib": { + "version": "1.0.0", + "dev": true + }, + "portfinder": { + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", + "dev": true, + "requires": { + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" + }, + "dependencies": { + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "postcss": { + "version": "7.0.39", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-rtl": { + "version": "1.7.3", + "dev": true, + "requires": { + "rtlcss": "2.5.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.10", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "dev": true + }, + "prettier": { + "version": "1.19.1", + "dev": true + }, + "pretty-error": { + "version": "4.0.0", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "pretty-quick": { + "version": "2.0.2", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "execa": "^2.1.0", + "find-up": "^4.1.0", + "ignore": "^5.1.4", + "mri": "^1.1.4", + "multimatch": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + }, + "execa": { + "version": "2.1.0", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^3.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "npm-run-path": { + "version": "3.1.0", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "p-finally": { + "version": "2.0.1", + "dev": true + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "prismjs": { + "version": "1.28.0", + "dev": true + }, + "process": { + "version": "0.11.10", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "dev": true + }, + "progress": { + "version": "2.0.3", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "dev": true + }, + "promise-retry": { + "version": "2.0.1", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "promzard": { + "version": "0.3.0", + "dev": true, + "requires": { + "read": "1" + } + }, + "properties-parser": { + "version": "0.3.1", + "dev": true, + "requires": { + "string.prototype.codepointat": "^0.2.0" + } + }, + "property-information": { + "version": "5.6.0", + "dev": true, + "requires": { + "xtend": "^4.0.0" + } + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true, + "optional": true + }, + "proxy-addr": { + "version": "2.0.7", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "proxy-from-env": { + "version": "1.1.0", + "dev": true + }, + "psl": { + "version": "1.9.0", + "dev": true + }, + "pump": { + "version": "3.0.0", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "1.4.1" + }, + "puppeteer": { + "version": "13.7.0", + "dev": true, + "requires": { + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.981744", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "pkg-dir": "4.2.0", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.5.0" + }, + "dependencies": { + "extract-zip": { + "version": "2.0.1", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + } + }, + "get-stream": { + "version": "5.2.0", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ws": { + "version": "8.5.0", + "dev": true, + "requires": {} + } + } + }, + "q": { + "version": "1.5.1", + "dev": true + }, + "qjobs": { + "version": "1.2.0", + "dev": true + }, + "qs": { + "version": "6.10.3", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "querystring": { + "version": "0.2.0", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "dev": true + }, + "raw-body": { + "version": "2.5.1", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "read": { + "version": "1.0.7", + "dev": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-chunk": { + "version": "3.2.0", + "dev": true, + "requires": { + "pify": "^4.0.1", + "with-open-file": "^0.1.6" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "dev": true + } + } + }, + "read-config-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.2.0.tgz", + "integrity": "sha512-gx7Pgr5I56JtYz+WuqEbQHj/xWo+5Vwua2jhb1VwM4Wid5PqYmZ4i00ZB0YEGIfkVBsCv9UrjgyqCiQfS/Oosg==", + "dev": true, + "requires": { + "dotenv": "^9.0.2", + "dotenv-expand": "^5.1.0", + "js-yaml": "^4.1.0", + "json5": "^2.2.0", + "lazy-val": "^1.0.4" + } + }, + "read-package-json": { + "version": "4.1.2", + "dev": true, + "requires": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^3.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + }, + "read-package-json-fast": { + "version": "2.0.3", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "read-pkg": { + "version": "4.0.1", + "dev": true, + "requires": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "pify": { + "version": "3.0.0", + "dev": true + }, + "semver": { + "version": "5.7.1", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "1.0.1", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.9", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "path-exists": { + "version": "2.1.0", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "semver": { + "version": "5.7.1", + "dev": true + } + } + }, + "readable-stream": { + "version": "2.3.7", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.7.1", + "dev": true, + "requires": { + "resolve": "^1.9.0" + } + }, + "reduce-flatten": { + "version": "2.0.0", + "dev": true + }, + "regenerate": { + "version": "1.4.2", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.0.1", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "dev": true + }, + "regexpu-core": { + "version": "5.1.0", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + } + }, + "regjsgen": { + "version": "0.6.0", + "dev": true + }, + "regjsparser": { + "version": "0.8.4", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "dev": true + } + } + }, + "rehype-autolink-headings": { + "version": "5.1.0", + "dev": true, + "requires": { + "extend": "^3.0.0", + "hast-util-has-property": "^1.0.0", + "hast-util-heading-rank": "^1.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "rehype-parse": { + "version": "7.0.1", + "dev": true, + "requires": { + "hast-util-from-parse5": "^6.0.0", + "parse5": "^6.0.0" + } + }, + "rehype-prism": { + "version": "1.0.2", + "dev": true, + "requires": { + "@types/node": "^14.14.31", + "@types/prismjs": "^1.16.6", + "prismjs": "^1.24.1", + "rehype-parse": "^7.0.1", + "unist-util-is": "^4.1.0", + "unist-util-select": "^4.0.0", + "unist-util-visit": "^3.1.0" + }, + "dependencies": { + "unist-util-visit": { + "version": "3.1.0", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^4.0.0" + }, + "dependencies": { + "unist-util-is": { + "version": "5.1.1", + "dev": true + } + } + }, + "unist-util-visit-parents": { + "version": "4.1.1", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "dependencies": { + "unist-util-is": { + "version": "5.1.1", + "dev": true + } + } + } + } + }, + "rehype-raw": { + "version": "5.1.0", + "dev": true, + "requires": { + "hast-util-raw": "^6.1.0" + }, + "dependencies": { + "hast-util-raw": { + "version": "6.1.0", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + } + } + } + }, + "rehype-slug": { + "version": "4.0.1", + "dev": true, + "requires": { + "github-slugger": "^1.1.1", + "hast-util-has-property": "^1.0.0", + "hast-util-heading-rank": "^1.0.0", + "hast-util-to-string": "^1.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "rehype-stringify": { + "version": "8.0.0", + "dev": true, + "requires": { + "hast-util-to-html": "^7.1.1" + } + }, + "relateurl": { + "version": "0.2.7", + "dev": true + }, + "remark": { + "version": "13.0.0", + "dev": true, + "requires": { + "remark-parse": "^9.0.0", + "remark-stringify": "^9.0.0", + "unified": "^9.1.0" + }, + "dependencies": { + "remark-parse": { + "version": "9.0.0", + "dev": true, + "requires": { + "mdast-util-from-markdown": "^0.8.0" + } + } + } + }, + "remark-footnotes": { + "version": "2.0.0", + "dev": true + }, + "remark-gfm": { + "version": "1.0.0", + "dev": true, + "requires": { + "mdast-util-gfm": "^0.1.0", + "micromark-extension-gfm": "^0.3.0" + } + }, + "remark-html": { + "version": "13.0.2", + "dev": true, + "requires": { + "hast-util-sanitize": "^3.0.0", + "hast-util-to-html": "^7.0.0", + "mdast-util-to-hast": "^10.0.0" + } + }, + "remark-mdx": { + "version": "1.6.22", + "dev": true, + "requires": { + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "dependencies": { + "@babel/core": { + "version": "7.12.9", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "dev": true + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + } + }, + "semver": { + "version": "5.7.1", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "dev": true + } + } + }, + "remark-parse": { + "version": "8.0.3", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + } + }, + "remark-rehype": { + "version": "8.1.0", + "dev": true, + "requires": { + "mdast-util-to-hast": "^10.2.0" + }, + "dependencies": { + "mdast-util-to-hast": { + "version": "10.2.0", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + } + } + } + }, + "remark-slug": { + "version": "6.1.0", + "dev": true, + "requires": { + "github-slugger": "^1.0.0", + "mdast-util-to-string": "^1.0.0", + "unist-util-visit": "^2.0.0" + }, + "dependencies": { + "mdast-util-to-string": { + "version": "1.1.0", + "dev": true + } + } + }, + "remark-squeeze-paragraphs": { + "version": "4.0.0", + "dev": true, + "requires": { + "mdast-squeeze-paragraphs": "^4.0.0" + } + }, + "remark-stringify": { + "version": "9.0.1", + "dev": true, + "requires": { + "mdast-util-to-markdown": "^0.6.0" + } + }, + "renderkid": { + "version": "3.0.0", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "repeat-string": { + "version": "1.6.1", + "dev": true + }, + "replace-in-file": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-6.3.5.tgz", + "integrity": "sha512-arB9d3ENdKva2fxRnSjwBEXfK1npgyci7ZZuwysgAp7ORjHSyxz6oqIjTEv8R0Ydl4Ll7uOAZXL4vbkhGIizCg==", + "dev": true, + "requires": { + "chalk": "^4.1.2", + "glob": "^7.2.0", + "yargs": "^17.2.1" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "request": { + "version": "2.88.2", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "form-data": { + "version": "2.3.3", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "qs": { + "version": "6.5.3", + "dev": true + } + } + }, + "request-progress": { + "version": "2.0.1", + "dev": true, + "requires": { + "throttleit": "^1.0.0" + } + }, + "require-directory": { + "version": "2.1.1", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "dev": true + }, + "resize-observer-polyfill": { + "version": "1.5.1", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "dev": true + } + } + }, + "resolve-from": { + "version": "4.0.0", + "dev": true + }, + "resolve-path": { + "version": "1.4.0", + "dev": true, + "requires": { + "http-errors": "~1.6.2", + "path-is-absolute": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "dev": true + } + } + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "retry": { + "version": "0.12.0", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rmfr": { + "version": "2.0.0", + "dev": true, + "requires": { + "assert-valid-glob-opts": "^1.0.0", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "inspect-with-kind": "^1.0.4", + "rimraf": "^2.6.2" + } + }, + "roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dev": true, + "optional": true, + "requires": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + } + }, + "rollup": { + "version": "2.77.3", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-terser": { + "version": "7.0.2", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + } + }, + "rtlcss": { + "version": "2.5.0", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "findup": "^0.1.5", + "mkdirp": "^0.5.1", + "postcss": "^6.0.23", + "strip-json-comments": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "postcss": { + "version": "6.0.23", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "run-node": { + "version": "1.0.0", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "run-queue": { + "version": "1.0.3", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "rxjs": { + "version": "7.5.6", + "optional": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "dev": true + }, + "sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "dev": true, + "requires": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "sax": { + "version": "1.2.4" + }, + "schema-utils": { + "version": "2.7.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "select-hose": { + "version": "2.0.0", + "dev": true + }, + "selfsigned": { + "version": "2.0.1", + "dev": true, + "requires": { + "node-forge": "^1" + } + }, + "semver": { + "version": "6.3.0", + "dev": true + }, + "semver-compare": { + "version": "1.0.0", + "dev": true + }, + "send": { + "version": "0.18.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "dev": true + }, + "ms": { + "version": "2.1.3", + "dev": true + } + } + }, + "serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "optional": true, + "requires": { + "type-fest": "^0.13.1" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "dev": true + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "dev": true + }, + "ShadowsocksConfig": { + "version": "git+ssh://git@github.com/Jigsaw-Code/outline-shadowsocksconfig.git#6d01c4b1beae3a3bc2a1074e5e310dfa023be57d", + "from": "ShadowsocksConfig@github:Jigsaw-Code/outline-shadowsocksconfig#v0.2.1", + "requires": { + "ipaddr.js": "^2.0.0", + "js-base64": "^3.5.2", + "punycode": "^1.4.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "2.0.1" + } + } + }, + "shady-css-scoped-element": { + "version": "0.0.2", + "dev": true + }, + "shallow-clone": { + "version": "3.0.1", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "dev": true + }, + "shelljs": { + "version": "0.5.3", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "dev": true + }, + "simctl": { + "version": "2.0.3", + "dev": true, + "requires": { + "shelljs": "^0.8.5", + "tail": "^0.4.0" + }, + "dependencies": { + "interpret": { + "version": "1.4.0", + "dev": true + }, + "rechoir": { + "version": "0.6.2", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "shelljs": { + "version": "0.8.5", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + } + } + }, + "simple-plist": { + "version": "1.3.1", + "dev": true, + "requires": { + "bplist-creator": "0.1.0", + "bplist-parser": "0.3.1", + "plist": "^3.0.5" + }, + "dependencies": { + "bplist-parser": { + "version": "0.3.1", + "dev": true, + "requires": { + "big-integer": "1.6.x" + } + } + } + }, + "simple-update-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dev": true, + "requires": { + "semver": "~7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "slash": { + "version": "3.0.0", + "dev": true + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "smart-buffer": { + "version": "4.2.0", + "dev": true + }, + "socket.io": { + "version": "4.5.1", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.2.0", + "socket.io-adapter": "~2.4.0", + "socket.io-parser": "~4.0.4" + } + }, + "socket.io-adapter": { + "version": "2.4.0", + "dev": true + }, + "socket.io-parser": { + "version": "4.0.5", + "dev": true, + "requires": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + } + }, + "sockjs": { + "version": "0.3.24", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "dev": true + } + } + }, + "socks": { + "version": "1.1.10", + "requires": { + "ip": "^1.1.4", + "smart-buffer": "^1.0.13" + }, + "dependencies": { + "smart-buffer": { + "version": "1.1.15" + } + } + }, + "socks-proxy-agent": { + "version": "6.2.1", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "dependencies": { + "ip": { + "version": "2.0.0", + "dev": true + }, + "socks": { + "version": "2.7.0", + "dev": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + } + } + }, + "source-map": { + "version": "0.6.1", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "space-separated-tokens": { + "version": "1.1.5", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true, + "optional": true + }, + "sshpk": { + "version": "1.17.0", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "6.0.2", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "stat-mode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", + "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", + "dev": true + }, + "state-toggle": { + "version": "1.0.3", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "dev": true + }, + "storybook-addon-markdown-docs": { + "version": "1.0.5", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/core": "^7.17.5", + "@babel/generator": "^7.17.3", + "@babel/parser": "^7.17.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-transform-react-jsx": "^7.17.3", + "@mdjs/core": "^0.9.2", + "@mdx-js/mdx": "^1.6.22", + "detab": "^2.0.4", + "mdurl": "^1.0.1", + "remark-html": "^13.0.2", + "remark-parse": "^9.0.0", + "remark-slug": "^6.1.0", + "unified": "^9.2.2", + "unist-builder": "^2.0.3", + "unist-util-visit-parents": "^3.1.1" + }, + "dependencies": { + "remark-parse": { + "version": "9.0.0", + "dev": true, + "requires": { + "mdast-util-from-markdown": "^0.8.0" + } + }, + "unified": { + "version": "9.2.2", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + } + } + }, + "stream-buffers": { + "version": "2.2.0", + "dev": true + }, + "stream-each": { + "version": "1.2.3", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-shift": { + "version": "1.0.1", + "dev": true + }, + "streamroller": { + "version": "3.1.2", + "dev": true, + "requires": { + "date-format": "^4.0.13", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "universalify": { + "version": "0.1.2", + "dev": true + } + } + }, + "string_decoder": { + "version": "1.1.1", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-similarity": { + "version": "1.1.0", + "dev": true, + "requires": { + "lodash": "^4.13.1" + } + }, + "string-width": { + "version": "4.2.3", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.codepointat": { + "version": "0.2.1", + "dev": true + }, + "string.prototype.trimend": { + "version": "1.0.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "stringify-entities": { + "version": "3.1.0", + "dev": true, + "requires": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stringify-package": { + "version": "1.0.1", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "4.0.0", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "dev": true + }, + "style-loader": { + "version": "2.0.0", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "style-to-object": { + "version": "0.3.0", + "dev": true, + "requires": { + "inline-style-parser": "0.1.1" + } + }, + "sudo-prompt": { + "version": "9.2.1" + }, + "sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "dev": true, + "requires": { + "debug": "^4.1.0" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true + }, + "svg2png": { + "version": "4.1.1", + "dev": true, + "requires": { + "file-url": "^2.0.0", + "phantomjs-prebuilt": "^2.1.14", + "pn": "^1.0.0", + "yargs": "^6.5.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "dev": true + }, + "camelcase": { + "version": "3.0.0", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "y18n": { + "version": "3.2.2", + "dev": true + }, + "yargs": { + "version": "6.6.0", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.2.0" + } + }, + "yargs-parser": { + "version": "4.2.1", + "dev": true, + "requires": { + "camelcase": "^3.0.0" + } + } + } + }, + "synckit": { + "version": "0.8.3", + "dev": true, + "requires": { + "@pkgr/utils": "^2.3.0", + "tslib": "^2.4.0" + } + }, + "systemjs": { + "version": "6.12.2", + "dev": true + }, + "table-layout": { + "version": "1.0.2", + "dev": true, + "requires": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "dependencies": { + "array-back": { + "version": "4.0.2", + "dev": true + }, + "typical": { + "version": "5.2.0", + "dev": true + } + } + }, + "tail": { + "version": "0.4.0", + "dev": true + }, + "tapable": { + "version": "2.2.1", + "dev": true + }, + "tar": { + "version": "6.1.11", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "dev": true + } + } + }, + "tar-fs": { + "version": "2.1.1", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "temp-file": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", + "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", + "dev": true, + "requires": { + "async-exit-hook": "^2.0.1", + "fs-extra": "^10.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "terser": { + "version": "5.14.2", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.3", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.7", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.7.2" + }, + "dependencies": { + "jest-worker": { + "version": "27.5.1", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "schema-utils": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "serialize-javascript": { + "version": "6.0.0", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "supports-color": { + "version": "8.1.1", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "dev": true + }, + "throttleit": { + "version": "1.0.0", + "dev": true + }, + "through": { + "version": "2.3.8", + "dev": true + }, + "through2": { + "version": "2.0.5", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "thunky": { + "version": "1.1.0", + "dev": true + }, + "timm": { + "version": "1.7.1", + "dev": true + }, + "tiny-glob": { + "version": "0.2.9", + "dev": true, + "requires": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, + "tinycolor2": { + "version": "1.4.2", + "dev": true + }, + "tmp": { + "version": "0.2.1", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "dev": true, + "requires": { + "tmp": "^0.2.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "dev": true + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "dev": true + } + } + }, + "tr46": { + "version": "3.0.0", + "dev": true, + "requires": { + "punycode": "^2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "dev": true + } + } + }, + "trim": { + "version": "0.0.1", + "dev": true + }, + "trim-trailing-lines": { + "version": "1.1.4", + "dev": true + }, + "trough": { + "version": "1.0.5", + "dev": true + }, + "truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "dev": true, + "requires": { + "utf8-byte-length": "^1.0.1" + } + }, + "ts-dedent": { + "version": "2.2.0", + "dev": true + }, + "ts-loader": { + "version": "9.3.1", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "tsconfig-paths": { + "version": "3.14.1", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "dev": true + } + } + }, + "tslib": { + "version": "2.4.0" + }, + "tsscmp": { + "version": "1.0.6", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "dev": true + } + } + }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "optional": true + }, + "tunnel-agent": { + "version": "0.6.0", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "optional": true + }, + "type-is": { + "version": "1.6.18", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typed-emitter": { + "version": "2.1.0", + "requires": { + "rxjs": "*" + } + }, + "typedarray": { + "version": "0.0.6", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.7.4", + "dev": true + }, + "typical": { + "version": "4.0.0", + "dev": true + }, + "ua-parser-js": { + "version": "1.0.33", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.33.tgz", + "integrity": "sha512-RqshF7TPTE0XLYAqmjlu5cLLuGdKrNu9O1KLA/qp39QtbZwuzwv1dT46DZSopoUMsYgXpB3Cv8a03FI8b74oFQ==", + "dev": true + }, + "uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true + }, + "unbox-primitive": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "unbzip2-stream": { + "version": "1.4.3", + "dev": true, + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "underscore": { + "version": "1.13.4", + "dev": true + }, + "unherit": { + "version": "1.1.3", + "dev": true, + "requires": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "dev": true + }, + "unified": { + "version": "9.2.0", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + }, + "unique-filename": { + "version": "1.1.1", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unist-builder": { + "version": "2.0.3", + "dev": true + }, + "unist-util-generated": { + "version": "1.1.6", + "dev": true + }, + "unist-util-is": { + "version": "4.1.0", + "dev": true + }, + "unist-util-position": { + "version": "3.1.0", + "dev": true + }, + "unist-util-remove": { + "version": "2.1.0", + "dev": true, + "requires": { + "unist-util-is": "^4.0.0" + } + }, + "unist-util-remove-position": { + "version": "2.0.1", + "dev": true, + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "unist-util-select": { + "version": "4.0.1", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "css-selector-parser": "^1.0.0", + "nth-check": "^2.0.0", + "unist-util-is": "^5.0.0", + "zwitch": "^2.0.0" + }, + "dependencies": { + "unist-util-is": { + "version": "5.1.1", + "dev": true + }, + "zwitch": { + "version": "2.0.2", + "dev": true + } + } + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "dev": true, + "requires": { + "@types/unist": "^2.0.2" + } + }, + "unist-util-visit": { + "version": "2.0.3", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + }, + "universalify": { + "version": "2.0.0" + }, + "unorm": { + "version": "1.6.0", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "dev": true + }, + "untildify": { + "version": "3.0.3" + }, + "update-browserslist-db": { + "version": "1.0.5", + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "dependencies": { + "picocolors": { + "version": "1.0.0" + } + } + }, + "uri-js": { + "version": "4.4.1", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "dev": true + } + } + }, + "url": { + "version": "0.11.0", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "dev": true + } + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==", + "dev": true + }, + "utif": { + "version": "2.0.1", + "dev": true, + "requires": { + "pako": "^1.0.5" + } + }, + "util-deprecate": { + "version": "1.0.2", + "dev": true + }, + "utila": { + "version": "0.4.0", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "dev": true + }, + "uuidv4": { + "version": "4.0.0", + "requires": { + "uuid": "3.3.2" + }, + "dependencies": { + "uuid": { + "version": "3.3.2" + } + } + }, + "v8-compile-cache": { + "version": "2.3.0", + "dev": true + }, + "validate-glob-opts": { + "version": "1.0.2", + "dev": true, + "requires": { + "array-to-sentence": "^1.1.0", + "indexed-filter": "^1.0.0", + "inspect-with-kind": "^1.0.4", + "is-plain-obj": "^1.1.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "dev": true + } + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "vary": { + "version": "1.1.2", + "dev": true + }, + "verror": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, + "optional": true + } + } + }, + "vfile": { + "version": "4.2.1", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "vfile-location": { + "version": "3.2.0", + "dev": true + }, + "vfile-message": { + "version": "2.0.4", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "void-elements": { + "version": "2.0.1", + "dev": true + }, + "watchpack": { + "version": "2.4.0", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "web-animations-js": { + "version": "2.3.2" + }, + "web-namespaces": { + "version": "1.1.4", + "dev": true + }, + "web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "dev": true + }, + "webidl-conversions": { + "version": "7.0.0", + "dev": true + }, + "webpack": { + "version": "5.74.0", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.51", + "dev": true + }, + "es-module-lexer": { + "version": "0.9.3", + "dev": true + }, + "schema-utils": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "webpack-cli": { + "version": "4.10.0", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "dev": true + } + } + }, + "webpack-dev-middleware": { + "version": "5.3.3", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "dev": true + }, + "schema-utils": { + "version": "4.0.0", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "webpack-dev-server": { + "version": "4.10.0", + "dev": true, + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "dependencies": { + "@types/ws": { + "version": "8.5.3", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "ajv": { + "version": "8.11.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "ipaddr.js": { + "version": "2.0.1", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "schema-utils": { + "version": "4.0.0", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, + "ws": { + "version": "8.8.1", + "dev": true, + "requires": {} + } + } + }, + "webpack-log": { + "version": "2.0.0", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "webpack-merge": { + "version": "5.8.0", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-shell-plugin-next": { + "version": "2.2.2", + "dev": true, + "requires": {} + }, + "webpack-sources": { + "version": "3.2.3", + "dev": true + }, + "websocket-driver": { + "version": "0.7.4", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "dev": true + }, + "whatwg-fetch": { + "version": "3.6.2", + "dev": true + }, + "whatwg-url": { + "version": "11.0.0", + "dev": true, + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + }, + "which": { + "version": "2.0.2", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-module": { + "version": "1.0.0", + "dev": true + }, + "wide-align": { + "version": "1.1.5", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "wildcard": { + "version": "2.0.0", + "dev": true + }, + "winreg": { + "version": "1.2.4" + }, + "with-open-file": { + "version": "0.1.7", + "dev": true, + "requires": { + "p-finally": "^1.0.0", + "p-try": "^2.1.0", + "pify": "^4.0.1" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "dev": true + } + } + }, + "word-wrap": { + "version": "1.2.3", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "wordwrapjs": { + "version": "4.0.1", + "dev": true, + "requires": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "dependencies": { + "typical": { + "version": "5.2.0", + "dev": true + } + } + }, + "wrap-ansi": { + "version": "7.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "dev": true + }, + "write-file-atomic": { + "version": "3.0.3", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.5.9", + "dev": true, + "requires": {} + }, + "xcode": { + "version": "3.0.1", + "dev": true, + "requires": { + "simple-plist": "^1.1.0", + "uuid": "^7.0.3" + }, + "dependencies": { + "uuid": { + "version": "7.0.3", + "dev": true + } + } + }, + "xhr": { + "version": "2.6.0", + "dev": true, + "requires": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "xml-escape": { + "version": "1.1.0", + "dev": true + }, + "xml-parse-from-string": { + "version": "1.0.1", + "dev": true + }, + "xml2js": { + "version": "0.4.23", + "dev": true, + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "dependencies": { + "xmlbuilder": { + "version": "11.0.1", + "dev": true + } + } + }, + "xmlbuilder": { + "version": "15.1.1", + "dev": true + }, + "xmlbuilder2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder2/-/xmlbuilder2-3.1.1.tgz", + "integrity": "sha512-WCSfbfZnQDdLQLiMdGUQpMxxckeQ4oZNMNhLVkcekTu7xhD4tuUDyAPoY8CwXvBYE6LwBHd6QW2WZXlOWr1vCw==", + "dev": true, + "requires": { + "@oozcitak/dom": "1.15.10", + "@oozcitak/infra": "1.0.8", + "@oozcitak/util": "8.3.8", + "js-yaml": "3.14.1" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + } + } + }, + "xtend": { + "version": "4.0.2", + "dev": true + }, + "y18n": { + "version": "4.0.3", + "dev": true + }, + "yallist": { + "version": "4.0.0" + }, + "yargs": { + "version": "17.5.1", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "dependencies": { + "y18n": { + "version": "5.0.8", + "dev": true + } + } + }, + "yargs-parser": { + "version": "21.1.1", + "dev": true + }, + "yauzl": { + "version": "2.10.0", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "ylru": { + "version": "1.3.2", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "dev": true + }, + "zwitch": { + "version": "1.0.5", + "dev": true + } + } +} diff --git a/outline_client/package.json b/outline_client/package.json new file mode 100644 index 0000000000..24205ba6a6 --- /dev/null +++ b/outline_client/package.json @@ -0,0 +1,159 @@ +{ + "name": "outline-client", + "version": "0.0.0", + "productName": "Outline", + "scripts": { + "clean": "rimraf output node_modules www platforms plugins third_party/jsign/*.jar", + "format:all": "prettier --write \"**/*.{cjs,mjs,html,js,json,md,ts}\"", + "format": "pretty-quick --staged --pattern \"**/*.{cjs,mjs,html,js,json,md,ts}\"", + "lint:ts": "eslint --ext ts,mjs src", + "lint": "npm run lint:ts", + "reset": "npm run clean && npm ci" + }, + "comments": { + "version": "The 'version' in this file is just a placeholder for 'npx generate-license-file', please do not change it.", + "codrova-osx": "Version-controlled platform config files at src/cordova/apple/xcode/osx/Outline/config.xml, src/cordova/apple/xcode/osx/osx.json, and src/cordova/apple/xcode/osx/www/cordova_plugins.js as a workaround for https://github.com/apache/cordova-osx/issues/106. Delete these files when the issue is fixed." + }, + "dependencies": { + "@material/mwc-button": "^0.25.3", + "@material/mwc-icon-button": "^0.25.3", + "@material/mwc-menu": "^0.25.3", + "@polymer/app-layout": "^3.1.0", + "@polymer/app-localize-behavior": "^3.0.1", + "@polymer/app-route": "^3.0.2", + "@polymer/decorators": "^3.0.0", + "@polymer/font-roboto": "^3.0.2", + "@polymer/iron-icons": "^3.0.1", + "@polymer/iron-iconset-svg": "^3.0.1", + "@polymer/iron-pages": "^3.0.1", + "@polymer/paper-behaviors": "^3.0.1", + "@polymer/paper-button": "^3.0.1", + "@polymer/paper-card": "^3.0.1", + "@polymer/paper-dialog": "^3.0.1", + "@polymer/paper-dropdown-menu": "^3.1.0", + "@polymer/paper-icon-button": "^3.0.2", + "@polymer/paper-input": "^3.2.1", + "@polymer/paper-item": "^3.0.1", + "@polymer/paper-listbox": "^3.0.1", + "@polymer/paper-menu-button": "^3.0.1", + "@polymer/paper-ripple": "^3.0.2", + "@polymer/paper-styles": "^3.0.1", + "@polymer/paper-toast": "^3.0.1", + "@sentry/browser": "^7.31.1", + "@sentry/electron": "^4.2.0", + "@webcomponents/webcomponentsjs": "^2.4.4", + "auto-launch": "^5.0.5", + "browserslist": "^4.20.3", + "cordova-plugin-splashscreen": "^6.0.0", + "cordova-plugin-statusbar": "^2.2.3", + "electron-updater": "^5.0.5", + "lit": "^2.2.2", + "ShadowsocksConfig": "github:Jigsaw-Code/outline-shadowsocksconfig#v0.2.1", + "socks": "^1.1.10", + "sudo-prompt": "^9.2.1", + "uuidv4": "^4.0.0", + "web-animations-js": "^2.3.2" + }, + "engines": { + "node": "^18.16.0", + "npm": "^9.5.1" + }, + "devDependencies": { + "@babel/core": "^7.12.10", + "@babel/polyfill": "^7.12.1", + "@babel/preset-env": "^7.12.11", + "@commitlint/config-conventional": "^16.2.4", + "@jsdevtools/coverage-istanbul-loader": "^3.0.5", + "@rollup/plugin-image": "^2.1.1", + "@types/auto-launch": "^5.0.0", + "@types/cordova": "^0.0.34", + "@types/jasmine": "^2.8.6", + "@types/node": "^14.14.7", + "@types/polymer": "^1.2.9", + "@types/uuidv4": "^2.0.0", + "@typescript-eslint/eslint-plugin": "^5.32.0", + "@typescript-eslint/parser": "^5.32.0", + "@web/dev-server": "^0.1.35", + "@web/dev-server-esbuild": "^0.3.3", + "@web/dev-server-storybook": "^0.5.4", + "babel-loader": "^8.2.2", + "chalk": "^5.0.1", + "copy-dir": "^1.3.0", + "copy-webpack-plugin": "^5.1.1", + "cordova-android": "^11.0.0", + "cordova-browser": "~6.0.0", + "cordova-ios": "~6.3.0", + "cordova-lib": "^11.0.0", + "cordova-osx": "github:apache/cordova-osx", + "cordova-plugin-clipboard": "github:Jigsaw-Code/outline-cordova-plugin-clipboard#v2.0.0", + "cordova-plugin-outline": "file:src/cordova/plugin", + "cordova-webintent": "github:cordova-misc/cordova-webintent#v2.0.0", + "css-loader": "^5.0.1", + "electron": "^19.1.9", + "electron-builder": "^23.6.0", + "electron-icon-maker": "^0.0.5", + "eslint": "^8.15.0", + "eslint-import-resolver-typescript": "^3.4.0", + "eslint-plugin-compat": "^4.0.2", + "eslint-plugin-import": "^2.26.0", + "esm": "^3.2.25", + "file-loader": "^6.2.0", + "html-webpack-plugin": "^5.1.0", + "husky": "^1.3.1", + "intl-messageformat": "^9.12.0", + "istanbul": "^0.4.5", + "karma": "^6.3.16", + "karma-chrome-launcher": "^3.1.0", + "karma-coverage-istanbul-reporter": "^3.0.3", + "karma-jasmine": "^4.0.1", + "karma-webpack": "^5.0.0", + "minimist": "^1.2.6", + "node-fetch": "^3.3.0", + "outline-i18n": "Jigsaw-Code/outline-i18n#v0.0.7", + "postcss": "^7.0.39", + "postcss-rtl": "^1.7.3", + "prettier": "^1.19.1", + "pretty-quick": "^2.0.1", + "puppeteer": "^13.1.2", + "replace-in-file": "^6.3.5", + "rimraf": "^2.7.1", + "rmfr": "^2.0.0", + "style-loader": "^2.0.0", + "ts-loader": "^9.3.1", + "typescript": "^4.7.4", + "url": "^0.11.0", + "webpack": "^5.16.0", + "webpack-cli": "^4.4.0", + "webpack-dev-server": "^4.5.0", + "webpack-merge": "^5.8.0", + "webpack-shell-plugin-next": "^2.1.1", + "xmlbuilder2": "^3.1.1" + }, + "optionalDependencies": { + "ios-deploy": "^1.11.4" + }, + "main": "build/electron/electron/index.js", + "husky": { + "hooks": { + "pre-commit": "npm run lint:ts -- --fix && npm run format" + } + }, + "cordova": { + "plugins": { + "cordova-plugin-outline": {}, + "cordova-plugin-splashscreen": {}, + "cordova-plugin-statusbar": {}, + "cordova-plugin-clipboard": {}, + "cordova-webintent": {} + }, + "platforms": [ + "browser", + "android", + "ios", + "osx" + ] + }, + "workspaces": [ + "src/cordova/plugin" + ] +} diff --git a/resources/electron/icon.png b/outline_client/resources/electron/icon.png similarity index 100% rename from resources/electron/icon.png rename to outline_client/resources/electron/icon.png diff --git a/resources/icons/android/icon_hdpi.png b/outline_client/resources/icons/android/icon_hdpi.png similarity index 100% rename from resources/icons/android/icon_hdpi.png rename to outline_client/resources/icons/android/icon_hdpi.png diff --git a/resources/icons/android/icon_mdpi.png b/outline_client/resources/icons/android/icon_mdpi.png similarity index 100% rename from resources/icons/android/icon_mdpi.png rename to outline_client/resources/icons/android/icon_mdpi.png diff --git a/resources/icons/android/icon_xhdpi.png b/outline_client/resources/icons/android/icon_xhdpi.png similarity index 100% rename from resources/icons/android/icon_xhdpi.png rename to outline_client/resources/icons/android/icon_xhdpi.png diff --git a/resources/icons/android/icon_xxhdpi.png b/outline_client/resources/icons/android/icon_xxhdpi.png similarity index 100% rename from resources/icons/android/icon_xxhdpi.png rename to outline_client/resources/icons/android/icon_xxhdpi.png diff --git a/resources/icons/android/icon_xxxhdpi.png b/outline_client/resources/icons/android/icon_xxxhdpi.png similarity index 100% rename from resources/icons/android/icon_xxxhdpi.png rename to outline_client/resources/icons/android/icon_xxxhdpi.png diff --git a/resources/icons/ios/Icon-20@2x.png b/outline_client/resources/icons/ios/Icon-20@2x.png similarity index 100% rename from resources/icons/ios/Icon-20@2x.png rename to outline_client/resources/icons/ios/Icon-20@2x.png diff --git a/resources/icons/ios/Icon-20@3x.png b/outline_client/resources/icons/ios/Icon-20@3x.png similarity index 100% rename from resources/icons/ios/Icon-20@3x.png rename to outline_client/resources/icons/ios/Icon-20@3x.png diff --git a/resources/icons/ios/Icon-29@1x.png b/outline_client/resources/icons/ios/Icon-29@1x.png similarity index 100% rename from resources/icons/ios/Icon-29@1x.png rename to outline_client/resources/icons/ios/Icon-29@1x.png diff --git a/resources/icons/ios/Icon-29@2x.png b/outline_client/resources/icons/ios/Icon-29@2x.png similarity index 100% rename from resources/icons/ios/Icon-29@2x.png rename to outline_client/resources/icons/ios/Icon-29@2x.png diff --git a/resources/icons/ios/Icon-29@3x.png b/outline_client/resources/icons/ios/Icon-29@3x.png similarity index 100% rename from resources/icons/ios/Icon-29@3x.png rename to outline_client/resources/icons/ios/Icon-29@3x.png diff --git a/resources/icons/ios/Icon-40@2x.png b/outline_client/resources/icons/ios/Icon-40@2x.png similarity index 100% rename from resources/icons/ios/Icon-40@2x.png rename to outline_client/resources/icons/ios/Icon-40@2x.png diff --git a/resources/icons/ios/Icon-40@3x.png b/outline_client/resources/icons/ios/Icon-40@3x.png similarity index 100% rename from resources/icons/ios/Icon-40@3x.png rename to outline_client/resources/icons/ios/Icon-40@3x.png diff --git a/resources/icons/ios/Icon-50@1x.png b/outline_client/resources/icons/ios/Icon-50@1x.png similarity index 100% rename from resources/icons/ios/Icon-50@1x.png rename to outline_client/resources/icons/ios/Icon-50@1x.png diff --git a/resources/icons/ios/Icon-50@2x.png b/outline_client/resources/icons/ios/Icon-50@2x.png similarity index 100% rename from resources/icons/ios/Icon-50@2x.png rename to outline_client/resources/icons/ios/Icon-50@2x.png diff --git a/resources/icons/ios/Icon-512@2x.png b/outline_client/resources/icons/ios/Icon-512@2x.png similarity index 100% rename from resources/icons/ios/Icon-512@2x.png rename to outline_client/resources/icons/ios/Icon-512@2x.png diff --git a/resources/icons/ios/Icon-57@1x.png b/outline_client/resources/icons/ios/Icon-57@1x.png similarity index 100% rename from resources/icons/ios/Icon-57@1x.png rename to outline_client/resources/icons/ios/Icon-57@1x.png diff --git a/resources/icons/ios/Icon-57@2x.png b/outline_client/resources/icons/ios/Icon-57@2x.png similarity index 100% rename from resources/icons/ios/Icon-57@2x.png rename to outline_client/resources/icons/ios/Icon-57@2x.png diff --git a/resources/icons/ios/Icon-60@2x.png b/outline_client/resources/icons/ios/Icon-60@2x.png similarity index 100% rename from resources/icons/ios/Icon-60@2x.png rename to outline_client/resources/icons/ios/Icon-60@2x.png diff --git a/resources/icons/ios/Icon-60@3x.png b/outline_client/resources/icons/ios/Icon-60@3x.png similarity index 100% rename from resources/icons/ios/Icon-60@3x.png rename to outline_client/resources/icons/ios/Icon-60@3x.png diff --git a/resources/icons/ios/Icon-72@1x.png b/outline_client/resources/icons/ios/Icon-72@1x.png similarity index 100% rename from resources/icons/ios/Icon-72@1x.png rename to outline_client/resources/icons/ios/Icon-72@1x.png diff --git a/resources/icons/ios/Icon-72@2x.png b/outline_client/resources/icons/ios/Icon-72@2x.png similarity index 100% rename from resources/icons/ios/Icon-72@2x.png rename to outline_client/resources/icons/ios/Icon-72@2x.png diff --git a/resources/icons/ios/Icon-76@1x.png b/outline_client/resources/icons/ios/Icon-76@1x.png similarity index 100% rename from resources/icons/ios/Icon-76@1x.png rename to outline_client/resources/icons/ios/Icon-76@1x.png diff --git a/resources/icons/ios/Icon-76@2x.png b/outline_client/resources/icons/ios/Icon-76@2x.png similarity index 100% rename from resources/icons/ios/Icon-76@2x.png rename to outline_client/resources/icons/ios/Icon-76@2x.png diff --git a/resources/icons/ios/Icon-83.5@2x.png b/outline_client/resources/icons/ios/Icon-83.5@2x.png similarity index 100% rename from resources/icons/ios/Icon-83.5@2x.png rename to outline_client/resources/icons/ios/Icon-83.5@2x.png diff --git a/resources/icons/osx/icon-1024.png b/outline_client/resources/icons/osx/icon-1024.png similarity index 100% rename from resources/icons/osx/icon-1024.png rename to outline_client/resources/icons/osx/icon-1024.png diff --git a/resources/icons/osx/icon-128.png b/outline_client/resources/icons/osx/icon-128.png similarity index 100% rename from resources/icons/osx/icon-128.png rename to outline_client/resources/icons/osx/icon-128.png diff --git a/resources/icons/osx/icon-16.png b/outline_client/resources/icons/osx/icon-16.png similarity index 100% rename from resources/icons/osx/icon-16.png rename to outline_client/resources/icons/osx/icon-16.png diff --git a/resources/icons/osx/icon-256.png b/outline_client/resources/icons/osx/icon-256.png similarity index 100% rename from resources/icons/osx/icon-256.png rename to outline_client/resources/icons/osx/icon-256.png diff --git a/resources/icons/osx/icon-32.png b/outline_client/resources/icons/osx/icon-32.png similarity index 100% rename from resources/icons/osx/icon-32.png rename to outline_client/resources/icons/osx/icon-32.png diff --git a/resources/icons/osx/icon-512.png b/outline_client/resources/icons/osx/icon-512.png similarity index 100% rename from resources/icons/osx/icon-512.png rename to outline_client/resources/icons/osx/icon-512.png diff --git a/resources/icons/osx/icon-64.png b/outline_client/resources/icons/osx/icon-64.png similarity index 100% rename from resources/icons/osx/icon-64.png rename to outline_client/resources/icons/osx/icon-64.png diff --git a/resources/original_messages.json b/outline_client/resources/original_messages.json similarity index 100% rename from resources/original_messages.json rename to outline_client/resources/original_messages.json diff --git a/resources/splashscreen/android/splashscreen_hdpi.png b/outline_client/resources/splashscreen/android/splashscreen_hdpi.png similarity index 100% rename from resources/splashscreen/android/splashscreen_hdpi.png rename to outline_client/resources/splashscreen/android/splashscreen_hdpi.png diff --git a/resources/splashscreen/android/splashscreen_xhdpi.png b/outline_client/resources/splashscreen/android/splashscreen_xhdpi.png similarity index 100% rename from resources/splashscreen/android/splashscreen_xhdpi.png rename to outline_client/resources/splashscreen/android/splashscreen_xhdpi.png diff --git a/resources/splashscreen/android/splashscreen_xxhdpi.png b/outline_client/resources/splashscreen/android/splashscreen_xxhdpi.png similarity index 100% rename from resources/splashscreen/android/splashscreen_xxhdpi.png rename to outline_client/resources/splashscreen/android/splashscreen_xxhdpi.png diff --git a/resources/splashscreen/android/splashscreen_xxxhdpi.png b/outline_client/resources/splashscreen/android/splashscreen_xxxhdpi.png similarity index 100% rename from resources/splashscreen/android/splashscreen_xxxhdpi.png rename to outline_client/resources/splashscreen/android/splashscreen_xxxhdpi.png diff --git a/resources/splashscreen/ios/splashscreen@2x~universal~anyany.png b/outline_client/resources/splashscreen/ios/splashscreen@2x~universal~anyany.png similarity index 100% rename from resources/splashscreen/ios/splashscreen@2x~universal~anyany.png rename to outline_client/resources/splashscreen/ios/splashscreen@2x~universal~anyany.png diff --git a/resources/tray/connected.png b/outline_client/resources/tray/connected.png similarity index 100% rename from resources/tray/connected.png rename to outline_client/resources/tray/connected.png diff --git a/resources/tray/disconnected.png b/outline_client/resources/tray/disconnected.png similarity index 100% rename from resources/tray/disconnected.png rename to outline_client/resources/tray/disconnected.png diff --git a/src/build/download_file.mjs b/outline_client/src/build/download_file.mjs similarity index 100% rename from src/build/download_file.mjs rename to outline_client/src/build/download_file.mjs diff --git a/src/build/get_build_parameters.mjs b/outline_client/src/build/get_build_parameters.mjs similarity index 100% rename from src/build/get_build_parameters.mjs rename to outline_client/src/build/get_build_parameters.mjs diff --git a/src/build/get_file_checksum.mjs b/outline_client/src/build/get_file_checksum.mjs similarity index 100% rename from src/build/get_file_checksum.mjs rename to outline_client/src/build/get_file_checksum.mjs diff --git a/src/build/get_root_dir.mjs b/outline_client/src/build/get_root_dir.mjs similarity index 91% rename from src/build/get_root_dir.mjs rename to outline_client/src/build/get_root_dir.mjs index 646edc8ba2..f0251c52f2 100644 --- a/src/build/get_root_dir.mjs +++ b/outline_client/src/build/get_root_dir.mjs @@ -17,7 +17,7 @@ import url from 'url'; // WARNING: if you move this file, you MUST update this file path const ROOT_DIR = path.resolve( - path.dirname(url.fileURLToPath(import.meta.url)), '..', '..'); + path.dirname(url.fileURLToPath(import.meta.url)), '..', '..', '..'); export function getRootDir() { return ROOT_DIR; diff --git a/src/build/get_webpack_build_mode.mjs b/outline_client/src/build/get_webpack_build_mode.mjs similarity index 100% rename from src/build/get_webpack_build_mode.mjs rename to outline_client/src/build/get_webpack_build_mode.mjs diff --git a/src/build/run_action.mjs b/outline_client/src/build/run_action.mjs similarity index 97% rename from src/build/run_action.mjs rename to outline_client/src/build/run_action.mjs index c775cf43c5..31cd38d562 100644 --- a/src/build/run_action.mjs +++ b/outline_client/src/build/run_action.mjs @@ -31,7 +31,7 @@ const resolveActionPath = async actionPath => { return actionPath; } - const roots = [getRootDir(), path.join(getRootDir(), 'src')]; + const roots = [path.join(getRootDir(), 'outline_client'), path.join(getRootDir(), 'outline_client', 'src')]; const extensions = ['sh', 'mjs']; for (const root of roots) { diff --git a/src/build/run_webpack.mjs b/outline_client/src/build/run_webpack.mjs similarity index 100% rename from src/build/run_webpack.mjs rename to outline_client/src/build/run_webpack.mjs diff --git a/src/build/spawn_stream.mjs b/outline_client/src/build/spawn_stream.mjs similarity index 100% rename from src/build/spawn_stream.mjs rename to outline_client/src/build/spawn_stream.mjs diff --git a/src/cordova/android/OutlineAndroidLib/.gitignore b/outline_client/src/cordova/android/OutlineAndroidLib/.gitignore similarity index 100% rename from src/cordova/android/OutlineAndroidLib/.gitignore rename to outline_client/src/cordova/android/OutlineAndroidLib/.gitignore diff --git a/src/cordova/android/OutlineAndroidLib/build.gradle b/outline_client/src/cordova/android/OutlineAndroidLib/build.gradle similarity index 100% rename from src/cordova/android/OutlineAndroidLib/build.gradle rename to outline_client/src/cordova/android/OutlineAndroidLib/build.gradle diff --git a/src/cordova/android/OutlineAndroidLib/gradle.properties b/outline_client/src/cordova/android/OutlineAndroidLib/gradle.properties similarity index 100% rename from src/cordova/android/OutlineAndroidLib/gradle.properties rename to outline_client/src/cordova/android/OutlineAndroidLib/gradle.properties diff --git a/src/cordova/android/OutlineAndroidLib/gradle/wrapper/gradle-wrapper.jar b/outline_client/src/cordova/android/OutlineAndroidLib/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from src/cordova/android/OutlineAndroidLib/gradle/wrapper/gradle-wrapper.jar rename to outline_client/src/cordova/android/OutlineAndroidLib/gradle/wrapper/gradle-wrapper.jar diff --git a/src/cordova/android/OutlineAndroidLib/gradle/wrapper/gradle-wrapper.properties b/outline_client/src/cordova/android/OutlineAndroidLib/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from src/cordova/android/OutlineAndroidLib/gradle/wrapper/gradle-wrapper.properties rename to outline_client/src/cordova/android/OutlineAndroidLib/gradle/wrapper/gradle-wrapper.properties diff --git a/src/cordova/android/OutlineAndroidLib/gradlew b/outline_client/src/cordova/android/OutlineAndroidLib/gradlew similarity index 100% rename from src/cordova/android/OutlineAndroidLib/gradlew rename to outline_client/src/cordova/android/OutlineAndroidLib/gradlew diff --git a/src/cordova/android/OutlineAndroidLib/gradlew.bat b/outline_client/src/cordova/android/OutlineAndroidLib/gradlew.bat similarity index 100% rename from src/cordova/android/OutlineAndroidLib/gradlew.bat rename to outline_client/src/cordova/android/OutlineAndroidLib/gradlew.bat diff --git a/src/cordova/android/OutlineAndroidLib/outline/.gitignore b/outline_client/src/cordova/android/OutlineAndroidLib/outline/.gitignore similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/.gitignore rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/.gitignore diff --git a/src/cordova/android/OutlineAndroidLib/outline/build.gradle b/outline_client/src/cordova/android/OutlineAndroidLib/outline/build.gradle similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/build.gradle rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/build.gradle diff --git a/src/cordova/android/OutlineAndroidLib/outline/consumer-rules.pro b/outline_client/src/cordova/android/OutlineAndroidLib/outline/consumer-rules.pro similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/consumer-rules.pro rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/consumer-rules.pro diff --git a/src/cordova/android/OutlineAndroidLib/outline/proguard-rules.pro b/outline_client/src/cordova/android/OutlineAndroidLib/outline/proguard-rules.pro similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/proguard-rules.pro rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/proguard-rules.pro diff --git a/src/cordova/android/OutlineAndroidLib/outline/src/androidTest/java/org/outline/vpn/VpnTunnelStoreTest.java b/outline_client/src/cordova/android/OutlineAndroidLib/outline/src/androidTest/java/org/outline/vpn/VpnTunnelStoreTest.java similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/src/androidTest/java/org/outline/vpn/VpnTunnelStoreTest.java rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/src/androidTest/java/org/outline/vpn/VpnTunnelStoreTest.java diff --git a/src/cordova/android/OutlineAndroidLib/outline/src/main/AndroidManifest.xml b/outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/AndroidManifest.xml similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/src/main/AndroidManifest.xml rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/AndroidManifest.xml diff --git a/src/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/IVpnTunnelService.aidl b/outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/IVpnTunnelService.aidl similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/IVpnTunnelService.aidl rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/IVpnTunnelService.aidl diff --git a/src/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/TunnelConfig.aidl b/outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/TunnelConfig.aidl similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/TunnelConfig.aidl rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/TunnelConfig.aidl diff --git a/src/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/shadowsocks/ShadowsocksConfig.aidl b/outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/shadowsocks/ShadowsocksConfig.aidl similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/shadowsocks/ShadowsocksConfig.aidl rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/shadowsocks/ShadowsocksConfig.aidl diff --git a/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/log/OutlineLogger.java b/outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/log/OutlineLogger.java similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/log/OutlineLogger.java rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/log/OutlineLogger.java diff --git a/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/log/SentryErrorReporter.java b/outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/log/SentryErrorReporter.java similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/log/SentryErrorReporter.java rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/log/SentryErrorReporter.java diff --git a/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnServiceStarter.java b/outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnServiceStarter.java similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnServiceStarter.java rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnServiceStarter.java diff --git a/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnel.java b/outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnel.java similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnel.java rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnel.java diff --git a/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnelService.java b/outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnelService.java similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnelService.java rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnelService.java diff --git a/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnelStore.java b/outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnelStore.java similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnelStore.java rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnelStore.java diff --git a/src/cordova/android/OutlineAndroidLib/outline/src/test/java/org/outline/vpn/VpnTunnelTest.java b/outline_client/src/cordova/android/OutlineAndroidLib/outline/src/test/java/org/outline/vpn/VpnTunnelTest.java similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/src/test/java/org/outline/vpn/VpnTunnelTest.java rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/src/test/java/org/outline/vpn/VpnTunnelTest.java diff --git a/src/cordova/android/OutlineAndroidLib/settings.gradle b/outline_client/src/cordova/android/OutlineAndroidLib/settings.gradle similarity index 100% rename from src/cordova/android/OutlineAndroidLib/settings.gradle rename to outline_client/src/cordova/android/OutlineAndroidLib/settings.gradle diff --git a/src/cordova/android/README.md b/outline_client/src/cordova/android/README.md similarity index 100% rename from src/cordova/android/README.md rename to outline_client/src/cordova/android/README.md diff --git a/src/cordova/android/get_native_locale.mjs b/outline_client/src/cordova/android/get_native_locale.mjs similarity index 100% rename from src/cordova/android/get_native_locale.mjs rename to outline_client/src/cordova/android/get_native_locale.mjs diff --git a/src/cordova/apple/OutlineAppleLib/.gitignore b/outline_client/src/cordova/apple/OutlineAppleLib/.gitignore similarity index 100% rename from src/cordova/apple/OutlineAppleLib/.gitignore rename to outline_client/src/cordova/apple/OutlineAppleLib/.gitignore diff --git a/src/cordova/apple/OutlineAppleLib/Package.swift b/outline_client/src/cordova/apple/OutlineAppleLib/Package.swift similarity index 100% rename from src/cordova/apple/OutlineAppleLib/Package.swift rename to outline_client/src/cordova/apple/OutlineAppleLib/Package.swift diff --git a/src/cordova/apple/OutlineAppleLib/README.md b/outline_client/src/cordova/apple/OutlineAppleLib/README.md similarity index 100% rename from src/cordova/apple/OutlineAppleLib/README.md rename to outline_client/src/cordova/apple/OutlineAppleLib/README.md diff --git a/src/cordova/apple/OutlineAppleLib/Sources/OutlineSentryLogger/OutlineSentryLogger.swift b/outline_client/src/cordova/apple/OutlineAppleLib/Sources/OutlineSentryLogger/OutlineSentryLogger.swift similarity index 100% rename from src/cordova/apple/OutlineAppleLib/Sources/OutlineSentryLogger/OutlineSentryLogger.swift rename to outline_client/src/cordova/apple/OutlineAppleLib/Sources/OutlineSentryLogger/OutlineSentryLogger.swift diff --git a/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineTunnel.swift b/outline_client/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineTunnel.swift similarity index 100% rename from src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineTunnel.swift rename to outline_client/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineTunnel.swift diff --git a/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineTunnelStore.swift b/outline_client/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineTunnelStore.swift similarity index 100% rename from src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineTunnelStore.swift rename to outline_client/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineTunnelStore.swift diff --git a/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineVpn.swift b/outline_client/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineVpn.swift similarity index 100% rename from src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineVpn.swift rename to outline_client/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineVpn.swift diff --git a/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/Subnet.swift b/outline_client/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/Subnet.swift similarity index 100% rename from src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/Subnet.swift rename to outline_client/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/Subnet.swift diff --git a/src/cordova/apple/OutlineAppleLib/Sources/PacketTunnelProvider/PacketTunnelProvider.m b/outline_client/src/cordova/apple/OutlineAppleLib/Sources/PacketTunnelProvider/PacketTunnelProvider.m similarity index 100% rename from src/cordova/apple/OutlineAppleLib/Sources/PacketTunnelProvider/PacketTunnelProvider.m rename to outline_client/src/cordova/apple/OutlineAppleLib/Sources/PacketTunnelProvider/PacketTunnelProvider.m diff --git a/src/cordova/apple/OutlineAppleLib/Sources/PacketTunnelProvider/include/PacketTunnelProvider.h b/outline_client/src/cordova/apple/OutlineAppleLib/Sources/PacketTunnelProvider/include/PacketTunnelProvider.h similarity index 100% rename from src/cordova/apple/OutlineAppleLib/Sources/PacketTunnelProvider/include/PacketTunnelProvider.h rename to outline_client/src/cordova/apple/OutlineAppleLib/Sources/PacketTunnelProvider/include/PacketTunnelProvider.h diff --git a/src/cordova/apple/OutlineAppleLib/Tests/OutlineTunnelTest/OutlineTunnelTest.swift b/outline_client/src/cordova/apple/OutlineAppleLib/Tests/OutlineTunnelTest/OutlineTunnelTest.swift similarity index 100% rename from src/cordova/apple/OutlineAppleLib/Tests/OutlineTunnelTest/OutlineTunnelTest.swift rename to outline_client/src/cordova/apple/OutlineAppleLib/Tests/OutlineTunnelTest/OutlineTunnelTest.swift diff --git a/src/cordova/apple/README.md b/outline_client/src/cordova/apple/README.md similarity index 100% rename from src/cordova/apple/README.md rename to outline_client/src/cordova/apple/README.md diff --git a/src/cordova/apple/ios.xcworkspace/contents.xcworkspacedata b/outline_client/src/cordova/apple/ios.xcworkspace/contents.xcworkspacedata similarity index 100% rename from src/cordova/apple/ios.xcworkspace/contents.xcworkspacedata rename to outline_client/src/cordova/apple/ios.xcworkspace/contents.xcworkspacedata diff --git a/src/cordova/apple/ios.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/outline_client/src/cordova/apple/ios.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from src/cordova/apple/ios.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to outline_client/src/cordova/apple/ios.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/src/cordova/apple/ios.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/outline_client/src/cordova/apple/ios.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings similarity index 100% rename from src/cordova/apple/ios.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings rename to outline_client/src/cordova/apple/ios.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/src/cordova/apple/ios.xcworkspace/xcshareddata/swiftpm/Package.resolved b/outline_client/src/cordova/apple/ios.xcworkspace/xcshareddata/swiftpm/Package.resolved similarity index 100% rename from src/cordova/apple/ios.xcworkspace/xcshareddata/swiftpm/Package.resolved rename to outline_client/src/cordova/apple/ios.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/src/cordova/apple/macos.xcworkspace/contents.xcworkspacedata b/outline_client/src/cordova/apple/macos.xcworkspace/contents.xcworkspacedata similarity index 100% rename from src/cordova/apple/macos.xcworkspace/contents.xcworkspacedata rename to outline_client/src/cordova/apple/macos.xcworkspace/contents.xcworkspacedata diff --git a/src/cordova/apple/macos.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/outline_client/src/cordova/apple/macos.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from src/cordova/apple/macos.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to outline_client/src/cordova/apple/macos.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/src/cordova/apple/macos.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/outline_client/src/cordova/apple/macos.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings similarity index 100% rename from src/cordova/apple/macos.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings rename to outline_client/src/cordova/apple/macos.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/src/cordova/apple/macos.xcworkspace/xcshareddata/swiftpm/Package.resolved b/outline_client/src/cordova/apple/macos.xcworkspace/xcshareddata/swiftpm/Package.resolved similarity index 100% rename from src/cordova/apple/macos.xcworkspace/xcshareddata/swiftpm/Package.resolved rename to outline_client/src/cordova/apple/macos.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/src/cordova/apple/scripts/xconfig.sh b/outline_client/src/cordova/apple/scripts/xconfig.sh similarity index 100% rename from src/cordova/apple/scripts/xconfig.sh rename to outline_client/src/cordova/apple/scripts/xconfig.sh diff --git a/src/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj b/outline_client/src/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj similarity index 100% rename from src/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj rename to outline_client/src/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj diff --git a/src/cordova/apple/xcode/ios/Outline.xcodeproj/xcshareddata/xcschemes/Outline.xcscheme b/outline_client/src/cordova/apple/xcode/ios/Outline.xcodeproj/xcshareddata/xcschemes/Outline.xcscheme similarity index 100% rename from src/cordova/apple/xcode/ios/Outline.xcodeproj/xcshareddata/xcschemes/Outline.xcscheme rename to outline_client/src/cordova/apple/xcode/ios/Outline.xcodeproj/xcshareddata/xcschemes/Outline.xcscheme diff --git a/src/cordova/apple/xcode/ios/Outline.xcodeproj/xcshareddata/xcschemes/VpnExtension.xcscheme b/outline_client/src/cordova/apple/xcode/ios/Outline.xcodeproj/xcshareddata/xcschemes/VpnExtension.xcscheme similarity index 100% rename from src/cordova/apple/xcode/ios/Outline.xcodeproj/xcshareddata/xcschemes/VpnExtension.xcscheme rename to outline_client/src/cordova/apple/xcode/ios/Outline.xcodeproj/xcshareddata/xcschemes/VpnExtension.xcscheme diff --git a/src/cordova/apple/xcode/ios/Outline/Outline-Info.plist b/outline_client/src/cordova/apple/xcode/ios/Outline/Outline-Info.plist similarity index 100% rename from src/cordova/apple/xcode/ios/Outline/Outline-Info.plist rename to outline_client/src/cordova/apple/xcode/ios/Outline/Outline-Info.plist diff --git a/src/cordova/apple/xcode/ios/Outline/Outline.entitlements b/outline_client/src/cordova/apple/xcode/ios/Outline/Outline.entitlements similarity index 100% rename from src/cordova/apple/xcode/ios/Outline/Outline.entitlements rename to outline_client/src/cordova/apple/xcode/ios/Outline/Outline.entitlements diff --git a/src/cordova/apple/xcode/ios/Outline/VpnExtension-Info.plist b/outline_client/src/cordova/apple/xcode/ios/Outline/VpnExtension-Info.plist similarity index 100% rename from src/cordova/apple/xcode/ios/Outline/VpnExtension-Info.plist rename to outline_client/src/cordova/apple/xcode/ios/Outline/VpnExtension-Info.plist diff --git a/src/cordova/apple/xcode/ios/Outline/VpnExtension.entitlements b/outline_client/src/cordova/apple/xcode/ios/Outline/VpnExtension.entitlements similarity index 100% rename from src/cordova/apple/xcode/ios/Outline/VpnExtension.entitlements rename to outline_client/src/cordova/apple/xcode/ios/Outline/VpnExtension.entitlements diff --git a/src/cordova/apple/xcode/macos/Outline.xcodeproj/project.pbxproj b/outline_client/src/cordova/apple/xcode/macos/Outline.xcodeproj/project.pbxproj similarity index 100% rename from src/cordova/apple/xcode/macos/Outline.xcodeproj/project.pbxproj rename to outline_client/src/cordova/apple/xcode/macos/Outline.xcodeproj/project.pbxproj diff --git a/src/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/Outline.xcscheme b/outline_client/src/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/Outline.xcscheme similarity index 100% rename from src/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/Outline.xcscheme rename to outline_client/src/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/Outline.xcscheme diff --git a/src/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/OutlineLauncher.xcscheme b/outline_client/src/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/OutlineLauncher.xcscheme similarity index 100% rename from src/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/OutlineLauncher.xcscheme rename to outline_client/src/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/OutlineLauncher.xcscheme diff --git a/src/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/VpnExtension.xcscheme b/outline_client/src/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/VpnExtension.xcscheme similarity index 100% rename from src/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/VpnExtension.xcscheme rename to outline_client/src/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/VpnExtension.xcscheme diff --git a/src/cordova/apple/xcode/macos/Outline/Classes/AppDelegate.m b/outline_client/src/cordova/apple/xcode/macos/Outline/Classes/AppDelegate.m similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/Classes/AppDelegate.m rename to outline_client/src/cordova/apple/xcode/macos/Outline/Classes/AppDelegate.m diff --git a/src/cordova/apple/xcode/macos/Outline/Classes/CDVMacOsUrlHandler.swift b/outline_client/src/cordova/apple/xcode/macos/Outline/Classes/CDVMacOsUrlHandler.swift similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/Classes/CDVMacOsUrlHandler.swift rename to outline_client/src/cordova/apple/xcode/macos/Outline/Classes/CDVMacOsUrlHandler.swift diff --git a/src/cordova/apple/xcode/macos/Outline/Classes/EventMonitor.swift b/outline_client/src/cordova/apple/xcode/macos/Outline/Classes/EventMonitor.swift similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/Classes/EventMonitor.swift rename to outline_client/src/cordova/apple/xcode/macos/Outline/Classes/EventMonitor.swift diff --git a/src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImage.imageset/Contents.json b/outline_client/src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImage.imageset/Contents.json similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImage.imageset/Contents.json rename to outline_client/src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImage.imageset/Contents.json diff --git a/src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImage.imageset/outline-black-off-2x.png b/outline_client/src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImage.imageset/outline-black-off-2x.png similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImage.imageset/outline-black-off-2x.png rename to outline_client/src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImage.imageset/outline-black-off-2x.png diff --git a/src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImageConnected.imageset/Contents.json b/outline_client/src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImageConnected.imageset/Contents.json similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImageConnected.imageset/Contents.json rename to outline_client/src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImageConnected.imageset/Contents.json diff --git a/src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImageConnected.imageset/outline-black-on-2x.png b/outline_client/src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImageConnected.imageset/outline-black-on-2x.png similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImageConnected.imageset/outline-black-on-2x.png rename to outline_client/src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImageConnected.imageset/outline-black-on-2x.png diff --git a/src/cordova/apple/xcode/macos/Outline/MainViewController.xib b/outline_client/src/cordova/apple/xcode/macos/Outline/MainViewController.xib similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/MainViewController.xib rename to outline_client/src/cordova/apple/xcode/macos/Outline/MainViewController.xib diff --git a/src/cordova/apple/xcode/macos/Outline/Outline-Info.plist b/outline_client/src/cordova/apple/xcode/macos/Outline/Outline-Info.plist similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/Outline-Info.plist rename to outline_client/src/cordova/apple/xcode/macos/Outline/Outline-Info.plist diff --git a/src/cordova/apple/xcode/macos/Outline/Outline.entitlements b/outline_client/src/cordova/apple/xcode/macos/Outline/Outline.entitlements similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/Outline.entitlements rename to outline_client/src/cordova/apple/xcode/macos/Outline/Outline.entitlements diff --git a/src/cordova/apple/xcode/macos/Outline/VpnExtension-Info.plist b/outline_client/src/cordova/apple/xcode/macos/Outline/VpnExtension-Info.plist similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/VpnExtension-Info.plist rename to outline_client/src/cordova/apple/xcode/macos/Outline/VpnExtension-Info.plist diff --git a/src/cordova/apple/xcode/macos/Outline/VpnExtension.entitlements b/outline_client/src/cordova/apple/xcode/macos/Outline/VpnExtension.entitlements similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/VpnExtension.entitlements rename to outline_client/src/cordova/apple/xcode/macos/Outline/VpnExtension.entitlements diff --git a/src/cordova/apple/xcode/macos/Outline/config.xml b/outline_client/src/cordova/apple/xcode/macos/Outline/config.xml similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/config.xml rename to outline_client/src/cordova/apple/xcode/macos/Outline/config.xml diff --git a/src/cordova/apple/xcode/macos/OutlineLauncher/AppDelegate.swift b/outline_client/src/cordova/apple/xcode/macos/OutlineLauncher/AppDelegate.swift similarity index 100% rename from src/cordova/apple/xcode/macos/OutlineLauncher/AppDelegate.swift rename to outline_client/src/cordova/apple/xcode/macos/OutlineLauncher/AppDelegate.swift diff --git a/src/cordova/apple/xcode/macos/OutlineLauncher/Base.lproj/Main.storyboard b/outline_client/src/cordova/apple/xcode/macos/OutlineLauncher/Base.lproj/Main.storyboard similarity index 100% rename from src/cordova/apple/xcode/macos/OutlineLauncher/Base.lproj/Main.storyboard rename to outline_client/src/cordova/apple/xcode/macos/OutlineLauncher/Base.lproj/Main.storyboard diff --git a/src/cordova/apple/xcode/macos/OutlineLauncher/Info.plist b/outline_client/src/cordova/apple/xcode/macos/OutlineLauncher/Info.plist similarity index 100% rename from src/cordova/apple/xcode/macos/OutlineLauncher/Info.plist rename to outline_client/src/cordova/apple/xcode/macos/OutlineLauncher/Info.plist diff --git a/src/cordova/apple/xcode/macos/OutlineLauncher/OutlineLauncher.entitlements b/outline_client/src/cordova/apple/xcode/macos/OutlineLauncher/OutlineLauncher.entitlements similarity index 100% rename from src/cordova/apple/xcode/macos/OutlineLauncher/OutlineLauncher.entitlements rename to outline_client/src/cordova/apple/xcode/macos/OutlineLauncher/OutlineLauncher.entitlements diff --git a/src/cordova/apple/xcode/macos/osx.json b/outline_client/src/cordova/apple/xcode/macos/osx.json similarity index 100% rename from src/cordova/apple/xcode/macos/osx.json rename to outline_client/src/cordova/apple/xcode/macos/osx.json diff --git a/src/cordova/apple/xcode/macos/www/cordova_plugins.js b/outline_client/src/cordova/apple/xcode/macos/www/cordova_plugins.js similarity index 100% rename from src/cordova/apple/xcode/macos/www/cordova_plugins.js rename to outline_client/src/cordova/apple/xcode/macos/www/cordova_plugins.js diff --git a/src/cordova/build.action.mjs b/outline_client/src/cordova/build.action.mjs similarity index 100% rename from src/cordova/build.action.mjs rename to outline_client/src/cordova/build.action.mjs diff --git a/src/cordova/import_messages.action.mjs b/outline_client/src/cordova/import_messages.action.mjs similarity index 100% rename from src/cordova/import_messages.action.mjs rename to outline_client/src/cordova/import_messages.action.mjs diff --git a/src/cordova/plugin/README.md b/outline_client/src/cordova/plugin/README.md similarity index 100% rename from src/cordova/plugin/README.md rename to outline_client/src/cordova/plugin/README.md diff --git a/src/cordova/plugin/android/java/build-extras.gradle b/outline_client/src/cordova/plugin/android/java/build-extras.gradle similarity index 100% rename from src/cordova/plugin/android/java/build-extras.gradle rename to outline_client/src/cordova/plugin/android/java/build-extras.gradle diff --git a/src/cordova/plugin/android/java/org/outline/OutlinePlugin.java b/outline_client/src/cordova/plugin/android/java/org/outline/OutlinePlugin.java similarity index 100% rename from src/cordova/plugin/android/java/org/outline/OutlinePlugin.java rename to outline_client/src/cordova/plugin/android/java/org/outline/OutlinePlugin.java diff --git a/src/cordova/plugin/android/resources/bypass_subnets.xml b/outline_client/src/cordova/plugin/android/resources/bypass_subnets.xml similarity index 100% rename from src/cordova/plugin/android/resources/bypass_subnets.xml rename to outline_client/src/cordova/plugin/android/resources/bypass_subnets.xml diff --git a/src/cordova/plugin/android/resources/small_icon.png b/outline_client/src/cordova/plugin/android/resources/small_icon.png similarity index 100% rename from src/cordova/plugin/android/resources/small_icon.png rename to outline_client/src/cordova/plugin/android/resources/small_icon.png diff --git a/src/cordova/plugin/android/resources/strings/values-af/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-af/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-af/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-af/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-am/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-am/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-am/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-am/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-ar/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-ar/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-ar/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-ar/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-az/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-az/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-az/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-az/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-b+sr+Latn/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-b+sr+Latn/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-b+sr+Latn/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-b+sr+Latn/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-bg/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-bg/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-bg/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-bg/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-bn/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-bn/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-bn/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-bn/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-bs/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-bs/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-bs/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-bs/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-ca/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-ca/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-ca/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-ca/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-cs/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-cs/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-cs/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-cs/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-da/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-da/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-da/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-da/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-de/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-de/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-de/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-de/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-el/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-el/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-el/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-el/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-en-rGB/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-en-rGB/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-en-rGB/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-en-rGB/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-en/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-en/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-en/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-en/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-es/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-es/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-es/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-es/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-et/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-et/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-et/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-et/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-fa/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-fa/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-fa/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-fa/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-fi/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-fi/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-fi/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-fi/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-fil/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-fil/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-fil/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-fil/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-fr/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-fr/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-fr/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-fr/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-he/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-he/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-he/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-he/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-hi/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-hi/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-hi/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-hi/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-hr/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-hr/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-hr/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-hr/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-hu/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-hu/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-hu/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-hu/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-hy/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-hy/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-hy/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-hy/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-id/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-id/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-id/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-id/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-is/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-is/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-is/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-is/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-it/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-it/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-it/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-it/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-ja/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-ja/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-ja/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-ja/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-ka/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-ka/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-ka/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-ka/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-kk/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-kk/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-kk/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-kk/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-km/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-km/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-km/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-km/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-ko/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-ko/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-ko/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-ko/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-lo/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-lo/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-lo/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-lo/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-lt/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-lt/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-lt/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-lt/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-lv/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-lv/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-lv/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-lv/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-mk/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-mk/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-mk/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-mk/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-mn/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-mn/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-mn/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-mn/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-mr/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-mr/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-mr/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-mr/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-ms/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-ms/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-ms/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-ms/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-my/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-my/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-my/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-my/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-ne/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-ne/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-ne/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-ne/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-nl/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-nl/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-nl/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-nl/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-no/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-no/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-no/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-no/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-pl/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-pl/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-pl/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-pl/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-pt-rBR/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-pt-rBR/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-pt-rBR/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-pt-rBR/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-pt-rPT/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-pt-rPT/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-pt-rPT/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-pt-rPT/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-ro/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-ro/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-ro/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-ro/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-ru/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-ru/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-ru/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-ru/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-si/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-si/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-si/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-si/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-sk/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-sk/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-sk/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-sk/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-sl/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-sl/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-sl/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-sl/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-sq/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-sq/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-sq/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-sq/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-sr/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-sr/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-sr/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-sr/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-sv/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-sv/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-sv/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-sv/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-sw/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-sw/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-sw/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-sw/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-ta/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-ta/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-ta/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-ta/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-th/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-th/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-th/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-th/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-tr/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-tr/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-tr/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-tr/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-uk/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-uk/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-uk/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-uk/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-ur/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-ur/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-ur/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-ur/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-vi/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-vi/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-vi/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-vi/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-zh-rCN/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-zh-rCN/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-zh-rCN/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-zh-rCN/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-zh-rTW/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-zh-rTW/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-zh-rTW/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-zh-rTW/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values/strings.xml diff --git a/src/cordova/plugin/android/scripts/copy_third_party.js b/outline_client/src/cordova/plugin/android/scripts/copy_third_party.js similarity index 100% rename from src/cordova/plugin/android/scripts/copy_third_party.js rename to outline_client/src/cordova/plugin/android/scripts/copy_third_party.js diff --git a/src/cordova/plugin/apple/src/OutlinePlugin.swift b/outline_client/src/cordova/plugin/apple/src/OutlinePlugin.swift similarity index 100% rename from src/cordova/plugin/apple/src/OutlinePlugin.swift rename to outline_client/src/cordova/plugin/apple/src/OutlinePlugin.swift diff --git a/src/cordova/plugin/apple/src/macos/Outline-Bridging-Header.h b/outline_client/src/cordova/plugin/apple/src/macos/Outline-Bridging-Header.h similarity index 100% rename from src/cordova/plugin/apple/src/macos/Outline-Bridging-Header.h rename to outline_client/src/cordova/plugin/apple/src/macos/Outline-Bridging-Header.h diff --git a/src/cordova/plugin/package.json b/outline_client/src/cordova/plugin/package.json similarity index 100% rename from src/cordova/plugin/package.json rename to outline_client/src/cordova/plugin/package.json diff --git a/src/cordova/plugin/plugin.xml b/outline_client/src/cordova/plugin/plugin.xml similarity index 100% rename from src/cordova/plugin/plugin.xml rename to outline_client/src/cordova/plugin/plugin.xml diff --git a/src/cordova/setup.action.mjs b/outline_client/src/cordova/setup.action.mjs similarity index 100% rename from src/cordova/setup.action.mjs rename to outline_client/src/cordova/setup.action.mjs diff --git a/src/cordova/test.action.mjs b/outline_client/src/cordova/test.action.mjs similarity index 100% rename from src/cordova/test.action.mjs rename to outline_client/src/cordova/test.action.mjs diff --git a/src/electron/README.md b/outline_client/src/electron/README.md similarity index 100% rename from src/electron/README.md rename to outline_client/src/electron/README.md diff --git a/src/electron/add_tap_device.bat b/outline_client/src/electron/add_tap_device.bat similarity index 100% rename from src/electron/add_tap_device.bat rename to outline_client/src/electron/add_tap_device.bat diff --git a/src/electron/build.action.mjs b/outline_client/src/electron/build.action.mjs similarity index 100% rename from src/electron/build.action.mjs rename to outline_client/src/electron/build.action.mjs diff --git a/src/electron/build_main.action.mjs b/outline_client/src/electron/build_main.action.mjs similarity index 100% rename from src/electron/build_main.action.mjs rename to outline_client/src/electron/build_main.action.mjs diff --git a/src/electron/custom_install_steps.nsh b/outline_client/src/electron/custom_install_steps.nsh similarity index 97% rename from src/electron/custom_install_steps.nsh rename to outline_client/src/electron/custom_install_steps.nsh index 633841e816..f831d7fc9e 100755 --- a/src/electron/custom_install_steps.nsh +++ b/outline_client/src/electron/custom_install_steps.nsh @@ -1,170 +1,170 @@ -; Copyright 2018 The Outline Authors -; -; Licensed under the Apache License, Version 2.0 (the "License"); -; you may not use this file except in compliance with the License. -; You may obtain a copy of the License at -; -; http://www.apache.org/licenses/LICENSE-2.0 -; -; Unless required by applicable law or agreed to in writing, software -; distributed under the License is distributed on an "AS IS" BASIS, -; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -; See the License for the specific language governing permissions and -; limitations under the License. - -!include StrFunc.nsh -!include WinVer.nsh -!include x64.nsh - -!include env.nsh - -; StrFunc weirdness; this fix suggested here: -; https://github.com/electron-userland/electron-builder/issues/888 -!ifndef BUILD_UNINSTALLER -${StrLoc} -${StrNSISToIO} -${StrRep} -!endif - -!macro customInstall - ; Normally, because we mark the installer binary as requiring administrator permissions, the - ; installer will be running with administrator permissions at this point. The exception is when - ; the system is running with the *lowest* (least safe) UAC setting in which case the installer - ; can progress to this point without administrator permissions. - ; - ; If that's the case, exit now so we don't waste time to trying to install the TAP device, etc. - ; Additionally, the client can detect their absence and prompt the user to reinstall. - ; - ; The returned value does *not* seem to be based on the user's current diaplay language. - UserInfo::GetAccountType - Pop $0 - StrCmp $0 "Admin" isadmin - MessageBox MB_OK "Sorry, Outline requires administrator permissions." - Quit - - isadmin: - - ; TAP device files. - SetOutPath "$INSTDIR\tap-windows6" - ${If} ${RunningX64} - File /r "${PROJECT_DIR}\third_party\tap-windows6\bin\amd64\*" - ${Else} - File /r "${PROJECT_DIR}\third_party\tap-windows6\bin\i386\*" - ${EndIf} - SetOutPath - - File "${PROJECT_DIR}\src\electron\add_tap_device.bat" - File "${PROJECT_DIR}\src\electron\find_tap_device_name.bat" - - ; OutlineService files, stopping the service first in case it's still running. - nsExec::Exec "net stop OutlineService" - File "${PROJECT_DIR}\tools\OutlineService\OutlineService\bin\OutlineService.exe" - File "${PROJECT_DIR}\tools\smartdnsblock\bin\smartdnsblock.exe" - File "${PROJECT_DIR}\third_party\newtonsoft\Newtonsoft.Json.dll" - File "${PROJECT_DIR}\src\electron\install_windows_service.bat" - - ; ExecToStack captures both stdout and stderr from the script, in the order output. - ; Set a (long) timeout in case the device never becomes visible to netsh. - ReadEnvStr $0 COMSPEC - nsExec::ExecToStack /timeout=180000 '$0 /c add_tap_device.bat' - - Pop $0 - Pop $1 - StrCmp $0 0 installservice - - ; The TAP device may have failed to install because the user did not want to - ; install the device driver. If so: - ; - tell the user that they need to install the driver - ; - skip the Sentry report - ; - quit - ; - ; When this happens, tapinstall.exe prints an error message like this: - ; UpdateDriverForPlugAndPlayDevices failed, GetLastError=-536870333 - ; - ; We can use the presence of that magic number to detect this case. - Var /GLOBAL DRIVER_FAILURE_MAGIC_NUMBER_INDEX - ${StrLoc} $DRIVER_FAILURE_MAGIC_NUMBER_INDEX $1 "536870333" ">" - - StrCmp $DRIVER_FAILURE_MAGIC_NUMBER_INDEX "" submitsentryreport - ; The term "device software" is the same as that used by the prompt, at least on Windows 7. - MessageBox MB_OK "Sorry, you must install the device software in order to use Outline. Please try \ - running the installer again." - Quit - - submitsentryreport: - MessageBox MB_OK "Sorry, we could not configure your system to connect to Outline. Please try \ - running the installer again. If you still cannot install Outline, please get in \ - touch with us and let us know that the TAP device failed to install with error code $0." - - ; Submit a Sentry error event. - ; - ; This will get bundled into an issue named "could not install TAP device" with the following - ; attributes: - ; - a single breadcrumb containing the output of add_tap_device.bat - ; - Windows version, as a tag named "os" with a value identical in most cases to what the - ; JavaScript Sentry client produces, e.g. "Windows 10.0.17134" - ; - client version - ; - ; Note: - ; - Sentry won't accept a breadcrumbs without a timestamp; fortunately, it accepts obviously - ; bogus values so we don't have to fetch the real time. - ; - Because nsExec::ExecToStack yields "NSIS strings" strings suitable for inclusion in, for - ; example, a MessageBox, e.g. "device not found$\ncommand failed", we must convert it to a - ; string that Sentry will like *and* can fit on one line, e.g. - ; "device not found\ncommand failed"; fortunately, StrFunc.nsh's StrNSISToIO does precisely - ; this. - ; - RELEASE and SENTRY_URL are defined in env.nsh which is generated at build time by - ; {package,release}_action.sh. - - ; TODO: Remove this once we figure out why/if breadcrumbs are being truncated. - Var /GLOBAL FAILURE_MESSAGE_LENGTH - StrLen $FAILURE_MESSAGE_LENGTH $1 - - ; http://nsis.sourceforge.net/Docs/StrFunc/StrFunc.txt - Var /GLOBAL FAILURE_MESSAGE - ${StrNSISToIO} $FAILURE_MESSAGE $1 - ${StrRep} $FAILURE_MESSAGE $FAILURE_MESSAGE '"' '\"' - - ${WinVerGetMajor} $R0 - ${WinVerGetMinor} $R1 - ${WinVerGetBuild} $R2 - - ; http://nsis.sourceforge.net/Inetc_plug-in#post - inetc::post '{\ - "message":"could not install TAP device ($0)",\ - "release":"${RELEASE}",\ - "tags":[\ - ["os", "Windows $R0.$R1.$R2"],\ - ["error_message_length", "$FAILURE_MESSAGE_LENGTH"]\ - ],\ - "breadcrumbs":[\ - {"timestamp":1, "message":"$FAILURE_MESSAGE"}\ - ]\ - }' /TOSTACK ${SENTRY_URL} /END - - Quit - - installservice: - - nsExec::Exec install_windows_service.bat - - nsExec::Exec "sc query OutlineService" - Pop $0 - StrCmp $0 0 success - ; TODO: Trigger a Sentry report for service installation failure, too, and revisit - ; the restart stuff in the TypeScript code. - MessageBox MB_OK "Sorry, we could not configure your system to connect to Outline. Please try \ - running the installer again. If you still cannot install Outline, please get in touch with us \ - and let us know that OutlineService failed to install." - Quit - - success: - -!macroend - -; TODO: Remove the TAP device on uninstall. This is impossible to implement safely -; with the bundled tapinstall.exe because it can only remove *all* devices -; having hwid tap0901 and these may include non-Outline devices. -!macro customUnInstall - nsExec::Exec "net stop OutlineService" - nsExec::Exec "sc delete OutlineService" +; Copyright 2018 The Outline Authors +; +; Licensed under the Apache License, Version 2.0 (the "License"); +; you may not use this file except in compliance with the License. +; You may obtain a copy of the License at +; +; http://www.apache.org/licenses/LICENSE-2.0 +; +; Unless required by applicable law or agreed to in writing, software +; distributed under the License is distributed on an "AS IS" BASIS, +; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; See the License for the specific language governing permissions and +; limitations under the License. + +!include StrFunc.nsh +!include WinVer.nsh +!include x64.nsh + +!include env.nsh + +; StrFunc weirdness; this fix suggested here: +; https://github.com/electron-userland/electron-builder/issues/888 +!ifndef BUILD_UNINSTALLER +${StrLoc} +${StrNSISToIO} +${StrRep} +!endif + +!macro customInstall + ; Normally, because we mark the installer binary as requiring administrator permissions, the + ; installer will be running with administrator permissions at this point. The exception is when + ; the system is running with the *lowest* (least safe) UAC setting in which case the installer + ; can progress to this point without administrator permissions. + ; + ; If that's the case, exit now so we don't waste time to trying to install the TAP device, etc. + ; Additionally, the client can detect their absence and prompt the user to reinstall. + ; + ; The returned value does *not* seem to be based on the user's current diaplay language. + UserInfo::GetAccountType + Pop $0 + StrCmp $0 "Admin" isadmin + MessageBox MB_OK "Sorry, Outline requires administrator permissions." + Quit + + isadmin: + + ; TAP device files. + SetOutPath "$INSTDIR\tap-windows6" + ${If} ${RunningX64} + File /r "${PROJECT_DIR}\third_party\tap-windows6\bin\amd64\*" + ${Else} + File /r "${PROJECT_DIR}\third_party\tap-windows6\bin\i386\*" + ${EndIf} + SetOutPath - + File "${PROJECT_DIR}\src\electron\add_tap_device.bat" + File "${PROJECT_DIR}\src\electron\find_tap_device_name.bat" + + ; OutlineService files, stopping the service first in case it's still running. + nsExec::Exec "net stop OutlineService" + File "${PROJECT_DIR}\tools\OutlineService\OutlineService\bin\OutlineService.exe" + File "${PROJECT_DIR}\tools\smartdnsblock\bin\smartdnsblock.exe" + File "${PROJECT_DIR}\third_party\newtonsoft\Newtonsoft.Json.dll" + File "${PROJECT_DIR}\src\electron\install_windows_service.bat" + + ; ExecToStack captures both stdout and stderr from the script, in the order output. + ; Set a (long) timeout in case the device never becomes visible to netsh. + ReadEnvStr $0 COMSPEC + nsExec::ExecToStack /timeout=180000 '$0 /c add_tap_device.bat' + + Pop $0 + Pop $1 + StrCmp $0 0 installservice + + ; The TAP device may have failed to install because the user did not want to + ; install the device driver. If so: + ; - tell the user that they need to install the driver + ; - skip the Sentry report + ; - quit + ; + ; When this happens, tapinstall.exe prints an error message like this: + ; UpdateDriverForPlugAndPlayDevices failed, GetLastError=-536870333 + ; + ; We can use the presence of that magic number to detect this case. + Var /GLOBAL DRIVER_FAILURE_MAGIC_NUMBER_INDEX + ${StrLoc} $DRIVER_FAILURE_MAGIC_NUMBER_INDEX $1 "536870333" ">" + + StrCmp $DRIVER_FAILURE_MAGIC_NUMBER_INDEX "" submitsentryreport + ; The term "device software" is the same as that used by the prompt, at least on Windows 7. + MessageBox MB_OK "Sorry, you must install the device software in order to use Outline. Please try \ + running the installer again." + Quit + + submitsentryreport: + MessageBox MB_OK "Sorry, we could not configure your system to connect to Outline. Please try \ + running the installer again. If you still cannot install Outline, please get in \ + touch with us and let us know that the TAP device failed to install with error code $0." + + ; Submit a Sentry error event. + ; + ; This will get bundled into an issue named "could not install TAP device" with the following + ; attributes: + ; - a single breadcrumb containing the output of add_tap_device.bat + ; - Windows version, as a tag named "os" with a value identical in most cases to what the + ; JavaScript Sentry client produces, e.g. "Windows 10.0.17134" + ; - client version + ; + ; Note: + ; - Sentry won't accept a breadcrumbs without a timestamp; fortunately, it accepts obviously + ; bogus values so we don't have to fetch the real time. + ; - Because nsExec::ExecToStack yields "NSIS strings" strings suitable for inclusion in, for + ; example, a MessageBox, e.g. "device not found$\ncommand failed", we must convert it to a + ; string that Sentry will like *and* can fit on one line, e.g. + ; "device not found\ncommand failed"; fortunately, StrFunc.nsh's StrNSISToIO does precisely + ; this. + ; - RELEASE and SENTRY_URL are defined in env.nsh which is generated at build time by + ; {package,release}_action.sh. + + ; TODO: Remove this once we figure out why/if breadcrumbs are being truncated. + Var /GLOBAL FAILURE_MESSAGE_LENGTH + StrLen $FAILURE_MESSAGE_LENGTH $1 + + ; http://nsis.sourceforge.net/Docs/StrFunc/StrFunc.txt + Var /GLOBAL FAILURE_MESSAGE + ${StrNSISToIO} $FAILURE_MESSAGE $1 + ${StrRep} $FAILURE_MESSAGE $FAILURE_MESSAGE '"' '\"' + + ${WinVerGetMajor} $R0 + ${WinVerGetMinor} $R1 + ${WinVerGetBuild} $R2 + + ; http://nsis.sourceforge.net/Inetc_plug-in#post + inetc::post '{\ + "message":"could not install TAP device ($0)",\ + "release":"${RELEASE}",\ + "tags":[\ + ["os", "Windows $R0.$R1.$R2"],\ + ["error_message_length", "$FAILURE_MESSAGE_LENGTH"]\ + ],\ + "breadcrumbs":[\ + {"timestamp":1, "message":"$FAILURE_MESSAGE"}\ + ]\ + }' /TOSTACK ${SENTRY_URL} /END + + Quit + + installservice: + + nsExec::Exec install_windows_service.bat + + nsExec::Exec "sc query OutlineService" + Pop $0 + StrCmp $0 0 success + ; TODO: Trigger a Sentry report for service installation failure, too, and revisit + ; the restart stuff in the TypeScript code. + MessageBox MB_OK "Sorry, we could not configure your system to connect to Outline. Please try \ + running the installer again. If you still cannot install Outline, please get in touch with us \ + and let us know that OutlineService failed to install." + Quit + + success: + +!macroend + +; TODO: Remove the TAP device on uninstall. This is impossible to implement safely +; with the bundled tapinstall.exe because it can only remove *all* devices +; having hwid tap0901 and these may include non-Outline devices. +!macro customUnInstall + nsExec::Exec "net stop OutlineService" + nsExec::Exec "sc delete OutlineService" !macroend \ No newline at end of file diff --git a/src/electron/electron-builder.json b/outline_client/src/electron/electron-builder.json similarity index 100% rename from src/electron/electron-builder.json rename to outline_client/src/electron/electron-builder.json diff --git a/src/electron/find_tap_device_name.bat b/outline_client/src/electron/find_tap_device_name.bat similarity index 100% rename from src/electron/find_tap_device_name.bat rename to outline_client/src/electron/find_tap_device_name.bat diff --git a/src/electron/go_vpn_tunnel.ts b/outline_client/src/electron/go_vpn_tunnel.ts similarity index 100% rename from src/electron/go_vpn_tunnel.ts rename to outline_client/src/electron/go_vpn_tunnel.ts diff --git a/src/electron/icons/mac/icon.icns b/outline_client/src/electron/icons/mac/icon.icns similarity index 100% rename from src/electron/icons/mac/icon.icns rename to outline_client/src/electron/icons/mac/icon.icns diff --git a/src/electron/icons/png/1024x1024.png b/outline_client/src/electron/icons/png/1024x1024.png similarity index 100% rename from src/electron/icons/png/1024x1024.png rename to outline_client/src/electron/icons/png/1024x1024.png diff --git a/src/electron/icons/png/128x128.png b/outline_client/src/electron/icons/png/128x128.png similarity index 100% rename from src/electron/icons/png/128x128.png rename to outline_client/src/electron/icons/png/128x128.png diff --git a/src/electron/icons/png/16x16.png b/outline_client/src/electron/icons/png/16x16.png similarity index 100% rename from src/electron/icons/png/16x16.png rename to outline_client/src/electron/icons/png/16x16.png diff --git a/src/electron/icons/png/24x24.png b/outline_client/src/electron/icons/png/24x24.png similarity index 100% rename from src/electron/icons/png/24x24.png rename to outline_client/src/electron/icons/png/24x24.png diff --git a/src/electron/icons/png/256x256.png b/outline_client/src/electron/icons/png/256x256.png similarity index 100% rename from src/electron/icons/png/256x256.png rename to outline_client/src/electron/icons/png/256x256.png diff --git a/src/electron/icons/png/32x32.png b/outline_client/src/electron/icons/png/32x32.png similarity index 100% rename from src/electron/icons/png/32x32.png rename to outline_client/src/electron/icons/png/32x32.png diff --git a/src/electron/icons/png/48x48.png b/outline_client/src/electron/icons/png/48x48.png similarity index 100% rename from src/electron/icons/png/48x48.png rename to outline_client/src/electron/icons/png/48x48.png diff --git a/src/electron/icons/png/512x512.png b/outline_client/src/electron/icons/png/512x512.png similarity index 100% rename from src/electron/icons/png/512x512.png rename to outline_client/src/electron/icons/png/512x512.png diff --git a/src/electron/icons/png/64x64.png b/outline_client/src/electron/icons/png/64x64.png similarity index 100% rename from src/electron/icons/png/64x64.png rename to outline_client/src/electron/icons/png/64x64.png diff --git a/src/electron/icons/win/icon.ico b/outline_client/src/electron/icons/win/icon.ico similarity index 100% rename from src/electron/icons/win/icon.ico rename to outline_client/src/electron/icons/win/icon.ico diff --git a/src/electron/index.ts b/outline_client/src/electron/index.ts similarity index 100% rename from src/electron/index.ts rename to outline_client/src/electron/index.ts diff --git a/src/electron/install_windows_service.bat b/outline_client/src/electron/install_windows_service.bat similarity index 100% rename from src/electron/install_windows_service.bat rename to outline_client/src/electron/install_windows_service.bat diff --git a/src/electron/preload.d.ts b/outline_client/src/electron/preload.d.ts similarity index 100% rename from src/electron/preload.d.ts rename to outline_client/src/electron/preload.d.ts diff --git a/src/electron/preload.ts b/outline_client/src/electron/preload.ts similarity index 100% rename from src/electron/preload.ts rename to outline_client/src/electron/preload.ts diff --git a/src/electron/process.ts b/outline_client/src/electron/process.ts similarity index 100% rename from src/electron/process.ts rename to outline_client/src/electron/process.ts diff --git a/src/electron/routing_service.ts b/outline_client/src/electron/routing_service.ts similarity index 100% rename from src/electron/routing_service.ts rename to outline_client/src/electron/routing_service.ts diff --git a/src/electron/start.action.mjs b/outline_client/src/electron/start.action.mjs similarity index 100% rename from src/electron/start.action.mjs rename to outline_client/src/electron/start.action.mjs diff --git a/src/electron/tsconfig.json b/outline_client/src/electron/tsconfig.json similarity index 100% rename from src/electron/tsconfig.json rename to outline_client/src/electron/tsconfig.json diff --git a/src/electron/tunnel_store.ts b/outline_client/src/electron/tunnel_store.ts similarity index 100% rename from src/electron/tunnel_store.ts rename to outline_client/src/electron/tunnel_store.ts diff --git a/src/electron/types/socks/index.d.ts b/outline_client/src/electron/types/socks/index.d.ts similarity index 100% rename from src/electron/types/socks/index.d.ts rename to outline_client/src/electron/types/socks/index.d.ts diff --git a/src/electron/vpn_tunnel.ts b/outline_client/src/electron/vpn_tunnel.ts similarity index 100% rename from src/electron/vpn_tunnel.ts rename to outline_client/src/electron/vpn_tunnel.ts diff --git a/src/electron/webpack_electron_main.mjs b/outline_client/src/electron/webpack_electron_main.mjs similarity index 100% rename from src/electron/webpack_electron_main.mjs rename to outline_client/src/electron/webpack_electron_main.mjs diff --git a/src/electron/windows/digicert-usb-config/eToken-macos.cfg b/outline_client/src/electron/windows/digicert-usb-config/eToken-macos.cfg similarity index 100% rename from src/electron/windows/digicert-usb-config/eToken-macos.cfg rename to outline_client/src/electron/windows/digicert-usb-config/eToken-macos.cfg diff --git a/src/electron/windows/digicert-usb-config/eToken-windows.cfg b/outline_client/src/electron/windows/digicert-usb-config/eToken-windows.cfg similarity index 100% rename from src/electron/windows/digicert-usb-config/eToken-windows.cfg rename to outline_client/src/electron/windows/digicert-usb-config/eToken-windows.cfg diff --git a/src/electron/windows/electron_builder_signing_plugin.cjs b/outline_client/src/electron/windows/electron_builder_signing_plugin.cjs similarity index 100% rename from src/electron/windows/electron_builder_signing_plugin.cjs rename to outline_client/src/electron/windows/electron_builder_signing_plugin.cjs diff --git a/src/electron/windows/sign_windows_executable.action.mjs b/outline_client/src/electron/windows/sign_windows_executable.action.mjs similarity index 100% rename from src/electron/windows/sign_windows_executable.action.mjs rename to outline_client/src/electron/windows/sign_windows_executable.action.mjs diff --git a/src/infrastructure/custom_error.ts b/outline_client/src/infrastructure/custom_error.ts similarity index 100% rename from src/infrastructure/custom_error.ts rename to outline_client/src/infrastructure/custom_error.ts diff --git a/src/infrastructure/electron/app_paths.ts b/outline_client/src/infrastructure/electron/app_paths.ts similarity index 100% rename from src/infrastructure/electron/app_paths.ts rename to outline_client/src/infrastructure/electron/app_paths.ts diff --git a/src/infrastructure/memory_storage.ts b/outline_client/src/infrastructure/memory_storage.ts similarity index 100% rename from src/infrastructure/memory_storage.ts rename to outline_client/src/infrastructure/memory_storage.ts diff --git a/src/infrastructure/timeout_promise.ts b/outline_client/src/infrastructure/timeout_promise.ts similarity index 100% rename from src/infrastructure/timeout_promise.ts rename to outline_client/src/infrastructure/timeout_promise.ts diff --git a/src/www/.storybook/localize.ts b/outline_client/src/www/.storybook/localize.ts similarity index 100% rename from src/www/.storybook/localize.ts rename to outline_client/src/www/.storybook/localize.ts diff --git a/src/www/.storybook/main.js b/outline_client/src/www/.storybook/main.js similarity index 100% rename from src/www/.storybook/main.js rename to outline_client/src/www/.storybook/main.js diff --git a/src/www/.storybook/preview-head.html b/outline_client/src/www/.storybook/preview-head.html similarity index 100% rename from src/www/.storybook/preview-head.html rename to outline_client/src/www/.storybook/preview-head.html diff --git a/src/www/.storybook/preview.js b/outline_client/src/www/.storybook/preview.js similarity index 100% rename from src/www/.storybook/preview.js rename to outline_client/src/www/.storybook/preview.js diff --git a/src/www/TODO.spec.ts b/outline_client/src/www/TODO.spec.ts similarity index 100% rename from src/www/TODO.spec.ts rename to outline_client/src/www/TODO.spec.ts diff --git a/src/www/app/app.spec.ts b/outline_client/src/www/app/app.spec.ts similarity index 100% rename from src/www/app/app.spec.ts rename to outline_client/src/www/app/app.spec.ts diff --git a/src/www/app/app.ts b/outline_client/src/www/app/app.ts similarity index 100% rename from src/www/app/app.ts rename to outline_client/src/www/app/app.ts diff --git a/src/www/app/clipboard.ts b/outline_client/src/www/app/clipboard.ts similarity index 100% rename from src/www/app/clipboard.ts rename to outline_client/src/www/app/clipboard.ts diff --git a/src/www/app/cordova_main.ts b/outline_client/src/www/app/cordova_main.ts similarity index 100% rename from src/www/app/cordova_main.ts rename to outline_client/src/www/app/cordova_main.ts diff --git a/src/www/app/electron_main.ts b/outline_client/src/www/app/electron_main.ts similarity index 100% rename from src/www/app/electron_main.ts rename to outline_client/src/www/app/electron_main.ts diff --git a/src/www/app/electron_outline_tunnel.ts b/outline_client/src/www/app/electron_outline_tunnel.ts similarity index 100% rename from src/www/app/electron_outline_tunnel.ts rename to outline_client/src/www/app/electron_outline_tunnel.ts diff --git a/src/www/app/environment.ts b/outline_client/src/www/app/environment.ts similarity index 100% rename from src/www/app/environment.ts rename to outline_client/src/www/app/environment.ts diff --git a/src/www/app/error_reporter.ts b/outline_client/src/www/app/error_reporter.ts similarity index 100% rename from src/www/app/error_reporter.ts rename to outline_client/src/www/app/error_reporter.ts diff --git a/src/www/app/fake_tunnel.ts b/outline_client/src/www/app/fake_tunnel.ts similarity index 100% rename from src/www/app/fake_tunnel.ts rename to outline_client/src/www/app/fake_tunnel.ts diff --git a/src/www/app/main.ts b/outline_client/src/www/app/main.ts similarity index 100% rename from src/www/app/main.ts rename to outline_client/src/www/app/main.ts diff --git a/src/www/app/outline_server_repository/access_key_serialization.ts b/outline_client/src/www/app/outline_server_repository/access_key_serialization.ts similarity index 100% rename from src/www/app/outline_server_repository/access_key_serialization.ts rename to outline_client/src/www/app/outline_server_repository/access_key_serialization.ts diff --git a/src/www/app/outline_server_repository/index.ts b/outline_client/src/www/app/outline_server_repository/index.ts similarity index 100% rename from src/www/app/outline_server_repository/index.ts rename to outline_client/src/www/app/outline_server_repository/index.ts diff --git a/src/www/app/outline_server_repository/outline_server_repository.spec.ts b/outline_client/src/www/app/outline_server_repository/outline_server_repository.spec.ts similarity index 100% rename from src/www/app/outline_server_repository/outline_server_repository.spec.ts rename to outline_client/src/www/app/outline_server_repository/outline_server_repository.spec.ts diff --git a/src/www/app/outline_server_repository/server.ts b/outline_client/src/www/app/outline_server_repository/server.ts similarity index 100% rename from src/www/app/outline_server_repository/server.ts rename to outline_client/src/www/app/outline_server_repository/server.ts diff --git a/src/www/app/platform.ts b/outline_client/src/www/app/platform.ts similarity index 100% rename from src/www/app/platform.ts rename to outline_client/src/www/app/platform.ts diff --git a/src/www/app/settings.spec.ts b/outline_client/src/www/app/settings.spec.ts similarity index 100% rename from src/www/app/settings.spec.ts rename to outline_client/src/www/app/settings.spec.ts diff --git a/src/www/app/settings.ts b/outline_client/src/www/app/settings.ts similarity index 100% rename from src/www/app/settings.ts rename to outline_client/src/www/app/settings.ts diff --git a/src/www/app/tunnel.ts b/outline_client/src/www/app/tunnel.ts similarity index 100% rename from src/www/app/tunnel.ts rename to outline_client/src/www/app/tunnel.ts diff --git a/src/www/app/updater.ts b/outline_client/src/www/app/updater.ts similarity index 100% rename from src/www/app/updater.ts rename to outline_client/src/www/app/updater.ts diff --git a/src/www/app/url_interceptor.ts b/outline_client/src/www/app/url_interceptor.ts similarity index 100% rename from src/www/app/url_interceptor.ts rename to outline_client/src/www/app/url_interceptor.ts diff --git a/src/www/app/vpn_installer.ts b/outline_client/src/www/app/vpn_installer.ts similarity index 100% rename from src/www/app/vpn_installer.ts rename to outline_client/src/www/app/vpn_installer.ts diff --git a/src/www/assets/brand-logo.png b/outline_client/src/www/assets/brand-logo.png similarity index 100% rename from src/www/assets/brand-logo.png rename to outline_client/src/www/assets/brand-logo.png diff --git a/src/www/assets/circle.png b/outline_client/src/www/assets/circle.png similarity index 100% rename from src/www/assets/circle.png rename to outline_client/src/www/assets/circle.png diff --git a/src/www/assets/icons/about.png b/outline_client/src/www/assets/icons/about.png similarity index 100% rename from src/www/assets/icons/about.png rename to outline_client/src/www/assets/icons/about.png diff --git a/src/www/assets/icons/add.png b/outline_client/src/www/assets/icons/add.png similarity index 100% rename from src/www/assets/icons/add.png rename to outline_client/src/www/assets/icons/add.png diff --git a/src/www/assets/icons/back.png b/outline_client/src/www/assets/icons/back.png similarity index 100% rename from src/www/assets/icons/back.png rename to outline_client/src/www/assets/icons/back.png diff --git a/src/www/assets/icons/change_language.png b/outline_client/src/www/assets/icons/change_language.png similarity index 100% rename from src/www/assets/icons/change_language.png rename to outline_client/src/www/assets/icons/change_language.png diff --git a/src/www/assets/icons/feedback.png b/outline_client/src/www/assets/icons/feedback.png similarity index 100% rename from src/www/assets/icons/feedback.png rename to outline_client/src/www/assets/icons/feedback.png diff --git a/src/www/assets/icons/help.png b/outline_client/src/www/assets/icons/help.png similarity index 100% rename from src/www/assets/icons/help.png rename to outline_client/src/www/assets/icons/help.png diff --git a/src/www/assets/icons/menu.png b/outline_client/src/www/assets/icons/menu.png similarity index 100% rename from src/www/assets/icons/menu.png rename to outline_client/src/www/assets/icons/menu.png diff --git a/src/www/assets/icons/outline.png b/outline_client/src/www/assets/icons/outline.png similarity index 100% rename from src/www/assets/icons/outline.png rename to outline_client/src/www/assets/icons/outline.png diff --git a/src/www/assets/icons/quit.png b/outline_client/src/www/assets/icons/quit.png similarity index 100% rename from src/www/assets/icons/quit.png rename to outline_client/src/www/assets/icons/quit.png diff --git a/src/www/assets/jigsaw-logo.png b/outline_client/src/www/assets/jigsaw-logo.png similarity index 100% rename from src/www/assets/jigsaw-logo.png rename to outline_client/src/www/assets/jigsaw-logo.png diff --git a/src/www/assets/jigsaw-logo.svg b/outline_client/src/www/assets/jigsaw-logo.svg similarity index 100% rename from src/www/assets/jigsaw-logo.svg rename to outline_client/src/www/assets/jigsaw-logo.svg diff --git a/src/www/assets/logo-nav.png b/outline_client/src/www/assets/logo-nav.png similarity index 100% rename from src/www/assets/logo-nav.png rename to outline_client/src/www/assets/logo-nav.png diff --git a/src/www/assets/material_icons.woff2 b/outline_client/src/www/assets/material_icons.woff2 similarity index 100% rename from src/www/assets/material_icons.woff2 rename to outline_client/src/www/assets/material_icons.woff2 diff --git a/src/www/assets/outline-client-logo.png b/outline_client/src/www/assets/outline-client-logo.png similarity index 100% rename from src/www/assets/outline-client-logo.png rename to outline_client/src/www/assets/outline-client-logo.png diff --git a/src/www/assets/outline-client-logo.svg b/outline_client/src/www/assets/outline-client-logo.svg similarity index 100% rename from src/www/assets/outline-client-logo.svg rename to outline_client/src/www/assets/outline-client-logo.svg diff --git a/src/www/assets/privacy-lock.png b/outline_client/src/www/assets/privacy-lock.png similarity index 100% rename from src/www/assets/privacy-lock.png rename to outline_client/src/www/assets/privacy-lock.png diff --git a/src/www/build.action.mjs b/outline_client/src/www/build.action.mjs similarity index 100% rename from src/www/build.action.mjs rename to outline_client/src/www/build.action.mjs diff --git a/src/www/favicon.ico b/outline_client/src/www/favicon.ico similarity index 100% rename from src/www/favicon.ico rename to outline_client/src/www/favicon.ico diff --git a/src/www/get_browser_webpack_config.mjs b/outline_client/src/www/get_browser_webpack_config.mjs similarity index 100% rename from src/www/get_browser_webpack_config.mjs rename to outline_client/src/www/get_browser_webpack_config.mjs diff --git a/src/www/index_cordova.html b/outline_client/src/www/index_cordova.html similarity index 100% rename from src/www/index_cordova.html rename to outline_client/src/www/index_cordova.html diff --git a/src/www/index_electron.html b/outline_client/src/www/index_electron.html similarity index 100% rename from src/www/index_electron.html rename to outline_client/src/www/index_electron.html diff --git a/src/www/karma.conf.js b/outline_client/src/www/karma.conf.js similarity index 100% rename from src/www/karma.conf.js rename to outline_client/src/www/karma.conf.js diff --git a/src/www/messages/af.json b/outline_client/src/www/messages/af.json similarity index 100% rename from src/www/messages/af.json rename to outline_client/src/www/messages/af.json diff --git a/src/www/messages/am.json b/outline_client/src/www/messages/am.json similarity index 100% rename from src/www/messages/am.json rename to outline_client/src/www/messages/am.json diff --git a/src/www/messages/ar.json b/outline_client/src/www/messages/ar.json similarity index 100% rename from src/www/messages/ar.json rename to outline_client/src/www/messages/ar.json diff --git a/src/www/messages/az.json b/outline_client/src/www/messages/az.json similarity index 100% rename from src/www/messages/az.json rename to outline_client/src/www/messages/az.json diff --git a/src/www/messages/bg.json b/outline_client/src/www/messages/bg.json similarity index 100% rename from src/www/messages/bg.json rename to outline_client/src/www/messages/bg.json diff --git a/src/www/messages/bn.json b/outline_client/src/www/messages/bn.json similarity index 100% rename from src/www/messages/bn.json rename to outline_client/src/www/messages/bn.json diff --git a/src/www/messages/bs.json b/outline_client/src/www/messages/bs.json similarity index 100% rename from src/www/messages/bs.json rename to outline_client/src/www/messages/bs.json diff --git a/src/www/messages/ca.json b/outline_client/src/www/messages/ca.json similarity index 100% rename from src/www/messages/ca.json rename to outline_client/src/www/messages/ca.json diff --git a/src/www/messages/cs.json b/outline_client/src/www/messages/cs.json similarity index 100% rename from src/www/messages/cs.json rename to outline_client/src/www/messages/cs.json diff --git a/src/www/messages/da.json b/outline_client/src/www/messages/da.json similarity index 100% rename from src/www/messages/da.json rename to outline_client/src/www/messages/da.json diff --git a/src/www/messages/de.json b/outline_client/src/www/messages/de.json similarity index 100% rename from src/www/messages/de.json rename to outline_client/src/www/messages/de.json diff --git a/src/www/messages/el.json b/outline_client/src/www/messages/el.json similarity index 100% rename from src/www/messages/el.json rename to outline_client/src/www/messages/el.json diff --git a/src/www/messages/en-GB.json b/outline_client/src/www/messages/en-GB.json similarity index 100% rename from src/www/messages/en-GB.json rename to outline_client/src/www/messages/en-GB.json diff --git a/src/www/messages/en.json b/outline_client/src/www/messages/en.json similarity index 100% rename from src/www/messages/en.json rename to outline_client/src/www/messages/en.json diff --git a/src/www/messages/es-419.json b/outline_client/src/www/messages/es-419.json similarity index 100% rename from src/www/messages/es-419.json rename to outline_client/src/www/messages/es-419.json diff --git a/src/www/messages/es.json b/outline_client/src/www/messages/es.json similarity index 100% rename from src/www/messages/es.json rename to outline_client/src/www/messages/es.json diff --git a/src/www/messages/et.json b/outline_client/src/www/messages/et.json similarity index 100% rename from src/www/messages/et.json rename to outline_client/src/www/messages/et.json diff --git a/src/www/messages/fa.json b/outline_client/src/www/messages/fa.json similarity index 100% rename from src/www/messages/fa.json rename to outline_client/src/www/messages/fa.json diff --git a/src/www/messages/fi.json b/outline_client/src/www/messages/fi.json similarity index 100% rename from src/www/messages/fi.json rename to outline_client/src/www/messages/fi.json diff --git a/src/www/messages/fil.json b/outline_client/src/www/messages/fil.json similarity index 100% rename from src/www/messages/fil.json rename to outline_client/src/www/messages/fil.json diff --git a/src/www/messages/fr.json b/outline_client/src/www/messages/fr.json similarity index 100% rename from src/www/messages/fr.json rename to outline_client/src/www/messages/fr.json diff --git a/src/www/messages/he.json b/outline_client/src/www/messages/he.json similarity index 100% rename from src/www/messages/he.json rename to outline_client/src/www/messages/he.json diff --git a/src/www/messages/hi.json b/outline_client/src/www/messages/hi.json similarity index 100% rename from src/www/messages/hi.json rename to outline_client/src/www/messages/hi.json diff --git a/src/www/messages/hr.json b/outline_client/src/www/messages/hr.json similarity index 100% rename from src/www/messages/hr.json rename to outline_client/src/www/messages/hr.json diff --git a/src/www/messages/hu.json b/outline_client/src/www/messages/hu.json similarity index 100% rename from src/www/messages/hu.json rename to outline_client/src/www/messages/hu.json diff --git a/src/www/messages/hy.json b/outline_client/src/www/messages/hy.json similarity index 100% rename from src/www/messages/hy.json rename to outline_client/src/www/messages/hy.json diff --git a/src/www/messages/id.json b/outline_client/src/www/messages/id.json similarity index 100% rename from src/www/messages/id.json rename to outline_client/src/www/messages/id.json diff --git a/src/www/messages/is.json b/outline_client/src/www/messages/is.json similarity index 100% rename from src/www/messages/is.json rename to outline_client/src/www/messages/is.json diff --git a/src/www/messages/it.json b/outline_client/src/www/messages/it.json similarity index 100% rename from src/www/messages/it.json rename to outline_client/src/www/messages/it.json diff --git a/src/www/messages/ja.json b/outline_client/src/www/messages/ja.json similarity index 100% rename from src/www/messages/ja.json rename to outline_client/src/www/messages/ja.json diff --git a/src/www/messages/ka.json b/outline_client/src/www/messages/ka.json similarity index 100% rename from src/www/messages/ka.json rename to outline_client/src/www/messages/ka.json diff --git a/src/www/messages/kk.json b/outline_client/src/www/messages/kk.json similarity index 100% rename from src/www/messages/kk.json rename to outline_client/src/www/messages/kk.json diff --git a/src/www/messages/km.json b/outline_client/src/www/messages/km.json similarity index 100% rename from src/www/messages/km.json rename to outline_client/src/www/messages/km.json diff --git a/src/www/messages/ko.json b/outline_client/src/www/messages/ko.json similarity index 100% rename from src/www/messages/ko.json rename to outline_client/src/www/messages/ko.json diff --git a/src/www/messages/lo.json b/outline_client/src/www/messages/lo.json similarity index 100% rename from src/www/messages/lo.json rename to outline_client/src/www/messages/lo.json diff --git a/src/www/messages/lt.json b/outline_client/src/www/messages/lt.json similarity index 100% rename from src/www/messages/lt.json rename to outline_client/src/www/messages/lt.json diff --git a/src/www/messages/lv.json b/outline_client/src/www/messages/lv.json similarity index 100% rename from src/www/messages/lv.json rename to outline_client/src/www/messages/lv.json diff --git a/src/www/messages/mk.json b/outline_client/src/www/messages/mk.json similarity index 100% rename from src/www/messages/mk.json rename to outline_client/src/www/messages/mk.json diff --git a/src/www/messages/mn.json b/outline_client/src/www/messages/mn.json similarity index 100% rename from src/www/messages/mn.json rename to outline_client/src/www/messages/mn.json diff --git a/src/www/messages/mr.json b/outline_client/src/www/messages/mr.json similarity index 100% rename from src/www/messages/mr.json rename to outline_client/src/www/messages/mr.json diff --git a/src/www/messages/ms.json b/outline_client/src/www/messages/ms.json similarity index 100% rename from src/www/messages/ms.json rename to outline_client/src/www/messages/ms.json diff --git a/src/www/messages/my.json b/outline_client/src/www/messages/my.json similarity index 100% rename from src/www/messages/my.json rename to outline_client/src/www/messages/my.json diff --git a/src/www/messages/ne.json b/outline_client/src/www/messages/ne.json similarity index 100% rename from src/www/messages/ne.json rename to outline_client/src/www/messages/ne.json diff --git a/src/www/messages/nl.json b/outline_client/src/www/messages/nl.json similarity index 100% rename from src/www/messages/nl.json rename to outline_client/src/www/messages/nl.json diff --git a/src/www/messages/no.json b/outline_client/src/www/messages/no.json similarity index 100% rename from src/www/messages/no.json rename to outline_client/src/www/messages/no.json diff --git a/src/www/messages/pl.json b/outline_client/src/www/messages/pl.json similarity index 100% rename from src/www/messages/pl.json rename to outline_client/src/www/messages/pl.json diff --git a/src/www/messages/pt-BR.json b/outline_client/src/www/messages/pt-BR.json similarity index 100% rename from src/www/messages/pt-BR.json rename to outline_client/src/www/messages/pt-BR.json diff --git a/src/www/messages/pt-PT.json b/outline_client/src/www/messages/pt-PT.json similarity index 100% rename from src/www/messages/pt-PT.json rename to outline_client/src/www/messages/pt-PT.json diff --git a/src/www/messages/ro.json b/outline_client/src/www/messages/ro.json similarity index 100% rename from src/www/messages/ro.json rename to outline_client/src/www/messages/ro.json diff --git a/src/www/messages/ru.json b/outline_client/src/www/messages/ru.json similarity index 100% rename from src/www/messages/ru.json rename to outline_client/src/www/messages/ru.json diff --git a/src/www/messages/si.json b/outline_client/src/www/messages/si.json similarity index 100% rename from src/www/messages/si.json rename to outline_client/src/www/messages/si.json diff --git a/src/www/messages/sk.json b/outline_client/src/www/messages/sk.json similarity index 100% rename from src/www/messages/sk.json rename to outline_client/src/www/messages/sk.json diff --git a/src/www/messages/sl.json b/outline_client/src/www/messages/sl.json similarity index 100% rename from src/www/messages/sl.json rename to outline_client/src/www/messages/sl.json diff --git a/src/www/messages/sq.json b/outline_client/src/www/messages/sq.json similarity index 100% rename from src/www/messages/sq.json rename to outline_client/src/www/messages/sq.json diff --git a/src/www/messages/sr-Latn.json b/outline_client/src/www/messages/sr-Latn.json similarity index 100% rename from src/www/messages/sr-Latn.json rename to outline_client/src/www/messages/sr-Latn.json diff --git a/src/www/messages/sr.json b/outline_client/src/www/messages/sr.json similarity index 100% rename from src/www/messages/sr.json rename to outline_client/src/www/messages/sr.json diff --git a/src/www/messages/sv.json b/outline_client/src/www/messages/sv.json similarity index 100% rename from src/www/messages/sv.json rename to outline_client/src/www/messages/sv.json diff --git a/src/www/messages/sw.json b/outline_client/src/www/messages/sw.json similarity index 100% rename from src/www/messages/sw.json rename to outline_client/src/www/messages/sw.json diff --git a/src/www/messages/ta.json b/outline_client/src/www/messages/ta.json similarity index 100% rename from src/www/messages/ta.json rename to outline_client/src/www/messages/ta.json diff --git a/src/www/messages/th.json b/outline_client/src/www/messages/th.json similarity index 100% rename from src/www/messages/th.json rename to outline_client/src/www/messages/th.json diff --git a/src/www/messages/tr.json b/outline_client/src/www/messages/tr.json similarity index 100% rename from src/www/messages/tr.json rename to outline_client/src/www/messages/tr.json diff --git a/src/www/messages/uk.json b/outline_client/src/www/messages/uk.json similarity index 100% rename from src/www/messages/uk.json rename to outline_client/src/www/messages/uk.json diff --git a/src/www/messages/ur.json b/outline_client/src/www/messages/ur.json similarity index 100% rename from src/www/messages/ur.json rename to outline_client/src/www/messages/ur.json diff --git a/src/www/messages/vi.json b/outline_client/src/www/messages/vi.json similarity index 100% rename from src/www/messages/vi.json rename to outline_client/src/www/messages/vi.json diff --git a/src/www/messages/zh-CN.json b/outline_client/src/www/messages/zh-CN.json similarity index 100% rename from src/www/messages/zh-CN.json rename to outline_client/src/www/messages/zh-CN.json diff --git a/src/www/messages/zh-TW.json b/outline_client/src/www/messages/zh-TW.json similarity index 100% rename from src/www/messages/zh-TW.json rename to outline_client/src/www/messages/zh-TW.json diff --git a/src/www/model/errors.ts b/outline_client/src/www/model/errors.ts similarity index 100% rename from src/www/model/errors.ts rename to outline_client/src/www/model/errors.ts diff --git a/src/www/model/events.spec.ts b/outline_client/src/www/model/events.spec.ts similarity index 100% rename from src/www/model/events.spec.ts rename to outline_client/src/www/model/events.spec.ts diff --git a/src/www/model/events.ts b/outline_client/src/www/model/events.ts similarity index 100% rename from src/www/model/events.ts rename to outline_client/src/www/model/events.ts diff --git a/src/www/model/server.ts b/outline_client/src/www/model/server.ts similarity index 100% rename from src/www/model/server.ts rename to outline_client/src/www/model/server.ts diff --git a/src/www/start.action.mjs b/outline_client/src/www/start.action.mjs similarity index 100% rename from src/www/start.action.mjs rename to outline_client/src/www/start.action.mjs diff --git a/src/www/storybook.action.mjs b/outline_client/src/www/storybook.action.mjs similarity index 100% rename from src/www/storybook.action.mjs rename to outline_client/src/www/storybook.action.mjs diff --git a/src/www/style.css b/outline_client/src/www/style.css similarity index 100% rename from src/www/style.css rename to outline_client/src/www/style.css diff --git a/src/www/test.action.mjs b/outline_client/src/www/test.action.mjs similarity index 100% rename from src/www/test.action.mjs rename to outline_client/src/www/test.action.mjs diff --git a/src/www/tsconfig.json b/outline_client/src/www/tsconfig.json similarity index 100% rename from src/www/tsconfig.json rename to outline_client/src/www/tsconfig.json diff --git a/src/www/types/clipboard.d.ts b/outline_client/src/www/types/clipboard.d.ts similarity index 100% rename from src/www/types/clipboard.d.ts rename to outline_client/src/www/types/clipboard.d.ts diff --git a/src/www/types/shims.d.ts b/outline_client/src/www/types/shims.d.ts similarity index 100% rename from src/www/types/shims.d.ts rename to outline_client/src/www/types/shims.d.ts diff --git a/src/www/types/webintents.d.ts b/outline_client/src/www/types/webintents.d.ts similarity index 100% rename from src/www/types/webintents.d.ts rename to outline_client/src/www/types/webintents.d.ts diff --git a/src/www/ui_components/about-view.js b/outline_client/src/www/ui_components/about-view.js similarity index 100% rename from src/www/ui_components/about-view.js rename to outline_client/src/www/ui_components/about-view.js diff --git a/src/www/ui_components/add-server-view.js b/outline_client/src/www/ui_components/add-server-view.js similarity index 100% rename from src/www/ui_components/add-server-view.js rename to outline_client/src/www/ui_components/add-server-view.js diff --git a/src/www/ui_components/app-root.js b/outline_client/src/www/ui_components/app-root.js similarity index 100% rename from src/www/ui_components/app-root.js rename to outline_client/src/www/ui_components/app-root.js diff --git a/src/www/ui_components/feedback-view.js b/outline_client/src/www/ui_components/feedback-view.js similarity index 100% rename from src/www/ui_components/feedback-view.js rename to outline_client/src/www/ui_components/feedback-view.js diff --git a/src/www/ui_components/language-view.js b/outline_client/src/www/ui_components/language-view.js similarity index 100% rename from src/www/ui_components/language-view.js rename to outline_client/src/www/ui_components/language-view.js diff --git a/src/www/ui_components/licenses-view.js b/outline_client/src/www/ui_components/licenses-view.js similarity index 100% rename from src/www/ui_components/licenses-view.js rename to outline_client/src/www/ui_components/licenses-view.js diff --git a/src/www/ui_components/licenses/README.md b/outline_client/src/www/ui_components/licenses/README.md similarity index 100% rename from src/www/ui_components/licenses/README.md rename to outline_client/src/www/ui_components/licenses/README.md diff --git a/src/www/ui_components/licenses/licenses.txt b/outline_client/src/www/ui_components/licenses/licenses.txt similarity index 100% rename from src/www/ui_components/licenses/licenses.txt rename to outline_client/src/www/ui_components/licenses/licenses.txt diff --git a/src/www/ui_components/licenses/third_party.sh b/outline_client/src/www/ui_components/licenses/third_party.sh similarity index 100% rename from src/www/ui_components/licenses/third_party.sh rename to outline_client/src/www/ui_components/licenses/third_party.sh diff --git a/src/www/ui_components/outline-icons.js b/outline_client/src/www/ui_components/outline-icons.js similarity index 100% rename from src/www/ui_components/outline-icons.js rename to outline_client/src/www/ui_components/outline-icons.js diff --git a/src/www/ui_components/privacy-view.js b/outline_client/src/www/ui_components/privacy-view.js similarity index 100% rename from src/www/ui_components/privacy-view.js rename to outline_client/src/www/ui_components/privacy-view.js diff --git a/src/www/ui_components/server-rename-dialog.js b/outline_client/src/www/ui_components/server-rename-dialog.js similarity index 100% rename from src/www/ui_components/server-rename-dialog.js rename to outline_client/src/www/ui_components/server-rename-dialog.js diff --git a/src/www/ui_components/user-comms-dialog.js b/outline_client/src/www/ui_components/user-comms-dialog.js similarity index 100% rename from src/www/ui_components/user-comms-dialog.js rename to outline_client/src/www/ui_components/user-comms-dialog.js diff --git a/src/www/views/servers_view/index.ts b/outline_client/src/www/views/servers_view/index.ts similarity index 100% rename from src/www/views/servers_view/index.ts rename to outline_client/src/www/views/servers_view/index.ts diff --git a/src/www/views/servers_view/server_connection_indicator/index.ts b/outline_client/src/www/views/servers_view/server_connection_indicator/index.ts similarity index 100% rename from src/www/views/servers_view/server_connection_indicator/index.ts rename to outline_client/src/www/views/servers_view/server_connection_indicator/index.ts diff --git a/src/www/views/servers_view/server_connection_indicator/stories.ts b/outline_client/src/www/views/servers_view/server_connection_indicator/stories.ts similarity index 100% rename from src/www/views/servers_view/server_connection_indicator/stories.ts rename to outline_client/src/www/views/servers_view/server_connection_indicator/stories.ts diff --git a/src/www/views/servers_view/server_list/index.ts b/outline_client/src/www/views/servers_view/server_list/index.ts similarity index 100% rename from src/www/views/servers_view/server_list/index.ts rename to outline_client/src/www/views/servers_view/server_list/index.ts diff --git a/src/www/views/servers_view/server_list/stories.ts b/outline_client/src/www/views/servers_view/server_list/stories.ts similarity index 100% rename from src/www/views/servers_view/server_list/stories.ts rename to outline_client/src/www/views/servers_view/server_list/stories.ts diff --git a/src/www/views/servers_view/server_list_item/index.ts b/outline_client/src/www/views/servers_view/server_list_item/index.ts similarity index 100% rename from src/www/views/servers_view/server_list_item/index.ts rename to outline_client/src/www/views/servers_view/server_list_item/index.ts diff --git a/src/www/views/servers_view/server_list_item/server_card/index.ts b/outline_client/src/www/views/servers_view/server_list_item/server_card/index.ts similarity index 100% rename from src/www/views/servers_view/server_list_item/server_card/index.ts rename to outline_client/src/www/views/servers_view/server_list_item/server_card/index.ts diff --git a/src/www/views/servers_view/server_list_item/server_card/stories.ts b/outline_client/src/www/views/servers_view/server_list_item/server_card/stories.ts similarity index 100% rename from src/www/views/servers_view/server_list_item/server_card/stories.ts rename to outline_client/src/www/views/servers_view/server_list_item/server_card/stories.ts diff --git a/src/www/webpack_base.mjs b/outline_client/src/www/webpack_base.mjs similarity index 100% rename from src/www/webpack_base.mjs rename to outline_client/src/www/webpack_base.mjs diff --git a/src/www/webpack_cordova.mjs b/outline_client/src/www/webpack_cordova.mjs similarity index 100% rename from src/www/webpack_cordova.mjs rename to outline_client/src/www/webpack_cordova.mjs diff --git a/src/www/webpack_css_rtl_loader.cjs b/outline_client/src/www/webpack_css_rtl_loader.cjs similarity index 100% rename from src/www/webpack_css_rtl_loader.cjs rename to outline_client/src/www/webpack_css_rtl_loader.cjs diff --git a/src/www/webpack_electron.mjs b/outline_client/src/www/webpack_electron.mjs similarity index 100% rename from src/www/webpack_electron.mjs rename to outline_client/src/www/webpack_electron.mjs diff --git a/src/www/webpack_test.mjs b/outline_client/src/www/webpack_test.mjs similarity index 100% rename from src/www/webpack_test.mjs rename to outline_client/src/www/webpack_test.mjs diff --git a/tools/OutlineService/OutlineService.sln b/outline_client/tools/OutlineService/OutlineService.sln similarity index 97% rename from tools/OutlineService/OutlineService.sln rename to outline_client/tools/OutlineService/OutlineService.sln index 9a40a06fab..0183a70546 100755 --- a/tools/OutlineService/OutlineService.sln +++ b/outline_client/tools/OutlineService/OutlineService.sln @@ -1,31 +1,31 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27703.2018 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OutlineService", "OutlineService\OutlineService.csproj", "{F39A4491-9868-4A71-9BE1-980FADE10AC9}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Debug|Any CPU.ActiveCfg = Release|x86 - {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Debug|Any CPU.Build.0 = Release|x86 - {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Debug|x86.ActiveCfg = Release|x86 - {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Debug|x86.Build.0 = Release|x86 - {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Release|Any CPU.Build.0 = Release|Any CPU - {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Release|x86.ActiveCfg = Release|x86 - {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Release|x86.Build.0 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {55663288-4604-4D50-8D4A-7222B9A2B6BF} - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27703.2018 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OutlineService", "OutlineService\OutlineService.csproj", "{F39A4491-9868-4A71-9BE1-980FADE10AC9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Debug|Any CPU.ActiveCfg = Release|x86 + {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Debug|Any CPU.Build.0 = Release|x86 + {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Debug|x86.ActiveCfg = Release|x86 + {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Debug|x86.Build.0 = Release|x86 + {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Release|Any CPU.Build.0 = Release|Any CPU + {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Release|x86.ActiveCfg = Release|x86 + {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {55663288-4604-4D50-8D4A-7222B9A2B6BF} + EndGlobalSection +EndGlobal diff --git a/tools/OutlineService/OutlineService/App.config b/outline_client/tools/OutlineService/OutlineService/App.config similarity index 97% rename from tools/OutlineService/OutlineService/App.config rename to outline_client/tools/OutlineService/OutlineService/App.config index 321649d338..5534e28762 100755 --- a/tools/OutlineService/OutlineService/App.config +++ b/outline_client/tools/OutlineService/OutlineService/App.config @@ -1,6 +1,6 @@ - - - - - + + + + + \ No newline at end of file diff --git a/tools/OutlineService/OutlineService/OutlineService.Designer.cs b/outline_client/tools/OutlineService/OutlineService/OutlineService.Designer.cs similarity index 96% rename from tools/OutlineService/OutlineService/OutlineService.Designer.cs rename to outline_client/tools/OutlineService/OutlineService/OutlineService.Designer.cs index 1be3f894c8..2c933d862d 100755 --- a/tools/OutlineService/OutlineService/OutlineService.Designer.cs +++ b/outline_client/tools/OutlineService/OutlineService/OutlineService.Designer.cs @@ -1,54 +1,54 @@ -// Copyright 2018 The Outline Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -namespace OutlineService -{ - partial class OutlineService - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - // - // OutlineService - // - this.ServiceName = "OutlineService"; - - } - - #endregion - } -} +// Copyright 2018 The Outline Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +namespace OutlineService +{ + partial class OutlineService + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + // + // OutlineService + // + this.ServiceName = "OutlineService"; + + } + + #endregion + } +} diff --git a/tools/OutlineService/OutlineService/OutlineService.cs b/outline_client/tools/OutlineService/OutlineService/OutlineService.cs similarity index 97% rename from tools/OutlineService/OutlineService/OutlineService.cs rename to outline_client/tools/OutlineService/OutlineService/OutlineService.cs index 3f2ad5f571..71da846c61 100755 --- a/tools/OutlineService/OutlineService/OutlineService.cs +++ b/outline_client/tools/OutlineService/OutlineService/OutlineService.cs @@ -1,1093 +1,1093 @@ -// Copyright 2018 The Outline Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.IO.Pipes; -using System.Linq; -using System.Net; -using System.Net.NetworkInformation; -using System.Net.Sockets; -using System.Runtime.InteropServices; -using System.Runtime.Serialization; -using System.Security.AccessControl; -using System.Security.Principal; -using System.ServiceProcess; -using System.Text; -using Newtonsoft.Json; - -/* - * Windows Service, part of the Outline Windows client, to configure routing. - * Modifying the system routes requires admin permissions, so this service must be installed - * and started as admin. - * - * The service listens on a named pipe and supports the following JSON API: - * - * Requests - * - * configureRouting: Modifies the system's routing table to route all traffic through the TAP device - * except that destined for proxyIp. Disables IPv6 traffic. - * { action: "configureRouting", parameters: {"proxyIp": , "isAutoConnect": "false" }} - * - * resetRouting: Restores the system's default routing. - * { action: "resetRouting"} - * - * Response - * - * { statusCode: , action: errorMessage?: } - * - * The service will send connection status updates if the pipe connection is kept - * open by the client. Such responses have the form: - * - * { statusCode: , action: "statusChanged", connectionStatus: } - * - * View logs with this PowerShell query: - * get-eventlog -logname Application -source OutlineService -newest 20 | format-table -property timegenerated,entrytype,message -autosize - */ -namespace OutlineService -{ - public partial class OutlineService : ServiceBase - { - private const string EVENT_LOG_SOURCE = "OutlineService"; - private const string EVENT_LOG_NAME = "Application"; - // Must be kept in sync with the Electron code. - private const string PIPE_NAME = "OutlineServicePipe"; - private const string TAP_DEVICE_NAME = "outline-tap0"; - private const string TAP_DEVICE_IP = "10.0.85.1"; - - private const string ACTION_CONFIGURE_ROUTING = "configureRouting"; - private const string ACTION_RESET_ROUTING = "resetRouting"; - private const string ACTION_STATUS_CHANGED = "statusChanged"; - private const string PARAM_PROXY_IP = "proxyIp"; - private const string PARAM_AUTO_CONNECT = "isAutoConnect"; - - private static string[] IPV4_SUBNETS = { "0.0.0.0/1", "128.0.0.0/1" }; - private static string[] IPV6_SUBNETS = { "fc00::/7", "2000::/4", "3000::/4" }; - private static string[] IPV4_RESERVED_SUBNETS = { - "0.0.0.0/8", - "10.0.0.0/8", - "100.64.0.0/10", - "169.254.0.0/16", - "172.16.0.0/12", - "192.0.0.0/24", - "192.0.2.0/24", - "192.31.196.0/24", - "192.52.193.0/24", - "192.88.99.0/24", - "192.168.0.0/16", - "192.175.48.0/24", - "198.18.0.0/15", - "198.51.100.0/24", - "203.0.113.0/24", - "240.0.0.0/4" - }; - private const string CMD_NETSH = "netsh"; - private const string CMD_ROUTE = "route"; - - private const uint BUFFER_SIZE_BYTES = 1024; - - private EventLog eventLog; - private NamedPipeServerStream pipe; - private string proxyIp; - private string gatewayIp; - private int gatewayInterfaceIndex; - - // Time, in ms, to wait until considering smartdnsblock.exe to have successfully launched. - private const int SMART_DNS_BLOCK_TIMEOUT_MS = 1000; - - // https://docs.microsoft.com/en-us/windows/desktop/api/ipmib/ns-ipmib-_mib_ipforwardrow - [StructLayout(LayoutKind.Sequential)] - internal class MIB_IPFORWARDROW - { - internal uint dwForwardDest; - internal uint dwForwardMask; - internal uint dwForwardPolicy; - internal uint dwForwardNextHop; - internal int dwForwardIfIndex; - internal uint dwForwardType; - internal uint dwForwardProto; - internal uint dwForwardAge; - internal uint dwForwardNextHopAS; - internal uint dwForwardMetric1; - internal uint dwForwardMetric2; - internal uint dwForwardMetric3; - internal uint dwForwardMetric4; - internal uint dwForwardMetric5; - } - - // https://docs.microsoft.com/en-us/windows/desktop/api/ipmib/ns-ipmib-_mib_ipforwardtable - // - // NOTE: Because of the variable-length array, Marshal.PtrToStructure - // will *not* populate the table field. Additionally, we have seen - // crashes following suspend/resume while trying to marshal this - // structure. See #GetSystemIpv4Gateway for more on this, as well - // as for how to traverse the table. - [StructLayout(LayoutKind.Sequential)] - internal class MIB_IPFORWARDTABLE - { - internal uint dwNumEntries; - internal MIB_IPFORWARDROW[] table; - }; - - // https://docs.microsoft.com/en-us/windows/desktop/api/iphlpapi/nf-iphlpapi-getipforwardtable - [DllImport("iphlpapi", CharSet = CharSet.Auto)] - private extern static int GetIpForwardTable(IntPtr pIpForwardTable, ref int pdwSize, bool bOrder); - - // https://docs.microsoft.com/en-us/windows/desktop/debug/system-error-codes--0-499- - private static int ERROR_INSUFFICIENT_BUFFER = 122; - - // Do as little as possible here because any error thrown will cause "net start" to fail - // without anything being added to the application log. - public OutlineService() - { - InitializeComponent(); - - eventLog = new EventLog(); - if (!EventLog.SourceExists(EVENT_LOG_SOURCE)) - { - EventLog.CreateEventSource(EVENT_LOG_SOURCE, EVENT_LOG_NAME); - } - eventLog.Source = EVENT_LOG_SOURCE; - eventLog.Log = EVENT_LOG_NAME; - } - - protected override void OnStart(string[] args) - { - eventLog.WriteEntry("OutlineService starting"); - NetworkChange.NetworkAddressChanged += - new NetworkAddressChangedEventHandler(NetworkAddressChanged); - CreatePipe(); - } - - protected override void OnStop() - { - eventLog.WriteEntry("OutlineService stopping"); - DestroyPipe(); - NetworkChange.NetworkAddressChanged -= NetworkAddressChanged; - } - - private void CreatePipe() - { - var pipeSecurity = new PipeSecurity(); - pipeSecurity.AddAccessRule(new PipeAccessRule(new SecurityIdentifier( - WellKnownSidType.CreatorOwnerSid, null), - PipeAccessRights.FullControl, AccessControlType.Allow)); - pipeSecurity.AddAccessRule(new PipeAccessRule(new SecurityIdentifier( - WellKnownSidType.AuthenticatedUserSid, null), - PipeAccessRights.ReadWrite, AccessControlType.Allow)); - - pipe = new NamedPipeServerStream(PIPE_NAME, PipeDirection.InOut, -1, PipeTransmissionMode.Message, - PipeOptions.Asynchronous, (int)BUFFER_SIZE_BYTES, (int)BUFFER_SIZE_BYTES, pipeSecurity); - pipe.BeginWaitForConnection(HandleConnection, null); - } - - private void DestroyPipe() - { - if (pipe == null) - { - return; - } - try - { - if (pipe.IsConnected) - { - pipe.Disconnect(); - } - pipe.Close(); - pipe = null; - } - catch (Exception e) - { - eventLog.WriteEntry($"Got an exception while destroying the pipe: {e.ToString()}", - EventLogEntryType.Warning); - } - } - - private void HandleConnection(IAsyncResult result) - { - eventLog.WriteEntry("Got incoming connection"); - - // Save the network config before we do anything. If the request fails - // it will be sent to the client for inclusion in Sentry reports. - var beforeNetworkInfo = GetNetworkInfo(); - - try - { - pipe.EndWaitForConnection(result); - // Keep the pipe connected to send connection status updates. - while (pipe.IsConnected) - { - ServiceResponse response = new ServiceResponse(); - var request = ReadRequest(); - if (request == null) - { - response.statusCode = (int)ErrorCode.GenericFailure; - } - else - { - response.action = request.action; - try - { - HandleRequest(request); - } - catch (Exception e) - { - response.statusCode = (int)ErrorCode.GenericFailure; - response.errorMessage = $"{e.Message} (network config: {beforeNetworkInfo})"; - eventLog.WriteEntry($"request failed: {e.Message}", EventLogEntryType.Error); - } - } - WriteResponse(response); - } - } - catch (Exception e) - { - eventLog.WriteEntry($"Failed to handle connection: {e.ToString()}", EventLogEntryType.Error); - } - finally - { - // Pipe streams are one-to-one connections. Recreate the pipe to handle subsequent requests. - DestroyPipe(); - CreatePipe(); - } - } - - private ServiceRequest ReadRequest() - { - var stringBuilder = new StringBuilder(); - var buffer = new byte[BUFFER_SIZE_BYTES]; - var memoryStream = new MemoryStream(); - do - { - var readBytes = pipe.Read(buffer, 0, buffer.Length); - memoryStream.Write(buffer, 0, readBytes); - } while (!pipe.IsMessageComplete); - var msg = Encoding.UTF8.GetString(buffer); - if (String.IsNullOrWhiteSpace(msg)) - { - eventLog.WriteEntry("Failed to read request", EventLogEntryType.Error); - return null; - } - eventLog.WriteEntry($"incoming message: {msg}"); - return ParseRequest(msg); - } - - private ServiceRequest ParseRequest(string jsonRequest) - { - try - { - return JsonConvert.DeserializeObject(jsonRequest); - } - catch (Exception e) - { - eventLog.WriteEntry($"Failed to parse request: {e.ToString()}"); - } - return null; - } - - private void WriteResponse(ServiceResponse response) - { - var jsonResponse = SerializeResponse(response); - if (jsonResponse == null) - { - eventLog.WriteEntry("Failed to serialize response.", EventLogEntryType.Error); - return; - } - eventLog.WriteEntry($"outgoing message: {jsonResponse}"); - var jsonResponseBytes = Encoding.UTF8.GetBytes(jsonResponse); - pipe.Write(jsonResponseBytes, 0, jsonResponseBytes.Length); - pipe.Flush(); - pipe.WaitForPipeDrain(); - } - - private string SerializeResponse(ServiceResponse response) - { - try - { - return JsonConvert.SerializeObject(response); - } - catch (Exception e) - { - eventLog.WriteEntry($"Failed to serialize response: {e.ToString()}"); - } - return null; - } - - private void HandleRequest(ServiceRequest request) - { - switch (request.action) - { - case ACTION_CONFIGURE_ROUTING: - ConfigureRouting(request.parameters[PARAM_PROXY_IP], Boolean.Parse(request.parameters[PARAM_AUTO_CONNECT])); - break; - case ACTION_RESET_ROUTING: - ResetRouting(proxyIp, gatewayInterfaceIndex); - break; - default: - eventLog.WriteEntry($"Received invalid request: {request.action}", EventLogEntryType.Error); - break; - } - } - - // Routes all traffic *except that destined for the proxy server* - // through the TAP device, creating the illusion of a system-wide VPN. - // - // The two key steps are: - // - Route all IPv4 traffic through the TAP device. - // - Find a gateway and route traffic *to the proxy server only* (a /32 - // mask) through it. - // - // Finding a gateway, in particular, is complex: for more on how it - // works, see #GetSystemIpv4Gateway. - // - // On top of this foundation, we take some steps to help prevent - // "leaking" traffic: - // - IPv6 traffic is "blocked", as Outline does not currently support - // servers on IPv6 addresses. - // - "Smart Multi-Homed Name Resolution" is disabled, as it can cause - // the system's "regular" - and potentially filtered - DNS servers to - // be used (particularly on Windows 10). - // - // Preventing leaks significantly complicates things. In particular, *if - // autostart is true and a gateway cannot be found then the IPv4 - // redirect and IPv6 block remain in place and no exception is thrown*. - // When a gateway re-appears following a network change (see - // #NetworkAddressChanged), we will reconnect. - // - // Lastly, a set of routes is added through the gateway *to non-routable - // ("LAN") addresses*. This allows common hardware such as Chromecast to - // function while Outline is active. - // - // Note: - // - Currently, this function does not "clean up" in the event of - // failure. Instead, we rely on the client to call ResetRouting - // following a connection failure. - // - There's limited protection against "nested connections", i.e. - // connecting to Outline while another VPN, e.g. OpenVPN, is already - // active. There's no simple API we can use to tell whether a VPN is - // already active and *given the difficulty in identifying this - // reliably* (multiple active network interfaces, for example, are - // very common, e.g. it happens - briefly - every time a user - // switches between a wired and wireless network) we err on the side - // of working. Since the user presumably knows whether another VPN is - // already active and *we make no persistent changes to the routing - // table* this seems reasonable. - // - // TODO: The client needs to handle certain autoconnect failures better, - // e.g. if IPv4 redirect fails then the client is not really in - // the reconnecting state; the system is leaking traffic. - public void ConfigureRouting(string proxyIp, bool isAutoConnect) - { - try - { - StartSmartDnsBlock(); - eventLog.WriteEntry($"started smartdnsblock"); - } - catch (Exception e) - { - throw new Exception($"could not start smartdnsblock: {e.Message}"); - } - - try - { - GetSystemIpv4Gateway(proxyIp); - - eventLog.WriteEntry($"connecting via gateway at {gatewayIp} on interface {gatewayInterfaceIndex}"); - - // Set the proxy escape route first to prevent a routing loop when capturing all IPv4 traffic. - try - { - AddOrUpdateProxyRoute(proxyIp, gatewayIp, gatewayInterfaceIndex); - eventLog.WriteEntry($"created route to proxy"); - } - catch (Exception e) - { - throw new Exception($"could not create route to proxy: {e.Message}"); - } - this.proxyIp = proxyIp; - - try - { - AddOrUpdateReservedSubnetBypass(gatewayIp, gatewayInterfaceIndex); - eventLog.WriteEntry($"created LAN bypass routes"); - } - catch (Exception e) - { - throw new Exception($"could not create LAN bypass routes: {e.Message}"); - } - } - catch (Exception e) when (isAutoConnect) - { - eventLog.WriteEntry($"could not reconnect during auto-connect: {e.Message}", EventLogEntryType.Warning); - } - - try - { - StopRoutingIpv6(); - eventLog.WriteEntry($"blocked IPv6 traffic"); - } - catch (Exception e) - { - throw new Exception($"could not block IPv6 traffic: {e.Message}"); - } - - try - { - AddIpv4TapRedirect(); - eventLog.WriteEntry($"redirected IPv4 traffic"); - } - catch (Exception e) - { - throw new Exception($"could not redirect IPv4 traffic: {e.Message}"); - } - } - - // Undoes and removes as many as possible of the routes and other - // changes to the system previously made by #ConfigureRouting. - // - // As per #ConfigureRouting, this function is largely idempodent: - // calling it multiple times in succession should be safe and result in - // the same system configuration. - // - // Notes: - // - *This function does not set any error code when any step fails*. - // It probably should, as the system may in some rare cases still be - // connected (or, worse but less likely, bricked). - // - If the service does not know the IP address of the proxy server - // then it *cannot remove that route*. This can happen if the service - // is restarted while Outline is connected *or* (more likely) if this - // function is called while Outline is not connected. This route is - // mostly harmless because it only affects traffic to the proxy and - // if/when the user reconnects to it the route will be updated. - public void ResetRouting(string proxyIp, int gatewayInterfaceIndex) - { - try - { - RemoveIpv4TapRedirect(); - eventLog.WriteEntry($"removed IPv4 redirect"); - } - catch (Exception e) - { - eventLog.WriteEntry($"failed to remove IPv4 redirect: {e.Message}", EventLogEntryType.Error); - } - - try - { - // This is only necessary when disconecting without network connectivity. - StartRoutingIpv4(); - } - catch (Exception) {} - - try - { - StartRoutingIpv6(); - eventLog.WriteEntry($"unblocked IPv6"); - } - catch (Exception e) - { - eventLog.WriteEntry($"failed to unblock IPv6: {e.Message}", EventLogEntryType.Error); - } - - if (proxyIp != null) - { - try - { - DeleteProxyRoute(proxyIp); - eventLog.WriteEntry($"deleted route to proxy"); - } - catch (Exception e) - { - eventLog.WriteEntry($"failed to delete route to proxy: {e.Message}", EventLogEntryType.Error); - } - this.proxyIp = null; - } - - try - { - RemoveReservedSubnetBypass(); - eventLog.WriteEntry($"deleted LAN bypass routes"); - } - catch (Exception e) - { - eventLog.WriteEntry($"failed to delete LAN bypass routes: {e.Message}", EventLogEntryType.Error); - } - this.gatewayIp = null; - - try - { - StopSmartDnsBlock(); - eventLog.WriteEntry($"stopped smartdnsblock"); - } - catch (Exception e) - { - eventLog.WriteEntry($"failed to stop smartdnsblock: {e.Message}", - EventLogEntryType.Warning); - } - } - - // Disable "Smart Multi-Homed Name Resolution", to ensure the system uses only the - // (non-filtered) DNS server(s) associated with the TAP device. - // - // Notes: - // - To show the current firewall rules: - // netsh wfp show filters - // - This website is an easy way to quickly verify there are no DNS leaks: - // https://ipleak.net/ - // - Because .Net provides *no way* to associate the new process with this one, the - // new process will continue to run even if this service is interrupted or crashes. - // Fortunately, since the changes it makes are *not* persistent, the system can, in - // the worst case, be fixed by rebooting. - private void StartSmartDnsBlock() - { - // smartdnsblock.exe must be a sibling of OutlineService.exe. - Process smartDnsBlock = new Process(); - smartDnsBlock.StartInfo.FileName = new DirectoryInfo(Process.GetCurrentProcess().MainModule.FileName).Parent.FullName + - Path.DirectorySeparatorChar + "smartdnsblock.exe"; - smartDnsBlock.StartInfo.UseShellExecute = false; - - smartDnsBlock.StartInfo.RedirectStandardError = true; - smartDnsBlock.StartInfo.RedirectStandardOutput = true; - - // This is for Windows 7: without it, the process exits immediately, presumably - // because stdin isn't connected to anything: - // https://github.com/Jigsaw-Code/outline-client/issues/415 - // - // This seems to make no difference on Windows 8 and 10. - smartDnsBlock.StartInfo.RedirectStandardInput = true; - - ArrayList stdout = new ArrayList(); - ArrayList stderr = new ArrayList(); - smartDnsBlock.OutputDataReceived += (object sender, DataReceivedEventArgs e) => - { - if (!String.IsNullOrEmpty(e.Data)) - { - stdout.Add(e.Data); - } - }; - smartDnsBlock.ErrorDataReceived += (object sender, DataReceivedEventArgs e) => - { - if (!String.IsNullOrEmpty(e.Data)) - { - stderr.Add(e.Data); - } - }; - - try - { - smartDnsBlock.Start(); - smartDnsBlock.BeginOutputReadLine(); - smartDnsBlock.BeginErrorReadLine(); - } - catch (Exception e) - { - throw new Exception($"could not launch smartdnsblock at {smartDnsBlock.StartInfo.FileName}: { e.Message}"); - } - - // This does *not* throw if the process is still running after Nms. - smartDnsBlock.WaitForExit(SMART_DNS_BLOCK_TIMEOUT_MS); - if (smartDnsBlock.HasExited) - { - throw new Exception($"smartdnsblock failed " + $"(stdout: {String.Join(Environment.NewLine, stdout.ToArray())}, " + - $"(stderr: {String.Join(Environment.NewLine, stderr.ToArray())})"); - } - } - - private void StopSmartDnsBlock() - { - try - { - RunCommand("powershell", "stop-process -name smartdnsblock"); - } - catch (Exception e) - { - throw new Exception($"could not stop smartdnsblock: {e.Message}"); - } - } - - private void AddOrUpdateProxyRoute(string proxyIp, string gatewayIp, int gatewayInterfaceIndex) - { - // "netsh interface ipv4 set route" does *not* work for us here - // because it can only be used to change a route's *metric*. - try - { - RunCommand(CMD_ROUTE, $"change {proxyIp} {gatewayIp} if {gatewayInterfaceIndex}"); - } - catch (Exception) - { - RunCommand(CMD_NETSH, $"interface ipv4 add route {proxyIp}/32 nexthop={gatewayIp} interface=\"{gatewayInterfaceIndex}\" metric=0 store=active"); - } - } - - private void DeleteProxyRoute(string proxyIp) - { - // "route" doesn't need to know on which interface or through which - // gateway the route was created. - RunCommand(CMD_ROUTE, $"delete {proxyIp}"); - } - - // Route IPv4 traffic through the TAP device. Instead of deleting the - // default IPv4 gateway (0.0.0.0/0), we resort to creating two more - // specific routes (see IPV4_SUBNETS) that take precedence over the - // default gateway. This way, we need not worry about the default - // gateway being recreated with a lower metric upon device sleep. - // - // This 'hack' was inspired by OpenVPN; see: - // https://github.com/OpenVPN/openvpn3/commit/d08cc059e7132a3d3aee3dcd946fce4c35b1ced3#diff-1d76f0fd7ec04c6d1398288214a879c5R358 - // - // TODO: If these routes exist on a gateway that's not our TAP device, - // it might be a good signal that OpenVPN is active? - private void AddIpv4TapRedirect() - { - foreach (string subnet in IPV4_SUBNETS) - { - try - { - RunCommand(CMD_NETSH, $"interface ipv4 add route {subnet} nexthop={TAP_DEVICE_IP} interface={TAP_DEVICE_NAME} metric=0 store=active"); - } - catch (Exception) - { - RunCommand(CMD_NETSH, $"interface ipv4 set route {subnet} nexthop={TAP_DEVICE_IP} interface={TAP_DEVICE_NAME} metric=0 store=active"); - } - } - } - - private void RemoveIpv4TapRedirect() - { - foreach (string subnet in IPV4_SUBNETS) - { - RunCommand(CMD_NETSH, $"interface ipv4 delete route {subnet} interface={TAP_DEVICE_NAME}"); - } - } - - private void StartRoutingIpv4() - { - foreach (string subnet in IPV4_SUBNETS) - { - RunCommand(CMD_NETSH, $"interface ipv4 delete route {subnet} interface={NetworkInterface.LoopbackInterfaceIndex}"); - } - } - - private void StopRoutingIpv4() - { - foreach (string subnet in IPV4_SUBNETS) - { - try - { - RunCommand(CMD_NETSH, $"interface ipv4 add route {subnet} interface={NetworkInterface.LoopbackInterfaceIndex} metric=0 store=active"); - } - catch (Exception) - { - RunCommand(CMD_NETSH, $"interface ipv4 set route {subnet} interface={NetworkInterface.LoopbackInterfaceIndex} metric=0 store=active"); - } - } - } - - private void StartRoutingIpv6() - { - foreach (string subnet in IPV6_SUBNETS) - { - RunCommand(CMD_NETSH, $"interface ipv6 delete route {subnet} interface={NetworkInterface.IPv6LoopbackInterfaceIndex}"); - } - } - - // Outline does not currently support IPv6, so we resort to disabling it while the VPN is active to - // prevent leakage. Removing the default IPv6 gateway is not enough since it gets re-created - // through router advertisements and DHCP (disabling these or IPv6 routing altogether requires a - // system reboot). Thus, we resort to creating three IPv6 routes (see IPV6_SUBNETS) to the loopback - // interface that are more specific than the default route, causing IPv6 traffic to get dropped. - private void StopRoutingIpv6() - { - foreach (string subnet in IPV6_SUBNETS) - { - try - { - RunCommand(CMD_NETSH, $"interface ipv6 add route {subnet} interface={NetworkInterface.IPv6LoopbackInterfaceIndex} metric=0 store=active"); - } - catch (Exception) - { - RunCommand(CMD_NETSH, $"interface ipv6 set route {subnet} interface={NetworkInterface.IPv6LoopbackInterfaceIndex} metric=0 store=active"); - } - } - } - - // Routes reserved and private subnets through the default gateway so they bypass the VPN. - private void AddOrUpdateReservedSubnetBypass(string gatewayIp, int gatewayInterfaceIndex) - { - foreach (string subnet in IPV4_RESERVED_SUBNETS) - { - try - { - RunCommand(CMD_ROUTE, $"change {subnet} {gatewayIp} if {gatewayInterfaceIndex}"); - } - catch (Exception) - { - RunCommand(CMD_NETSH, $"interface ipv4 add route {subnet} nexthop={gatewayIp} interface=\"{gatewayInterfaceIndex}\" metric=0 store=active"); - } - } - } - - // Removes reserved subnet routes created to bypass the VPN. - private void RemoveReservedSubnetBypass() - { - foreach (string subnet in IPV4_RESERVED_SUBNETS) - { - RunCommand(CMD_ROUTE, $"delete {subnet}"); - } - } - - // Runs a shell command synchronously. - private void RunCommand(string cmd, string args) - { - Console.WriteLine($"running command: {cmd} {args}"); - - var startInfo = new ProcessStartInfo(cmd); - startInfo.Arguments = args; - startInfo.UseShellExecute = false; - startInfo.RedirectStandardError = true; - startInfo.RedirectStandardOutput = true; - startInfo.CreateNoWindow = true; - - Process p = new Process(); - var stdout = new StringBuilder(); - var stderr = new StringBuilder(); - p.OutputDataReceived += (object sender, DataReceivedEventArgs e) => - { - if (e == null || String.IsNullOrWhiteSpace(e.Data)) - { - return; - } - stdout.Append(e.Data); - }; - p.ErrorDataReceived += (object sender, DataReceivedEventArgs e) => - { - if (e == null || String.IsNullOrWhiteSpace(e.Data)) - { - return; - } - stderr.Append(e.Data); - }; - p.StartInfo = startInfo; - p.Start(); - p.BeginOutputReadLine(); - p.BeginErrorReadLine(); - p.WaitForExit(); - - // "route" is weird and always exits with zero: we have to examine - // stderr to detect its errors. - if (p.ExitCode != 0 || stderr.ToString().Length > 0) - { - // NOTE: Do *not* add args to this error message because it's piped - // back to the client for inclusion in Sentry reports and - // effectively contain access keys. - throw new Exception($"command exited with {p.ExitCode} " + - $"(stdout: {stdout.ToString()}, stderr: {stderr.ToString()})"); - } - } - - // Searches the system's routing table for the best route to the - // specified IP address *that does not route through the TAP device*. - // - // That last requirement - ignoring the TAP device - is what prevents us - // from simply calling GetBestRoute: other than that, it does all the - // work of finding the lowest-weighted gateway to the destination IP. - // - // NOTE: This function does not *always* find the best gateway: it - // currently only considers "default" gateways (0.0.0.0) which may not - // work in some rare cases. Several re-implementations of the Windows - // API illustrate how we could more closely match GetBestRoute: - // - https://github.com/wine-mirror/wine/blob/master/dlls/iphlpapi/iphlpapi_main.c - // - https://github.com/reactos/reactos/blob/master/dll/win32/iphlpapi/iphlpapi_main.c - private void GetSystemIpv4Gateway(string proxyIp) - { - gatewayIp = null; - gatewayInterfaceIndex = -1; - - int tapInterfaceIndex; - try - { - tapInterfaceIndex = NetworkInterface.GetAllNetworkInterfaces() - .Where(i => i.Name == TAP_DEVICE_NAME) - .FirstOrDefault() - .GetIPProperties() - .GetIPv4Properties().Index; - } - catch (Exception) - { - throw new Exception("TAP device not found"); - } - - // Some marshalling craziness follows: we have to first ask - // GetIpForwardTable how much memory is required to hold the routing - // table before calling it again to actually return us the table; - // once we have the table, we have to iterate over the rows - // (thankfully, MIB_IPFORWARDROW marshalls easily). - int bufferSize = 0; - if (GetIpForwardTable(IntPtr.Zero, ref bufferSize, true) != ERROR_INSUFFICIENT_BUFFER) - { - throw new Exception("could not fetch routing table"); - } - var buffer = Marshal.AllocHGlobal(bufferSize); - if (GetIpForwardTable(buffer, ref bufferSize, true) != 0) - { - Marshal.FreeHGlobal(buffer); - throw new Exception("could not fetch routing table"); - } - - // NOTE: We deliberately *do not marshal the entire - // MIB_IPFORWARDTABLE* owing to unexplained crashes following - // suspend/resume. Fortunately, since that structure is - // logically just a DWORD followed by an array, this entails - // little extra work. - var numEntries = Marshal.ReadInt32(buffer); - MIB_IPFORWARDROW bestRow = null; - var rowPtr = buffer + Marshal.SizeOf(numEntries); - for (int i = 0; i < numEntries; i++) - { - MIB_IPFORWARDROW row = (MIB_IPFORWARDROW)Marshal.PtrToStructure(rowPtr, typeof(MIB_IPFORWARDROW)); - - // Must be a gateway (see note above on how we can improve this). - if (row.dwForwardDest != 0) - { - continue; - } - - // Must not be the TAP device. - if (row.dwForwardIfIndex == tapInterfaceIndex) - { - continue; - } - - if (bestRow == null || row.dwForwardMetric1 < bestRow.dwForwardMetric1) - { - bestRow = row; - } - - rowPtr += Marshal.SizeOf(typeof(MIB_IPFORWARDROW)); - } - - Marshal.FreeHGlobal(buffer); - - if (bestRow == null) - { - throw new Exception("no gateway found"); - } - - gatewayIp = new IPAddress(BitConverter.GetBytes(bestRow.dwForwardNextHop)).ToString(); - gatewayInterfaceIndex = bestRow.dwForwardIfIndex; - } - - // Updates, if Outline is connected, the routing table to reflect a new - // gateway. - // - // There's really just one thing to do when the gateway changes: update - // the (direct) route to the proxy server to route through the new - // gateway. If there is no gateway, e.g. because the system has lost - // network connectivity, notify the client and keep the IPv4 redirect - // and IPv6 block in place: this helps prevent leaking traffic. - // - // Notes: - // - *This function must not throw*. If it does, the handler is unset. - // - This function also updates two further sets of routes: the LAN - // bypass routes (which must route through the gateway) and the IPv4 - // redirect routes (which "fall back" to the system gateway once the - // TAP device temporarily disappears due to tun2socks' exit). - // - The NetworkChange.NetworkAddressChanged callback is *extremely - // noisy*. In particular, it seems to be called twice for every - // change to the routing table. There does not seem to be any useful - // information in the supplied EventArgs. This is partly why we don't - // touch the routing table unless the gateway has actually changed. - // - This function may be called while #ConfigureRouting is still - // running. This is partly why we exit early (at the top) if we don't - // think Outline is connected. - private void NetworkAddressChanged(object sender, EventArgs evt) - { - if (proxyIp == null) - { - eventLog.WriteEntry("network changed but Outline is not connected - doing nothing"); - return; - } - - var previousGatewayIp = gatewayIp; - var previousGatewayInterfaceIndex = gatewayInterfaceIndex; - - try - { - GetSystemIpv4Gateway(proxyIp); - } - catch (Exception e) - { - eventLog.WriteEntry($"network changed but no gateway found: {e.Message}"); - } - - if (previousGatewayIp == gatewayIp && previousGatewayInterfaceIndex == gatewayInterfaceIndex) - { - // Only send on actual change, to prevent duplicate notifications (mostly - // harmless but can make debugging harder). - eventLog.WriteEntry($"network changed but gateway and interface stayed the same"); - return; - } - else if (gatewayIp == null) - { - SendConnectionStatusChange(ConnectionStatus.Reconnecting); - - // Stop capturing IPv4 traffic in order to prevent a routing loop in the TAP device. - // Redirect IPv4 traffic to the loopback interface instead to avoid leaking traffic when - // the network becomes available. - try - { - StopRoutingIpv4(); - RemoveIpv4TapRedirect(); - eventLog.WriteEntry($"stopped routing IPv4 traffic"); - } - catch (Exception e) - { - eventLog.WriteEntry($"failed to stop routing IPv4: {e.Message}", EventLogEntryType.Error); - } - return; - } - - eventLog.WriteEntry($"network changed - gateway is now {gatewayIp} on interface {gatewayInterfaceIndex}"); - - // Add the proxy escape route before capturing IPv4 traffic to prevent a routing loop in the TAP device. - try - { - AddOrUpdateProxyRoute(proxyIp, gatewayIp, gatewayInterfaceIndex); - eventLog.WriteEntry($"updated route to proxy"); - } - catch (Exception e) - { - eventLog.WriteEntry($"could not update route to proxy: {e.Message}"); - return; - } - - try - { - AddIpv4TapRedirect(); - StartRoutingIpv4(); - eventLog.WriteEntry($"refreshed IPv4 redirect"); - } - catch (Exception e) - { - eventLog.WriteEntry($"could not refresh IPv4 redirect: {e.Message}"); - return; - } - - // Send the status update now that the full-system VPN is connected. - SendConnectionStatusChange(ConnectionStatus.Connected); - - try - { - AddOrUpdateReservedSubnetBypass(gatewayIp, gatewayInterfaceIndex); - eventLog.WriteEntry($"updated LAN bypass routes"); - } - catch (Exception e) - { - // TODO: This isn't quite right: because we successfully updated - // the route to the proxy, the client *is* connected; it's - // just not "fully" connected, in the way we like. We - // should distinguish between "cannot reconnect right now, - // because no internet" and "cannot reconnect because - // netsh commands are failing". - eventLog.WriteEntry($"could not update LAN bypass routes: {e.Message}"); - return; - } - } - - // Writes the connection status to the pipe, if it is connected. - private void SendConnectionStatusChange(ConnectionStatus status) - { - if (pipe == null || !pipe.IsConnected) - { - eventLog.WriteEntry("Cannot send connection status change, pipe not connected.", EventLogEntryType.Error); - return; - } - ServiceResponse response = new ServiceResponse(); - response.action = ACTION_STATUS_CHANGED; - response.statusCode = (int)ErrorCode.Success; - response.connectionStatus = (int)status; - try - { - WriteResponse(response); - } - catch (Exception e) - { - eventLog.WriteEntry($"Failed to send connection status change: {e.Message}"); - } - } - - public string GetNetworkInfo() - { - return String.Join(", ", NetworkInterface.GetAllNetworkInterfaces() - .Select(a => this.GetAdapterInfo(a))); - } - - private string GetAdapterInfo(NetworkInterface adapter) - { - var numIpv4Gateways = adapter.GetIPProperties().GatewayAddresses - .Select(g => g.Address) - .Where(a => a.AddressFamily == AddressFamily.InterNetwork) - .Count(); - var numIpv6Gateways = adapter.GetIPProperties().GatewayAddresses - .Select(g => g.Address) - .Where(a => a.AddressFamily == AddressFamily.InterNetworkV6) - .Count(); - - return $"{adapter.Name} ({adapter.OperationalStatus}): " + ( - adapter.Supports(NetworkInterfaceComponent.IPv4) ? - $"{numIpv4Gateways} x ipv4 gateways" : - "ipv4 disabled") + ", " + ( - adapter.Supports(NetworkInterfaceComponent.IPv6) ? - $"{numIpv6Gateways} x ipv6 gateways" : - "ipv6 disabled"); - } - } - - [DataContract] - internal class ServiceRequest - { - [DataMember] - internal string action; - [DataMember] - internal Dictionary parameters; - } - - [DataContract] - internal class ServiceResponse - { - [DataMember] - internal string action; - [DataMember] - internal int statusCode; - [DataMember] - internal string errorMessage; - [DataMember] - internal int connectionStatus; - } - - public enum ErrorCode - { - Success = 0, - GenericFailure = 1 - } - - public enum ConnectionStatus - { - Connected = 0, - Disconnected = 1, - Reconnecting = 2 - } -} +// Copyright 2018 The Outline Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.IO.Pipes; +using System.Linq; +using System.Net; +using System.Net.NetworkInformation; +using System.Net.Sockets; +using System.Runtime.InteropServices; +using System.Runtime.Serialization; +using System.Security.AccessControl; +using System.Security.Principal; +using System.ServiceProcess; +using System.Text; +using Newtonsoft.Json; + +/* + * Windows Service, part of the Outline Windows client, to configure routing. + * Modifying the system routes requires admin permissions, so this service must be installed + * and started as admin. + * + * The service listens on a named pipe and supports the following JSON API: + * + * Requests + * + * configureRouting: Modifies the system's routing table to route all traffic through the TAP device + * except that destined for proxyIp. Disables IPv6 traffic. + * { action: "configureRouting", parameters: {"proxyIp": , "isAutoConnect": "false" }} + * + * resetRouting: Restores the system's default routing. + * { action: "resetRouting"} + * + * Response + * + * { statusCode: , action: errorMessage?: } + * + * The service will send connection status updates if the pipe connection is kept + * open by the client. Such responses have the form: + * + * { statusCode: , action: "statusChanged", connectionStatus: } + * + * View logs with this PowerShell query: + * get-eventlog -logname Application -source OutlineService -newest 20 | format-table -property timegenerated,entrytype,message -autosize + */ +namespace OutlineService +{ + public partial class OutlineService : ServiceBase + { + private const string EVENT_LOG_SOURCE = "OutlineService"; + private const string EVENT_LOG_NAME = "Application"; + // Must be kept in sync with the Electron code. + private const string PIPE_NAME = "OutlineServicePipe"; + private const string TAP_DEVICE_NAME = "outline-tap0"; + private const string TAP_DEVICE_IP = "10.0.85.1"; + + private const string ACTION_CONFIGURE_ROUTING = "configureRouting"; + private const string ACTION_RESET_ROUTING = "resetRouting"; + private const string ACTION_STATUS_CHANGED = "statusChanged"; + private const string PARAM_PROXY_IP = "proxyIp"; + private const string PARAM_AUTO_CONNECT = "isAutoConnect"; + + private static string[] IPV4_SUBNETS = { "0.0.0.0/1", "128.0.0.0/1" }; + private static string[] IPV6_SUBNETS = { "fc00::/7", "2000::/4", "3000::/4" }; + private static string[] IPV4_RESERVED_SUBNETS = { + "0.0.0.0/8", + "10.0.0.0/8", + "100.64.0.0/10", + "169.254.0.0/16", + "172.16.0.0/12", + "192.0.0.0/24", + "192.0.2.0/24", + "192.31.196.0/24", + "192.52.193.0/24", + "192.88.99.0/24", + "192.168.0.0/16", + "192.175.48.0/24", + "198.18.0.0/15", + "198.51.100.0/24", + "203.0.113.0/24", + "240.0.0.0/4" + }; + private const string CMD_NETSH = "netsh"; + private const string CMD_ROUTE = "route"; + + private const uint BUFFER_SIZE_BYTES = 1024; + + private EventLog eventLog; + private NamedPipeServerStream pipe; + private string proxyIp; + private string gatewayIp; + private int gatewayInterfaceIndex; + + // Time, in ms, to wait until considering smartdnsblock.exe to have successfully launched. + private const int SMART_DNS_BLOCK_TIMEOUT_MS = 1000; + + // https://docs.microsoft.com/en-us/windows/desktop/api/ipmib/ns-ipmib-_mib_ipforwardrow + [StructLayout(LayoutKind.Sequential)] + internal class MIB_IPFORWARDROW + { + internal uint dwForwardDest; + internal uint dwForwardMask; + internal uint dwForwardPolicy; + internal uint dwForwardNextHop; + internal int dwForwardIfIndex; + internal uint dwForwardType; + internal uint dwForwardProto; + internal uint dwForwardAge; + internal uint dwForwardNextHopAS; + internal uint dwForwardMetric1; + internal uint dwForwardMetric2; + internal uint dwForwardMetric3; + internal uint dwForwardMetric4; + internal uint dwForwardMetric5; + } + + // https://docs.microsoft.com/en-us/windows/desktop/api/ipmib/ns-ipmib-_mib_ipforwardtable + // + // NOTE: Because of the variable-length array, Marshal.PtrToStructure + // will *not* populate the table field. Additionally, we have seen + // crashes following suspend/resume while trying to marshal this + // structure. See #GetSystemIpv4Gateway for more on this, as well + // as for how to traverse the table. + [StructLayout(LayoutKind.Sequential)] + internal class MIB_IPFORWARDTABLE + { + internal uint dwNumEntries; + internal MIB_IPFORWARDROW[] table; + }; + + // https://docs.microsoft.com/en-us/windows/desktop/api/iphlpapi/nf-iphlpapi-getipforwardtable + [DllImport("iphlpapi", CharSet = CharSet.Auto)] + private extern static int GetIpForwardTable(IntPtr pIpForwardTable, ref int pdwSize, bool bOrder); + + // https://docs.microsoft.com/en-us/windows/desktop/debug/system-error-codes--0-499- + private static int ERROR_INSUFFICIENT_BUFFER = 122; + + // Do as little as possible here because any error thrown will cause "net start" to fail + // without anything being added to the application log. + public OutlineService() + { + InitializeComponent(); + + eventLog = new EventLog(); + if (!EventLog.SourceExists(EVENT_LOG_SOURCE)) + { + EventLog.CreateEventSource(EVENT_LOG_SOURCE, EVENT_LOG_NAME); + } + eventLog.Source = EVENT_LOG_SOURCE; + eventLog.Log = EVENT_LOG_NAME; + } + + protected override void OnStart(string[] args) + { + eventLog.WriteEntry("OutlineService starting"); + NetworkChange.NetworkAddressChanged += + new NetworkAddressChangedEventHandler(NetworkAddressChanged); + CreatePipe(); + } + + protected override void OnStop() + { + eventLog.WriteEntry("OutlineService stopping"); + DestroyPipe(); + NetworkChange.NetworkAddressChanged -= NetworkAddressChanged; + } + + private void CreatePipe() + { + var pipeSecurity = new PipeSecurity(); + pipeSecurity.AddAccessRule(new PipeAccessRule(new SecurityIdentifier( + WellKnownSidType.CreatorOwnerSid, null), + PipeAccessRights.FullControl, AccessControlType.Allow)); + pipeSecurity.AddAccessRule(new PipeAccessRule(new SecurityIdentifier( + WellKnownSidType.AuthenticatedUserSid, null), + PipeAccessRights.ReadWrite, AccessControlType.Allow)); + + pipe = new NamedPipeServerStream(PIPE_NAME, PipeDirection.InOut, -1, PipeTransmissionMode.Message, + PipeOptions.Asynchronous, (int)BUFFER_SIZE_BYTES, (int)BUFFER_SIZE_BYTES, pipeSecurity); + pipe.BeginWaitForConnection(HandleConnection, null); + } + + private void DestroyPipe() + { + if (pipe == null) + { + return; + } + try + { + if (pipe.IsConnected) + { + pipe.Disconnect(); + } + pipe.Close(); + pipe = null; + } + catch (Exception e) + { + eventLog.WriteEntry($"Got an exception while destroying the pipe: {e.ToString()}", + EventLogEntryType.Warning); + } + } + + private void HandleConnection(IAsyncResult result) + { + eventLog.WriteEntry("Got incoming connection"); + + // Save the network config before we do anything. If the request fails + // it will be sent to the client for inclusion in Sentry reports. + var beforeNetworkInfo = GetNetworkInfo(); + + try + { + pipe.EndWaitForConnection(result); + // Keep the pipe connected to send connection status updates. + while (pipe.IsConnected) + { + ServiceResponse response = new ServiceResponse(); + var request = ReadRequest(); + if (request == null) + { + response.statusCode = (int)ErrorCode.GenericFailure; + } + else + { + response.action = request.action; + try + { + HandleRequest(request); + } + catch (Exception e) + { + response.statusCode = (int)ErrorCode.GenericFailure; + response.errorMessage = $"{e.Message} (network config: {beforeNetworkInfo})"; + eventLog.WriteEntry($"request failed: {e.Message}", EventLogEntryType.Error); + } + } + WriteResponse(response); + } + } + catch (Exception e) + { + eventLog.WriteEntry($"Failed to handle connection: {e.ToString()}", EventLogEntryType.Error); + } + finally + { + // Pipe streams are one-to-one connections. Recreate the pipe to handle subsequent requests. + DestroyPipe(); + CreatePipe(); + } + } + + private ServiceRequest ReadRequest() + { + var stringBuilder = new StringBuilder(); + var buffer = new byte[BUFFER_SIZE_BYTES]; + var memoryStream = new MemoryStream(); + do + { + var readBytes = pipe.Read(buffer, 0, buffer.Length); + memoryStream.Write(buffer, 0, readBytes); + } while (!pipe.IsMessageComplete); + var msg = Encoding.UTF8.GetString(buffer); + if (String.IsNullOrWhiteSpace(msg)) + { + eventLog.WriteEntry("Failed to read request", EventLogEntryType.Error); + return null; + } + eventLog.WriteEntry($"incoming message: {msg}"); + return ParseRequest(msg); + } + + private ServiceRequest ParseRequest(string jsonRequest) + { + try + { + return JsonConvert.DeserializeObject(jsonRequest); + } + catch (Exception e) + { + eventLog.WriteEntry($"Failed to parse request: {e.ToString()}"); + } + return null; + } + + private void WriteResponse(ServiceResponse response) + { + var jsonResponse = SerializeResponse(response); + if (jsonResponse == null) + { + eventLog.WriteEntry("Failed to serialize response.", EventLogEntryType.Error); + return; + } + eventLog.WriteEntry($"outgoing message: {jsonResponse}"); + var jsonResponseBytes = Encoding.UTF8.GetBytes(jsonResponse); + pipe.Write(jsonResponseBytes, 0, jsonResponseBytes.Length); + pipe.Flush(); + pipe.WaitForPipeDrain(); + } + + private string SerializeResponse(ServiceResponse response) + { + try + { + return JsonConvert.SerializeObject(response); + } + catch (Exception e) + { + eventLog.WriteEntry($"Failed to serialize response: {e.ToString()}"); + } + return null; + } + + private void HandleRequest(ServiceRequest request) + { + switch (request.action) + { + case ACTION_CONFIGURE_ROUTING: + ConfigureRouting(request.parameters[PARAM_PROXY_IP], Boolean.Parse(request.parameters[PARAM_AUTO_CONNECT])); + break; + case ACTION_RESET_ROUTING: + ResetRouting(proxyIp, gatewayInterfaceIndex); + break; + default: + eventLog.WriteEntry($"Received invalid request: {request.action}", EventLogEntryType.Error); + break; + } + } + + // Routes all traffic *except that destined for the proxy server* + // through the TAP device, creating the illusion of a system-wide VPN. + // + // The two key steps are: + // - Route all IPv4 traffic through the TAP device. + // - Find a gateway and route traffic *to the proxy server only* (a /32 + // mask) through it. + // + // Finding a gateway, in particular, is complex: for more on how it + // works, see #GetSystemIpv4Gateway. + // + // On top of this foundation, we take some steps to help prevent + // "leaking" traffic: + // - IPv6 traffic is "blocked", as Outline does not currently support + // servers on IPv6 addresses. + // - "Smart Multi-Homed Name Resolution" is disabled, as it can cause + // the system's "regular" - and potentially filtered - DNS servers to + // be used (particularly on Windows 10). + // + // Preventing leaks significantly complicates things. In particular, *if + // autostart is true and a gateway cannot be found then the IPv4 + // redirect and IPv6 block remain in place and no exception is thrown*. + // When a gateway re-appears following a network change (see + // #NetworkAddressChanged), we will reconnect. + // + // Lastly, a set of routes is added through the gateway *to non-routable + // ("LAN") addresses*. This allows common hardware such as Chromecast to + // function while Outline is active. + // + // Note: + // - Currently, this function does not "clean up" in the event of + // failure. Instead, we rely on the client to call ResetRouting + // following a connection failure. + // - There's limited protection against "nested connections", i.e. + // connecting to Outline while another VPN, e.g. OpenVPN, is already + // active. There's no simple API we can use to tell whether a VPN is + // already active and *given the difficulty in identifying this + // reliably* (multiple active network interfaces, for example, are + // very common, e.g. it happens - briefly - every time a user + // switches between a wired and wireless network) we err on the side + // of working. Since the user presumably knows whether another VPN is + // already active and *we make no persistent changes to the routing + // table* this seems reasonable. + // + // TODO: The client needs to handle certain autoconnect failures better, + // e.g. if IPv4 redirect fails then the client is not really in + // the reconnecting state; the system is leaking traffic. + public void ConfigureRouting(string proxyIp, bool isAutoConnect) + { + try + { + StartSmartDnsBlock(); + eventLog.WriteEntry($"started smartdnsblock"); + } + catch (Exception e) + { + throw new Exception($"could not start smartdnsblock: {e.Message}"); + } + + try + { + GetSystemIpv4Gateway(proxyIp); + + eventLog.WriteEntry($"connecting via gateway at {gatewayIp} on interface {gatewayInterfaceIndex}"); + + // Set the proxy escape route first to prevent a routing loop when capturing all IPv4 traffic. + try + { + AddOrUpdateProxyRoute(proxyIp, gatewayIp, gatewayInterfaceIndex); + eventLog.WriteEntry($"created route to proxy"); + } + catch (Exception e) + { + throw new Exception($"could not create route to proxy: {e.Message}"); + } + this.proxyIp = proxyIp; + + try + { + AddOrUpdateReservedSubnetBypass(gatewayIp, gatewayInterfaceIndex); + eventLog.WriteEntry($"created LAN bypass routes"); + } + catch (Exception e) + { + throw new Exception($"could not create LAN bypass routes: {e.Message}"); + } + } + catch (Exception e) when (isAutoConnect) + { + eventLog.WriteEntry($"could not reconnect during auto-connect: {e.Message}", EventLogEntryType.Warning); + } + + try + { + StopRoutingIpv6(); + eventLog.WriteEntry($"blocked IPv6 traffic"); + } + catch (Exception e) + { + throw new Exception($"could not block IPv6 traffic: {e.Message}"); + } + + try + { + AddIpv4TapRedirect(); + eventLog.WriteEntry($"redirected IPv4 traffic"); + } + catch (Exception e) + { + throw new Exception($"could not redirect IPv4 traffic: {e.Message}"); + } + } + + // Undoes and removes as many as possible of the routes and other + // changes to the system previously made by #ConfigureRouting. + // + // As per #ConfigureRouting, this function is largely idempodent: + // calling it multiple times in succession should be safe and result in + // the same system configuration. + // + // Notes: + // - *This function does not set any error code when any step fails*. + // It probably should, as the system may in some rare cases still be + // connected (or, worse but less likely, bricked). + // - If the service does not know the IP address of the proxy server + // then it *cannot remove that route*. This can happen if the service + // is restarted while Outline is connected *or* (more likely) if this + // function is called while Outline is not connected. This route is + // mostly harmless because it only affects traffic to the proxy and + // if/when the user reconnects to it the route will be updated. + public void ResetRouting(string proxyIp, int gatewayInterfaceIndex) + { + try + { + RemoveIpv4TapRedirect(); + eventLog.WriteEntry($"removed IPv4 redirect"); + } + catch (Exception e) + { + eventLog.WriteEntry($"failed to remove IPv4 redirect: {e.Message}", EventLogEntryType.Error); + } + + try + { + // This is only necessary when disconecting without network connectivity. + StartRoutingIpv4(); + } + catch (Exception) {} + + try + { + StartRoutingIpv6(); + eventLog.WriteEntry($"unblocked IPv6"); + } + catch (Exception e) + { + eventLog.WriteEntry($"failed to unblock IPv6: {e.Message}", EventLogEntryType.Error); + } + + if (proxyIp != null) + { + try + { + DeleteProxyRoute(proxyIp); + eventLog.WriteEntry($"deleted route to proxy"); + } + catch (Exception e) + { + eventLog.WriteEntry($"failed to delete route to proxy: {e.Message}", EventLogEntryType.Error); + } + this.proxyIp = null; + } + + try + { + RemoveReservedSubnetBypass(); + eventLog.WriteEntry($"deleted LAN bypass routes"); + } + catch (Exception e) + { + eventLog.WriteEntry($"failed to delete LAN bypass routes: {e.Message}", EventLogEntryType.Error); + } + this.gatewayIp = null; + + try + { + StopSmartDnsBlock(); + eventLog.WriteEntry($"stopped smartdnsblock"); + } + catch (Exception e) + { + eventLog.WriteEntry($"failed to stop smartdnsblock: {e.Message}", + EventLogEntryType.Warning); + } + } + + // Disable "Smart Multi-Homed Name Resolution", to ensure the system uses only the + // (non-filtered) DNS server(s) associated with the TAP device. + // + // Notes: + // - To show the current firewall rules: + // netsh wfp show filters + // - This website is an easy way to quickly verify there are no DNS leaks: + // https://ipleak.net/ + // - Because .Net provides *no way* to associate the new process with this one, the + // new process will continue to run even if this service is interrupted or crashes. + // Fortunately, since the changes it makes are *not* persistent, the system can, in + // the worst case, be fixed by rebooting. + private void StartSmartDnsBlock() + { + // smartdnsblock.exe must be a sibling of OutlineService.exe. + Process smartDnsBlock = new Process(); + smartDnsBlock.StartInfo.FileName = new DirectoryInfo(Process.GetCurrentProcess().MainModule.FileName).Parent.FullName + + Path.DirectorySeparatorChar + "smartdnsblock.exe"; + smartDnsBlock.StartInfo.UseShellExecute = false; + + smartDnsBlock.StartInfo.RedirectStandardError = true; + smartDnsBlock.StartInfo.RedirectStandardOutput = true; + + // This is for Windows 7: without it, the process exits immediately, presumably + // because stdin isn't connected to anything: + // https://github.com/Jigsaw-Code/outline-client/issues/415 + // + // This seems to make no difference on Windows 8 and 10. + smartDnsBlock.StartInfo.RedirectStandardInput = true; + + ArrayList stdout = new ArrayList(); + ArrayList stderr = new ArrayList(); + smartDnsBlock.OutputDataReceived += (object sender, DataReceivedEventArgs e) => + { + if (!String.IsNullOrEmpty(e.Data)) + { + stdout.Add(e.Data); + } + }; + smartDnsBlock.ErrorDataReceived += (object sender, DataReceivedEventArgs e) => + { + if (!String.IsNullOrEmpty(e.Data)) + { + stderr.Add(e.Data); + } + }; + + try + { + smartDnsBlock.Start(); + smartDnsBlock.BeginOutputReadLine(); + smartDnsBlock.BeginErrorReadLine(); + } + catch (Exception e) + { + throw new Exception($"could not launch smartdnsblock at {smartDnsBlock.StartInfo.FileName}: { e.Message}"); + } + + // This does *not* throw if the process is still running after Nms. + smartDnsBlock.WaitForExit(SMART_DNS_BLOCK_TIMEOUT_MS); + if (smartDnsBlock.HasExited) + { + throw new Exception($"smartdnsblock failed " + $"(stdout: {String.Join(Environment.NewLine, stdout.ToArray())}, " + + $"(stderr: {String.Join(Environment.NewLine, stderr.ToArray())})"); + } + } + + private void StopSmartDnsBlock() + { + try + { + RunCommand("powershell", "stop-process -name smartdnsblock"); + } + catch (Exception e) + { + throw new Exception($"could not stop smartdnsblock: {e.Message}"); + } + } + + private void AddOrUpdateProxyRoute(string proxyIp, string gatewayIp, int gatewayInterfaceIndex) + { + // "netsh interface ipv4 set route" does *not* work for us here + // because it can only be used to change a route's *metric*. + try + { + RunCommand(CMD_ROUTE, $"change {proxyIp} {gatewayIp} if {gatewayInterfaceIndex}"); + } + catch (Exception) + { + RunCommand(CMD_NETSH, $"interface ipv4 add route {proxyIp}/32 nexthop={gatewayIp} interface=\"{gatewayInterfaceIndex}\" metric=0 store=active"); + } + } + + private void DeleteProxyRoute(string proxyIp) + { + // "route" doesn't need to know on which interface or through which + // gateway the route was created. + RunCommand(CMD_ROUTE, $"delete {proxyIp}"); + } + + // Route IPv4 traffic through the TAP device. Instead of deleting the + // default IPv4 gateway (0.0.0.0/0), we resort to creating two more + // specific routes (see IPV4_SUBNETS) that take precedence over the + // default gateway. This way, we need not worry about the default + // gateway being recreated with a lower metric upon device sleep. + // + // This 'hack' was inspired by OpenVPN; see: + // https://github.com/OpenVPN/openvpn3/commit/d08cc059e7132a3d3aee3dcd946fce4c35b1ced3#diff-1d76f0fd7ec04c6d1398288214a879c5R358 + // + // TODO: If these routes exist on a gateway that's not our TAP device, + // it might be a good signal that OpenVPN is active? + private void AddIpv4TapRedirect() + { + foreach (string subnet in IPV4_SUBNETS) + { + try + { + RunCommand(CMD_NETSH, $"interface ipv4 add route {subnet} nexthop={TAP_DEVICE_IP} interface={TAP_DEVICE_NAME} metric=0 store=active"); + } + catch (Exception) + { + RunCommand(CMD_NETSH, $"interface ipv4 set route {subnet} nexthop={TAP_DEVICE_IP} interface={TAP_DEVICE_NAME} metric=0 store=active"); + } + } + } + + private void RemoveIpv4TapRedirect() + { + foreach (string subnet in IPV4_SUBNETS) + { + RunCommand(CMD_NETSH, $"interface ipv4 delete route {subnet} interface={TAP_DEVICE_NAME}"); + } + } + + private void StartRoutingIpv4() + { + foreach (string subnet in IPV4_SUBNETS) + { + RunCommand(CMD_NETSH, $"interface ipv4 delete route {subnet} interface={NetworkInterface.LoopbackInterfaceIndex}"); + } + } + + private void StopRoutingIpv4() + { + foreach (string subnet in IPV4_SUBNETS) + { + try + { + RunCommand(CMD_NETSH, $"interface ipv4 add route {subnet} interface={NetworkInterface.LoopbackInterfaceIndex} metric=0 store=active"); + } + catch (Exception) + { + RunCommand(CMD_NETSH, $"interface ipv4 set route {subnet} interface={NetworkInterface.LoopbackInterfaceIndex} metric=0 store=active"); + } + } + } + + private void StartRoutingIpv6() + { + foreach (string subnet in IPV6_SUBNETS) + { + RunCommand(CMD_NETSH, $"interface ipv6 delete route {subnet} interface={NetworkInterface.IPv6LoopbackInterfaceIndex}"); + } + } + + // Outline does not currently support IPv6, so we resort to disabling it while the VPN is active to + // prevent leakage. Removing the default IPv6 gateway is not enough since it gets re-created + // through router advertisements and DHCP (disabling these or IPv6 routing altogether requires a + // system reboot). Thus, we resort to creating three IPv6 routes (see IPV6_SUBNETS) to the loopback + // interface that are more specific than the default route, causing IPv6 traffic to get dropped. + private void StopRoutingIpv6() + { + foreach (string subnet in IPV6_SUBNETS) + { + try + { + RunCommand(CMD_NETSH, $"interface ipv6 add route {subnet} interface={NetworkInterface.IPv6LoopbackInterfaceIndex} metric=0 store=active"); + } + catch (Exception) + { + RunCommand(CMD_NETSH, $"interface ipv6 set route {subnet} interface={NetworkInterface.IPv6LoopbackInterfaceIndex} metric=0 store=active"); + } + } + } + + // Routes reserved and private subnets through the default gateway so they bypass the VPN. + private void AddOrUpdateReservedSubnetBypass(string gatewayIp, int gatewayInterfaceIndex) + { + foreach (string subnet in IPV4_RESERVED_SUBNETS) + { + try + { + RunCommand(CMD_ROUTE, $"change {subnet} {gatewayIp} if {gatewayInterfaceIndex}"); + } + catch (Exception) + { + RunCommand(CMD_NETSH, $"interface ipv4 add route {subnet} nexthop={gatewayIp} interface=\"{gatewayInterfaceIndex}\" metric=0 store=active"); + } + } + } + + // Removes reserved subnet routes created to bypass the VPN. + private void RemoveReservedSubnetBypass() + { + foreach (string subnet in IPV4_RESERVED_SUBNETS) + { + RunCommand(CMD_ROUTE, $"delete {subnet}"); + } + } + + // Runs a shell command synchronously. + private void RunCommand(string cmd, string args) + { + Console.WriteLine($"running command: {cmd} {args}"); + + var startInfo = new ProcessStartInfo(cmd); + startInfo.Arguments = args; + startInfo.UseShellExecute = false; + startInfo.RedirectStandardError = true; + startInfo.RedirectStandardOutput = true; + startInfo.CreateNoWindow = true; + + Process p = new Process(); + var stdout = new StringBuilder(); + var stderr = new StringBuilder(); + p.OutputDataReceived += (object sender, DataReceivedEventArgs e) => + { + if (e == null || String.IsNullOrWhiteSpace(e.Data)) + { + return; + } + stdout.Append(e.Data); + }; + p.ErrorDataReceived += (object sender, DataReceivedEventArgs e) => + { + if (e == null || String.IsNullOrWhiteSpace(e.Data)) + { + return; + } + stderr.Append(e.Data); + }; + p.StartInfo = startInfo; + p.Start(); + p.BeginOutputReadLine(); + p.BeginErrorReadLine(); + p.WaitForExit(); + + // "route" is weird and always exits with zero: we have to examine + // stderr to detect its errors. + if (p.ExitCode != 0 || stderr.ToString().Length > 0) + { + // NOTE: Do *not* add args to this error message because it's piped + // back to the client for inclusion in Sentry reports and + // effectively contain access keys. + throw new Exception($"command exited with {p.ExitCode} " + + $"(stdout: {stdout.ToString()}, stderr: {stderr.ToString()})"); + } + } + + // Searches the system's routing table for the best route to the + // specified IP address *that does not route through the TAP device*. + // + // That last requirement - ignoring the TAP device - is what prevents us + // from simply calling GetBestRoute: other than that, it does all the + // work of finding the lowest-weighted gateway to the destination IP. + // + // NOTE: This function does not *always* find the best gateway: it + // currently only considers "default" gateways (0.0.0.0) which may not + // work in some rare cases. Several re-implementations of the Windows + // API illustrate how we could more closely match GetBestRoute: + // - https://github.com/wine-mirror/wine/blob/master/dlls/iphlpapi/iphlpapi_main.c + // - https://github.com/reactos/reactos/blob/master/dll/win32/iphlpapi/iphlpapi_main.c + private void GetSystemIpv4Gateway(string proxyIp) + { + gatewayIp = null; + gatewayInterfaceIndex = -1; + + int tapInterfaceIndex; + try + { + tapInterfaceIndex = NetworkInterface.GetAllNetworkInterfaces() + .Where(i => i.Name == TAP_DEVICE_NAME) + .FirstOrDefault() + .GetIPProperties() + .GetIPv4Properties().Index; + } + catch (Exception) + { + throw new Exception("TAP device not found"); + } + + // Some marshalling craziness follows: we have to first ask + // GetIpForwardTable how much memory is required to hold the routing + // table before calling it again to actually return us the table; + // once we have the table, we have to iterate over the rows + // (thankfully, MIB_IPFORWARDROW marshalls easily). + int bufferSize = 0; + if (GetIpForwardTable(IntPtr.Zero, ref bufferSize, true) != ERROR_INSUFFICIENT_BUFFER) + { + throw new Exception("could not fetch routing table"); + } + var buffer = Marshal.AllocHGlobal(bufferSize); + if (GetIpForwardTable(buffer, ref bufferSize, true) != 0) + { + Marshal.FreeHGlobal(buffer); + throw new Exception("could not fetch routing table"); + } + + // NOTE: We deliberately *do not marshal the entire + // MIB_IPFORWARDTABLE* owing to unexplained crashes following + // suspend/resume. Fortunately, since that structure is + // logically just a DWORD followed by an array, this entails + // little extra work. + var numEntries = Marshal.ReadInt32(buffer); + MIB_IPFORWARDROW bestRow = null; + var rowPtr = buffer + Marshal.SizeOf(numEntries); + for (int i = 0; i < numEntries; i++) + { + MIB_IPFORWARDROW row = (MIB_IPFORWARDROW)Marshal.PtrToStructure(rowPtr, typeof(MIB_IPFORWARDROW)); + + // Must be a gateway (see note above on how we can improve this). + if (row.dwForwardDest != 0) + { + continue; + } + + // Must not be the TAP device. + if (row.dwForwardIfIndex == tapInterfaceIndex) + { + continue; + } + + if (bestRow == null || row.dwForwardMetric1 < bestRow.dwForwardMetric1) + { + bestRow = row; + } + + rowPtr += Marshal.SizeOf(typeof(MIB_IPFORWARDROW)); + } + + Marshal.FreeHGlobal(buffer); + + if (bestRow == null) + { + throw new Exception("no gateway found"); + } + + gatewayIp = new IPAddress(BitConverter.GetBytes(bestRow.dwForwardNextHop)).ToString(); + gatewayInterfaceIndex = bestRow.dwForwardIfIndex; + } + + // Updates, if Outline is connected, the routing table to reflect a new + // gateway. + // + // There's really just one thing to do when the gateway changes: update + // the (direct) route to the proxy server to route through the new + // gateway. If there is no gateway, e.g. because the system has lost + // network connectivity, notify the client and keep the IPv4 redirect + // and IPv6 block in place: this helps prevent leaking traffic. + // + // Notes: + // - *This function must not throw*. If it does, the handler is unset. + // - This function also updates two further sets of routes: the LAN + // bypass routes (which must route through the gateway) and the IPv4 + // redirect routes (which "fall back" to the system gateway once the + // TAP device temporarily disappears due to tun2socks' exit). + // - The NetworkChange.NetworkAddressChanged callback is *extremely + // noisy*. In particular, it seems to be called twice for every + // change to the routing table. There does not seem to be any useful + // information in the supplied EventArgs. This is partly why we don't + // touch the routing table unless the gateway has actually changed. + // - This function may be called while #ConfigureRouting is still + // running. This is partly why we exit early (at the top) if we don't + // think Outline is connected. + private void NetworkAddressChanged(object sender, EventArgs evt) + { + if (proxyIp == null) + { + eventLog.WriteEntry("network changed but Outline is not connected - doing nothing"); + return; + } + + var previousGatewayIp = gatewayIp; + var previousGatewayInterfaceIndex = gatewayInterfaceIndex; + + try + { + GetSystemIpv4Gateway(proxyIp); + } + catch (Exception e) + { + eventLog.WriteEntry($"network changed but no gateway found: {e.Message}"); + } + + if (previousGatewayIp == gatewayIp && previousGatewayInterfaceIndex == gatewayInterfaceIndex) + { + // Only send on actual change, to prevent duplicate notifications (mostly + // harmless but can make debugging harder). + eventLog.WriteEntry($"network changed but gateway and interface stayed the same"); + return; + } + else if (gatewayIp == null) + { + SendConnectionStatusChange(ConnectionStatus.Reconnecting); + + // Stop capturing IPv4 traffic in order to prevent a routing loop in the TAP device. + // Redirect IPv4 traffic to the loopback interface instead to avoid leaking traffic when + // the network becomes available. + try + { + StopRoutingIpv4(); + RemoveIpv4TapRedirect(); + eventLog.WriteEntry($"stopped routing IPv4 traffic"); + } + catch (Exception e) + { + eventLog.WriteEntry($"failed to stop routing IPv4: {e.Message}", EventLogEntryType.Error); + } + return; + } + + eventLog.WriteEntry($"network changed - gateway is now {gatewayIp} on interface {gatewayInterfaceIndex}"); + + // Add the proxy escape route before capturing IPv4 traffic to prevent a routing loop in the TAP device. + try + { + AddOrUpdateProxyRoute(proxyIp, gatewayIp, gatewayInterfaceIndex); + eventLog.WriteEntry($"updated route to proxy"); + } + catch (Exception e) + { + eventLog.WriteEntry($"could not update route to proxy: {e.Message}"); + return; + } + + try + { + AddIpv4TapRedirect(); + StartRoutingIpv4(); + eventLog.WriteEntry($"refreshed IPv4 redirect"); + } + catch (Exception e) + { + eventLog.WriteEntry($"could not refresh IPv4 redirect: {e.Message}"); + return; + } + + // Send the status update now that the full-system VPN is connected. + SendConnectionStatusChange(ConnectionStatus.Connected); + + try + { + AddOrUpdateReservedSubnetBypass(gatewayIp, gatewayInterfaceIndex); + eventLog.WriteEntry($"updated LAN bypass routes"); + } + catch (Exception e) + { + // TODO: This isn't quite right: because we successfully updated + // the route to the proxy, the client *is* connected; it's + // just not "fully" connected, in the way we like. We + // should distinguish between "cannot reconnect right now, + // because no internet" and "cannot reconnect because + // netsh commands are failing". + eventLog.WriteEntry($"could not update LAN bypass routes: {e.Message}"); + return; + } + } + + // Writes the connection status to the pipe, if it is connected. + private void SendConnectionStatusChange(ConnectionStatus status) + { + if (pipe == null || !pipe.IsConnected) + { + eventLog.WriteEntry("Cannot send connection status change, pipe not connected.", EventLogEntryType.Error); + return; + } + ServiceResponse response = new ServiceResponse(); + response.action = ACTION_STATUS_CHANGED; + response.statusCode = (int)ErrorCode.Success; + response.connectionStatus = (int)status; + try + { + WriteResponse(response); + } + catch (Exception e) + { + eventLog.WriteEntry($"Failed to send connection status change: {e.Message}"); + } + } + + public string GetNetworkInfo() + { + return String.Join(", ", NetworkInterface.GetAllNetworkInterfaces() + .Select(a => this.GetAdapterInfo(a))); + } + + private string GetAdapterInfo(NetworkInterface adapter) + { + var numIpv4Gateways = adapter.GetIPProperties().GatewayAddresses + .Select(g => g.Address) + .Where(a => a.AddressFamily == AddressFamily.InterNetwork) + .Count(); + var numIpv6Gateways = adapter.GetIPProperties().GatewayAddresses + .Select(g => g.Address) + .Where(a => a.AddressFamily == AddressFamily.InterNetworkV6) + .Count(); + + return $"{adapter.Name} ({adapter.OperationalStatus}): " + ( + adapter.Supports(NetworkInterfaceComponent.IPv4) ? + $"{numIpv4Gateways} x ipv4 gateways" : + "ipv4 disabled") + ", " + ( + adapter.Supports(NetworkInterfaceComponent.IPv6) ? + $"{numIpv6Gateways} x ipv6 gateways" : + "ipv6 disabled"); + } + } + + [DataContract] + internal class ServiceRequest + { + [DataMember] + internal string action; + [DataMember] + internal Dictionary parameters; + } + + [DataContract] + internal class ServiceResponse + { + [DataMember] + internal string action; + [DataMember] + internal int statusCode; + [DataMember] + internal string errorMessage; + [DataMember] + internal int connectionStatus; + } + + public enum ErrorCode + { + Success = 0, + GenericFailure = 1 + } + + public enum ConnectionStatus + { + Connected = 0, + Disconnected = 1, + Reconnecting = 2 + } +} diff --git a/tools/OutlineService/OutlineService/OutlineService.csproj b/outline_client/tools/OutlineService/OutlineService/OutlineService.csproj similarity index 97% rename from tools/OutlineService/OutlineService/OutlineService.csproj rename to outline_client/tools/OutlineService/OutlineService/OutlineService.csproj index 7a8947f723..4fac6eb2ea 100755 --- a/tools/OutlineService/OutlineService/OutlineService.csproj +++ b/outline_client/tools/OutlineService/OutlineService/OutlineService.csproj @@ -1,92 +1,92 @@ - - - - - Debug - AnyCPU - {F39A4491-9868-4A71-9BE1-980FADE10AC9} - WinExe - OutlineService - OutlineService - v4.6.1 - 512 - true - - - x86 - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - true - bin\x86\Debug\ - DEBUG;TRACE - full - x86 - prompt - MinimumRecommendedRules.ruleset - true - - - bin\ - TRACE - true - pdbonly - x86 - prompt - MinimumRecommendedRules.ruleset - true - - - - ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll - - - - - - - - - - - - - - - Component - - - OutlineService.cs - - - - - - - - - - - OutlineService.cs - - - - - - + + + + + Debug + AnyCPU + {F39A4491-9868-4A71-9BE1-980FADE10AC9} + WinExe + OutlineService + OutlineService + v4.6.1 + 512 + true + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + true + bin\x86\Debug\ + DEBUG;TRACE + full + x86 + prompt + MinimumRecommendedRules.ruleset + true + + + bin\ + TRACE + true + pdbonly + x86 + prompt + MinimumRecommendedRules.ruleset + true + + + + ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll + + + + + + + + + + + + + + + Component + + + OutlineService.cs + + + + + + + + + + + OutlineService.cs + + + + + + \ No newline at end of file diff --git a/tools/OutlineService/OutlineService/OutlineService.resx b/outline_client/tools/OutlineService/OutlineService/OutlineService.resx similarity index 97% rename from tools/OutlineService/OutlineService/OutlineService.resx rename to outline_client/tools/OutlineService/OutlineService/OutlineService.resx index 1a80cdd6e7..0129fa82a5 100755 --- a/tools/OutlineService/OutlineService/OutlineService.resx +++ b/outline_client/tools/OutlineService/OutlineService/OutlineService.resx @@ -1,123 +1,123 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - False - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + \ No newline at end of file diff --git a/tools/OutlineService/OutlineService/Program.cs b/outline_client/tools/OutlineService/OutlineService/Program.cs similarity index 97% rename from tools/OutlineService/OutlineService/Program.cs rename to outline_client/tools/OutlineService/OutlineService/Program.cs index bb9d7ee7dd..62d8c9b47d 100755 --- a/tools/OutlineService/OutlineService/Program.cs +++ b/outline_client/tools/OutlineService/OutlineService/Program.cs @@ -1,70 +1,70 @@ -// Copyright 2018 The Outline Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.ServiceProcess; -using System.Text; -using System.Threading.Tasks; - -namespace OutlineService -{ - static class Program - { - static void Main(string[] args) - { - if (!Environment.UserInteractive) - { - ServiceBase[] ServicesToRun; - ServicesToRun = new ServiceBase[] { new OutlineService() }; - ServiceBase.Run(ServicesToRun); - } - else - { - var service = new OutlineService(); - // To run as a service from the command-line: - // service.OnStart(null); - // System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite); - if (args.Length < 2) - { - ShowUsageAndExit(); - } - switch (args[0]) - { - case "on": - service.ConfigureRouting(args[1], false); - break; - case "off": - if (args.Length < 3) - { - ShowUsageAndExit(); - } - service.ResetRouting(args[1], Int32.Parse(args[2])); - break; - default: - ShowUsageAndExit(); - break; - } - Console.WriteLine($"network config: {service.GetNetworkInfo()}"); - } - } - - static void ShowUsageAndExit() - { - Console.WriteLine("usage: on |off "); - Environment.Exit(1); - } - } -} // namespace OutlineService +// Copyright 2018 The Outline Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.ServiceProcess; +using System.Text; +using System.Threading.Tasks; + +namespace OutlineService +{ + static class Program + { + static void Main(string[] args) + { + if (!Environment.UserInteractive) + { + ServiceBase[] ServicesToRun; + ServicesToRun = new ServiceBase[] { new OutlineService() }; + ServiceBase.Run(ServicesToRun); + } + else + { + var service = new OutlineService(); + // To run as a service from the command-line: + // service.OnStart(null); + // System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite); + if (args.Length < 2) + { + ShowUsageAndExit(); + } + switch (args[0]) + { + case "on": + service.ConfigureRouting(args[1], false); + break; + case "off": + if (args.Length < 3) + { + ShowUsageAndExit(); + } + service.ResetRouting(args[1], Int32.Parse(args[2])); + break; + default: + ShowUsageAndExit(); + break; + } + Console.WriteLine($"network config: {service.GetNetworkInfo()}"); + } + } + + static void ShowUsageAndExit() + { + Console.WriteLine("usage: on |off "); + Environment.Exit(1); + } + } +} // namespace OutlineService diff --git a/tools/OutlineService/OutlineService/Properties/AssemblyInfo.cs b/outline_client/tools/OutlineService/OutlineService/Properties/AssemblyInfo.cs similarity index 97% rename from tools/OutlineService/OutlineService/Properties/AssemblyInfo.cs rename to outline_client/tools/OutlineService/OutlineService/Properties/AssemblyInfo.cs index fc957bac77..20c3e92b6c 100755 --- a/tools/OutlineService/OutlineService/Properties/AssemblyInfo.cs +++ b/outline_client/tools/OutlineService/OutlineService/Properties/AssemblyInfo.cs @@ -1,50 +1,50 @@ -// Copyright 2018 The Outline Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("OutlineService")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("OutlineService")] -[assembly: AssemblyCopyright("Copyright © 2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("f39a4491-9868-4a71-9be1-980fade10ac9")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +// Copyright 2018 The Outline Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("OutlineService")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("OutlineService")] +[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("f39a4491-9868-4a71-9be1-980fade10ac9")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/tools/OutlineService/OutlineService/bin/OutlineService.exe b/outline_client/tools/OutlineService/OutlineService/bin/OutlineService.exe similarity index 100% rename from tools/OutlineService/OutlineService/bin/OutlineService.exe rename to outline_client/tools/OutlineService/OutlineService/bin/OutlineService.exe diff --git a/tools/OutlineService/OutlineService/bin/Release/OutlineService.exe.config b/outline_client/tools/OutlineService/OutlineService/bin/Release/OutlineService.exe.config similarity index 97% rename from tools/OutlineService/OutlineService/bin/Release/OutlineService.exe.config rename to outline_client/tools/OutlineService/OutlineService/bin/Release/OutlineService.exe.config index 6a19d29ee0..c37a182b77 100755 --- a/tools/OutlineService/OutlineService/bin/Release/OutlineService.exe.config +++ b/outline_client/tools/OutlineService/OutlineService/bin/Release/OutlineService.exe.config @@ -1,21 +1,21 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/tools/OutlineService/OutlineService/packages.config b/outline_client/tools/OutlineService/OutlineService/packages.config similarity index 97% rename from tools/OutlineService/OutlineService/packages.config rename to outline_client/tools/OutlineService/OutlineService/packages.config index 27e210f08a..5762754177 100755 --- a/tools/OutlineService/OutlineService/packages.config +++ b/outline_client/tools/OutlineService/OutlineService/packages.config @@ -1,4 +1,4 @@ - - - + + + \ No newline at end of file diff --git a/tools/build/Dockerfile b/outline_client/tools/build/Dockerfile similarity index 100% rename from tools/build/Dockerfile rename to outline_client/tools/build/Dockerfile diff --git a/tools/build/README.md b/outline_client/tools/build/README.md similarity index 100% rename from tools/build/README.md rename to outline_client/tools/build/README.md diff --git a/tools/build/android_tools_versions.sh b/outline_client/tools/build/android_tools_versions.sh similarity index 100% rename from tools/build/android_tools_versions.sh rename to outline_client/tools/build/android_tools_versions.sh diff --git a/tools/build/build.action.sh b/outline_client/tools/build/build.action.sh similarity index 100% rename from tools/build/build.action.sh rename to outline_client/tools/build/build.action.sh diff --git a/tools/build/build.sh b/outline_client/tools/build/build.sh similarity index 100% rename from tools/build/build.sh rename to outline_client/tools/build/build.sh diff --git a/tools/build/setup_linux_android.sh b/outline_client/tools/build/setup_linux_android.sh similarity index 100% rename from tools/build/setup_linux_android.sh rename to outline_client/tools/build/setup_linux_android.sh diff --git a/tools/build/setup_macos_android.sh b/outline_client/tools/build/setup_macos_android.sh similarity index 100% rename from tools/build/setup_macos_android.sh rename to outline_client/tools/build/setup_macos_android.sh diff --git a/tools/find_tap_name/bin/386/find_tap_name.exe b/outline_client/tools/find_tap_name/bin/386/find_tap_name.exe similarity index 100% rename from tools/find_tap_name/bin/386/find_tap_name.exe rename to outline_client/tools/find_tap_name/bin/386/find_tap_name.exe diff --git a/tools/find_tap_name/bin/amd64/find_tap_name.exe b/outline_client/tools/find_tap_name/bin/amd64/find_tap_name.exe similarity index 100% rename from tools/find_tap_name/bin/amd64/find_tap_name.exe rename to outline_client/tools/find_tap_name/bin/amd64/find_tap_name.exe diff --git a/tools/find_tap_name/build.action.sh b/outline_client/tools/find_tap_name/build.action.sh similarity index 100% rename from tools/find_tap_name/build.action.sh rename to outline_client/tools/find_tap_name/build.action.sh diff --git a/tools/find_tap_name/main.go b/outline_client/tools/find_tap_name/main.go similarity index 100% rename from tools/find_tap_name/main.go rename to outline_client/tools/find_tap_name/main.go diff --git a/tools/outline_proxy_controller/.gitignore b/outline_client/tools/outline_proxy_controller/.gitignore similarity index 100% rename from tools/outline_proxy_controller/.gitignore rename to outline_client/tools/outline_proxy_controller/.gitignore diff --git a/tools/outline_proxy_controller/CMakeLists.txt b/outline_client/tools/outline_proxy_controller/CMakeLists.txt similarity index 100% rename from tools/outline_proxy_controller/CMakeLists.txt rename to outline_client/tools/outline_proxy_controller/CMakeLists.txt diff --git a/tools/outline_proxy_controller/Dockerfile b/outline_client/tools/outline_proxy_controller/Dockerfile similarity index 100% rename from tools/outline_proxy_controller/Dockerfile rename to outline_client/tools/outline_proxy_controller/Dockerfile diff --git a/tools/outline_proxy_controller/OutlineProxyControllerConfig.h.in b/outline_client/tools/outline_proxy_controller/OutlineProxyControllerConfig.h.in similarity index 100% rename from tools/outline_proxy_controller/OutlineProxyControllerConfig.h.in rename to outline_client/tools/outline_proxy_controller/OutlineProxyControllerConfig.h.in diff --git a/tools/outline_proxy_controller/README.md b/outline_client/tools/outline_proxy_controller/README.md similarity index 100% rename from tools/outline_proxy_controller/README.md rename to outline_client/tools/outline_proxy_controller/README.md diff --git a/tools/outline_proxy_controller/build.action.sh b/outline_client/tools/outline_proxy_controller/build.action.sh similarity index 100% rename from tools/outline_proxy_controller/build.action.sh rename to outline_client/tools/outline_proxy_controller/build.action.sh diff --git a/tools/outline_proxy_controller/dist/OutlineProxyController b/outline_client/tools/outline_proxy_controller/dist/OutlineProxyController similarity index 100% rename from tools/outline_proxy_controller/dist/OutlineProxyController rename to outline_client/tools/outline_proxy_controller/dist/OutlineProxyController diff --git a/tools/outline_proxy_controller/dist/install_linux_service.sh b/outline_client/tools/outline_proxy_controller/dist/install_linux_service.sh similarity index 100% rename from tools/outline_proxy_controller/dist/install_linux_service.sh rename to outline_client/tools/outline_proxy_controller/dist/install_linux_service.sh diff --git a/tools/outline_proxy_controller/dist/outline_proxy_controller.service b/outline_client/tools/outline_proxy_controller/dist/outline_proxy_controller.service similarity index 100% rename from tools/outline_proxy_controller/dist/outline_proxy_controller.service rename to outline_client/tools/outline_proxy_controller/dist/outline_proxy_controller.service diff --git a/tools/outline_proxy_controller/logger.cpp b/outline_client/tools/outline_proxy_controller/logger.cpp similarity index 100% rename from tools/outline_proxy_controller/logger.cpp rename to outline_client/tools/outline_proxy_controller/logger.cpp diff --git a/tools/outline_proxy_controller/logger.h b/outline_client/tools/outline_proxy_controller/logger.h similarity index 100% rename from tools/outline_proxy_controller/logger.h rename to outline_client/tools/outline_proxy_controller/logger.h diff --git a/tools/outline_proxy_controller/network_monitor.cpp b/outline_client/tools/outline_proxy_controller/network_monitor.cpp similarity index 100% rename from tools/outline_proxy_controller/network_monitor.cpp rename to outline_client/tools/outline_proxy_controller/network_monitor.cpp diff --git a/tools/outline_proxy_controller/network_monitor.h b/outline_client/tools/outline_proxy_controller/network_monitor.h similarity index 100% rename from tools/outline_proxy_controller/network_monitor.h rename to outline_client/tools/outline_proxy_controller/network_monitor.h diff --git a/tools/outline_proxy_controller/outline_controller_server.cpp b/outline_client/tools/outline_proxy_controller/outline_controller_server.cpp similarity index 100% rename from tools/outline_proxy_controller/outline_controller_server.cpp rename to outline_client/tools/outline_proxy_controller/outline_controller_server.cpp diff --git a/tools/outline_proxy_controller/outline_controller_server.h b/outline_client/tools/outline_proxy_controller/outline_controller_server.h similarity index 100% rename from tools/outline_proxy_controller/outline_controller_server.h rename to outline_client/tools/outline_proxy_controller/outline_controller_server.h diff --git a/tools/outline_proxy_controller/outline_daemon.cpp b/outline_client/tools/outline_proxy_controller/outline_daemon.cpp similarity index 100% rename from tools/outline_proxy_controller/outline_daemon.cpp rename to outline_client/tools/outline_proxy_controller/outline_daemon.cpp diff --git a/tools/outline_proxy_controller/outline_error.cpp b/outline_client/tools/outline_proxy_controller/outline_error.cpp similarity index 100% rename from tools/outline_proxy_controller/outline_error.cpp rename to outline_client/tools/outline_proxy_controller/outline_error.cpp diff --git a/tools/outline_proxy_controller/outline_error.h b/outline_client/tools/outline_proxy_controller/outline_error.h similarity index 100% rename from tools/outline_proxy_controller/outline_error.h rename to outline_client/tools/outline_proxy_controller/outline_error.h diff --git a/tools/outline_proxy_controller/outline_proxy_controller.cpp b/outline_client/tools/outline_proxy_controller/outline_proxy_controller.cpp similarity index 100% rename from tools/outline_proxy_controller/outline_proxy_controller.cpp rename to outline_client/tools/outline_proxy_controller/outline_proxy_controller.cpp diff --git a/tools/outline_proxy_controller/outline_proxy_controller.h b/outline_client/tools/outline_proxy_controller/outline_proxy_controller.h similarity index 100% rename from tools/outline_proxy_controller/outline_proxy_controller.h rename to outline_client/tools/outline_proxy_controller/outline_proxy_controller.h diff --git a/tools/smartdnsblock/README.md b/outline_client/tools/smartdnsblock/README.md similarity index 100% rename from tools/smartdnsblock/README.md rename to outline_client/tools/smartdnsblock/README.md diff --git a/tools/smartdnsblock/bin/smartdnsblock.exe b/outline_client/tools/smartdnsblock/bin/smartdnsblock.exe similarity index 100% rename from tools/smartdnsblock/bin/smartdnsblock.exe rename to outline_client/tools/smartdnsblock/bin/smartdnsblock.exe diff --git a/tools/smartdnsblock/smartdnsblock.sln b/outline_client/tools/smartdnsblock/smartdnsblock.sln similarity index 100% rename from tools/smartdnsblock/smartdnsblock.sln rename to outline_client/tools/smartdnsblock/smartdnsblock.sln diff --git a/tools/smartdnsblock/smartdnsblock/smartdnsblock.cpp b/outline_client/tools/smartdnsblock/smartdnsblock/smartdnsblock.cpp similarity index 100% rename from tools/smartdnsblock/smartdnsblock/smartdnsblock.cpp rename to outline_client/tools/smartdnsblock/smartdnsblock/smartdnsblock.cpp diff --git a/tools/smartdnsblock/smartdnsblock/smartdnsblock.filters b/outline_client/tools/smartdnsblock/smartdnsblock/smartdnsblock.filters similarity index 100% rename from tools/smartdnsblock/smartdnsblock/smartdnsblock.filters rename to outline_client/tools/smartdnsblock/smartdnsblock/smartdnsblock.filters diff --git a/tools/smartdnsblock/smartdnsblock/smartdnsblock.user b/outline_client/tools/smartdnsblock/smartdnsblock/smartdnsblock.user similarity index 100% rename from tools/smartdnsblock/smartdnsblock/smartdnsblock.user rename to outline_client/tools/smartdnsblock/smartdnsblock/smartdnsblock.user diff --git a/tools/smartdnsblock/smartdnsblock/smartdnsblock.vcxproj b/outline_client/tools/smartdnsblock/smartdnsblock/smartdnsblock.vcxproj similarity index 100% rename from tools/smartdnsblock/smartdnsblock/smartdnsblock.vcxproj rename to outline_client/tools/smartdnsblock/smartdnsblock/smartdnsblock.vcxproj diff --git a/tsconfig.json b/outline_client/tsconfig.json similarity index 100% rename from tsconfig.json rename to outline_client/tsconfig.json diff --git a/outline_client/www/6a9a3c1460491e5495ea8899784fc0fe.png b/outline_client/www/6a9a3c1460491e5495ea8899784fc0fe.png new file mode 100644 index 0000000000000000000000000000000000000000..35c767c56622de15419c564e9d7685b1b2a627d0 GIT binary patch literal 41918 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 literal 0 HcmV?d00001 diff --git a/outline_client/www/8c59cf2168143c4cc938073f1a28650e.woff2 b/outline_client/www/8c59cf2168143c4cc938073f1a28650e.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..561f1fcbfc6f0a4b695fd6776dc3b3be80b82aa6 GIT binary patch literal 127500 zcmV)8K*qm!Pew8T0RR910rCt04gdfE1#=7l0r9Z_0RR9100000000000000000000 z0000Q92*QAgWGflU;ybR5eN#9v2={NISa)Y00A}vBm<&Q1Rw>1dIum|MpKkT#D?r% z^%+}HfTf#=06S=HteSM6#ewMDy+}*v*f@$-=!}DFUSQia;NzVqCj9@MsyNC1|NsC0 zUzO~6-L0LxJ}pGh|S=Gja#FFp`WUF_rle6W4MXM%5Ru*4%aKg0{1s2l$qUs3p{YqZ4#iTrO~uu2rH63wls zaEq@>a&$92eLiD>lwyLYY-T%3wjt;%9rdz#VV*KG2(ld|+st+lWLrV7&02mE9=MGd zPv}iPu|D?|>tGC_3&I%hSMu89Bku49blmm|z#xU#Ogn3n9ONR6JSLwI(OOyEGt)f} zAqE$A=<@Lh>TM8&iSPtAJ~q1#0P2q6zPI=Pi@$_06T*f7%RsVh&CV<0Ct}(Ylb%^c zbZh@>Gi9g1#+Z!aV5Gw$vh_DKm;VN9EymtqroA;mp&wuuR@__&eSp-NBSwkhP zAu^IMWhp4&07P^X6$Mx80C%gXwSu*^idqE=j!A57i*^}nTeWHxM~7|(;GBSPL}P(i zglE(K{marj|G4t5AR;0nA|fIZM1mEO5JKLScmDL8#tzHaty^!)s>kCyv*#I_5JV)1 zh=@oKkwQd7f`~ZB6`XU(&HjTnX_+DN?d~F9MA|b+c2A|~u7);g2N)!={}~Z&E={pw2QQ8|xFH3idB8C|qTKffRlTY|zDf%&OL|~Oytb#!`z!8} zZCl|l9*OgKgjXnTOZ_~)Yo*I>5fKp)5jlb!Vg|v^L6FC8!&9n=U;}Qz3h?1cH~*o? zm`TVTBm{DVnfC%asDR{vu)u=3Zyv;ReU(z76T!;l?h56dC)FGv!)pXzn%hSS=mQquEd#c});pO(t-lBS;)4 z{`0JGQ79BI!6FEnw$sz|#y$UyGrJorQY@tkG6lJ;Uf1XJZ8ohJ9-4qdv!v%OnfAZ> zr6j#^*pn_85TfLcBXes2bbS2zZ>s${GY`+1Sq_v~mJ)8+k^&2bfFvKVH9wYblll3b z`5paQmZ4=sV3z|eFQr`q+gji}fcRRr?_2riP~`GSlPyA0HM>I$#`anCo&yej%6z$9ZyRj1<7W^7H|o2_~)ZL6yUfeR7` z9)#dB1U|xi-&+1xz0a!OmJuW}-be%(JaIPSRb4Fov(PW;pWp7^?vp>5$%cDH=!y3F_ud-PmzbYE&B4b!6Rt&*HMKsB#&ZGV>j-mik8zANg0z_}13ZQ~yx30^a z)t;weU56#hUCY{#W320I4c}OE-Sw+g-*j&O)7|0Mf|a+hTUl9;o{ZNSf#TEK(VFYF zQ+sBQP=7!e7KOwJ$@Haa-xW<+9#BryM0un9qcl;o;qLh{pZ@XRcK5th-LJcW?$>A# zc#Q_Z1|fj}DS=>ccLS6fpeT_5$q&MssU}2uY1;FPl4rIgc>=8oMW@~SBUXFXZ>}ju;J??SO=j{iSa6pPyou%pIx97*fROl;z zfD*&t0*8XBU@8ER3gzwx96k{|!2{DHa%^>)HZT?8LMYmNRwP(|Pukj#JOFuTHAyo^ zqz;tkSTn>X832-11Gb)c8_T-zt}}IyBtoPZk)mDOH2hQ0#S9^oAWsQ$NanJ4Px|6@ zhF#d@##&>Is;H=nsECND+V}h1Sq14CWv zkI%_p=(Haau$^{|%VCFLEYoc;2vl~ZZSCz!@c$sX)uW=v?FX?SEzrRdkg_|HHfhF& z^Q{mT)M^-N+b!9|Hg@ofWmr@vxwt<1I(EUfOFx6_0FtnP*f{RSZ~rQQn5K}Bq(brE zh}d24OTFvOSMxdcEI*kZZ#~)%uZPC6c!Jfvs!aA15>8@UVHSZafpuRC$Bz;IcmCSQ zsz|qs6)5@xa<)lB!}Yb*^psx~^ENHl+%bFTgzz0Tdm8 z6(c%GKscaT!)3npl1G{nU??ac{EbW5X=o6T=u+}wubfb7#<;~ew&sk!d8@riR)1>` z2gbCZh^BJM{0*G5!#lx5$>FkvTk-WdWoaSR&n@~Cx;1jueI(R2o`p2rmrZSrY+Ru|(B z^>z)ApqzFbWTU2$kTUl;lo+jmC}C|050ke*KmFBk!ApwOuHqo!-{M%vi44++L<%F& z1&!#q*84qXL$stiZ}#0LFoPUjxnb`929SAAL#Jqz;G}$ExlKt0pBb4I%xPfY47bLE zfE*IN1CJl(Du7~o9_Lm(#4uJ9a?Fjn;O7SGf^49A9b9g7F`?<+EY&_e9TwHSxCgf`KkHv%b2Fyc~< zL9Z||9Vai?Lt351Jo3$uGaWXahz|H$LR@k$`dU(QhKlqWAl^@K`TFLdxuElRf$OeS zQ4X3jMXU-=T7>THv55!WeC}8nk=6|6`eye9fQnAe;pU-M8_VJ+3Q664#o!`61D`W* z!Uhh>k?>tPa2`lPA)AY$c5aHhZx2tOeuQ0p>7rV+DnMquVssp4T0^l*CZlYUlyf;_ zrdl5PZ#-b^0X~kL+@#1jcKF{LoT~0ReTN2UMkp)#)&_ho;?p%x7>}In%JP4>Tmm8p z5;GzM4yuJcnp+LWtY{td>&T5$Sm_a;7Dq zBc)lz5><;=C{U&tCKwbD)VMQT*Z9SkUh#mN>rV)SgAepWK#xT!#Jtem#>cAOU?}BQ zjcv*vv|7Dq$#dYkSP`I^kCEd)W0Dxc<2-e*NC;@z`porxp9=rucut6(*RQWy{(M_B z9YTTqh^uV1Jr|#=guxUdaVB;%tziaAGSYF_7*bkhTV7j;wBRff;JI;221FEAbX5V^ zZ;E;Kk#2G5+MepFGv!&2)8(f!ruR7c8$A&C;xyuUBw5O87Zpy|ARdJr-OauTBQ%w_ z&{^s_tw`UGXr6yh$RntG;ZQgck+M$OE{I;7=My79S95w?zHSmC=0`)!>dy!kPGLy8 zv3BG2vWLqztbyz5`no{cuO2W$iyzpJ8fbD&bmw>v$fps5#r!wfY z{p_8g_ufRjeppHv^OXl=|Fz&j1P(fyEfqqZ!3R3L943a_z6WoRs-b*0ctf~%9AN+m zGQ9Btm)B2MvK`F9po%mVvufamd$6BfRJ!)Su+c`^GxNb4;nJ8_v_z6HG;E{p;7Fyj zA!OkqBS{8tNC!W%)^02Za7@+G_8d}jM)6YUT9OPP&ARP5{7dn1B*)I7dQuZusa1N{ z;NHYo)Gns@=LtPA333!4hWoTM#?YI>eQ^Q{>wX&W?g7@@>P^HivsNrVGW<=oP6D z%dUd6dzu^B=r41?2grpC+qV@)*<8wbW1;-Uet{wapJQv-WkK2VB5ZHoqqHsH+i$9< z+RT}Q2;UI0t6W>aO|@oM8Yxjer)_Sn1Cnx#`-2pqnjQ z*k$9&1sm3F9>nL#W2cOqVbp-(PP=c~xuI209on|&dD|}SF`sP7ae2#;7L$MRfvH1G z@zb51FP+TYn%X;;q$sH*sk5B8mXiD;@{bE8p9oZHTee1(Qq`9$QlV^>xCEet#Vss2 zHgH(NoYCCwProJ40HY0`i7;9k0yGE+Wwv4r$udw@L9M50MSQUD>1E1L5@y!=O${A=^Wz;m_$(t*j>#Z9sYwvlBVN+}f47HZHW< z#b|S~O9F%k{Gz-t8d5#$iNb!#t7s33e?vVB#E2)qwGuL`Hf~1cv>c_li!>*&O?9bx zM+pCgz@?A+mBzV7Lci2-zy#wYG`j61@E`(xCTdw_1Xx3XR&o)f$N&$71%LcKmJ*=k z_J%{WgCirP{x&g{;XIaUEJ|3ay69s7qyZ9>*jzW{>ZaFyp?4%K5F5JB*?2WD@b1(Z zOkZGS8tERsvl5UIv|3ktLWa?RdsQC+24JYpaHtwU|6{~UuMUdBRve+)L$onrGH8xe ztWQQ!7}qwRL{x|czGK_rIA`uJ2R9tFS&hX}KB9695ik|Ik}^@lF4GwE0BKYrE~ytg zaRjI^pG(5hu1SwWG#zqUobu3_%)S#{6Y}}oO2|2jqB13x={3bL+(LTHHN^K;6bSZG*0H8}Z$ z*Ah!9slT{d!VX1iMO9q~zCTi7M|b48Bn+Ukd=q_oH2 ztLSX{2(*AALQ%9Qhz^=V`srSx9nyLB{3OKSfqnHll5Hbk)Ky$3^Dzv5f6q$GOnMQR z+AEACk}Or9BY~6tvK%cc3RIH5iuZ#5A5oL+bKz8zVN|wpV7|~&%gTz z4?RMK``T{(_O&~2SnSpvu3vQV%4;sZ`Lgw$)|veuF?787uWf6f%ye0WpP)r9zbqFAu)(;MBd- zfv;V2;OLW%IPKwU>vGG`f@vF;Oxkyg2Bqk4QmLp!t)4V!t+-$Bw~I%lw1PtAQk=}v zixDVDWZfSlN0vM|Fy{?>#@&Fo6B3f5LWX7xlX5F`M)H2slR8m}2x|ooF>DhTW+nP99TR135suht?D=6SU z1{xl$^d#)5i8;|!sz;qGm#*syrD`ZML$be87#$EE5e*zY5FA6xMNk3Tm7vuvf-KyV z>cvmWD}tddFE_iN4Dprcn*^SV8)px2_2{2m&kHYxKfu#F1l|rgoxb{jwi~np#ll;% zBVJg16j@OFTvgd}w56Np$rX3m9e+_U4=mACIDvV5<-2RZKp}%~k6=OOa3>5^+OLxm zb(;femkP7tbq3WzGKQ_>CdANp>K+sd=*PppP2j@yJj5h$%F1o_D4fI-3uUIQC1Ptg zW9S$BG&C@p-i|xy1!8`oh?1RW@db*z(4WRuVvyCs8Sk$Ou$&+&kZ#_3j1g%#DOSB) z6Th#0ECX5qfT(!}TE$$AiER)^wS!a&*>ving&R$!6FU%X-9p~QV@6P-idIXWfxgY% z8a-4)BP#2Yfz}#PJ+nIBF|M3Ts*#8s`4^^|jya%{E*VfAQMR=~YvMCW>$vun|Ni|* z4RDg2C8fH!lq^pRLY@Rm6eYB)r-aoJ4QeKcEne#Q{h&<)RFm!#QzIjBgn+;7Vih zXe=1?L1Vg;;~UPH(bMULmJ_ ziA32UD=~RKE?&iwylbH#ub&tCOVkh`d;zrHO9R1(Y4E0~xI`I7##tJwz9c0GW!o0z zpXidarldH^vKBYa7g~dbb~7Zj5zkb{({ril294_ZFHPGPd%*q6OEed>&p}$ZHxXMPjp!U7yv3STiRGdm!{k9*H9+nEo}i&IkSjs2&%|hyiq|~0jM!g zbUDd*lhV1Qb5oU${J?tyc zi+IU`i33rd5SK5PBSpF0B>d`RHw_;{$MviwnLY4asn{jyqaSGLq9N}sE?)v0l-uen zU?Iij;)%XYVU4!h0&Rz87)b#b7t%IEz~z|l(09))O*h+eTc>tfIN@$?=>LKU#(vm^ zB+`*01DHyJu~CO?zjH>W^ocUPUMV4?5vW9xeiPVY=p!uz6h-rwqWZ^&hkG!;emWfw zj1xaGbBu0*`ppr?KRf-!wACh(w{(xTBh{fy|0wwGsORIq4}Q!C^Xn!cao(lId&+G? zGClj`m?(*jj>#2?3J7_yoB?H1vqeSA(!q$s59V(b37J(gk8PKbjJhYZ!#bglX*r&R zXs&=|bb?MR8-zR=^g2^}oVZ;!JM%HGp_5ymMO?kqFWxt_M{nd=BsPPe)U+tJe8y7M z9wh*&5c+0&6mL+J7VvU=4UrwBt)a*BQ^wvt5iuZ`&{`Yqlb8>inl%Z-NHQoW^cX&U zQ4F3k#d5D*d#aKaOcLOf8LIGJ8KjI|U$ytq2P_nkL^ zgNEAaJC`MyE&y%!xiC;^JgPQW8{o_}(+Q=w9qA-?=Z+Z{NR)GH) zA!{C%agku=p=^dMTQ!I)G&O2db;_UegM3S8Sa=J|Ws(tIf4$RBj~y#$3}7}la8o@4 zX5DerXAF2~25$J#ppSH=2$>*Z3_VJ#^(~+rA27|+% zCqZt_q(7NAy_l)aCIq{jWS1NnBTlAdn>)t#IgQ%49ANcVEVCX|o)-Sug$4u{)Akqc z2Q$aqz$jRkS34SKdwjTxJ7Kiq`&~DVm)tj=zub}={^jZVWRMmGdXm}PS%J0mXcnr|KVq`YWwRPlqro|-ORi; z!sMKmRBBj|kZl*$X9Wy3S9PT-(l>@v#V2C6d=>zL>%Ejk<~p`+!hPG|B8QHas?!X1 zn6IH*;2^?l%|$z*6w{RfVjS6dnPG5{54(2hl<8JcIYPq7Rl5qKZ#Yq>ufAK-9Q(3^ zcuVf!Ch?(}g`+9)nfDpoG#=F(Y-ZB|Y*)_`RIob>P#%OcSIt8zTE!Nq2V8OSa`XM0 zQ_nxhvM#8LlIk+oCukZLND=zn0pMWq1nRIPW=%kw#+Xh+jw_UN+FGo(A#kj$f zrW)c>hqgW1_rEs1Y}d@zjKK^OLngoeI2h%t$>_qtVzzn<*_+Q-KU0#{p(w3S&wnLq zCL&9IQSi!0%@LJdojL?&ZT+>;2;WkIX(J{^ zQ|&^7#z0v_ItQ*W!F9eo+;vd{iPR5pUqA1Hy(8-;_v9d0*5325cv93i*=`l z#+jtbOjL6zj$DLM=uOMv2EaV}T&QN`I#3j{wJO>0)Id4}$J($r1h8siXKD$-h;m^_ z9}|aXKV~Rc0s=IReI{H4Q1vew2Ci1a5Y(1QN8c#|_n2xa=yUG{N+aqNvZaZ;3hyU1 zS(s+U(uXM%Y3}%krE$QHxr0wVN5-p6^S0xibU1(3w)W^vC~Hujg{Y_2S%ue#2D#T(nP;O~Qa}@IyCR5L5o}?vrULjiO4QCAANG=nT;n$6W5j|GEyh2CslzaF-b<=cxIyFVB!yA zQX15(WSP3d9Rdi33V;U220_=sa{yBklY@hlQf||^!UM#$oyg7Tw?uG8sV&5N#_{?D zYRiS!r}i+W6d}$o=jSqlsR}%Kh_4fR;#23Z73bGd#JYSr<-|$0z!;{8s%@*EkoHY? zlXQp?aMO1F_)(@grT!!tFv}DtN{U(76tO>PMzESko7g*XQY|os=jDD7LQ}w#HMHp! zuID5N4;4)*M7mqiB)CXty2-#o9%>v^g+koxHiaIB4qwB;0QXD-<3n`J-pPFzUsrbw zcZ+(oIlFakiF(o6SxOpo-w8Bp;Vo^+WI8odP?|<78<&y+W`#=0lw9U!5M|R1!z845 zNd)@ZFp9*K%di7Ug1!LE>v7b`1gqjaQn@pz{^L>*cdV}TJmiqx(H)_)PG5%!-;dTX z#GVR{g#_d3kHPc0jFA3BCmV7SzD{3G6MVsD1^q`8<)v#}3`>E2?TrD2f>K+P4w zQv`8-0StJUQ#ywP*~6t1>C1x-A;zV7r?*s=cm3)-h@lewdPcHD0Fwg~X3K&4zE=`w zYC*Hicc`BigYEP~+4PzkCLg?DqB9hu0ET8PCx?X#j@izYTn*N4bvS)|UZ0wn8nt#K zJlDwL8p1hI7h*`a%y{|C2bIk_&m1YxK<4QRnrrczqy7-3!KriAKiA*QS5}wV>@ZH> zrW*8bZ%nnqsz_df?!#!G1UWMBjL5M(SAS zBbq2Wf#nEHT zdz2MvIkx5sQ7a5CO_x5k9CdZc8!)@9A%`}3)73MAK!)N#)i*D&V+mzvZkEx+L0Q!# z8mVU?oZhJ1Q{7mxl;D)g*PM-3pA9(t#A+B3?vAW((Chgc{V8Nqdy zlB3h4H&JuJQTPl#2kKG^;=)iC*Zhg3nrS;###Ng8jBXN;V^`UlePG~fKD+V3tX46NBvemtH?lEqIVkS_`MPH{ z{xqV!9JhOQ8p`o8l)rRWKpkwIlR4DKaYhO8+AARykH*swRvVYjnSf~4W8b9@T0U|? zArvtkv3drv*ew4hH>nVikDL2j%u#3pba{9ea$jg}c!Yg4XeEqQ*=1`p5f-7j+!s}u z6rl=qykG-8z*>_64^ANhy{mdCZIe2j} zb8DrOKw7s7Qo0Juh_RBHR?fC?CQ2j=A}wpI+IB#$oh??CLs1upQl zum70)iZq<)gm7y?ZGE`?Qq%s*okhsh8$FQiei;A|8 z)#XxrWjBvAM^Q95+7g#IABn~wZ0w%xoFquOs3k`O#>7AfM2_lt>XDgZs?se3(Z|c0 z6nC9h4S%%pSUny_6c83X4Rwwu2$QaDJE%~>gXwE4{Os)VD3rakscdur>RePE$0RKQ z?X9ptmi(>w<;9I&C)PM8!P@f~h-yg(9)Cc1#`T&9q14L=mTIS`u`xL3&x{1flV;JK zdYDW;opcx*+kKeiVr!sRdjhhpG&IVA?FAI*B1g&Hu>aReVE2UUk~|eSXMVSnAT(KE z52#zDJ2ok_qANtf=vuNH^{%mZ&8oruc!#xHqO#{ zunQ#0791E2NQ9dN5}LyMqJsee>*lrhhX(~%1Ovml4jP~UJ;dZNz~2+=gWZu%c!{x= zt%^;qBweCg!J6YkbE%{x>v{6c_zC^#g2)*M2e-I<>b{>pbn^0W-eqy^jtwhz+Pq-F z&j#ji{P5Y0A3b!2aUC1m_e+NsJ+*JxIx(D>Nn%*8@hKzxXX)TCD_`B1dugkyggP-5 zIjtHMB(%|>oEv5eI#PO;R79FoUBry_gL(NPs2Gh{pSeTh45=_P9kw$<6`I2#4ir%r;?i~QF+(bZ6161n=wsdLrpZ?dE+3VTN-ym@j`9i zz}=C1So|DEB!*7gWUUq_$DRjzD~d}3s{$oyaiuy>nIy`o)|W|VirJ&i%_cE;v^1ag zDqdhwq;RY@`$gQ+xVE}W8m+J!!apUM+RvmANvpz8FPFc%0PIocHKReIY#cYE9nA4# zDRrn^N)saQdg>z3zN+W?hA6r5%m<&%YC;Hs4dYP!@U`wFRuw10=ssVA4Ob#mBLz2;yc~OGGi6;D+sXJ^pA?nhvzq%lcX)p9!Cytk1@@{~;#Gvow z@hzl>l8v{v|MR_*!YV$C<-WJb5Y1_02LOiZN#0`}LHKrsg?+h(6p_$~piRvK!u}}4l8O9C(#IasI|Zcu{)T5Bd1b6O9-h6oYv+#N z@$%W@w?21buge=(ZQs0jaGw5+>$>5W2kQQr)vAfcJFR7pogrvZ(^)bD5Lwhvq&WsJV%0J$PTo!V3YH)!7uj zOVx1|JGadRa&A)3j@?sG^Yx1@P%X4agI&6FoO`7HPVRzCdc#dPvhjgIYa!w&`{`IenOYhr41*Xj)9Gy!4C|MJvURl^<^AphD_^`63Ybn@1&61#AyE9Vb zz%gP^0dycS$zd<3{X%wRIpV>`sD_gmbrNCO|Fbc2&4=W?T2^G%&jlh%UiU*fd$(|+ z=`~4~RqDsbxhY_QbYYBN<1T|mhgz>rUt_|n=&?B8?PoxqH-t}T6yVX|HdRd2Ctt0{fY?c9x_mOd(xT?Tg=^F=i+}j9voQ`R+_<<@S0w$dZV+loM z!!hS=GyKu`boWFT8vrelo*jJ~#>v=+fCVcR9T;F;NHRhn^IqH%TY9lt1=v6+yO zsbn1q(ni-6BIMr%jAkmHUz@As+Cu4HQ7WV4>)wN&GuNi>GRQ?%7y}61Cpw=}#C@!& zqjmOMsMt8-STFuGR~sHJ&=6(iLHQ-6Gy)i&u9s+6WKv-hVNy}5@^?e9w|5@T=3E|o zPDdP~1BPCE@bmAf9x&u~qGUhQzg_88KY7hPu6K!Z9B$V>iS|8KMVd1gxwxCfh5}rS zH=K!k1p|18QE-kPtfFpo0+(@2vUjS>8P%@?rtAc((4WrZ=URe=?wq%WlX%*e zxB#Xnza>dll0HqGY&PYc+0u!u(GNP+E0W-X;b!MvrG`0&Hk3(gaCKv^#NkZ7?kp6o zmUc10L?AG*pY?=kX300eys*{hZrSp^WWn?HDGzd}?Io)Hf4N2vGYx93tcE!$wlli*9CUZSY3#nEq&dQ#S2N^Rd2jb1SNKC`cXqyMhM%GBe{_=`$RHr}JMc@HH0; zlOyJHm9nL$nME3~@fI3HpR9J8{w)R!^m$rO`KEsYBSGDn&A0=F4A2E*yM*8KG}p37 z?P)`G7B=<6VJ+G)3d(xCV;_njnzh$U&Y05?5xo;1W3%s`DKGqNQKdjq>ha`PiS{Po zo(0-2C1#YFiSAJ~1yLZ9ETV(vh`NNsioGEZ{}45nL*Cshok~VE$%8cs!xp#9w^u{8 zmvP)cts?;4*@-?(5VHi^-Dku1{zmtb()L8mTw& zy!2m|782hqIbdDQ!ys7Jv92T+2JT@MgS4|#%I;CV`JE4g&YIjz#&79x06oN^Y>rT( z(dY;U?8Y7EAMd*A(56c#w#_!B%c-URLMnx?W^aw2*!YXJk7q_%tJhjew`%xC9#WJR zkzynHW!9XUd9tk z-KqQmSBjcE&odqKV+EDU*CBRMY&>RJu`1+-(J&Zzg|2-h3xRY?;RPopv#EQj>G|34V# zP{*s!I{Dk`1C{r{P`dwMG%rPy%$Zp|FGNd)_VIp~$^1FDB3cXmjtaCV@C7OwxlP71 zL!&0Gj(BXIK1V+p6?#5+iR4fItDVO5JoZ+FyKt-efG2<3bdUHMXZA~!^1sEnS9=INT2 z4boh|F3807#~X?my6IW@!``By4|s^t?B*~1!jaz|s$&8rXb%WG9+%z36iQZGwn)uO z72*~fj!59Bu%Ot%L4jfo4-If0+~5aad&hGga=S|$AAPe6!VAZFlUHfNa6s2fTTi2X zkj^8jz7$K`hZ_$T*^N?Rt@3vxxU|)n^~D5bMhHG6HLx@4cQP7Bu_$%tp7(}o-MT#H zb~j1zb-Lr)cEp_t)$l%7JkT%VoEB_}tFX9?w6tN(07Qg)McWY0Vb>TLp-GN4;C2fV zc1P3>cjL7|IA|UiU^Mt4c*s%r*7bNN`h?%`tE5dstOPQ$WE6h47YgN&Pw~ zlwXHG8yHKD8XHT~q}Tqb`-4Hq0plM5I7Kf5&V-Dy-`1?~|6McQGtzKlpr+&n^7Acr zwf7rWFWvK+eVMD749q%d_>c{l@LHQKJ2q|S@ow*9KIwx$@xwp*?OyPP4<38R7ax4; zc1P#$`rzp0lZS3Nbu8q~i%T~yS-WEEMPKGV?a0Zq4W2x14FG_OPUgOv#NpdY#JMxiXQXvusU^~f9#tj?lI?`(EUQq4e zZwNoVDN?!ss|y_m;FL2uct|vBPrpW_g(jQx@@pS)w8fX%)z-gW?fl!--oO8dU<^3k z2qt9U3k|1YM<+wu+||-bA&sHdAq-gWZ;M19?iRK25Fme`caV~|U5@py5Sa=%dPIAn z=E04Y0rB2gfpmiT^F%oiQl02Xs%8E}NjLGhu>LTZ!PnWV$z~2W%rWpE>RH_~*GMgp zKvwiV{@G#yq$f$WIj@Jd2K+cgYA{^Eq-2Bbx)jemCf^cjNUIxut@##79CpA1in|yLUFsyXpQeVmP-rXY7i#>B(aVGk&!WrYtTJQE$ zfEwnvYzk(k<`g8|q$i~}c^5+Th$)^4;-)Dc!&$vGE|GiLQmOp4R3;CW%H`owh5Wr# zDUX(_qQPNZTydDtC z9h4tRl%_GB;b!ZH+1mmdhgIgftA_pYvv_%e^hv#ZMxI;Hg1@jQJrr9VP} zJCPhSZ48^f6#~L{qkOC4yWy!T-go%LA=}p7+Q)3kqTBw=;~uF*N>OgCO|c%Y{i`}1 z2Ey#6`S`QW{kZ(|6QYCHqINZV994H_WG|R-SJ=<%(8FM&q=oB$dVVZyUh*RTz4;cjMbC67UfFogR3 zFe}A?)&4&_(wt^CSML=V9oMKll2eluFHH}Od#KeWov{4RjzTqJ-jNBy#`~N zjE^XB*Lpr{&h9Ic9~6O;oh@A%K-F^-y%SNE!0WtTdR4BDRKx8?w5rr#d@$3*ESujtL;b91+?jEbfj= z)rztK^4c}{8f*Q>4An}&3Yt(LH7Zkb8XMTc398iJU9_F~pvzr1Z5I@R#DK4r+mwAE zG|_VRUrL9j4Yy!=j%L2J_hf9RgCcQdarGkdVw{NV6R3EVzwT3|8mp{D`63ld7pCcZ%fKXLdGR$)~}03`lDHB{E~=Lq7sBC~sY{iTF- z`6|;O!Y;MmJ z9w?blxw%=q15#^{ctz`lEm z{1xeHSo*SgkhshUaE@;@@iK&EyVDI?rFi`ViAI z_R+U~>h7mpx%J$ElY3ZLShM@89oKKQ)~8!fGi>%@qo(L5=gmFN4AwD995uV8Tp31*!K4(r(kMiN@~42?EWX`}Vq$1_ zqE!Fa<9>7QUTGL=_jo8^CAg7gR%2^Nw>MY}7jMHyb9k~E>vdd)Ypb;OVG$bg%u$Z; zsplF0pDNZe&^KGzHf%-a@I(cTUJn3idwvx)r^J>u)LkT1-PLKT0p@j06=<`A<`Ni&`=t zF>%&?nYV#F;&>f3^*A5L6IR5$z_hD_L~QB0ikvNNB^Al@ctTM#Jb$}`=o|zrL*|vP zigI;3Va3b~Oxy0ScgF474WDOFvAKS{F>n4jrPjvOCZf8Q~Qrk@_Ohkr+Gt|=^0UWe~=}3 z#2Ix?&Y*jj;xriKfZ}nF))GX(p%R|3k_b8nOKJ~kO>5{Bh6fWqr=C%tFr7c}LjmsD z-8?GklhT#8#*2rPjL^}NTusYiwOT6aan^=S4MCQ&!Z7{j3rCK7K`UW&S8M5)D^X)G z!y}t`2E&1o??`|-*5nAg4&zH=CYO?v=Pdr(3h?9DZ>RT5GlQCB?UaDDX}!(iJA=@< z1eIZgiY~@$EQ|Au?|m#sryg=;N-7UQyZ5>e<#DPjOL{GFQ>w2U6v-Owm!)9fwI)+! z0*~=ZI&5|5nVloKSY^G4?{@SnA*kLvdJv7sOA8xK$=8el$dxag6D>pv=_JVMSwN(w z5na=a6rxqwK$(8uXk8;_77~$A_Bcvi_nK)v^AhenmYJH@eRKW;j?y4^xfRYJc^jUm z-wcz6K1TkP#a=Olfo0^J<>75hw+h^wacH(RJ$*mm6b=Xqasm(J? zE4>g5R4D&!tN}DRB;i3uQgDX+|8Be6fivGT$#n}CZ9&*S|I5Xp(~TN9IQ`btXKlB^ zH&@m3daI&>Y6T@K6fTOwC@G;cdGVQd|KdA6|L_~0dOR-gcI~O_XK%fD;=-BTt+kWg zmhEQKqP1K4*=#2c88djo&b?Y1gv3W{~&m5U5+Q~O3JMZS6JUCi< zZj^Rp4w)Qd@W)TmymMhq&P2{uKKQi^DW!6CTjBLgebEy5LJJ{}CK!pX81{N+yR##q z%lM^NCZ_owrOn z9GlEnW>^9n<^(V16k*Xz;72v(@k>#rMmwA%FT)dP;v+97Q`Qjg*e~f5-!{!y-Frnv z2Pv)a_C&adg-B2;{49AI2N#vA1R5F%bBcuxW1m0-G|U=XtX z6s#B{u$twlh2g326=skt4B+-Q87O{o!xXuRs|#!$4Uca9sl1=UCm`r4tjT~mc#M5# z6Qw~~Nr~_sYE4Pi2jfX!e2^YqeE6b7-$VfH-RI!ACNwmt-R9ziQUd+kI=eLfdbb?P zFF3>yOO^{tYPFobLw}(mjzvY-Y`(i1itFTyL(*A;1h3*OXrp(Kk3C?kw%0oLof>5J ze2U9>KbG-CO7-$sVr#iE5yXPD-QmP&so{5z{no*}&ZbDY2NsA_j!Kg|Q!%BE1Uyjr z9^A>(#6wl8U?3zziO+C9YJuXcpLGtvXk1!4an;BYM!!0h)tb+>P$7!o5h~fQPgz}m z?3rs$PlDHH#kZu_LYG>vNFLLBusq||=%+ls>+ovyg?82pcFdwJS#mMkx;-~+B#W{ zfRicMLs^%7;ML5$Vee|~j!PrUy%?gf0aR*3J!+q zv`tde>h{@=z^zVS`^GK3oI7K~h5L`VIA$A+N^8;vZCmS=rl^6a2fA@y0t)?Nv)w_} zi&wmM`=dx=%=;(~ub{r4Aj}@dzLzBgnxY&4&M_7#d52(d#vAuqXbrBn1*W>6sMbVci=h#bhcoL;)ti(ClRbd*<(Au`qG za3r#{PEMmAN<A5p@^Cly1Oz-6Xxjgi?7Ee-Cq+vHr!Ow^dx7%XO=|RLBixgjTt_ zE~2ibToY4HAXT+KSefDiQ_`#4fX!i@5=oP!2frTVCRCt!SFH&jiVAKO!_#v#=95`t zTC~8Wo2VO)S!-sX@EF{9#&BnjbwSsjiI$l|X6*3Fi3!AX*T?ticGq6OC@@0n{+3JX z*4XVn9X%g-{dCavi`Fe#GijDdBW52ue$133`qU)zqa7P{Xxgs9YO09DKi~4kHvtK; z;b!a6!G)!hflJwIQnnW`D#gt zYa}q7(Lez}IAmDssi}Z+GarPr-@{nsj+L?fHy70)eF~qdO8gjE&rKblESl(4u+=lo zown-@UeMa|)ScgVkQoH43bMfDLNJuM-8|xmOa4a8f(hs_q-&PvMVxUt-=Q!lMe_Qg zCviW>gw;bS2WjNHTFk`Zj~%{P(j3y}lr@*UxfRW`^5Z5upw3p|W|L$doH4MBZqYJ; zLrS^2F0L7W3xP?{>T|0w+9)#!d~7CT4)fG0m8H#yq((hBH~v-nKf8^i(SRNwKPyU$ zP3UroWQVwNgdGn`TP1U_a7tA-?CHo5-QY=WsFL8T)eT0G?hb(*Iivs6u|?-ltP7aD zIDUw~1J6+Sz6aXvKAkaDejhLLR{1U)6PTP5h)dN_)45VZAh zg1XABA6J4E{19><0{aj2@Em_$U@^HyKZFs_fO=VA41bQZ&qrP9X<3b9Xn&RLqQQJw z2z!t|@On}?bv>DUeLcDKUr!+e*Hg;rU$+tjS}27N0){pEdI8%+kiZ>~!FQ0HcM~qyAcGld z{)Qd`Fh~H;B@1`$4dda8(KY%sV{h%&x~@kKUfyLS4}nftsy3;VIt<~8wYzjAiNQ_gVcxT(f=YOi1V zQ{Uw+EFvjBByF_6d^K9RS~**IY5pk4j*FN&)k4x@b~e0%jX=(xo{R%awsfvrAyo|476|`0C;aD0K^aDYiK9Mr^J^0v?L-Qd;|;VkqKdpk0pSR zLDn|kQEDPlPxPh04ka<;j<6r<3_}0{Mrl~-sI>l#+#_PBnER+n%&yz`!(t;eR)yes zMrkofzdKcyp$NxU{EU8sz{zZp`V4k7@_YYx1td!-YzVBgem#P4Mr!9=yL;jHLE>Ge zey4N84Gg~qK{(J2?mDCBm%y^9DmDBdFUCUnLlxLNSG7v(AJa{CS6K+ zRm-hFWyIdU9am)}_<Z9HGWWmDtD%bicHoN3N@fXj9*Nz=gQH zY|^)r|6OF02gU_&=N}ya@k0EAeUyZ>Gkv~m{LC#lcI5~pganCyi37jr`5hfWt3<|m zSDbbg=(aQZt<0Z^IFa_uaKm3PnM?atE2d}m&jt8FYS{=DSM%w>Vi`p)iUGBa*q{?X z5&EZ<1^Qn>`^4zTs*~@;2z0-L9`Dg|J_ogA-Fy5C4C&{dEMxk*JUIxrsl~7ny+~! zx16bH?rZ;uUJ_6!-E39deeGS7u+^Yo_y@X2jdmPKurYEo(Xm{`XlgH4ch#wwyX6oH5G#6hKPHHdPKl6 zbaH#e-Vmp6oenHOLB8tuNzU^P*Ncg~)Rg59Cxe4_qW{UzzU@9LPM=&;k%llgg_5}i zFvSd;%~mlhq!fBfV7*(POT9{R4t9pRu(QkHi&>Gc2GZ5t1cy~KYAys_#+VlB>Vkbl zk42RlzNu;8A+IsiwI^Uzdw?XzrV_N$Uwj9HV+TadLRy*wLw7OzIJJmUAxSN+oJn_y zInicR`oX*4K`ue{k5H_VZVTro zuL6QSG^oC+plM;f7pw@n8iT|jKEWVDVIdnK z$|HzU6(^FTzPjIGxjmzZiIy2GZE!faNeVC+6tIH+xB-bj9`XK|0nr1Av}ZiXkq)+P zewLV#NVFxJ8X`ZSyIvfzd@PmPmlcm^|t(HCH35S7+;K?|1N~; z%Fh_fFR|_Vx+N8_cW1@leLrEfw%OeCrOJhB6SRxkg9mHk6e`1NEQ%AGY*BQq*-~-E zuzQQ)@}?*GO;v`W#xzZ^?ccV4i`BxSLQ&v;Y{&w?NykRyDC|Ik!LA?Ntn9~**J1qB z9ihoZ9oKM6qc^hWd#Q`=q+YK+&kO;2VZ>d$`jjIUhS*mLV%{XVh;eC z-p4r2M|x*`pFZ95<;#2Dz9I9I9#8jIu}1*SAjJg$&7j3z0Gh$ZYXhEMkYK?0YhcqG zkHJCo91NeYsGy5T3kyC z0cdGB_o7J?!?dS&Rt^}$sjqC<;0^CK^bMe8H%h>UNSd?&GGzHPU?7qqL!pcq31-Y#1QRAgm@yN@oVjq8 zEQPUUYaBav#GYMvc$@k%`8WbI7I*w)ToiHPMs9>>LnR7Cd;^S z<4u^5X40eyrc6mUZCa)oGqTN^m0`}DRErkn*moe;kt2nU9m{v(L|)FVzISf64Rp@P zZG%5ZH%Nor^#V|!utII@aDfAd4K7^8@EVUI^yp2-(Y)WN@ZlrEk6#HfVx~}R)wlH2 z+ZkW3-5P1y%~*5hZac`?bKAi{83F^@&rpf`J(ArhLz*v^KYtm51Q{Ql!Y0CXGdg3|3jP+2qQVuMj|i5+#aLrg%L-d-=wRRH{^>MvYSS8kK3*Y?4-O zChOFrO8*(WX>Nv;SOd^Lys?%sv!_P>>(uf2S-vZWlrRg2Kf|# z0zz0uGztmB^tbVO;i~-SvX;^$s_0czlMFR9fm(v7OXXLuTG=~jqbJaQbXiWVSV1FL zNg?RysL@&d?BB5E+;F#Jzdn z-HZ3*ft+h5PF#9MF~d-rH2N}Ru$3v3sVrG6WXonGM-Df+a@ot5&qIL%c8V0S0svs6 zR4IRD%6KYQE>MLE!75eqQl(0eYBhY-s^z0joiO$4g=o;gTcbt+nluSDXi%&nLlTV` zk!jSZRAa`(7&k7-gb8t`Oo=vaTDn=YlFgZuVBWk43l?Npv?$V&CE=DWi?U)xu2rkj ztXY#|-MV}mHe}nhDbKcTC3frp*tM(3o;`)Ghie-qAr5Go!!T@?q#xf*=w_6G;*z`)GWS%+aQ;pAH=(bm^L=M^6uZ`i>YdaLACMeMXFIGGXF?DO20b zm^o(7+!_lOc385s#fr6a_Ux^2;9#92C%c@vI^o96DtGQS;-wfk?!CIlhmRM&eBJTm z=Q;k0f#LzH4*~^x6C}uuV8I@Q2=SUw#lY~eqHEyc#Xuw;vHBuPlt7tCFW$QZ34SC>^qnNdAn@eXEh$o5B~>w8;Av|Zq)P`cLk1L?GGWV-g;=(1SaRe* zmn#>tJb7T`%Lk=E0Yrt0kN^O{QLGq|5+yK|Dut&^83N_X!KzRJTBS;as#L*Ots0V6 zt>Cn4N2WsuRGm6O>e2;Gw{8e}^q|(O7abrVCc}nN8Zm;!m@&-8jiWMQ05mJURGa<4l zWn@eq=Zb}pBPEkkajvCk1?0GD{uSGLnx@2?ZO15j)GTpdgaqCvD zJ9o0&yEnmu2dN%C%JJk$x)(1pyn1EzjC*oLcbU)j)t? z4n&BWAVD%4GGvWVpqK>}ss?D#)I*1^4h9S}VZt;67A(_Y!!`{L9My2)nhFn|De&Q| zLV!ReLWCwGLSzzR#41AKS1tqS<@x(=J1_KZFaPqI0735})J+J&MB&7U;S(p$g#-x- zk|ep4B11`*EDbqw4CKiRpg=(|MT#OQQ4&v?vScb$q(znV)2sHdP^Yet1`TC2X_;ge zrcIj}9Xc%N(qr$BKV1Fwmydt`@$=t*0rcrhV8B>16DBg4GMCMQr9xJ$6tiZnnhiU( z?AdGMz(EH`j;1+rGRK*-1uk5ybLDD_8#jC0xjW^-!-X!W*=z~aK29qhvux!~@Qm&vMM0H`SMSZ~lh~a^BGn-zxm^Uxhf(41TY$DeRV{gdqE(9#qgJ*YtXz5Y^5qLupg@d5g<=&ck_Z4GRk1nhGJ(pK3sa%O zgi4jRRjG2KS~W2>YV4?0Yet(V7tuU@PA^x@L4pSl492LBDHXDGe61Oznv^(Zr9#70I9T4pT0*fefjs|gb- zO_|bX+B7gTX2hE{i^iNe4CXCZ`g$Z;wk*Pm6`|Iwk+Er$sV!S*?b^j{&w)sXj*U2R z;@Fup=l=#2xiFADw+5b>`}Bst2M^>udNl6I6FkqJHG1(v%Bxq5-n=2pmx3u!fh-gO z1*!=cFn@sqcLV|iN01;Xg94=n0t8pEVY`6?$1^;59^k|GgaDxzM2K7?M(h>|67NWn zx<`i0BXZ>KLTw2G4H^(=(E>-09yA6Fpu%MF2@4iqVN(c6#lHA~1BY*%IQ@pp5(aME zK*Oit0~LQE7{kn34727GnKv)qf(2O?Eh@BZMXXhO66`yX?bNAaXU;^ra3R8_OF^z& ziE`~$use66-Fpz`(IX#Eo_Krq%HNxJp1yta@Z)!%U3^I@zkVqwUPPp^j7c$&qLXXp z2Ld591S;Z4z(6KTX~G3JBI%|NAU{zRYKu~psT}30NJHvrpsD8C%6dBEX$~{cLr=W* z)vqXpYvjdv?8Q~xK_b_1ya^e}R=LyXSTZT(Ocs)u)MRB}eLnc~6aV)O-|Vg5^&7tF z+kaS(^-M4H%4Az~9lbYAE4$Uc`HLdTQ>6o?A2G%*Yak|cRZ*Zz}Uh8Jyz(>m= zNaBk>K|~TwJV~UGMh4mB0-%I)DygB7X4>ds2st#+#RxO3AkYBzIO4&ZAO3VXTd>o9 zCsbBfeJ!=qMNj<qIlUYe+E`kJyVi{Ci%&|=F0Za1jy$TM;JC&AS#frOL8U~Bw!<4jgp1Lk z%Y?SRp(%}yUgw{SFSZq*K0|3`w7C5LegEb5_v@c|`jXsmO?f~9hZq?uqKPMkG_uJD z<4PoT^fE+Gu&)HAN}vJ(1jNW*i9~;wUbjc`7eAsHyl|`L#z9=Wo-cMyiCh!NpGrRU z>C96vBSQ}RsjL6S?LZo=LCwgv87*?^I%cnoq|CvF*E((MI#ZnbT-UxixF~=xMY8B!E=xa;tw2R{~_)gI-shle6X`r30f2?`RC85xbm=NqB~vjfS|!mf(#_O%0l<=50I)!>)B-G7tC{EF z)c9)LJ-+n#LbXfvx$1NE*Q$PXqk5LA%Og}h-b3Y~^zcyrrM%`jtj+}hSakJ$-0ivT z;ZLR6vjJcp>rT6q0E=Eb@urzmrUyW)QLB^+xlAhNaajzyUOl>XY1bCb8r7>)t2#;* z11OR&SGFt}(xgU$II&`cO<8F8hi5p4-lhZ0{|_+#4}kfX;kPqa1^qdnLVvymrWqIH zNpemGn3)1MQ$Aq`>uh-rz)WknI1W5IbCvU0TGlN41Yo*D_DrXB0Mj!8&c2bQ$dUo3 zwMiFB&jWPhEr5HiPJ94dlWx}(;;UViI@Y&N`bvBP?3TeM@_y70U6J2qC86jBoq;-cV!rCb=9H)ZAEs_ak&?VCY&;>CNduvwybA1DC@-sk>~m}n5DUC zTFt2W?+*FNMaQ9LG!89BOVBEGDr!eppsUbL0Qxz42tco(H_%(?9rQT|<){Ec8D|=& zj&q4~h4T&PJ^ZNH^k-UFCf2+Q>mG=Ev9F9F6mGCu|26r|Yy2iQ49SP*;63coTO|WN z4o`ba2A+u*n|KY|Cyc@p+U=rdkAtHDLMeqqBAtnUG zAH-~;o!CrR2`90RI7945+z}5%iKvK=$Pz+HTqQyY4beqJ5ci3P#1rBbS4cb{o^koa zJ>oqVA)XSCxB}u$qh12}vFkmoUbA+?rp+KqI?^$HzcS@qw3YQ>qwA;zUcA zEJ1_}k-|mEl_p2NY-w)!hHfy+Fqs{sY{kzJcf>N*%NsAOA9I0J#qQoMoX#^@qv@nm{ zA}hoPrAd?_T@t+%36NBo4B{<8TWqO91xjTrW0u7zPq7>(xk@ZkBwvkY7A;r}YB8GB zt5c~_m1#7y z6P%_hx|m|q7FSXkWw)e~%CpoEQ(K+&)SI={t#6>A?rBFt2_=_OYH4MZT~4_bR#b7- z)mB%1ZFMx=TnnwY)n2DvM853hEO(1nzKT`OvZ~dtZuM(e_?5jcZ=Zh6aSp_l<3Q6Pw)BW;VOI&2Mo_Ti)u{w!V#RZfiT+-QMvh)<1YYy*w$jyrFy-u$cTo$z`osZ!Hb)0zJEU5?fDTsJ*e)zsDZ z+imZa)y0xA<`hX_Yi*w~#m8xDDqg1uK)fu4vgOE?CtrbLks<_%5-dchXko(n@a8W- zAWvRA`0^WemXOM`%mVU9tFV~z-O_^JRyqHDv+d0n$O1rSTL8)ekmD^&6229(xe-dc zN|u*RSTN#RD^KFAFLy>Xj!rk$krS9FDkp9W1+rd7FQJJ`YM;eEoLTRh3ej{J!%rf% zDm4n&R3ru-NL&gUuX!vUotqeFpHQ)#04mo1xhWpNc)o5E#TF)8XLj?tc$%cgB{{8RD9{&YCAl5!RUwDdeSn7CmFm@$n z1cr|;EtkjF>&&|#F+g$70=XMEygQeeV5n;|e4oWk89)Lb0)8}MxP0^NN419A^A67R zgN5OdQyw>l4GqAeO*(KxD->NpJ;4^-2dO!MI&K>r2?x*v0e4qF>N&HB5s3Xx`4Nt* zcND~jMzrdrc5}6V$j4i-8WJ1Vng!vb(_O*xf+q}NnFvC3-m`>QMu=xbBK0g!euXAR zL;!|5@|@ImZ34Qprs)EsB6{)mu%_ebx^$?d43A*nZ{&~d8jk^;=eq!zqBXi6s_C_J ziA2W3xq{NmE2-+feb&p;5`pxx34{Z&?x}(d(_?Kp$~BL!0ootufIomsVizq`U=z4{ zk0V7%08a%`yA~QSFMvNw(Zjim@ zh&JA~?L&)gwlMUBq9m*voXV7*Xn=9-R8NC3BE&wYZkUA9IxDw+BC`bT-JxyKTC2DS zm{Ri0X~gCT-(0?TUpu0D6Wb%$;Sa?3)Qh3nj=Uk{0jORGW!N5Ntzqz{6ej%i1%3`s zFr?~rpTZPGW+@QZY{4rcM(l*$)%-*c;P=-ozfr1cBdSlYn? z%wpg$C;DYOjFP}PKzR2$)FjFmvm||Q)~q?Ky=_^Nf)r%a@Pffa-DKnX)&@Zki5mn{ z+7;_3NoTDLtzsIYokZNRYV=b?+Yt5k#P?l(Bm~H;6LMd!SD=nq*k9jR)#eK(8m(e_ zloR3FEh2DfcL>_Bw6d*#=4yCYt8zv?c+&z&OqljXFDzp_-h@zcv!mwEu0h3)Ga+{A3dY6ZuXnQE8X6XM2A z#BNbqPW3vJz#%hX!K$5#GZSV9X-=V&$+bxE$0qOg(^Z=84D?ZdGQIj)2LOo0e8xjb4v-z1FI9{ zuS}`*;JLYqNN^^K+^h^nx1b?xq1~p|+U3X7+n!lmh4Pa|w35t$O7j39dQA#yfd>up z=MkKqg-Ll%D(< zVc?~l1!uf= zk&7Yqgo!#R2K4~t#MA`)x~M5QeYx#G3uXfhAd3GaWYIjLolQtadMf;>RfP;gqRM7Z z@7)YEX|2s@Aru7uE{DuM4+?lN6`xo{3cQCKY`SS&ZPS8F1q@xf!FJ@=mNn)AUEtcT zi!Qb^)N1u>gHwpxGlh^sJnGU3o_Bhq3%5n{Hn?nEDE-^(=^5a!VG)0^iN90=SCvHC z5=LrJTZTxZuvo79IpHNGd8Q%_X@GOEnkb2-l--_U?~~$53+Lxj(wOWl__mw+?s}>7FSf&N^ZoRGm=I$EEvYQBOKBEW&1Ps zx@^jjaP4=<&Q_onw=H-NM2%f(QHS@_K<+~`lM{{*8JwnSo>g-NPI!lpnS^LscB9Z( zDXN2L@MU1SV!YvGuD}uHehmfDpPt^!Js~JSpCpxT=vk=%qUd5Rc+mPBlScl3P&Y-! z&fa4#XkQkw+Ljr$gu*qdCx+CRBSiFiFyk8xcQH*_WN3x-&`Tm;ENx8k+$46%jr?>i zSI21DNN|Dk3!EBG=w%V=^|uLWdN`FNDd}QCKLbEs^O_{5@u5(#U;@gJ3SKD0h!6}r zjGZ}W3^1a^3IxtmY&E<%bXfe$*C--4qB|$et2c-E>`ETnu2emXoJlge>SlRs;X`?h z+B8Q;h8Y=@-eN~!5b$9JcxW!Vi8X7a?uZDY4?Xdt^zj4s!0a(1MndJaX)$azv4%+! zkeJ2MbM%;IIKiL9HPfl3%;1li%mY1TI??(&)hVi{Pg;}2s3YP?EwPEqKv!MRQ#kv& zkC&!YdG%pi-|IXmowkS>ez6nMc}?`{x~?-4o#{&v#Y;UZUEe{~lNx2gC~DMf=WJECd z*Em>FcGl1^ifYuylQ1K(Qms=cU;1HHrNgQ0}@x*QL-vI$%j5EFMe` z{k=6d!A4+%)ktM?gD(BubKAS5de`UMONTo_0B?9x8j{*cOIi|q)>sB^*1c=#?saiZ zO>?I+8@U{rS2lf%Q@|R~&}OaHV-5n>rUjrVcmvyg8@8|O9jQFdL7 zW^&U!w@h2&5C;{F64W$L$b`q*dFxF_ty^G8Tb^iF71u@-Ux;A!lT`p^`?2PDtCsgU z%KEm7BC4g|KiEU{>Id2B2+g@kKmXcKg84!q!o|3P?M)on(Fdi6a3x?=mvPJaf@{yz zh38m6n~v`^?DVKoYe9mViX5Z6C=vil%khzh*x#yQU9oK_W4nJ*p9S4_sq11VCZE|M z?DRR1#kh~&(Ze%=J(ll6>a<1eow3AE|&|r zFC)rAwu#C*67qJgmI=N)^Ny37r;1)X(XMpAE$UNe-ef)qr+PISiqpefGAbh7bJFs8 z_*BU0@KJM>Nm;yw06q2zROfkC=U?7QQlI1$Ced{~)szw#H34T$$5jDC8gll8_DSz? zHMeAx$P1lJCq)u_>S3{G9Bt#o)os4kEX6>o0%JfW1$}#qn!6%H!lW3c8VRIpGo8k4 z*@))HBE$2u={Y4cvy(R9>M6a{o2J%nMHOtI2W@wdlNAwrdW@G0+^9qdK_gka5(1x-h&E_#9LQ=BmRPgc-t+uzJSkOJ#kTVMJV|P2>1gGFVSK$J51kqs($7A;$!#Tmq<+ zJI15Una|D=!tfQp=9}b|JoTRqH!FwuxVh{kO%$VN!^%LWjf^dB3~8N5Du>z+y!U4J zfaBm+^r>;@2H2`+SU*z6tj5qJ}sJC$>nr9y65+!%#EbWh0dW11;_LK>Knhr zzbJ@J*q1R7nYMSB6&pDcuLE%Z%|6FHEG|CL7A7@)f zdXB5fljG?=k{6wy44hdy!rK?=CdOr&rYU?*Sw8z$$up--dFx))$x^f&I9P+4#?D$j zpgD~N#s9~h?h_s~tvCSTVeoyU;b50c?%cNIHzG&5vXB~j8uB53_$D!p_gr--oT`(| zbGhjJSJz;uqydsbX}ooWGtqw20d3dbn%!D9DC^3Cw$X)1O?D&|-tFotcz#5N)<~*4 z60GeSZ!F38hRzqmNb(s(0WV}a{ok$+vGFV(qqVk|*OEKW^9~tTn9VgJr4ce7I3E0N zn(yO1i6gk3OTPr0S?j@sT0(0RCs+olYfLkepe0QsCN=)tey)-X)HSl-`C#Uu5T_wm za?E$O>57~y34bZ>B5A`BuNO^N5~`+#0gpIk`X=_B?0~{A-3HQLvDsDVrh}NDli}LckIb95UNl^LfP_zHA1>Y`M~+*m8632U{7f zrS>^$t)-%08|EtQ#M9-Y7S`xtIA6b@UqZM@W6s2qo#z3^=lg!a07dWFRe{BerUAr8 z!tk=HD~S}BO@TzDpEH#hdhnU8R>|BDMkZ?^QLK-&k(xe6OM-8!-4rasuL!b6uQ@8k zVM*3mchl$v)P|aXiLRE{TfGe0oo?H9nE9&cyuWxx-XXQvICzYE3*7Y|-zE%q)0HB( z=UoAw>*CtC;d^H~a{1rmKW0W!1Af3;6SGiB@X}%krSNUEU3zFjm_=UgEe`y^h{MY? z7Dv4UxJy{4v);b=py^WYC1=a(Gra>Y!FPvaDJO(XZ*?hDEzMe7nP2-)EBknG|&uP8py;n1UeIyD6g? zQj=4%IKMhrJc-775DwX#<}M#hux!lR>-6b=>dDh&nmeJG$TBRK71%*Fc@|n{9k{T4^33v-=l`}B z*R;=Gnk(X)b*uX#QfUZ=Dm$QaDYXT=<}L06iu8yv}{gsQ_cGs7)a#&uAZSy%=k7KQ!HSE@I;q!AYWttcr4)GhC_;kM5HRrxE*Xh$W zZ#S-lZGL@bnzM{QfZv)LxjUP^-l4(ka6b9Gwi*5QqfX*F$vV`c<*D^u#~WbWfB8mM zz<>st{F)OVU$jaA5vHt#h2Rk#)J7BqvT-afg+Yfl4m2y+5{3Y#zSKa$#`^IAkK+}d zk7^D-{hmcu+8xKEVrj=g{DN0FCn(xv&D-(*!+Hg4r}YH2$Z5-HMYf%UMn7`qZFOtx z_m=@guD*6owj=qFlVZvj1{e1$XgLL2!?SX{#k;WM-z6&9b=imPip;m@pWIV5dA^zk zfBo4PU)FK->!QZBc0Jqw3BY}fvK$q|yP=d3hK`WzabH+qkM85}VmP~BWi0R6 zg?vJRBeQ!pqTwnk??sa0~M)2hTQ-2+ZM(^z-%)0lFcmw(ig|gs7;n&8xvLJ zNj<6pZV8aNsDw3E)!>6?I$2rBa{cbVq7{ERECoEe3vR=Xul6qlg0`W4!k|CFIpIP_1AN%MhIfcZI$x?!zjmiVEtg8eEihJa=rufZt$l zD~>8mEn}uavARcOE?>GQGhLv5w?h~@J>)-k3~yb0X#d9lr1magbHh4h(Lpkvz0@u| z8@dNWMFNDYpDHllnt0lKGo8A~@CeFSVB}$$AiW_1MjNfDg8rx<_M3fzGZesqpz}t^ zaG4bRO(6V4LVD`F@~{O_wxcGX_?or9Yk-zzjQ3-XGLFcpM|lF~fIyg{3I;;L=U9D8CY8v;JfSkHf}m|iZPN^`?}Av?NYF zyb}Bgj4JXmD~9PtY_o#_85lxkxB^nV#|H&_128Tfo{T**3dKF#*nX)zgBD${MNdZf zz#?XZY=csc@wdEFY;@i&v{D=6r3#-Dys65Z(p<3wT*VC2lz2ffkO2cN*k#0duKAQD z^6ux^4xyrBbet4-GMWJ--t}=3wb0^oU%G|@rF-!*Sx! zjg!0dRN9LrMSo`&N!*YP-mxGMYDh57i2ilOKukS~S+DnD-nECP|V#?5MG z*~a4uBOi0Dba(VcFa#emqy0k|Wk^`IVhf6E&)&VOjh3G?a#qvj!A$)hQ7EjY@ zdkQura(h}=!%%Ql>}fiM1hCjoO$T|+b~V>fVzoz+QP~nDkFj`r6;do%zPoQMM`VR|mbHJg4vUKu0C@gYn>xb9(j{1T#d}m9-hPDFuLm`hbl5 z%FBXcbCeSVJ5X4y`sZfg2IK>;UsMAAi$lcmP4G{hrfJ+%nwC`JLp0oP)FpAO*nIgL z!E%h>2<>Km+()V%?vuJz*r#YZQo0IPbqLKG9EPl!6X^{)M@h_KvQP!0#mbnm&E8bY zzoqT5yYHb>jeKaWn=_$NvVr;jOFHtk-RIDFl6^>g;xG_OT|?$dF#CMY8mcd0^0lG4 z@P68}j&^sm4l+ZpQ!mGufMU-5QX#kJv=kD-6bvW^amGVr?F9Wcl2nMimd1gL2mc)s zyfCr65#g1{i8&qcw*O5-(Qn-1_YsnxTKsH>dZ$Oj;74|c)~MOgGPWkAgpnknbQPn?1x^7Zwgsd1=cpdk z!iq29=?p)L&BY7@B@DXk?72;glc@c9e!5VL41}BO1+W>-oxWC7`S?b`-B87^9wYdY z*!pm*37l9PpTMvJ61W)m{6;Q$qowNOL6rwz2<~qyY0JU5Mbe@{z{hr1gCuUYx<^0p ze|nrQY{;JTmWJPq+A)yld?0+g)tPg6_I$Q$2sP*?rLG5tmdU#@Y+RfoOX-(q`oIS4 z`$^@!zl0yx-;%-&Crt z8Dqt0b2a1@Jho&k8DqniO_7v>GQ57t+;sY~GZ#_fzv*B+)mNRqo-S)%ZN*<^1+vG=6n)exGOwGW1 z2llPG*3iCCD@_M(ZARB?DLPMVG1MpmpxT33Luu)OBN?|oE)iVQ82lNengV7)ei4A8 zfm9fVw><(eKEG370=d=ndzO7QZSyc$6+e2-{LuEjsoi1?@?W*oD2^n)e--NtWOa`V zb}~nt8EOl)iKGyGWeO3KiLtE}IOB`xOdmm8_!FG@JpDELWMqA5FC_Wx@VXE0M#Ff6 zDV73yQx`h1#BEv+5$x!f39phUb#75KwemiASf#i%xEKZW7&vMmW`utpGPUmye&$y? za3A?N!)?Q1a^SUl2lt7M*D)a6VzRWJ?0I~B80CV@%?U@+t3-B;Q&VzEtLv^xkY2-8 zP<7;;gnVfi+j0F0iF3l4-tbL35ZfyNLqNR0BoT?GI!o(K6oh=t*6OJ=p&V3@)} z3W*{^*RtMAQp_3qwDg2wxY^%b1FqODXHIbL0|)N(G#}zjPKJMq^SBooZFi7bFx1@A z?~0MgrR9qD;2OryH&<89iD6w#fU!dwXvxbN4>Mcq{;(j!znWk;!5X;<2!bR5 zo&(*0_GkX#y~61xNRD0>Oe8rljA}cA@;-DoCZZ0~xI0lD?w;a13POha;Kv9-XJLxj z0j{`V&}O9{3Q}w!J0JQ$c*cMehybXC!R1Pgx|Nl6Y^O0S-~c3=Y4Ea{up9u*N{3|q z)tV0l{qlDu(zF89-@DwWSw7AXp)t7Tq|xPpUVZ5FjuL6)YVHha-7hZg#=wYj7{;NL z^^!=*9K(7AkYuWs@#Xv(1y-fhw|S5tH`u>;JOn5L(ZHJo3eaCn$M0fdw}Vtcn70W? zhlue(*g@~)4SJ`Hr}k!B>kZIh+F?A&Dn>0IAI*F9!6xifastE$XpQoR+a?r48!D&~ z4>O$I(IRK%8oLZ>(X%z?-}vAFj-fP zy!XUx+J%;p15_-w@Ei}jU_Yg7i||fhr=G-SkI6eNGF;3+_Y*h$c>4!PgbdU`42k09 z{b3BJy;>y`NJ3xvuwxWqRvNM!fCoKV;UFGTKl z!x$ov4jzQv#YTLk7K@>cQiX6bd48PpW&ruf#Nzt}B?s*2#>|%fm>JOJdgX39O-Vi{( zV(??G;ON`wyUO2|mUa-OtzIKNB~^9h0d0&0EwQYEy9bP95dBjHXZYp7O(KP1H3vzR zd_#Fsdd}|Sx7FMX+!FG_yNctxw!8&2DbIBAMdP{`y$E&Jc9V2Y<&~HU=V?(Y7!;#- zRRh4`b%{9=RvGFI!wwGy{wo z1HIl*nYy(3P2nP414 zc5q1K`Ayb}?Mu6flUf0~uZ{$#Xg}h`+Np~w zs8a}l+&Gh_DaOdw0p3eq-r=U|07P^0C6y(LzRB+$dahU|CY6|4ERJ#oB#%ACf8t?X+k;UL*>o6A<=?P?r;9ex%* z!$9~%2)$~O&RJf~8B9UEvR@s|C2g&_tn`jY(-|X&8P-PO(B^4qs$_CmVtS1>=g9D^ z-(=+1{FeEcBd5dTnk%#Vfn)-%y%r?ZH=V_ko*w!D^@m(d)0DqPa;|>BQ4L3Qky1h= zyXjDSsi}>N&3S{|bEG6zLPlDU2J1qCBdG=Q7Sh`spR@vu`>$mn03gtA;FsW~TUcq4 zwm{Y0C>;r-X?b8=1ycB;Jq$8pFLdnC!NYsn9x%>1T#fJPKs z2sMwE8kIVy^n^;d>&vuXXrxESg0UULJ{49K?<*kMKS$;j)DXwl)1u*Sjcybzd z@>(1HeL*rmKx?5(m;Zu8k#cUy!T?;F@af!U+Q&FJ1R)7Tr35a*=V*0^@Yp7OKy^_c zJU#`AC??Jv4G*aPz95)X(THv`v>Z=$`m1<=Hwh)00=^I22R$H_qY1j9MlMb(6fL;6 zE$|4Nv91aek{GRbLrRAtrANU3-za0?MC!|ktQdA>ck+KEy+Us*vVJapw zz#~}&y0N(JpqUjPgO|H51o@`D>s_!fIv&R<-q&v673f{uMl2hPT{X;euU3tZuGA&e z1EnJ^L2QG7lWJ}d#TyTvOFanFAfA_Mw|$k%o^!;Ys`a&~o5kn}tn9s6L_Ffv$cjdb%sh=!^6eA@9 zY5>i~IN4jLS&$HYUv=n>B$(2S((#MXuEccBQE2NTSR+5+02$&<4~Y%}%EC%F{e`Ug zLV+kIk-Vq6LtU{!j?h1{H*_cBu<|pi$9RE+ zH7@S_XGRGIkDKOI32tmo~g$DGe-}1E(`Zn6cn87 zN(hCYD|r})Uy+&~jfV5NZa?I#Vi|j?o07r+kUKB}q0&4S%bG0Tz?*v$Ag>;3>#{B>Ilf!=Xa_{tYM9It`u;eEvFP50*8G3_+5Cvae12{wqH4*}sn|l~aqX23QmIwb|JzJm zz1XnuSr*n? zxTr?7iV#Kwnx+W+zCe~r2G^>~(=qb?$4${nNaaQ4uq%d}GH@zKxGV;I#A5Q2fCk0lNPMf%)_`d2M>kVBBRAg!v5}s9{#;;0*Z8sGueTV66cF802Mi-nb5Gt7`8RK zVZ*S1FJAOjAT@s~e?i6Fvy#YxxV->QShFv12 z1mnVgCbPSSeIbE?GyRZfP9!t{OUvinjKPGO^A%3lToc#lsAHIJ|Nar!%_;wPZ~C|T zvB_iasJsj@ioeVLts(K_XUTgu#(RQT$kWNHjlGXEUpq?8e0Zr;?;V3{q{$R)cuueM ziJMQ53W+MN^iSY7I43NOC)Vf~C?|eI+s|tedhgmse>HqMC|KyYwMeu~FlRfg;9g1G zg9!^uFh60)V!~{Ym6=(93`RdpX75SND9MTB>b{90D!vC{E9XA~x0j0`m_>EMLIx)5 zGqg7n&P3EvZjT)^>~Nfb%k`&ucG@-fZd45U^1codigsFqLPW~|X1ayYk~X;6*p5E_ z5Hs6A>=^Obb!`te<`(s#Rb(*cs#J$O&zf3?4XTc#$ur2QjDa^fg2_--B(|4Nv18uT z1*t^054=NFCf0P4OAKVqH74nSofK73Fbf{0Os*(x-BSWGo?wXW|LH-ur#VbTXbQqz zL8HhO9Zii=VKZlMw6W3Ab{wo19AS6|={~5S7mafMYkGQIMS~k(F!>0;zH!|vaccG5 zWbmVej#Y}QtiTlLL`&CVk%QC*o%thS>kjMC7c2~|0oy2AY`ioya!iln^)b2o({MFB(@UDy+2o5Mx3 zi1(}(oqJgo;_y$9DAJJ2KaWrDO1gr6N>RH7*`gEr&^vxB+MjpC( z;#=gcq*YC5e{&UBu@4s6fgK*alhg4XHj?%{#T$aEKr*&41oWCyaq4d)Hh$qvHfY0S zlseybX0!ub905^R!7$$k10;aU5U6D{N*|dYM#=uAVa$GXp>g!C)whrL{SE)ww-I|g zc&-l4Nuq2ws)WqtRHEKj<7j$tGI zT|d!JcYIpi_P4Yb;jHFE7s~{xt-3&^*ZMFr-Kt$aB0-I66^*U*bPEe8{SkvSv~W^9 z))E%g;U5fZ^h3Gm+S_^{%8Xrd9?gF~uO5MP`H$~*RpCA-#=DsKkv^jO$^+)S6EG-s3yT~`(uKEgo* z*~bquw?#Gz0DO(Uoee7yNHT=v}8@ zp{LADg-rrTS~oT~wLd@kb2}SrTifgM@{7lgU$}U*(vXgy69uluKM)z`CgNX=KUZzc7R5-#`%?AHr z1^E=y0yC1gBgrzysFO*GoHoIxr`uj}QlpheTwP=*pSWAxwK(94FYgPoI%RsZ(;n%? zBvi96CWTg?%9BqR!iwdorwr&s`W9(>N)@0B*Fk~}rDr->iR?Ffb%l1Zvop)yWQ?tc zevDDQw9)p?Khgu^Q=C-1^*GNh1wF!~;(LtSEbNX=pDoErt={3!=xs^QK~w0Ty3+N0 z)|Z(Em)^JYb9LcwFPYH9Le&nHUomUU8U)ja+$28ntKJPjBaYONj`R4+;dU}3bf{~X zYWKqu3oOI@j=P2MOKeL0!JgdR)y1z4jzHK?925Yxr$|%Nj%n_R?nG@LtECHXfD7rY zjb_#O|7HXYQfB*PtJF`D7}Kn-Z)5??(kY z@Gr6P6pNJcOfeGwn@M)R;Dcn!)@rhe{J@uLn2@|aYn~$TWlrp#mZW5`KM9lB%kN#g z+@)Ve4Dx^LaKiE_vdg#WH}1rx{t(K$AeYi!2=ydl(`9zjVJu@=1odyW7qJVGGgbB2 z(oeVs1eOmUZw*B4%$|7aFNpgxWzs$ASD(HMP9i$nFSd!i!>)$}|9O77n+ur4NgZtC zx#pSoOTE2oO;nTThQA?pC9oI>D)7IF5%50>Kh1IU6YJzx3LO&US5o6yR$GQVHu|$i zwJEKpRi|ev?Yn4@ab3P9Nxt;(9b#(bo(lnI?n@;1)@qS?ufm}$r3D{YvnTvyGDr3= z-bI=w^sy0HO^%Y~BBGCk$sGzE365vc;UpNRaTa>21__EZ=zf&xmUl9s)(=e=)uNGN zY+3#dZnhvB(1L{*`)>CsZD_|GaHTE2{?FK|*YBsGtQP(b>6~L6`Mt3b1bKPxzSMQe zCX1HOk{SB&B5B~X`yu8eDj>(+EhJ%gW@?v^oqeSSdvHos@pQt2;>aveoX|te-H5VX z7v>{WbzG&kotKud@I-J|3g*eLai&FQ2vCZnkzX|NwcwohX)>=5+Y8qPsFJu;#pe-W zpf^Ld;R!4MU@V)Kmh(Pmfm)QO*7N$!-~ZlS;s`6&5FhSuZ*F*Mu0i_VVE-)v+FEs< z7-hAAxbGdPA(&Mn%NK^Q;42&qpUGfz)Fc*`my=U4wV)K1PA9A;u=1#4sg(bxvpWc9 z_tQXjjAoeSkD!l)w|XycQbqzg{?#7i(_Rq!-o%@S#)0(rfLEigw(u6mGv6ztOx36m z$Ue~+Ca)>c^6u=UR7!{kn6k^Qi&%bo<=qGI2DFG23s_uFU9V1aB#0T8kN6Qkf0o8c zE1fb7S*@QJ?t010=b1-A9(fEfbFh;uEbg?+p;t9C^#u*)JS= zN5mW^<`=o$y8tjnS#RLkesBndw-(Sq`j$WTG1tv zPaO73``J5u)Dp!(lrH<}P#!|cp3VIaK~B=6&Zewc}z z5^;=8yim*nAc!&;f~a!uNp}R&a%JZUg=?IZ^LC@C9m;XYjwIUp9M`wMTkj_QU^K~r zN)SY6E%1KKhQ{2Mct9jq+oLDoDo?1B`k;ym+4NaziR&glc z&aOQ(Hpm8~96J|-)wQQ$6r4_{&c_YWBA3EGKnaFPmwN#YK}lWaDB&5-NEmR1g_LBU zx&_P}?p&U&?HGBrN3fgX&ZH(xkY8Xlb7iv@ZM0yJ1$eA=ehUPxczJQnJO7B9gKPY& z{GBayJm3eNeZkj;@Cd`t?S8D{-L4u(BDs>ZtuWkF~99;WQb)%j82z6y2pR4_>{-d7$wBoL6wHTf+ zaD8-!t@;pH-o<>s(a2PIs>kS6g=e|uhKlC@D~PsF={+(Q48Ye*%Yu1?1=D7WZ2iCB zoKj6d|A;ZMc#^JQ9?6Q~^&{}#N1sfO&%@JPIEnJRH2IQFzY7UB=NT}qlt;A!G*r?D z_21JY-BS&%@o6t#c=fKktH@9PRna5A;M3IxScOFu69}gQ4zzCH;Wf}(o3_=N&uf8s zIGBw@Y#;{t$XY?kOcwU!l;~HZsvyV=xV)RcE6}aU(mvU*F`;!uj4%WUG9@E+!%Li< zPimAoVJDa*l=_l`oZjKf!Zp=4IVb+L)X4lS$hlIc&Lw0vIaEI-J|q5muJx?SL~~{nGc8imrO$wsLHXgT6L% zc83zv8g zyl*i%b4r&6?3CIAYDEjX;^{8&=V$ahBK)#( zUUGj(L=vwu*-DzEMa?YJ$Xt~;gQi*&3rY{(LN1jd3j3_``Xu5?+ggyRuc^VQzEj^F z@?&7r`KdWCVv*UaaXCWGZxOl`k5>;j3wn^+ai7imzZRy4Wl@B_r3 zOdpcmpASNiMdn2GEGZr?6NeKos|+A{EU0PE?MxTusPfF$`yCw3G(mj}-l}{9ZWkV) zb}>z^-s{RVrO`GCFH!YKwp}2~h$=@z%@R*~Y5GCRqX3(of53T+8pN2jNH@3&S|USf zze-O*j7X93=3%MzcF5ltOhp{uo7*z&ND$983{7Oafbi)aj;HZ(u)4=wx;Pgcm1NX# zPg#K%0JhO0>#3dRn2PV)!R&VK+qb1}`1s zNkF2xh(y*|?-qjsiU<*ZT?A%h;H>m~BwtbfXX1wm>67dZnN;*X*^a5h+;z3YyHS^= z+OQel1#;^Y5F@Ar1@$->_wGUX?Sx*WPr!kfUU0)5HZkg6>)9-Axeo%3fES*jxic?a zhSvq)yfi46Cfj<=ibUulz2N6ZaX#Xnc8x&~WMM3aRoUJb`H|?+PX5rC+-bt=BXL)$ z;1)M$D(Kl3PBbu|MX@Z`|!vqG>3pod_&=SoUK-$+INux=R z?REzwNi#n0;r z^6I>h=h(T7^R6Fn*j1+oeyDJsI9s>SDRF`y{R1rKHSa@hubIXPNo@8Dkm@Xg*CrK|9BdL<4>%cA2<){}_x5m=GRM>C#`33(H zeCD~zGJyPZa@`2R{0_VpB%tM!t(zp=uz!2?O+T*g_rp#5_2KSijICUy@AVO`21)Y$ zvak2xExLN0x!e2hL{r%B_2l=qITmm+ZPtOSpBG8pNm5h|T=NGWU>ooDnG6OJ+6XY^G0xb>+ zKX52CN}WoZn?=Eteo2CUnRpkf3p*$f_z8!R;%+vXAs(lTkk?Egow^-D`C4Fz-9L7o zEk{#q1k`&{fEv{&)ghK8!5>8*T{1hju+%zMWcq5VnS|#(VxW!&gKs#D)D(e!e$@$` zq^%&4(wN(Mq^&deN9mOtbXo_IkJ*o~4t9_%qG9Q<|Xefu9^2Y|07kEK2mI2X>Iv6H0E>AcfyxZ^2|SZBqSzZ<^c zBx6OFZ|#tV?>}k}!ac2ZBSx76o-;#zRN+hOrzb%_U>=e{9R%;*tDVKd`}u)Q`2P-I3d$~tr)pN4l`^!3$Dm1gIkXa z75Z=Q=AlKd+feByMUVCEM7OhgzV|>B+_WQ)>xh60|1gpj&2NOr% zkO)c+Nc`ySG36do3M5+~0-@nAo+1@wAn52NkdY9=qh3+T-H=~kYX3w}T)ePtCRzJ) z)CGgtZ*vvFwM7?)bQayA$88b_N?ngTufb6coR&@nkgZCXW&Wae(0(G<3?g}j1wU+I z*M5>OA65JbRilTRd1QP$1IhnC{7QR66Wr1t@S-Qk5GPQKp+$QA*fbT)Htk zmTf3vcCh828fdocEsu;_Fp|PKqO5?k*5=G;G}Vk%$SR>p6T?k$#%hJK5M-ZtlG#~i-Q zT<9!FG$<6Xx1C-##7r6u1fbQT1mZv?eSsODIePW0<5%%`Ot#2CZL95Dx&_+?Ko%d- z(~5+Acmxk(s+vyEc;$-Yr^Pwo07819QDp0DTAEinw9CUZvXSn;v=6{EXEM zQ7R?AMmHu+lE(FLQ}yeI9e*tyrK0AjrQQNPaf5}e_$u;i2v*BvTqVRA9KZLKOIS|c($DWyvb3Bf`2qVa@Z(Ed$O6RRxUP== z`uLY0YBxrVL|$>@QD1wrZn?HO$vQ0eq<*xQPn$}k9Wfc;(yhX%=nh}3zxI*69slFj zPlMU~T|XCfg2Wq*AT{!YMuSEt0IFN^SnKBzG%kgkgm8Oj+9JZng|+F>qfv;3ODTna zBKBJ5yCn7hPh5{1GHuK!&61fx?g$la?`PGD?i1$ueu9){K9bYJEq}Xt7F}4cA&ZZH z6Mp);;IpeL68UnqL7adr6OlcrSD?wsVns53GUX0m2^(F>mn7pzCN93`uEg^;ev4zs zXwlbQeMPu&Qevr8MDUGi<&ioOozXw)-|v?sNizYAm(d7nmK-q#jbvdF?PCqBb(9Yo zW=1Ewgj@H`#agL}D4l8m6thbWjl1uF^g_V6H9o|8(5pb}N?b(h1y30n8+9yzDYv2r zjS`3~M8EK_yYHShklI)EqRup@zp6-Tuffr}~$B=4N;FKTCk5nAo;8sN;3PTK|;` z%9ENs&7NWAJ&rkIXS+|qAzC9Hs9{10D*AIW*rcsM$55An4rJL5DQ`!vdmFgmPk1fO z@1P2uV8tD~$h~dW`Xop2}xWI zM|QnH*P0m-npyjLo}k^K-r~SWn`A-dQ*%Z|Ti3{CF(iD=^PZLD_GE$;e*_t3w2|d_ zA~Q&D#kFB;qimI7@u(02S-v1QkIt|>4FA;WxiWyPU^?ftVdoYGD{Daqfc1dWLwMtOCSijaU6+g-E}~ z9wyG8_C=wZNskRHK`fJv_b2`49P*))idYJBfyNb9g<+)J3LjfFNQ9deWj86XvZ`zx zmRou3R*p?|e_<^l2$mGJ+j>;Im>pqCg%o;H;*w!8-cEx z2pF;~OP0y9VIbVV!gy07nd4g2Y2|&5GB{MdohFU1tJDlH1N;fflM`{#;LONr$6@!Qx_IEm66$rO`nU+RTE>JZA!d5HHq2?r!Dju8la&7} zG6TBSlD2kHH-*sCcf*H@-F}xDA*WfspFZUZiL^O3ky||JC$p|stLPOzqH_xuwV_t= zcX{PCPU|@YZ;t{;B`NJ3lGYVTS(-s)6Y9W0hSCn8b0<>e+U5wf*}(JfL{OEwWuX)4 zn)eA4CtVjpJ{aK1x?}>0jT<8`Tl!&vD_k`36Iv^#VJVmAjr*2wn;;%#wJ$42Y}LT~ zIXrtN-#b21H*RB6|HQeJFWJoKvly8Fsv_}XYFA`Jcjt%7dSmanxJy8`;kuUUf@#rk&n|Bk$!-boD)*dp-{Ez#HH%IU2icWQ4kpRSnz#LrvffOV zFR$Laas(8`=ndv3gu(R~`VSs3egn8JNa>BmvnOV0pL&>v%XEk-&?sJOlaY?IoVzL0 zXdA1iG8wk0{dIB^c$`i-w&UM4=@t7(E(FH|iFbtF2?N|SoZ}r!BP$I!vioPd|y5ucA6B*1|xdC#5(23^YgJCKVZ z|FHpCCPMk^1zdNvP9H!nFdVC>hcf7a5;hqq$?gG6M=NQa6@qV&f6wpFI$|K1O+8zim6cFm zZlGy>b@f}*sNH?W@xNmZzQpL@*jUxoS%ZXZF~Y)f_)aJ&n(ETZ6j0*^WV-D;${}rW z5wJ1$MIyM~hRRG7F8qXN5#F2J zg0(eoOZz7~fItMQPXYsdvIBT#?kab3s!XT7XDmF_s$_v4X$y^4mba}N<)0=4TzN3W z@?B?Rz1_0Hz8ZLv#@5NiYZ12ekdv6cz=L*`2IbP%wtsQ zc)*BGDua)ZgkhR(B8~Isv(NFA>o4f;0??j7M8|*cj7FOdR`ayXtSW+aUM9~+rJP_{Y}&vmIEfP}lpSbypf;WVj_!pF zL+STJFvzP!#@QW~$IDq|+=uZq!$rrVL`a3+GElSs7vx~}rXOzBDb`f`NN|%J04B8E z&PWsD$pH%KR82gp)}Tyz`*t=TWkSYBouQNfNlb(}{}9;_m-WTQU)bxa=w7d7Qx+zQ z@f!pElLy~?4x2~pRgoX^6sOlR16js|8*_Ii^!9M?n65p^-hKA}7j~aClt+*lB)no@ zndG0`nWW!mt)~Vn4bCh3oCA{etDrpYU+=T6u*Clh;{tSRfSY@1yceEJ1P zDvYIi<+Z};BHLPmS3fNMtDPG75O*!W+#S8hZqUk7ZTS(*SGt$6`Q>9hNgrEmUuSw} zK~s6LPImy}7Dd+Cs<&b{IwN%+NSD$ito*U4>aRV+9r6FJ+enVS5~H;%@=8H}g>7R7RVH}Lxe|Oj6;6>2JzACz)nuSud9@q_wN2}_w*=pyq|qMz zP&gkRQ;<7)=Qw_(UdiF@J7VH?{m1H0E8o?e5Aj9SY<4$fgmsX*KADtC@NLt8ba7g= zwPYu|D6@e%N?AXu8STaqX8UJZBz*E!A$ozP8R1pylVPe~_~r2CWK`Acp!2bs``R+k z;~gh|sHWbKD?7oii*(`?*#(=Y=^QiZ&zMkUm)s82+JaLJ1DVbW?7NCAeHe(H~9~eW%%cn2GY)LX->bjafrJ_?)CGeX!+&-_5k@j2c1m zgNDRlkXq~l)P|GlB(IPogwjg+d4iZkP4Gu+KI~7J$xN8?lL-236p#IffswByvPrO7 zUR|x%53}a0?fg?<4w+rPNOoF=>7SFUnF`D1WDJRCcL~Q?S7aC(OruZVO&=scEj~3s z6vg9>_;&lf`p2Reu9%O-;4Eie^#C*S3$NJnmhje$aX&WWqlYp0#keKEswH5pEksEL zwt6OEDfq~IH@0D3;^A7|V8UaNhU7rGiT3MZq_F@H8{>lYfmqd55zf_^;lOfm*sQd>-(TpOlW3(j{{@S?6u$?B`7=y`Pj6V~cT9 zaguREoq!EP8T(PeEkELGaLPhs&Qj54f7v7~_sXqO3Uu54Z1i>I$j>W`I%HJ(m3H;s zr_D~~!P~7;v+cUf(PRv38vg>bZ0Sp)RABAqd1ojm_%=)|m)EDWmKN1>>-#&d>K#Ar zhZQD#z*vjXN?^WaVLw{d85?rWZaE{7@Mm&?oX;18O?JkIAs+`uB*GCeCj({s=!RbO zR%7{q%3qrmvxSTb^u3z(A}p={T_xn2XEQ{06C54f2y|%Mcvo=wX#HJe7)2nx8`PVy$v8+Lm|EmXYeV>cvH+qu*~UgpvhQ}Rq=o815i_qK=>olp_zM=+kIhZ z4}qr|{#G!S7`&wQ-YUnxllN|lPvoMmp;jZi;3S0F6kAdFuu zref(q=Ew=licYLn;bmwHqyKjVV6lO2hu@bW?-_`VWw4CjbC(;b*5ltkpI+(fw-Pom zJMHX!>yOa~mwS87cluy0%A}J90|0`sO)B228^=%HErLll@M3(1OUJU>5zbf2_}bxhV1a>_jy2)p z>?Hoqz`e=a%6j`?C|>&!ob}mcJ=M>=lb&^^hzoUyYa7%rQHiy#M;Kfl>1!Z7%t6uidlpwu$Oxh(e+*yZk{BafuTY{MNBy@D7QFUR38CJ zKfi8nU*L4t5Ph+T7EJE z{%b|Rrbr49?x&g$S9DGSg*d*-hi68eC9Dc@elruwN;;vfcumT#AzcJj-Qtk58|Joi#@N_s2+7)usHE`{?>UU~*o^vG6f5Q&qP5H@GG)miAE4|gx1 zE}edGDW*0T_m!^Biqk9h<>s3w5O$)B9zqb4XB+lL9##M8hIC%UX(sgU6I_15Rb_UW)p^tKiRO=ONyisa;&@m9Bui>h) zXbhZ30ZU<#mZ5DZ$}@W6s+mH9Dsq5TxZ<<3QbT?!Rfv!YpvScSJQ^pqqH-yWxYDt( z4sV?qf`Z^+EPc#trWo5kfjW4=Qmxnc^bVYFq>-6WSu2pj#;YHHh;x2M^lvqQHm+7K zo;-Eo(uw2yFfPZ+kqeKWv>n5MUk-|CS7^ubl8nmXZoHtlD8HPcH|XK0B=XdX%ax#5 zGGCbL=;!C?eDOWb%lwh?Go*{p<0X?%^&_guB{CP^lzDmuaIq6FQk?UhI8fB$AY6KL zdj=E7s!|(rvEn=ll()vXV=IEYE1|mVsYp8sT+p7Z`a^FD!>1T$e|kuzRLmg4wUhHB zB3@0*G>JSs15ayDZWO_(8|zVKT;*YA1=+Weew1319zM9OEJm{~btts4@atm_Fn*sQ z1J6El@liO22BW)6tA7{tZgyb=ACSsTQsJIBce227r(&s5Dqp{73C;dR@Qj z32VAj+CsY~d43*0zosBSt<+I|U!45aOx=i&kNl!24KDL(&s8ZCORXk+A$}G?&lYXH zw*hsdD65}#I%iH6cEJrcR^n!csmR>2drnb>`tV0YB>`tHw1-j|hWW+1Ap`Bd=@~Gl z5dnW0-C%6pLbH0rQ_a$sv9v2>DKn=~Q0KzM72?~FGh=o9XQHM!4#c;--AdaH`?Eum z@)K00W3q^~&aOS{>)aXk2yZu`YIX{l;f?N^^*Q+zFEIcf(Q(*U$s@vb;vtjw&@=F&uhl0veo3m8nyFuBSkeIIlwYFVc|N@7rvsxL}tfU_Al z_msNtIr};WXcO8%>_G9+??(XLk1=jj;ZEd}tyY8ku)o^^_TO*FGd>C)f3R$$QK-+y zdcd6SMU_^V`8Rc8sRZS0abWWil-3h=`jnohk}?k6T-T`A`qEi}{GkCtSkZ=IRIlhm zmj%L%y$%`yv%3|JH2_gEeejjlpl1+x`FfxM)wO9|Oa43Fb-r%Nac&qR+psULy{L9= zx7o{`T>cH#FzJEe6J%Cf_4%RjBVgxTY517JVQe6PB&Br;J0TrxNd+@2zBbYWL zS5F#*A=*9G4or8^5OJVNvI9MfJKM-Y;(vbxz{s1&u`VK!S9a<5&GMe`%f9@Ea!3)9 zX=$)mzb@zz|DzmfhxgTNYQz)=kEPZKb{>!~htP~kQ__qmjE=lJi3Ed<>qrSMCDkRg zfCNNiu?JpJ2M2u8ps!*tYb=6BK}blQxQ$Fp)4y>vyv-mXIRfb-}J7jdsN?v8IydWm#@BIU3p z{TM+_UQY$WMBT&FJb4S6>rC*CboY!&wy@a$2Ks_cR7VHng)#ULRk7EE#^7Z2gQ8D z&kPG{qnm%N3AgB65z#n@_3p=fum`V}&$stC`=7F28(*tzwOVVvPk8@N{90`QKS030 zeb7EXesit&_nqcT*!f4ZwB30XMQz} zl{g}_gTgi)xM}UEK>O^GY_2ncKHuA%BXFoW4`b-R)aJN$q@b~W|ssf}8yMtBn z+Pp3)OI1*ago>^5t_-x&^awb$P{KVsjWxDnx|d2@1%t2~aVv;H`6|xG$|C8q)GCla*7|k42wK=a@`+b79C$U6waTNr(TBM;8NXDq-){=(W~fDpJ+c4u*nil|^UkcaDV`AwiOBuXws9((K3ry=O&C zy5qSj>Gcs$*I}|(o?Ux&dnCDo^y98mE5;9=^tIyh3>pak^$a~v>fZEA2sPl&GYTnD zBGORI83D}ir2QWYsO51HvDM=lYg&hLHyN`gL$l7(A3@p0^<7)>SzgVQV)Sl9{;gMwV?1*e+&taxt(LC zg2xE^YFtyvEJO&-?-PG(q1J$09}c}R7I-D3HRmZAiX4- zlxiom4dC`gfr5p}rKp0(rjEj}=sEgD_Q^Gfp`%%zM{rSfV)U9sE@dKdZa>=kk!3E` zVVn0DR8gwbpme^S#>8`1I>_zrqr9%Xt9i0@+QyBnq3s@o)Br(7< zMOa3mE#&TU7&h%&LpXI1f^)QzQF=lC?I|;gFn;4>O>`070KoW<&Q5F@0Fy=u)1Wif6TFY=w?MYoW9}6i7Z*W70#kk@)#|ExeZO^iCRXy~IIxogHnEX`gR%8x3#?a22ng%(}ON9FI z6bK11^Ys+RDyYI(;v&ZAhy&;^ISHbmtL4w`x8{yj*G!S)smia{p$}3IBi<#5&7ol9 zn$VmT6C@tL8rK;4&>^L814+)GH}N%s)PZJ7d|MDv^+=sRPf=7#5g-?3q1}sk0=*wt-c^L)ZVEJUdbu(r16JzE$kN=a-kx86 zct2KLUDPM-Ev!7s+{493CUv7r<@MZ_9R!KEazdwXD{{FXaN_eLLeLcdSy*048{&85 zR9swbenWpUUE=VS3IOKjjXF;n1fIxeIytWNZ&0iyg)D-~T-;wfO9OQC^lHwu`a5#t z^sl=ek~2SuT+aBbTH)8Nm~>Y7mA_WI)&2`yu5M2I%x2> zs1$;H-^?)b8l`*SNK0K>yJ#q2JOUTiFOP`OCDz5wOOEc*ox0lDvZJpw;cmvNbyM`w zbEO|#WZ9L@Fqs#|(~S<*?uQ7fagkqXrL#*AD{EeMB#B&pA!n{mAQGq!`Fn*52(JMF zAyIM3GTDSYd|f2!Mh&a(3Kw6oQO^yDtJ)|KbNxz@TF_^%aU^*Uh6UxcS$D`I5&X2y zWQfv(P?|;<>d@bj>Nrh`Ipzhd`l$5hpqyENW5uIhpPu>krdEpP)vuq9Qz__6bbZ%| zwMd9{l5Hj?f*qn#m9>-;7O?J#TkdCubEv{1W(8-^f*}(rW*3|aEWN4>kcF#v z3C;BbFhhNurSwlkPl-^hu`uUF!yWxIKW;{1FFqs32YJP4%!APMcK}&$4PclO91$zG zFtb}|A|shpGN!qakvpo!k|vrbL0h`jf!=U#fvF9utJD(DHpv$OBdsfWBy!`0|l}mfI3WWMLunP5kK(t7akOuYe zC_}s{+h>8lo7zA~!7esrl25VfMbZA?tsDu^WVgCt2gt8ZC;6)3j(E5K9ejhM;2@SB zTJweS)>#OSg6K_~fn!UVnQ*PpwERK@yCtu<>z9k7L;$S15nW-cuR<@%OAoFc7W^h8 zY$)U|Dj&&A=j$KQ;@_t<-_~)g<;l(&M+>9`#@cYrlRxwP7)r(JWJqgWXc5xI0@e=1S$t zE}Oi%E^P2(&f1V}=EK@pNsK!vYDL&b??KCXkoY&!iq2CaC3Ir1I+esiAtY=QGZ*Yj z1suLzsImmo>{dM00((Unjxe}GoM zvp}ZxlqVd7pj?G##9{MCnG4T0BN;93{~<;&7R8_2`MY#fGz|g<8c*xnBa@6q-#5hF zTvr?_#yC5w*v%il5zjrosOQ_8@YKWSgrNOZ*C)Cw_tNbb@Hh7N@Tfh9X0hZ&TRFxV$sqZc)HW))8ScA5ZeSdf@ z3rEfAI91FEYy=E=hO0d86kcr+#^vmwG#lNICX;hzui#8l!6*dV1j`gc%%_)G2{LZG zIFOA~SZm3zBp4f^g?P6rxZM`;X5x;r+SK#0HBIV1a+aY|^-nF8f0hju9K1!V0rgfD zV(2GjfEl*kQQYn?H%Y1aPrgmX<_eE!qg22`D_3NP=8y;gaxWS9lU-`SAjFWwekq1!{*v21{Gy^UF(f3oEO{UHzaTfxp_p7}i%Vss;wy`}qMpxp?Lvc*F7% z+5qz>2gkX_hCrM3$M!9CG-ZQMGidBFb~CAQQW$a(Rjyy6mDpJBi|hq=p}_l@F$sFBDW=eg2n-ukA$wIy7n^MDOZ z4weA7mck#HVz7hd)2%If9EX)r^WKa&)Lkhxo9b5SwuwXvM|r=;A` za$DhfE`c$Y3;4QWOU5Z;w(QJBd2}TUi>ft8+8yOi& zsTzX^$WfF3mL(k$pJF%;?uqNR+jpyEWmQ#0L8W?$yC9u98H>SEA_9a7sP5eJtb1;2 zgB5l($Uwot08$BY2q4?5GOGm%nM82)hgp+8UL^I43#~FR$n3Aof$SkWe2gN=FaL4w zBVqn%w;XS$(lJCYrz=F^&@~!_{>z*tSdKr8%*257DM|#=DG83snWGy~8qaneW34Z#AmoTK&H)Xm2!Q4tf#7C-r`T{B^nl#1 zhz7A!3IFv)XP0udf8ob5ge@VBAfuAPR8n|h*_cAhr~@sm0(%IX`}as60)*b8LAiEU zw12?4sVQN>T-!%zsr2=2PrEc?NDhe5KRrVmCxMQTl?LCpN$#3BHHRz2jPm|8bC_l6x(P)_^?=iDJ&z(wPM+2Ng6uV!OjlC?D82 znh=9%Zea!!B|)7p`%SCNEh$0ktzQU|FA|yzB%p@^#0X_V&Q2_! z?FVNARCh&}39dWPnC=QKncPh6SllUXK!v#(4Tr&esDvj#`tw z)p~Sw1xSQuim;nbj3F2#EH?X!_gL#8e<{spHoLHkUh?C=l;kg%lpBQAbI%K1^Y}Be zTArMmc>cCv3bY?P(UyQnpwgKiX*zvDRliSQ^VSKpDFYhA)t%AUo|7BaK5SeM&K~aa zME-|nrP+L89XOfqbz7=c+_&EZ>loNzMOxRB> zwan9EepS?aw z6eS#(E*Y&#w%6f`hO#3sLA|9q6j)i z4QtXeFs6JQX>_NL*-sdC=PyMcR1XK?R$Cpu;nzSvn5aIAZFL?Vs62BrK91no6m2G{J|-B zhT*HjodeYHg~Cmu3)M5%Y-E5-PLz?4$O4V;wIASe0r^PVMBmoG9A5mc@TB0-3%7ca zxX{7rYHR*8Kz9;fIh(9j|3W@&Fw-+&QmJ2@t^orKAxI(N;#|%<^VJi?XDjZ^F{4l6 zi8qD%hzzlyB(OIMZG8onf-@U6drsDhFXY71@r-Zet9Jcc{nCIuXFdBZ@O%Lxk6e?VD-X zGb<{O;BK(MK7&cTQZo(-eeD@Y@=jpvJ%mjEiO1I&)|&?kS4R!6)tCNc>_gL+Z0p7f zx-;#ztR%y99EykPMfM=sT1H$WiD@LV1JG^`iO^?3J8 z$g7Gmm(BSt!l$=r!OzROha$Qz0z>Ah%F$0`t#enHP)3v$K?1%Y9r7uyr#Ci7@dK(T z2C&_I{aAo{mq08AmK;k-c!y6hlZ8FUS9>3xq(n!Ym(N5B=csw+Paon*8DENC$&oK? zah%f$8uR2unCo`8ebX?+&(~5m)f6uai?1nYybMZtt5DhFPIU^s{Xpe}=i0OB`K^XR zh1~YyaXd-5%DneR8j!tM$9D3S|9gn7 z!>rHAci6+uPE<#f!_Z~#WpLZ3CyRli1Lma$B{LTez0ke=xg6-vMOg9LG-k&96jXQ8 z35=I#lId#JMx#8TgRHU;K)F)AT$73rsoQIjc8*{9=KbN-esxN^rI42EcPUl(iJ9gt zWkqNjCC-g%WlGC1#a}e>?=b4;W?CnfPjztIq|-P#EkF07vqGz;dnV0k{ds>A+H8Nd zeeKXyFKF1m~#Yr`KIjTnov>BIcW=65q2eG zF)!mt*57cDGm|eN#uY}U^9Qz|l4tQ-TImFwxw}apq7YrQ)gwTD%_lj7iKWqPWR>uI zcq4|${P{3J#@$d+1M)YiEY53X;p$c~Dl+GBy|Rmh$-{N_B~wf<;=ZAx?bNjE-4NH* z1rexaQzpm}UIHl^0+XVl2pGQ`KqY`))Q3Is(=b%%c`PlwvvS@S{yNJ9DX)Twx06i>t zkqGJ8E2Bb)zwE%|ax;8YQ3B8v+@4x7cNa52;OHt_n$DD+wp#AMfM^5{tBaFm>0Q4X zg})jgr^bpGEcw8=hRe^>VF4b7Eeb-=WS!Hj!gMtqLCfxePUktCuoX7~X$QoyVG>j0 z>*IUywtL)3WyCE55ATk9fzediDJ9GEQk-8oxs+464=tGx*Sb4_Lr+rN#{}JwSzUc!1fCyr}ivmIVeBs}_P< ztzj{SDb*NEkFmBl-5q*mhVd`BlE8--PDO1Ar(TMNG(imk=6n{)wz@v$+#^^&laAv zGv&HKD7|AuRtMJO4z8^QlMJHbF}b7jn~knnh0#35m5!$_nT=1tNxE{30>_OUCV{;e z-}eVQI_bi$70TZ$0;eG|P{q6ca3?K#X|NF{2-XZ^sZl_Umps07XrQW}(u3;$PyV^$ z;{!$bFPr)Z7g34BG9JSblwIyk&m(>2OuhD)LZ6}~d8+@6i=E^sC>%Eq(+LP`b+|;I z8b-AO6Io&xb$8s79IUd(xq*0-lwmUM;t0TJEIP$0$%-!-Ltq z_Va6u6`W9^LAN3mLM9n&Z*ZBCdD%@OSBZtInn#sszPG=>J#B$2ep$g3D#`JR8D#wg zKc9qh5E(?m&Q`{>6>o1qL^rXZkL5uATMJmig1Cj$=uXnol^hGn1o(pnv}NpQFHKK< zh)wZUp3NKNiciL7-gSk0J+3y6ZfzgiJTJH9j-ft+Pb}P`^D>pMN*3_qx?}OU15`@g-=B2WNUYpE86c_Z_X+}-R$rRmhixFw*aUy zg`_f>4$Xi}CehUFP{=MIt#;=-zp}Jud4jJ0$i~2VUr*FyfVm zk}l)P0_Tsi`{$Qt@&|rj&yr5a7z8Crq6cGiNj=EAfCcUZyTYr{SkB@4d;lVV2N_WM z#W6nl^gN@BKrc7jh`8hCbj@=v;zN{pD0^k9CF=t_v2nkKfEr(yM$5S_iM`ne%=a3?xDpn3*?NOEUf6OmRghVUH3l zI;#;^Q;!Q*%WNu$=q)n=>+co)}IX;3O6L3Twx8*|eUJ?`0YtlymD-NV(eWQ+pTTp%K^ zxb-yFDZYb1W;mV%ji04O)}-g<{GeCn>v1}93V|oy7STD7ej=3RSTFkmf)Y zSx-{>bFKQBGk3!w)jjY`Y4C*xN4kS^LBvxP6&rHN0UdB#={$O`orkmKbNIe+En)Io z89JObC1)reWSd+{tdsK@!9ZS&ujx|Rsi1%QzQ?35Y(ZU4wf{uAhX6p64vMjf<9kUs zBa{{k&OIg0HhRV3vWI-%D7$S|!y1C+!8hCN(4@6m*m$=p(S#TZ={GLnKc?vwa#JJ0 zp&`%lTjcD4R5YJOd#{~xMu!ll+`XhDTem5Q@ z==)(sTi(1;H;OO{z!h~}M?)nJI8)rprEyISi$2`%J&uHjAy*Zy3#H@jgrhwWuH7eZ zh^8W5e=}V#f}kHg_0^yYS}2!uI9Cd3V>r^k9??{&_&N?41 z)hZ(-TF$&)!rGh`bOE&`eB*?xufZBuWwND}Pqg^1*M~T0lp#+?={?B`=RGpyD)(bw zFq2-yTWfGYQhRDy*Ng{4G8!tpVW@CJS4{hnF`W~S?NX(N``p-=3D*X!)5vCsqcc4 zN^=}>EDj|gxOH6NGu|LfDWL5(s&}ZD(&C)y5*2ZGXr-4@mmW$1B$bB1N5mNnJrbFo zS15p-yXJ}jX*UjXcyCgx@PDw-E07|5s@~vTzz~T*DsPPjn~H?K z5Iva8er8Q>1giAs7CJs!K*Zk`wY~Jc0e&Ml|z5(BIi7KBYT;4Ohxsc{!wy_(fc42>IEMi=4V$jWYvaTcO2%?({|&%RW&e zLC1o=Yjk(VyoAt`K(Qv5SFQqu0A1w)&j{oYHFKhscEF3Fh}X5mmuPY|vEHt5-Ub{kE!VyWE<*cm}$=l(ESu+Qw@V z2#sN?8ihVq`a%bqXb@m?0oR8kLNT*jaCr}*pomj#AE)lt79`0Xt#l&h`Sg$dMk1dW zH--C1%V!2)v|&Q-Ud{ZQ!kyQoxy+QAygoo7ZtoKhwqTfE=?BgdX}d;$K1G8KLRBKI zSq#=egEIZ3^0Da0Yx*WMgHn^GQZ+nU{0fXzcbM1?pqMV|2W`EI&1T%&NnI8}QPc-*=~iRZc&-JD&9{9sWn(&8De z9Y{r#=bXXRnK_zMd}HZ%f^f0d-|jD4T5lRW!AWs01yB1%eeb7uJYhB)dPQyI? zV80hflF(*f(-qa>I=3}gG6?loUMUur?Ukk^9aqxeY3``sWRsbA*4M!=*6ch92A&$# zQ(9Q6kIk&sAuA7Xln7!k$~kBnWw$@m?~11+Ds|wL5g_EP^>~yx7w;w zIj*Qu`fjAId;|dkhpkuV=-QeQ7McZc?f98p?PIDLKQpvoU3!$2KKE``NYIN{&U+5H z@%laF8q3Q;ozaBd5#a&3E4S11m~5E2>R z>X}(! z{6`C9wb>j)JS*ThmCIsfo8*13_RQwNd&)V48s>T%n+SC#Da-XL)vDn~YURa9rDEK3{d06EJ$~f+UPW9!!Al?2-vtKq{T^Ub=6`a~6xh@#g zxbpla!FfxV<6t&_4Wb6ORIUK2UdYZ45SjQCXT7k;P&`#v`u%l$H61c~n_2+ocFlqA4MCQ6ui~5`S79 zPATMixy2C`ipse5oRNW$CnvTa0p32RWf!PJ-f$~*JTKt>OwE4}oeyO#$$MY)oW4aX z?mBXFP?|it)}8DSw*-i1=(f6nhR0@a!K}DQnt2!4sW5m@nG@tX^7bJ?YEpn0kreiINxpk*Y}prqDL@g)x(^nJPsKftkd%rvx)ezj+h6H+hCQQ7cZ!{nidW z3PAP+qe1ijlP?S_j4rqsP=E_qv0yhg~*BCtOSmu;{%-eOvG1K7;KL~MB zS`}vM*R2HE$5FQ2D=Xvcq>mto#K~v@nG}6poNP^`0$(DdxIKqW&LR0wz{q${{L{Q! zMhQAdGUU;uJFi#7=uNGu<8{W(p@|F@cn_6f8#AIz_~;hH&(CDxPTxGM!GVvUX|SS%OQvC)TZmQ6KiYxUr6=4u^`#utqDH`;rQAJYRxiF z4TrW(ay!#3t9YYbaNSb6>Ium~itxQ3+%8aikzwL**GE_6E9NvVQ)VB}ZuPb>>$Dv{ zhZ3xEdC|%Up77iwFYEt@07psQO|j8jD89tiY{KeDXGX{G_6@g(2hHJQeX7?ATa|u+ z0E`PUfxDBoG+3T@#@}l8ny>ZTIy=BiZn_=sd`1;d_<(c@QvM7Z~;zc&DlDpx`h68LoS%F|ZRPRaThvp(Y&JwMDMKO{X%XrtMy zn7)Zr0(@>LP(f~P8wNB`nR*T!5L$x2SC0cUt_5F<)Of`86Cn4p%hxcu{qx zm0um}!0Ju!((1JyEbYH`b}dnUf3bu2UsxrCe0C-?2qWRfcL~#ej%W3qkiBnd-8V{l z3rO-@Vod3xT8g_{k%bV}QaS=Tp}+(p%2COF`q5*saIgT!j>d6`E+a@3&_>LAXGa6h zArvCG3!}b73Q(c-YAi@}r#M|ed9Ht)pFEW0dSQoOmqFRCOiNJ`zIJwQZLpBit8dxw z@Sy%=m_uMEJ@8V@1a%;V8T;`v07j*%1!*(VqjMQs##Nsu_eB$a$uCHeUh zJwt(KJ5IA_nRLBMS7@Cy3u2pA)BR#s(ghZ9zb_gY*xX>b0l#kwm3k`?Ao znPh0npZ}<-PEE;Ev$2<+hTgNg5hoI@0JRj->xPV&L(77_|WV@enME_xvIy!h={U&?GaBB_kNQfn~`t;fvO3BrQxN zX8Y2(h~4GI_Tww`-r4@U<;dNO#$Wib>Z4CGeQc#u?8R{~U%?}d{G zPC2$VOX5JDRPQnKW1m&z6?^qTY{HqA&Ylz1I?pfU=06Gs>@tIeHIWxV?MLHSO4U2x z-~>7PFB_=zUnUCsQMGIGdzsvA|FUPWK^#1Mr|WMY1x>&9O*>piEoGI(ks6|mDgonn z))offyF$yqGi?`+^=*@9pVo<%`o)(&!NRYf*U1z7*;?_dt8|0zR1?^5*iP#-!LNt! zIUSKMK*IDDRZht-Zmb4*TE1TT=Y{|`deR1!E4Vm34GWW#n7^mZr_kaVOA^B-d&m|A z4ttqj+#(E&pA*=$s(&^fKtN)?vy8l%*j&)BvfkV~S2jatXv<7~x}~`5?i1VU@zsrP zC#;}?KN>1+b%aZUx)Acvq$UIGHxjCkMd}5OSHssT{}U2Tc4f+4@-mbVE5Kcdx~mm- z<9Z1@44aA>HfMq4&s?W(Lp;WpB#V#ZHnW<>hVcCUni> z^}?rb8!d*QEP%1)3UkZ^h9lLFJB2RY0wNWE&;a2E9)27yEM>~gbFbxByXFWkNe;@{ zZQkdynDMr@jvNOUCMI2@fk`Buip-#PFb)i#8L@+`;xIqrQ`Oroi=tv_x0}M;mJ;%# zuq~;5?lnbuvf?eSVaO>T19<_;6}+aMjSNFVmpg-s;ZWv5HE>FZ8bXGyo`?qBs?H61 zp$H~TGA%Q-Y%jEiIdDj-mcD)!7&mEroX^^<=+Jo-{SYuhyXmEj>tY~(Li?+@^7%$o zlmBJvOd)$DXc`ra7qT5%R1$2cTyGTGfzmRU64RvWEmN3M5`OIYjVaM4981U~3AZ_# zk-#HIEVuP;0^Yx9tPxMoh!QQkhmC1yjG2U_vbhM^pw)@15meL_-`d)jKZ4~$&_0t$ zJTSU;Ic*k}N9$!4G)(mpQd-;T-#Jh$9XdG(^`dNFYG@~6q8cAa{WLK&`S@+~Sbdq5 zI?E6CeJb*ivb@($*;x^t%ZN^klK4ITr%3W-w)g>w4_ppt#22wt%=6%951@l!1%o~8 zNW4+ijR)SSX`>Z=}VxDcFAXcB;tjDL+g#TkTi;kfB72TCxA=m9M`Q z;>j1Y#bi`F#ZBuRq^N^sAsP@Gsy&;SxmX1=T%NTY=Ef3C{ud;yUqMaJUufK46=Mk!XWgmR-uKW+k;r0@}QOceooxfciT z*#ym8pzo$?D(GIE7y56aniJ*fkTEfs8zwhms>yTrb!yJ8?7z`=>S%=zU?gUE4E9;#uvxW}r@nlo z;zdLuz8*=t)|s_bVwCkONBnG~UMaXv3ft__acZ~b>kAsnEt#*937VyT@N zIhH7$u)lYx*CdJt?=O@_fzQRv>->%k82*3}FTXhn1hc7e4Ik9EAb@)&d>07wo)d% z-Zk3}v^kStV+=Q8%cCMoM(N|N!=g@Da64$?XhC98Ws?)CMgg!zgvKKMKXWAng(VCzQe~2*`}++~DK7czF_ zkOgGOIYm8YBW@%j|6m(Kwc{?0H+PXYqMaz%P;>}dl3IquAa0@Qh+{8OV||d%rYa+x zO>3Ytk#+yT#1td9dYzQ%Xt9NrNi0O_Yi+I`r*NABbLC^**5`qQO&I zID>R|Ndx2L6Lz?j^vxlNFHR1Mi?BHMNf04F)aqFxRX0w>m_r z_dRF_{P}9$e+kdIp5DTNGZLpAKBVNS_dBSff&oFft}A%| zNlCT%-hc*Q6nb@rnb6U@7X_558K=rMG=(ClJ=Iq1f2X?;BI4Yj*Dd8-kT+Y&%?{ad zFtnV3n~HHS2f36*i;TSjdtzScAfPVie14zMbcv4VS{?}nS)Dl7*s11@9ENSMu7#bC zc>B5`D&<1=`IR-9@>f>UP;)A^gmyBIP^74;c8wYPK$<2V!K__wzWNci=rpeO*BQ1q zpIl^f+yKITKWA8upcaJszPq6iNF}1}2)&tt_rAAYHe%?)bteS@d&0rc^lu=0^~nn> zL09g0vrXq-;29gin$^jrNW2d#9a@qSugWlDUB}ykBunR6x+KBS{faPGgy3L%0+1+)b|eVz z_uDs*b~$w`chZRu=9?xGYb*@eIV(}K&SXI0b7sx}Tytsm9zWf3jCjS;qY70B`3+P} zZ6vBgWRPJFR()#aIo~g_<70+Tv3!mn1dzeUopQAf9*-*lx!fs*sZLzLxPu(*8sm*}nw$8_^JQTI}1SLTC%H)_Wn?!V;8_}dlOLOjT3 zS_^+<6tT{#b`Wqp=ZA9%MuU%zKH~SN`eF&o>2nVn*2>|~@^9uS?HB6EAhx-|ppJc* zNsyJ68VD=gG^=q;p;4lpS7--u9sD5GcN*dXA=5+X^57N4j&so zDIwRzV8>nNGX9fkmmb-%xll(yLuK{}mJ)}ain)DL7{&SMZ(1d6uM4EtF`fH|5;2l+ z3!-XV8Zm3+kmy^@HF=v^PUNPv3x(pyGbb|-FLhv+g7LJsi^0`SQwB$T^w2C9Q~ zQua`cGbKp9YNz-hva5FXjk)w%GdG(=b#Tk?D8P;E0HR!e_~-j@wht&~UyY=M*@bXD zM|r9)+@7mE&%z7GqL=}V&6elKBJAr;bK=k|UapI%R^KKxjvF}_LbLRW>$W2kiIR9_ zD|w>6N{~R!NtQMa2g<>U(^*xo5d=&tky5S*exCc%gNX#DHi*ImhLKuaT-&D7g~mR$ zG=S(o`mOJ6-U}c@W5xVDi%jBucnrzOQY$Mni23*aqTN8^v|q*!j>oB8>0>*cw3{ru zM{T6>eAED?)O!ST1b5W#DsbKp)X#wyH@#v!PpB@N0$g2OSF7#nyq#PkCrMw_6ynKa8?I-ft9{E1{T`)NJdQC2h&Ka)?o#Ic z;gn;1ARs#WxNgz^W4n?V`PtXNgFOU$bRak7yY*$afLf(h4=PJtF~@6ZtTYd{u+sDo zCrG+eUsj2=UN>K#@BTc|$K2(6m(xRf2N=4u+YFT+R2F1Sv)XofnL)_AyNW~vksl(N zA?h~+ioup5w#S%p_gF>q1QVkxM5y3+LzBGkQd6^D>Np$&y$EKu7BT2H^93ZdHd!Kc z0}_;ZfQ6(;h^fit`c8)+VSWSRUPp>jHIq7{=Cy=#c@Jg}M7gb$Ecas)VMZIi=GDwbo;Dq!O7Lop{zMwg zcxu>kuq&mpQOa#?Lf)+YKhW1@C-7P&7(rf>YNJ#~9N7ejeGVGpagj@dbrQLhn41u( ztPSCa>;*kKTG)tq$j84&<#~bUsnc*5gTpvt{fPPikm(z}&sYaihy<8=CZn~Q7<;F- z?M`al7r5#?9~n+|Z1p`3EWsDHCg0!is@0)s_(pND6I|;?jdUt||1soIcbf%XFgUOaf6NPyvlcEdy5SM& z^Y6G2LZcU*c`B#v4@qusswHwuo>6A|O+?4)rOsvSNB{~3sd2Qg*jXQ2JS-9?ou4%c z8i~%E6rha#2nSFSyT%s7xeA9os~B0gI~)WcPUw?~$60%;!Zbv!8&(!Mm8$p{0!j8* zuLj{Y;DW#Dyul2wK^V6EUsZBbt*9RqMA+Lh>nxl6`v)ychPssFnNjU zaB{sEaieE`sL@r5TFe3brH;y6kU%&Bzw-MYSw%DWOv2>A3NqY513khqQHg@m6vY-K zATxag(p#`D2_>uSYEI0=zQ}5ZO4~&OJ7`k0ieXJD+3zR%H^<-#R>e%w4=S zF*`5za))3|OP*lCI9WUm4a&TEZZOpZ8ez;iGdY>hp2&oti!`yrV zSJtjF!ZRCRU){XI8O|T9So8qMdG>5L-)UUsJs6kyU~#nO@ z$FxSBoxmjbwmb*dOE**Vd6ZDa0)ccywB|J)P6Gj#m;Y zDEpW3oNO+%(YmK$rS~5{eu+KMcIVFkIvV{^L<6&6^MkI0+ZOA7r0i3fVhc`>~G8;#{IwYxEv2z=aH!goet1- z9LDd;KpBMe2i>f3F!n}65B{R4ldH!EoK{hFwMH!%CK~XfD5Hmn`7hii!}?owiOI@WmZOJbl$ z1$<-s%azi4`XmMlDS!=BhI^1-z!kjF2RBb!!kyHiLO+3=j)5eQ^}WV4s4&sB#^aJC z8P)8_(5ZqJ7$+Xb*4vjRel6e+Zb*Ijwp)yQ_*z!*TEp&PwGv5H&xQ_Ipa^|R^`E_= zYHpmw@OS`$$Z$xy<}-UyVqE5VikCC_xnR@}ia()*g*LKz*^ipy!X$qlzn@M#NuGfp zWEuE>+JS5EP^VF}f|JmDJ>Be6n7mtuxkBlEVuT2p$!2hpi41c4sMZ z`tue#Sq!wD8h)!D;w5$5xbAzZw?r>Lyt|4nr@&zBD%-N{A*nHx=g9E=J=+*_RK{8SFM}z-G1{3v z{bW*y>5dxO2}(mSw*Jwfg&A8i)uX?*k|Nt6GispP3?q5sC7>m!J58tIeSua}Mm&Jk zG0bKxBZm?(JTFLLqkiBmX{$>_128lpT*mhqaYW{TXBqFtVg~rQe+@yJ3GO?~8ybw{ z6n~X;YaDl+d44MyXZz>#lO2vYks!JnPhTT^H6LP4qAKqE_NG;p@`5qgGcy1d2%t*n z`(+v3KWuG?KcE(vBtq6q_ zrO6B%TY?5XD!#9v%_&mucr5ZnFdM*%r3nH_+A*_01;{XxIOISejjRmUeIF_aG|V~~ z@c$>KB{6zLf_1V{tWH!T!IU9bE!@l0a70h}Y?bw+hsf)%j-tL2f{Bw+6x ztRvbT*K?~kBM%);$$|V6a$7IRIsH~Sbpjhu`wqMekf)&y9T=PgI4@*#jiy4lwpV|? z{8YmFcRx|9#PF?ORLXLcpi4*t`qyJn&jk#ywjhEc|!~5dZ6HW_qIYU7r6X1e)iL)E#KD24<+6N)C);8^e9 zDn&E_X9=d1Mb$!oFG(4bTQ>C<`sNILfk;CwybE>xEe}d5NE!QKtJT?L>GW`|`DQc- zzwOtJH$ZDclcrsWBu3kNlQ)$d=013qr-!KHdu|P_z?$qz_xHeu1w>;Y=7hirm2bu; zNm1?UP>osHxKS@xzZ}5G^C&nWYyu>K9EF~r%5RFbWAq@u0`kq+1{@jw)>F+KHn%Ll zydK#sOity{!p%vxOywdVg1KyhXSM6hV+ah6L?VTb`>{zhG^rk( z0yuhXXIRBz7mBLfSq@Q71opn93N`Ji_jhRiA1~U1q5n%M3B4SmGTksA&E4wlVb)nC z$2M1O8i!uxleU|;w_Uj(HJwGon_YN4j{zKOh7Jh80STaMj$R%$kVV6cqF{`oHyWgu zF?~cyp1eiz%UYc_5G1ur7%nFRJwt>v{>C%B%gP=cV~_T96cMscvIP^r0g>ZTJS?+j zTfuLXo=pY;3VMtnDmJ}v&pi*%0-iPZ_x9=<)h87$1r#6}6M*zAWc5r8x=r(TkOT7_ zqG{+!xqEx3+Fm~sDMZfPlTp+(A08I0$qp0qV(POm%rf$Qx_y9E;a&wRKfG|(3bCGn z5IRJHB}6VOtMY1iD5FsTNkF#0go>{ORc3*orDDqdLLn) z*qx+;O*9IgO`h{?9DPr5xkElK2lx@F7*&A98O`2g!IqR0vMdXzr(Dwj>On6{`0}X{sMbTmkhi15>lLI`KCe=0m7urWaM$1&wHq#soEVYJ=1cxt z|NDdTeR32pkB|6cH`#aPft=OQ#Nr(on^5YzZBi-~_Dj_ElUHn;Kt(r==sRrZA~K4i zWct(D9xSMh$VdqkLg=0O-aJAKG{Z2MF6-?r%X-E$A7`{!a^NRte5eKUWJ0c`zPxPA zlowfULV9t*a_Yj$ac84f%Ivce7_wPdw4}_KGbnD|}z3 zPg8BxZSZr$Y8lUaALe)XCM?SEiPXfdNC1S9e4m^J27;s>({2rfn6{v2rvXZYahP+- zN0V@%%Lyyxm_Z1l!s93cXrUYOA`;LngWPC7nb*J}nNdPK^qGS6;%Q&xFxQ`u{oOJ2U;_^Xg8 zc)fy!0XR~`+9hO>s=&pNvW-`gW^7nT?HmYJ4Az_U(3t5FM8F~o1wgqY7<%q-Apq$p zOp#9#Sd24ZEbr+lEAQ>OpPr!{87&sB-pF!F3(otjxOi%Kcq+TeALOLL!A^eg;$mst zItlbgxff&sIpgEABF@pmaK%cz#g;J4Ji}BWc4IF!hvXec`Yl_;l9DFBI|;IJyZJkhXZKFU zRlsV@aV*DSttr3l*|uK*YPO&A=K`48W=4v7d&Q~XtA2aB+S(4*xP-pbBA6$$^J;Dx z=+NBN=JeK|#Ogp!aC+OUV3(T8Bu^g9Vk(UW?kK8svarnw?he(oH-c z=ESg*q+paR9l{F;hVcA|h>7%Z`ZvT-E(h~eqE@pU!i^wmvy<4pJ=;gS2o&WWl!HWarJP0>#hw6fO^^L!_ulinX8|ZLkhC=^BL6;z|r% zf>ME!TuF;UtS_5pozJAeXqKNJB1=jX7jZVaB~6-?Ol%QbNP1cgS*ChIP4swU!SXOB z*9DhK!QQ#SO6IaScuUW#>bh%zyVs|_m)hsrojIB4{Iuq3FNw zhCjm&>S+>u1Hqq(_-2FSfabsKvOkj^FHUcikrpdDKw5y3`iCiKlG~7oY>K@`zys!D zL>L{GE>K9NrVJ@B854Pms8Ci=34D>34%39D3ss>S17 zPB(~z5|I$y&Rci7?kq3J$K||o-}>Wl3W;cLf=OP4A~4TNFgdWT+soUBX`Sr`LuQ#} zqyfJXvp{Og!D{~>T5O0OQ!_apB@`gfFh4JB^8-V?`G9xADIb-ya5%-tABwpQfl@q+ zSdfc(?T*e4FKvPZ6d|5fWQf76!{dnk78>dXBBK~ph)5Jb8-yV4HtM;n$^m&}`^%qP zyQSXW^ds&RaOaPx-v4o(l>a+=yg1r;y!P_-ohz%ipIwPybn&kb#r>WyrF;*c^mynD zfZ&F1eSy79y##VXbXATe+U;Pp>=7sdT5x_a6voUyixH&VkJUqTR+tuC2qH?qJ1x-s zd1ni!p$nsF#EbV2ksZ?x-epB~W_aj#M0+t9uLD8_$bo1We2xk_R7dl|Jg+RP0&re$ zVs!>3P#GOH+9mjzQ6N`#-BUi4B%>7SDHT+kGN&Wf*xVy?y zHM$S)qsp>x^gIZ_AxMS{L=aE9ooW_5s6h@6( zU>Nh=0XRzoEK*SwF=mR1qIP_iGUevl%F6Gk6R`*cZpz-Vs^+nw*|Ebh`S`wAFzPWj zHa2;z0i3}6zFIJ2ykZ76nZ?S2%k`l4J?9XKr6Krm_If>Rb zXoEwyC-<{?^E!%_WLE>Oz(+%!oHv*Mzx}9`Iev;PFsE_w;%vZEPJXefI00a%L^W zbuQ&4jhy5!4vj!65~2Q9VpaR#rm4;60_L{b+ap~IUOoF+KGr@a;Ev+-<;&AO<7e|z zsKAwS#=YZ!k-5^|Uh((|pA7l9d?9_WGV`!`8pbCTUJuPpORcq;7}gW#wj@OnGKS7?}OXAHM`C$aHVu4&qyQ3RuPhemh|qJ zy5(u}%y{$8!5wb-s9caAmd^nb5U{r{aqqzPQBrmwQhs7Q)C?U2 zX}@d$R*r>al#6f;xN)s3bQX$*=L>J3!l^lQxx^B3XinV+1`j9{V!cvcWUPY|>7v_UZNSXV0>xVk?AjYX#4O-0E` z+UnzreXD#qlKYl*q0^S!KlIJVNTqM&=_h|j?baaH@!kQUdb%KRnk z*U3wV4C(P}4abgc_&P#N8BY-- zlp^@b@l&Zt&kOh5)1sxE+GO6_;_-GgXhU`C_)yO>y)Rm3gSM8{j?eUfuS(J)S{s7& zC8m&4UzmjYY+@T8YCiS^0|Aj z@}Znd&;sq1*bL9PUnUO_Q+)h+wZUUpKx{-vOa@yEo&1zc6@pB{yC-drcWS2of(VKS zfu?4M^pbR5cSzTlhZzPO^Zx>PW;%Xf_rCb)Q!CeZ!ehm1oh|NE><~b`#VR0H@HLnh zt`Y<&2&FIb{wK*c|6XoezyWSsL`2cgwty`jN1`D!cv6coTe8me`ji*r(Z*-wkHKVw z^ayq%)%riNS6!_S`dpY@S!8&LB$7y#M{p*2IL6f)~ae`B+pdG71cy4 zu7GJGwDO~k&tmIGO2B3{FTUoR+qW;T6Sv^!7dAeKa1qENgbaPOm*}4T0SY z-Qz&St;(MsfYXoX@^jY!qTzVh-D_2mK7@75>&9|`xw8I3uM5~MiIaCBULdA~oN(Kj2U$*b`F zX4d0Sn-IQ-zVkig@2LRj+{n!?4MQ}+9HY*?s0&5M|Tdo^eJsWM!wMI*9KMzId zGx}J|-tV)y)^}?$O-EE!PfyoW|5=#5vg9W%Q8I`tF~9&Jq{J6`4k{>cF8#%Ga1MCA zDy&YBw^gq>)@(PqfV>cRlMkWdev=b>HX!)CE!JD9la8nXcepsHC#1jT^LYz-Z^R)Nt z#^pA0h_ewkg=t93fkFsWWhus@(w!(#1@az*qKkAuhky|V>fMd?^-HT@Rmw>HNJ_BL z>qYsI&x`cA6Wa$6iU7P|v)BZo%_+FYDs2vE6MM5i$r!H4;eO zm_1IJ*JFHJ>AS_cI&tfky3>?JS*fIs4^8I49d(>qcqi8v?R7FKah(TQ(DqcXdtWxLkmb69APcPNcSn z)^M{EQv# z2FpY3hX7#UzJ?{fwMw=zB~;RYiCx2Y7iwC!x!&L0T-mgwkYyWJTU@J}GRT1=YTZ3x zG)0K%awUe)R4;XzkW^gq@*5tB)I-?Mhuol`X)_1laSV@fuD~hEOQ3Sj> zMSu=*iPiaJZ@J46UN5iSO|>qjypee@b^T~i|=7ocH~X9&zKmXRD>Xy{L$uAGqS?j zSUWOO`>9_c>ckA-D@EpzLBn#7Y+vA%y+a!D-9514Uro#_4YJgkebp4=&!c7ou97&wLE6CLc$%q5 zDa}KIk)KYfRppgpSy`j?&zzvM2WHwf9sJ_+cMLo*5+cZ$SdnEM%6eS%>Rq2zKwHcb z^k06u=%^;bnc|Gl94(^r`(Zd5tvsJ}Ua7g?K#RzPO&EzZB!H({puj$5mYcGH#qmu* zksiZc(%5g149hItUS>T*t!I{0)q{=hg?qNO<}K+Cwpi0@)5>~!9_;BUOHZwlId*Mj zTH@if`EaI?jFL)HsIuu`knXSyS>|2M@Q6gOlxpa3@Op7k1OybIMg*~)Hn5Mmz`XSQ zV#BSLTZYBYi}>rp0?R+$zFizYTwgC5|1Gv!-{PC&M`GtnswUjl58i*T_2BrpXx0wN z{1qo!EFft5Ce8D-KzlLG(x4is-^Fl~n9Z3%I$fC}{;TVtxkgBV+HYdHb`Oz8r}=eB(hKsnPlYFVd&r`g!+-eG>HemW(V86f_lg*RQb;xYq~O(0 z?m68H83$O2gsv1b3q%8E0U9G}!?bxk-Dj`zUXjLnMB>=99o_oBoPK%j93 zPC^vOnV1@^PBNko%pc)wAO{VnXQdlqt&I>S5>y&Xp-q-Sa$NH4=JC3^aYp(Wv)S#g zuV)vaPQr?{#0J%wNhmO1BpY3Xaz&Mb7!VElv^fnq051l`pXHrS_!q_E`ezHLk?u@T zD_V0qP3XKPnw~VGZx)rsc)q4rK!W~EM{5WXEim1d<=rdb#v^JXpTxE3hH`itEu;;b z1VN|CPD+uKo(DM>6Ki;6R%BH<_G=b$MPePD(K#q@cCkmurQlirKy) zys05w0XhQHKX4yng>%M__Y`9m4U?%tf>4O6HUVd?ZV zO~bu272Yd19Xvg2PX!!=8SD4(8G|N}6e0xZhDLf`p1&A{i(y1etW$=BMK9XBkr>9d z-rkdwE+`k%=??*T(FEjw8R~@+$xdTsrKQqnaKKkEgan8{$nu>yl0$GP6bf~mCJv%v z?JfW?#Gs7Ll>L~bm9}K7Z4WmSBxLojR+6Pj7{ro95CG9m=d`AefOPXZhS;4baHxaA zT4ohcsK+$y^W&Rv7ljyT1_9$hQ9@hX-3B& zSUU&j&{!@n)SjnT_w`ip9uY`AJTz$6I(Z&YA53yYiKqAZ+4Rv)5%h3g_=x$Gqn(HI zH+VCM5dMbb`xL~W@)0gu8W^FUJlkE_0Xz6D*KE$E^hHOW!;{jwFY?ikSnKT$y8{b? zz_=lT05lR<0bwBC`X;w9GeP#QzfWxDf~zJ0HTmelb%o1{6{RZKH@SstvYs1B%}zL# z7$AQAYPP~B$Y)_>;$J_87(ctI2gb69^@PCEpE4JLF>$m~gHcvn}_cvn#x9wvN3BvOUftrOg z(z^wz(#-XZJftD#vVmIW1P-)R5S%Ru?-#ybfx!u$SYW~&niI@#I6Wrtt<}wuwC(xZ z=ZKq%L&BD|lG~%h_qe7;!l>urQh22}dPxg$e_ZHfjd3wdDGoC(9Wt%m&=RDFK&7ZJ zVyA64Y56$UC*LQh9U&<9@;5I4TiN-BZQcf~w15Tgxm=E};8PN&OIZjRNN{<3(vuMj z*P4ekM==31$vAo;! z^u3vhHPD726Jiloah(+7Mq>y}2>C+(h`s<841Yj>NCO?90C_pB1t9gBnsrIPidU4$ zn#;`)!Ay5tOdAqS4 z>c(}4$K9D)V`O?;K0Ow-ttk}1z&8uKO_YxC-9JbsoQA~aD6h8zn4QB9K|FwQNyCv#*G zFcF*twt;<|YoUHDoLE0lH`b7V6QjiY-57vzlW0AJP!kBd{M$#j|Q|nG$zV0bNKsTgSRUhMG0f1WL zXCmd7084{K(+vdCaqt~$q-Uzb+dbLtgb=(p*hssrfMBjJ0T)RHh(z*k`})%%rNeYE zkLP$;mJMFE2&At)!%dEiahnL10Q^KdErOq|97V(3}&Hpzi^t_MH{DFzdkj4)@X;4#FI z$--_1B2H(s(gczOoe#hn`(zsA{L1<%9I?B_^GD5*iqV8o1v%nv)ej2VeLVm`>_%?I zr~)59XYd;K89avf%j9K>GF_SVmhN!EUWI&bLRyK;D$ADj$Tf`H2i)-)yIq~aJ& zaT3piWQ1EWRzToh))f2^iyGLV%>S9`ic0(7Kr!piCk{iWdsR z)>s^F(4PBD#yTT7`9o0@rJaE^zWiob5=6FNG&z<`m6gpa4du5Mn(EgN)IG9#bs;Qd zo0lMoy14fZr(>SC2p<1Kb21Xr(d_E&CX-3p5+j9GLs#dZ@lBuX`b0%;YZwcLgoTER zYl;;?eBN{;_?4D|1e5L@QNdecg+usY{=e>{6;p}}iW$ZKPhOlRrkZ|*L+!yqE4R6_ zg}v754le(&GiL(e2rS(llEUo|AhYf!Hdr3alLuN;b`BX7kN|(n5FOwpBD8n;GCtR4 z9i+DSn*{WSHw!|e;Ib&-fwzT8prSj|Kv1kHQ0QM)N{!#Q)+F9P#Y?E);Tqh%QmBd^-uoFD+q#CYZsKG{DnsvkNEPj zjtXD0@WOv9rMW5_V#B)Dc>@;-aRx%k(v}0@h=lES7sbNruf6`KD?0aI6QWNl^hL+L zV_hitl-9A}6u894$+4I+I^t*OX|vjOzil zk+c?k>t5cP_y6FC?m>zPegn?8_%$uMPl_TM2Ob2xWPGBe`#)f{Gwi{P2g97_-ctGv zsH(9U@<+O`)OPoK8H}-Aa+?`!q64+y*|k`K-*`hLg1;W(zRSVtczJwIka(X|4cX*KKKS~Bvd8KD2lc-{FGQQCdX>qQoFi1s#a6LtH#`f;6_2m%Iq^Ns2b zzlL)U9~n8sNRXtL9_V^o4Urz~X@3YSMVinBvnD_qNJ^7198VDPaex+LhcRN9k83bS zv(PWj;(y{}c5nnhk2hi${VP9T2RB|x-wYH$7`t4TXktLJrm*%6H3DV<82~dFrd(_g zS;bB?tU7%(_UGybdddyA42fY(DE}XUhz^_IegDDz*6AE|I%|LR3>O!VO41vz_w~L0 zh9r#^7h?qm$ix_M)BQZbA#4&v=r_r>*(G;+B@6*&o;ozrX5yuoy5!8d^t4UoJzFWb zDXlBDLZ33>5yu5cGi9w=yKdrQa-_eUoazTAmIc&~nENN(!g^S0r0>km!8yH7ayL}y z<`&b5RYKPTXr=Cv!T=31xW0yAzGjxO+-DLM^kppn&C)x+wCdqg#W@oaPcnT~&be6O zD>yW?wZ${2jEF?~vj>WR-7GJ*qe+EJSOmAV|Tf22to^(V>KTz0yn7Qj?dM z4Dj3E^*!-^G0VmfP?j`jh$!O|UZq+(HJv(AFf ztsGAw8<1d44bgWC0K+G+Wa9>*h*RnroP=n(5+e-h*G4K-8#;N7`y%XC^k!hMRiE;` zLkb6~dT!=f4n?wx5DJLlCXgG>)U{841^oVqj z5yOimK*k-bR%-8n2!*~vezjs`VT}E_zvXcnMzhQXr_k;IWG{tcL?L>U0dq`BbI3tZ zvGA2Dq7REiLMBFE?Lu@Vlx^#sH)R1v|L^7y>|!^&XrFX|uQbVfUCcg@$a@RPlzD~w zbIb-bq<{Eh@r_w2S}E#;$m`KV&*@#)NJTDBjrsGNmbt`BIiQ}z{fP1E&AaH zQJU@pZO1WLPb0N!_puJ`2f8#A=9cQ6({x=w2heX3>o{MB+78#tPbyqvX8Acd$M+2f1|9u~2b=N`0j#2} zAAvW_K_5m#UQ_2FRl-Pw8xY?nU*q`iP9Q=6yhe*_LhJH%qr?l?QG!VuHFGTo=f~j| zJ8X|vVpIo=(Rz+qrYx+UfA?XYO%|=Ivy+Q_68_F*QMAZM|pQtBfSC6L4q6a1C2Q&D5$%BbbU z?nW@00?bX#aFaak~d0kM6-fV`k%B=0naUjpy zG_R>qftN40#1d@6K~!APzN(3_v=cRbR(>6v0HnlxAADe#^rDejtg}DXqK&fYE0wDc z{1-=)zw7?i@e&^PN@)``3rdpBo3iF3>(|#q{-iDVxp4lT!RSMl#GrIXQITAXg&}P+ zQCen}9EVB`5&$)1tj%KHKo&antN?WI&C!aD+e)siXfhM5cD$;e;P zLT%=^yxyHG*iw}GMVpkGq#4N@*6e#1Nxor1T&O8o<(Hc1#Vc(S+P;{lhMgeI#mC9; zlH!SWAU8G%8pt^^iz~3Pu(|mjwz+U|H3qY#Mxj=~-4c;@vo_HXa|CN)HM1B>e#~Jq5Yvdw-H+gN0J6P<2J_m*i@Pi^7slXi3K2z#1ZZHX?kyUcxxka} z<(kM9Esc@?X^3q7$ieOAKan{v7<^%}b-=eq8ZjuuYrFwm0d76JyOQydh zNKs`{@GOtMc8qV1E=N4mPsapqZIYXI$q;^kYHN%GbrmO`R({JGXD}bk3sxmaMJ* z)7i6vUa87M%ddbLPx_5FtvI`ZnCbJVrML31+1Ad$YOS-FuYY8Ne?| zGuHg^+sy2Hrh(2{Ohc}a`;n7#0lA}J=m#>w6Duv1ohunkGPugBg$H+_Ejwgy=vRL& z>r3Rtf*GuYC8GO@Wu-f;^!y%nSfKe#S3s9}1J zF)GS;#E);!+*-D_NuS)lRKKpVXrF2t@MPhyUyhq5?ONg?6UisMuzs1c z@XN}Y#!fh7;cS5-GN@YtdoeVNtw<1zx)>ui>LDbQ&|D1Yi9v>OL-as&j6Ve`q82A~ z&gx6dT!VsIhryA+>S@fbz{>f47PBswWVuYCxB4uSq&=rX&g8(fJTyvnUyQD40ytbnc zxf6LYWBzL8AwG5HDd7aHxB4X71qAnmMQ;5uFOvRXVJ`-4bM~N^wzk(;ld^9lnN!2ryC}-6soUU-X?=8= zs{Z=l*Jkx2!TxWVAX#H#j!!bQ*e&swj{aS$St$e++TbzVHh2xoG(|;HanXb7lvVZG zE=g_qOd2%qQj5*6yOxE&m&5i&HiUq(=E?N}PGEX_#VuPB$v&B1e?RcFsil)AtEwcu z95SLLQlH&~{!~KAD!6i$NwOGi(rgW+*(buV0^jZZcBVmnqVRm-RH3s_v#(8R`=V{8 z&Aj5P-HDNgva*vMBGrZ3oL-P%(N#c0{ow)k`Y&k5v-0&T-u#>Yctru0S?5JS=`>~`i32nSC zej3rkYb!ME9Lwj;-%2y>IXJM~Wp~+^KeYbXV_V_Bd=QKb4?ZN;)%Q1O{32w@lP*U2 ztT!85TkQ`$`P|b_fBBTsv-4JgHnuj^cUr;NiXTiMMAF;xM&s0mM(4eRX5=* zZN5oMNwz9OEYd*C$OhW^A~RfLFh@|`Q?lBp2`FAxY2Aiifr$Gg+3b)nSTd0T!XLh}_G z#X*;+2$CfL4BH4~5J`)9T4 zGE(y;0^F?~l+DQ+wIH6c!XUKqsnR%)M|A1=N8^##qPE+p6LWa_a61U;?hI_0DR5$02C<_Oo7EiDM_qkMd-_MKB5*Db*D7bYNf2ugjk`XpKhrA{5-S&aYY?4Rd) z`q=+;IfL89m>_jJZ*Y-4m%%2$gVmHJ`6HW06XNA%pxC6=ng;4D1M}>e|c5*Zb$<)NtuB~iFO0KK?m=%je;@J`?m1=#liFvCJ0<)*=@geix^ zhFz{H#q7AKVhR+?FJf+&m$D|2wz&mbzydI)gh+ImvV++c;Nw*b!&O)jS^Q;7-X3SH z$ex_RLyPu@YQ{AV^pNTMH!gGrhe0yG-^{@cPqd&LH*9!VOmRs|9@+Va4sUo^B0_($ z^ZxswC(!eF<*A zzx>PCqam@=`0&Fc!+6+Qa=@!U`wbkA1zPyiTd6H%n+uWQy1`bYX4NgKb3)sXE zGeSNc!kj=LCC4f`rHEK0ZdClJ6Gju#_ujD!+y$DB8U=ZFXU(8SG#(Y-t8ltv3tow$ zWAk581rAc(NKzcnkENqtDcBH!Cr?3n_-iE!?4E4bY+bF4dv;wV>|K|(u#>~yDY|4b zmCwF^c^4Aiskkco&QNsJjiDPSuUf$iu4Qnxd?7{;dnVMCm3ipKXnls_oq%&Ecw+IP zLyHN(o^-nuu|MaT2&uxI(Dr9|tBcbl2m<)H=ju0^{vbPhZf3sctsD%*(z#GHin;xq z13Gjc$OnuA@@qQVU;+MP%yD$h0>NKE&%^F6z2LeTbaXht);#f#=lC(GE-%Za z2bm0s4^wFBLGy1?)fSi`0_TC^0IvOm_Oj49zp7CWxO2=;YM< zZzaQ+kiP==r~)fyruM?}j?N15(m!BW7~k&?ZnBom6KA(A~}?&ZervpR9Uv&@~SVe^73S;@9Dl*yt`40jD^a zU7nbf2osL_6xGyz`LB#r8|kX)h)J*SWH;BE=dPLr`3-*w<(k6g=E5bFjm^c;O-axO zpeNzPK9RkXBsE35vzv8Iz7k(Q8f>&L+*4?XE6X`x==X$%ENmdV8_0V?#E1XNV;BaP z76s+xCK$k~?X9g+m1UJDVs+BGmUT%#wE&B7`EI(;{*ZXcz6!*VhO~(($}B2c5nd7w zA^HkY1acF21Z#s2#AJG2XyBS*vn_t5CN7j7Nzdr;6!YP-!8hdn{Vgr`Y-?@q=cXQc zxr}USSOyHRAhlX#Mbq9)vXECg#naxkGa=hxC_-R}PAl9PuHv0@zaR|9yorD$^lciE zM8in(DF9S+90%AlSX?kE#>Dt5@WN9f=(|7w*sXG>%AWfUxG@J#OBe064{lJ(hm+1Av>wvL0=YV5 z&K@O6)A{{iRM126GB3|BnP~B1`Pi7*jB^zBb-HBuxV=1IWI86cOams}vBhkOsXMj! z-3NH-=8*i(%R>Q}eOZ5Ncv!46XBY%6wZ1urz&?t0KS0-MxecPuH#b88C8a3p>kd(- z3^c(jy1qur9!KP{kA7|cTa7=u3jFI*X0{Xa{AqBeCdY}Jf(I2p%g$7hkgS@SkpUjz z1r#S>hznW5#Xu_caK0w(P}EN$xTrLWMw_4wHptPE$6}Y(c|5<>i*MN?fA-(pz;$g^ zC4}P5+pV7YM&Kb5>)f%Uq{KS2YE`0^SD`gKd#YmZV4yr4gWmqcg_L$QhrrD!D_dW_ z$fFqX%*<>z@Ev!BcgABqP?78R;{b`+*!}sO>~1!+$Tk0qIq$C1TS%&R6C6p0352RK z_a@5$j5w+k{A|kUNEu1-i;JO2hvVXcPKmW+BNp-|zsMFG^2v@^&!10PH+!5;54b$$ za7r^l4GZ$698*f5S)EiP4PiqnNj}|UrDgtqA_fRa`KUrMDklj};1DDO`l!G@vRo={ zNK36R9Z`p8l9K_gfqhh}8sh_HWv^na{wVMo)f%v^ye8~0{I*6~X{q8XRg@r5RUI8X zZ?-!Sk}tLc5kuRCB7>lh{;0HQm4Sm?!*njYDZD>wM_Z-B5HFO&<()o2I#LP~=}KbC zV$vt>K30-VUXM_w6l?25`Su~h#@$Zm6kbS>+!x#6xcwjlf;zWOqDvt!%a>Z7lt`9% z?|Oz1HqXLML4ra_3d!4f^Bm+bFKFSm-)&eM@}$DRSYl4tzu;(Tvi|w5(a~;LH!x5~ zP&FNOmQmQ6 zmK0t_D;Z(dzpv}4iJ$EN>_`g8#0F zmVit&LOMHMZ|cTz`Mz2^AQltL&cG=7mmC~0LAvLTCw=ID(biqMBfvmHY)AL@4ECsBg}XV=mKZ9JL3AruwX=kJ~9pym_Q zkZA0&4pAq74PTs|nULSexgi%ti|C!7@9K=`>=f&2zoL=AP<<`R&Z6B&l-zrD_8OJ96G_z^Kawc{fj{Jt5fZ0E;;^u(Q%lW4eOJ zK()EEAQZ6=L{kerMzgTzzQ<{q2Fs+j_x$nW=bgAj!PYV~MCl*r@iEKzc<_e0d$ejQ zW4vQQYDW4Ub~FL3n)csYapKCAlY4veMQBpFSYrNRV&dvm<6eiDK!qG09FxBDb-({U zSzKD?$(b0Bl#ujVuUD%ooX3uf6P9hN?{E01671>VY`@q~-*=6TsXmpD`&ifAUDzaA z|44Z_r^@o+w$zCxyu~lEUUn=MJo5OS`&vmsAlmocCqIRTGKhcY@~g7hs{FbEFZf&Q zf^UfR{xh~bW$J-UsfV-A?!r59$DfTquJ&(l?{92;Dr>j%bq!*j>=b*R^`9x(&Ep$o zwtdM+jAl4*SQ7($EnQ*pOGb?k;7$hfy!ZHV1{aj(nQ`S4Qn{(kT2@<70uuFMWsglt zXRk3BfL3F5oP1O_B}r59Q}1q#x>0%Db}Ac!sM?NW$%1axQ2)=O+YlLxtyXiP*=l)R zJ}wWgDJKG#69_Usl79CKAA&}-tYTrw zPH)t;;SC*%C;g$>Nx{vHbX|MBj03`le&%1BxYfG{GC}9zZ{ezEv(6RGgH=CFSQ;^oM_6-X>Et|C0+g0%O94A%Sf| z5cQj0sNYa*;U6%<3@{ozhCuh!W&S14^@D=l{@pd1=syPRBogPY$|P1a%)`G>`1=?XI7k^yc!LldySE8Xc}PTGUx}iKl0wUF zo_8XYY@SgH4Gu7pDjlb;xh{Ls4?KXch%_}n|cq2M6W?S z;}ut>06$fiu52q?w!&X$oh=^6Z}fVZ3^4aTyvM&nZ81|&{EfcuPUL9iwupp7q&%&~ zm{vsw7!q)NrkK%qUK5mBRB}`0`f;Rt@MD2Tm{vy0VzSh#NR8a{x7_vZNB~kmt-nS2 zoGd~hw!jchf&#+4dq3zW_s*p^T&Y10q-W?cTHjAQ=y`8&^A76;qifjX=ah+V(LyMu z1}Wqwre{_}I{+kr<_yub=~?{Lp2SxF?+m)8nJvkNCX=W5t?<)7+P7D8tbDy$uoNs? znpY8DZ6CAjU2ATzHynzta)P2brNY+h`A?PH4y4N60hf_$M$g9HO8c(k!w(gq)iKkY z-?yY!MMauL&${wPQ?r=p%0#g6lZ`VkrY@k~*c`n%e4{ZmVn_~e_4xfPV8N&FOzpSw zd`Sro>s;HARogeP(4sSvOO*QJ%##Vp=1aYoHd)T0;$l_Ag-lb>Q88Bm@(6QT5j@Nf zeiAGr*7t*80Q?QZAj|W82~coVpZg+FGLhkFXycH}WcP@s^HafUt%oge4m$9mxC!FW za`C}4(Q@hoU}FueJRx>Za<|SQ{){Y`r<-qyY6R z{4D`*Dp>HJ0iAT~o7it|Njl*Z@P+MJ&;)vVE?z9Gmr36K&Bhh&-uCu}=FkyIR{t#k zrWpn^xRodF_dKstYJUrFP=6wTX%^F1-@QM}a^4{Yv#9Z?C8i12VZ;bt@D#IOj!|R# zff0R6gSIo*b$4~+()j}jU`sb5v&;LQ6;)rJ&RrbIZ#k!?#*m_FUexSE7C^OY2!q(SmCp2)PwvZ6Q#-_7s7Q(>OqP22Wfk~NbUR<&A>9B(a)Y&}7uM*psS% zaU(K6@MOY=-Ds$(a!J@m_j908)nl7iFGOVi&#_m`%T`mPv~xj**Moc%`B{mSn-rsR z1(q8DYDuRq-kro*uUc22ECuxNf$c*eSdnv5T4ri_Rp~*B@P!$}T|?9YGfn1aZtqoI zVyn-B7h1Tof3QZfTrYiNmN@p{ZBL8)K^uMW0;4$v0UN5#V)&~qcj@f0f%PY7^18TM z%6ffjSz$AKPqXZ$f;7g8#zwjxc*8mASr?Y3ot(e|jxkJ?ST*Tlm_cZk2kEv$_%;dv zAM_73NHJglWw?k?!xB#+bvP-PbZ=3Bg28kcripFyzfyMCOSNVo5IqOyXolfoLmuJ6 z;#tHB27y(kQXXGpY;DEHoT{p4|3^R2(^DQ(rZMkI`R2{w`dgNdfs5q)#>nSMV6cjV zeb3K@+?rm-)xM%Vw!I?3kg|X8@;TF^Q4Mc*LNDf)x#QJqjn|gA&&&3%c}sk2&ED)s z>+~&bLMswq4Zqb9G`D=O?EJGDr!~&uK-C|7Ad#=SU;oZ@KxstgfCm0*ohn!dGcs8R zZr>gnm^skN9Obw)w?m)6*}4pB#^GN8QE|Qh_~t(AJtvWo9`8O+BsqA|+uEKDrjzm# zDD<=C20p=wNrXZco*9S~%t`3~n6NUK7N9`ixCR}7OS8cZ-PtJwz5b9XkYwMEnU5Ju zeS2A1y2!6D9;LqnZ>Nr>2{g-S+zo(PyOoUXlh_;Qyr5CZ${AkgQzl;sc?k)b6S^M? zdf&J;u1zePilhc6Dg_9I_5MH_uK?K-MI|Q$2)IuqN zU~*b^_R@uZ+(#^x045xPEH+=%1#_k-wAoZ!e#q?KOhyfk2+{Jr(4IwbxQi?AEO& zHs#t{0rx`|ZjuEgZVDMFaExNJVjeu}ap|}xWnBLA&)d9VA-Dfn3ls*dsOTrnT7UP5 z_>iZ+iF~=Zzu!yqmE-!Hy!yJq`uf4T`aB}%eGER$7EV2V&A$tXu%-w0O{eC1W zz!u;-k{pt-GZ$7?^j`AQ_{AJQnER8`_eH$%-w6%1@0?|cMPvN%yg&BT78ySR`{R;7 zeGhI*vWNpO2Q!xZnfM+e!n@0!4~maDOBrILOUQbuE%VHwQ_06LjPuSHCY#~>T_g4W zStHBZ+uGZ=Y@te6IZ|ixsvNh#RzrY1E@)OHNB7zu)au!Jcjt{7RM#Zez9`Zl;zkBR0aUR2J^!eld3h~ba_ zj%Jn=OGHCR!k(5sO$a8Q7HJ<42wI+H09@ekCe8va7`i7vmQ2&WGVjv9eO>Y46Ek%Y z|E*SpnZuaAbLl*N$$Ms;SDre>@T?^VS}gpzQ!IG7heSsf=Z)Nd9HwT#acpHpgaReW#a&Mj{dKRPh{gi*Qc3aG~TCl$PNzM)nki zZ(=QVT6M;JhFaE9;G?0u$^oGRz-g_;f}4MHG0b_T^WJdlHl7mHIU`2cXt5l>Iv8T8 zti1DCb$h(<4PX}u@tK1rCBx9uaGD0rx}Dfb}8$aLH2{+ZL;WTken0XaQja9P}$P3y$l1D1oSbw@@oyc^L2-BGFR%B zepw)H1)7_s)|Squ7UBi7KH=0?@?-0Qo8tCM^n83eXS1V7s_GlIEJjmi23KIIZh1?G z7eOD7I=t1k;MgLrUs}U$8${)Ae6;d58iNpyA=B~H`hFk`fEhCw=BR?)$r$Fo`#@TF zHVgnx?Dzx$^pIg~#HTKXc{BjXEIa-!2k%vU3eu6j_-QYfe0B^0$Ed1g^mA}-ULWFt zvUm>n2MMMDXCvGQ_vpEP;}Jar@P0Gx;2}jRZ}ZxeO4>nRaTx2vldx7}CIGbOjKu^~ z&PA}qG=T{>CYBr7zj6PbeeB<;)ISoI4a?XQep}#h|6i*%grU%VAMDkrI!QqC$80|a zo56e&Blu50cpIRPZgEGbI9LtnhXLTIpZ-t1&<(47KMr~&(%>;fZUb(el<;#I8xyx| z5zQsi$*j6$MJ7GeXx zj~RRnW%Bsw|3$*cj2*@>`mpY>9L9&e#7Mx8%jc*@0SdW0;wNc$tC$W}5hA*Kww!}; zUv;Q$ge}xMiz*i*5b>lE9Ri6aLE!M=*@#IL zSRuZF=V+j|H;~)3s&zkR_D8?4KhHG~bNMYpLHngu#bam;?76V@%H?fT12GVzvSl>= zc)UNl`SAXSM>oV=-urc=A3VyLY!;n_e}f}cMjl!Lme7RK8cFDM>+D)DjfND3Y&PLA zLqi9}CX>@U+gS0*e&io~P#PE*mE1?r98%y$w*nQ7B_&%Z#p%qNB!90;`8c>hE&LUZ8cav4ncQBr zd~edD@`5%@r&XmTy&9h~t2d_n4<+BKW{o+O*6vbuPi~W1emH4VzGP%-LWqtmIFi_> zU+^8Z6H}jjF)Za_U0yJs7xB2SPW)#|PI_5MZ&^utkUYqHtZ^(kBkrwdheve#e1dtX z^q)Ufn^pdgqzkzJg?(b5vw`>Cd?g;O_k~B!FIrLT@biy5US8zgU10>5pE0s|%A6T^ zo3^!eDm8U#R0Sd-&j0qy#ZY;2-Dh_K%A4^|b$lRjcd#ns2PHDF36V&VR}({|PsCMAqOnH8`?} z-3c#WDv+-}{r+M9>eaSdKkpl^R}R4P zoLcmufsUVC)!7*6fqCQvmQ9(AU+QDs=D&?i%v_ko7nnJLUc~;$1zCQ#w?JGxh`1I% z)(*tQ#_2LJfu%VV;8;cBe)}zNpGer7Fp{u20c`Qh%uXrp@Ge)vFD)b4AEkc($|QS< z7a!o5OK^rmoEod$7K4YUDT;gP=t_YP<@C@aSsl60+Uupp#yUg&*KJmO;EnK+4k{O@ zv#Y8yGiL6)kE-XY7)Bk7tR_pP7ldg#>+|8NKMKU6+&y6tTh$PhUDla`$KYXkfcmv& z0ZFgKLo8}l%cv?#_}?%fW+|*R+-S??W)16|Q(M7v1&?Jtmi=kg19|r{R5v_wVr2N} zh_#j~uBEI;z=XEo(#Z9cP)rLb51HKfxcDPKlRYg?`c(3`IYrrb1*s?7#9j-dJ>+47 z?6IJ9Og`+D33Od{7p}Jyc9$=%LPd*Ic&w>v@$b8FVQiJA33p}3m!rGeO#5QOlq=D; zyU8YyOTa(}b=o~k8yy|prO|)AII%RVsE8<@H&`MHnF?{9zKkhU+)M?X2yr0~XQ zR%v2ZX`*R4c;d+b2dg(a>({;{ayQ2d%K%J`NtKBY_w(iyP7F;7{4bk)`#hHuL zmQAGQi{tgMue`MG6)Qx*VDPluGUWZ_#8}R+iqM`foYE$DBwi@4YOb?eF;R3eK2gLzU-R-nb zCC1eFu~gvuOQsZSl=yeusj6!Em!~J~j z=Vz@gUyO`|i}ioi0I=sKM6X%(e#M^t_bt_bRm1p9|iU zNo@KD2i%h}>!TjE$Jaz!2xUBCS`tlv(o!No>i4~v=l7*ONLn~VfZ{3gL&5ed0ut70 z$A)?GVpB&0P~PnKX3UE7yB3fuO^vN*4zMw@1?eB>#L!X7=KAF3_@Uk5(Itwn+>f>^ z6;Og-z!|u5p?2hdap;&jY_9dKOaQH36f*{yxX0?b&z2k_aW{`?)#Q zeyhTi^ZcOh$mSZ^xNI3GBd|FCwHm8Qgr*%f+leD2$)v0k4In8C9gEL>iNMfo@ajKK zf&R>hjFpWj46JOka zWF&*E4=uzqyEu?nwxdrdO z`}WjR?d{c3@$&enH%Deyx3u^!ZNLQxOdlbBw%rI6DCy}y497-kV`Gs#uu05wsr-$*|gCW48}SbxevL4+3BwmycwVo{72 z<{So63#m`Nao)Ngfdrs%0yE->an;vDyiYR@B(1B|BKvk*NB5DVpvA5k)TabXd84&o zjIrI;#$dadqB@mcwPCK~)F=rgJVjAT&TuK8Ysl1+i&kw)9-@XERPRLzfFz56PKwyh zg|YG5MA8&Zbe^@qS?A4X87J_%w$snwU&sy+tZy7>De_<+RYlPx>X6Y{`L4HE>|&jy zrdkL@&{Wm-91Snl5B-OnM{R!xuK9CRXBBNxnWFHWg-DBbG-<@SAOMI0`zVC*LH!1v zqJD)6vc~qn7lNy(C7O;>9$Oh6w|jr1&UNB3gXUkdoYGr=l|e&U2v}FJ7{!p6Y0DaQ zLqsrkgS?Jc{g*m*11vh=>=bC}l~W!;QFo(lIZ4gCl7x4n{T65E-l6@sP=OB0lH2MX zEgHjEGBJ1Gg}x_!kb0*89j)8ZOY)W?de`s2nxX0aX1*Q<4zAki#DzZ&ZtKhQ>mdRE z7ulJzx!yEHk!*d`k1Jur|0}6{U(UG#rGImKXku62x;L)Mb4nO;tus3@#q#ecJ_Q)) zxcqtn#fRb@hOtkqSF#IE*2j`1yZo+SM=6FKtMn>rm*Y^cLd5t&v00uRK~CLYd(z&C z+k2Yc)5Xej((h7ujxgELb4yDueaArJ#_>^%q81oCj5$6$YWVj!iw+~?Y$1`=%5=5z zCq>Tm6K;ie813_oCWr9=Wm+oUJE?SZLF_vkh1~e*@uJ_Rj2 z_7Dokx;IV-J-TfUPT5A9Vm6-1PEC^fIa2?Cm+#XuhJ}tKE4xwqECzJMx}G^8E&$6R&Wz-^AQCF+6(4fBO$1n- z4;4evjvUA$p#F2ycc3vr6DL6X`CM5NZCa1P7#5-RX54|S9Qcq8c=x@1Y;2Z)HlwJB$SSk-l9<;AL_~z(n zS0ZwaZkQMwSsG%J02kp%)4RCeNL5^CHU)tMG*T)uj^Z}4+OJmL`OEYH+q}$JiOXY+Wr@J(n@*kp(oBNhL9Fp-FBMVY!|dX?7D>BA6xd z3-9r$Ek3otpnIJ7B@D6Ls8NKPL&K{D{2bDe%dBe0FGV{$HRX?7lg$oNCgo^pk_N`O zSXV-u*HE7qXSik1YG<^%tsEvt81AdLkJXth;_Dz}ugwSu^!Ww}DL;^Z#Keh#rhk9* z(Le7Zbfo6LYd$jK{b#VGw`a;A<}rjwgUZe8LaccJ?vPvZ7S!T%sZ+!3aRkF)fz5}n zzB>NOtLm7A4(-e@&)MeN9$kE6cy6R<5rMmKq$a=tjY8N|B$b9_m@y+}<;s{DGoTR=8bu_5n%KZxRI))` zewY(jk8?SPu>6G!EkCY|NlpFmyudO&Q;ALg-US>E2Xg9hB1`nAs1WDkE>ez3j`|`< z7~(a)!yr-wlHnw%V8^pvU5^eQJvyQH!U%$w0w-`AaI4U|M&xi?H`9+>ZBR*$Ee$JO zte0o)IkG1U$`^-~E&*sU#&EBDdGByH%;eT7##D~ zoB63%g3^PGyBIXybby`6gWBbS!v+L-dzwya&IX-=6VYxbhQPBnH*SdJ#jGN(Uz}iH z)z8SS%{-6S#r^k7Yt~Ll^OA!*1B1|soEaBh5vSMJuDWjh6n?r&6ToJO7`^h?T2aRb zhBv~=SqltgfDTI7UxuIqY|R9I1a~>60O6`QFG!_O3Pybc**r za;*(#7w=8pmuxIIHw;zR#ehZkw@3>`dM@}Riz37^b zPKXw=`TOpd6-fK3*$iBhh_1h&IR=*JT~6AzSdrYIpu|tXtquHtGc((coJtRJUn&wt z3tP5WJ0&-k@ZZv3W#`2;`6_qGKUIxwX#ubwL-kP={A8T6KJMz@6FQ9Fp?If4{VP)#&iB)Y2mUcbRmnqXQ4Gd-c_hj=^jf7M7`> z7Aq>26o(hINuroNH1xpzBRYaL;*_}wq?MZ=ad@(&h2BpmKsteVlBDnuoOuFroCFwy z{tL|P<)Zr;WICMk7x~nd5M(;HT(m^nML`Rvq*qwa`!b^aSy zqI{yRypgYtr6P54#ELDMDP_Gq&eA)D4tdxd3DA5xugmjci|pmL$+75Szw z&Z@J77V~J}l}*d)-2Bj~kBD4Oz!}{XF*6xVrW1%g0h8N#uN19{zXs#~>QTR=n`D~+ zI&@XsANwFU1_6ggbb1syq8OTBmQUt1tU7GK}v2K z_0Q+Cbg!Xm(lU2DV+U6Uegm<_Um}56^Y}y<7-eHdneG7TA&J;^#3(!vB|RsbZmA+%pzGv>i+&vHX@|TSkWE) zJ74gW-)jsmP4~Pv_$eK0EhZ&m8Pjg=S`TbUhKZX{NuZV2-cm5&7o z=q9qvznTzp^c*nkm_{&4l7m;WPF55FQUHU}Hqrx#VMu zC~f9Wz4dVR^8S4~Yp+fzlGJL2X8dBpm*a*6H2#u;I$2a)P$93(`2ldgP4r%`X*e6G z+o|rMa&!eb3H8kfb6;E?HSCMuuw?zK5;tTJZSfll=nhybhGp$4Mt~Pa)gG-<{N10; zUYE6~h|jn3`9*lpjBK#~rO#rgW@O?M9zGH)5P67TV^~jA@uBAjH}dnU_^70wjV~-; z{+3Q2lPtdadP<0N7V&tn)@^6FwoUi`4PIl`l8BI{zaAKk_sK$(>@d+RdFEDAJxIM} zd5~C8DH2r*#Ju8_5cPB`Bb!RoN}Hk-;EF3&c1TT(7iyk5`c{5s7BWbNaCKj5*>GII zR{K_Qu;9wOR&CU}g_RhtoiZ{qtSd{tE*X<5Puj58;I&%46eh&%yZ!v$jMphh=Ce)= z=}z)nd41wN+u7VBv8|_0Ni_RYU$ZoHLYn1VPUr;IviAx7UaL)x3PR{&Y=X@O;&IOA z6uLyk1%m67Lzq5nqov$G?AJzSmD~?RlU|!dVyJI$?F`U4k<-@GdtF*#$F84%jv|I} zsF91HMI6cOra^e;PQwN36}vC zvyr_SrKyZ+3!Mb1pKulZ?&Gcch4dMf;eQB}-@aaRZ}p>lf4lh@t?~W*Lkvviz}2p-+d!TWZ}rpn z&bZ`?Tp-@@*(Ny?5+5I8p_@Ye{{koPsjLca8Xl!J(Fw-=ur>o|M^QsM2n=J4|0#@-shIpiKU-t)V25hXf~}g{}D3n^@aTM)uotV@Ov@7 zAMT8a`Vj0p5>AK;Kld;W0j+x`y{%QMsb1$JgzNZePuLP(Z z_5d=|bOIDy6Sizg$zaEt#pxU5$FhzB0}golG;~00pBqow;WRXg@N0%?);?JkXveMIW5r#RvCBnIs`pE&XszAqtON)WwE#T%Uis1&iDkL; zqWZGl3c@7sB*vVWU?;+O4p4x+o&ZBkfCy(tpk)y=5i;*I`^v-5`)?z;3Ehzk`L*3I z2jkh@;Iz|JCR4&lLDQv~WXxXK@&TPyvBHmxjA<4|%)rI=r^=@ZBQZVOZgBJsfl$Un z+C@029yfR?cX_gfP%(3cIk_8?gkNMd;33aK~R8^asJznhtuy;v9Y zbD(?SqoLt0DLy!Ao3jlsxEBi7h|?_R-Nz6WUoR*OsA_w^nniTX^MfvxvV!=tyRE1q zlniPKC3O~ILwZFjOv$Pkz7b@Rd%(_)?~m$sfSs)ZKyg}r z+rytc^~t}(b5{q)zlYjgrR*NomQ})lCpXw*Y~68z%TIr2<^LaCe=?rY4pM_!#5M*i zdbY28r>~%|*!7ir_)>pz&6QswOsPu`XV#>=|ElNv2XA8EPYp%F<%-GW8`jTi-RznC z++Ec*u1lrBJ(DK)&T3T8ku%o%4M&b%J9#wd=(eXvk8H^6`_|{%`u~*iJz`0ZGX6g( z^k;}SP^ZWw@)WhmO*qHkXWQV$G%D8d++MXXZo5r3!;nWDS5TCip6{08nv#e$VII@g zd@}ojs?*M9pD{p8v(YVS`fNy%1KS?SD9kC+G3hHz?1=Uw;y6!#PRjGe$#tOkJKB*LOfJ3zE>P zIn_gX2Q+w@PY4PX%c+IO4sG?hO1fKr>%|Z5TcLO)d!PiVp`p#nXG*vH1yPK$B!X4O!{k( z6M1QYwi$(mv>UxTqE9 zj#{}VQB2%ZissSIemzqVMW}0Sgbi|PNtL{|C~I!EMp6nK zHxkU7Lt8f5pv{Sx?k^df!nX72ozTY15_d3j`;&e zaHigh$>hB$Xi|axgFd*4LOJVJzXD1*V5qLaBq$(^4p#QLC$|} z7W8}@sYtkYt=s&yc~{9UFkHMc>>?;E0ECKBxoC3ery=8Q5d_T}=8qXasXxZ6TBmGN z%6DuzetgRgxpIqA>(g(0XoHBgUqwb8|HeLf$;1Tz(aEPcUV2gX33u0%s6BJ9lGrKx zKhz@Lj-OfdP5Cj88|OL1Q7*+ypox-Qs^}Q$ycSOk((&?mY^$;?UrIw-J_?W^3p<1O zET1Rumrg_4Ze_}@3fD59Pp}YToE7mSOo%w@~s&Vtatfb37{)8NLXT{v96Q#<>6 zLjbtp25`!PjvDPw`Hbg?#|KGF?DEgT=WKb!GrI2c0Z6$?c;=g9%1)sg zi!riv<;udPdfjo$`PlK8*Q8gy{4#z> zIo2;jU`GGsi!Oe6Tqd_fanwz&`hTKHaP3TkvccK6gqM)MCW~3VBEZ+f63>DG*F>d6 z?{1mgTQp*TztF7h=cb+FkIsyTXqoaFfE37S>_MGS9;-bS6HjTX z2gR+zwLIsK&k&zMWhD6EOGHM+jK?e&zX<@OvH=dc9=9=T?B{1=NoeI%adDK@yuN4w z$_8d;<$YD^MJ;jV5w9l>RII1x9Ki)|J4%~45+dUL_fL-Q>$r(bzhR3Lc-s`*9G&~{ zG$Dle0HDF&7r_2-cfo=`DkB1=&fc{3vc0~T3}vMC2cx-myFb#6MGg#E z2zw&|>D84z|1Z_KEcWb`J^wkY>Q$ZXcyggU(4KXmS3m5T>@&}VZ5|}I-suvPj4L&l z^p-p;@Tk&<;FJzh9`=xcq`@kA44n{)Wi7CB(Ju3<~S)ZR% zCa4ZARgla_DNH`yYlECTYMA2PqIgcKUc6?3zndk1JDJB_un@Fxc=^6Q#i)EQD|yl_ zUI}L=3ktdIrdY(o;=LVvb`!p4mY{uEuR~T7sugynJeSQS2-1O|uW2pTrHj9gYj|X5 zvN8azsCZ;ktRi`7%0^{?+K?1FMOB+0wr6H1o%e?~Dd;G8EH3MvsF{tcln25Dg|I)( zV-@o)h2OgcgTr2~dfs9_ji6G}#ctK^g&% zumkOMJl25+tG?az290P{(tuJCGQcp?A&hJwNwq$iH#U7+a}pR$YZFI{$+);;ax_s( zyTrgg$`l2@01N08Nhp4-CF^q#ZQm%X^>;nS$Ak`}z+=#Ch`Vln$Loy?iD$3`g6`K9aZ>iwTvPzU}$|(;sXzw<4>|I z3p(}*F=1|4tkMsWgj3+ygGfC|=n*v2%6xF0r;!Q4XEmYP2nOvQW|`5C>%}F!5D)`K zgZ*%sDz~XV{N&l4#Li8;_I8t2qfc_$g~u$L+GqgF2Yo~TPqhv|s}ggoRl!(0sc z=OA#@0l8~nivP@WFh2e{&u6+}7GLfADFRK(Sqym}@h^YAOzLw@wGED;u{(-IiID*l zDC|y)VzV6Z6Wz3JIcg?!3&wJj9D*XwZYolA`r0tuhLxE*$-AW7LzYGLUAL$&O3c|I zYWfY{SDG_~gmmP1uHzFU>xAeB8gmCc;kkv05}Zyg9pZ)YuoEb6-OCzyW6nY_g&SRW zcR6RlDetlJSR80yRcb4(f=J1c#&#e|r+Mq5l+gxl^XQOPJ2cA1dSgQRRWUCFD^>rW zR;u3ro9U-))hOTxXlbgMogEJ`@ZAbv=;v!9aqs18`+#x z;V1_{KYn2|DA66a(g1WM%_62sCm9h*riF?UNdXZc0|W-{B{=fpr&DRjLOS*7YPb=( zp$P+Gr-6JTOb&XiB9?wiZ{uwCevac1s1?GRqt&ywG}b_)8WJ$%MZsH%tY{(2E{v7Q z{%(Cyb03I)8sUIYBbsnyh;5nz4jTGy0(CyFCiOg>M@p%hPyeabdvTGv!9Nd-6jWa# z{bavG5cGQZF++yz4ko-oy_fi$N!u8fYif$w4TMk!TJoSkMDwdW}&KXRMi+LeLX$)4$uakmhtrv4A?dZu}dZN5% zd(UDe4$}w^%ng9&i`5>8X|sDgdkZh`jzYYw(9%)^gs;XIVTVE)v~A`R5eJ0Z?%&(J zIo~bayy?V4@5ir(f>>z8EBpdmxUr2lW z^Wn8>+xmxG%Yn$v9QXdb4NCw4Pzh?p-+w3lP5wah|I`0oBkZ4f11;6{W(qXltg0zU zDGiAsCi_i*&eCxcq5R^(FO<;w?{INW&U618)DKF12^ZR0FU0S*No}nXa87XG1qwzK zsjUfLFwyjJh=H+xPb*E=`7vUYQW}#JV@^St@eFNZ5}u5Nl_{1KXi0VqnlN$51S+J7 zXCZP9xxuh|$bn8Fb}W5mRH+<)DLd!3dGMek5@q%g5!p)_#%4ncPVoi?c&AVcb^9kE zeXkl%jZ-zNYsPDO1=@j;gfj(^lgNCMHwj}g)Bo2D!A1&(T#(s>U?B!DAkQYjY|Lc~ zb}KH1(BPjM7$_@sI!nvMwRVzmz?-$KGz9LYg_oac9-5MTUyxiKj8!S zmD~&AZa(Yq!}Ifltidl*-BVX*8+!_h{qZ8x;j@mG-5YlEzaP3O-o8fiwmS7QUzUI4 z&vQ}H-EmpZG44J2g5m|JH}yweexctc-%J#IYFjfvhr5j2N_LL}l%IUMzp6@y;kw{4 zg-$J{)#8}8dv5E=nF=J(w>;TU(uT<{(8!KTtppK~6@h zwp78oEjsrl($`2UlpEVWq_)->DXq#G%=k-tcO{3=4S~QZ3NCVxYIe&z=%rcA(*6CQ zYK1(ZGCCz{xm;!}8b#uN%;8AL=8}ME73l-Ke)>r;zAjU9uUvCcz9Mm3@RRNJFJMn8 zSbsYHDfv|Ja6>P9@DqdHju&?t3vwZhh|sARVTAT%k$?TAG@wmj^qfN$Di?z(E!6;-yNr~L?lRkf+@S)*$tjZOlay$1{McYd|zq#U1wnUkUVgKwN125`T zcZ#Mu`Z`OYn*B?5hh_e)7mlAizPII5y}Zhd4b~ zs?jlIw%gN1JCUqe-V|;C6}~;U_dO+IjKIvd;swk8*?pwZpPg&@>_BBs&N5{r#@NI| z!KemO(~Px=Jhbl4sa#=b1C0|v<+!rsGlkvZrTR2=Lz{QUPwBFM`A#PDk1LH4MfQiS zv6R@}!+0-F=X{`pG?`FRA48amHgmUf z$u2|gN|&NzSS5x)Mz~fPWw_wW_PEl#o*>qnl>w#9SmjD!rf03VJ=PK?_Ok6s+vU9x zm(M5myUNc-`!ECIrm zpbypS3DC}w@X(^soNdlMWG@K?aa&p2M{Ozlo^D^RAeSq4e5Bxq&z1u$bocjVo(nc= z0;f%%F|!s6ssd3x54HiFxV2PvofoQmIP~j3&7aqDDIS5QlxRt$6XBZ7ayqCN%{fa{ zk$ZC^Aac#dKaB=%$il}#hdPQWhsd#n3o{tg7-4{{5FMm2&{{|JKtK*=B&*KAGaJ7O z=d5NSD~zGBUh=P!TT)+F*R5Rh4s!x*+-N>%A6j(v;o@NZFVewTVSaZXJw6pz_C@EA zNI=^z6cx25zVOyZ^vQQ0iw8n{s}epk`ma@0r1;{TNtc+cOJL{HfdK*&0|QurXZjS~ zFG%k?>iC%xZLvtpJXKYmWfD8n(j4oZGSRWk&GOV)TyhL$rLJ8I*vB8zC&cR?j*ov> zAD^HUpTBS_%QAZv4 zkjRQL%L)1WpCVdYosNuRv5DYeYu5a{y=e}1G?#}Y1=+ii^#8&=J0{SV5d`^=Cin2{ zi@D5UNa24LfE-f@_RWR=|j^>nATet6S-hvtr1vst+xAOt7Kh_ z1cq11?n=QhsQ<0yfNjuZUz~iJ_h77w=R><;=w!1;XWHmKh;$zF?jPR?Jnyzu zk+mijXA4WK&X`ll#Z#imwMEIh2S!C3nX~!kkG?_@&V>i!!_eOns?M5Y9{3J6wzWyM zwEzeaB7q2O6KxpUX@rPIh=#6tET__iS=DrpfCLA48v!UmI|We600tZ zS62a%7R8&l)6(m&S6BG}h~g2__GJ2I*RBKL=d)iyoKq&v$=`81;*;l+J5$$nai7B* z5SV0FCkH04?t5g1>={|ZKwx!?{=v~7tg;_xaQcGNnD+96-6!;%1sxs0U7+~bTm{C? ztL*4_$h&P}eEisP0B6F@ZFyByk3WvlW?B|*o{Ks=&umtP?*zkRTk{Y2@RGj#Dcka^ zEH8~HW%AKON*7avuUNZO;wD9at`%lkK*6GbFZbcx_Ie()9BQOq~rFl;p#3Sng!7=(-6FlTc?1q;G=n9j-yC!XbwE4=HYv ztIFXloQ1E++EES8X*B=XK)~1J3ngByg{fO&)V`4@23H?l4s8dmuHvwO*+PePW)Y6G=CtInj~F;A|Qf5z;Ip7KEv`$6MA z(FUzS)0kaanz3&m z<%ugN0^pEsC5g+Q+V*4he}4GW1NR$>eV=@S_XFM6!);K}@o#>Hzl}PMoQ-4}z6e z31da2eh%AtwWz|E2t6VtAVQc9!UTP;uv^4t!R@E9QwqUha+spGQkZcpre|hr!~O#vyzMVwE1cCbJ1d~ z)fKJ%8hw>zU0Z^xAqQxVAU8cJYkdgVYet45O76)mYf1%k_Uu}IXd;(Odt@JeW08c=$zsX;AYFO{%1OnEAICAZ@ z4+6jiG{sOfwkyyP!E5KW?v?85Rm3cTxs6k8-6~y<2T*n-g69Oosdba)2)}3Y&Cq*- z7x1!@o15=QnduOC-FA%J7qYj)g5_;p7+@aZh*@y5Iw~@jAZ7*SECD2uA*UGJbA(j- zxFXbN^4KEc1S7EzD?)uImGmqmPSBkTC&l%qgfbhjq`15Y-!xg@th>ubJ7IKLUDbI~ zJ_kB$Ac+I?GfN;1uF-f)!P2vHXG1>8&nc?#n;|Lt?mK4IRVG#!JB3x%)mI>#_|ZpR z@jv<->92$Y_3%IP>J@eo@gqae)HWo7h~N4}LI_${2=dY0;G*4`3&SztoR}aTwJ>(- z(9RTJ%z$xx&4aov8HzZC&SVL>u2w-sWNz-WEY#vyMBt{Z&2bU2VXQv^HOZWLlx4up6(}W zGZ3N@gvI9LX)^-R2s+RzQ?m0c1{2(ahjVEy&=P4ojyPZ=fSH4Cb@aW_|6>}Vgg5#>;%(O@Q0N@L6#b4rS))Lg15L>xb+G$qIl zX}{^ODZmTEwrp|kRTby}!WiAxflB3YR*mF(lUo|v46+74dUwPJMz zfy0L-75s0mkkHQuW!u*{oo{_C$x#k+{y301ys6}sqEo*1Q^e)^z@`ILB_$8#bts<; zqeVb`YJ}|}MKskv;EY}RGpWS?EDDu+J9gA+4ki*ZZ^b2t>>4CM8+h;oO9sovvWOkq zubCx8JU9RP4k_?99ET}-N4O`n!L~+!wi-N=_0OpQ*RN4xQPz_9(p{ArJ&ga%^HF^K zQO{>Oqh2$+25<>5TjpX{S($6~sl9t8n{8E6>{x#OSZva&)(^b$J!-mJE55xkO7*0> ztkjmTkB#w{9)Q&KA0{fN^`8uqXJSbQ*=eb&61#i7agwGuE@Y!wIJ7V}DEq4gPl6|C znEaypg!D+}Bww^ERTo{92%d-9+NzGw>rl|BP)$6a*QLt<68H6|s;-vy?&V9Kf9`p( z)S1z)NBa98YW?bNlhqfZTJD4APfOX$c5!JX#U-Gu^S6Jm*A3+4h6Rf*!GsnlP1kRw zSBa4P9IK4@QzzLOSe}(6{?s%%JPx zLTeSHD#nh|L?+(>cda4<;oB=JDt}R2Tq=(>`m`p+gAuDN%{K0t{kMY!h>&mO%QU~f{>0Ny zOOumJidn5Q@PoE9--n5#2rG%+EA{mi{$k#ayPLsv6WU6LuB$GGeYGVippQZ_!R{9& ziy&~+flbUt#`v=M@#)t?Ys~aLWRfk+s_wkUfgN}R-@It4)3fCI9ZpHY>)z<%#6xMeNu=-3C+y+Vz}vJ?bGuuf*}GB~x6oC(ltCG6IzNoA@B!UQMPv?C^RwUV{U(|Ly>kyZoD?#-TuInP#AybaUtMj;b`vxxyy_o-ivHro zM&j#7`sv4h!=YwQWCF-6!Lu5G<=DU9S1G6e&oc%eQpUPM@EuMwkw2oTF;^w{1RRfM zXWY}hG@?bml{Jl(TNI;*V4m%lCaSJ(ud`>4p_K&p4>-a{ruU1tX!@-$CT~4KtX=U8 zNj_7vo#1GA(yT!DIEu=_iLKFqGK@EoUrcu7dT=rRIeNJYG9zbt7?-b>x&LW7AV=4X z4qw}urZbWAt0O~fEqxM?6}902j}thDiZpP&*-&;A`x2PjP?poI`f9kxEM*O;SKa#7 z8qDjVrf3FPNQEY@J7l%4L!4-v{bJv|Bef!>oD5n~|F=wXe%v$jhs=Fy`8Jj6+-$S) z5K$5~h+V~X7Ka+$Y@)`j7;eQ7R?RN(DXH4m4*IADLR6>1Cv2%~h{Rj%j*xUSQ;8m= z#9lPjPMRpi!P`#AgkTStH#xY@%9@ zs3{IC`hU1+CRrK;(fD!(0#(P8)(t$%V-oSXoXwh4#yuNj?lZRet1&=H1nuZ;NH0$%K);(%_60bqq!$R8fC^?~(n3tj z;TRfvD=0-MqlsC7p(qDcY9c}ybxU7&;zEuV<9Jo{Rb(haq?*(P5H9cRICwHH-!Y9- z2R`Y%7Nvjv?jx$m*!z<-r#B`v;(Wg3!>8}-i_!)8d6$=@+kw$GGQb@+k-Xs{dF{z= z0ueaOj6*=6n(5QhnXDofp?6R{$sov&lX_sB=+OcDPUa>pz>_amN88mMTA@z+&ifVn z_BHU6REziaQjSoEw|*{hBKMX_KaBvMs^@c=b~=KZN5?aq0Bu0pX*3`p(bOzJ;kW7< zw(DR)OV<0BgERpg(_9v)f&JxObYTABkninvfz9^Xl|%AE+q_v0lI@T+m|zGb5KGEg zNFWq^3TdWp!(?Yi2k;Dv2ZLm-*}gJSOk8Q-=RL;St!Xv<&?)xR)(9zhIvpE<6q{wHxJL7hy3{yMpJ$^fa@fdV{Xzd?Eo5>ohVs{rQs22WR5W(wtYfoERU3cE zT~bW?LffLPPqv;ZZTDZyElNDodYG1toeDHky(+L{l{MKag=~U-Q_STUfry}+b^F|3 zLM2>3ER#=vpSC(G%_oS6*smj`U#CeU(!Pn11tr8610h7h%dJ0)RLUZps7buo8i698 zx=*EkZ6aEIj}_M6+fMkO+9frSYnf<2g`>^^P+49;+StYe_O#9e0I;wl`;K8Zrp#iZV#d;*geN)W$&k1v0mZXI_fd(%(?TFCw5tRZZC>cjI?cLw8Xj^<~lj5IP zLsQBE5c~V&B*p$6ky9FPiv|FQaxx1lUpyC>BLgHD5hTO1*UC=-v@UrkIU3EquRdKF zZZdK3)35H0(@_KgubXe8Bq9aYi9k$FZ9>80KWt1&-q@X-RGs_ojN_`4b9%Q<>e8wuiOVTpJc=uk z7XhcM>`4fo+_fT$nI0IEd2;89ibF`@=J~z+(BS6a4G!Co4IUpFx@J*|{BVbdv}Enbpb<+-)_(cx=)(vqyI zIdl$qyBZgZejv4Cj;=sof3S>Lp`{lkeSh8v|+Nr2tn&Pwri;K2?{@JG>JNjUG`6~NgA7tS+8b~}n z=JQrW_5`rp27uNOwY?>&ksBvOmcrDnfzYN+CPYpMp;AvIot8j^+s%Sk1LAb-m{$&) z(>RL5uN3HCqFK7~Ea@fTG#WsVk7yzW1zTD) z8sn<%CeAD#LJyK2lW=`nT0OSWXdU7NnNK;Mq`-Y^8THq~Oaga%S#5Zy3^($3_B-(6 zKt=8Ue0bCk3V~4|e@srsJfD{q##Tzc>_;4v8^hl05WVk?1GFsIvRZ(8x_A+p+)n6Z z!A61aZ2EcRS)wNxxtjI2l&prk$UTd^K!adIwuU_x;8abc0WZ%pVtlsBzg!!EBWSUA zSAj3?hhbx4H|fr2Mz9fa-GO6kQ2bRH;^3z0D{(9%aQuu29G}(aTdS487;z9k#_azr z#GF9Jkhe+U)A9d+`2RIeh2#jMto;JUU4Li-h}DlD@)v3+Fl<>4ZY-3X^lZlTsRRxR z&VqQY&mcv&0cSI1eKpmX(BRIilcWeaB63(31Y2WaN{MqVb)lNke4O^`sRUfvnNkK1 zC`-EpBo5`&CIP?P$7A@2N_E7eK^i+OmX!QA_j%q*saT^V&Kl5{pLCF8^lOUR+KSdB z6eM4QbZQW$+y!V0`1;r+M2rc|hPsRts`RU@C;ru_t^k}so&EJrp4`-vX#Vck9!h|m zNQ+=#u@Wft5GHj0`lmmIKWBe`KCwRrev7>KvD0}KUnvf!De z7Ci*&SM$Td@c8VIdkEY2IBKm39qPF6r}`bayimp%@2(w>aa|1C{0dgweMW zH}m?K3A18qT+5%pXZe>sSvoMJ|5)@ZgISiKNSsUXGtKw|2RcO@Q-V%WcIp(*h-~H! z{uMrrv6Un-a%5itYVeDhtJAxiqu$rwsJP*|%ws5}Mxy|#H0|7}19)p{m|Nl6Th;75 z>)^*+Jv9ZvkNHq=(6$IT?a)t}WB|HNOt&%A;M+3*e-H*KrVSo0nH+b07>%BJZI$h6 zlTz@l%ESl;e(In!`s7OpW7sHHvxpIf*#j@x_dF~Nj}0@s`iB}v+b;#!Lxl{SBPOoF{ zD|r^A>TO-N#!767Y$ZSw>s?cVK^Yl&J>Ibosm6z@J}aGos_JQ{#>Ksc0?bln9+BXP;?Un6jjX_;d$eytdCP1ea)=XD^$ z;#_@auem>sQAh>DhyJaD2`AJT)_DI+Uc!k!ro^o2sk{bQiB%Lsgx7nnxFr(zl^%B} zXjfCu9pZEEtN$kM6MbkcLL0XdxR)Gq3{rc3(pKuG07=nhL=C)W1Z!m=y8g zsDY-)$j=V?!r-6uUit-p$$58=J5*DqQ(MvwYQ42GlsaEmB-}&hx76BBuNR;l0T!+Z zP%%h-8BmkT7rfLomEf|95!y)S>j%d>NT1YT#2(fjkf{ zdc|WePntphm}~o0IpRJ@8|iOfT&0vBSdv=bYY&lySI!Ko`z1=6*}NGnt{59T(eU?| zWl>IIEWIaA5Ip})s855MiY2A-yU?%8A6U&(fy}rhDIarLjY!Id5KSY2N?JeV<9UHx z41P1xiDin^9&Pp>s*c-YRouyg-pl;9-D0*B)B5P6NWsGO8%A$|;34Ovove+vag}f^ zn;~ETWW@L1Baj-qX*VDrtnya5!BdUs}DExIp4;0aNV*H@JYP=lTXwNSpn^5 zP4paX*T2*cISKFrMtAz<1cv;`yKVCw*V3s*+ac6;3@<qP?d005(M3n*W)9WR8dehaWKG3k*pBYno~5tx<|V9 z?!AY8=beXkMbzo=JKgpUqor@(?fhg%6ldu<+H^GlDo?{X&vr%LRv7|Xq!=>1)@<>O2ni>F&UA9Tur)R60yjb@P!G*E7U%01w+UtABlq8lc>;! zFi}IOxoX1bi~40Kjy4otd-925o2z(}?BuhD9ahYezs97YGYu7`Ax`I}Qxpl{g-XzQZy0 z*;f*YNPs3?wtQ!zxe!RFC!{M80u8m;-Ua|5(83*a3XOdVBHIMmvD-%@6N6}^^zOCY zurGY<*LqjglH8Kp+6G~FZLPubn{G*YCNkmv^151HNx#jt<$$FBt~7b?BzC?3*|%M% zbEs-Ty%1tW1dyg{k&wh|zGA$h7zio7N(4qIiHJ-B(UJt!MoM{V3rsJAojELPdbkMX zlMr~6+6r3gkk#Vcz@Oiju9!b zPM`#^q`HHO_XVyLW2>FmL%Tz~nDLM}E&rlV+_2x@4$b`( z;*iTuwV9WgRfpSE?t<%TJ$D50VX0zh5wxDYLI1}sXMQ+(LCy@5Jm&}|2mtf@!H}E- zTEB;*+ts}~<@MtPG>Zzw`KM$|XnxahOX!)|8h!ZbF#B98A?(wSTQU07Wrx5YyH^w< z69^7p1xorfpW|<)Qw*%uN?3e5*6N$^uQ{`BGf5g_n_gqERILr0&|(jTQ_7Mve843H zBs`!!63|V;pqHb_ZtHR)`6h~*ruG(@YBu2-oNL0YN&>2RI3dgN6D~BRjcIo2}fH((l+_9NhIP2bFKLU9m zZ}!SP9kZ*Rte1=Dze??WedO$Li!jK8leS+onfa(68IWuNX6Y)rvQ<4a)fq7kWJeb&AGW~TOrFLf>;`+TFWNrkNr$8{k0(8j~DNnz>f1G^4H>NS;1O5>OHVwdNWVhAN5pcIFGtFC3jQz2XNignOMmNFDq)AC^*^63vDnK8%<3Im?T%GrP{d1d-_gbRp@n?Dp zXRy$FP%)}#dAKvFX%BGW`%44ZQ|G}ehYyCI+-jgF`$a3=;Uz4#abi$;Hn;uHgpSe zhe^i6AyI?RisnR4ksem?Risc1U|P$Y{*jS?pACaHT;f4A=cps+ zs#ACFn%TMYy+g*s4sB_$XXd??;SIgJ*%(3jVYE0zwrt?;g&_|V(bP3-1~zP8mwune zLKY=XIdWnV`J_i`9gS|OlWD|A$DdOD6Bsv-kl$t=vNmKRO?`Wbm|*}Q4T`5f$Dbyj z-?=O53u(>$9jY@V*#UVxPD*l(k_Amwe7UOG&?4 zuVcVIwQK+zCs2}hgU|*ehG>SG&#WvFveg4GliOC=-5%f@rMZdiI+44a!bgG(w zm0TWoC8@Zf8dkjO;?I$o4ulxL8$2a;j|bxD10tWjy$ZA}ZQ7Zls=EGpO2y~b73nEE zJ1%N~r@QImf)~F^t8zeHNSbiuxB=;d9UT@a%_KauPZ=~u*U|!@{d#9XGcWWwxS(H} z94=p{eS?!(k6%kctvuNu0vyl}VPxzb3&fTCY0AoUUuQDfNK<}CdrI>>q$u!Y5qM$0 zRAzxrP->*%er=UN!6-e222Tgd1-kP{j+8+rj!tG@sipWo4-FJo8EU{t?$L)Kp#Mg} z4RwS=z1RVujttQWSC{pFtID!}-Fj#gE&U-Nk?AA46Tr!Qide6BKHI95vPWtc2HXwT zKEAqk)v6)q?RQq4%WLFw&9-GHE^Ls^Avxkjil%bT7DidLLa-U3H@q{38l0v6lH$g0 zJM99%4#@=I^D)?o3AzE6ND1b0q)hO%3o)52QYvq(1=Q?IBAby=ADN6+zjj1Tw2vX3&w#mm*fteFU&84_NqR`R(@ zo^l8l3KEcl!A3Q3C`zd=DcMyn$razvuUsl=F=4OY6rA^(RO$HL4(2xjqXJp$HhXvHC_KF-I8NoorEkR)vcNzSd@PsS9RRM1Z%RmhH7A z5lHIWe|bavLC4pX%F4`dYeJJbHpFvFW%=_~_f}ogRLQj_h!))K`2!Gqc=^x#%TYWd zFY0XYv*j-Z$I^$ldIcnK980snk#N^fv?mmZHB&EymsvO1&yyl)X98}B9m^h#1Q1xV z^`y1>t0%kh3~ebvSS1E8If&kFIUA$Mn!WZFaZST%E# zo|8(p({pEojeEW$a3hD1mhHOw*&$mj%gs#vKz)H1<*yeW-F$sU2bk&=SXq&Y+!W-^ zMX)IQgKreEiSWPef&`TSCb8e|n-3yRIxY?gRLAftmQCa)YSVBlb_28GX)XUoBFM&L zPi2y!T456oDi3_!eYH5@^?+a068__{7^ns|)l?^sdHLgT08c}ki2eeS8lm9TXDv2J zlQcX)N3fF$w7mAoP@>m+O$dxM)a)nR)8t!*8IqM>fBaYydF92MQ8X`Qa0qm{W&ZG+ zE73~k%$NmS4n}Y&HkaLjI^KNr2D5u1KEWXOK?zWEh_j({Tz`H2+n-1j)Ik-1wzcem zZS@WP2e|BLL?Vhg?5NnRQo3yd7Hn=icN{u6(!P-}76goC|MIz|W&vZ>ONXrB?t8%M zNuenzuZ)bqk0c9oK{3_TWVT9H6>MusJb6;Z)?Q!lW`n8wBXbz@|N2fATHdWFFGEhZ z6ra^MGfo|eM=}675Q!jfkep}_CAsn^y4wIu-D}JO2?g8WAigD#bnROw#C({Qb;D|C zEngBIbsKAam|}EgNm;V+`3t-xZ*M;E#dDt$WnMkdRSU02Hvx_I{#FFH4X#LKCohk+ zH)X$_ijBl`>rH0K+W zMkfCEUV72P8jokfe`Uz%?;DY71VqK*X1^W-<0=>Hn3$*RDYDo>cqfmpKm|aadG(4W{}JkpO?bYQ`2_r_`-~5aD1T7nMDrl`z-%J zimFp5MRy(9VomcIzbijX+|S51j_%yN{znDk+0m07ourQ6ct#nsa1CF?WgWrd{u9d` zByneLB2XwoF;a+)b;Tx730jv{>q<|g64RWnaaKET_Ve^gAHmp|z0wkaVPw|B!@gg1 zh`+kNxSS7(PR(saAp%oDN>Ne6A|kwqO|Ke|UAw<`7*Q)Mu3P}jN!<3-r;XFj%}m<< z2&g?~djIoancbzN`X5;SYtBE#Yx`ZJc6-@_|3SC@lZ~i(RaxpwmWX@!CK5~^ITgfh zBdL{ag-_juC%ZPynHRF!Y>(&@%&wP%#lHx_17CjOm+#}VIe>edq%KlCmLksch!tFN zj;vzALQ2TI^C_2>F7EbOW^3`?!sT}6OxrsE$e>-DIe z8C{6(f4N7BX_Bt(f3rE+Oau;+{JdE4t)`^Ld?NA9G=Lk@q;zzO$0SXVC(hV!?xa^R zFLQbVGi~FOfCJuw#>oyNfd~rc?J;qWI85EC*u43|_14z0F(6e{OwV%+E}3r@j3@aX zcRVCIwbpK~b&R#S${?yfd3nd0CK-r?FrbcfEJT=p20f#L${+{DyGcK+qr!0jcr`W5A3BB_*9YcfG#kMGO zk}A$+C7GjM9vbyQkjkB!{M&{`3k`qqCXp)xF#gMzpgNSGTzq%?Go0y(pu#TAuRWj-$${$I*NG`pg1_BJ-$%!8d|Lw|-VP z`t-k?>Ecj#sdJGI!3PX?(OvJP;ma-ZFc#+EG%lYy_sbo>j*_(G3Pb#Jo=vgZ zvAi!b5rH@@x=*-9R-`$%in?>uw5*PU8QAm~%JAF5CC5n+5Yd-uKe6hnP~W#Fh( zj$hsVaZ%7SKrk}@eUJRHAF=~_TSSf0q>`iu6D(MeoU}2*(w&stomac?AG7&a4!urs zET{d~$rX*Z#!XGXh7>*IgP|yfemKS2({oAjF_eg(Z#_kSj|Ji>^vmIHNwa?L6iTWn zPPd~?=J-lYgXIY;3Us;4)wCc z25g_Y!v+uo9d#6vaD=P@L#nf?*8(E2!Kl&S&uD0-xziCuNwJ5YSh9cw1b`WtF&4m+ zlLAylMFAfM1|A-w${6WduWdXAQ`e+Ez}jb7#6O&UJ|iQaGJXl&^{F;TzX?O^+XLHi zoVer1;nW6caXIWLi9DqCl7FP*p+zQKS!a-LI=r22{@26<{m>&eD>>79j6pF3H*{76w$57whB>RIS4 zff0yj8Nv$3DR=bl6%UOlD)_||mTUT@KsuYAnfII6=AYuY*QO~? zElg4rrG{gb^4{lr@qaJcPfk|Q%Ufsvx)?lgWMa}x?V|p7ebGutGn-1*|9(I_w?Ya6 zaw`Q(Y`N$Vt`!fFX;B9HKl2>r(BNPOnOY#!{ffUb@wQgzwT&>;P3tE4ST7xdg` zI@I3Gm79PLwa(4mY4@nP6WZMFS+zvS4=BxH;B_+yEL8nZ%3f$wD^4E;c|Tlmb9?z) zAl5ymP}?3ZrFMpNq*FN^f{mUhy}EK&9JoXbsjrT%T|luw8j%*gEL9}I$7yD>T0%Mo z&C}2}#D_6LqmU7W$}#K=)rgEDjWA5kLf|CCq%l-0oN$(n2s{(7*(?|Zu%aZNh;fBt zJR)V6RIsMGeKcI~(ii>O0X9AGYINA83B(ZucFS1HAPNkA}boBpIYqzCsQ^VqkZrfJXLc^j? ze3}ouI#sHwlEA)c?A;#=p$&HB2Rr|rs=OWNYCA~e<%w|))}xvPozAD6P$J-;+{rNW z{qJPPrQZKvU*hy$E%R><>m=)TnoRJ-tq|x_UR#)$V9I>WH<1C)Y`#+{EiCL%KJ!Ef z-^ds2_TwzvdAzmQvyZ$IegDZUd8DACW7DsR7%-er7N6*!x6jSDEA^WWh#;RX?_qL0 z=)#W%vBdE9TfAY!#5@0!m%d4_e_i3V3`}Cfk8^rsxYtjyg}QzzRLnr!Q!aT)?7_5) zLsRJRO#JGv-MCHmAy{WwZm1bGBRPtn5s~P^kcP)1B)v(v*oam%2GuU%Gpkic#Ap%~ z^2N(%$t6-JNp{|{jyq-H2evkllGLYAfCcyHf!G4MTSqUGUqAnz0-&Vhj|=tWMsrENt(NPGMeSX zC+XjmG6#Aaq4{AIghmL8Q-=n;%TzGdJ2u@imCJ-W5q~zvttZk6Im>x1yq(LI?HrUM z-f~o=6-^KgTOmT0UmIp<{1s?<;xEQS(ZXRE(y$e~YU>-1(%iP7f-c^)Nx5{-F>!~ny{R8f<(Z7nget7!11pj&w3tfC(7m!`V1(d-3xT0U9t49e9Zq~!$F%%x3C>M8k zb#;s7iScrJ<`IjVL8ycfh$Ka2^AHZIoUHO;hN@2@5d_J?=$)@6lGi(Fx%k&##qz*$ zvb*9zerwty3Bp05ii?RaBr=guFOlelBH44Ty_QXu-pNy6!nc22@^0a0|o9s=i+R z@0ONA{)&-g;m+2*bn7;fl38B0=hiLx4H|mHF&a^KKn2G|aYk{v>^|YtDG7|p7Zuj# zGF?{M@sm}7naukZ`2-+8W#c33@tfo}im1k?1RgGb5%C`tqb~fGQXcH+{K_9T;HRHf zr8xlzuz~aUUA8P8(Oxu?d};wAah^IQP5E%Z5#PeDgyd^wZQHo%X_Fw+0>%8J z#?tk_C$Z|SBmXOqX-46iqmSgoudJ%wxAf_kE8)3&YYVK_Us5`6M5gpz{I-OyOxs!% ziS_}p;L8E9XbJA`Pf9$!$*K#~(patwjA>bQR&Uo~UbCjVdmVT3mj&96i1R^^Z22eE z5sNV0m`})T#Rxxc@WACP3=cf_z+rqKPwU*fHwvdoDkIsjDMLJ*ee$DzR;xs}2Xr^Ytxc)Tb!AoeCU*oU2GUc70De2Uy4<0Ek%i3!oX&$h9X&p%X zQD|tjga~H(FPzgGk|2!V-v#bv?zo*uP8PMyx>)Pxntk!K2oXAss3MwD?2W8mw=cvT=}*pzxIvqGH8%+@wLu3N@85E z)xO9Sg^z4=b^aXxco7fhXYB&us2pw?6{KdfoA!SkkvP8G5C-`8YqDcOcQypADOP-7 z|K}Rf`n_E#O?FCBaGo~SQn2{HJQ2FBH{o`Xx{1yxn?(gSDTjCn+){6YR|dpmH=4kx zhruf!qBSN~!QMK(#wusAPvx^`Li(u?7JvxE4&EUd+aiCj>Qj^j9zF%6(_s8~tiYoe z{JDK~0}}bMyzl3^0ZM9``Zvz#ikloVCzn}qvwHcHXX1^qA;+>G`0H+M>et2IzVZn6Sc7}&(bgnxrHq&)ti4< zxAu9?q6Z#b6q?WU1Mf z!igpevmZQhsB7oeiZ1Z$GUuNEL7DLC0CdhlBV?9tDbglYGyY-*PMnx-O3wK9NT7)) zK4rp{2Ty&3|^Weu9d$%EjXlJ4@uu}{XVx>jD9Q(~TsJ?y*TbeDtDh(@_6 z31dRvJ|u`o)FFVjHrcZ1=w&kL{Cf)Kz4MM3zdql3%(prWijIJdFRsk)5g)$vB)&19h`RQ;hc^qxpBDDaJcFnWzn$AHw9O6lG;KoM_ZE7uVwt%L2G7 z30!}AQ`EJ{Sr>C~V(V<};Ic|(nI#RVvc&LwS6|F)ESOezv`GzrJx3o^HxFjIFaP^% zCQnFbkw?o&FltI~@8Z%2tsfp)yPDlmOO)LE%*h8*k3N{Xbq}Ke%3ZM^ zSV!A7Fq3cpGMn91x@5WL+eB0B?a9{?!^QJLnX=@ftQ_W8ro7UUdFY#s%aaGXo?e8> zmKl0NBPTnV+dX#usaH2vW)BlxpOjPo(kPMMoWc=%?TI#o7sLQq;zNrIoy#+dxOO;@I;98*S7YP@r?WL|J2tS z(v+D$)Hk2`J`BX4zundK{R}VA5mia?SF5I7^r}fcka;gKb9O8>@$#Ej6U$0L8{k=d z)(0Eivx@6?sZor@T&zWPsf06kt1;rwwL_mpT%t2}P6a&t!zW)`?NAg%f~}yS%7e=i zdMkQ09ALit^{AGmMGa`r{d&jvZrs2-ARsn^U{^2>0S6VM^0CKWP?T$~Ul9wS6r6EwlS06tvS$kFD6vn;7(($t@ug4>m zdhQM@Uw4SOa)mv16-O|s~m;i;be=R>mNE@I6(1Hy&-avt~pv?rs zoeplPxEbkvbPSS8QOf!qCJ0>5g1U;h?>Z>r!8IPjiLBfoUW=Ie6HVpJV({99UZtl_!6C{-e{p@t! z8lF4u-Yl7&)}BhpR`qx z_UGK)Nwy`Mzx{>wF)NdISOe;=fJlvpDS#?d|5p=>MI|&Bl#wj zTuP<5k9xd;{6XgbxzNh~xX35B1ryxqGNr~RNz#jDW#I20TwOcYD3n{XA|KgyhgkI0 zM!?E}JGNVU%M#Hlpe}Qck7*B9;NIFV>IPEN)(2YMM1SL=?hfcMMc(d{V=tDocTXK* zsd=717gqM=4YR|2^C;FltN*rv9Fbh<1kJzbIt+N3+tO7wQ?i0+76 z#bcX538&YKlVTyaO`==n9ntOxF&3Bm1KHn`RIC*uC^8bad*36>%xs_aF30`j;Fm9P zWHDDt>r+Mp+z;_VMMX8&aB3=MyQ`$`7ij)7_+i|=44>}`>a5=iyMwxJc6m4F$E3#k zt0rsS8JgLY|KY1Fe(UcB!|z+;V~w$G)Sh~U)12vvtZ=C2%(F;|H1Z=L5n!Qd#o}2b zds(XCl|NlUYOy#;TDyV1T05jV_s*MY{IUBvIE8ITI4FwzFBRoTPM9ft(Gyloa2tw= z8FHIYShy8f?Zc68b*GQ!R{pSIkyk^EMfQJ1LfHF@zHc~Y&l|7votH1qVB*wn=nqPt zLE-)j#qwd2mBFn*>?bI@xgjF_V&r;7_P5&~57L{Vwqm403n4Qjm4^XnRHZ(BZVZ7N zV&a2$FOFzbmn}UXPBFTe=YZVyno%C;J^7Q3V{0CM=9fe}Xf?sZ{000R5!}0zr}&4> zdh%232fx)Ed&qEE{{{H{82uga*f9qlO$@{W3p%44c-~yX9R9$H;0*p&bWIv`%-aH%O#g;yjcWaEdqYr`Yb8vti3*7>ToNQ`-bICE z6n@c%bhj*;Z;v@~FBlW!XJ$WO)C>-4N*_F9*O{Y~Z=8v$E?!qEaZ&;S4=SXnk?YR6 z-;Zr*NmtjniZ&k~AO9=CtQsF1vy!Vu$dQ#RJO>U4JIrFXZSy?*@Tw5pto95JGQv@(h`^QbF%QhTc#Piov1;n4M@TfvM){Kt_Se2h6BK$MlKYm- zYO+Gr<)H1_(-&k(zUopLy(X`#D{l=gD^>f-k}jOqZV$?R`V$R0s9XmD{^AV3rRkrZ zeiFKK(JKw9K+9)Ow zLFhIt4V0#{DDq(^rWDa=Fo&F=6>U(~>LK4yYY4raMmq`#l2Nk+thvataZ;_X8`5>3 zUd!9{5r%mXV@+t8-(?z*4#lm`J#{Ov?Wb~AizkE+_;_K2SkQ3Z!0pszM>Tu=Prv52at3Fb0&P;t(cFL%17NtrI*LAwJ?CWbD9_}*Iai4;-eH37B6c! z7^1z!A7S%u=>!z`VAcQvwCVt>o@a&}$2y>c1!GXXB69Hxni$KND-)@;1;3G(ugd=o zbc^-MJI;dG%Soy~EVwdlM~75IBQTT4L!$RZ@X>X|dk(!EmNnjZj)g37!)>|_mWQJO zS1Ts|L*M9kxhKxa`PHj=x%|Wp89VF$)qejWR&wJ67&YtmhSRcDed@+ly@TTOu;>!D z$0Zz!PEIWBqVu!lZK3H2I>$polWj@$Cl7oSEUtr6F|R-WqXPllQTh8T2|2?_luUl{74I7|w{<$f>!WSPs2>7P(yg620t!TP zr68Vn4?Rl{fSy(CXjdAvwWlW?j;YFrbn$BXmnZ(aO6WvL|DK%Ib-UWJsonxQ)Q<%G zCibtOsKHNtOm*h-#4Ks*h?^?;o>HFt;PSh}@l=(m_FitaDtclP+*DI*s-ogw`seJm z&KTeKvwG`6sRN(Mg}EL; zw&(+R5JM}Ow;kFzvY_0CAdcEUCyiQ2I!Lbi67kPv^QO+2;OwuYrnE@MLCDZl(EF@1 zlT9RFZT<{*5qpjJ^bp~>0W~nn&l9+KLAE7SD-5M4W(*ZFE*1jBgghvG zJxt1y8&NhQ>>Trg_^{iV?NJvMKIHUk_g!4>|28xwbCKH^+Zblli>Q%x4pAOTY`^~* z$5VNcI7Ij)NDoT9d)=*|->HLqB@oD!hs;AzK-A+AHG=3l%yTvy0c0sbAZX5c0~x?I zzBf9e;fk3U-7xz{3LKuvof z2&xMhsqFAwHKv1J!ClmCLr%KI)Dk1lwh1x#em|XkoX9C$DOMkM%O_i%tHSS2KWtmO z=Ou#FrWp)rwFvTZ4+2KB$KnzM>6yPDfzwF{$VmweK@tR}Hs%9_W2Pl7+@%uOa2nv# z{2l}$lC_KT;O-}Rk_S%e!En23UTLFQuyyG)Y5luQQP1@+ze;%i0hin!_(%)~`F!Kj zo;360q|Z$LxH+w9=@ZZUpvcC)Oexv*!1D>ud^Ot>wz6e9gM50nD61W`nli48lwsgj z2}`jua1q^>Qm&Lds-@0f+nj$_$#>etO9Fr0b=*ntJ67-9HL`SB(~K12HXI>!-9j2q1xq!PW=esTkfflyhXTH)EzW}lS&5UbF7YU2>sSUNTe|xQ6SkXUV z3-|tn;om!9@2K#@1wt!2cLNYAAK73Ov8D1O?JV*HH!uv#!&8B-$6GH>8k{gDR?V)) z5;0$V1sFIl}$P!(+IyTbAo8a7DuPiVi+?r zwL%=uz##X?Mn8G z1paIHc>3tNFK_Zxt@x!&uj~4Gg^Eo$GD_w8{V(B-!JRH1(i5#4D=5*}d$mWzqjtua zcaHMkX;w^yJLl&X)lE$HZR+6jJDP%(x+y6T!vd2=nTgT699iI%p70dMU5OQ1?Fzyb z#~XH1=el{@n}c?7Dn}wgql-m%C`zs*;l41|e(+73;PC&WMD2vJ8z4IikxP%e0H6o} z55)tM7k=jcZz$5BBM{$|l2V%i9@1FQ@(rOIjC*a`$${art=zatbJ_-#OaHC+XWG~< z;`Kxfar?epz4aHUhvNiQSBUX`b^A_?{LZeweFu606YSdTnmV7$gm>n6)Pn@M>$EIkNH(7ugHc9@TC--k2SAg1i{mf&iSZ zDPrpSH$mo9FWcA9dOyIMe@=(3WYi#@ev zgm%TKCyF@8ehbS@T@$+|)<*ZfW0-fnQ=^D(uRHcw_rz1vq7?$w*kiu4n~sfD2^7}<+Pa|55fRo z4Y#5?-iJLi4jUj~OKu!Zn?t*U^Yul;w`uyo@{$-N?|5B?7o%9r)I4Q8^ z@rk=SsZ4_;AdD78IS5ixFZ0e)qd13C5ga@u6}EnX!1orfA~xQM-9VR_?_FUdMF_;f z!J1;p6iEwRCHW-Hms&_y(JlJ*-=M0~g%INMGwIx2kHat7ug$IEX6f|=Sx~!PisQk# zS=_L9MC_LG(YxwWyi(%UMk(WjTKgiI`-N8uEK9mBoTlrq6#+=e7Bxy>q<3W2`i0eQ zEJ23*mSx9geW=UA6tB*^%NB<@a@-zV_mF)Tu%)UzE7F@JaJT9;OUgojG`Rh1<-dp6 z74?O$M;?o~{;eLHBlbn@0t6mHDeMD~ab4R0A8*{oL--hPivU?L}l-K502)2P)<#8BRIFd z39v{AgosgagdpNACH*pRtXaRlnmD2pysxIC1B8vt50t??_&chV0Zt!T2%wqswVQq2 z2sR|Ba11_tK_RT48)mkzBLdE24iGzf&y#{Z?d?ddPq5woM97D#f3XAFjn)D|U{sV_`LmsXMg2^;@6okEe5!*73GcChP%MdiZmJ@hJN4}9XK#o2yF z07GEg(HY-{37*s1!EIGU70)_=CV*I2EWw+dLaw`;D{nTaQAR7voGg2Bu zU1}D%!k`-JzAHEVQxFN9D2gpOa-xnq0q&4Lqz?qe7+DDCMULgf`Fpu^^tWr81~@_p zf@615Ao9@2A{IH24cQ>jglJG1*;tHiLq9O~2DaQb!f_^PoCwkKB%YofNDT0*BZ$pQ zCBLYtsgHHgD=81`*H1*u+#J7d@%nWq9(q-xoUg9dHey%?U`Jl4e>dE$QU}1qs_n1V zUjVxF&T*<*-RAnr7VF#W_Z&?b(fb>)F&^B zL#`h^U{LL1-$)#wO|!~=n%WqC+Er8gU7Y6T12yLPSE@^%3)5=8s|Cj3b5%5pT|6%W zP-F}{;LyttUqag!+-yu1 zbi%1RDU00CBTCVSn-?76eP~xi!sm8PhY(Tn?yl_DTBMaL$J-m~rOWxrT>JLT{)61R z9?SRKz8kwerGw+&dCYvFQ547srK~_vCq-y?gFnmqXSW~}c8QWGYJTh;&w!~LO&{g! zlb7FGZuR>YBYJ4-f7(PO3izAOYFF??dh#zeJ!_6gN#RHC*+2c6d^TT^24+eyX79^t z^~>%GFiWlR<(y??=*I%0n}iWrpn?!KM3YwlZp1d!$>d})#)-+^;YxF^w8dPJb$8d3oVSe_p%jZCCRX4dliR_^N*Xc755}{PPd)sY0Dy z(!`chReMfbDY9%WNet{a1r7DQ%*ROwdeD5UVYI13qv_1dfr5bYpVAg5rNosS|4Ss; zVNPbJ1|?~WpUS^^@A0%s28Ydas_sI*6y%%_oQoQA@lNpgpEM>;SOvk4xFwo?^ zpkR^N+X~aXX~@?~ML9a~Mt5NM!F&P{Mv7qVVY!_)mdY7IENXn`^S@#nyNCyP3xYZB zI*~6DkjjmH%w`dN$c6=TYDGi?r5P`vmw46=TBOx*cl6lc@GvPi{H7zpQ~)`u)<)&* z*pcHMjWIK%#B+Ce3z=l??DJ{uG>6~KYLCG#3tDDF=iUa2L{uM0iaa5s()q&2CS=)pqK&CxVOO+P|h{%n#MzgMh@z8;JA` z4W9ZzCM@$}{o?5LjrR?8cSJAlv7ORuw7vif69($Sk=0sOlMo2txwX8IpFj?pD z#HgTJwi6P5x9KEops?^YS2*7x#&|W1&ThI->%;uDe)G=JjWUHRTok>l z#>c;E%eJm)sLn`Sdxw=f{&(JF7m(4>l$OQu1(BsO6Eg{!1wFZc!xg@)OJ~{}uoFba z^cUtOG4vu9X7trIzoTSBD z&)YErWl`5Ah%k=G zZ%Amb%7h_{SjazfseLG%WmSLgd|Q4yOtb4*(ys!wonLuI7}ZCK?9N4YMr@JSLeA81 z>*mp7HiS#7x&}g%kMs)1o@3+T{ zO^-RCjkY=L(__;>hZ%nbUa4wmm7c4b@8o`Nv@qZ-9qm{yFDb6P{)5waTECp>=aQ06 z_sSWCE>K&=hM*+<$9Vl&t*AY_ocJH~`PY+Tn(_tM)E=UMthOTrXz8I&(y-d%3ATFhr^YA={NzHI0Aze7*%;yFf7f%gM~ z3W#?P(!|HS6=bzy@<#aRhcpk>*TOMM9DJvBjKDbM$7F2S1lx|j7v%Ei>Vr0|gj+XVWD5ed9xaYEAj@*&y!=Ne^AOAbGiEMppvo&>=X z7`iM3OICx*NL)Y~WB<&kEv>MS#nGAEE$O|o44mNo!pbhHwSM8n30sd@s*n`imH@gN zpo`M`J7_}A4^(Stbf`ydp=G?14br#P!c?g`aQ86**4m4%HCRhgh#aSIdns<{~+e8_D!ueVoS1yt~XR14L_cP@5ql(=e%4UY-E|x z0Ah_(HW?9*ezIL5KKwW_C3c;jM7H&NG(0l9x_M>t;DFG~X2{Ua`>`QH3p_H&@4cvGO zCr_rQfy763(!Ol|TK49eUAZs3G@P|2Uhg9wC-6$ygBW`O zgY30>D;Y!G>V^hLW%GJ%5P&sQ;C(fQSOX9lJ*M$yym-B&;=FkIlLlEzL)Ohgmw<#Xp>vg0Vwmgf7s^M; z>TI-w8*3S({^YHak69~A?^tKm+$&~-SVT@F$5ROfB;2t>m?8l@5586t`{^Sg$2h}! z(6_|L`*3)N-3#H>uw#F?LZPk2E3M^o=hSXQK!dBEG(s4KdNJY(V zbudU!5a%S%F~1Zk4>?`$QU;rAFC8JGVx4iBfAzsYuqy-S_K+VVUnv>IO~INs_IdwM z%KrRkpZV*D(}dq^+ovi%%!$((T#URiRZt&WlkL~`B)Ig@tb2RksH#{O=eqN+n~fTE zw)vd(5aA&#XiI~T_NMZW(Wkwiq9Pl%w;YS-FwNeX!x+L4#=W~9mtJ-4SZ3a zzQ5^+jH<>sJgMr{lF-eqt8P}3#XuZ0$^ORh<}IPjbO`fYv%MO0np#u4R?1=t>g=yW zOVLhQ?k`z?#uK%m@rcaM?AT4RD%}gLEMaZfzlmuO+$-g`7|cCB&zsrK4Q5YpkQl?< zE)z`%32#K{my=&F@GGD#TTn(n_c(f7aScY#00&KUfCiD^-~z6_P&XDsQ&{#ZD&jSo zWpHc6P0vm9Q0KYzNt6pXX&Jo(@(5LZ{UGeFn!caX8q&&BQyE`m)efp0LfEGRAOQ%p zT0Z@($1J!I7ZS?scxQxR%&v~6G>8U?^-Xp3Yg*RWY=9Lw=G z)^>;&GC+Uu0gCuB*G`?fkZ@u5t_$%OrtwfV_0&^Sirt?H_^;L6e{=nmk&iaefC!gi z+If>>(gyZ8kXEN6pn6E30sxva->cGvUbi;Lg8ssFvW3jF5FFH2|79zZNQuy*aH zAlE{o{7A5PgE5KHsyE@eRpsT-WS~rx?u8I=bq1I$ELmTKp=vT9DH%id>qnOx+6%^B zOFI=Fo#AIwS>fdTG>#7L1a;k%nKJIbE7Mex_1K+%S}rv|gg>F1f`>&4dcNIaz=RJ4 zn1SNHkst%~@Ezir+78t}or+6u`N8?K78Xxryn5zp!I^~~;*v4-Die+>z9*^QBA>Y8 zf9wwKg_go)r#g^Y9BwJJLcy12N6Yq6}2>_|!s zLHv!^9WR`I7J*mrAUI7aQ;v;@oyv)enf`xJqgWuOPc9SFBw>>IVWMCnZ5#)iST^n& z;IgU&R0~0z%b|155=3g?=jL^HUYGRaN31EK7vA%%`kO!K&!93Qo2^llY?aKCV9V}?9s;P6E{C?Fy9X9j*|?w^_SXD0m2umxph$A1S!o*9KN9Z3Dpnuto>JAInt z_oqG>vF3gAkFgj3x)hT0_zl+cDap~{>~Z&<9(QP@V?hj*sbtK?EoWy#UzwXBqJ$HA z9DHyx|DG{FxYG(lUqjuv7$z2r<|U%keV1lNwuW&>JH4zQXTcK}|M+jkCo_T9rKtYTk4>d|HGufO*c+xKG{}`~e;A(p7YMYr+2p=d%io zLFzK*ZsjyA!&W(4*R->`VrDO}o)+leFCjlq-=uj{?y~KpWr?R!mM$xMGV0Z#A-J<~ z!+`}0-UJ1O%rE)sYmfMFO9 zA{SJ$@xdOT#FV=pSs7Gf>2r==jOW3;3K;`6`I<^d_+el-K}(#Xr8KQ3owt`sSKfsS zuf-!!S2jfT)_^U$v^*AJR+9KPJ4lOxL9 zXGq;`po7xKfy{$0)X=}dL-#2-D92K_$bm~5#)g&Yop5{H*K5k?%U(1@jfsaZP0;q0$5txRs0G>6Ur!*ycJ?dhV@ zmN4f*cf8(b#py|UqXOjdbd+?tMDM9xPK#tF3#`Cg!*NpyQ)kXBvpXtWawH6~9tr|l z!f|%TvJtU^!)Tzy>WI!G7iobGYGx6Nwtw*&kL+3+$ztfsLREm6@uZWE*geftl*`?M+gobb|!i7PkFulJE8kZDGn9XCcbS=8fLh6=R%yVwD zBn;i}2l+Ben$nb63^%oche|_|WOmP)uTKdA_a$K9IHEaBlORxn?~cN4(UNCT^fr#I z5DAsMe4AO0w9BE~@luFaGJnrl-f(OPO%=)@M4uisZE7RzppCJ7wt0F!|G;Msye0*-uChzN39=mv1{o zN0*?Nh`RezPzfDO}9zEWg9XoDT=U4(mPw!S6Mk}jvOQi zDDR)1u!5XcJza5k%bTs`6d;RP43UWVS%zTf#D;Lladx%fOdjNe#EmIihx3{nlaY|L z@h4e=Y-$`p%;W{gv>9xue_EzfoR{qB5L~`_qWyQ%_>2Vs#+pUAaiBBRL~u6@WIh_t z?)c)o6||?FGV4P*!SPVhFMccl?EkH1h4oa0y*d{e4h8eq`=Q)wyLRX;@NoH$B)2GH z$xU@45&^rUQcX#0sb05y$+$GW>x#~+EP84xx-4;e?Ul7%7&E2WWo!U~LYX2t|BVp)vN6T8}oi*i(DX zQ@nJk)PH9w++_Yt$`gs)80J&gEfSQD%bp6#&?SLk%mU}nzL1S8F~YxfAP0fH91HjG z**zz;BZPrhRyGC%W?g599k&mX{DP*uCKoxRH!*^2QEs>`_UbAhOL^)KPX%=@d5X*$ zZU5$*e_mSH_@ewrjBBKZMxQl-&QdW$MU4#-xcs~30Bz-8I^CTdH!uR**=HCBNT@b?`01G7X zIlTl4h&$+i3l{C)`Bf!Lu)sL_cy*=`9aHmE8d>i!X;0O}(40#^=m=z(PQpA`uqF2% z3zAr6(-vi*ckLN}(F^S_APj9fEVIeV@3G00>()A+2=;~Y{5>6O*FD|PnOa`{k>AW- zzjWgJ8cgl{qt~UGJZ3P8o}|ZIrYFA~dzO0+Pm9y|xo2mg8TQsoUpN&?PH@B>p&@P3 zOT?SB+Il=RYHJKU8w4!!pL-%SDRL&_3akgxfyBCrRR6mONbcXdfAk44&T zy}TyB;O&<#Z!;9U4CD=?vMh4(XU~4&LoeAZC(l*rJs!%y=;9WWKD;q3I6z({1-p6} zhq9k`(BJQPG!((23jMT}3h#jtk++YolotNEhl=Y?>s=T5UBVKh#EqJm#yEW4Pwoia zeJ207Ri!J6(G=qZU`=q&ddGT^2lvK}+W6 zcil~A1z4?ED1=S`Bw4C4A4O&2qKP0U^LzC6)IH8=n;LER#s2($&=qL&A=NB-8GaC`uvibYQ-e;AtNa0;xy6 z_%cNvouFvUb|Zy4w6l#yvfBmdgGB8$4$ed!o6xLDO)LK(B5*v%k({w1dUMEsPT7=$M43rEQDx6(v*d^usn?e&Gpni6=eF5R56bu zz_*8~+N(Rl1ackc(70#OO>QZ+(!y!OS?y0hX zCC7z^!@OW5ZMSc?7?X_+L_Qr<*6*aB>>tLZ1H`wlsKwp% zfHX^*eVTr+O3zk}Uzv8s|8#J|y?e_<*o>=G?w&aMI>ekO|u4ejUjQ zw!3FWx+!^cv+4NYpcBSDZUXq9FR}M5pXUl&`4XWn$k|Ol5YmpM#Q9XpuW?o?bJ7@5 zopG6i9)9&BeMn8FCHTH%8rXbHL)?)u(h#_!qVml`hi4Rh(jjkwS>{Sp#CthLsh zdGotot^YkbfA5S0aEV7h38*EhSm{NmP|n-*Ljjqw)_9=MSsWmhNM{OYit-9LdQJjnAD@Z+73(BXFbo z@v&qDT}2CCp{Hc0o>Kx*O!O`uzf+f`VNs5Rbt87>ZH{nbB^=Zx(c z{3|xK=>9`(fpkvxI;N2-7`&x_l&B^7OO29jIx3NO1fh}6_WMHZ2aB(1@3+ha4jf4| zMNRvdj#~vQ9;l-a1+r}5q3EXz8+_$*--aEq*J+G+t|@@r&9x=wxK!|+HA&!ZLq3ar zD|fm3|5OD(>9VYFQ=rEw7nf5Wftze}8w~9Nu%+AspfMrsZ};f+d*0f~&Iph4!0CsP zFXqoyC}#5)%m2Hd_t)xv8U9S~t%=_mi2y7&?$-No#}|wBpAG-AsNMBZ&>dv=r7~8Y zDYOiRO2>F-Jjn7KHHw)B^-D2^`HtBx-7Q^>ZWI3Wl2*C>|399Je)-eH5(ys0Oi}_P zzW)zD+<4<*mEhd}`O@Ev*1>KkMv9js(ni#oPu0CaAm-?Z#xQ&DzZ zvJOxLtHQeYRYM7aP@5^p`oJ7LagRgb>_8B%b#^;$P8p9^mcyl>i{e4w9f1Yo2z^dq zJ?X5%HVDkXwb=4hD3g?Lr>5V4_BY*T>+5!6+8ukHMOp&-`m$r! zX;k6i`XdBD;#waS37dq48)xX200QU0KLl)k(~u3LY@wrETtkC74R&81QNW*6u<`$A{0Wyva+Gs{9JJ8DLmtoJhJ%ZPz*Oc z^ihoNzVkqBo+#Yf=``0a+}2%RDXShG{@fW z8QNj)2u&%>=Zl^>k_;p@X|lD9USx~cXVy-d)!%yQAioPK-G!6`^BB4?u0*zmnG`Z3 zNG1!K5i*HclOXoYID~O^WgH%@Owc$bN+2thZ@)^@SGUVcWrCl1N* z);ez7^^ZeeNEky_+{3um6IMGNF`M9j{sO~lHy)labaAmKU*PXCC7t?D)4wngieG0n zUj$H>cjLb{2>|%Jh3x?RYo|d@mA@3pIsiK)(H_9KlZb^u(ffz3V~zv&e}A?_r3Bet z!Dc{tMU;(h-jj|Z?zdPig%sp$d@XzU+KHXn-?M}rBBLVoay_5d@MD0mwm(&baej*n z-P{r#hK}4@@Ac=mmk3ATz{so;TmztWaH+}MV@gV}5_&6*u{iBrRi?56tas=|X#2T< zaeti0bjmPDpQa2T+C1zahg=ejW@w#v*jb(L0^*z4u(UezGRXF&$8Tc_uU85#bumz;*@m)ri5u zK8quXt~VowlNTKt4^DWljx&p7W>Kq)mDgV{kwX}80Gs(SZhJqVLOiabD|$j>H~442 z1$Im36T|yKHOeO+bL=&6LBcjxKyu2#X^naY)+k0*yX=Fs-eI_^z$#3bt!K}!wkjyE z%gwHQHhp*JD@bTQgOc=TW#h4!g~lgjDZ0}4__6urtVPsEW&U6DHvIxTkHKEz4ABXb zR~q(uej(h}G!ZCFM)wkkk#3!T=>qGPEo1{_rGRZ~J96Px58>DcYIc{`w6$|#d=gxc|AaUTqRg9ax$-~ z&HkB?+dDu!NOkx*8@C{J=s~x)=Ii}%lKaY&!b^Bdh#hK$$VtCUQ{rp7dt7_BH`yb`Smh?l(BMBPB7e+BjpIr^TVZrupkr?E+m9`A>P#1UA z8Y6UkH!@Q|ygILh7TKy;VRm$!tV$$<;j;IJR6W(pMgCA$#GcCJw%Zi7hrOZSbxQ3! z;{`hdMyr{N1d+YN!}c{+?jPmRyyx+7PdIOn2qdf$oQ9cpI2KqcvsMfDbZ1b(GHwLpMfk`i{j!l~ z8AMkY%O&o{-J2+cPsPr8TwxInvCRT`)??RzdYQ@S5tB1FTeHV!{Xwjj(J)~c0WFu1 z&RXgE;AR;H*&zv++$$@!y^fniLo9Mq3b7`BFtM^|B3;^Kmfe!JpL)${oi(8(xysj! z*TkcgIr(_2{rw;FmF z0?)@G@0{)7X-j*(#IUQF(QRp9{3yRf(ilI4R_E;oyB3RqQ^$}20mz>qJHZtIOZ|$= zQx1dwYz~FM0R*D}sDpv)#}V*=y+4kE2sZsV2XY`G6RZC?4sKvP^8^?HI0fa<2$j$P z)ld%8AQdLTOqc<)U=-v)B}{?YFb&F~0c>|>R@AGtpQ<4c{2|~oheJ}~jpx|V9xKTZ z^v`OD0(JkSzFYOHP#6Wl%Y(Wdh$MaW)-it1bubV9?G%^_jiBx@M&v^>%$&cR0@I)p p{948tKKkbz3)8wp&hE3a&niVp#-{kiWbg+L{CrTQ0fGPk007?s$o>ET literal 0 HcmV?d00001 diff --git a/outline_client/www/assets/brand-logo.png b/outline_client/www/assets/brand-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b608bba0de5962f9b99740192716812249cbe6fc GIT binary patch literal 4138 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 literal 0 HcmV?d00001 diff --git a/outline_client/www/assets/circle.png b/outline_client/www/assets/circle.png new file mode 100644 index 0000000000000000000000000000000000000000..35c767c56622de15419c564e9d7685b1b2a627d0 GIT binary patch literal 41918 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 literal 0 HcmV?d00001 diff --git a/outline_client/www/assets/icons/about.png b/outline_client/www/assets/icons/about.png new file mode 100644 index 0000000000000000000000000000000000000000..b5e2c38bde55930d291b8ed12436141eb0688cc5 GIT binary patch literal 1699 zcmY*Z4OGi(7=PPRGmSp=d714BQU8^4wAT8tzH8b_O>XY`*lM&kwOWN)Upi8zh&YwG zCw(9#bV4H>g-TWvT@`MjhV`X7CGPz%F899gdH?V4eV*U*d!Fb0pYt9HqbmNhj)T{p|s#{C}K7T-ZW#}0^9(&ELk!iu?Rk6qrB+>0Hj$0AkG3{4mOF00Z4)a zl}rGL#Q+%dOK#9eup^Mg@L>l804o@y0763_AYr5dPmsd_nhO{JSP33Tsm4#Q6!F7L zkRpF#HSwX+T^|$Y?AUOG=1l6X_Js@8R&t85b)M@QDy4 z6bfyG8*O+AF_5jJqa#GHgY4|AVTN^LYP=vK#X3F_|4rmy9SSQkDuKfnaCq@pwQfWt zFG=8x!>JSf7~kp?aM(XH#V3Am3vLindmvjI0`x;04kf9r#H|S&7MxkFPqrm3F#l)! zo`(dflmDlfZ=Eh!;a16L67=KR$Y|4@ueITS&-J0W1;;M>xV^(Km}a=rYjt7?C(y(N z<>294SuHsC+)}X0FgF9`iK>2uGc0$J7PZlZqAW^7`~61U_E^1&43+|?lQfYzZzXS$ zcRdn$HI2O;aC*FVBXLq{YNB#_SGu=zRH(W>(=RN$qdV(?8#~~IwPMU^YirwkcJ=l3 zof{wD(>g!DuScmokEzGZouSca=CQY9*ldxnkI$)x4<0b8YHGp{iXg^Ig$ok_R$RGt zOY~wy(12_-k~+Nhp;C8lu(C>HgoI3!tgX3=vzFRp_|X=+>7}Kmf0UJ#8RPNz3fGc} z{l0#FmF8w!HSJr&mF=b#~W z>6XjK^>608E;RgyN7^4)eix{ zmEt??g8FF&!eoeCan--a){qz{w`7_i7N6Pu^j&^UO-)HfMMdWt*^AiK)SE$}q0f>I z-?y`Rzdjs!ocMgt!3+(_aO&)O2%0H;iq1M)TRXarAWzd>k=$i?H)u+$p)KwjmHJ{S zXJ15A)L>J)#8o`O<@4+O*cR0O=H_PWQwP#P-Ub5$gByp)NQ{5}hp=AsZf0_F&!s75 zg~icu?bDMNU0x!B$n|)$_pc-qWdtNMOltq6dunWqZz1u*ilgos4R}KnLqp}+tvKCg z)4%O_<;JP0sk0Um4+b*jSnj)gM8Q_2qx6%ku8tqFuKOAR`DAfwix7P>&trq;Z=SDq zG=jNFzs|J-o>(zgxdaaHjkW*!<}yk%(0TLpe8)0fUsI#}{R3xQ!8wVrsbJ@jLZSGb zv^?E4B&5e4raMAV=e;OB)Mkq#9&jyobzfe=!5@-8H*~PO`>C4#TG2UyZF(r(EeiIE zasPYP$nLcVj^h34h@zsRt#>iSGm`F)$emvG$6e|4u4jdX`nMfSd&QM!FH}`Mr=Vqp z`PQV~V!d3yMN?B#Jh|OAM%b~3(Zed$^ei1J)o}OC?m2PdL`;NR4Ii!Zg?(i<-~CO} z$T6@D)bUlgqL8MvtU%X+S_`AS*}F6|SCy!qV|KYkF4L~sy|xmfU*DQKdbO4|)bI7M zG`Fc$gc^55>R`1PTrRi6`lCjt3wv!?yr$K$>TFe5w+vJBbLoKpNiL*2WVCyWxtJ? z=V-QV*zh_RO8>T?pv0VHbMee|CQD>*z|7RuvznpZ*SXTw*wApIQ&r6wXP$PyNS%G|oWRD45dJguM!v-tY$DUh!@P+6=(yL2uO|aO!M_+&;qhK7?>D^ z7?^=9Mj&Kp&tzZ$vl$qGCIJES0!D=F0w%bu!2)Ik8>H~$D<>hKA(5FO5hW46K32*3 zxq68y`AMmI6}bf<1q?P7RzPNMYDuC(MQ%=Bu~mhw5?F;5kPQ;nS5g2gDap1~itr6k zaLzAERWQ>t&@)i7<5EyiuqjGOvkG!?gK7uzY?U%fN(!v>^~=l4^~#O)@{7{-4J|D# z^$m>ljf`}GDs+o0^GXscbn}XpA%?)raY-#sF3Kz@$;{7F0GXSZlwVq6tE2?72o50b zEXhnm*pycc^%l^B`XCv7Lp=k1xYJK{Ze`x;E``F@(<{a*O zDvmOrbMX-4S#r$GH`VOshNVV#XRdvlHq(d8gHcm~bxDKB4`$D$)zIQDWnOMOo zzs6_cfz%Un=Zm{oq?{LcPISoT*s_r0$-;)2dybwi>Z?T!!i) zjWb>q=Y}RMWcoI5!^cDF_x)Sf95}orIr;Oi?*=N3x0aL}Z@dm}2GFDES5S=t~nfhov=%cF5SlRn4Ci>D^8ocRTm{ybg%T-G@yGywnvK^@-! literal 0 HcmV?d00001 diff --git a/outline_client/www/assets/icons/back.png b/outline_client/www/assets/icons/back.png new file mode 100644 index 0000000000000000000000000000000000000000..54ca096f3cdbf824e58040deb1950c0809bc4bf6 GIT binary patch literal 1107 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 T+@_Mv|6^NQoG>pl^@{rs7Bj)d literal 0 HcmV?d00001 diff --git a/outline_client/www/assets/icons/feedback.png b/outline_client/www/assets/icons/feedback.png new file mode 100644 index 0000000000000000000000000000000000000000..3af65e90be2fd0f98e2e30e6ee13304b7e015ed8 GIT binary patch literal 1241 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 WLt7I2wV1Br-xt}=#kSg-mhv~ubUkAL literal 0 HcmV?d00001 diff --git a/outline_client/www/assets/icons/menu.png b/outline_client/www/assets/icons/menu.png new file mode 100644 index 0000000000000000000000000000000000000000..6b01874af14650d051462215d9a89e70e1c299c6 GIT binary patch literal 800 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCmUKs7M+SzC{oH>NS%G|oWRD45dJguM!v-tY$DUh!@P+6=(yL2uO|aO!M_+&;qhK7?>D^ z7?^=9Mj&Kp&tzZ$vl$qGCIJES0!D=F0w%bu!2)Ik8>H~$D<>hKA(5FO5hW46K32*3 zxq68y`AMmI6}bf<1q?P7RzPNMYDuC(MQ%=Bu~mhw5?F;5kPQ;nS5g2gDap1~itr6k zaLzAERWQ>t&@)i7<5EyiuqjGOvkG!?gK7uzY?U%fN(!v>^~=l4^~#O)@{7{-4J|D# z^$m>ljf`}GDs+o0^GXscbn}XpA%?)raY-#sF3Kz@$;{7F0GXSZlwVq6tE2?72o50b zEXhnm*pycc^%l^B`XCv7Lp=k1xYB7>oVKlzwY)#c_|(gY zO^qA#Uxsh1Dc-kA|1C?6=9TAftrLPz^j&`_tXcBR(#$o7>un-){!)SOD^E7?oN(x5 z+f?Tk+F2|&P3z<5bib(<>0Ft!cupKxFBPDw_aY^D3B6;pG8c!${ Ucv<`D5GVn8y85}Sb4q9e08)tdg#Z8m literal 0 HcmV?d00001 diff --git a/outline_client/www/assets/icons/outline.png b/outline_client/www/assets/icons/outline.png new file mode 100644 index 0000000000000000000000000000000000000000..839790f2eb00f598667361948aef44f22c3ac4e4 GIT binary patch literal 2436 zcmY*bdpy%`8~%<7b3RO#(sC$;ZA5Igl~N*V6m092<+d?$+t&T#jG1Zw~Y+X?_tF#xb4prWP$AV`onO9BAQ zB>-6OpVMfI6$Fk@94$^-TLU`;SPT#X$pgXy1QJXjjtYQ(VgL|035IYU=x;Pn=uZ@t zC;S($3A<L@M{6sLJIxnC_Mo{@5TU;QYXSfpiV;9x3Y`oO_4V-!#DwD1 zekw2myhbC{;6EjFZ=9N=^%3|!S^x#U3xPtQ)bJ2E9F7g}IEf*c9r&FtIN{Vz(dqse zBr+r<1QD_mK@0Fi>Y>qSBuXEtudgdm=mwtlqmx5*{Q}j0nf%wsj1uS`K=r3nX@2lE zU$Pr5h>lZJTPyTu{JJNddh%~2zrf#Z2^vJMMUZ+36!MR^AQijDVh#sTDT2yt{&+p? zPv!q{zw2O;YsLTPGQT?g$qHJhGuC1rBk38YxU z9;XzoxPS(U-dnvD?FgfXxYfuvvfnPTU@7I1`pfTsjGY-fLmR#N!z@ii$2f&8#Av@H zDL(+0frTSh7lbknYHSUE2)>igR?k1s4?8|o#;Jc2Soh_O_n=o7?!==`3CbJ2&r^f3 zs@b=(kuJg2S7T$_M@J(<5%>39*0d6tSf8n#<%+(0AF0p_38rY9IKaP_)EcNXyB6w& z-d2kTuwwEpBkL@-Yq#F%dikk9BF>JHKV4g-cv?nX)B}g>8_QB0IS9o(ov5oz3U-&%r7yc!>`d zr6OYsxAwf8`QF;%*C%mLW(^yA@I-tojkqVNN1>0#U zju5N;Qz37DJdLX1TG}N(RcK|@*1nIAH6kfiUFh!q=zS~Ld2iz5dnap}CL3BeKU?11 zN>ku`<#Nr)GL4jLiN4AT-~0RfGua00`Mg8f3_~t`XU7S;>$Yvh#S=MMZ3DI%(+}& z$W34sSgAaPnoRP^pxB=cD^`KQs=;vFjq`;U^v*S0av^+~Vd3%k*4ENPHYFF`y_h7T zEOUKHd)L&n?(Uj#6k|X~)GiS0;_Ln(lx>}Wm0|Mvdc?@GEo@89%7~m8bj+ z17=5~k*Z6JXUq>&oMRud+*tony4L-3S9`_uoRaAKZJF|6B%rK!x|S(g*~wNc{de61 z%F|b`FcNcKMMjlej=5$PhdVJr4z}?Q99^GU(uS|4G+iBX@sGsS=q7Ui)#Xq-HxPZ) zyXQLw7!KPqAbo?`8Pzwq(W`rh*2(0a<)9}4u0}_1$Q{Vgh)Po5H^vw8@~86jkn@37 zGX>HH+Wp($svIoa^FD|J;{~9Qj87wCWA7b~fK|r{*$f6qrJ5M=VW6|LN!+1}Nl#9_ zLm8TriYU)KQUwkbO3{%6huLqJ_pL|JidCb;slJN_6$>&s4cS+&HK!5mBDA1yO^$bp zJ3Md|e`Ujw6j^(G$A{ceA>`8`Q$H%pd8WQ)zbc>H)JtVUS#w7&nWPoMI7F%8j} z9M=!;hWX7OeIRnI%`r^Rh<9@=%UalwmStEBfgSYpa1 zwfs!SpOtjnZ(W&fEH9(KR`*T@Kzto}^LnLSg~eXWGn+CD4jfdZslPS!+Nilonr-gp zSGuA%HuB-$(`IYm4`Vh(B>{kR4Xlnp?S4`>C9*p{79(?ao@zheEL8OQA8pRzjPFA} zl9OQzsZV8#=uz$S!b7a_w)q68!KX()rA-k|I|jl;Vy~atw579vIoz26y8Zxdoc*SE zaS(kGn|f#%qy@Hv*tdbq`QNL`bxW(*hIKdgeGG7UX_!bQ`3$0l^FkSi+^R}5yXwO> zCUc!vjoOD+*t6%zZvhZj2e}ZXUU8` z4x5m+Iel%{O)qWjGKMGBvc0X|(Erk)rjddSUpOfFzVxy5^?7SQDHi)}%qsSh&iw~x CWG#&V literal 0 HcmV?d00001 diff --git a/outline_client/www/assets/icons/quit.png b/outline_client/www/assets/icons/quit.png new file mode 100644 index 0000000000000000000000000000000000000000..febfdf75be4a7f58d30c0a6a4b31fea826161831 GIT binary patch literal 1965 zcmY*adpwkB8-6rS(Lt6hmR{3Ol;&U@mYJbpM-yK(X`Ii884bf|3}#e}v$RY#mI(QX zv}#l;KQ@}RD3ZdejI^6Dg(c+B)~D|swe@}X`+MK#danDrulu>5f8G;RH_ApeJv9Kp zM(2HGcX-9hUsYxJ>$UD(HoPcCIJi0ha80QGAw&t@Lt*>eT>(hi0e~O_fWKi%@Ctx< zxNtHU0Q^}1bYe@J4-(-7mG14#aCHT{V5|z(DQE%&j1=GpWHW){8U_G%f&)>Z@HJbp z?n@S1f%uB$!mde2P1wYTN%Q7WqP#X1D%aW~>$lc0Xz43*D8JhXUD+ zKkLO}dn-J?P)cojZD4Mk=`|imIJ7eSVKo)EIaA@eLx2NZ0RzkwkD)UDJ zO+k5idCthlNRi2o9b$G&OyH518j}5EGFeJNNl8*;ZSAYm`T-3rD##ZKTTm#}ldSA) zcH2{>hF_t{l%j%y+kOE7BU5v{)gyJYdJ>6*>>~dl<9(x>VZd(z7LppvMS`P z?`UtoZA~EfU2-2=Eh*7M?0h6C8Aqdh{ry=5g@t;&_0sNb-+kvVaVcqYPlCQFU>HI9 zf;n_?T9dHUg!1a&X|d;qy765iw9d4J*kxy7|C2Yb3E|b-50dm!Gcq#j;^N}QE3Y;^ z=#AT!ucX{d%0I19c2~Dca;~7eu06&pPwA7?7wXm>Yy)@T$uw#_c z$g*NgLkF?uUdFcAk^Lx8Q&UqJi#4-U@0wJt>yt_&LoShOOHK5{?_YwN>j(O`j_)?e z%*^x|7#Ps5thn5A<3@OJx-Os3S705n&736a-!)wMxxRkZsPTlawR!J?5<}r4{-I$n zMxk=THB#JgYNn@w*atiO3!0j+R|grB+6@A?0F{g(H*BwHb!o}EOfX9=J4s(}wEfs7 zhL-v(_d$;4VtRb}G#o3Z4G@9iLe~vV-bbh-w<5zDl1+O>8(E_lhqev?pb@)xT(Y-E z%ev=*pxFRJqV~N>YEeO&0ZG?8LU7SZwS;JoTOkG>x%Ad=Iuuzaa0(!&xU_V)U0hCX z=x`UmaI+HG-Mt?<91^LZp`(*{vbdQxPQ1cTYS-MIv$DdwKjsU-_<>PDLNr0fJXB|$ zfQ4{4T=JIV*TB7=p0_6*f4(JJxSZ$$t+ub{3!`y2f#k~2rsqn_J|w63vWWjs9fFxb zMaRedz$1ap@UeS{I@300i0wFETeTR~$8&RYYkW$HWOW@g7} zDQV-iVzGGtIPqPzB5A+>4YASiZI?xpgV@&1+bAhRdC}?ut*EG|I~30|$wH~_rk}FS zrzWSSQWCCLJwq^@rd19cI&{c*Cbrdb`MgJ2^0A6zj7Bbxg#x>O>>2xkp+_Dz=UjeS zi0o)R@%C9&olFhrb{v0gVPIge2T5qTK*-7Wr_p}rcz6sBrlq9?#gF-PS^@V9#)FR^ zFRhcjt>mB1Q*wT-Gce4%=FEOx%2HMmY6%`!_ zzVgfJ_nl!Gih?|iYMmf9d$wU=VL?}4U%x2UPLw+%n|n0-d-e*|_qWs@VO{%sCX;z* od}6||a*uzTg+_U*M#P^%*fPiJ+3njN$p2=}PHtqeV{qDk0b)Zw>;M1& literal 0 HcmV?d00001 diff --git a/outline_client/www/assets/jigsaw-logo.png b/outline_client/www/assets/jigsaw-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e6b852400c236fef244e5d77ccf5ac5024195533 GIT binary patch literal 2281 zcmY+GeLRzUAIIl8Nlsd)!nuiS*EVCeUE8ibh$)L}BxfFKB}qkvLzu)-Q>WujQB8@c zoKlep6#+j=6?@$ zr~W?j?EKhvGH$7->X;rp8YVUa5`K0UVGgWs_@AH>^ulwH& z3=R#y`|JIOkDo?HKY#f;Hvad-B)Owig$}G0?BVA6>d)}idN`c!d&Jench%jYtgkEm z{P49^CU_m&ZHh&te2Y7tR#zFUTOozn`$95x3btft!mR&TH;J0OqdhlA<%cV)MP&2p z)80|;ecatzCQfQM=iKq(M5p+RtBU%9FFkcWaqHdf@n46z2JH23OYhs@++)g|ljko9iDZ>oSx8l|6e5I{EQsoj38 zZ!K;>pZl}uK0gd7Bo#9gwZ2r7Iu#vheO-H4%X4M3mV$`6>}yE5(U-(jH)WQGA{r?< zs+fhOj?W^|(kEnhWw1!;*prBeb11mnQFr-ye3q(zFfOKkOvjVizE1{=MS7ErbE7Qp zXCir-MSLYb-cxBW^*#k4Cc5Vb7Yn2>9+fTM0oD8KBwC~tBngE=L@DS=&9Hk>T3Q+m zke>qq2Oj8u0N!})(x>V+Bzq#OXAaKraaL^xC5ANnYWkd>PmP~zbj?$=bB^l!sz~Iy z91^0ZunRf^G?ys!nTO^y+3deyFy=1q;@H6MPa@d`qa9M8XO|>lqb0iWB5?rgkex74 zR$9&@#fV=-hnG)wI+jv#@8z+r^~WmY;s@pDugAHWWPpL3?qvz{9+QzS+!~P%yFawY zf6KyRiP~6VDhMEDo2sgMN>8jfnqQ(wK$2v~)8!z}*}Yk-t;{qFSh0}Cv*=vfWD{m| z=%LIrwKR~-39~aGkS!Mw5I0#Ua4$f6xTRKLl4hW4!}Wx}joNr+uUy(xS6ANraD5)| z+kGEHM{6Xht*vdPZk^}c+#Pr;mm7t)DGPo9r@N zZP30>I2yi3lrzKE)k6settEAOD1@)yinkhfE(^Lq-%%-uY$NZk&U`pFs~DeUPwrS~ zdGN1hzA|kQA}ZSYSSK}EC?9LbWh|-Z1!|=}Cy;xKGeX;vyZIFnf7mYjDXjNtR7^~R z{!V$mpWv!bEXaRxcDSrNIWj#l#Z27l?sjT+anfXJqhQAorsD00zm8wvmFqVPdwuP4 zj#La(s&&hXaMVl3v+0RN%@127$$kEn&30$>kJsB;0|fs5?17MlxJ0{yfOOs4u)!bk zUkh&qx^l}Y^+u6$zQVK~Z}^ys@U#Ra{I@&Rx3+fN z7`oT{OL}XCv?jo5m2o{jdnmwyQnUDtbIyhp71X`gJ&=(oYJ+8@zW2c4Pdwa509m7` zH$#+BX2)6*;$EMQ*n6|XaeeUi*<*(vwc}Ivo|-@Z-AVH+_^xZ?h&-71TK#I|#Nx8J zayRALYZ0O4t-QzABD(Dgb0WH~J!^`+my10>RkLar64$h8f&EcCh1&1_}k>A Y<;0R2iQDaz0_+b9BJ^^-yd-G%KcW(AtpET3 literal 0 HcmV?d00001 diff --git a/outline_client/www/assets/jigsaw-logo.svg b/outline_client/www/assets/jigsaw-logo.svg new file mode 100644 index 0000000000..b0a60a2285 --- /dev/null +++ b/outline_client/www/assets/jigsaw-logo.svg @@ -0,0 +1,30 @@ + + + + +Jigsaw +Created with Sketch. + + + + + + + + + + + + diff --git a/outline_client/www/assets/logo-nav.png b/outline_client/www/assets/logo-nav.png new file mode 100644 index 0000000000000000000000000000000000000000..fa59c9a5104ec1fae06d518fd917416b5ba60958 GIT binary patch literal 3240 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 afd2!fKV${O(i00001dIum|MpKkT#D?r% z^%+}HfTf#=06S=HteSM6#ewMDy+}*v*f@$-=!}DFUSQia;NzVqCj9@MsyNC1|NsC0 zUzO~6-L0LxJ}pGh|S=Gja#FFp`WUF_rle6W4MXM%5Ru*4%aKg0{1s2l$qUs3p{YqZ4#iTrO~uu2rH63wls zaEq@>a&$92eLiD>lwyLYY-T%3wjt;%9rdz#VV*KG2(ld|+st+lWLrV7&02mE9=MGd zPv}iPu|D?|>tGC_3&I%hSMu89Bku49blmm|z#xU#Ogn3n9ONR6JSLwI(OOyEGt)f} zAqE$A=<@Lh>TM8&iSPtAJ~q1#0P2q6zPI=Pi@$_06T*f7%RsVh&CV<0Ct}(Ylb%^c zbZh@>Gi9g1#+Z!aV5Gw$vh_DKm;VN9EymtqroA;mp&wuuR@__&eSp-NBSwkhP zAu^IMWhp4&07P^X6$Mx80C%gXwSu*^idqE=j!A57i*^}nTeWHxM~7|(;GBSPL}P(i zglE(K{marj|G4t5AR;0nA|fIZM1mEO5JKLScmDL8#tzHaty^!)s>kCyv*#I_5JV)1 zh=@oKkwQd7f`~ZB6`XU(&HjTnX_+DN?d~F9MA|b+c2A|~u7);g2N)!={}~Z&E={pw2QQ8|xFH3idB8C|qTKffRlTY|zDf%&OL|~Oytb#!`z!8} zZCl|l9*OgKgjXnTOZ_~)Yo*I>5fKp)5jlb!Vg|v^L6FC8!&9n=U;}Qz3h?1cH~*o? zm`TVTBm{DVnfC%asDR{vu)u=3Zyv;ReU(z76T!;l?h56dC)FGv!)pXzn%hSS=mQquEd#c});pO(t-lBS;)4 z{`0JGQ79BI!6FEnw$sz|#y$UyGrJorQY@tkG6lJ;Uf1XJZ8ohJ9-4qdv!v%OnfAZ> zr6j#^*pn_85TfLcBXes2bbS2zZ>s${GY`+1Sq_v~mJ)8+k^&2bfFvKVH9wYblll3b z`5paQmZ4=sV3z|eFQr`q+gji}fcRRr?_2riP~`GSlPyA0HM>I$#`anCo&yej%6z$9ZyRj1<7W^7H|o2_~)ZL6yUfeR7` z9)#dB1U|xi-&+1xz0a!OmJuW}-be%(JaIPSRb4Fov(PW;pWp7^?vp>5$%cDH=!y3F_ud-PmzbYE&B4b!6Rt&*HMKsB#&ZGV>j-mik8zANg0z_}13ZQ~yx30^a z)t;weU56#hUCY{#W320I4c}OE-Sw+g-*j&O)7|0Mf|a+hTUl9;o{ZNSf#TEK(VFYF zQ+sBQP=7!e7KOwJ$@Haa-xW<+9#BryM0un9qcl;o;qLh{pZ@XRcK5th-LJcW?$>A# zc#Q_Z1|fj}DS=>ccLS6fpeT_5$q&MssU}2uY1;FPl4rIgc>=8oMW@~SBUXFXZ>}ju;J??SO=j{iSa6pPyou%pIx97*fROl;z zfD*&t0*8XBU@8ER3gzwx96k{|!2{DHa%^>)HZT?8LMYmNRwP(|Pukj#JOFuTHAyo^ zqz;tkSTn>X832-11Gb)c8_T-zt}}IyBtoPZk)mDOH2hQ0#S9^oAWsQ$NanJ4Px|6@ zhF#d@##&>Is;H=nsECND+V}h1Sq14CWv zkI%_p=(Haau$^{|%VCFLEYoc;2vl~ZZSCz!@c$sX)uW=v?FX?SEzrRdkg_|HHfhF& z^Q{mT)M^-N+b!9|Hg@ofWmr@vxwt<1I(EUfOFx6_0FtnP*f{RSZ~rQQn5K}Bq(brE zh}d24OTFvOSMxdcEI*kZZ#~)%uZPC6c!Jfvs!aA15>8@UVHSZafpuRC$Bz;IcmCSQ zsz|qs6)5@xa<)lB!}Yb*^psx~^ENHl+%bFTgzz0Tdm8 z6(c%GKscaT!)3npl1G{nU??ac{EbW5X=o6T=u+}wubfb7#<;~ew&sk!d8@riR)1>` z2gbCZh^BJM{0*G5!#lx5$>FkvTk-WdWoaSR&n@~Cx;1jueI(R2o`p2rmrZSrY+Ru|(B z^>z)ApqzFbWTU2$kTUl;lo+jmC}C|050ke*KmFBk!ApwOuHqo!-{M%vi44++L<%F& z1&!#q*84qXL$stiZ}#0LFoPUjxnb`929SAAL#Jqz;G}$ExlKt0pBb4I%xPfY47bLE zfE*IN1CJl(Du7~o9_Lm(#4uJ9a?Fjn;O7SGf^49A9b9g7F`?<+EY&_e9TwHSxCgf`KkHv%b2Fyc~< zL9Z||9Vai?Lt351Jo3$uGaWXahz|H$LR@k$`dU(QhKlqWAl^@K`TFLdxuElRf$OeS zQ4X3jMXU-=T7>THv55!WeC}8nk=6|6`eye9fQnAe;pU-M8_VJ+3Q664#o!`61D`W* z!Uhh>k?>tPa2`lPA)AY$c5aHhZx2tOeuQ0p>7rV+DnMquVssp4T0^l*CZlYUlyf;_ zrdl5PZ#-b^0X~kL+@#1jcKF{LoT~0ReTN2UMkp)#)&_ho;?p%x7>}In%JP4>Tmm8p z5;GzM4yuJcnp+LWtY{td>&T5$Sm_a;7Dq zBc)lz5><;=C{U&tCKwbD)VMQT*Z9SkUh#mN>rV)SgAepWK#xT!#Jtem#>cAOU?}BQ zjcv*vv|7Dq$#dYkSP`I^kCEd)W0Dxc<2-e*NC;@z`porxp9=rucut6(*RQWy{(M_B z9YTTqh^uV1Jr|#=guxUdaVB;%tziaAGSYF_7*bkhTV7j;wBRff;JI;221FEAbX5V^ zZ;E;Kk#2G5+MepFGv!&2)8(f!ruR7c8$A&C;xyuUBw5O87Zpy|ARdJr-OauTBQ%w_ z&{^s_tw`UGXr6yh$RntG;ZQgck+M$OE{I;7=My79S95w?zHSmC=0`)!>dy!kPGLy8 zv3BG2vWLqztbyz5`no{cuO2W$iyzpJ8fbD&bmw>v$fps5#r!wfY z{p_8g_ufRjeppHv^OXl=|Fz&j1P(fyEfqqZ!3R3L943a_z6WoRs-b*0ctf~%9AN+m zGQ9Btm)B2MvK`F9po%mVvufamd$6BfRJ!)Su+c`^GxNb4;nJ8_v_z6HG;E{p;7Fyj zA!OkqBS{8tNC!W%)^02Za7@+G_8d}jM)6YUT9OPP&ARP5{7dn1B*)I7dQuZusa1N{ z;NHYo)Gns@=LtPA333!4hWoTM#?YI>eQ^Q{>wX&W?g7@@>P^HivsNrVGW<=oP6D z%dUd6dzu^B=r41?2grpC+qV@)*<8wbW1;-Uet{wapJQv-WkK2VB5ZHoqqHsH+i$9< z+RT}Q2;UI0t6W>aO|@oM8Yxjer)_Sn1Cnx#`-2pqnjQ z*k$9&1sm3F9>nL#W2cOqVbp-(PP=c~xuI209on|&dD|}SF`sP7ae2#;7L$MRfvH1G z@zb51FP+TYn%X;;q$sH*sk5B8mXiD;@{bE8p9oZHTee1(Qq`9$QlV^>xCEet#Vss2 zHgH(NoYCCwProJ40HY0`i7;9k0yGE+Wwv4r$udw@L9M50MSQUD>1E1L5@y!=O${A=^Wz;m_$(t*j>#Z9sYwvlBVN+}f47HZHW< z#b|S~O9F%k{Gz-t8d5#$iNb!#t7s33e?vVB#E2)qwGuL`Hf~1cv>c_li!>*&O?9bx zM+pCgz@?A+mBzV7Lci2-zy#wYG`j61@E`(xCTdw_1Xx3XR&o)f$N&$71%LcKmJ*=k z_J%{WgCirP{x&g{;XIaUEJ|3ay69s7qyZ9>*jzW{>ZaFyp?4%K5F5JB*?2WD@b1(Z zOkZGS8tERsvl5UIv|3ktLWa?RdsQC+24JYpaHtwU|6{~UuMUdBRve+)L$onrGH8xe ztWQQ!7}qwRL{x|czGK_rIA`uJ2R9tFS&hX}KB9695ik|Ik}^@lF4GwE0BKYrE~ytg zaRjI^pG(5hu1SwWG#zqUobu3_%)S#{6Y}}oO2|2jqB13x={3bL+(LTHHN^K;6bSZG*0H8}Z$ z*Ah!9slT{d!VX1iMO9q~zCTi7M|b48Bn+Ukd=q_oH2 ztLSX{2(*AALQ%9Qhz^=V`srSx9nyLB{3OKSfqnHll5Hbk)Ky$3^Dzv5f6q$GOnMQR z+AEACk}Or9BY~6tvK%cc3RIH5iuZ#5A5oL+bKz8zVN|wpV7|~&%gTz z4?RMK``T{(_O&~2SnSpvu3vQV%4;sZ`Lgw$)|veuF?787uWf6f%ye0WpP)r9zbqFAu)(;MBd- zfv;V2;OLW%IPKwU>vGG`f@vF;Oxkyg2Bqk4QmLp!t)4V!t+-$Bw~I%lw1PtAQk=}v zixDVDWZfSlN0vM|Fy{?>#@&Fo6B3f5LWX7xlX5F`M)H2slR8m}2x|ooF>DhTW+nP99TR135suht?D=6SU z1{xl$^d#)5i8;|!sz;qGm#*syrD`ZML$be87#$EE5e*zY5FA6xMNk3Tm7vuvf-KyV z>cvmWD}tddFE_iN4Dprcn*^SV8)px2_2{2m&kHYxKfu#F1l|rgoxb{jwi~np#ll;% zBVJg16j@OFTvgd}w56Np$rX3m9e+_U4=mACIDvV5<-2RZKp}%~k6=OOa3>5^+OLxm zb(;femkP7tbq3WzGKQ_>CdANp>K+sd=*PppP2j@yJj5h$%F1o_D4fI-3uUIQC1Ptg zW9S$BG&C@p-i|xy1!8`oh?1RW@db*z(4WRuVvyCs8Sk$Ou$&+&kZ#_3j1g%#DOSB) z6Th#0ECX5qfT(!}TE$$AiER)^wS!a&*>ving&R$!6FU%X-9p~QV@6P-idIXWfxgY% z8a-4)BP#2Yfz}#PJ+nIBF|M3Ts*#8s`4^^|jya%{E*VfAQMR=~YvMCW>$vun|Ni|* z4RDg2C8fH!lq^pRLY@Rm6eYB)r-aoJ4QeKcEne#Q{h&<)RFm!#QzIjBgn+;7Vih zXe=1?L1Vg;;~UPH(bMULmJ_ ziA32UD=~RKE?&iwylbH#ub&tCOVkh`d;zrHO9R1(Y4E0~xI`I7##tJwz9c0GW!o0z zpXidarldH^vKBYa7g~dbb~7Zj5zkb{({ril294_ZFHPGPd%*q6OEed>&p}$ZHxXMPjp!U7yv3STiRGdm!{k9*H9+nEo}i&IkSjs2&%|hyiq|~0jM!g zbUDd*lhV1Qb5oU${J?tyc zi+IU`i33rd5SK5PBSpF0B>d`RHw_;{$MviwnLY4asn{jyqaSGLq9N}sE?)v0l-uen zU?Iij;)%XYVU4!h0&Rz87)b#b7t%IEz~z|l(09))O*h+eTc>tfIN@$?=>LKU#(vm^ zB+`*01DHyJu~CO?zjH>W^ocUPUMV4?5vW9xeiPVY=p!uz6h-rwqWZ^&hkG!;emWfw zj1xaGbBu0*`ppr?KRf-!wACh(w{(xTBh{fy|0wwGsORIq4}Q!C^Xn!cao(lId&+G? zGClj`m?(*jj>#2?3J7_yoB?H1vqeSA(!q$s59V(b37J(gk8PKbjJhYZ!#bglX*r&R zXs&=|bb?MR8-zR=^g2^}oVZ;!JM%HGp_5ymMO?kqFWxt_M{nd=BsPPe)U+tJe8y7M z9wh*&5c+0&6mL+J7VvU=4UrwBt)a*BQ^wvt5iuZ`&{`Yqlb8>inl%Z-NHQoW^cX&U zQ4F3k#d5D*d#aKaOcLOf8LIGJ8KjI|U$ytq2P_nkL^ zgNEAaJC`MyE&y%!xiC;^JgPQW8{o_}(+Q=w9qA-?=Z+Z{NR)GH) zA!{C%agku=p=^dMTQ!I)G&O2db;_UegM3S8Sa=J|Ws(tIf4$RBj~y#$3}7}la8o@4 zX5DerXAF2~25$J#ppSH=2$>*Z3_VJ#^(~+rA27|+% zCqZt_q(7NAy_l)aCIq{jWS1NnBTlAdn>)t#IgQ%49ANcVEVCX|o)-Sug$4u{)Akqc z2Q$aqz$jRkS34SKdwjTxJ7Kiq`&~DVm)tj=zub}={^jZVWRMmGdXm}PS%J0mXcnr|KVq`YWwRPlqro|-ORi; z!sMKmRBBj|kZl*$X9Wy3S9PT-(l>@v#V2C6d=>zL>%Ejk<~p`+!hPG|B8QHas?!X1 zn6IH*;2^?l%|$z*6w{RfVjS6dnPG5{54(2hl<8JcIYPq7Rl5qKZ#Yq>ufAK-9Q(3^ zcuVf!Ch?(}g`+9)nfDpoG#=F(Y-ZB|Y*)_`RIob>P#%OcSIt8zTE!Nq2V8OSa`XM0 zQ_nxhvM#8LlIk+oCukZLND=zn0pMWq1nRIPW=%kw#+Xh+jw_UN+FGo(A#kj$f zrW)c>hqgW1_rEs1Y}d@zjKK^OLngoeI2h%t$>_qtVzzn<*_+Q-KU0#{p(w3S&wnLq zCL&9IQSi!0%@LJdojL?&ZT+>;2;WkIX(J{^ zQ|&^7#z0v_ItQ*W!F9eo+;vd{iPR5pUqA1Hy(8-;_v9d0*5325cv93i*=`l z#+jtbOjL6zj$DLM=uOMv2EaV}T&QN`I#3j{wJO>0)Id4}$J($r1h8siXKD$-h;m^_ z9}|aXKV~Rc0s=IReI{H4Q1vew2Ci1a5Y(1QN8c#|_n2xa=yUG{N+aqNvZaZ;3hyU1 zS(s+U(uXM%Y3}%krE$QHxr0wVN5-p6^S0xibU1(3w)W^vC~Hujg{Y_2S%ue#2D#T(nP;O~Qa}@IyCR5L5o}?vrULjiO4QCAANG=nT;n$6W5j|GEyh2CslzaF-b<=cxIyFVB!yA zQX15(WSP3d9Rdi33V;U220_=sa{yBklY@hlQf||^!UM#$oyg7Tw?uG8sV&5N#_{?D zYRiS!r}i+W6d}$o=jSqlsR}%Kh_4fR;#23Z73bGd#JYSr<-|$0z!;{8s%@*EkoHY? zlXQp?aMO1F_)(@grT!!tFv}DtN{U(76tO>PMzESko7g*XQY|os=jDD7LQ}w#HMHp! zuID5N4;4)*M7mqiB)CXty2-#o9%>v^g+koxHiaIB4qwB;0QXD-<3n`J-pPFzUsrbw zcZ+(oIlFakiF(o6SxOpo-w8Bp;Vo^+WI8odP?|<78<&y+W`#=0lw9U!5M|R1!z845 zNd)@ZFp9*K%di7Ug1!LE>v7b`1gqjaQn@pz{^L>*cdV}TJmiqx(H)_)PG5%!-;dTX z#GVR{g#_d3kHPc0jFA3BCmV7SzD{3G6MVsD1^q`8<)v#}3`>E2?TrD2f>K+P4w zQv`8-0StJUQ#ywP*~6t1>C1x-A;zV7r?*s=cm3)-h@lewdPcHD0Fwg~X3K&4zE=`w zYC*Hicc`BigYEP~+4PzkCLg?DqB9hu0ET8PCx?X#j@izYTn*N4bvS)|UZ0wn8nt#K zJlDwL8p1hI7h*`a%y{|C2bIk_&m1YxK<4QRnrrczqy7-3!KriAKiA*QS5}wV>@ZH> zrW*8bZ%nnqsz_df?!#!G1UWMBjL5M(SAS zBbq2Wf#nEHT zdz2MvIkx5sQ7a5CO_x5k9CdZc8!)@9A%`}3)73MAK!)N#)i*D&V+mzvZkEx+L0Q!# z8mVU?oZhJ1Q{7mxl;D)g*PM-3pA9(t#A+B3?vAW((Chgc{V8Nqdy zlB3h4H&JuJQTPl#2kKG^;=)iC*Zhg3nrS;###Ng8jBXN;V^`UlePG~fKD+V3tX46NBvemtH?lEqIVkS_`MPH{ z{xqV!9JhOQ8p`o8l)rRWKpkwIlR4DKaYhO8+AARykH*swRvVYjnSf~4W8b9@T0U|? zArvtkv3drv*ew4hH>nVikDL2j%u#3pba{9ea$jg}c!Yg4XeEqQ*=1`p5f-7j+!s}u z6rl=qykG-8z*>_64^ANhy{mdCZIe2j} zb8DrOKw7s7Qo0Juh_RBHR?fC?CQ2j=A}wpI+IB#$oh??CLs1upQl zum70)iZq<)gm7y?ZGE`?Qq%s*okhsh8$FQiei;A|8 z)#XxrWjBvAM^Q95+7g#IABn~wZ0w%xoFquOs3k`O#>7AfM2_lt>XDgZs?se3(Z|c0 z6nC9h4S%%pSUny_6c83X4Rwwu2$QaDJE%~>gXwE4{Os)VD3rakscdur>RePE$0RKQ z?X9ptmi(>w<;9I&C)PM8!P@f~h-yg(9)Cc1#`T&9q14L=mTIS`u`xL3&x{1flV;JK zdYDW;opcx*+kKeiVr!sRdjhhpG&IVA?FAI*B1g&Hu>aReVE2UUk~|eSXMVSnAT(KE z52#zDJ2ok_qANtf=vuNH^{%mZ&8oruc!#xHqO#{ zunQ#0791E2NQ9dN5}LyMqJsee>*lrhhX(~%1Ovml4jP~UJ;dZNz~2+=gWZu%c!{x= zt%^;qBweCg!J6YkbE%{x>v{6c_zC^#g2)*M2e-I<>b{>pbn^0W-eqy^jtwhz+Pq-F z&j#ji{P5Y0A3b!2aUC1m_e+NsJ+*JxIx(D>Nn%*8@hKzxXX)TCD_`B1dugkyggP-5 zIjtHMB(%|>oEv5eI#PO;R79FoUBry_gL(NPs2Gh{pSeTh45=_P9kw$<6`I2#4ir%r;?i~QF+(bZ6161n=wsdLrpZ?dE+3VTN-ym@j`9i zz}=C1So|DEB!*7gWUUq_$DRjzD~d}3s{$oyaiuy>nIy`o)|W|VirJ&i%_cE;v^1ag zDqdhwq;RY@`$gQ+xVE}W8m+J!!apUM+RvmANvpz8FPFc%0PIocHKReIY#cYE9nA4# zDRrn^N)saQdg>z3zN+W?hA6r5%m<&%YC;Hs4dYP!@U`wFRuw10=ssVA4Ob#mBLz2;yc~OGGi6;D+sXJ^pA?nhvzq%lcX)p9!Cytk1@@{~;#Gvow z@hzl>l8v{v|MR_*!YV$C<-WJb5Y1_02LOiZN#0`}LHKrsg?+h(6p_$~piRvK!u}}4l8O9C(#IasI|Zcu{)T5Bd1b6O9-h6oYv+#N z@$%W@w?21buge=(ZQs0jaGw5+>$>5W2kQQr)vAfcJFR7pogrvZ(^)bD5Lwhvq&WsJV%0J$PTo!V3YH)!7uj zOVx1|JGadRa&A)3j@?sG^Yx1@P%X4agI&6FoO`7HPVRzCdc#dPvhjgIYa!w&`{`IenOYhr41*Xj)9Gy!4C|MJvURl^<^AphD_^`63Ybn@1&61#AyE9Vb zz%gP^0dycS$zd<3{X%wRIpV>`sD_gmbrNCO|Fbc2&4=W?T2^G%&jlh%UiU*fd$(|+ z=`~4~RqDsbxhY_QbYYBN<1T|mhgz>rUt_|n=&?B8?PoxqH-t}T6yVX|HdRd2Ctt0{fY?c9x_mOd(xT?Tg=^F=i+}j9voQ`R+_<<@S0w$dZV+loM z!!hS=GyKu`boWFT8vrelo*jJ~#>v=+fCVcR9T;F;NHRhn^IqH%TY9lt1=v6+yO zsbn1q(ni-6BIMr%jAkmHUz@As+Cu4HQ7WV4>)wN&GuNi>GRQ?%7y}61Cpw=}#C@!& zqjmOMsMt8-STFuGR~sHJ&=6(iLHQ-6Gy)i&u9s+6WKv-hVNy}5@^?e9w|5@T=3E|o zPDdP~1BPCE@bmAf9x&u~qGUhQzg_88KY7hPu6K!Z9B$V>iS|8KMVd1gxwxCfh5}rS zH=K!k1p|18QE-kPtfFpo0+(@2vUjS>8P%@?rtAc((4WrZ=URe=?wq%WlX%*e zxB#Xnza>dll0HqGY&PYc+0u!u(GNP+E0W-X;b!MvrG`0&Hk3(gaCKv^#NkZ7?kp6o zmUc10L?AG*pY?=kX300eys*{hZrSp^WWn?HDGzd}?Io)Hf4N2vGYx93tcE!$wlli*9CUZSY3#nEq&dQ#S2N^Rd2jb1SNKC`cXqyMhM%GBe{_=`$RHr}JMc@HH0; zlOyJHm9nL$nME3~@fI3HpR9J8{w)R!^m$rO`KEsYBSGDn&A0=F4A2E*yM*8KG}p37 z?P)`G7B=<6VJ+G)3d(xCV;_njnzh$U&Y05?5xo;1W3%s`DKGqNQKdjq>ha`PiS{Po zo(0-2C1#YFiSAJ~1yLZ9ETV(vh`NNsioGEZ{}45nL*Cshok~VE$%8cs!xp#9w^u{8 zmvP)cts?;4*@-?(5VHi^-Dku1{zmtb()L8mTw& zy!2m|782hqIbdDQ!ys7Jv92T+2JT@MgS4|#%I;CV`JE4g&YIjz#&79x06oN^Y>rT( z(dY;U?8Y7EAMd*A(56c#w#_!B%c-URLMnx?W^aw2*!YXJk7q_%tJhjew`%xC9#WJR zkzynHW!9XUd9tk z-KqQmSBjcE&odqKV+EDU*CBRMY&>RJu`1+-(J&Zzg|2-h3xRY?;RPopv#EQj>G|34V# zP{*s!I{Dk`1C{r{P`dwMG%rPy%$Zp|FGNd)_VIp~$^1FDB3cXmjtaCV@C7OwxlP71 zL!&0Gj(BXIK1V+p6?#5+iR4fItDVO5JoZ+FyKt-efG2<3bdUHMXZA~!^1sEnS9=INT2 z4boh|F3807#~X?my6IW@!``By4|s^t?B*~1!jaz|s$&8rXb%WG9+%z36iQZGwn)uO z72*~fj!59Bu%Ot%L4jfo4-If0+~5aad&hGga=S|$AAPe6!VAZFlUHfNa6s2fTTi2X zkj^8jz7$K`hZ_$T*^N?Rt@3vxxU|)n^~D5bMhHG6HLx@4cQP7Bu_$%tp7(}o-MT#H zb~j1zb-Lr)cEp_t)$l%7JkT%VoEB_}tFX9?w6tN(07Qg)McWY0Vb>TLp-GN4;C2fV zc1P3>cjL7|IA|UiU^Mt4c*s%r*7bNN`h?%`tE5dstOPQ$WE6h47YgN&Pw~ zlwXHG8yHKD8XHT~q}Tqb`-4Hq0plM5I7Kf5&V-Dy-`1?~|6McQGtzKlpr+&n^7Acr zwf7rWFWvK+eVMD749q%d_>c{l@LHQKJ2q|S@ow*9KIwx$@xwp*?OyPP4<38R7ax4; zc1P#$`rzp0lZS3Nbu8q~i%T~yS-WEEMPKGV?a0Zq4W2x14FG_OPUgOv#NpdY#JMxiXQXvusU^~f9#tj?lI?`(EUQq4e zZwNoVDN?!ss|y_m;FL2uct|vBPrpW_g(jQx@@pS)w8fX%)z-gW?fl!--oO8dU<^3k z2qt9U3k|1YM<+wu+||-bA&sHdAq-gWZ;M19?iRK25Fme`caV~|U5@py5Sa=%dPIAn z=E04Y0rB2gfpmiT^F%oiQl02Xs%8E}NjLGhu>LTZ!PnWV$z~2W%rWpE>RH_~*GMgp zKvwiV{@G#yq$f$WIj@Jd2K+cgYA{^Eq-2Bbx)jemCf^cjNUIxut@##79CpA1in|yLUFsyXpQeVmP-rXY7i#>B(aVGk&!WrYtTJQE$ zfEwnvYzk(k<`g8|q$i~}c^5+Th$)^4;-)Dc!&$vGE|GiLQmOp4R3;CW%H`owh5Wr# zDUX(_qQPNZTydDtC z9h4tRl%_GB;b!ZH+1mmdhgIgftA_pYvv_%e^hv#ZMxI;Hg1@jQJrr9VP} zJCPhSZ48^f6#~L{qkOC4yWy!T-go%LA=}p7+Q)3kqTBw=;~uF*N>OgCO|c%Y{i`}1 z2Ey#6`S`QW{kZ(|6QYCHqINZV994H_WG|R-SJ=<%(8FM&q=oB$dVVZyUh*RTz4;cjMbC67UfFogR3 zFe}A?)&4&_(wt^CSML=V9oMKll2eluFHH}Od#KeWov{4RjzTqJ-jNBy#`~N zjE^XB*Lpr{&h9Ic9~6O;oh@A%K-F^-y%SNE!0WtTdR4BDRKx8?w5rr#d@$3*ESujtL;b91+?jEbfj= z)rztK^4c}{8f*Q>4An}&3Yt(LH7Zkb8XMTc398iJU9_F~pvzr1Z5I@R#DK4r+mwAE zG|_VRUrL9j4Yy!=j%L2J_hf9RgCcQdarGkdVw{NV6R3EVzwT3|8mp{D`63ld7pCcZ%fKXLdGR$)~}03`lDHB{E~=Lq7sBC~sY{iTF- z`6|;O!Y;MmJ z9w?blxw%=q15#^{ctz`lEm z{1xeHSo*SgkhshUaE@;@@iK&EyVDI?rFi`ViAI z_R+U~>h7mpx%J$ElY3ZLShM@89oKKQ)~8!fGi>%@qo(L5=gmFN4AwD995uV8Tp31*!K4(r(kMiN@~42?EWX`}Vq$1_ zqE!Fa<9>7QUTGL=_jo8^CAg7gR%2^Nw>MY}7jMHyb9k~E>vdd)Ypb;OVG$bg%u$Z; zsplF0pDNZe&^KGzHf%-a@I(cTUJn3idwvx)r^J>u)LkT1-PLKT0p@j06=<`A<`Ni&`=t zF>%&?nYV#F;&>f3^*A5L6IR5$z_hD_L~QB0ikvNNB^Al@ctTM#Jb$}`=o|zrL*|vP zigI;3Va3b~Oxy0ScgF474WDOFvAKS{F>n4jrPjvOCZf8Q~Qrk@_Ohkr+Gt|=^0UWe~=}3 z#2Ix?&Y*jj;xriKfZ}nF))GX(p%R|3k_b8nOKJ~kO>5{Bh6fWqr=C%tFr7c}LjmsD z-8?GklhT#8#*2rPjL^}NTusYiwOT6aan^=S4MCQ&!Z7{j3rCK7K`UW&S8M5)D^X)G z!y}t`2E&1o??`|-*5nAg4&zH=CYO?v=Pdr(3h?9DZ>RT5GlQCB?UaDDX}!(iJA=@< z1eIZgiY~@$EQ|Au?|m#sryg=;N-7UQyZ5>e<#DPjOL{GFQ>w2U6v-Owm!)9fwI)+! z0*~=ZI&5|5nVloKSY^G4?{@SnA*kLvdJv7sOA8xK$=8el$dxag6D>pv=_JVMSwN(w z5na=a6rxqwK$(8uXk8;_77~$A_Bcvi_nK)v^AhenmYJH@eRKW;j?y4^xfRYJc^jUm z-wcz6K1TkP#a=Olfo0^J<>75hw+h^wacH(RJ$*mm6b=Xqasm(J? zE4>g5R4D&!tN}DRB;i3uQgDX+|8Be6fivGT$#n}CZ9&*S|I5Xp(~TN9IQ`btXKlB^ zH&@m3daI&>Y6T@K6fTOwC@G;cdGVQd|KdA6|L_~0dOR-gcI~O_XK%fD;=-BTt+kWg zmhEQKqP1K4*=#2c88djo&b?Y1gv3W{~&m5U5+Q~O3JMZS6JUCi< zZj^Rp4w)Qd@W)TmymMhq&P2{uKKQi^DW!6CTjBLgebEy5LJJ{}CK!pX81{N+yR##q z%lM^NCZ_owrOn z9GlEnW>^9n<^(V16k*Xz;72v(@k>#rMmwA%FT)dP;v+97Q`Qjg*e~f5-!{!y-Frnv z2Pv)a_C&adg-B2;{49AI2N#vA1R5F%bBcuxW1m0-G|U=XtX z6s#B{u$twlh2g326=skt4B+-Q87O{o!xXuRs|#!$4Uca9sl1=UCm`r4tjT~mc#M5# z6Qw~~Nr~_sYE4Pi2jfX!e2^YqeE6b7-$VfH-RI!ACNwmt-R9ziQUd+kI=eLfdbb?P zFF3>yOO^{tYPFobLw}(mjzvY-Y`(i1itFTyL(*A;1h3*OXrp(Kk3C?kw%0oLof>5J ze2U9>KbG-CO7-$sVr#iE5yXPD-QmP&so{5z{no*}&ZbDY2NsA_j!Kg|Q!%BE1Uyjr z9^A>(#6wl8U?3zziO+C9YJuXcpLGtvXk1!4an;BYM!!0h)tb+>P$7!o5h~fQPgz}m z?3rs$PlDHH#kZu_LYG>vNFLLBusq||=%+ls>+ovyg?82pcFdwJS#mMkx;-~+B#W{ zfRicMLs^%7;ML5$Vee|~j!PrUy%?gf0aR*3J!+q zv`tde>h{@=z^zVS`^GK3oI7K~h5L`VIA$A+N^8;vZCmS=rl^6a2fA@y0t)?Nv)w_} zi&wmM`=dx=%=;(~ub{r4Aj}@dzLzBgnxY&4&M_7#d52(d#vAuqXbrBn1*W>6sMbVci=h#bhcoL;)ti(ClRbd*<(Au`qG za3r#{PEMmAN<A5p@^Cly1Oz-6Xxjgi?7Ee-Cq+vHr!Ow^dx7%XO=|RLBixgjTt_ zE~2ibToY4HAXT+KSefDiQ_`#4fX!i@5=oP!2frTVCRCt!SFH&jiVAKO!_#v#=95`t zTC~8Wo2VO)S!-sX@EF{9#&BnjbwSsjiI$l|X6*3Fi3!AX*T?ticGq6OC@@0n{+3JX z*4XVn9X%g-{dCavi`Fe#GijDdBW52ue$133`qU)zqa7P{Xxgs9YO09DKi~4kHvtK; z;b!a6!G)!hflJwIQnnW`D#gt zYa}q7(Lez}IAmDssi}Z+GarPr-@{nsj+L?fHy70)eF~qdO8gjE&rKblESl(4u+=lo zown-@UeMa|)ScgVkQoH43bMfDLNJuM-8|xmOa4a8f(hs_q-&PvMVxUt-=Q!lMe_Qg zCviW>gw;bS2WjNHTFk`Zj~%{P(j3y}lr@*UxfRW`^5Z5upw3p|W|L$doH4MBZqYJ; zLrS^2F0L7W3xP?{>T|0w+9)#!d~7CT4)fG0m8H#yq((hBH~v-nKf8^i(SRNwKPyU$ zP3UroWQVwNgdGn`TP1U_a7tA-?CHo5-QY=WsFL8T)eT0G?hb(*Iivs6u|?-ltP7aD zIDUw~1J6+Sz6aXvKAkaDejhLLR{1U)6PTP5h)dN_)45VZAh zg1XABA6J4E{19><0{aj2@Em_$U@^HyKZFs_fO=VA41bQZ&qrP9X<3b9Xn&RLqQQJw z2z!t|@On}?bv>DUeLcDKUr!+e*Hg;rU$+tjS}27N0){pEdI8%+kiZ>~!FQ0HcM~qyAcGld z{)Qd`Fh~H;B@1`$4dda8(KY%sV{h%&x~@kKUfyLS4}nftsy3;VIt<~8wYzjAiNQ_gVcxT(f=YOi1V zQ{Uw+EFvjBByF_6d^K9RS~**IY5pk4j*FN&)k4x@b~e0%jX=(xo{R%awsfvrAyo|476|`0C;aD0K^aDYiK9Mr^J^0v?L-Qd;|;VkqKdpk0pSR zLDn|kQEDPlPxPh04ka<;j<6r<3_}0{Mrl~-sI>l#+#_PBnER+n%&yz`!(t;eR)yes zMrkofzdKcyp$NxU{EU8sz{zZp`V4k7@_YYx1td!-YzVBgem#P4Mr!9=yL;jHLE>Ge zey4N84Gg~qK{(J2?mDCBm%y^9DmDBdFUCUnLlxLNSG7v(AJa{CS6K+ zRm-hFWyIdU9am)}_<Z9HGWWmDtD%bicHoN3N@fXj9*Nz=gQH zY|^)r|6OF02gU_&=N}ya@k0EAeUyZ>Gkv~m{LC#lcI5~pganCyi37jr`5hfWt3<|m zSDbbg=(aQZt<0Z^IFa_uaKm3PnM?atE2d}m&jt8FYS{=DSM%w>Vi`p)iUGBa*q{?X z5&EZ<1^Qn>`^4zTs*~@;2z0-L9`Dg|J_ogA-Fy5C4C&{dEMxk*JUIxrsl~7ny+~! zx16bH?rZ;uUJ_6!-E39deeGS7u+^Yo_y@X2jdmPKurYEo(Xm{`XlgH4ch#wwyX6oH5G#6hKPHHdPKl6 zbaH#e-Vmp6oenHOLB8tuNzU^P*Ncg~)Rg59Cxe4_qW{UzzU@9LPM=&;k%llgg_5}i zFvSd;%~mlhq!fBfV7*(POT9{R4t9pRu(QkHi&>Gc2GZ5t1cy~KYAys_#+VlB>Vkbl zk42RlzNu;8A+IsiwI^Uzdw?XzrV_N$Uwj9HV+TadLRy*wLw7OzIJJmUAxSN+oJn_y zInicR`oX*4K`ue{k5H_VZVTro zuL6QSG^oC+plM;f7pw@n8iT|jKEWVDVIdnK z$|HzU6(^FTzPjIGxjmzZiIy2GZE!faNeVC+6tIH+xB-bj9`XK|0nr1Av}ZiXkq)+P zewLV#NVFxJ8X`ZSyIvfzd@PmPmlcm^|t(HCH35S7+;K?|1N~; z%Fh_fFR|_Vx+N8_cW1@leLrEfw%OeCrOJhB6SRxkg9mHk6e`1NEQ%AGY*BQq*-~-E zuzQQ)@}?*GO;v`W#xzZ^?ccV4i`BxSLQ&v;Y{&w?NykRyDC|Ik!LA?Ntn9~**J1qB z9ihoZ9oKM6qc^hWd#Q`=q+YK+&kO;2VZ>d$`jjIUhS*mLV%{XVh;eC z-p4r2M|x*`pFZ95<;#2Dz9I9I9#8jIu}1*SAjJg$&7j3z0Gh$ZYXhEMkYK?0YhcqG zkHJCo91NeYsGy5T3kyC z0cdGB_o7J?!?dS&Rt^}$sjqC<;0^CK^bMe8H%h>UNSd?&GGzHPU?7qqL!pcq31-Y#1QRAgm@yN@oVjq8 zEQPUUYaBav#GYMvc$@k%`8WbI7I*w)ToiHPMs9>>LnR7Cd;^S z<4u^5X40eyrc6mUZCa)oGqTN^m0`}DRErkn*moe;kt2nU9m{v(L|)FVzISf64Rp@P zZG%5ZH%Nor^#V|!utII@aDfAd4K7^8@EVUI^yp2-(Y)WN@ZlrEk6#HfVx~}R)wlH2 z+ZkW3-5P1y%~*5hZac`?bKAi{83F^@&rpf`J(ArhLz*v^KYtm51Q{Ql!Y0CXGdg3|3jP+2qQVuMj|i5+#aLrg%L-d-=wRRH{^>MvYSS8kK3*Y?4-O zChOFrO8*(WX>Nv;SOd^Lys?%sv!_P>>(uf2S-vZWlrRg2Kf|# z0zz0uGztmB^tbVO;i~-SvX;^$s_0czlMFR9fm(v7OXXLuTG=~jqbJaQbXiWVSV1FL zNg?RysL@&d?BB5E+;F#Jzdn z-HZ3*ft+h5PF#9MF~d-rH2N}Ru$3v3sVrG6WXonGM-Df+a@ot5&qIL%c8V0S0svs6 zR4IRD%6KYQE>MLE!75eqQl(0eYBhY-s^z0joiO$4g=o;gTcbt+nluSDXi%&nLlTV` zk!jSZRAa`(7&k7-gb8t`Oo=vaTDn=YlFgZuVBWk43l?Npv?$V&CE=DWi?U)xu2rkj ztXY#|-MV}mHe}nhDbKcTC3frp*tM(3o;`)Ghie-qAr5Go!!T@?q#xf*=w_6G;*z`)GWS%+aQ;pAH=(bm^L=M^6uZ`i>YdaLACMeMXFIGGXF?DO20b zm^o(7+!_lOc385s#fr6a_Ux^2;9#92C%c@vI^o96DtGQS;-wfk?!CIlhmRM&eBJTm z=Q;k0f#LzH4*~^x6C}uuV8I@Q2=SUw#lY~eqHEyc#Xuw;vHBuPlt7tCFW$QZ34SC>^qnNdAn@eXEh$o5B~>w8;Av|Zq)P`cLk1L?GGWV-g;=(1SaRe* zmn#>tJb7T`%Lk=E0Yrt0kN^O{QLGq|5+yK|Dut&^83N_X!KzRJTBS;as#L*Ots0V6 zt>Cn4N2WsuRGm6O>e2;Gw{8e}^q|(O7abrVCc}nN8Zm;!m@&-8jiWMQ05mJURGa<4l zWn@eq=Zb}pBPEkkajvCk1?0GD{uSGLnx@2?ZO15j)GTpdgaqCvD zJ9o0&yEnmu2dN%C%JJk$x)(1pyn1EzjC*oLcbU)j)t? z4n&BWAVD%4GGvWVpqK>}ss?D#)I*1^4h9S}VZt;67A(_Y!!`{L9My2)nhFn|De&Q| zLV!ReLWCwGLSzzR#41AKS1tqS<@x(=J1_KZFaPqI0735})J+J&MB&7U;S(p$g#-x- zk|ep4B11`*EDbqw4CKiRpg=(|MT#OQQ4&v?vScb$q(znV)2sHdP^Yet1`TC2X_;ge zrcIj}9Xc%N(qr$BKV1Fwmydt`@$=t*0rcrhV8B>16DBg4GMCMQr9xJ$6tiZnnhiU( z?AdGMz(EH`j;1+rGRK*-1uk5ybLDD_8#jC0xjW^-!-X!W*=z~aK29qhvux!~@Qm&vMM0H`SMSZ~lh~a^BGn-zxm^Uxhf(41TY$DeRV{gdqE(9#qgJ*YtXz5Y^5qLupg@d5g<=&ck_Z4GRk1nhGJ(pK3sa%O zgi4jRRjG2KS~W2>YV4?0Yet(V7tuU@PA^x@L4pSl492LBDHXDGe61Oznv^(Zr9#70I9T4pT0*fefjs|gb- zO_|bX+B7gTX2hE{i^iNe4CXCZ`g$Z;wk*Pm6`|Iwk+Er$sV!S*?b^j{&w)sXj*U2R z;@Fup=l=#2xiFADw+5b>`}Bst2M^>udNl6I6FkqJHG1(v%Bxq5-n=2pmx3u!fh-gO z1*!=cFn@sqcLV|iN01;Xg94=n0t8pEVY`6?$1^;59^k|GgaDxzM2K7?M(h>|67NWn zx<`i0BXZ>KLTw2G4H^(=(E>-09yA6Fpu%MF2@4iqVN(c6#lHA~1BY*%IQ@pp5(aME zK*Oit0~LQE7{kn34727GnKv)qf(2O?Eh@BZMXXhO66`yX?bNAaXU;^ra3R8_OF^z& ziE`~$use66-Fpz`(IX#Eo_Krq%HNxJp1yta@Z)!%U3^I@zkVqwUPPp^j7c$&qLXXp z2Ld591S;Z4z(6KTX~G3JBI%|NAU{zRYKu~psT}30NJHvrpsD8C%6dBEX$~{cLr=W* z)vqXpYvjdv?8Q~xK_b_1ya^e}R=LyXSTZT(Ocs)u)MRB}eLnc~6aV)O-|Vg5^&7tF z+kaS(^-M4H%4Az~9lbYAE4$Uc`HLdTQ>6o?A2G%*Yak|cRZ*Zz}Uh8Jyz(>m= zNaBk>K|~TwJV~UGMh4mB0-%I)DygB7X4>ds2st#+#RxO3AkYBzIO4&ZAO3VXTd>o9 zCsbBfeJ!=qMNj<qIlUYe+E`kJyVi{Ci%&|=F0Za1jy$TM;JC&AS#frOL8U~Bw!<4jgp1Lk z%Y?SRp(%}yUgw{SFSZq*K0|3`w7C5LegEb5_v@c|`jXsmO?f~9hZq?uqKPMkG_uJD z<4PoT^fE+Gu&)HAN}vJ(1jNW*i9~;wUbjc`7eAsHyl|`L#z9=Wo-cMyiCh!NpGrRU z>C96vBSQ}RsjL6S?LZo=LCwgv87*?^I%cnoq|CvF*E((MI#ZnbT-UxixF~=xMY8B!E=xa;tw2R{~_)gI-shle6X`r30f2?`RC85xbm=NqB~vjfS|!mf(#_O%0l<=50I)!>)B-G7tC{EF z)c9)LJ-+n#LbXfvx$1NE*Q$PXqk5LA%Og}h-b3Y~^zcyrrM%`jtj+}hSakJ$-0ivT z;ZLR6vjJcp>rT6q0E=Eb@urzmrUyW)QLB^+xlAhNaajzyUOl>XY1bCb8r7>)t2#;* z11OR&SGFt}(xgU$II&`cO<8F8hi5p4-lhZ0{|_+#4}kfX;kPqa1^qdnLVvymrWqIH zNpemGn3)1MQ$Aq`>uh-rz)WknI1W5IbCvU0TGlN41Yo*D_DrXB0Mj!8&c2bQ$dUo3 zwMiFB&jWPhEr5HiPJ94dlWx}(;;UViI@Y&N`bvBP?3TeM@_y70U6J2qC86jBoq;-cV!rCb=9H)ZAEs_ak&?VCY&;>CNduvwybA1DC@-sk>~m}n5DUC zTFt2W?+*FNMaQ9LG!89BOVBEGDr!eppsUbL0Qxz42tco(H_%(?9rQT|<){Ec8D|=& zj&q4~h4T&PJ^ZNH^k-UFCf2+Q>mG=Ev9F9F6mGCu|26r|Yy2iQ49SP*;63coTO|WN z4o`ba2A+u*n|KY|Cyc@p+U=rdkAtHDLMeqqBAtnUG zAH-~;o!CrR2`90RI7945+z}5%iKvK=$Pz+HTqQyY4beqJ5ci3P#1rBbS4cb{o^koa zJ>oqVA)XSCxB}u$qh12}vFkmoUbA+?rp+KqI?^$HzcS@qw3YQ>qwA;zUcA zEJ1_}k-|mEl_p2NY-w)!hHfy+Fqs{sY{kzJcf>N*%NsAOA9I0J#qQoMoX#^@qv@nm{ zA}hoPrAd?_T@t+%36NBo4B{<8TWqO91xjTrW0u7zPq7>(xk@ZkBwvkY7A;r}YB8GB zt5c~_m1#7y z6P%_hx|m|q7FSXkWw)e~%CpoEQ(K+&)SI={t#6>A?rBFt2_=_OYH4MZT~4_bR#b7- z)mB%1ZFMx=TnnwY)n2DvM853hEO(1nzKT`OvZ~dtZuM(e_?5jcZ=Zh6aSp_l<3Q6Pw)BW;VOI&2Mo_Ti)u{w!V#RZfiT+-QMvh)<1YYy*w$jyrFy-u$cTo$z`osZ!Hb)0zJEU5?fDTsJ*e)zsDZ z+imZa)y0xA<`hX_Yi*w~#m8xDDqg1uK)fu4vgOE?CtrbLks<_%5-dchXko(n@a8W- zAWvRA`0^WemXOM`%mVU9tFV~z-O_^JRyqHDv+d0n$O1rSTL8)ekmD^&6229(xe-dc zN|u*RSTN#RD^KFAFLy>Xj!rk$krS9FDkp9W1+rd7FQJJ`YM;eEoLTRh3ej{J!%rf% zDm4n&R3ru-NL&gUuX!vUotqeFpHQ)#04mo1xhWpNc)o5E#TF)8XLj?tc$%cgB{{8RD9{&YCAl5!RUwDdeSn7CmFm@$n z1cr|;EtkjF>&&|#F+g$70=XMEygQeeV5n;|e4oWk89)Lb0)8}MxP0^NN419A^A67R zgN5OdQyw>l4GqAeO*(KxD->NpJ;4^-2dO!MI&K>r2?x*v0e4qF>N&HB5s3Xx`4Nt* zcND~jMzrdrc5}6V$j4i-8WJ1Vng!vb(_O*xf+q}NnFvC3-m`>QMu=xbBK0g!euXAR zL;!|5@|@ImZ34Qprs)EsB6{)mu%_ebx^$?d43A*nZ{&~d8jk^;=eq!zqBXi6s_C_J ziA2W3xq{NmE2-+feb&p;5`pxx34{Z&?x}(d(_?Kp$~BL!0ootufIomsVizq`U=z4{ zk0V7%08a%`yA~QSFMvNw(Zjim@ zh&JA~?L&)gwlMUBq9m*voXV7*Xn=9-R8NC3BE&wYZkUA9IxDw+BC`bT-JxyKTC2DS zm{Ri0X~gCT-(0?TUpu0D6Wb%$;Sa?3)Qh3nj=Uk{0jORGW!N5Ntzqz{6ej%i1%3`s zFr?~rpTZPGW+@QZY{4rcM(l*$)%-*c;P=-ozfr1cBdSlYn? z%wpg$C;DYOjFP}PKzR2$)FjFmvm||Q)~q?Ky=_^Nf)r%a@Pffa-DKnX)&@Zki5mn{ z+7;_3NoTDLtzsIYokZNRYV=b?+Yt5k#P?l(Bm~H;6LMd!SD=nq*k9jR)#eK(8m(e_ zloR3FEh2DfcL>_Bw6d*#=4yCYt8zv?c+&z&OqljXFDzp_-h@zcv!mwEu0h3)Ga+{A3dY6ZuXnQE8X6XM2A z#BNbqPW3vJz#%hX!K$5#GZSV9X-=V&$+bxE$0qOg(^Z=84D?ZdGQIj)2LOo0e8xjb4v-z1FI9{ zuS}`*;JLYqNN^^K+^h^nx1b?xq1~p|+U3X7+n!lmh4Pa|w35t$O7j39dQA#yfd>up z=MkKqg-Ll%D(< zVc?~l1!uf= zk&7Yqgo!#R2K4~t#MA`)x~M5QeYx#G3uXfhAd3GaWYIjLolQtadMf;>RfP;gqRM7Z z@7)YEX|2s@Aru7uE{DuM4+?lN6`xo{3cQCKY`SS&ZPS8F1q@xf!FJ@=mNn)AUEtcT zi!Qb^)N1u>gHwpxGlh^sJnGU3o_Bhq3%5n{Hn?nEDE-^(=^5a!VG)0^iN90=SCvHC z5=LrJTZTxZuvo79IpHNGd8Q%_X@GOEnkb2-l--_U?~~$53+Lxj(wOWl__mw+?s}>7FSf&N^ZoRGm=I$EEvYQBOKBEW&1Ps zx@^jjaP4=<&Q_onw=H-NM2%f(QHS@_K<+~`lM{{*8JwnSo>g-NPI!lpnS^LscB9Z( zDXN2L@MU1SV!YvGuD}uHehmfDpPt^!Js~JSpCpxT=vk=%qUd5Rc+mPBlScl3P&Y-! z&fa4#XkQkw+Ljr$gu*qdCx+CRBSiFiFyk8xcQH*_WN3x-&`Tm;ENx8k+$46%jr?>i zSI21DNN|Dk3!EBG=w%V=^|uLWdN`FNDd}QCKLbEs^O_{5@u5(#U;@gJ3SKD0h!6}r zjGZ}W3^1a^3IxtmY&E<%bXfe$*C--4qB|$et2c-E>`ETnu2emXoJlge>SlRs;X`?h z+B8Q;h8Y=@-eN~!5b$9JcxW!Vi8X7a?uZDY4?Xdt^zj4s!0a(1MndJaX)$azv4%+! zkeJ2MbM%;IIKiL9HPfl3%;1li%mY1TI??(&)hVi{Pg;}2s3YP?EwPEqKv!MRQ#kv& zkC&!YdG%pi-|IXmowkS>ez6nMc}?`{x~?-4o#{&v#Y;UZUEe{~lNx2gC~DMf=WJECd z*Em>FcGl1^ifYuylQ1K(Qms=cU;1HHrNgQ0}@x*QL-vI$%j5EFMe` z{k=6d!A4+%)ktM?gD(BubKAS5de`UMONTo_0B?9x8j{*cOIi|q)>sB^*1c=#?saiZ zO>?I+8@U{rS2lf%Q@|R~&}OaHV-5n>rUjrVcmvyg8@8|O9jQFdL7 zW^&U!w@h2&5C;{F64W$L$b`q*dFxF_ty^G8Tb^iF71u@-Ux;A!lT`p^`?2PDtCsgU z%KEm7BC4g|KiEU{>Id2B2+g@kKmXcKg84!q!o|3P?M)on(Fdi6a3x?=mvPJaf@{yz zh38m6n~v`^?DVKoYe9mViX5Z6C=vil%khzh*x#yQU9oK_W4nJ*p9S4_sq11VCZE|M z?DRR1#kh~&(Ze%=J(ll6>a<1eow3AE|&|r zFC)rAwu#C*67qJgmI=N)^Ny37r;1)X(XMpAE$UNe-ef)qr+PISiqpefGAbh7bJFs8 z_*BU0@KJM>Nm;yw06q2zROfkC=U?7QQlI1$Ced{~)szw#H34T$$5jDC8gll8_DSz? zHMeAx$P1lJCq)u_>S3{G9Bt#o)os4kEX6>o0%JfW1$}#qn!6%H!lW3c8VRIpGo8k4 z*@))HBE$2u={Y4cvy(R9>M6a{o2J%nMHOtI2W@wdlNAwrdW@G0+^9qdK_gka5(1x-h&E_#9LQ=BmRPgc-t+uzJSkOJ#kTVMJV|P2>1gGFVSK$J51kqs($7A;$!#Tmq<+ zJI15Una|D=!tfQp=9}b|JoTRqH!FwuxVh{kO%$VN!^%LWjf^dB3~8N5Du>z+y!U4J zfaBm+^r>;@2H2`+SU*z6tj5qJ}sJC$>nr9y65+!%#EbWh0dW11;_LK>Knhr zzbJ@J*q1R7nYMSB6&pDcuLE%Z%|6FHEG|CL7A7@)f zdXB5fljG?=k{6wy44hdy!rK?=CdOr&rYU?*Sw8z$$up--dFx))$x^f&I9P+4#?D$j zpgD~N#s9~h?h_s~tvCSTVeoyU;b50c?%cNIHzG&5vXB~j8uB53_$D!p_gr--oT`(| zbGhjJSJz;uqydsbX}ooWGtqw20d3dbn%!D9DC^3Cw$X)1O?D&|-tFotcz#5N)<~*4 z60GeSZ!F38hRzqmNb(s(0WV}a{ok$+vGFV(qqVk|*OEKW^9~tTn9VgJr4ce7I3E0N zn(yO1i6gk3OTPr0S?j@sT0(0RCs+olYfLkepe0QsCN=)tey)-X)HSl-`C#Uu5T_wm za?E$O>57~y34bZ>B5A`BuNO^N5~`+#0gpIk`X=_B?0~{A-3HQLvDsDVrh}NDli}LckIb95UNl^LfP_zHA1>Y`M~+*m8632U{7f zrS>^$t)-%08|EtQ#M9-Y7S`xtIA6b@UqZM@W6s2qo#z3^=lg!a07dWFRe{BerUAr8 z!tk=HD~S}BO@TzDpEH#hdhnU8R>|BDMkZ?^QLK-&k(xe6OM-8!-4rasuL!b6uQ@8k zVM*3mchl$v)P|aXiLRE{TfGe0oo?H9nE9&cyuWxx-XXQvICzYE3*7Y|-zE%q)0HB( z=UoAw>*CtC;d^H~a{1rmKW0W!1Af3;6SGiB@X}%krSNUEU3zFjm_=UgEe`y^h{MY? z7Dv4UxJy{4v);b=py^WYC1=a(Gra>Y!FPvaDJO(XZ*?hDEzMe7nP2-)EBknG|&uP8py;n1UeIyD6g? zQj=4%IKMhrJc-775DwX#<}M#hux!lR>-6b=>dDh&nmeJG$TBRK71%*Fc@|n{9k{T4^33v-=l`}B z*R;=Gnk(X)b*uX#QfUZ=Dm$QaDYXT=<}L06iu8yv}{gsQ_cGs7)a#&uAZSy%=k7KQ!HSE@I;q!AYWttcr4)GhC_;kM5HRrxE*Xh$W zZ#S-lZGL@bnzM{QfZv)LxjUP^-l4(ka6b9Gwi*5QqfX*F$vV`c<*D^u#~WbWfB8mM zz<>st{F)OVU$jaA5vHt#h2Rk#)J7BqvT-afg+Yfl4m2y+5{3Y#zSKa$#`^IAkK+}d zk7^D-{hmcu+8xKEVrj=g{DN0FCn(xv&D-(*!+Hg4r}YH2$Z5-HMYf%UMn7`qZFOtx z_m=@guD*6owj=qFlVZvj1{e1$XgLL2!?SX{#k;WM-z6&9b=imPip;m@pWIV5dA^zk zfBo4PU)FK->!QZBc0Jqw3BY}fvK$q|yP=d3hK`WzabH+qkM85}VmP~BWi0R6 zg?vJRBeQ!pqTwnk??sa0~M)2hTQ-2+ZM(^z-%)0lFcmw(ig|gs7;n&8xvLJ zNj<6pZV8aNsDw3E)!>6?I$2rBa{cbVq7{ERECoEe3vR=Xul6qlg0`W4!k|CFIpIP_1AN%MhIfcZI$x?!zjmiVEtg8eEihJa=rufZt$l zD~>8mEn}uavARcOE?>GQGhLv5w?h~@J>)-k3~yb0X#d9lr1magbHh4h(Lpkvz0@u| z8@dNWMFNDYpDHllnt0lKGo8A~@CeFSVB}$$AiW_1MjNfDg8rx<_M3fzGZesqpz}t^ zaG4bRO(6V4LVD`F@~{O_wxcGX_?or9Yk-zzjQ3-XGLFcpM|lF~fIyg{3I;;L=U9D8CY8v;JfSkHf}m|iZPN^`?}Av?NYF zyb}Bgj4JXmD~9PtY_o#_85lxkxB^nV#|H&_128Tfo{T**3dKF#*nX)zgBD${MNdZf zz#?XZY=csc@wdEFY;@i&v{D=6r3#-Dys65Z(p<3wT*VC2lz2ffkO2cN*k#0duKAQD z^6ux^4xyrBbet4-GMWJ--t}=3wb0^oU%G|@rF-!*Sx! zjg!0dRN9LrMSo`&N!*YP-mxGMYDh57i2ilOKukS~S+DnD-nECP|V#?5MG z*~a4uBOi0Dba(VcFa#emqy0k|Wk^`IVhf6E&)&VOjh3G?a#qvj!A$)hQ7EjY@ zdkQura(h}=!%%Ql>}fiM1hCjoO$T|+b~V>fVzoz+QP~nDkFj`r6;do%zPoQMM`VR|mbHJg4vUKu0C@gYn>xb9(j{1T#d}m9-hPDFuLm`hbl5 z%FBXcbCeSVJ5X4y`sZfg2IK>;UsMAAi$lcmP4G{hrfJ+%nwC`JLp0oP)FpAO*nIgL z!E%h>2<>Km+()V%?vuJz*r#YZQo0IPbqLKG9EPl!6X^{)M@h_KvQP!0#mbnm&E8bY zzoqT5yYHb>jeKaWn=_$NvVr;jOFHtk-RIDFl6^>g;xG_OT|?$dF#CMY8mcd0^0lG4 z@P68}j&^sm4l+ZpQ!mGufMU-5QX#kJv=kD-6bvW^amGVr?F9Wcl2nMimd1gL2mc)s zyfCr65#g1{i8&qcw*O5-(Qn-1_YsnxTKsH>dZ$Oj;74|c)~MOgGPWkAgpnknbQPn?1x^7Zwgsd1=cpdk z!iq29=?p)L&BY7@B@DXk?72;glc@c9e!5VL41}BO1+W>-oxWC7`S?b`-B87^9wYdY z*!pm*37l9PpTMvJ61W)m{6;Q$qowNOL6rwz2<~qyY0JU5Mbe@{z{hr1gCuUYx<^0p ze|nrQY{;JTmWJPq+A)yld?0+g)tPg6_I$Q$2sP*?rLG5tmdU#@Y+RfoOX-(q`oIS4 z`$^@!zl0yx-;%-&Crt z8Dqt0b2a1@Jho&k8DqniO_7v>GQ57t+;sY~GZ#_fzv*B+)mNRqo-S)%ZN*<^1+vG=6n)exGOwGW1 z2llPG*3iCCD@_M(ZARB?DLPMVG1MpmpxT33Luu)OBN?|oE)iVQ82lNengV7)ei4A8 zfm9fVw><(eKEG370=d=ndzO7QZSyc$6+e2-{LuEjsoi1?@?W*oD2^n)e--NtWOa`V zb}~nt8EOl)iKGyGWeO3KiLtE}IOB`xOdmm8_!FG@JpDELWMqA5FC_Wx@VXE0M#Ff6 zDV73yQx`h1#BEv+5$x!f39phUb#75KwemiASf#i%xEKZW7&vMmW`utpGPUmye&$y? za3A?N!)?Q1a^SUl2lt7M*D)a6VzRWJ?0I~B80CV@%?U@+t3-B;Q&VzEtLv^xkY2-8 zP<7;;gnVfi+j0F0iF3l4-tbL35ZfyNLqNR0BoT?GI!o(K6oh=t*6OJ=p&V3@)} z3W*{^*RtMAQp_3qwDg2wxY^%b1FqODXHIbL0|)N(G#}zjPKJMq^SBooZFi7bFx1@A z?~0MgrR9qD;2OryH&<89iD6w#fU!dwXvxbN4>Mcq{;(j!znWk;!5X;<2!bR5 zo&(*0_GkX#y~61xNRD0>Oe8rljA}cA@;-DoCZZ0~xI0lD?w;a13POha;Kv9-XJLxj z0j{`V&}O9{3Q}w!J0JQ$c*cMehybXC!R1Pgx|Nl6Y^O0S-~c3=Y4Ea{up9u*N{3|q z)tV0l{qlDu(zF89-@DwWSw7AXp)t7Tq|xPpUVZ5FjuL6)YVHha-7hZg#=wYj7{;NL z^^!=*9K(7AkYuWs@#Xv(1y-fhw|S5tH`u>;JOn5L(ZHJo3eaCn$M0fdw}Vtcn70W? zhlue(*g@~)4SJ`Hr}k!B>kZIh+F?A&Dn>0IAI*F9!6xifastE$XpQoR+a?r48!D&~ z4>O$I(IRK%8oLZ>(X%z?-}vAFj-fP zy!XUx+J%;p15_-w@Ei}jU_Yg7i||fhr=G-SkI6eNGF;3+_Y*h$c>4!PgbdU`42k09 z{b3BJy;>y`NJ3xvuwxWqRvNM!fCoKV;UFGTKl z!x$ov4jzQv#YTLk7K@>cQiX6bd48PpW&ruf#Nzt}B?s*2#>|%fm>JOJdgX39O-Vi{( zV(??G;ON`wyUO2|mUa-OtzIKNB~^9h0d0&0EwQYEy9bP95dBjHXZYp7O(KP1H3vzR zd_#Fsdd}|Sx7FMX+!FG_yNctxw!8&2DbIBAMdP{`y$E&Jc9V2Y<&~HU=V?(Y7!;#- zRRh4`b%{9=RvGFI!wwGy{wo z1HIl*nYy(3P2nP414 zc5q1K`Ayb}?Mu6flUf0~uZ{$#Xg}h`+Np~w zs8a}l+&Gh_DaOdw0p3eq-r=U|07P^0C6y(LzRB+$dahU|CY6|4ERJ#oB#%ACf8t?X+k;UL*>o6A<=?P?r;9ex%* z!$9~%2)$~O&RJf~8B9UEvR@s|C2g&_tn`jY(-|X&8P-PO(B^4qs$_CmVtS1>=g9D^ z-(=+1{FeEcBd5dTnk%#Vfn)-%y%r?ZH=V_ko*w!D^@m(d)0DqPa;|>BQ4L3Qky1h= zyXjDSsi}>N&3S{|bEG6zLPlDU2J1qCBdG=Q7Sh`spR@vu`>$mn03gtA;FsW~TUcq4 zwm{Y0C>;r-X?b8=1ycB;Jq$8pFLdnC!NYsn9x%>1T#fJPKs z2sMwE8kIVy^n^;d>&vuXXrxESg0UULJ{49K?<*kMKS$;j)DXwl)1u*Sjcybzd z@>(1HeL*rmKx?5(m;Zu8k#cUy!T?;F@af!U+Q&FJ1R)7Tr35a*=V*0^@Yp7OKy^_c zJU#`AC??Jv4G*aPz95)X(THv`v>Z=$`m1<=Hwh)00=^I22R$H_qY1j9MlMb(6fL;6 zE$|4Nv91aek{GRbLrRAtrANU3-za0?MC!|ktQdA>ck+KEy+Us*vVJapw zz#~}&y0N(JpqUjPgO|H51o@`D>s_!fIv&R<-q&v673f{uMl2hPT{X;euU3tZuGA&e z1EnJ^L2QG7lWJ}d#TyTvOFanFAfA_Mw|$k%o^!;Ys`a&~o5kn}tn9s6L_Ffv$cjdb%sh=!^6eA@9 zY5>i~IN4jLS&$HYUv=n>B$(2S((#MXuEccBQE2NTSR+5+02$&<4~Y%}%EC%F{e`Ug zLV+kIk-Vq6LtU{!j?h1{H*_cBu<|pi$9RE+ zH7@S_XGRGIkDKOI32tmo~g$DGe-}1E(`Zn6cn87 zN(hCYD|r})Uy+&~jfV5NZa?I#Vi|j?o07r+kUKB}q0&4S%bG0Tz?*v$Ag>;3>#{B>Ilf!=Xa_{tYM9It`u;eEvFP50*8G3_+5Cvae12{wqH4*}sn|l~aqX23QmIwb|JzJm zz1XnuSr*n? zxTr?7iV#Kwnx+W+zCe~r2G^>~(=qb?$4${nNaaQ4uq%d}GH@zKxGV;I#A5Q2fCk0lNPMf%)_`d2M>kVBBRAg!v5}s9{#;;0*Z8sGueTV66cF802Mi-nb5Gt7`8RK zVZ*S1FJAOjAT@s~e?i6Fvy#YxxV->QShFv12 z1mnVgCbPSSeIbE?GyRZfP9!t{OUvinjKPGO^A%3lToc#lsAHIJ|Nar!%_;wPZ~C|T zvB_iasJsj@ioeVLts(K_XUTgu#(RQT$kWNHjlGXEUpq?8e0Zr;?;V3{q{$R)cuueM ziJMQ53W+MN^iSY7I43NOC)Vf~C?|eI+s|tedhgmse>HqMC|KyYwMeu~FlRfg;9g1G zg9!^uFh60)V!~{Ym6=(93`RdpX75SND9MTB>b{90D!vC{E9XA~x0j0`m_>EMLIx)5 zGqg7n&P3EvZjT)^>~Nfb%k`&ucG@-fZd45U^1codigsFqLPW~|X1ayYk~X;6*p5E_ z5Hs6A>=^Obb!`te<`(s#Rb(*cs#J$O&zf3?4XTc#$ur2QjDa^fg2_--B(|4Nv18uT z1*t^054=NFCf0P4OAKVqH74nSofK73Fbf{0Os*(x-BSWGo?wXW|LH-ur#VbTXbQqz zL8HhO9Zii=VKZlMw6W3Ab{wo19AS6|={~5S7mafMYkGQIMS~k(F!>0;zH!|vaccG5 zWbmVej#Y}QtiTlLL`&CVk%QC*o%thS>kjMC7c2~|0oy2AY`ioya!iln^)b2o({MFB(@UDy+2o5Mx3 zi1(}(oqJgo;_y$9DAJJ2KaWrDO1gr6N>RH7*`gEr&^vxB+MjpC( z;#=gcq*YC5e{&UBu@4s6fgK*alhg4XHj?%{#T$aEKr*&41oWCyaq4d)Hh$qvHfY0S zlseybX0!ub905^R!7$$k10;aU5U6D{N*|dYM#=uAVa$GXp>g!C)whrL{SE)ww-I|g zc&-l4Nuq2ws)WqtRHEKj<7j$tGI zT|d!JcYIpi_P4Yb;jHFE7s~{xt-3&^*ZMFr-Kt$aB0-I66^*U*bPEe8{SkvSv~W^9 z))E%g;U5fZ^h3Gm+S_^{%8Xrd9?gF~uO5MP`H$~*RpCA-#=DsKkv^jO$^+)S6EG-s3yT~`(uKEgo* z*~bquw?#Gz0DO(Uoee7yNHT=v}8@ zp{LADg-rrTS~oT~wLd@kb2}SrTifgM@{7lgU$}U*(vXgy69uluKM)z`CgNX=KUZzc7R5-#`%?AHr z1^E=y0yC1gBgrzysFO*GoHoIxr`uj}QlpheTwP=*pSWAxwK(94FYgPoI%RsZ(;n%? zBvi96CWTg?%9BqR!iwdorwr&s`W9(>N)@0B*Fk~}rDr->iR?Ffb%l1Zvop)yWQ?tc zevDDQw9)p?Khgu^Q=C-1^*GNh1wF!~;(LtSEbNX=pDoErt={3!=xs^QK~w0Ty3+N0 z)|Z(Em)^JYb9LcwFPYH9Le&nHUomUU8U)ja+$28ntKJPjBaYONj`R4+;dU}3bf{~X zYWKqu3oOI@j=P2MOKeL0!JgdR)y1z4jzHK?925Yxr$|%Nj%n_R?nG@LtECHXfD7rY zjb_#O|7HXYQfB*PtJF`D7}Kn-Z)5??(kY z@Gr6P6pNJcOfeGwn@M)R;Dcn!)@rhe{J@uLn2@|aYn~$TWlrp#mZW5`KM9lB%kN#g z+@)Ve4Dx^LaKiE_vdg#WH}1rx{t(K$AeYi!2=ydl(`9zjVJu@=1odyW7qJVGGgbB2 z(oeVs1eOmUZw*B4%$|7aFNpgxWzs$ASD(HMP9i$nFSd!i!>)$}|9O77n+ur4NgZtC zx#pSoOTE2oO;nTThQA?pC9oI>D)7IF5%50>Kh1IU6YJzx3LO&US5o6yR$GQVHu|$i zwJEKpRi|ev?Yn4@ab3P9Nxt;(9b#(bo(lnI?n@;1)@qS?ufm}$r3D{YvnTvyGDr3= z-bI=w^sy0HO^%Y~BBGCk$sGzE365vc;UpNRaTa>21__EZ=zf&xmUl9s)(=e=)uNGN zY+3#dZnhvB(1L{*`)>CsZD_|GaHTE2{?FK|*YBsGtQP(b>6~L6`Mt3b1bKPxzSMQe zCX1HOk{SB&B5B~X`yu8eDj>(+EhJ%gW@?v^oqeSSdvHos@pQt2;>aveoX|te-H5VX z7v>{WbzG&kotKud@I-J|3g*eLai&FQ2vCZnkzX|NwcwohX)>=5+Y8qPsFJu;#pe-W zpf^Ld;R!4MU@V)Kmh(Pmfm)QO*7N$!-~ZlS;s`6&5FhSuZ*F*Mu0i_VVE-)v+FEs< z7-hAAxbGdPA(&Mn%NK^Q;42&qpUGfz)Fc*`my=U4wV)K1PA9A;u=1#4sg(bxvpWc9 z_tQXjjAoeSkD!l)w|XycQbqzg{?#7i(_Rq!-o%@S#)0(rfLEigw(u6mGv6ztOx36m z$Ue~+Ca)>c^6u=UR7!{kn6k^Qi&%bo<=qGI2DFG23s_uFU9V1aB#0T8kN6Qkf0o8c zE1fb7S*@QJ?t010=b1-A9(fEfbFh;uEbg?+p;t9C^#u*)JS= zN5mW^<`=o$y8tjnS#RLkesBndw-(Sq`j$WTG1tv zPaO73``J5u)Dp!(lrH<}P#!|cp3VIaK~B=6&Zewc}z z5^;=8yim*nAc!&;f~a!uNp}R&a%JZUg=?IZ^LC@C9m;XYjwIUp9M`wMTkj_QU^K~r zN)SY6E%1KKhQ{2Mct9jq+oLDoDo?1B`k;ym+4NaziR&glc z&aOQ(Hpm8~96J|-)wQQ$6r4_{&c_YWBA3EGKnaFPmwN#YK}lWaDB&5-NEmR1g_LBU zx&_P}?p&U&?HGBrN3fgX&ZH(xkY8Xlb7iv@ZM0yJ1$eA=ehUPxczJQnJO7B9gKPY& z{GBayJm3eNeZkj;@Cd`t?S8D{-L4u(BDs>ZtuWkF~99;WQb)%j82z6y2pR4_>{-d7$wBoL6wHTf+ zaD8-!t@;pH-o<>s(a2PIs>kS6g=e|uhKlC@D~PsF={+(Q48Ye*%Yu1?1=D7WZ2iCB zoKj6d|A;ZMc#^JQ9?6Q~^&{}#N1sfO&%@JPIEnJRH2IQFzY7UB=NT}qlt;A!G*r?D z_21JY-BS&%@o6t#c=fKktH@9PRna5A;M3IxScOFu69}gQ4zzCH;Wf}(o3_=N&uf8s zIGBw@Y#;{t$XY?kOcwU!l;~HZsvyV=xV)RcE6}aU(mvU*F`;!uj4%WUG9@E+!%Li< zPimAoVJDa*l=_l`oZjKf!Zp=4IVb+L)X4lS$hlIc&Lw0vIaEI-J|q5muJx?SL~~{nGc8imrO$wsLHXgT6L% zc83zv8g zyl*i%b4r&6?3CIAYDEjX;^{8&=V$ahBK)#( zUUGj(L=vwu*-DzEMa?YJ$Xt~;gQi*&3rY{(LN1jd3j3_``Xu5?+ggyRuc^VQzEj^F z@?&7r`KdWCVv*UaaXCWGZxOl`k5>;j3wn^+ai7imzZRy4Wl@B_r3 zOdpcmpASNiMdn2GEGZr?6NeKos|+A{EU0PE?MxTusPfF$`yCw3G(mj}-l}{9ZWkV) zb}>z^-s{RVrO`GCFH!YKwp}2~h$=@z%@R*~Y5GCRqX3(of53T+8pN2jNH@3&S|USf zze-O*j7X93=3%MzcF5ltOhp{uo7*z&ND$983{7Oafbi)aj;HZ(u)4=wx;Pgcm1NX# zPg#K%0JhO0>#3dRn2PV)!R&VK+qb1}`1s zNkF2xh(y*|?-qjsiU<*ZT?A%h;H>m~BwtbfXX1wm>67dZnN;*X*^a5h+;z3YyHS^= z+OQel1#;^Y5F@Ar1@$->_wGUX?Sx*WPr!kfUU0)5HZkg6>)9-Axeo%3fES*jxic?a zhSvq)yfi46Cfj<=ibUulz2N6ZaX#Xnc8x&~WMM3aRoUJb`H|?+PX5rC+-bt=BXL)$ z;1)M$D(Kl3PBbu|MX@Z`|!vqG>3pod_&=SoUK-$+INux=R z?REzwNi#n0;r z^6I>h=h(T7^R6Fn*j1+oeyDJsI9s>SDRF`y{R1rKHSa@hubIXPNo@8Dkm@Xg*CrK|9BdL<4>%cA2<){}_x5m=GRM>C#`33(H zeCD~zGJyPZa@`2R{0_VpB%tM!t(zp=uz!2?O+T*g_rp#5_2KSijICUy@AVO`21)Y$ zvak2xExLN0x!e2hL{r%B_2l=qITmm+ZPtOSpBG8pNm5h|T=NGWU>ooDnG6OJ+6XY^G0xb>+ zKX52CN}WoZn?=Eteo2CUnRpkf3p*$f_z8!R;%+vXAs(lTkk?Egow^-D`C4Fz-9L7o zEk{#q1k`&{fEv{&)ghK8!5>8*T{1hju+%zMWcq5VnS|#(VxW!&gKs#D)D(e!e$@$` zq^%&4(wN(Mq^&deN9mOtbXo_IkJ*o~4t9_%qG9Q<|Xefu9^2Y|07kEK2mI2X>Iv6H0E>AcfyxZ^2|SZBqSzZ<^c zBx6OFZ|#tV?>}k}!ac2ZBSx76o-;#zRN+hOrzb%_U>=e{9R%;*tDVKd`}u)Q`2P-I3d$~tr)pN4l`^!3$Dm1gIkXa z75Z=Q=AlKd+feByMUVCEM7OhgzV|>B+_WQ)>xh60|1gpj&2NOr% zkO)c+Nc`ySG36do3M5+~0-@nAo+1@wAn52NkdY9=qh3+T-H=~kYX3w}T)ePtCRzJ) z)CGgtZ*vvFwM7?)bQayA$88b_N?ngTufb6coR&@nkgZCXW&Wae(0(G<3?g}j1wU+I z*M5>OA65JbRilTRd1QP$1IhnC{7QR66Wr1t@S-Qk5GPQKp+$QA*fbT)Htk zmTf3vcCh828fdocEsu;_Fp|PKqO5?k*5=G;G}Vk%$SR>p6T?k$#%hJK5M-ZtlG#~i-Q zT<9!FG$<6Xx1C-##7r6u1fbQT1mZv?eSsODIePW0<5%%`Ot#2CZL95Dx&_+?Ko%d- z(~5+Acmxk(s+vyEc;$-Yr^Pwo07819QDp0DTAEinw9CUZvXSn;v=6{EXEM zQ7R?AMmHu+lE(FLQ}yeI9e*tyrK0AjrQQNPaf5}e_$u;i2v*BvTqVRA9KZLKOIS|c($DWyvb3Bf`2qVa@Z(Ed$O6RRxUP== z`uLY0YBxrVL|$>@QD1wrZn?HO$vQ0eq<*xQPn$}k9Wfc;(yhX%=nh}3zxI*69slFj zPlMU~T|XCfg2Wq*AT{!YMuSEt0IFN^SnKBzG%kgkgm8Oj+9JZng|+F>qfv;3ODTna zBKBJ5yCn7hPh5{1GHuK!&61fx?g$la?`PGD?i1$ueu9){K9bYJEq}Xt7F}4cA&ZZH z6Mp);;IpeL68UnqL7adr6OlcrSD?wsVns53GUX0m2^(F>mn7pzCN93`uEg^;ev4zs zXwlbQeMPu&Qevr8MDUGi<&ioOozXw)-|v?sNizYAm(d7nmK-q#jbvdF?PCqBb(9Yo zW=1Ewgj@H`#agL}D4l8m6thbWjl1uF^g_V6H9o|8(5pb}N?b(h1y30n8+9yzDYv2r zjS`3~M8EK_yYHShklI)EqRup@zp6-Tuffr}~$B=4N;FKTCk5nAo;8sN;3PTK|;` z%9ENs&7NWAJ&rkIXS+|qAzC9Hs9{10D*AIW*rcsM$55An4rJL5DQ`!vdmFgmPk1fO z@1P2uV8tD~$h~dW`Xop2}xWI zM|QnH*P0m-npyjLo}k^K-r~SWn`A-dQ*%Z|Ti3{CF(iD=^PZLD_GE$;e*_t3w2|d_ zA~Q&D#kFB;qimI7@u(02S-v1QkIt|>4FA;WxiWyPU^?ftVdoYGD{Daqfc1dWLwMtOCSijaU6+g-E}~ z9wyG8_C=wZNskRHK`fJv_b2`49P*))idYJBfyNb9g<+)J3LjfFNQ9deWj86XvZ`zx zmRou3R*p?|e_<^l2$mGJ+j>;Im>pqCg%o;H;*w!8-cEx z2pF;~OP0y9VIbVV!gy07nd4g2Y2|&5GB{MdohFU1tJDlH1N;fflM`{#;LONr$6@!Qx_IEm66$rO`nU+RTE>JZA!d5HHq2?r!Dju8la&7} zG6TBSlD2kHH-*sCcf*H@-F}xDA*WfspFZUZiL^O3ky||JC$p|stLPOzqH_xuwV_t= zcX{PCPU|@YZ;t{;B`NJ3lGYVTS(-s)6Y9W0hSCn8b0<>e+U5wf*}(JfL{OEwWuX)4 zn)eA4CtVjpJ{aK1x?}>0jT<8`Tl!&vD_k`36Iv^#VJVmAjr*2wn;;%#wJ$42Y}LT~ zIXrtN-#b21H*RB6|HQeJFWJoKvly8Fsv_}XYFA`Jcjt%7dSmanxJy8`;kuUUf@#rk&n|Bk$!-boD)*dp-{Ez#HH%IU2icWQ4kpRSnz#LrvffOV zFR$Laas(8`=ndv3gu(R~`VSs3egn8JNa>BmvnOV0pL&>v%XEk-&?sJOlaY?IoVzL0 zXdA1iG8wk0{dIB^c$`i-w&UM4=@t7(E(FH|iFbtF2?N|SoZ}r!BP$I!vioPd|y5ucA6B*1|xdC#5(23^YgJCKVZ z|FHpCCPMk^1zdNvP9H!nFdVC>hcf7a5;hqq$?gG6M=NQa6@qV&f6wpFI$|K1O+8zim6cFm zZlGy>b@f}*sNH?W@xNmZzQpL@*jUxoS%ZXZF~Y)f_)aJ&n(ETZ6j0*^WV-D;${}rW z5wJ1$MIyM~hRRG7F8qXN5#F2J zg0(eoOZz7~fItMQPXYsdvIBT#?kab3s!XT7XDmF_s$_v4X$y^4mba}N<)0=4TzN3W z@?B?Rz1_0Hz8ZLv#@5NiYZ12ekdv6cz=L*`2IbP%wtsQ zc)*BGDua)ZgkhR(B8~Isv(NFA>o4f;0??j7M8|*cj7FOdR`ayXtSW+aUM9~+rJP_{Y}&vmIEfP}lpSbypf;WVj_!pF zL+STJFvzP!#@QW~$IDq|+=uZq!$rrVL`a3+GElSs7vx~}rXOzBDb`f`NN|%J04B8E z&PWsD$pH%KR82gp)}Tyz`*t=TWkSYBouQNfNlb(}{}9;_m-WTQU)bxa=w7d7Qx+zQ z@f!pElLy~?4x2~pRgoX^6sOlR16js|8*_Ii^!9M?n65p^-hKA}7j~aClt+*lB)no@ zndG0`nWW!mt)~Vn4bCh3oCA{etDrpYU+=T6u*Clh;{tSRfSY@1yceEJ1P zDvYIi<+Z};BHLPmS3fNMtDPG75O*!W+#S8hZqUk7ZTS(*SGt$6`Q>9hNgrEmUuSw} zK~s6LPImy}7Dd+Cs<&b{IwN%+NSD$ito*U4>aRV+9r6FJ+enVS5~H;%@=8H}g>7R7RVH}Lxe|Oj6;6>2JzACz)nuSud9@q_wN2}_w*=pyq|qMz zP&gkRQ;<7)=Qw_(UdiF@J7VH?{m1H0E8o?e5Aj9SY<4$fgmsX*KADtC@NLt8ba7g= zwPYu|D6@e%N?AXu8STaqX8UJZBz*E!A$ozP8R1pylVPe~_~r2CWK`Acp!2bs``R+k z;~gh|sHWbKD?7oii*(`?*#(=Y=^QiZ&zMkUm)s82+JaLJ1DVbW?7NCAeHe(H~9~eW%%cn2GY)LX->bjafrJ_?)CGeX!+&-_5k@j2c1m zgNDRlkXq~l)P|GlB(IPogwjg+d4iZkP4Gu+KI~7J$xN8?lL-236p#IffswByvPrO7 zUR|x%53}a0?fg?<4w+rPNOoF=>7SFUnF`D1WDJRCcL~Q?S7aC(OruZVO&=scEj~3s z6vg9>_;&lf`p2Reu9%O-;4Eie^#C*S3$NJnmhje$aX&WWqlYp0#keKEswH5pEksEL zwt6OEDfq~IH@0D3;^A7|V8UaNhU7rGiT3MZq_F@H8{>lYfmqd55zf_^;lOfm*sQd>-(TpOlW3(j{{@S?6u$?B`7=y`Pj6V~cT9 zaguREoq!EP8T(PeEkELGaLPhs&Qj54f7v7~_sXqO3Uu54Z1i>I$j>W`I%HJ(m3H;s zr_D~~!P~7;v+cUf(PRv38vg>bZ0Sp)RABAqd1ojm_%=)|m)EDWmKN1>>-#&d>K#Ar zhZQD#z*vjXN?^WaVLw{d85?rWZaE{7@Mm&?oX;18O?JkIAs+`uB*GCeCj({s=!RbO zR%7{q%3qrmvxSTb^u3z(A}p={T_xn2XEQ{06C54f2y|%Mcvo=wX#HJe7)2nx8`PVy$v8+Lm|EmXYeV>cvH+qu*~UgpvhQ}Rq=o815i_qK=>olp_zM=+kIhZ z4}qr|{#G!S7`&wQ-YUnxllN|lPvoMmp;jZi;3S0F6kAdFuu zref(q=Ew=licYLn;bmwHqyKjVV6lO2hu@bW?-_`VWw4CjbC(;b*5ltkpI+(fw-Pom zJMHX!>yOa~mwS87cluy0%A}J90|0`sO)B228^=%HErLll@M3(1OUJU>5zbf2_}bxhV1a>_jy2)p z>?Hoqz`e=a%6j`?C|>&!ob}mcJ=M>=lb&^^hzoUyYa7%rQHiy#M;Kfl>1!Z7%t6uidlpwu$Oxh(e+*yZk{BafuTY{MNBy@D7QFUR38CJ zKfi8nU*L4t5Ph+T7EJE z{%b|Rrbr49?x&g$S9DGSg*d*-hi68eC9Dc@elruwN;;vfcumT#AzcJj-Qtk58|Joi#@N_s2+7)usHE`{?>UU~*o^vG6f5Q&qP5H@GG)miAE4|gx1 zE}edGDW*0T_m!^Biqk9h<>s3w5O$)B9zqb4XB+lL9##M8hIC%UX(sgU6I_15Rb_UW)p^tKiRO=ONyisa;&@m9Bui>h) zXbhZ30ZU<#mZ5DZ$}@W6s+mH9Dsq5TxZ<<3QbT?!Rfv!YpvScSJQ^pqqH-yWxYDt( z4sV?qf`Z^+EPc#trWo5kfjW4=Qmxnc^bVYFq>-6WSu2pj#;YHHh;x2M^lvqQHm+7K zo;-Eo(uw2yFfPZ+kqeKWv>n5MUk-|CS7^ubl8nmXZoHtlD8HPcH|XK0B=XdX%ax#5 zGGCbL=;!C?eDOWb%lwh?Go*{p<0X?%^&_guB{CP^lzDmuaIq6FQk?UhI8fB$AY6KL zdj=E7s!|(rvEn=ll()vXV=IEYE1|mVsYp8sT+p7Z`a^FD!>1T$e|kuzRLmg4wUhHB zB3@0*G>JSs15ayDZWO_(8|zVKT;*YA1=+Weew1319zM9OEJm{~btts4@atm_Fn*sQ z1J6El@liO22BW)6tA7{tZgyb=ACSsTQsJIBce227r(&s5Dqp{73C;dR@Qj z32VAj+CsY~d43*0zosBSt<+I|U!45aOx=i&kNl!24KDL(&s8ZCORXk+A$}G?&lYXH zw*hsdD65}#I%iH6cEJrcR^n!csmR>2drnb>`tV0YB>`tHw1-j|hWW+1Ap`Bd=@~Gl z5dnW0-C%6pLbH0rQ_a$sv9v2>DKn=~Q0KzM72?~FGh=o9XQHM!4#c;--AdaH`?Eum z@)K00W3q^~&aOS{>)aXk2yZu`YIX{l;f?N^^*Q+zFEIcf(Q(*U$s@vb;vtjw&@=F&uhl0veo3m8nyFuBSkeIIlwYFVc|N@7rvsxL}tfU_Al z_msNtIr};WXcO8%>_G9+??(XLk1=jj;ZEd}tyY8ku)o^^_TO*FGd>C)f3R$$QK-+y zdcd6SMU_^V`8Rc8sRZS0abWWil-3h=`jnohk}?k6T-T`A`qEi}{GkCtSkZ=IRIlhm zmj%L%y$%`yv%3|JH2_gEeejjlpl1+x`FfxM)wO9|Oa43Fb-r%Nac&qR+psULy{L9= zx7o{`T>cH#FzJEe6J%Cf_4%RjBVgxTY517JVQe6PB&Br;J0TrxNd+@2zBbYWL zS5F#*A=*9G4or8^5OJVNvI9MfJKM-Y;(vbxz{s1&u`VK!S9a<5&GMe`%f9@Ea!3)9 zX=$)mzb@zz|DzmfhxgTNYQz)=kEPZKb{>!~htP~kQ__qmjE=lJi3Ed<>qrSMCDkRg zfCNNiu?JpJ2M2u8ps!*tYb=6BK}blQxQ$Fp)4y>vyv-mXIRfb-}J7jdsN?v8IydWm#@BIU3p z{TM+_UQY$WMBT&FJb4S6>rC*CboY!&wy@a$2Ks_cR7VHng)#ULRk7EE#^7Z2gQ8D z&kPG{qnm%N3AgB65z#n@_3p=fum`V}&$stC`=7F28(*tzwOVVvPk8@N{90`QKS030 zeb7EXesit&_nqcT*!f4ZwB30XMQz} zl{g}_gTgi)xM}UEK>O^GY_2ncKHuA%BXFoW4`b-R)aJN$q@b~W|ssf}8yMtBn z+Pp3)OI1*ago>^5t_-x&^awb$P{KVsjWxDnx|d2@1%t2~aVv;H`6|xG$|C8q)GCla*7|k42wK=a@`+b79C$U6waTNr(TBM;8NXDq-){=(W~fDpJ+c4u*nil|^UkcaDV`AwiOBuXws9((K3ry=O&C zy5qSj>Gcs$*I}|(o?Ux&dnCDo^y98mE5;9=^tIyh3>pak^$a~v>fZEA2sPl&GYTnD zBGORI83D}ir2QWYsO51HvDM=lYg&hLHyN`gL$l7(A3@p0^<7)>SzgVQV)Sl9{;gMwV?1*e+&taxt(LC zg2xE^YFtyvEJO&-?-PG(q1J$09}c}R7I-D3HRmZAiX4- zlxiom4dC`gfr5p}rKp0(rjEj}=sEgD_Q^Gfp`%%zM{rSfV)U9sE@dKdZa>=kk!3E` zVVn0DR8gwbpme^S#>8`1I>_zrqr9%Xt9i0@+QyBnq3s@o)Br(7< zMOa3mE#&TU7&h%&LpXI1f^)QzQF=lC?I|;gFn;4>O>`070KoW<&Q5F@0Fy=u)1Wif6TFY=w?MYoW9}6i7Z*W70#kk@)#|ExeZO^iCRXy~IIxogHnEX`gR%8x3#?a22ng%(}ON9FI z6bK11^Ys+RDyYI(;v&ZAhy&;^ISHbmtL4w`x8{yj*G!S)smia{p$}3IBi<#5&7ol9 zn$VmT6C@tL8rK;4&>^L814+)GH}N%s)PZJ7d|MDv^+=sRPf=7#5g-?3q1}sk0=*wt-c^L)ZVEJUdbu(r16JzE$kN=a-kx86 zct2KLUDPM-Ev!7s+{493CUv7r<@MZ_9R!KEazdwXD{{FXaN_eLLeLcdSy*048{&85 zR9swbenWpUUE=VS3IOKjjXF;n1fIxeIytWNZ&0iyg)D-~T-;wfO9OQC^lHwu`a5#t z^sl=ek~2SuT+aBbTH)8Nm~>Y7mA_WI)&2`yu5M2I%x2> zs1$;H-^?)b8l`*SNK0K>yJ#q2JOUTiFOP`OCDz5wOOEc*ox0lDvZJpw;cmvNbyM`w zbEO|#WZ9L@Fqs#|(~S<*?uQ7fagkqXrL#*AD{EeMB#B&pA!n{mAQGq!`Fn*52(JMF zAyIM3GTDSYd|f2!Mh&a(3Kw6oQO^yDtJ)|KbNxz@TF_^%aU^*Uh6UxcS$D`I5&X2y zWQfv(P?|;<>d@bj>Nrh`Ipzhd`l$5hpqyENW5uIhpPu>krdEpP)vuq9Qz__6bbZ%| zwMd9{l5Hj?f*qn#m9>-;7O?J#TkdCubEv{1W(8-^f*}(rW*3|aEWN4>kcF#v z3C;BbFhhNurSwlkPl-^hu`uUF!yWxIKW;{1FFqs32YJP4%!APMcK}&$4PclO91$zG zFtb}|A|shpGN!qakvpo!k|vrbL0h`jf!=U#fvF9utJD(DHpv$OBdsfWBy!`0|l}mfI3WWMLunP5kK(t7akOuYe zC_}s{+h>8lo7zA~!7esrl25VfMbZA?tsDu^WVgCt2gt8ZC;6)3j(E5K9ejhM;2@SB zTJweS)>#OSg6K_~fn!UVnQ*PpwERK@yCtu<>z9k7L;$S15nW-cuR<@%OAoFc7W^h8 zY$)U|Dj&&A=j$KQ;@_t<-_~)g<;l(&M+>9`#@cYrlRxwP7)r(JWJqgWXc5xI0@e=1S$t zE}Oi%E^P2(&f1V}=EK@pNsK!vYDL&b??KCXkoY&!iq2CaC3Ir1I+esiAtY=QGZ*Yj z1suLzsImmo>{dM00((Unjxe}GoM zvp}ZxlqVd7pj?G##9{MCnG4T0BN;93{~<;&7R8_2`MY#fGz|g<8c*xnBa@6q-#5hF zTvr?_#yC5w*v%il5zjrosOQ_8@YKWSgrNOZ*C)Cw_tNbb@Hh7N@Tfh9X0hZ&TRFxV$sqZc)HW))8ScA5ZeSdf@ z3rEfAI91FEYy=E=hO0d86kcr+#^vmwG#lNICX;hzui#8l!6*dV1j`gc%%_)G2{LZG zIFOA~SZm3zBp4f^g?P6rxZM`;X5x;r+SK#0HBIV1a+aY|^-nF8f0hju9K1!V0rgfD zV(2GjfEl*kQQYn?H%Y1aPrgmX<_eE!qg22`D_3NP=8y;gaxWS9lU-`SAjFWwekq1!{*v21{Gy^UF(f3oEO{UHzaTfxp_p7}i%Vss;wy`}qMpxp?Lvc*F7% z+5qz>2gkX_hCrM3$M!9CG-ZQMGidBFb~CAQQW$a(Rjyy6mDpJBi|hq=p}_l@F$sFBDW=eg2n-ukA$wIy7n^MDOZ z4weA7mck#HVz7hd)2%If9EX)r^WKa&)Lkhxo9b5SwuwXvM|r=;A` za$DhfE`c$Y3;4QWOU5Z;w(QJBd2}TUi>ft8+8yOi& zsTzX^$WfF3mL(k$pJF%;?uqNR+jpyEWmQ#0L8W?$yC9u98H>SEA_9a7sP5eJtb1;2 zgB5l($Uwot08$BY2q4?5GOGm%nM82)hgp+8UL^I43#~FR$n3Aof$SkWe2gN=FaL4w zBVqn%w;XS$(lJCYrz=F^&@~!_{>z*tSdKr8%*257DM|#=DG83snWGy~8qaneW34Z#AmoTK&H)Xm2!Q4tf#7C-r`T{B^nl#1 zhz7A!3IFv)XP0udf8ob5ge@VBAfuAPR8n|h*_cAhr~@sm0(%IX`}as60)*b8LAiEU zw12?4sVQN>T-!%zsr2=2PrEc?NDhe5KRrVmCxMQTl?LCpN$#3BHHRz2jPm|8bC_l6x(P)_^?=iDJ&z(wPM+2Ng6uV!OjlC?D82 znh=9%Zea!!B|)7p`%SCNEh$0ktzQU|FA|yzB%p@^#0X_V&Q2_! z?FVNARCh&}39dWPnC=QKncPh6SllUXK!v#(4Tr&esDvj#`tw z)p~Sw1xSQuim;nbj3F2#EH?X!_gL#8e<{spHoLHkUh?C=l;kg%lpBQAbI%K1^Y}Be zTArMmc>cCv3bY?P(UyQnpwgKiX*zvDRliSQ^VSKpDFYhA)t%AUo|7BaK5SeM&K~aa zME-|nrP+L89XOfqbz7=c+_&EZ>loNzMOxRB> zwan9EepS?aw z6eS#(E*Y&#w%6f`hO#3sLA|9q6j)i z4QtXeFs6JQX>_NL*-sdC=PyMcR1XK?R$Cpu;nzSvn5aIAZFL?Vs62BrK91no6m2G{J|-B zhT*HjodeYHg~Cmu3)M5%Y-E5-PLz?4$O4V;wIASe0r^PVMBmoG9A5mc@TB0-3%7ca zxX{7rYHR*8Kz9;fIh(9j|3W@&Fw-+&QmJ2@t^orKAxI(N;#|%<^VJi?XDjZ^F{4l6 zi8qD%hzzlyB(OIMZG8onf-@U6drsDhFXY71@r-Zet9Jcc{nCIuXFdBZ@O%Lxk6e?VD-X zGb<{O;BK(MK7&cTQZo(-eeD@Y@=jpvJ%mjEiO1I&)|&?kS4R!6)tCNc>_gL+Z0p7f zx-;#ztR%y99EykPMfM=sT1H$WiD@LV1JG^`iO^?3J8 z$g7Gmm(BSt!l$=r!OzROha$Qz0z>Ah%F$0`t#enHP)3v$K?1%Y9r7uyr#Ci7@dK(T z2C&_I{aAo{mq08AmK;k-c!y6hlZ8FUS9>3xq(n!Ym(N5B=csw+Paon*8DENC$&oK? zah%f$8uR2unCo`8ebX?+&(~5m)f6uai?1nYybMZtt5DhFPIU^s{Xpe}=i0OB`K^XR zh1~YyaXd-5%DneR8j!tM$9D3S|9gn7 z!>rHAci6+uPE<#f!_Z~#WpLZ3CyRli1Lma$B{LTez0ke=xg6-vMOg9LG-k&96jXQ8 z35=I#lId#JMx#8TgRHU;K)F)AT$73rsoQIjc8*{9=KbN-esxN^rI42EcPUl(iJ9gt zWkqNjCC-g%WlGC1#a}e>?=b4;W?CnfPjztIq|-P#EkF07vqGz;dnV0k{ds>A+H8Nd zeeKXyFKF1m~#Yr`KIjTnov>BIcW=65q2eG zF)!mt*57cDGm|eN#uY}U^9Qz|l4tQ-TImFwxw}apq7YrQ)gwTD%_lj7iKWqPWR>uI zcq4|${P{3J#@$d+1M)YiEY53X;p$c~Dl+GBy|Rmh$-{N_B~wf<;=ZAx?bNjE-4NH* z1rexaQzpm}UIHl^0+XVl2pGQ`KqY`))Q3Is(=b%%c`PlwvvS@S{yNJ9DX)Twx06i>t zkqGJ8E2Bb)zwE%|ax;8YQ3B8v+@4x7cNa52;OHt_n$DD+wp#AMfM^5{tBaFm>0Q4X zg})jgr^bpGEcw8=hRe^>VF4b7Eeb-=WS!Hj!gMtqLCfxePUktCuoX7~X$QoyVG>j0 z>*IUywtL)3WyCE55ATk9fzediDJ9GEQk-8oxs+464=tGx*Sb4_Lr+rN#{}JwSzUc!1fCyr}ivmIVeBs}_P< ztzj{SDb*NEkFmBl-5q*mhVd`BlE8--PDO1Ar(TMNG(imk=6n{)wz@v$+#^^&laAv zGv&HKD7|AuRtMJO4z8^QlMJHbF}b7jn~knnh0#35m5!$_nT=1tNxE{30>_OUCV{;e z-}eVQI_bi$70TZ$0;eG|P{q6ca3?K#X|NF{2-XZ^sZl_Umps07XrQW}(u3;$PyV^$ z;{!$bFPr)Z7g34BG9JSblwIyk&m(>2OuhD)LZ6}~d8+@6i=E^sC>%Eq(+LP`b+|;I z8b-AO6Io&xb$8s79IUd(xq*0-lwmUM;t0TJEIP$0$%-!-Ltq z_Va6u6`W9^LAN3mLM9n&Z*ZBCdD%@OSBZtInn#sszPG=>J#B$2ep$g3D#`JR8D#wg zKc9qh5E(?m&Q`{>6>o1qL^rXZkL5uATMJmig1Cj$=uXnol^hGn1o(pnv}NpQFHKK< zh)wZUp3NKNiciL7-gSk0J+3y6ZfzgiJTJH9j-ft+Pb}P`^D>pMN*3_qx?}OU15`@g-=B2WNUYpE86c_Z_X+}-R$rRmhixFw*aUy zg`_f>4$Xi}CehUFP{=MIt#;=-zp}Jud4jJ0$i~2VUr*FyfVm zk}l)P0_Tsi`{$Qt@&|rj&yr5a7z8Crq6cGiNj=EAfCcUZyTYr{SkB@4d;lVV2N_WM z#W6nl^gN@BKrc7jh`8hCbj@=v;zN{pD0^k9CF=t_v2nkKfEr(yM$5S_iM`ne%=a3?xDpn3*?NOEUf6OmRghVUH3l zI;#;^Q;!Q*%WNu$=q)n=>+co)}IX;3O6L3Twx8*|eUJ?`0YtlymD-NV(eWQ+pTTp%K^ zxb-yFDZYb1W;mV%ji04O)}-g<{GeCn>v1}93V|oy7STD7ej=3RSTFkmf)Y zSx-{>bFKQBGk3!w)jjY`Y4C*xN4kS^LBvxP6&rHN0UdB#={$O`orkmKbNIe+En)Io z89JObC1)reWSd+{tdsK@!9ZS&ujx|Rsi1%QzQ?35Y(ZU4wf{uAhX6p64vMjf<9kUs zBa{{k&OIg0HhRV3vWI-%D7$S|!y1C+!8hCN(4@6m*m$=p(S#TZ={GLnKc?vwa#JJ0 zp&`%lTjcD4R5YJOd#{~xMu!ll+`XhDTem5Q@ z==)(sTi(1;H;OO{z!h~}M?)nJI8)rprEyISi$2`%J&uHjAy*Zy3#H@jgrhwWuH7eZ zh^8W5e=}V#f}kHg_0^yYS}2!uI9Cd3V>r^k9??{&_&N?41 z)hZ(-TF$&)!rGh`bOE&`eB*?xufZBuWwND}Pqg^1*M~T0lp#+?={?B`=RGpyD)(bw zFq2-yTWfGYQhRDy*Ng{4G8!tpVW@CJS4{hnF`W~S?NX(N``p-=3D*X!)5vCsqcc4 zN^=}>EDj|gxOH6NGu|LfDWL5(s&}ZD(&C)y5*2ZGXr-4@mmW$1B$bB1N5mNnJrbFo zS15p-yXJ}jX*UjXcyCgx@PDw-E07|5s@~vTzz~T*DsPPjn~H?K z5Iva8er8Q>1giAs7CJs!K*Zk`wY~Jc0e&Ml|z5(BIi7KBYT;4Ohxsc{!wy_(fc42>IEMi=4V$jWYvaTcO2%?({|&%RW&e zLC1o=Yjk(VyoAt`K(Qv5SFQqu0A1w)&j{oYHFKhscEF3Fh}X5mmuPY|vEHt5-Ub{kE!VyWE<*cm}$=l(ESu+Qw@V z2#sN?8ihVq`a%bqXb@m?0oR8kLNT*jaCr}*pomj#AE)lt79`0Xt#l&h`Sg$dMk1dW zH--C1%V!2)v|&Q-Ud{ZQ!kyQoxy+QAygoo7ZtoKhwqTfE=?BgdX}d;$K1G8KLRBKI zSq#=egEIZ3^0Da0Yx*WMgHn^GQZ+nU{0fXzcbM1?pqMV|2W`EI&1T%&NnI8}QPc-*=~iRZc&-JD&9{9sWn(&8De z9Y{r#=bXXRnK_zMd}HZ%f^f0d-|jD4T5lRW!AWs01yB1%eeb7uJYhB)dPQyI? zV80hflF(*f(-qa>I=3}gG6?loUMUur?Ukk^9aqxeY3``sWRsbA*4M!=*6ch92A&$# zQ(9Q6kIk&sAuA7Xln7!k$~kBnWw$@m?~11+Ds|wL5g_EP^>~yx7w;w zIj*Qu`fjAId;|dkhpkuV=-QeQ7McZc?f98p?PIDLKQpvoU3!$2KKE``NYIN{&U+5H z@%laF8q3Q;ozaBd5#a&3E4S11m~5E2>R z>X}(! z{6`C9wb>j)JS*ThmCIsfo8*13_RQwNd&)V48s>T%n+SC#Da-XL)vDn~YURa9rDEK3{d06EJ$~f+UPW9!!Al?2-vtKq{T^Ub=6`a~6xh@#g zxbpla!FfxV<6t&_4Wb6ORIUK2UdYZ45SjQCXT7k;P&`#v`u%l$H61c~n_2+ocFlqA4MCQ6ui~5`S79 zPATMixy2C`ipse5oRNW$CnvTa0p32RWf!PJ-f$~*JTKt>OwE4}oeyO#$$MY)oW4aX z?mBXFP?|it)}8DSw*-i1=(f6nhR0@a!K}DQnt2!4sW5m@nG@tX^7bJ?YEpn0kreiINxpk*Y}prqDL@g)x(^nJPsKftkd%rvx)ezj+h6H+hCQQ7cZ!{nidW z3PAP+qe1ijlP?S_j4rqsP=E_qv0yhg~*BCtOSmu;{%-eOvG1K7;KL~MB zS`}vM*R2HE$5FQ2D=Xvcq>mto#K~v@nG}6poNP^`0$(DdxIKqW&LR0wz{q${{L{Q! zMhQAdGUU;uJFi#7=uNGu<8{W(p@|F@cn_6f8#AIz_~;hH&(CDxPTxGM!GVvUX|SS%OQvC)TZmQ6KiYxUr6=4u^`#utqDH`;rQAJYRxiF z4TrW(ay!#3t9YYbaNSb6>Ium~itxQ3+%8aikzwL**GE_6E9NvVQ)VB}ZuPb>>$Dv{ zhZ3xEdC|%Up77iwFYEt@07psQO|j8jD89tiY{KeDXGX{G_6@g(2hHJQeX7?ATa|u+ z0E`PUfxDBoG+3T@#@}l8ny>ZTIy=BiZn_=sd`1;d_<(c@QvM7Z~;zc&DlDpx`h68LoS%F|ZRPRaThvp(Y&JwMDMKO{X%XrtMy zn7)Zr0(@>LP(f~P8wNB`nR*T!5L$x2SC0cUt_5F<)Of`86Cn4p%hxcu{qx zm0um}!0Ju!((1JyEbYH`b}dnUf3bu2UsxrCe0C-?2qWRfcL~#ej%W3qkiBnd-8V{l z3rO-@Vod3xT8g_{k%bV}QaS=Tp}+(p%2COF`q5*saIgT!j>d6`E+a@3&_>LAXGa6h zArvCG3!}b73Q(c-YAi@}r#M|ed9Ht)pFEW0dSQoOmqFRCOiNJ`zIJwQZLpBit8dxw z@Sy%=m_uMEJ@8V@1a%;V8T;`v07j*%1!*(VqjMQs##Nsu_eB$a$uCHeUh zJwt(KJ5IA_nRLBMS7@Cy3u2pA)BR#s(ghZ9zb_gY*xX>b0l#kwm3k`?Ao znPh0npZ}<-PEE;Ev$2<+hTgNg5hoI@0JRj->xPV&L(77_|WV@enME_xvIy!h={U&?GaBB_kNQfn~`t;fvO3BrQxN zX8Y2(h~4GI_Tww`-r4@U<;dNO#$Wib>Z4CGeQc#u?8R{~U%?}d{G zPC2$VOX5JDRPQnKW1m&z6?^qTY{HqA&Ylz1I?pfU=06Gs>@tIeHIWxV?MLHSO4U2x z-~>7PFB_=zUnUCsQMGIGdzsvA|FUPWK^#1Mr|WMY1x>&9O*>piEoGI(ks6|mDgonn z))offyF$yqGi?`+^=*@9pVo<%`o)(&!NRYf*U1z7*;?_dt8|0zR1?^5*iP#-!LNt! zIUSKMK*IDDRZht-Zmb4*TE1TT=Y{|`deR1!E4Vm34GWW#n7^mZr_kaVOA^B-d&m|A z4ttqj+#(E&pA*=$s(&^fKtN)?vy8l%*j&)BvfkV~S2jatXv<7~x}~`5?i1VU@zsrP zC#;}?KN>1+b%aZUx)Acvq$UIGHxjCkMd}5OSHssT{}U2Tc4f+4@-mbVE5Kcdx~mm- z<9Z1@44aA>HfMq4&s?W(Lp;WpB#V#ZHnW<>hVcCUni> z^}?rb8!d*QEP%1)3UkZ^h9lLFJB2RY0wNWE&;a2E9)27yEM>~gbFbxByXFWkNe;@{ zZQkdynDMr@jvNOUCMI2@fk`Buip-#PFb)i#8L@+`;xIqrQ`Oroi=tv_x0}M;mJ;%# zuq~;5?lnbuvf?eSVaO>T19<_;6}+aMjSNFVmpg-s;ZWv5HE>FZ8bXGyo`?qBs?H61 zp$H~TGA%Q-Y%jEiIdDj-mcD)!7&mEroX^^<=+Jo-{SYuhyXmEj>tY~(Li?+@^7%$o zlmBJvOd)$DXc`ra7qT5%R1$2cTyGTGfzmRU64RvWEmN3M5`OIYjVaM4981U~3AZ_# zk-#HIEVuP;0^Yx9tPxMoh!QQkhmC1yjG2U_vbhM^pw)@15meL_-`d)jKZ4~$&_0t$ zJTSU;Ic*k}N9$!4G)(mpQd-;T-#Jh$9XdG(^`dNFYG@~6q8cAa{WLK&`S@+~Sbdq5 zI?E6CeJb*ivb@($*;x^t%ZN^klK4ITr%3W-w)g>w4_ppt#22wt%=6%951@l!1%o~8 zNW4+ijR)SSX`>Z=}VxDcFAXcB;tjDL+g#TkTi;kfB72TCxA=m9M`Q z;>j1Y#bi`F#ZBuRq^N^sAsP@Gsy&;SxmX1=T%NTY=Ef3C{ud;yUqMaJUufK46=Mk!XWgmR-uKW+k;r0@}QOceooxfciT z*#ym8pzo$?D(GIE7y56aniJ*fkTEfs8zwhms>yTrb!yJ8?7z`=>S%=zU?gUE4E9;#uvxW}r@nlo z;zdLuz8*=t)|s_bVwCkONBnG~UMaXv3ft__acZ~b>kAsnEt#*937VyT@N zIhH7$u)lYx*CdJt?=O@_fzQRv>->%k82*3}FTXhn1hc7e4Ik9EAb@)&d>07wo)d% z-Zk3}v^kStV+=Q8%cCMoM(N|N!=g@Da64$?XhC98Ws?)CMgg!zgvKKMKXWAng(VCzQe~2*`}++~DK7czF_ zkOgGOIYm8YBW@%j|6m(Kwc{?0H+PXYqMaz%P;>}dl3IquAa0@Qh+{8OV||d%rYa+x zO>3Ytk#+yT#1td9dYzQ%Xt9NrNi0O_Yi+I`r*NABbLC^**5`qQO&I zID>R|Ndx2L6Lz?j^vxlNFHR1Mi?BHMNf04F)aqFxRX0w>m_r z_dRF_{P}9$e+kdIp5DTNGZLpAKBVNS_dBSff&oFft}A%| zNlCT%-hc*Q6nb@rnb6U@7X_558K=rMG=(ClJ=Iq1f2X?;BI4Yj*Dd8-kT+Y&%?{ad zFtnV3n~HHS2f36*i;TSjdtzScAfPVie14zMbcv4VS{?}nS)Dl7*s11@9ENSMu7#bC zc>B5`D&<1=`IR-9@>f>UP;)A^gmyBIP^74;c8wYPK$<2V!K__wzWNci=rpeO*BQ1q zpIl^f+yKITKWA8upcaJszPq6iNF}1}2)&tt_rAAYHe%?)bteS@d&0rc^lu=0^~nn> zL09g0vrXq-;29gin$^jrNW2d#9a@qSugWlDUB}ykBunR6x+KBS{faPGgy3L%0+1+)b|eVz z_uDs*b~$w`chZRu=9?xGYb*@eIV(}K&SXI0b7sx}Tytsm9zWf3jCjS;qY70B`3+P} zZ6vBgWRPJFR()#aIo~g_<70+Tv3!mn1dzeUopQAf9*-*lx!fs*sZLzLxPu(*8sm*}nw$8_^JQTI}1SLTC%H)_Wn?!V;8_}dlOLOjT3 zS_^+<6tT{#b`Wqp=ZA9%MuU%zKH~SN`eF&o>2nVn*2>|~@^9uS?HB6EAhx-|ppJc* zNsyJ68VD=gG^=q;p;4lpS7--u9sD5GcN*dXA=5+X^57N4j&so zDIwRzV8>nNGX9fkmmb-%xll(yLuK{}mJ)}ain)DL7{&SMZ(1d6uM4EtF`fH|5;2l+ z3!-XV8Zm3+kmy^@HF=v^PUNPv3x(pyGbb|-FLhv+g7LJsi^0`SQwB$T^w2C9Q~ zQua`cGbKp9YNz-hva5FXjk)w%GdG(=b#Tk?D8P;E0HR!e_~-j@wht&~UyY=M*@bXD zM|r9)+@7mE&%z7GqL=}V&6elKBJAr;bK=k|UapI%R^KKxjvF}_LbLRW>$W2kiIR9_ zD|w>6N{~R!NtQMa2g<>U(^*xo5d=&tky5S*exCc%gNX#DHi*ImhLKuaT-&D7g~mR$ zG=S(o`mOJ6-U}c@W5xVDi%jBucnrzOQY$Mni23*aqTN8^v|q*!j>oB8>0>*cw3{ru zM{T6>eAED?)O!ST1b5W#DsbKp)X#wyH@#v!PpB@N0$g2OSF7#nyq#PkCrMw_6ynKa8?I-ft9{E1{T`)NJdQC2h&Ka)?o#Ic z;gn;1ARs#WxNgz^W4n?V`PtXNgFOU$bRak7yY*$afLf(h4=PJtF~@6ZtTYd{u+sDo zCrG+eUsj2=UN>K#@BTc|$K2(6m(xRf2N=4u+YFT+R2F1Sv)XofnL)_AyNW~vksl(N zA?h~+ioup5w#S%p_gF>q1QVkxM5y3+LzBGkQd6^D>Np$&y$EKu7BT2H^93ZdHd!Kc z0}_;ZfQ6(;h^fit`c8)+VSWSRUPp>jHIq7{=Cy=#c@Jg}M7gb$Ecas)VMZIi=GDwbo;Dq!O7Lop{zMwg zcxu>kuq&mpQOa#?Lf)+YKhW1@C-7P&7(rf>YNJ#~9N7ejeGVGpagj@dbrQLhn41u( ztPSCa>;*kKTG)tq$j84&<#~bUsnc*5gTpvt{fPPikm(z}&sYaihy<8=CZn~Q7<;F- z?M`al7r5#?9~n+|Z1p`3EWsDHCg0!is@0)s_(pND6I|;?jdUt||1soIcbf%XFgUOaf6NPyvlcEdy5SM& z^Y6G2LZcU*c`B#v4@qusswHwuo>6A|O+?4)rOsvSNB{~3sd2Qg*jXQ2JS-9?ou4%c z8i~%E6rha#2nSFSyT%s7xeA9os~B0gI~)WcPUw?~$60%;!Zbv!8&(!Mm8$p{0!j8* zuLj{Y;DW#Dyul2wK^V6EUsZBbt*9RqMA+Lh>nxl6`v)ychPssFnNjU zaB{sEaieE`sL@r5TFe3brH;y6kU%&Bzw-MYSw%DWOv2>A3NqY513khqQHg@m6vY-K zATxag(p#`D2_>uSYEI0=zQ}5ZO4~&OJ7`k0ieXJD+3zR%H^<-#R>e%w4=S zF*`5za))3|OP*lCI9WUm4a&TEZZOpZ8ez;iGdY>hp2&oti!`yrV zSJtjF!ZRCRU){XI8O|T9So8qMdG>5L-)UUsJs6kyU~#nO@ z$FxSBoxmjbwmb*dOE**Vd6ZDa0)ccywB|J)P6Gj#m;Y zDEpW3oNO+%(YmK$rS~5{eu+KMcIVFkIvV{^L<6&6^MkI0+ZOA7r0i3fVhc`>~G8;#{IwYxEv2z=aH!goet1- z9LDd;KpBMe2i>f3F!n}65B{R4ldH!EoK{hFwMH!%CK~XfD5Hmn`7hii!}?owiOI@WmZOJbl$ z1$<-s%azi4`XmMlDS!=BhI^1-z!kjF2RBb!!kyHiLO+3=j)5eQ^}WV4s4&sB#^aJC z8P)8_(5ZqJ7$+Xb*4vjRel6e+Zb*Ijwp)yQ_*z!*TEp&PwGv5H&xQ_Ipa^|R^`E_= zYHpmw@OS`$$Z$xy<}-UyVqE5VikCC_xnR@}ia()*g*LKz*^ipy!X$qlzn@M#NuGfp zWEuE>+JS5EP^VF}f|JmDJ>Be6n7mtuxkBlEVuT2p$!2hpi41c4sMZ z`tue#Sq!wD8h)!D;w5$5xbAzZw?r>Lyt|4nr@&zBD%-N{A*nHx=g9E=J=+*_RK{8SFM}z-G1{3v z{bW*y>5dxO2}(mSw*Jwfg&A8i)uX?*k|Nt6GispP3?q5sC7>m!J58tIeSua}Mm&Jk zG0bKxBZm?(JTFLLqkiBmX{$>_128lpT*mhqaYW{TXBqFtVg~rQe+@yJ3GO?~8ybw{ z6n~X;YaDl+d44MyXZz>#lO2vYks!JnPhTT^H6LP4qAKqE_NG;p@`5qgGcy1d2%t*n z`(+v3KWuG?KcE(vBtq6q_ zrO6B%TY?5XD!#9v%_&mucr5ZnFdM*%r3nH_+A*_01;{XxIOISejjRmUeIF_aG|V~~ z@c$>KB{6zLf_1V{tWH!T!IU9bE!@l0a70h}Y?bw+hsf)%j-tL2f{Bw+6x ztRvbT*K?~kBM%);$$|V6a$7IRIsH~Sbpjhu`wqMekf)&y9T=PgI4@*#jiy4lwpV|? z{8YmFcRx|9#PF?ORLXLcpi4*t`qyJn&jk#ywjhEc|!~5dZ6HW_qIYU7r6X1e)iL)E#KD24<+6N)C);8^e9 zDn&E_X9=d1Mb$!oFG(4bTQ>C<`sNILfk;CwybE>xEe}d5NE!QKtJT?L>GW`|`DQc- zzwOtJH$ZDclcrsWBu3kNlQ)$d=013qr-!KHdu|P_z?$qz_xHeu1w>;Y=7hirm2bu; zNm1?UP>osHxKS@xzZ}5G^C&nWYyu>K9EF~r%5RFbWAq@u0`kq+1{@jw)>F+KHn%Ll zydK#sOity{!p%vxOywdVg1KyhXSM6hV+ah6L?VTb`>{zhG^rk( z0yuhXXIRBz7mBLfSq@Q71opn93N`Ji_jhRiA1~U1q5n%M3B4SmGTksA&E4wlVb)nC z$2M1O8i!uxleU|;w_Uj(HJwGon_YN4j{zKOh7Jh80STaMj$R%$kVV6cqF{`oHyWgu zF?~cyp1eiz%UYc_5G1ur7%nFRJwt>v{>C%B%gP=cV~_T96cMscvIP^r0g>ZTJS?+j zTfuLXo=pY;3VMtnDmJ}v&pi*%0-iPZ_x9=<)h87$1r#6}6M*zAWc5r8x=r(TkOT7_ zqG{+!xqEx3+Fm~sDMZfPlTp+(A08I0$qp0qV(POm%rf$Qx_y9E;a&wRKfG|(3bCGn z5IRJHB}6VOtMY1iD5FsTNkF#0go>{ORc3*orDDqdLLn) z*qx+;O*9IgO`h{?9DPr5xkElK2lx@F7*&A98O`2g!IqR0vMdXzr(Dwj>On6{`0}X{sMbTmkhi15>lLI`KCe=0m7urWaM$1&wHq#soEVYJ=1cxt z|NDdTeR32pkB|6cH`#aPft=OQ#Nr(on^5YzZBi-~_Dj_ElUHn;Kt(r==sRrZA~K4i zWct(D9xSMh$VdqkLg=0O-aJAKG{Z2MF6-?r%X-E$A7`{!a^NRte5eKUWJ0c`zPxPA zlowfULV9t*a_Yj$ac84f%Ivce7_wPdw4}_KGbnD|}z3 zPg8BxZSZr$Y8lUaALe)XCM?SEiPXfdNC1S9e4m^J27;s>({2rfn6{v2rvXZYahP+- zN0V@%%Lyyxm_Z1l!s93cXrUYOA`;LngWPC7nb*J}nNdPK^qGS6;%Q&xFxQ`u{oOJ2U;_^Xg8 zc)fy!0XR~`+9hO>s=&pNvW-`gW^7nT?HmYJ4Az_U(3t5FM8F~o1wgqY7<%q-Apq$p zOp#9#Sd24ZEbr+lEAQ>OpPr!{87&sB-pF!F3(otjxOi%Kcq+TeALOLL!A^eg;$mst zItlbgxff&sIpgEABF@pmaK%cz#g;J4Ji}BWc4IF!hvXec`Yl_;l9DFBI|;IJyZJkhXZKFU zRlsV@aV*DSttr3l*|uK*YPO&A=K`48W=4v7d&Q~XtA2aB+S(4*xP-pbBA6$$^J;Dx z=+NBN=JeK|#Ogp!aC+OUV3(T8Bu^g9Vk(UW?kK8svarnw?he(oH-c z=ESg*q+paR9l{F;hVcA|h>7%Z`ZvT-E(h~eqE@pU!i^wmvy<4pJ=;gS2o&WWl!HWarJP0>#hw6fO^^L!_ulinX8|ZLkhC=^BL6;z|r% zf>ME!TuF;UtS_5pozJAeXqKNJB1=jX7jZVaB~6-?Ol%QbNP1cgS*ChIP4swU!SXOB z*9DhK!QQ#SO6IaScuUW#>bh%zyVs|_m)hsrojIB4{Iuq3FNw zhCjm&>S+>u1Hqq(_-2FSfabsKvOkj^FHUcikrpdDKw5y3`iCiKlG~7oY>K@`zys!D zL>L{GE>K9NrVJ@B854Pms8Ci=34D>34%39D3ss>S17 zPB(~z5|I$y&Rci7?kq3J$K||o-}>Wl3W;cLf=OP4A~4TNFgdWT+soUBX`Sr`LuQ#} zqyfJXvp{Og!D{~>T5O0OQ!_apB@`gfFh4JB^8-V?`G9xADIb-ya5%-tABwpQfl@q+ zSdfc(?T*e4FKvPZ6d|5fWQf76!{dnk78>dXBBK~ph)5Jb8-yV4HtM;n$^m&}`^%qP zyQSXW^ds&RaOaPx-v4o(l>a+=yg1r;y!P_-ohz%ipIwPybn&kb#r>WyrF;*c^mynD zfZ&F1eSy79y##VXbXATe+U;Pp>=7sdT5x_a6voUyixH&VkJUqTR+tuC2qH?qJ1x-s zd1ni!p$nsF#EbV2ksZ?x-epB~W_aj#M0+t9uLD8_$bo1We2xk_R7dl|Jg+RP0&re$ zVs!>3P#GOH+9mjzQ6N`#-BUi4B%>7SDHT+kGN&Wf*xVy?y zHM$S)qsp>x^gIZ_AxMS{L=aE9ooW_5s6h@6( zU>Nh=0XRzoEK*SwF=mR1qIP_iGUevl%F6Gk6R`*cZpz-Vs^+nw*|Ebh`S`wAFzPWj zHa2;z0i3}6zFIJ2ykZ76nZ?S2%k`l4J?9XKr6Krm_If>Rb zXoEwyC-<{?^E!%_WLE>Oz(+%!oHv*Mzx}9`Iev;PFsE_w;%vZEPJXefI00a%L^W zbuQ&4jhy5!4vj!65~2Q9VpaR#rm4;60_L{b+ap~IUOoF+KGr@a;Ev+-<;&AO<7e|z zsKAwS#=YZ!k-5^|Uh((|pA7l9d?9_WGV`!`8pbCTUJuPpORcq;7}gW#wj@OnGKS7?}OXAHM`C$aHVu4&qyQ3RuPhemh|qJ zy5(u}%y{$8!5wb-s9caAmd^nb5U{r{aqqzPQBrmwQhs7Q)C?U2 zX}@d$R*r>al#6f;xN)s3bQX$*=L>J3!l^lQxx^B3XinV+1`j9{V!cvcWUPY|>7v_UZNSXV0>xVk?AjYX#4O-0E` z+UnzreXD#qlKYl*q0^S!KlIJVNTqM&=_h|j?baaH@!kQUdb%KRnk z*U3wV4C(P}4abgc_&P#N8BY-- zlp^@b@l&Zt&kOh5)1sxE+GO6_;_-GgXhU`C_)yO>y)Rm3gSM8{j?eUfuS(J)S{s7& zC8m&4UzmjYY+@T8YCiS^0|Aj z@}Znd&;sq1*bL9PUnUO_Q+)h+wZUUpKx{-vOa@yEo&1zc6@pB{yC-drcWS2of(VKS zfu?4M^pbR5cSzTlhZzPO^Zx>PW;%Xf_rCb)Q!CeZ!ehm1oh|NE><~b`#VR0H@HLnh zt`Y<&2&FIb{wK*c|6XoezyWSsL`2cgwty`jN1`D!cv6coTe8me`ji*r(Z*-wkHKVw z^ayq%)%riNS6!_S`dpY@S!8&LB$7y#M{p*2IL6f)~ae`B+pdG71cy4 zu7GJGwDO~k&tmIGO2B3{FTUoR+qW;T6Sv^!7dAeKa1qENgbaPOm*}4T0SY z-Qz&St;(MsfYXoX@^jY!qTzVh-D_2mK7@75>&9|`xw8I3uM5~MiIaCBULdA~oN(Kj2U$*b`F zX4d0Sn-IQ-zVkig@2LRj+{n!?4MQ}+9HY*?s0&5M|Tdo^eJsWM!wMI*9KMzId zGx}J|-tV)y)^}?$O-EE!PfyoW|5=#5vg9W%Q8I`tF~9&Jq{J6`4k{>cF8#%Ga1MCA zDy&YBw^gq>)@(PqfV>cRlMkWdev=b>HX!)CE!JD9la8nXcepsHC#1jT^LYz-Z^R)Nt z#^pA0h_ewkg=t93fkFsWWhus@(w!(#1@az*qKkAuhky|V>fMd?^-HT@Rmw>HNJ_BL z>qYsI&x`cA6Wa$6iU7P|v)BZo%_+FYDs2vE6MM5i$r!H4;eO zm_1IJ*JFHJ>AS_cI&tfky3>?JS*fIs4^8I49d(>qcqi8v?R7FKah(TQ(DqcXdtWxLkmb69APcPNcSn z)^M{EQv# z2FpY3hX7#UzJ?{fwMw=zB~;RYiCx2Y7iwC!x!&L0T-mgwkYyWJTU@J}GRT1=YTZ3x zG)0K%awUe)R4;XzkW^gq@*5tB)I-?Mhuol`X)_1laSV@fuD~hEOQ3Sj> zMSu=*iPiaJZ@J46UN5iSO|>qjypee@b^T~i|=7ocH~X9&zKmXRD>Xy{L$uAGqS?j zSUWOO`>9_c>ckA-D@EpzLBn#7Y+vA%y+a!D-9514Uro#_4YJgkebp4=&!c7ou97&wLE6CLc$%q5 zDa}KIk)KYfRppgpSy`j?&zzvM2WHwf9sJ_+cMLo*5+cZ$SdnEM%6eS%>Rq2zKwHcb z^k06u=%^;bnc|Gl94(^r`(Zd5tvsJ}Ua7g?K#RzPO&EzZB!H({puj$5mYcGH#qmu* zksiZc(%5g149hItUS>T*t!I{0)q{=hg?qNO<}K+Cwpi0@)5>~!9_;BUOHZwlId*Mj zTH@if`EaI?jFL)HsIuu`knXSyS>|2M@Q6gOlxpa3@Op7k1OybIMg*~)Hn5Mmz`XSQ zV#BSLTZYBYi}>rp0?R+$zFizYTwgC5|1Gv!-{PC&M`GtnswUjl58i*T_2BrpXx0wN z{1qo!EFft5Ce8D-KzlLG(x4is-^Fl~n9Z3%I$fC}{;TVtxkgBV+HYdHb`Oz8r}=eB(hKsnPlYFVd&r`g!+-eG>HemW(V86f_lg*RQb;xYq~O(0 z?m68H83$O2gsv1b3q%8E0U9G}!?bxk-Dj`zUXjLnMB>=99o_oBoPK%j93 zPC^vOnV1@^PBNko%pc)wAO{VnXQdlqt&I>S5>y&Xp-q-Sa$NH4=JC3^aYp(Wv)S#g zuV)vaPQr?{#0J%wNhmO1BpY3Xaz&Mb7!VElv^fnq051l`pXHrS_!q_E`ezHLk?u@T zD_V0qP3XKPnw~VGZx)rsc)q4rK!W~EM{5WXEim1d<=rdb#v^JXpTxE3hH`itEu;;b z1VN|CPD+uKo(DM>6Ki;6R%BH<_G=b$MPePD(K#q@cCkmurQlirKy) zys05w0XhQHKX4yng>%M__Y`9m4U?%tf>4O6HUVd?ZV zO~bu272Yd19Xvg2PX!!=8SD4(8G|N}6e0xZhDLf`p1&A{i(y1etW$=BMK9XBkr>9d z-rkdwE+`k%=??*T(FEjw8R~@+$xdTsrKQqnaKKkEgan8{$nu>yl0$GP6bf~mCJv%v z?JfW?#Gs7Ll>L~bm9}K7Z4WmSBxLojR+6Pj7{ro95CG9m=d`AefOPXZhS;4baHxaA zT4ohcsK+$y^W&Rv7ljyT1_9$hQ9@hX-3B& zSUU&j&{!@n)SjnT_w`ip9uY`AJTz$6I(Z&YA53yYiKqAZ+4Rv)5%h3g_=x$Gqn(HI zH+VCM5dMbb`xL~W@)0gu8W^FUJlkE_0Xz6D*KE$E^hHOW!;{jwFY?ikSnKT$y8{b? zz_=lT05lR<0bwBC`X;w9GeP#QzfWxDf~zJ0HTmelb%o1{6{RZKH@SstvYs1B%}zL# z7$AQAYPP~B$Y)_>;$J_87(ctI2gb69^@PCEpE4JLF>$m~gHcvn}_cvn#x9wvN3BvOUftrOg z(z^wz(#-XZJftD#vVmIW1P-)R5S%Ru?-#ybfx!u$SYW~&niI@#I6Wrtt<}wuwC(xZ z=ZKq%L&BD|lG~%h_qe7;!l>urQh22}dPxg$e_ZHfjd3wdDGoC(9Wt%m&=RDFK&7ZJ zVyA64Y56$UC*LQh9U&<9@;5I4TiN-BZQcf~w15Tgxm=E};8PN&OIZjRNN{<3(vuMj z*P4ekM==31$vAo;! z^u3vhHPD726Jiloah(+7Mq>y}2>C+(h`s<841Yj>NCO?90C_pB1t9gBnsrIPidU4$ zn#;`)!Ay5tOdAqS4 z>c(}4$K9D)V`O?;K0Ow-ttk}1z&8uKO_YxC-9JbsoQA~aD6h8zn4QB9K|FwQNyCv#*G zFcF*twt;<|YoUHDoLE0lH`b7V6QjiY-57vzlW0AJP!kBd{M$#j|Q|nG$zV0bNKsTgSRUhMG0f1WL zXCmd7084{K(+vdCaqt~$q-Uzb+dbLtgb=(p*hssrfMBjJ0T)RHh(z*k`})%%rNeYE zkLP$;mJMFE2&At)!%dEiahnL10Q^KdErOq|97V(3}&Hpzi^t_MH{DFzdkj4)@X;4#FI z$--_1B2H(s(gczOoe#hn`(zsA{L1<%9I?B_^GD5*iqV8o1v%nv)ej2VeLVm`>_%?I zr~)59XYd;K89avf%j9K>GF_SVmhN!EUWI&bLRyK;D$ADj$Tf`H2i)-)yIq~aJ& zaT3piWQ1EWRzToh))f2^iyGLV%>S9`ic0(7Kr!piCk{iWdsR z)>s^F(4PBD#yTT7`9o0@rJaE^zWiob5=6FNG&z<`m6gpa4du5Mn(EgN)IG9#bs;Qd zo0lMoy14fZr(>SC2p<1Kb21Xr(d_E&CX-3p5+j9GLs#dZ@lBuX`b0%;YZwcLgoTER zYl;;?eBN{;_?4D|1e5L@QNdecg+usY{=e>{6;p}}iW$ZKPhOlRrkZ|*L+!yqE4R6_ zg}v754le(&GiL(e2rS(llEUo|AhYf!Hdr3alLuN;b`BX7kN|(n5FOwpBD8n;GCtR4 z9i+DSn*{WSHw!|e;Ib&-fwzT8prSj|Kv1kHQ0QM)N{!#Q)+F9P#Y?E);Tqh%QmBd^-uoFD+q#CYZsKG{DnsvkNEPj zjtXD0@WOv9rMW5_V#B)Dc>@;-aRx%k(v}0@h=lES7sbNruf6`KD?0aI6QWNl^hL+L zV_hitl-9A}6u894$+4I+I^t*OX|vjOzil zk+c?k>t5cP_y6FC?m>zPegn?8_%$uMPl_TM2Ob2xWPGBe`#)f{Gwi{P2g97_-ctGv zsH(9U@<+O`)OPoK8H}-Aa+?`!q64+y*|k`K-*`hLg1;W(zRSVtczJwIka(X|4cX*KKKS~Bvd8KD2lc-{FGQQCdX>qQoFi1s#a6LtH#`f;6_2m%Iq^Ns2b zzlL)U9~n8sNRXtL9_V^o4Urz~X@3YSMVinBvnD_qNJ^7198VDPaex+LhcRN9k83bS zv(PWj;(y{}c5nnhk2hi${VP9T2RB|x-wYH$7`t4TXktLJrm*%6H3DV<82~dFrd(_g zS;bB?tU7%(_UGybdddyA42fY(DE}XUhz^_IegDDz*6AE|I%|LR3>O!VO41vz_w~L0 zh9r#^7h?qm$ix_M)BQZbA#4&v=r_r>*(G;+B@6*&o;ozrX5yuoy5!8d^t4UoJzFWb zDXlBDLZ33>5yu5cGi9w=yKdrQa-_eUoazTAmIc&~nENN(!g^S0r0>km!8yH7ayL}y z<`&b5RYKPTXr=Cv!T=31xW0yAzGjxO+-DLM^kppn&C)x+wCdqg#W@oaPcnT~&be6O zD>yW?wZ${2jEF?~vj>WR-7GJ*qe+EJSOmAV|Tf22to^(V>KTz0yn7Qj?dM z4Dj3E^*!-^G0VmfP?j`jh$!O|UZq+(HJv(AFf ztsGAw8<1d44bgWC0K+G+Wa9>*h*RnroP=n(5+e-h*G4K-8#;N7`y%XC^k!hMRiE;` zLkb6~dT!=f4n?wx5DJLlCXgG>)U{841^oVqj z5yOimK*k-bR%-8n2!*~vezjs`VT}E_zvXcnMzhQXr_k;IWG{tcL?L>U0dq`BbI3tZ zvGA2Dq7REiLMBFE?Lu@Vlx^#sH)R1v|L^7y>|!^&XrFX|uQbVfUCcg@$a@RPlzD~w zbIb-bq<{Eh@r_w2S}E#;$m`KV&*@#)NJTDBjrsGNmbt`BIiQ}z{fP1E&AaH zQJU@pZO1WLPb0N!_puJ`2f8#A=9cQ6({x=w2heX3>o{MB+78#tPbyqvX8Acd$M+2f1|9u~2b=N`0j#2} zAAvW_K_5m#UQ_2FRl-Pw8xY?nU*q`iP9Q=6yhe*_LhJH%qr?l?QG!VuHFGTo=f~j| zJ8X|vVpIo=(Rz+qrYx+UfA?XYO%|=Ivy+Q_68_F*QMAZM|pQtBfSC6L4q6a1C2Q&D5$%BbbU z?nW@00?bX#aFaak~d0kM6-fV`k%B=0naUjpy zG_R>qftN40#1d@6K~!APzN(3_v=cRbR(>6v0HnlxAADe#^rDejtg}DXqK&fYE0wDc z{1-=)zw7?i@e&^PN@)``3rdpBo3iF3>(|#q{-iDVxp4lT!RSMl#GrIXQITAXg&}P+ zQCen}9EVB`5&$)1tj%KHKo&antN?WI&C!aD+e)siXfhM5cD$;e;P zLT%=^yxyHG*iw}GMVpkGq#4N@*6e#1Nxor1T&O8o<(Hc1#Vc(S+P;{lhMgeI#mC9; zlH!SWAU8G%8pt^^iz~3Pu(|mjwz+U|H3qY#Mxj=~-4c;@vo_HXa|CN)HM1B>e#~Jq5Yvdw-H+gN0J6P<2J_m*i@Pi^7slXi3K2z#1ZZHX?kyUcxxka} z<(kM9Esc@?X^3q7$ieOAKan{v7<^%}b-=eq8ZjuuYrFwm0d76JyOQydh zNKs`{@GOtMc8qV1E=N4mPsapqZIYXI$q;^kYHN%GbrmO`R({JGXD}bk3sxmaMJ* z)7i6vUa87M%ddbLPx_5FtvI`ZnCbJVrML31+1Ad$YOS-FuYY8Ne?| zGuHg^+sy2Hrh(2{Ohc}a`;n7#0lA}J=m#>w6Duv1ohunkGPugBg$H+_Ejwgy=vRL& z>r3Rtf*GuYC8GO@Wu-f;^!y%nSfKe#S3s9}1J zF)GS;#E);!+*-D_NuS)lRKKpVXrF2t@MPhyUyhq5?ONg?6UisMuzs1c z@XN}Y#!fh7;cS5-GN@YtdoeVNtw<1zx)>ui>LDbQ&|D1Yi9v>OL-as&j6Ve`q82A~ z&gx6dT!VsIhryA+>S@fbz{>f47PBswWVuYCxB4uSq&=rX&g8(fJTyvnUyQD40ytbnc zxf6LYWBzL8AwG5HDd7aHxB4X71qAnmMQ;5uFOvRXVJ`-4bM~N^wzk(;ld^9lnN!2ryC}-6soUU-X?=8= zs{Z=l*Jkx2!TxWVAX#H#j!!bQ*e&swj{aS$St$e++TbzVHh2xoG(|;HanXb7lvVZG zE=g_qOd2%qQj5*6yOxE&m&5i&HiUq(=E?N}PGEX_#VuPB$v&B1e?RcFsil)AtEwcu z95SLLQlH&~{!~KAD!6i$NwOGi(rgW+*(buV0^jZZcBVmnqVRm-RH3s_v#(8R`=V{8 z&Aj5P-HDNgva*vMBGrZ3oL-P%(N#c0{ow)k`Y&k5v-0&T-u#>Yctru0S?5JS=`>~`i32nSC zej3rkYb!ME9Lwj;-%2y>IXJM~Wp~+^KeYbXV_V_Bd=QKb4?ZN;)%Q1O{32w@lP*U2 ztT!85TkQ`$`P|b_fBBTsv-4JgHnuj^cUr;NiXTiMMAF;xM&s0mM(4eRX5=* zZN5oMNwz9OEYd*C$OhW^A~RfLFh@|`Q?lBp2`FAxY2Aiifr$Gg+3b)nSTd0T!XLh}_G z#X*;+2$CfL4BH4~5J`)9T4 zGE(y;0^F?~l+DQ+wIH6c!XUKqsnR%)M|A1=N8^##qPE+p6LWa_a61U;?hI_0DR5$02C<_Oo7EiDM_qkMd-_MKB5*Db*D7bYNf2ugjk`XpKhrA{5-S&aYY?4Rd) z`q=+;IfL89m>_jJZ*Y-4m%%2$gVmHJ`6HW06XNA%pxC6=ng;4D1M}>e|c5*Zb$<)NtuB~iFO0KK?m=%je;@J`?m1=#liFvCJ0<)*=@geix^ zhFz{H#q7AKVhR+?FJf+&m$D|2wz&mbzydI)gh+ImvV++c;Nw*b!&O)jS^Q;7-X3SH z$ex_RLyPu@YQ{AV^pNTMH!gGrhe0yG-^{@cPqd&LH*9!VOmRs|9@+Va4sUo^B0_($ z^ZxswC(!eF<*A zzx>PCqam@=`0&Fc!+6+Qa=@!U`wbkA1zPyiTd6H%n+uWQy1`bYX4NgKb3)sXE zGeSNc!kj=LCC4f`rHEK0ZdClJ6Gju#_ujD!+y$DB8U=ZFXU(8SG#(Y-t8ltv3tow$ zWAk581rAc(NKzcnkENqtDcBH!Cr?3n_-iE!?4E4bY+bF4dv;wV>|K|(u#>~yDY|4b zmCwF^c^4Aiskkco&QNsJjiDPSuUf$iu4Qnxd?7{;dnVMCm3ipKXnls_oq%&Ecw+IP zLyHN(o^-nuu|MaT2&uxI(Dr9|tBcbl2m<)H=ju0^{vbPhZf3sctsD%*(z#GHin;xq z13Gjc$OnuA@@qQVU;+MP%yD$h0>NKE&%^F6z2LeTbaXht);#f#=lC(GE-%Za z2bm0s4^wFBLGy1?)fSi`0_TC^0IvOm_Oj49zp7CWxO2=;YM< zZzaQ+kiP==r~)fyruM?}j?N15(m!BW7~k&?ZnBom6KA(A~}?&ZervpR9Uv&@~SVe^73S;@9Dl*yt`40jD^a zU7nbf2osL_6xGyz`LB#r8|kX)h)J*SWH;BE=dPLr`3-*w<(k6g=E5bFjm^c;O-axO zpeNzPK9RkXBsE35vzv8Iz7k(Q8f>&L+*4?XE6X`x==X$%ENmdV8_0V?#E1XNV;BaP z76s+xCK$k~?X9g+m1UJDVs+BGmUT%#wE&B7`EI(;{*ZXcz6!*VhO~(($}B2c5nd7w zA^HkY1acF21Z#s2#AJG2XyBS*vn_t5CN7j7Nzdr;6!YP-!8hdn{Vgr`Y-?@q=cXQc zxr}USSOyHRAhlX#Mbq9)vXECg#naxkGa=hxC_-R}PAl9PuHv0@zaR|9yorD$^lciE zM8in(DF9S+90%AlSX?kE#>Dt5@WN9f=(|7w*sXG>%AWfUxG@J#OBe064{lJ(hm+1Av>wvL0=YV5 z&K@O6)A{{iRM126GB3|BnP~B1`Pi7*jB^zBb-HBuxV=1IWI86cOams}vBhkOsXMj! z-3NH-=8*i(%R>Q}eOZ5Ncv!46XBY%6wZ1urz&?t0KS0-MxecPuH#b88C8a3p>kd(- z3^c(jy1qur9!KP{kA7|cTa7=u3jFI*X0{Xa{AqBeCdY}Jf(I2p%g$7hkgS@SkpUjz z1r#S>hznW5#Xu_caK0w(P}EN$xTrLWMw_4wHptPE$6}Y(c|5<>i*MN?fA-(pz;$g^ zC4}P5+pV7YM&Kb5>)f%Uq{KS2YE`0^SD`gKd#YmZV4yr4gWmqcg_L$QhrrD!D_dW_ z$fFqX%*<>z@Ev!BcgABqP?78R;{b`+*!}sO>~1!+$Tk0qIq$C1TS%&R6C6p0352RK z_a@5$j5w+k{A|kUNEu1-i;JO2hvVXcPKmW+BNp-|zsMFG^2v@^&!10PH+!5;54b$$ za7r^l4GZ$698*f5S)EiP4PiqnNj}|UrDgtqA_fRa`KUrMDklj};1DDO`l!G@vRo={ zNK36R9Z`p8l9K_gfqhh}8sh_HWv^na{wVMo)f%v^ye8~0{I*6~X{q8XRg@r5RUI8X zZ?-!Sk}tLc5kuRCB7>lh{;0HQm4Sm?!*njYDZD>wM_Z-B5HFO&<()o2I#LP~=}KbC zV$vt>K30-VUXM_w6l?25`Su~h#@$Zm6kbS>+!x#6xcwjlf;zWOqDvt!%a>Z7lt`9% z?|Oz1HqXLML4ra_3d!4f^Bm+bFKFSm-)&eM@}$DRSYl4tzu;(Tvi|w5(a~;LH!x5~ zP&FNOmQmQ6 zmK0t_D;Z(dzpv}4iJ$EN>_`g8#0F zmVit&LOMHMZ|cTz`Mz2^AQltL&cG=7mmC~0LAvLTCw=ID(biqMBfvmHY)AL@4ECsBg}XV=mKZ9JL3AruwX=kJ~9pym_Q zkZA0&4pAq74PTs|nULSexgi%ti|C!7@9K=`>=f&2zoL=AP<<`R&Z6B&l-zrD_8OJ96G_z^Kawc{fj{Jt5fZ0E;;^u(Q%lW4eOJ zK()EEAQZ6=L{kerMzgTzzQ<{q2Fs+j_x$nW=bgAj!PYV~MCl*r@iEKzc<_e0d$ejQ zW4vQQYDW4Ub~FL3n)csYapKCAlY4veMQBpFSYrNRV&dvm<6eiDK!qG09FxBDb-({U zSzKD?$(b0Bl#ujVuUD%ooX3uf6P9hN?{E01671>VY`@q~-*=6TsXmpD`&ifAUDzaA z|44Z_r^@o+w$zCxyu~lEUUn=MJo5OS`&vmsAlmocCqIRTGKhcY@~g7hs{FbEFZf&Q zf^UfR{xh~bW$J-UsfV-A?!r59$DfTquJ&(l?{92;Dr>j%bq!*j>=b*R^`9x(&Ep$o zwtdM+jAl4*SQ7($EnQ*pOGb?k;7$hfy!ZHV1{aj(nQ`S4Qn{(kT2@<70uuFMWsglt zXRk3BfL3F5oP1O_B}r59Q}1q#x>0%Db}Ac!sM?NW$%1axQ2)=O+YlLxtyXiP*=l)R zJ}wWgDJKG#69_Usl79CKAA&}-tYTrw zPH)t;;SC*%C;g$>Nx{vHbX|MBj03`le&%1BxYfG{GC}9zZ{ezEv(6RGgH=CFSQ;^oM_6-X>Et|C0+g0%O94A%Sf| z5cQj0sNYa*;U6%<3@{ozhCuh!W&S14^@D=l{@pd1=syPRBogPY$|P1a%)`G>`1=?XI7k^yc!LldySE8Xc}PTGUx}iKl0wUF zo_8XYY@SgH4Gu7pDjlb;xh{Ls4?KXch%_}n|cq2M6W?S z;}ut>06$fiu52q?w!&X$oh=^6Z}fVZ3^4aTyvM&nZ81|&{EfcuPUL9iwupp7q&%&~ zm{vsw7!q)NrkK%qUK5mBRB}`0`f;Rt@MD2Tm{vy0VzSh#NR8a{x7_vZNB~kmt-nS2 zoGd~hw!jchf&#+4dq3zW_s*p^T&Y10q-W?cTHjAQ=y`8&^A76;qifjX=ah+V(LyMu z1}Wqwre{_}I{+kr<_yub=~?{Lp2SxF?+m)8nJvkNCX=W5t?<)7+P7D8tbDy$uoNs? znpY8DZ6CAjU2ATzHynzta)P2brNY+h`A?PH4y4N60hf_$M$g9HO8c(k!w(gq)iKkY z-?yY!MMauL&${wPQ?r=p%0#g6lZ`VkrY@k~*c`n%e4{ZmVn_~e_4xfPV8N&FOzpSw zd`Sro>s;HARogeP(4sSvOO*QJ%##Vp=1aYoHd)T0;$l_Ag-lb>Q88Bm@(6QT5j@Nf zeiAGr*7t*80Q?QZAj|W82~coVpZg+FGLhkFXycH}WcP@s^HafUt%oge4m$9mxC!FW za`C}4(Q@hoU}FueJRx>Za<|SQ{){Y`r<-qyY6R z{4D`*Dp>HJ0iAT~o7it|Njl*Z@P+MJ&;)vVE?z9Gmr36K&Bhh&-uCu}=FkyIR{t#k zrWpn^xRodF_dKstYJUrFP=6wTX%^F1-@QM}a^4{Yv#9Z?C8i12VZ;bt@D#IOj!|R# zff0R6gSIo*b$4~+()j}jU`sb5v&;LQ6;)rJ&RrbIZ#k!?#*m_FUexSE7C^OY2!q(SmCp2)PwvZ6Q#-_7s7Q(>OqP22Wfk~NbUR<&A>9B(a)Y&}7uM*psS% zaU(K6@MOY=-Ds$(a!J@m_j908)nl7iFGOVi&#_m`%T`mPv~xj**Moc%`B{mSn-rsR z1(q8DYDuRq-kro*uUc22ECuxNf$c*eSdnv5T4ri_Rp~*B@P!$}T|?9YGfn1aZtqoI zVyn-B7h1Tof3QZfTrYiNmN@p{ZBL8)K^uMW0;4$v0UN5#V)&~qcj@f0f%PY7^18TM z%6ffjSz$AKPqXZ$f;7g8#zwjxc*8mASr?Y3ot(e|jxkJ?ST*Tlm_cZk2kEv$_%;dv zAM_73NHJglWw?k?!xB#+bvP-PbZ=3Bg28kcripFyzfyMCOSNVo5IqOyXolfoLmuJ6 z;#tHB27y(kQXXGpY;DEHoT{p4|3^R2(^DQ(rZMkI`R2{w`dgNdfs5q)#>nSMV6cjV zeb3K@+?rm-)xM%Vw!I?3kg|X8@;TF^Q4Mc*LNDf)x#QJqjn|gA&&&3%c}sk2&ED)s z>+~&bLMswq4Zqb9G`D=O?EJGDr!~&uK-C|7Ad#=SU;oZ@KxstgfCm0*ohn!dGcs8R zZr>gnm^skN9Obw)w?m)6*}4pB#^GN8QE|Qh_~t(AJtvWo9`8O+BsqA|+uEKDrjzm# zDD<=C20p=wNrXZco*9S~%t`3~n6NUK7N9`ixCR}7OS8cZ-PtJwz5b9XkYwMEnU5Ju zeS2A1y2!6D9;LqnZ>Nr>2{g-S+zo(PyOoUXlh_;Qyr5CZ${AkgQzl;sc?k)b6S^M? zdf&J;u1zePilhc6Dg_9I_5MH_uK?K-MI|Q$2)IuqN zU~*b^_R@uZ+(#^x045xPEH+=%1#_k-wAoZ!e#q?KOhyfk2+{Jr(4IwbxQi?AEO& zHs#t{0rx`|ZjuEgZVDMFaExNJVjeu}ap|}xWnBLA&)d9VA-Dfn3ls*dsOTrnT7UP5 z_>iZ+iF~=Zzu!yqmE-!Hy!yJq`uf4T`aB}%eGER$7EV2V&A$tXu%-w0O{eC1W zz!u;-k{pt-GZ$7?^j`AQ_{AJQnER8`_eH$%-w6%1@0?|cMPvN%yg&BT78ySR`{R;7 zeGhI*vWNpO2Q!xZnfM+e!n@0!4~maDOBrILOUQbuE%VHwQ_06LjPuSHCY#~>T_g4W zStHBZ+uGZ=Y@te6IZ|ixsvNh#RzrY1E@)OHNB7zu)au!Jcjt{7RM#Zez9`Zl;zkBR0aUR2J^!eld3h~ba_ zj%Jn=OGHCR!k(5sO$a8Q7HJ<42wI+H09@ekCe8va7`i7vmQ2&WGVjv9eO>Y46Ek%Y z|E*SpnZuaAbLl*N$$Ms;SDre>@T?^VS}gpzQ!IG7heSsf=Z)Nd9HwT#acpHpgaReW#a&Mj{dKRPh{gi*Qc3aG~TCl$PNzM)nki zZ(=QVT6M;JhFaE9;G?0u$^oGRz-g_;f}4MHG0b_T^WJdlHl7mHIU`2cXt5l>Iv8T8 zti1DCb$h(<4PX}u@tK1rCBx9uaGD0rx}Dfb}8$aLH2{+ZL;WTken0XaQja9P}$P3y$l1D1oSbw@@oyc^L2-BGFR%B zepw)H1)7_s)|Squ7UBi7KH=0?@?-0Qo8tCM^n83eXS1V7s_GlIEJjmi23KIIZh1?G z7eOD7I=t1k;MgLrUs}U$8${)Ae6;d58iNpyA=B~H`hFk`fEhCw=BR?)$r$Fo`#@TF zHVgnx?Dzx$^pIg~#HTKXc{BjXEIa-!2k%vU3eu6j_-QYfe0B^0$Ed1g^mA}-ULWFt zvUm>n2MMMDXCvGQ_vpEP;}Jar@P0Gx;2}jRZ}ZxeO4>nRaTx2vldx7}CIGbOjKu^~ z&PA}qG=T{>CYBr7zj6PbeeB<;)ISoI4a?XQep}#h|6i*%grU%VAMDkrI!QqC$80|a zo56e&Blu50cpIRPZgEGbI9LtnhXLTIpZ-t1&<(47KMr~&(%>;fZUb(el<;#I8xyx| z5zQsi$*j6$MJ7GeXx zj~RRnW%Bsw|3$*cj2*@>`mpY>9L9&e#7Mx8%jc*@0SdW0;wNc$tC$W}5hA*Kww!}; zUv;Q$ge}xMiz*i*5b>lE9Ri6aLE!M=*@#IL zSRuZF=V+j|H;~)3s&zkR_D8?4KhHG~bNMYpLHngu#bam;?76V@%H?fT12GVzvSl>= zc)UNl`SAXSM>oV=-urc=A3VyLY!;n_e}f}cMjl!Lme7RK8cFDM>+D)DjfND3Y&PLA zLqi9}CX>@U+gS0*e&io~P#PE*mE1?r98%y$w*nQ7B_&%Z#p%qNB!90;`8c>hE&LUZ8cav4ncQBr zd~edD@`5%@r&XmTy&9h~t2d_n4<+BKW{o+O*6vbuPi~W1emH4VzGP%-LWqtmIFi_> zU+^8Z6H}jjF)Za_U0yJs7xB2SPW)#|PI_5MZ&^utkUYqHtZ^(kBkrwdheve#e1dtX z^q)Ufn^pdgqzkzJg?(b5vw`>Cd?g;O_k~B!FIrLT@biy5US8zgU10>5pE0s|%A6T^ zo3^!eDm8U#R0Sd-&j0qy#ZY;2-Dh_K%A4^|b$lRjcd#ns2PHDF36V&VR}({|PsCMAqOnH8`?} z-3c#WDv+-}{r+M9>eaSdKkpl^R}R4P zoLcmufsUVC)!7*6fqCQvmQ9(AU+QDs=D&?i%v_ko7nnJLUc~;$1zCQ#w?JGxh`1I% z)(*tQ#_2LJfu%VV;8;cBe)}zNpGer7Fp{u20c`Qh%uXrp@Ge)vFD)b4AEkc($|QS< z7a!o5OK^rmoEod$7K4YUDT;gP=t_YP<@C@aSsl60+Uupp#yUg&*KJmO;EnK+4k{O@ zv#Y8yGiL6)kE-XY7)Bk7tR_pP7ldg#>+|8NKMKU6+&y6tTh$PhUDla`$KYXkfcmv& z0ZFgKLo8}l%cv?#_}?%fW+|*R+-S??W)16|Q(M7v1&?Jtmi=kg19|r{R5v_wVr2N} zh_#j~uBEI;z=XEo(#Z9cP)rLb51HKfxcDPKlRYg?`c(3`IYrrb1*s?7#9j-dJ>+47 z?6IJ9Og`+D33Od{7p}Jyc9$=%LPd*Ic&w>v@$b8FVQiJA33p}3m!rGeO#5QOlq=D; zyU8YyOTa(}b=o~k8yy|prO|)AII%RVsE8<@H&`MHnF?{9zKkhU+)M?X2yr0~XQ zR%v2ZX`*R4c;d+b2dg(a>({;{ayQ2d%K%J`NtKBY_w(iyP7F;7{4bk)`#hHuL zmQAGQi{tgMue`MG6)Qx*VDPluGUWZ_#8}R+iqM`foYE$DBwi@4YOb?eF;R3eK2gLzU-R-nb zCC1eFu~gvuOQsZSl=yeusj6!Em!~J~j z=Vz@gUyO`|i}ioi0I=sKM6X%(e#M^t_bt_bRm1p9|iU zNo@KD2i%h}>!TjE$Jaz!2xUBCS`tlv(o!No>i4~v=l7*ONLn~VfZ{3gL&5ed0ut70 z$A)?GVpB&0P~PnKX3UE7yB3fuO^vN*4zMw@1?eB>#L!X7=KAF3_@Uk5(Itwn+>f>^ z6;Og-z!|u5p?2hdap;&jY_9dKOaQH36f*{yxX0?b&z2k_aW{`?)#Q zeyhTi^ZcOh$mSZ^xNI3GBd|FCwHm8Qgr*%f+leD2$)v0k4In8C9gEL>iNMfo@ajKK zf&R>hjFpWj46JOka zWF&*E4=uzqyEu?nwxdrdO z`}WjR?d{c3@$&enH%Deyx3u^!ZNLQxOdlbBw%rI6DCy}y497-kV`Gs#uu05wsr-$*|gCW48}SbxevL4+3BwmycwVo{72 z<{So63#m`Nao)Ngfdrs%0yE->an;vDyiYR@B(1B|BKvk*NB5DVpvA5k)TabXd84&o zjIrI;#$dadqB@mcwPCK~)F=rgJVjAT&TuK8Ysl1+i&kw)9-@XERPRLzfFz56PKwyh zg|YG5MA8&Zbe^@qS?A4X87J_%w$snwU&sy+tZy7>De_<+RYlPx>X6Y{`L4HE>|&jy zrdkL@&{Wm-91Snl5B-OnM{R!xuK9CRXBBNxnWFHWg-DBbG-<@SAOMI0`zVC*LH!1v zqJD)6vc~qn7lNy(C7O;>9$Oh6w|jr1&UNB3gXUkdoYGr=l|e&U2v}FJ7{!p6Y0DaQ zLqsrkgS?Jc{g*m*11vh=>=bC}l~W!;QFo(lIZ4gCl7x4n{T65E-l6@sP=OB0lH2MX zEgHjEGBJ1Gg}x_!kb0*89j)8ZOY)W?de`s2nxX0aX1*Q<4zAki#DzZ&ZtKhQ>mdRE z7ulJzx!yEHk!*d`k1Jur|0}6{U(UG#rGImKXku62x;L)Mb4nO;tus3@#q#ecJ_Q)) zxcqtn#fRb@hOtkqSF#IE*2j`1yZo+SM=6FKtMn>rm*Y^cLd5t&v00uRK~CLYd(z&C z+k2Yc)5Xej((h7ujxgELb4yDueaArJ#_>^%q81oCj5$6$YWVj!iw+~?Y$1`=%5=5z zCq>Tm6K;ie813_oCWr9=Wm+oUJE?SZLF_vkh1~e*@uJ_Rj2 z_7Dokx;IV-J-TfUPT5A9Vm6-1PEC^fIa2?Cm+#XuhJ}tKE4xwqECzJMx}G^8E&$6R&Wz-^AQCF+6(4fBO$1n- z4;4evjvUA$p#F2ycc3vr6DL6X`CM5NZCa1P7#5-RX54|S9Qcq8c=x@1Y;2Z)HlwJB$SSk-l9<;AL_~z(n zS0ZwaZkQMwSsG%J02kp%)4RCeNL5^CHU)tMG*T)uj^Z}4+OJmL`OEYH+q}$JiOXY+Wr@J(n@*kp(oBNhL9Fp-FBMVY!|dX?7D>BA6xd z3-9r$Ek3otpnIJ7B@D6Ls8NKPL&K{D{2bDe%dBe0FGV{$HRX?7lg$oNCgo^pk_N`O zSXV-u*HE7qXSik1YG<^%tsEvt81AdLkJXth;_Dz}ugwSu^!Ww}DL;^Z#Keh#rhk9* z(Le7Zbfo6LYd$jK{b#VGw`a;A<}rjwgUZe8LaccJ?vPvZ7S!T%sZ+!3aRkF)fz5}n zzB>NOtLm7A4(-e@&)MeN9$kE6cy6R<5rMmKq$a=tjY8N|B$b9_m@y+}<;s{DGoTR=8bu_5n%KZxRI))` zewY(jk8?SPu>6G!EkCY|NlpFmyudO&Q;ALg-US>E2Xg9hB1`nAs1WDkE>ez3j`|`< z7~(a)!yr-wlHnw%V8^pvU5^eQJvyQH!U%$w0w-`AaI4U|M&xi?H`9+>ZBR*$Ee$JO zte0o)IkG1U$`^-~E&*sU#&EBDdGByH%;eT7##D~ zoB63%g3^PGyBIXybby`6gWBbS!v+L-dzwya&IX-=6VYxbhQPBnH*SdJ#jGN(Uz}iH z)z8SS%{-6S#r^k7Yt~Ll^OA!*1B1|soEaBh5vSMJuDWjh6n?r&6ToJO7`^h?T2aRb zhBv~=SqltgfDTI7UxuIqY|R9I1a~>60O6`QFG!_O3Pybc**r za;*(#7w=8pmuxIIHw;zR#ehZkw@3>`dM@}Riz37^b zPKXw=`TOpd6-fK3*$iBhh_1h&IR=*JT~6AzSdrYIpu|tXtquHtGc((coJtRJUn&wt z3tP5WJ0&-k@ZZv3W#`2;`6_qGKUIxwX#ubwL-kP={A8T6KJMz@6FQ9Fp?If4{VP)#&iB)Y2mUcbRmnqXQ4Gd-c_hj=^jf7M7`> z7Aq>26o(hINuroNH1xpzBRYaL;*_}wq?MZ=ad@(&h2BpmKsteVlBDnuoOuFroCFwy z{tL|P<)Zr;WICMk7x~nd5M(;HT(m^nML`Rvq*qwa`!b^aSy zqI{yRypgYtr6P54#ELDMDP_Gq&eA)D4tdxd3DA5xugmjci|pmL$+75Szw z&Z@J77V~J}l}*d)-2Bj~kBD4Oz!}{XF*6xVrW1%g0h8N#uN19{zXs#~>QTR=n`D~+ zI&@XsANwFU1_6ggbb1syq8OTBmQUt1tU7GK}v2K z_0Q+Cbg!Xm(lU2DV+U6Uegm<_Um}56^Y}y<7-eHdneG7TA&J;^#3(!vB|RsbZmA+%pzGv>i+&vHX@|TSkWE) zJ74gW-)jsmP4~Pv_$eK0EhZ&m8Pjg=S`TbUhKZX{NuZV2-cm5&7o z=q9qvznTzp^c*nkm_{&4l7m;WPF55FQUHU}Hqrx#VMu zC~f9Wz4dVR^8S4~Yp+fzlGJL2X8dBpm*a*6H2#u;I$2a)P$93(`2ldgP4r%`X*e6G z+o|rMa&!eb3H8kfb6;E?HSCMuuw?zK5;tTJZSfll=nhybhGp$4Mt~Pa)gG-<{N10; zUYE6~h|jn3`9*lpjBK#~rO#rgW@O?M9zGH)5P67TV^~jA@uBAjH}dnU_^70wjV~-; z{+3Q2lPtdadP<0N7V&tn)@^6FwoUi`4PIl`l8BI{zaAKk_sK$(>@d+RdFEDAJxIM} zd5~C8DH2r*#Ju8_5cPB`Bb!RoN}Hk-;EF3&c1TT(7iyk5`c{5s7BWbNaCKj5*>GII zR{K_Qu;9wOR&CU}g_RhtoiZ{qtSd{tE*X<5Puj58;I&%46eh&%yZ!v$jMphh=Ce)= z=}z)nd41wN+u7VBv8|_0Ni_RYU$ZoHLYn1VPUr;IviAx7UaL)x3PR{&Y=X@O;&IOA z6uLyk1%m67Lzq5nqov$G?AJzSmD~?RlU|!dVyJI$?F`U4k<-@GdtF*#$F84%jv|I} zsF91HMI6cOra^e;PQwN36}vC zvyr_SrKyZ+3!Mb1pKulZ?&Gcch4dMf;eQB}-@aaRZ}p>lf4lh@t?~W*Lkvviz}2p-+d!TWZ}rpn z&bZ`?Tp-@@*(Ny?5+5I8p_@Ye{{koPsjLca8Xl!J(Fw-=ur>o|M^QsM2n=J4|0#@-shIpiKU-t)V25hXf~}g{}D3n^@aTM)uotV@Ov@7 zAMT8a`Vj0p5>AK;Kld;W0j+x`y{%QMsb1$JgzNZePuLP(Z z_5d=|bOIDy6Sizg$zaEt#pxU5$FhzB0}golG;~00pBqow;WRXg@N0%?);?JkXveMIW5r#RvCBnIs`pE&XszAqtON)WwE#T%Uis1&iDkL; zqWZGl3c@7sB*vVWU?;+O4p4x+o&ZBkfCy(tpk)y=5i;*I`^v-5`)?z;3Ehzk`L*3I z2jkh@;Iz|JCR4&lLDQv~WXxXK@&TPyvBHmxjA<4|%)rI=r^=@ZBQZVOZgBJsfl$Un z+C@029yfR?cX_gfP%(3cIk_8?gkNMd;33aK~R8^asJznhtuy;v9Y zbD(?SqoLt0DLy!Ao3jlsxEBi7h|?_R-Nz6WUoR*OsA_w^nniTX^MfvxvV!=tyRE1q zlniPKC3O~ILwZFjOv$Pkz7b@Rd%(_)?~m$sfSs)ZKyg}r z+rytc^~t}(b5{q)zlYjgrR*NomQ})lCpXw*Y~68z%TIr2<^LaCe=?rY4pM_!#5M*i zdbY28r>~%|*!7ir_)>pz&6QswOsPu`XV#>=|ElNv2XA8EPYp%F<%-GW8`jTi-RznC z++Ec*u1lrBJ(DK)&T3T8ku%o%4M&b%J9#wd=(eXvk8H^6`_|{%`u~*iJz`0ZGX6g( z^k;}SP^ZWw@)WhmO*qHkXWQV$G%D8d++MXXZo5r3!;nWDS5TCip6{08nv#e$VII@g zd@}ojs?*M9pD{p8v(YVS`fNy%1KS?SD9kC+G3hHz?1=Uw;y6!#PRjGe$#tOkJKB*LOfJ3zE>P zIn_gX2Q+w@PY4PX%c+IO4sG?hO1fKr>%|Z5TcLO)d!PiVp`p#nXG*vH1yPK$B!X4O!{k( z6M1QYwi$(mv>UxTqE9 zj#{}VQB2%ZissSIemzqVMW}0Sgbi|PNtL{|C~I!EMp6nK zHxkU7Lt8f5pv{Sx?k^df!nX72ozTY15_d3j`;&e zaHigh$>hB$Xi|axgFd*4LOJVJzXD1*V5qLaBq$(^4p#QLC$|} z7W8}@sYtkYt=s&yc~{9UFkHMc>>?;E0ECKBxoC3ery=8Q5d_T}=8qXasXxZ6TBmGN z%6DuzetgRgxpIqA>(g(0XoHBgUqwb8|HeLf$;1Tz(aEPcUV2gX33u0%s6BJ9lGrKx zKhz@Lj-OfdP5Cj88|OL1Q7*+ypox-Qs^}Q$ycSOk((&?mY^$;?UrIw-J_?W^3p<1O zET1Rumrg_4Ze_}@3fD59Pp}YToE7mSOo%w@~s&Vtatfb37{)8NLXT{v96Q#<>6 zLjbtp25`!PjvDPw`Hbg?#|KGF?DEgT=WKb!GrI2c0Z6$?c;=g9%1)sg zi!riv<;udPdfjo$`PlK8*Q8gy{4#z> zIo2;jU`GGsi!Oe6Tqd_fanwz&`hTKHaP3TkvccK6gqM)MCW~3VBEZ+f63>DG*F>d6 z?{1mgTQp*TztF7h=cb+FkIsyTXqoaFfE37S>_MGS9;-bS6HjTX z2gR+zwLIsK&k&zMWhD6EOGHM+jK?e&zX<@OvH=dc9=9=T?B{1=NoeI%adDK@yuN4w z$_8d;<$YD^MJ;jV5w9l>RII1x9Ki)|J4%~45+dUL_fL-Q>$r(bzhR3Lc-s`*9G&~{ zG$Dle0HDF&7r_2-cfo=`DkB1=&fc{3vc0~T3}vMC2cx-myFb#6MGg#E z2zw&|>D84z|1Z_KEcWb`J^wkY>Q$ZXcyggU(4KXmS3m5T>@&}VZ5|}I-suvPj4L&l z^p-p;@Tk&<;FJzh9`=xcq`@kA44n{)Wi7CB(Ju3<~S)ZR% zCa4ZARgla_DNH`yYlECTYMA2PqIgcKUc6?3zndk1JDJB_un@Fxc=^6Q#i)EQD|yl_ zUI}L=3ktdIrdY(o;=LVvb`!p4mY{uEuR~T7sugynJeSQS2-1O|uW2pTrHj9gYj|X5 zvN8azsCZ;ktRi`7%0^{?+K?1FMOB+0wr6H1o%e?~Dd;G8EH3MvsF{tcln25Dg|I)( zV-@o)h2OgcgTr2~dfs9_ji6G}#ctK^g&% zumkOMJl25+tG?az290P{(tuJCGQcp?A&hJwNwq$iH#U7+a}pR$YZFI{$+);;ax_s( zyTrgg$`l2@01N08Nhp4-CF^q#ZQm%X^>;nS$Ak`}z+=#Ch`Vln$Loy?iD$3`g6`K9aZ>iwTvPzU}$|(;sXzw<4>|I z3p(}*F=1|4tkMsWgj3+ygGfC|=n*v2%6xF0r;!Q4XEmYP2nOvQW|`5C>%}F!5D)`K zgZ*%sDz~XV{N&l4#Li8;_I8t2qfc_$g~u$L+GqgF2Yo~TPqhv|s}ggoRl!(0sc z=OA#@0l8~nivP@WFh2e{&u6+}7GLfADFRK(Sqym}@h^YAOzLw@wGED;u{(-IiID*l zDC|y)VzV6Z6Wz3JIcg?!3&wJj9D*XwZYolA`r0tuhLxE*$-AW7LzYGLUAL$&O3c|I zYWfY{SDG_~gmmP1uHzFU>xAeB8gmCc;kkv05}Zyg9pZ)YuoEb6-OCzyW6nY_g&SRW zcR6RlDetlJSR80yRcb4(f=J1c#&#e|r+Mq5l+gxl^XQOPJ2cA1dSgQRRWUCFD^>rW zR;u3ro9U-))hOTxXlbgMogEJ`@ZAbv=;v!9aqs18`+#x z;V1_{KYn2|DA66a(g1WM%_62sCm9h*riF?UNdXZc0|W-{B{=fpr&DRjLOS*7YPb=( zp$P+Gr-6JTOb&XiB9?wiZ{uwCevac1s1?GRqt&ywG}b_)8WJ$%MZsH%tY{(2E{v7Q z{%(Cyb03I)8sUIYBbsnyh;5nz4jTGy0(CyFCiOg>M@p%hPyeabdvTGv!9Nd-6jWa# z{bavG5cGQZF++yz4ko-oy_fi$N!u8fYif$w4TMk!TJoSkMDwdW}&KXRMi+LeLX$)4$uakmhtrv4A?dZu}dZN5% zd(UDe4$}w^%ng9&i`5>8X|sDgdkZh`jzYYw(9%)^gs;XIVTVE)v~A`R5eJ0Z?%&(J zIo~bayy?V4@5ir(f>>z8EBpdmxUr2lW z^Wn8>+xmxG%Yn$v9QXdb4NCw4Pzh?p-+w3lP5wah|I`0oBkZ4f11;6{W(qXltg0zU zDGiAsCi_i*&eCxcq5R^(FO<;w?{INW&U618)DKF12^ZR0FU0S*No}nXa87XG1qwzK zsjUfLFwyjJh=H+xPb*E=`7vUYQW}#JV@^St@eFNZ5}u5Nl_{1KXi0VqnlN$51S+J7 zXCZP9xxuh|$bn8Fb}W5mRH+<)DLd!3dGMek5@q%g5!p)_#%4ncPVoi?c&AVcb^9kE zeXkl%jZ-zNYsPDO1=@j;gfj(^lgNCMHwj}g)Bo2D!A1&(T#(s>U?B!DAkQYjY|Lc~ zb}KH1(BPjM7$_@sI!nvMwRVzmz?-$KGz9LYg_oac9-5MTUyxiKj8!S zmD~&AZa(Yq!}Ifltidl*-BVX*8+!_h{qZ8x;j@mG-5YlEzaP3O-o8fiwmS7QUzUI4 z&vQ}H-EmpZG44J2g5m|JH}yweexctc-%J#IYFjfvhr5j2N_LL}l%IUMzp6@y;kw{4 zg-$J{)#8}8dv5E=nF=J(w>;TU(uT<{(8!KTtppK~6@h zwp78oEjsrl($`2UlpEVWq_)->DXq#G%=k-tcO{3=4S~QZ3NCVxYIe&z=%rcA(*6CQ zYK1(ZGCCz{xm;!}8b#uN%;8AL=8}ME73l-Ke)>r;zAjU9uUvCcz9Mm3@RRNJFJMn8 zSbsYHDfv|Ja6>P9@DqdHju&?t3vwZhh|sARVTAT%k$?TAG@wmj^qfN$Di?z(E!6;-yNr~L?lRkf+@S)*$tjZOlay$1{McYd|zq#U1wnUkUVgKwN125`T zcZ#Mu`Z`OYn*B?5hh_e)7mlAizPII5y}Zhd4b~ zs?jlIw%gN1JCUqe-V|;C6}~;U_dO+IjKIvd;swk8*?pwZpPg&@>_BBs&N5{r#@NI| z!KemO(~Px=Jhbl4sa#=b1C0|v<+!rsGlkvZrTR2=Lz{QUPwBFM`A#PDk1LH4MfQiS zv6R@}!+0-F=X{`pG?`FRA48amHgmUf z$u2|gN|&NzSS5x)Mz~fPWw_wW_PEl#o*>qnl>w#9SmjD!rf03VJ=PK?_Ok6s+vU9x zm(M5myUNc-`!ECIrm zpbypS3DC}w@X(^soNdlMWG@K?aa&p2M{Ozlo^D^RAeSq4e5Bxq&z1u$bocjVo(nc= z0;f%%F|!s6ssd3x54HiFxV2PvofoQmIP~j3&7aqDDIS5QlxRt$6XBZ7ayqCN%{fa{ zk$ZC^Aac#dKaB=%$il}#hdPQWhsd#n3o{tg7-4{{5FMm2&{{|JKtK*=B&*KAGaJ7O z=d5NSD~zGBUh=P!TT)+F*R5Rh4s!x*+-N>%A6j(v;o@NZFVewTVSaZXJw6pz_C@EA zNI=^z6cx25zVOyZ^vQQ0iw8n{s}epk`ma@0r1;{TNtc+cOJL{HfdK*&0|QurXZjS~ zFG%k?>iC%xZLvtpJXKYmWfD8n(j4oZGSRWk&GOV)TyhL$rLJ8I*vB8zC&cR?j*ov> zAD^HUpTBS_%QAZv4 zkjRQL%L)1WpCVdYosNuRv5DYeYu5a{y=e}1G?#}Y1=+ii^#8&=J0{SV5d`^=Cin2{ zi@D5UNa24LfE-f@_RWR=|j^>nATet6S-hvtr1vst+xAOt7Kh_ z1cq11?n=QhsQ<0yfNjuZUz~iJ_h77w=R><;=w!1;XWHmKh;$zF?jPR?Jnyzu zk+mijXA4WK&X`ll#Z#imwMEIh2S!C3nX~!kkG?_@&V>i!!_eOns?M5Y9{3J6wzWyM zwEzeaB7q2O6KxpUX@rPIh=#6tET__iS=DrpfCLA48v!UmI|We600tZ zS62a%7R8&l)6(m&S6BG}h~g2__GJ2I*RBKL=d)iyoKq&v$=`81;*;l+J5$$nai7B* z5SV0FCkH04?t5g1>={|ZKwx!?{=v~7tg;_xaQcGNnD+96-6!;%1sxs0U7+~bTm{C? ztL*4_$h&P}eEisP0B6F@ZFyByk3WvlW?B|*o{Ks=&umtP?*zkRTk{Y2@RGj#Dcka^ zEH8~HW%AKON*7avuUNZO;wD9at`%lkK*6GbFZbcx_Ie()9BQOq~rFl;p#3Sng!7=(-6FlTc?1q;G=n9j-yC!XbwE4=HYv ztIFXloQ1E++EES8X*B=XK)~1J3ngByg{fO&)V`4@23H?l4s8dmuHvwO*+PePW)Y6G=CtInj~F;A|Qf5z;Ip7KEv`$6MA z(FUzS)0kaanz3&m z<%ugN0^pEsC5g+Q+V*4he}4GW1NR$>eV=@S_XFM6!);K}@o#>Hzl}PMoQ-4}z6e z31da2eh%AtwWz|E2t6VtAVQc9!UTP;uv^4t!R@E9QwqUha+spGQkZcpre|hr!~O#vyzMVwE1cCbJ1d~ z)fKJ%8hw>zU0Z^xAqQxVAU8cJYkdgVYet45O76)mYf1%k_Uu}IXd;(Odt@JeW08c=$zsX;AYFO{%1OnEAICAZ@ z4+6jiG{sOfwkyyP!E5KW?v?85Rm3cTxs6k8-6~y<2T*n-g69Oosdba)2)}3Y&Cq*- z7x1!@o15=QnduOC-FA%J7qYj)g5_;p7+@aZh*@y5Iw~@jAZ7*SECD2uA*UGJbA(j- zxFXbN^4KEc1S7EzD?)uImGmqmPSBkTC&l%qgfbhjq`15Y-!xg@th>ubJ7IKLUDbI~ zJ_kB$Ac+I?GfN;1uF-f)!P2vHXG1>8&nc?#n;|Lt?mK4IRVG#!JB3x%)mI>#_|ZpR z@jv<->92$Y_3%IP>J@eo@gqae)HWo7h~N4}LI_${2=dY0;G*4`3&SztoR}aTwJ>(- z(9RTJ%z$xx&4aov8HzZC&SVL>u2w-sWNz-WEY#vyMBt{Z&2bU2VXQv^HOZWLlx4up6(}W zGZ3N@gvI9LX)^-R2s+RzQ?m0c1{2(ahjVEy&=P4ojyPZ=fSH4Cb@aW_|6>}Vgg5#>;%(O@Q0N@L6#b4rS))Lg15L>xb+G$qIl zX}{^ODZmTEwrp|kRTby}!WiAxflB3YR*mF(lUo|v46+74dUwPJMz zfy0L-75s0mkkHQuW!u*{oo{_C$x#k+{y301ys6}sqEo*1Q^e)^z@`ILB_$8#bts<; zqeVb`YJ}|}MKskv;EY}RGpWS?EDDu+J9gA+4ki*ZZ^b2t>>4CM8+h;oO9sovvWOkq zubCx8JU9RP4k_?99ET}-N4O`n!L~+!wi-N=_0OpQ*RN4xQPz_9(p{ArJ&ga%^HF^K zQO{>Oqh2$+25<>5TjpX{S($6~sl9t8n{8E6>{x#OSZva&)(^b$J!-mJE55xkO7*0> ztkjmTkB#w{9)Q&KA0{fN^`8uqXJSbQ*=eb&61#i7agwGuE@Y!wIJ7V}DEq4gPl6|C znEaypg!D+}Bww^ERTo{92%d-9+NzGw>rl|BP)$6a*QLt<68H6|s;-vy?&V9Kf9`p( z)S1z)NBa98YW?bNlhqfZTJD4APfOX$c5!JX#U-Gu^S6Jm*A3+4h6Rf*!GsnlP1kRw zSBa4P9IK4@QzzLOSe}(6{?s%%JPx zLTeSHD#nh|L?+(>cda4<;oB=JDt}R2Tq=(>`m`p+gAuDN%{K0t{kMY!h>&mO%QU~f{>0Ny zOOumJidn5Q@PoE9--n5#2rG%+EA{mi{$k#ayPLsv6WU6LuB$GGeYGVippQZ_!R{9& ziy&~+flbUt#`v=M@#)t?Ys~aLWRfk+s_wkUfgN}R-@It4)3fCI9ZpHY>)z<%#6xMeNu=-3C+y+Vz}vJ?bGuuf*}GB~x6oC(ltCG6IzNoA@B!UQMPv?C^RwUV{U(|Ly>kyZoD?#-TuInP#AybaUtMj;b`vxxyy_o-ivHro zM&j#7`sv4h!=YwQWCF-6!Lu5G<=DU9S1G6e&oc%eQpUPM@EuMwkw2oTF;^w{1RRfM zXWY}hG@?bml{Jl(TNI;*V4m%lCaSJ(ud`>4p_K&p4>-a{ruU1tX!@-$CT~4KtX=U8 zNj_7vo#1GA(yT!DIEu=_iLKFqGK@EoUrcu7dT=rRIeNJYG9zbt7?-b>x&LW7AV=4X z4qw}urZbWAt0O~fEqxM?6}902j}thDiZpP&*-&;A`x2PjP?poI`f9kxEM*O;SKa#7 z8qDjVrf3FPNQEY@J7l%4L!4-v{bJv|Bef!>oD5n~|F=wXe%v$jhs=Fy`8Jj6+-$S) z5K$5~h+V~X7Ka+$Y@)`j7;eQ7R?RN(DXH4m4*IADLR6>1Cv2%~h{Rj%j*xUSQ;8m= z#9lPjPMRpi!P`#AgkTStH#xY@%9@ zs3{IC`hU1+CRrK;(fD!(0#(P8)(t$%V-oSXoXwh4#yuNj?lZRet1&=H1nuZ;NH0$%K);(%_60bqq!$R8fC^?~(n3tj z;TRfvD=0-MqlsC7p(qDcY9c}ybxU7&;zEuV<9Jo{Rb(haq?*(P5H9cRICwHH-!Y9- z2R`Y%7Nvjv?jx$m*!z<-r#B`v;(Wg3!>8}-i_!)8d6$=@+kw$GGQb@+k-Xs{dF{z= z0ueaOj6*=6n(5QhnXDofp?6R{$sov&lX_sB=+OcDPUa>pz>_amN88mMTA@z+&ifVn z_BHU6REziaQjSoEw|*{hBKMX_KaBvMs^@c=b~=KZN5?aq0Bu0pX*3`p(bOzJ;kW7< zw(DR)OV<0BgERpg(_9v)f&JxObYTABkninvfz9^Xl|%AE+q_v0lI@T+m|zGb5KGEg zNFWq^3TdWp!(?Yi2k;Dv2ZLm-*}gJSOk8Q-=RL;St!Xv<&?)xR)(9zhIvpE<6q{wHxJL7hy3{yMpJ$^fa@fdV{Xzd?Eo5>ohVs{rQs22WR5W(wtYfoERU3cE zT~bW?LffLPPqv;ZZTDZyElNDodYG1toeDHky(+L{l{MKag=~U-Q_STUfry}+b^F|3 zLM2>3ER#=vpSC(G%_oS6*smj`U#CeU(!Pn11tr8610h7h%dJ0)RLUZps7buo8i698 zx=*EkZ6aEIj}_M6+fMkO+9frSYnf<2g`>^^P+49;+StYe_O#9e0I;wl`;K8Zrp#iZV#d;*geN)W$&k1v0mZXI_fd(%(?TFCw5tRZZC>cjI?cLw8Xj^<~lj5IP zLsQBE5c~V&B*p$6ky9FPiv|FQaxx1lUpyC>BLgHD5hTO1*UC=-v@UrkIU3EquRdKF zZZdK3)35H0(@_KgubXe8Bq9aYi9k$FZ9>80KWt1&-q@X-RGs_ojN_`4b9%Q<>e8wuiOVTpJc=uk z7XhcM>`4fo+_fT$nI0IEd2;89ibF`@=J~z+(BS6a4G!Co4IUpFx@J*|{BVbdv}Enbpb<+-)_(cx=)(vqyI zIdl$qyBZgZejv4Cj;=sof3S>Lp`{lkeSh8v|+Nr2tn&Pwri;K2?{@JG>JNjUG`6~NgA7tS+8b~}n z=JQrW_5`rp27uNOwY?>&ksBvOmcrDnfzYN+CPYpMp;AvIot8j^+s%Sk1LAb-m{$&) z(>RL5uN3HCqFK7~Ea@fTG#WsVk7yzW1zTD) z8sn<%CeAD#LJyK2lW=`nT0OSWXdU7NnNK;Mq`-Y^8THq~Oaga%S#5Zy3^($3_B-(6 zKt=8Ue0bCk3V~4|e@srsJfD{q##Tzc>_;4v8^hl05WVk?1GFsIvRZ(8x_A+p+)n6Z z!A61aZ2EcRS)wNxxtjI2l&prk$UTd^K!adIwuU_x;8abc0WZ%pVtlsBzg!!EBWSUA zSAj3?hhbx4H|fr2Mz9fa-GO6kQ2bRH;^3z0D{(9%aQuu29G}(aTdS487;z9k#_azr z#GF9Jkhe+U)A9d+`2RIeh2#jMto;JUU4Li-h}DlD@)v3+Fl<>4ZY-3X^lZlTsRRxR z&VqQY&mcv&0cSI1eKpmX(BRIilcWeaB63(31Y2WaN{MqVb)lNke4O^`sRUfvnNkK1 zC`-EpBo5`&CIP?P$7A@2N_E7eK^i+OmX!QA_j%q*saT^V&Kl5{pLCF8^lOUR+KSdB z6eM4QbZQW$+y!V0`1;r+M2rc|hPsRts`RU@C;ru_t^k}so&EJrp4`-vX#Vck9!h|m zNQ+=#u@Wft5GHj0`lmmIKWBe`KCwRrev7>KvD0}KUnvf!De z7Ci*&SM$Td@c8VIdkEY2IBKm39qPF6r}`bayimp%@2(w>aa|1C{0dgweMW zH}m?K3A18qT+5%pXZe>sSvoMJ|5)@ZgISiKNSsUXGtKw|2RcO@Q-V%WcIp(*h-~H! z{uMrrv6Un-a%5itYVeDhtJAxiqu$rwsJP*|%ws5}Mxy|#H0|7}19)p{m|Nl6Th;75 z>)^*+Jv9ZvkNHq=(6$IT?a)t}WB|HNOt&%A;M+3*e-H*KrVSo0nH+b07>%BJZI$h6 zlTz@l%ESl;e(In!`s7OpW7sHHvxpIf*#j@x_dF~Nj}0@s`iB}v+b;#!Lxl{SBPOoF{ zD|r^A>TO-N#!767Y$ZSw>s?cVK^Yl&J>Ibosm6z@J}aGos_JQ{#>Ksc0?bln9+BXP;?Un6jjX_;d$eytdCP1ea)=XD^$ z;#_@auem>sQAh>DhyJaD2`AJT)_DI+Uc!k!ro^o2sk{bQiB%Lsgx7nnxFr(zl^%B} zXjfCu9pZEEtN$kM6MbkcLL0XdxR)Gq3{rc3(pKuG07=nhL=C)W1Z!m=y8g zsDY-)$j=V?!r-6uUit-p$$58=J5*DqQ(MvwYQ42GlsaEmB-}&hx76BBuNR;l0T!+Z zP%%h-8BmkT7rfLomEf|95!y)S>j%d>NT1YT#2(fjkf{ zdc|WePntphm}~o0IpRJ@8|iOfT&0vBSdv=bYY&lySI!Ko`z1=6*}NGnt{59T(eU?| zWl>IIEWIaA5Ip})s855MiY2A-yU?%8A6U&(fy}rhDIarLjY!Id5KSY2N?JeV<9UHx z41P1xiDin^9&Pp>s*c-YRouyg-pl;9-D0*B)B5P6NWsGO8%A$|;34Ovove+vag}f^ zn;~ETWW@L1Baj-qX*VDrtnya5!BdUs}DExIp4;0aNV*H@JYP=lTXwNSpn^5 zP4paX*T2*cISKFrMtAz<1cv;`yKVCw*V3s*+ac6;3@<qP?d005(M3n*W)9WR8dehaWKG3k*pBYno~5tx<|V9 z?!AY8=beXkMbzo=JKgpUqor@(?fhg%6ldu<+H^GlDo?{X&vr%LRv7|Xq!=>1)@<>O2ni>F&UA9Tur)R60yjb@P!G*E7U%01w+UtABlq8lc>;! zFi}IOxoX1bi~40Kjy4otd-925o2z(}?BuhD9ahYezs97YGYu7`Ax`I}Qxpl{g-XzQZy0 z*;f*YNPs3?wtQ!zxe!RFC!{M80u8m;-Ua|5(83*a3XOdVBHIMmvD-%@6N6}^^zOCY zurGY<*LqjglH8Kp+6G~FZLPubn{G*YCNkmv^151HNx#jt<$$FBt~7b?BzC?3*|%M% zbEs-Ty%1tW1dyg{k&wh|zGA$h7zio7N(4qIiHJ-B(UJt!MoM{V3rsJAojELPdbkMX zlMr~6+6r3gkk#Vcz@Oiju9!b zPM`#^q`HHO_XVyLW2>FmL%Tz~nDLM}E&rlV+_2x@4$b`( z;*iTuwV9WgRfpSE?t<%TJ$D50VX0zh5wxDYLI1}sXMQ+(LCy@5Jm&}|2mtf@!H}E- zTEB;*+ts}~<@MtPG>Zzw`KM$|XnxahOX!)|8h!ZbF#B98A?(wSTQU07Wrx5YyH^w< z69^7p1xorfpW|<)Qw*%uN?3e5*6N$^uQ{`BGf5g_n_gqERILr0&|(jTQ_7Mve843H zBs`!!63|V;pqHb_ZtHR)`6h~*ruG(@YBu2-oNL0YN&>2RI3dgN6D~BRjcIo2}fH((l+_9NhIP2bFKLU9m zZ}!SP9kZ*Rte1=Dze??WedO$Li!jK8leS+onfa(68IWuNX6Y)rvQ<4a)fq7kWJeb&AGW~TOrFLf>;`+TFWNrkNr$8{k0(8j~DNnz>f1G^4H>NS;1O5>OHVwdNWVhAN5pcIFGtFC3jQz2XNignOMmNFDq)AC^*^63vDnK8%<3Im?T%GrP{d1d-_gbRp@n?Dp zXRy$FP%)}#dAKvFX%BGW`%44ZQ|G}ehYyCI+-jgF`$a3=;Uz4#abi$;Hn;uHgpSe zhe^i6AyI?RisnR4ksem?Risc1U|P$Y{*jS?pACaHT;f4A=cps+ zs#ACFn%TMYy+g*s4sB_$XXd??;SIgJ*%(3jVYE0zwrt?;g&_|V(bP3-1~zP8mwune zLKY=XIdWnV`J_i`9gS|OlWD|A$DdOD6Bsv-kl$t=vNmKRO?`Wbm|*}Q4T`5f$Dbyj z-?=O53u(>$9jY@V*#UVxPD*l(k_Amwe7UOG&?4 zuVcVIwQK+zCs2}hgU|*ehG>SG&#WvFveg4GliOC=-5%f@rMZdiI+44a!bgG(w zm0TWoC8@Zf8dkjO;?I$o4ulxL8$2a;j|bxD10tWjy$ZA}ZQ7Zls=EGpO2y~b73nEE zJ1%N~r@QImf)~F^t8zeHNSbiuxB=;d9UT@a%_KauPZ=~u*U|!@{d#9XGcWWwxS(H} z94=p{eS?!(k6%kctvuNu0vyl}VPxzb3&fTCY0AoUUuQDfNK<}CdrI>>q$u!Y5qM$0 zRAzxrP->*%er=UN!6-e222Tgd1-kP{j+8+rj!tG@sipWo4-FJo8EU{t?$L)Kp#Mg} z4RwS=z1RVujttQWSC{pFtID!}-Fj#gE&U-Nk?AA46Tr!Qide6BKHI95vPWtc2HXwT zKEAqk)v6)q?RQq4%WLFw&9-GHE^Ls^Avxkjil%bT7DidLLa-U3H@q{38l0v6lH$g0 zJM99%4#@=I^D)?o3AzE6ND1b0q)hO%3o)52QYvq(1=Q?IBAby=ADN6+zjj1Tw2vX3&w#mm*fteFU&84_NqR`R(@ zo^l8l3KEcl!A3Q3C`zd=DcMyn$razvuUsl=F=4OY6rA^(RO$HL4(2xjqXJp$HhXvHC_KF-I8NoorEkR)vcNzSd@PsS9RRM1Z%RmhH7A z5lHIWe|bavLC4pX%F4`dYeJJbHpFvFW%=_~_f}ogRLQj_h!))K`2!Gqc=^x#%TYWd zFY0XYv*j-Z$I^$ldIcnK980snk#N^fv?mmZHB&EymsvO1&yyl)X98}B9m^h#1Q1xV z^`y1>t0%kh3~ebvSS1E8If&kFIUA$Mn!WZFaZST%E# zo|8(p({pEojeEW$a3hD1mhHOw*&$mj%gs#vKz)H1<*yeW-F$sU2bk&=SXq&Y+!W-^ zMX)IQgKreEiSWPef&`TSCb8e|n-3yRIxY?gRLAftmQCa)YSVBlb_28GX)XUoBFM&L zPi2y!T456oDi3_!eYH5@^?+a068__{7^ns|)l?^sdHLgT08c}ki2eeS8lm9TXDv2J zlQcX)N3fF$w7mAoP@>m+O$dxM)a)nR)8t!*8IqM>fBaYydF92MQ8X`Qa0qm{W&ZG+ zE73~k%$NmS4n}Y&HkaLjI^KNr2D5u1KEWXOK?zWEh_j({Tz`H2+n-1j)Ik-1wzcem zZS@WP2e|BLL?Vhg?5NnRQo3yd7Hn=icN{u6(!P-}76goC|MIz|W&vZ>ONXrB?t8%M zNuenzuZ)bqk0c9oK{3_TWVT9H6>MusJb6;Z)?Q!lW`n8wBXbz@|N2fATHdWFFGEhZ z6ra^MGfo|eM=}675Q!jfkep}_CAsn^y4wIu-D}JO2?g8WAigD#bnROw#C({Qb;D|C zEngBIbsKAam|}EgNm;V+`3t-xZ*M;E#dDt$WnMkdRSU02Hvx_I{#FFH4X#LKCohk+ zH)X$_ijBl`>rH0K+W zMkfCEUV72P8jokfe`Uz%?;DY71VqK*X1^W-<0=>Hn3$*RDYDo>cqfmpKm|aadG(4W{}JkpO?bYQ`2_r_`-~5aD1T7nMDrl`z-%J zimFp5MRy(9VomcIzbijX+|S51j_%yN{znDk+0m07ourQ6ct#nsa1CF?WgWrd{u9d` zByneLB2XwoF;a+)b;Tx730jv{>q<|g64RWnaaKET_Ve^gAHmp|z0wkaVPw|B!@gg1 zh`+kNxSS7(PR(saAp%oDN>Ne6A|kwqO|Ke|UAw<`7*Q)Mu3P}jN!<3-r;XFj%}m<< z2&g?~djIoancbzN`X5;SYtBE#Yx`ZJc6-@_|3SC@lZ~i(RaxpwmWX@!CK5~^ITgfh zBdL{ag-_juC%ZPynHRF!Y>(&@%&wP%#lHx_17CjOm+#}VIe>edq%KlCmLksch!tFN zj;vzALQ2TI^C_2>F7EbOW^3`?!sT}6OxrsE$e>-DIe z8C{6(f4N7BX_Bt(f3rE+Oau;+{JdE4t)`^Ld?NA9G=Lk@q;zzO$0SXVC(hV!?xa^R zFLQbVGi~FOfCJuw#>oyNfd~rc?J;qWI85EC*u43|_14z0F(6e{OwV%+E}3r@j3@aX zcRVCIwbpK~b&R#S${?yfd3nd0CK-r?FrbcfEJT=p20f#L${+{DyGcK+qr!0jcr`W5A3BB_*9YcfG#kMGO zk}A$+C7GjM9vbyQkjkB!{M&{`3k`qqCXp)xF#gMzpgNSGTzq%?Go0y(pu#TAuRWj-$${$I*NG`pg1_BJ-$%!8d|Lw|-VP z`t-k?>Ecj#sdJGI!3PX?(OvJP;ma-ZFc#+EG%lYy_sbo>j*_(G3Pb#Jo=vgZ zvAi!b5rH@@x=*-9R-`$%in?>uw5*PU8QAm~%JAF5CC5n+5Yd-uKe6hnP~W#Fh( zj$hsVaZ%7SKrk}@eUJRHAF=~_TSSf0q>`iu6D(MeoU}2*(w&stomac?AG7&a4!urs zET{d~$rX*Z#!XGXh7>*IgP|yfemKS2({oAjF_eg(Z#_kSj|Ji>^vmIHNwa?L6iTWn zPPd~?=J-lYgXIY;3Us;4)wCc z25g_Y!v+uo9d#6vaD=P@L#nf?*8(E2!Kl&S&uD0-xziCuNwJ5YSh9cw1b`WtF&4m+ zlLAylMFAfM1|A-w${6WduWdXAQ`e+Ez}jb7#6O&UJ|iQaGJXl&^{F;TzX?O^+XLHi zoVer1;nW6caXIWLi9DqCl7FP*p+zQKS!a-LI=r22{@26<{m>&eD>>79j6pF3H*{76w$57whB>RIS4 zff0yj8Nv$3DR=bl6%UOlD)_||mTUT@KsuYAnfII6=AYuY*QO~? zElg4rrG{gb^4{lr@qaJcPfk|Q%Ufsvx)?lgWMa}x?V|p7ebGutGn-1*|9(I_w?Ya6 zaw`Q(Y`N$Vt`!fFX;B9HKl2>r(BNPOnOY#!{ffUb@wQgzwT&>;P3tE4ST7xdg` zI@I3Gm79PLwa(4mY4@nP6WZMFS+zvS4=BxH;B_+yEL8nZ%3f$wD^4E;c|Tlmb9?z) zAl5ymP}?3ZrFMpNq*FN^f{mUhy}EK&9JoXbsjrT%T|luw8j%*gEL9}I$7yD>T0%Mo z&C}2}#D_6LqmU7W$}#K=)rgEDjWA5kLf|CCq%l-0oN$(n2s{(7*(?|Zu%aZNh;fBt zJR)V6RIsMGeKcI~(ii>O0X9AGYINA83B(ZucFS1HAPNkA}boBpIYqzCsQ^VqkZrfJXLc^j? ze3}ouI#sHwlEA)c?A;#=p$&HB2Rr|rs=OWNYCA~e<%w|))}xvPozAD6P$J-;+{rNW z{qJPPrQZKvU*hy$E%R><>m=)TnoRJ-tq|x_UR#)$V9I>WH<1C)Y`#+{EiCL%KJ!Ef z-^ds2_TwzvdAzmQvyZ$IegDZUd8DACW7DsR7%-er7N6*!x6jSDEA^WWh#;RX?_qL0 z=)#W%vBdE9TfAY!#5@0!m%d4_e_i3V3`}Cfk8^rsxYtjyg}QzzRLnr!Q!aT)?7_5) zLsRJRO#JGv-MCHmAy{WwZm1bGBRPtn5s~P^kcP)1B)v(v*oam%2GuU%Gpkic#Ap%~ z^2N(%$t6-JNp{|{jyq-H2evkllGLYAfCcyHf!G4MTSqUGUqAnz0-&Vhj|=tWMsrENt(NPGMeSX zC+XjmG6#Aaq4{AIghmL8Q-=n;%TzGdJ2u@imCJ-W5q~zvttZk6Im>x1yq(LI?HrUM z-f~o=6-^KgTOmT0UmIp<{1s?<;xEQS(ZXRE(y$e~YU>-1(%iP7f-c^)Nx5{-F>!~ny{R8f<(Z7nget7!11pj&w3tfC(7m!`V1(d-3xT0U9t49e9Zq~!$F%%x3C>M8k zb#;s7iScrJ<`IjVL8ycfh$Ka2^AHZIoUHO;hN@2@5d_J?=$)@6lGi(Fx%k&##qz*$ zvb*9zerwty3Bp05ii?RaBr=guFOlelBH44Ty_QXu-pNy6!nc22@^0a0|o9s=i+R z@0ONA{)&-g;m+2*bn7;fl38B0=hiLx4H|mHF&a^KKn2G|aYk{v>^|YtDG7|p7Zuj# zGF?{M@sm}7naukZ`2-+8W#c33@tfo}im1k?1RgGb5%C`tqb~fGQXcH+{K_9T;HRHf zr8xlzuz~aUUA8P8(Oxu?d};wAah^IQP5E%Z5#PeDgyd^wZQHo%X_Fw+0>%8J z#?tk_C$Z|SBmXOqX-46iqmSgoudJ%wxAf_kE8)3&YYVK_Us5`6M5gpz{I-OyOxs!% ziS_}p;L8E9XbJA`Pf9$!$*K#~(patwjA>bQR&Uo~UbCjVdmVT3mj&96i1R^^Z22eE z5sNV0m`})T#Rxxc@WACP3=cf_z+rqKPwU*fHwvdoDkIsjDMLJ*ee$DzR;xs}2Xr^Ytxc)Tb!AoeCU*oU2GUc70De2Uy4<0Ek%i3!oX&$h9X&p%X zQD|tjga~H(FPzgGk|2!V-v#bv?zo*uP8PMyx>)Pxntk!K2oXAss3MwD?2W8mw=cvT=}*pzxIvqGH8%+@wLu3N@85E z)xO9Sg^z4=b^aXxco7fhXYB&us2pw?6{KdfoA!SkkvP8G5C-`8YqDcOcQypADOP-7 z|K}Rf`n_E#O?FCBaGo~SQn2{HJQ2FBH{o`Xx{1yxn?(gSDTjCn+){6YR|dpmH=4kx zhruf!qBSN~!QMK(#wusAPvx^`Li(u?7JvxE4&EUd+aiCj>Qj^j9zF%6(_s8~tiYoe z{JDK~0}}bMyzl3^0ZM9``Zvz#ikloVCzn}qvwHcHXX1^qA;+>G`0H+M>et2IzVZn6Sc7}&(bgnxrHq&)ti4< zxAu9?q6Z#b6q?WU1Mf z!igpevmZQhsB7oeiZ1Z$GUuNEL7DLC0CdhlBV?9tDbglYGyY-*PMnx-O3wK9NT7)) zK4rp{2Ty&3|^Weu9d$%EjXlJ4@uu}{XVx>jD9Q(~TsJ?y*TbeDtDh(@_6 z31dRvJ|u`o)FFVjHrcZ1=w&kL{Cf)Kz4MM3zdql3%(prWijIJdFRsk)5g)$vB)&19h`RQ;hc^qxpBDDaJcFnWzn$AHw9O6lG;KoM_ZE7uVwt%L2G7 z30!}AQ`EJ{Sr>C~V(V<};Ic|(nI#RVvc&LwS6|F)ESOezv`GzrJx3o^HxFjIFaP^% zCQnFbkw?o&FltI~@8Z%2tsfp)yPDlmOO)LE%*h8*k3N{Xbq}Ke%3ZM^ zSV!A7Fq3cpGMn91x@5WL+eB0B?a9{?!^QJLnX=@ftQ_W8ro7UUdFY#s%aaGXo?e8> zmKl0NBPTnV+dX#usaH2vW)BlxpOjPo(kPMMoWc=%?TI#o7sLQq;zNrIoy#+dxOO;@I;98*S7YP@r?WL|J2tS z(v+D$)Hk2`J`BX4zundK{R}VA5mia?SF5I7^r}fcka;gKb9O8>@$#Ej6U$0L8{k=d z)(0Eivx@6?sZor@T&zWPsf06kt1;rwwL_mpT%t2}P6a&t!zW)`?NAg%f~}yS%7e=i zdMkQ09ALit^{AGmMGa`r{d&jvZrs2-ARsn^U{^2>0S6VM^0CKWP?T$~Ul9wS6r6EwlS06tvS$kFD6vn;7(($t@ug4>m zdhQM@Uw4SOa)mv16-O|s~m;i;be=R>mNE@I6(1Hy&-avt~pv?rs zoeplPxEbkvbPSS8QOf!qCJ0>5g1U;h?>Z>r!8IPjiLBfoUW=Ie6HVpJV({99UZtl_!6C{-e{p@t! z8lF4u-Yl7&)}BhpR`qx z_UGK)Nwy`Mzx{>wF)NdISOe;=fJlvpDS#?d|5p=>MI|&Bl#wj zTuP<5k9xd;{6XgbxzNh~xX35B1ryxqGNr~RNz#jDW#I20TwOcYD3n{XA|KgyhgkI0 zM!?E}JGNVU%M#Hlpe}Qck7*B9;NIFV>IPEN)(2YMM1SL=?hfcMMc(d{V=tDocTXK* zsd=717gqM=4YR|2^C;FltN*rv9Fbh<1kJzbIt+N3+tO7wQ?i0+76 z#bcX538&YKlVTyaO`==n9ntOxF&3Bm1KHn`RIC*uC^8bad*36>%xs_aF30`j;Fm9P zWHDDt>r+Mp+z;_VMMX8&aB3=MyQ`$`7ij)7_+i|=44>}`>a5=iyMwxJc6m4F$E3#k zt0rsS8JgLY|KY1Fe(UcB!|z+;V~w$G)Sh~U)12vvtZ=C2%(F;|H1Z=L5n!Qd#o}2b zds(XCl|NlUYOy#;TDyV1T05jV_s*MY{IUBvIE8ITI4FwzFBRoTPM9ft(Gyloa2tw= z8FHIYShy8f?Zc68b*GQ!R{pSIkyk^EMfQJ1LfHF@zHc~Y&l|7votH1qVB*wn=nqPt zLE-)j#qwd2mBFn*>?bI@xgjF_V&r;7_P5&~57L{Vwqm403n4Qjm4^XnRHZ(BZVZ7N zV&a2$FOFzbmn}UXPBFTe=YZVyno%C;J^7Q3V{0CM=9fe}Xf?sZ{000R5!}0zr}&4> zdh%232fx)Ed&qEE{{{H{82uga*f9qlO$@{W3p%44c-~yX9R9$H;0*p&bWIv`%-aH%O#g;yjcWaEdqYr`Yb8vti3*7>ToNQ`-bICE z6n@c%bhj*;Z;v@~FBlW!XJ$WO)C>-4N*_F9*O{Y~Z=8v$E?!qEaZ&;S4=SXnk?YR6 z-;Zr*NmtjniZ&k~AO9=CtQsF1vy!Vu$dQ#RJO>U4JIrFXZSy?*@Tw5pto95JGQv@(h`^QbF%QhTc#Piov1;n4M@TfvM){Kt_Se2h6BK$MlKYm- zYO+Gr<)H1_(-&k(zUopLy(X`#D{l=gD^>f-k}jOqZV$?R`V$R0s9XmD{^AV3rRkrZ zeiFKK(JKw9K+9)Ow zLFhIt4V0#{DDq(^rWDa=Fo&F=6>U(~>LK4yYY4raMmq`#l2Nk+thvataZ;_X8`5>3 zUd!9{5r%mXV@+t8-(?z*4#lm`J#{Ov?Wb~AizkE+_;_K2SkQ3Z!0pszM>Tu=Prv52at3Fb0&P;t(cFL%17NtrI*LAwJ?CWbD9_}*Iai4;-eH37B6c! z7^1z!A7S%u=>!z`VAcQvwCVt>o@a&}$2y>c1!GXXB69Hxni$KND-)@;1;3G(ugd=o zbc^-MJI;dG%Soy~EVwdlM~75IBQTT4L!$RZ@X>X|dk(!EmNnjZj)g37!)>|_mWQJO zS1Ts|L*M9kxhKxa`PHj=x%|Wp89VF$)qejWR&wJ67&YtmhSRcDed@+ly@TTOu;>!D z$0Zz!PEIWBqVu!lZK3H2I>$polWj@$Cl7oSEUtr6F|R-WqXPllQTh8T2|2?_luUl{74I7|w{<$f>!WSPs2>7P(yg620t!TP zr68Vn4?Rl{fSy(CXjdAvwWlW?j;YFrbn$BXmnZ(aO6WvL|DK%Ib-UWJsonxQ)Q<%G zCibtOsKHNtOm*h-#4Ks*h?^?;o>HFt;PSh}@l=(m_FitaDtclP+*DI*s-ogw`seJm z&KTeKvwG`6sRN(Mg}EL; zw&(+R5JM}Ow;kFzvY_0CAdcEUCyiQ2I!Lbi67kPv^QO+2;OwuYrnE@MLCDZl(EF@1 zlT9RFZT<{*5qpjJ^bp~>0W~nn&l9+KLAE7SD-5M4W(*ZFE*1jBgghvG zJxt1y8&NhQ>>Trg_^{iV?NJvMKIHUk_g!4>|28xwbCKH^+Zblli>Q%x4pAOTY`^~* z$5VNcI7Ij)NDoT9d)=*|->HLqB@oD!hs;AzK-A+AHG=3l%yTvy0c0sbAZX5c0~x?I zzBf9e;fk3U-7xz{3LKuvof z2&xMhsqFAwHKv1J!ClmCLr%KI)Dk1lwh1x#em|XkoX9C$DOMkM%O_i%tHSS2KWtmO z=Ou#FrWp)rwFvTZ4+2KB$KnzM>6yPDfzwF{$VmweK@tR}Hs%9_W2Pl7+@%uOa2nv# z{2l}$lC_KT;O-}Rk_S%e!En23UTLFQuyyG)Y5luQQP1@+ze;%i0hin!_(%)~`F!Kj zo;360q|Z$LxH+w9=@ZZUpvcC)Oexv*!1D>ud^Ot>wz6e9gM50nD61W`nli48lwsgj z2}`jua1q^>Qm&Lds-@0f+nj$_$#>etO9Fr0b=*ntJ67-9HL`SB(~K12HXI>!-9j2q1xq!PW=esTkfflyhXTH)EzW}lS&5UbF7YU2>sSUNTe|xQ6SkXUV z3-|tn;om!9@2K#@1wt!2cLNYAAK73Ov8D1O?JV*HH!uv#!&8B-$6GH>8k{gDR?V)) z5;0$V1sFIl}$P!(+IyTbAo8a7DuPiVi+?r zwL%=uz##X?Mn8G z1paIHc>3tNFK_Zxt@x!&uj~4Gg^Eo$GD_w8{V(B-!JRH1(i5#4D=5*}d$mWzqjtua zcaHMkX;w^yJLl&X)lE$HZR+6jJDP%(x+y6T!vd2=nTgT699iI%p70dMU5OQ1?Fzyb z#~XH1=el{@n}c?7Dn}wgql-m%C`zs*;l41|e(+73;PC&WMD2vJ8z4IikxP%e0H6o} z55)tM7k=jcZz$5BBM{$|l2V%i9@1FQ@(rOIjC*a`$${art=zatbJ_-#OaHC+XWG~< z;`Kxfar?epz4aHUhvNiQSBUX`b^A_?{LZeweFu606YSdTnmV7$gm>n6)Pn@M>$EIkNH(7ugHc9@TC--k2SAg1i{mf&iSZ zDPrpSH$mo9FWcA9dOyIMe@=(3WYi#@ev zgm%TKCyF@8ehbS@T@$+|)<*ZfW0-fnQ=^D(uRHcw_rz1vq7?$w*kiu4n~sfD2^7}<+Pa|55fRo z4Y#5?-iJLi4jUj~OKu!Zn?t*U^Yul;w`uyo@{$-N?|5B?7o%9r)I4Q8^ z@rk=SsZ4_;AdD78IS5ixFZ0e)qd13C5ga@u6}EnX!1orfA~xQM-9VR_?_FUdMF_;f z!J1;p6iEwRCHW-Hms&_y(JlJ*-=M0~g%INMGwIx2kHat7ug$IEX6f|=Sx~!PisQk# zS=_L9MC_LG(YxwWyi(%UMk(WjTKgiI`-N8uEK9mBoTlrq6#+=e7Bxy>q<3W2`i0eQ zEJ23*mSx9geW=UA6tB*^%NB<@a@-zV_mF)Tu%)UzE7F@JaJT9;OUgojG`Rh1<-dp6 z74?O$M;?o~{;eLHBlbn@0t6mHDeMD~ab4R0A8*{oL--hPivU?L}l-K502)2P)<#8BRIFd z39v{AgosgagdpNACH*pRtXaRlnmD2pysxIC1B8vt50t??_&chV0Zt!T2%wqswVQq2 z2sR|Ba11_tK_RT48)mkzBLdE24iGzf&y#{Z?d?ddPq5woM97D#f3XAFjn)D|U{sV_`LmsXMg2^;@6okEe5!*73GcChP%MdiZmJ@hJN4}9XK#o2yF z07GEg(HY-{37*s1!EIGU70)_=CV*I2EWw+dLaw`;D{nTaQAR7voGg2Bu zU1}D%!k`-JzAHEVQxFN9D2gpOa-xnq0q&4Lqz?qe7+DDCMULgf`Fpu^^tWr81~@_p zf@615Ao9@2A{IH24cQ>jglJG1*;tHiLq9O~2DaQb!f_^PoCwkKB%YofNDT0*BZ$pQ zCBLYtsgHHgD=81`*H1*u+#J7d@%nWq9(q-xoUg9dHey%?U`Jl4e>dE$QU}1qs_n1V zUjVxF&T*<*-RAnr7VF#W_Z&?b(fb>)F&^B zL#`h^U{LL1-$)#wO|!~=n%WqC+Er8gU7Y6T12yLPSE@^%3)5=8s|Cj3b5%5pT|6%W zP-F}{;LyttUqag!+-yu1 zbi%1RDU00CBTCVSn-?76eP~xi!sm8PhY(Tn?yl_DTBMaL$J-m~rOWxrT>JLT{)61R z9?SRKz8kwerGw+&dCYvFQ547srK~_vCq-y?gFnmqXSW~}c8QWGYJTh;&w!~LO&{g! zlb7FGZuR>YBYJ4-f7(PO3izAOYFF??dh#zeJ!_6gN#RHC*+2c6d^TT^24+eyX79^t z^~>%GFiWlR<(y??=*I%0n}iWrpn?!KM3YwlZp1d!$>d})#)-+^;YxF^w8dPJb$8d3oVSe_p%jZCCRX4dliR_^N*Xc755}{PPd)sY0Dy z(!`chReMfbDY9%WNet{a1r7DQ%*ROwdeD5UVYI13qv_1dfr5bYpVAg5rNosS|4Ss; zVNPbJ1|?~WpUS^^@A0%s28Ydas_sI*6y%%_oQoQA@lNpgpEM>;SOvk4xFwo?^ zpkR^N+X~aXX~@?~ML9a~Mt5NM!F&P{Mv7qVVY!_)mdY7IENXn`^S@#nyNCyP3xYZB zI*~6DkjjmH%w`dN$c6=TYDGi?r5P`vmw46=TBOx*cl6lc@GvPi{H7zpQ~)`u)<)&* z*pcHMjWIK%#B+Ce3z=l??DJ{uG>6~KYLCG#3tDDF=iUa2L{uM0iaa5s()q&2CS=)pqK&CxVOO+P|h{%n#MzgMh@z8;JA` z4W9ZzCM@$}{o?5LjrR?8cSJAlv7ORuw7vif69($Sk=0sOlMo2txwX8IpFj?pD z#HgTJwi6P5x9KEops?^YS2*7x#&|W1&ThI->%;uDe)G=JjWUHRTok>l z#>c;E%eJm)sLn`Sdxw=f{&(JF7m(4>l$OQu1(BsO6Eg{!1wFZc!xg@)OJ~{}uoFba z^cUtOG4vu9X7trIzoTSBD z&)YErWl`5Ah%k=G zZ%Amb%7h_{SjazfseLG%WmSLgd|Q4yOtb4*(ys!wonLuI7}ZCK?9N4YMr@JSLeA81 z>*mp7HiS#7x&}g%kMs)1o@3+T{ zO^-RCjkY=L(__;>hZ%nbUa4wmm7c4b@8o`Nv@qZ-9qm{yFDb6P{)5waTECp>=aQ06 z_sSWCE>K&=hM*+<$9Vl&t*AY_ocJH~`PY+Tn(_tM)E=UMthOTrXz8I&(y-d%3ATFhr^YA={NzHI0Aze7*%;yFf7f%gM~ z3W#?P(!|HS6=bzy@<#aRhcpk>*TOMM9DJvBjKDbM$7F2S1lx|j7v%Ei>Vr0|gj+XVWD5ed9xaYEAj@*&y!=Ne^AOAbGiEMppvo&>=X z7`iM3OICx*NL)Y~WB<&kEv>MS#nGAEE$O|o44mNo!pbhHwSM8n30sd@s*n`imH@gN zpo`M`J7_}A4^(Stbf`ydp=G?14br#P!c?g`aQ86**4m4%HCRhgh#aSIdns<{~+e8_D!ueVoS1yt~XR14L_cP@5ql(=e%4UY-E|x z0Ah_(HW?9*ezIL5KKwW_C3c;jM7H&NG(0l9x_M>t;DFG~X2{Ua`>`QH3p_H&@4cvGO zCr_rQfy763(!Ol|TK49eUAZs3G@P|2Uhg9wC-6$ygBW`O zgY30>D;Y!G>V^hLW%GJ%5P&sQ;C(fQSOX9lJ*M$yym-B&;=FkIlLlEzL)Ohgmw<#Xp>vg0Vwmgf7s^M; z>TI-w8*3S({^YHak69~A?^tKm+$&~-SVT@F$5ROfB;2t>m?8l@5586t`{^Sg$2h}! z(6_|L`*3)N-3#H>uw#F?LZPk2E3M^o=hSXQK!dBEG(s4KdNJY(V zbudU!5a%S%F~1Zk4>?`$QU;rAFC8JGVx4iBfAzsYuqy-S_K+VVUnv>IO~INs_IdwM z%KrRkpZV*D(}dq^+ovi%%!$((T#URiRZt&WlkL~`B)Ig@tb2RksH#{O=eqN+n~fTE zw)vd(5aA&#XiI~T_NMZW(Wkwiq9Pl%w;YS-FwNeX!x+L4#=W~9mtJ-4SZ3a zzQ5^+jH<>sJgMr{lF-eqt8P}3#XuZ0$^ORh<}IPjbO`fYv%MO0np#u4R?1=t>g=yW zOVLhQ?k`z?#uK%m@rcaM?AT4RD%}gLEMaZfzlmuO+$-g`7|cCB&zsrK4Q5YpkQl?< zE)z`%32#K{my=&F@GGD#TTn(n_c(f7aScY#00&KUfCiD^-~z6_P&XDsQ&{#ZD&jSo zWpHc6P0vm9Q0KYzNt6pXX&Jo(@(5LZ{UGeFn!caX8q&&BQyE`m)efp0LfEGRAOQ%p zT0Z@($1J!I7ZS?scxQxR%&v~6G>8U?^-Xp3Yg*RWY=9Lw=G z)^>;&GC+Uu0gCuB*G`?fkZ@u5t_$%OrtwfV_0&^Sirt?H_^;L6e{=nmk&iaefC!gi z+If>>(gyZ8kXEN6pn6E30sxva->cGvUbi;Lg8ssFvW3jF5FFH2|79zZNQuy*aH zAlE{o{7A5PgE5KHsyE@eRpsT-WS~rx?u8I=bq1I$ELmTKp=vT9DH%id>qnOx+6%^B zOFI=Fo#AIwS>fdTG>#7L1a;k%nKJIbE7Mex_1K+%S}rv|gg>F1f`>&4dcNIaz=RJ4 zn1SNHkst%~@Ezir+78t}or+6u`N8?K78Xxryn5zp!I^~~;*v4-Die+>z9*^QBA>Y8 zf9wwKg_go)r#g^Y9BwJJLcy12N6Yq6}2>_|!s zLHv!^9WR`I7J*mrAUI7aQ;v;@oyv)enf`xJqgWuOPc9SFBw>>IVWMCnZ5#)iST^n& z;IgU&R0~0z%b|155=3g?=jL^HUYGRaN31EK7vA%%`kO!K&!93Qo2^llY?aKCV9V}?9s;P6E{C?Fy9X9j*|?w^_SXD0m2umxph$A1S!o*9KN9Z3Dpnuto>JAInt z_oqG>vF3gAkFgj3x)hT0_zl+cDap~{>~Z&<9(QP@V?hj*sbtK?EoWy#UzwXBqJ$HA z9DHyx|DG{FxYG(lUqjuv7$z2r<|U%keV1lNwuW&>JH4zQXTcK}|M+jkCo_T9rKtYTk4>d|HGufO*c+xKG{}`~e;A(p7YMYr+2p=d%io zLFzK*ZsjyA!&W(4*R->`VrDO}o)+leFCjlq-=uj{?y~KpWr?R!mM$xMGV0Z#A-J<~ z!+`}0-UJ1O%rE)sYmfMFO9 zA{SJ$@xdOT#FV=pSs7Gf>2r==jOW3;3K;`6`I<^d_+el-K}(#Xr8KQ3owt`sSKfsS zuf-!!S2jfT)_^U$v^*AJR+9KPJ4lOxL9 zXGq;`po7xKfy{$0)X=}dL-#2-D92K_$bm~5#)g&Yop5{H*K5k?%U(1@jfsaZP0;q0$5txRs0G>6Ur!*ycJ?dhV@ zmN4f*cf8(b#py|UqXOjdbd+?tMDM9xPK#tF3#`Cg!*NpyQ)kXBvpXtWawH6~9tr|l z!f|%TvJtU^!)Tzy>WI!G7iobGYGx6Nwtw*&kL+3+$ztfsLREm6@uZWE*geftl*`?M+gobb|!i7PkFulJE8kZDGn9XCcbS=8fLh6=R%yVwD zBn;i}2l+Ben$nb63^%oche|_|WOmP)uTKdA_a$K9IHEaBlORxn?~cN4(UNCT^fr#I z5DAsMe4AO0w9BE~@luFaGJnrl-f(OPO%=)@M4uisZE7RzppCJ7wt0F!|G;Msye0*-uChzN39=mv1{o zN0*?Nh`RezPzfDO}9zEWg9XoDT=U4(mPw!S6Mk}jvOQi zDDR)1u!5XcJza5k%bTs`6d;RP43UWVS%zTf#D;Lladx%fOdjNe#EmIihx3{nlaY|L z@h4e=Y-$`p%;W{gv>9xue_EzfoR{qB5L~`_qWyQ%_>2Vs#+pUAaiBBRL~u6@WIh_t z?)c)o6||?FGV4P*!SPVhFMccl?EkH1h4oa0y*d{e4h8eq`=Q)wyLRX;@NoH$B)2GH z$xU@45&^rUQcX#0sb05y$+$GW>x#~+EP84xx-4;e?Ul7%7&E2WWo!U~LYX2t|BVp)vN6T8}oi*i(DX zQ@nJk)PH9w++_Yt$`gs)80J&gEfSQD%bp6#&?SLk%mU}nzL1S8F~YxfAP0fH91HjG z**zz;BZPrhRyGC%W?g599k&mX{DP*uCKoxRH!*^2QEs>`_UbAhOL^)KPX%=@d5X*$ zZU5$*e_mSH_@ewrjBBKZMxQl-&QdW$MU4#-xcs~30Bz-8I^CTdH!uR**=HCBNT@b?`01G7X zIlTl4h&$+i3l{C)`Bf!Lu)sL_cy*=`9aHmE8d>i!X;0O}(40#^=m=z(PQpA`uqF2% z3zAr6(-vi*ckLN}(F^S_APj9fEVIeV@3G00>()A+2=;~Y{5>6O*FD|PnOa`{k>AW- zzjWgJ8cgl{qt~UGJZ3P8o}|ZIrYFA~dzO0+Pm9y|xo2mg8TQsoUpN&?PH@B>p&@P3 zOT?SB+Il=RYHJKU8w4!!pL-%SDRL&_3akgxfyBCrRR6mONbcXdfAk44&T zy}TyB;O&<#Z!;9U4CD=?vMh4(XU~4&LoeAZC(l*rJs!%y=;9WWKD;q3I6z({1-p6} zhq9k`(BJQPG!((23jMT}3h#jtk++YolotNEhl=Y?>s=T5UBVKh#EqJm#yEW4Pwoia zeJ207Ri!J6(G=qZU`=q&ddGT^2lvK}+W6 zcil~A1z4?ED1=S`Bw4C4A4O&2qKP0U^LzC6)IH8=n;LER#s2($&=qL&A=NB-8GaC`uvibYQ-e;AtNa0;xy6 z_%cNvouFvUb|Zy4w6l#yvfBmdgGB8$4$ed!o6xLDO)LK(B5*v%k({w1dUMEsPT7=$M43rEQDx6(v*d^usn?e&Gpni6=eF5R56bu zz_*8~+N(Rl1ackc(70#OO>QZ+(!y!OS?y0hX zCC7z^!@OW5ZMSc?7?X_+L_Qr<*6*aB>>tLZ1H`wlsKwp% zfHX^*eVTr+O3zk}Uzv8s|8#J|y?e_<*o>=G?w&aMI>ekO|u4ejUjQ zw!3FWx+!^cv+4NYpcBSDZUXq9FR}M5pXUl&`4XWn$k|Ol5YmpM#Q9XpuW?o?bJ7@5 zopG6i9)9&BeMn8FCHTH%8rXbHL)?)u(h#_!qVml`hi4Rh(jjkwS>{Sp#CthLsh zdGotot^YkbfA5S0aEV7h38*EhSm{NmP|n-*Ljjqw)_9=MSsWmhNM{OYit-9LdQJjnAD@Z+73(BXFbo z@v&qDT}2CCp{Hc0o>Kx*O!O`uzf+f`VNs5Rbt87>ZH{nbB^=Zx(c z{3|xK=>9`(fpkvxI;N2-7`&x_l&B^7OO29jIx3NO1fh}6_WMHZ2aB(1@3+ha4jf4| zMNRvdj#~vQ9;l-a1+r}5q3EXz8+_$*--aEq*J+G+t|@@r&9x=wxK!|+HA&!ZLq3ar zD|fm3|5OD(>9VYFQ=rEw7nf5Wftze}8w~9Nu%+AspfMrsZ};f+d*0f~&Iph4!0CsP zFXqoyC}#5)%m2Hd_t)xv8U9S~t%=_mi2y7&?$-No#}|wBpAG-AsNMBZ&>dv=r7~8Y zDYOiRO2>F-Jjn7KHHw)B^-D2^`HtBx-7Q^>ZWI3Wl2*C>|399Je)-eH5(ys0Oi}_P zzW)zD+<4<*mEhd}`O@Ev*1>KkMv9js(ni#oPu0CaAm-?Z#xQ&DzZ zvJOxLtHQeYRYM7aP@5^p`oJ7LagRgb>_8B%b#^;$P8p9^mcyl>i{e4w9f1Yo2z^dq zJ?X5%HVDkXwb=4hD3g?Lr>5V4_BY*T>+5!6+8ukHMOp&-`m$r! zX;k6i`XdBD;#waS37dq48)xX200QU0KLl)k(~u3LY@wrETtkC74R&81QNW*6u<`$A{0Wyva+Gs{9JJ8DLmtoJhJ%ZPz*Oc z^ihoNzVkqBo+#Yf=``0a+}2%RDXShG{@fW z8QNj)2u&%>=Zl^>k_;p@X|lD9USx~cXVy-d)!%yQAioPK-G!6`^BB4?u0*zmnG`Z3 zNG1!K5i*HclOXoYID~O^WgH%@Owc$bN+2thZ@)^@SGUVcWrCl1N* z);ez7^^ZeeNEky_+{3um6IMGNF`M9j{sO~lHy)labaAmKU*PXCC7t?D)4wngieG0n zUj$H>cjLb{2>|%Jh3x?RYo|d@mA@3pIsiK)(H_9KlZb^u(ffz3V~zv&e}A?_r3Bet z!Dc{tMU;(h-jj|Z?zdPig%sp$d@XzU+KHXn-?M}rBBLVoay_5d@MD0mwm(&baej*n z-P{r#hK}4@@Ac=mmk3ATz{so;TmztWaH+}MV@gV}5_&6*u{iBrRi?56tas=|X#2T< zaeti0bjmPDpQa2T+C1zahg=ejW@w#v*jb(L0^*z4u(UezGRXF&$8Tc_uU85#bumz;*@m)ri5u zK8quXt~VowlNTKt4^DWljx&p7W>Kq)mDgV{kwX}80Gs(SZhJqVLOiabD|$j>H~442 z1$Im36T|yKHOeO+bL=&6LBcjxKyu2#X^naY)+k0*yX=Fs-eI_^z$#3bt!K}!wkjyE z%gwHQHhp*JD@bTQgOc=TW#h4!g~lgjDZ0}4__6urtVPsEW&U6DHvIxTkHKEz4ABXb zR~q(uej(h}G!ZCFM)wkkk#3!T=>qGPEo1{_rGRZ~J96Px58>DcYIc{`w6$|#d=gxc|AaUTqRg9ax$-~ z&HkB?+dDu!NOkx*8@C{J=s~x)=Ii}%lKaY&!b^Bdh#hK$$VtCUQ{rp7dt7_BH`yb`Smh?l(BMBPB7e+BjpIr^TVZrupkr?E+m9`A>P#1UA z8Y6UkH!@Q|ygILh7TKy;VRm$!tV$$<;j;IJR6W(pMgCA$#GcCJw%Zi7hrOZSbxQ3! z;{`hdMyr{N1d+YN!}c{+?jPmRyyx+7PdIOn2qdf$oQ9cpI2KqcvsMfDbZ1b(GHwLpMfk`i{j!l~ z8AMkY%O&o{-J2+cPsPr8TwxInvCRT`)??RzdYQ@S5tB1FTeHV!{Xwjj(J)~c0WFu1 z&RXgE;AR;H*&zv++$$@!y^fniLo9Mq3b7`BFtM^|B3;^Kmfe!JpL)${oi(8(xysj! z*TkcgIr(_2{rw;FmF z0?)@G@0{)7X-j*(#IUQF(QRp9{3yRf(ilI4R_E;oyB3RqQ^$}20mz>qJHZtIOZ|$= zQx1dwYz~FM0R*D}sDpv)#}V*=y+4kE2sZsV2XY`G6RZC?4sKvP^8^?HI0fa<2$j$P z)ld%8AQdLTOqc<)U=-v)B}{?YFb&F~0c>|>R@AGtpQ<4c{2|~oheJ}~jpx|V9xKTZ z^v`OD0(JkSzFYOHP#6Wl%Y(Wdh$MaW)-it1bubV9?G%^_jiBx@M&v^>%$&cR0@I)p p{948tKKkbz3)8wp&hE3a&niVp#-{kiWbg+L{CrTQ0fGPk007?s$o>ET literal 0 HcmV?d00001 diff --git a/outline_client/www/assets/outline-client-logo.png b/outline_client/www/assets/outline-client-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..82d2b390463a50d78825e7cca4abf5f50e82912b GIT binary patch literal 937 zcmV;a16KTrP)4i331V%$e z7o}a46yi-(6J99^6$o{wQWyPP4Ix3)&IFHJUST7khoUIDV%& z&QC9F_Ws_rzO~-H&)VPKMX#z{9}#zy@H@_LIQX;rh6wlOehvxI6gmKqs&k z=uLT_wf#r+Zk@0k$M$wfpV_`2SQ##xfHlAXFa_)Zwn_TCDb6jxW5A6u-|v7Ol7=gX zJ!$p(TZrjPK3@d)Vd6TI?_lBwntt6nbkv_(FfomNVf3af%A(Z9qNxGwN-sTO`|KPg%KfQCy&3(< z#GRAIm$#$-f54G6ULxtDn%3O_UIV@l$7R6VwtH+hY+p-Rpj*R!0C+jZKcxg~0mA>j z7J`0B>vycfNI7vi*$?RDuSc!dytz3tJK2UWqS?Hj7-w(o4RAB+A-;s%m` zpUZ8s88bZw`%>)HiQgJrm+c=DKan)r_EFo{Gyo)h11tw#<@CKZ5&UvVUst50cY&vY z6G3%Rw#VkWpCi8d_X2w<`*L0(X`J%MZaAn;%Kir!0ai*na9a7F9a@$$7(B8r_5yBK<5lD*Xiph3%^%Vb#LHb(w1bl^=u>T00000 LNkvXXu0mjfMA*r@ literal 0 HcmV?d00001 diff --git a/outline_client/www/assets/outline-client-logo.svg b/outline_client/www/assets/outline-client-logo.svg new file mode 100644 index 0000000000..b211065c72 --- /dev/null +++ b/outline_client/www/assets/outline-client-logo.svg @@ -0,0 +1,34 @@ + + + + +outline-logotype +Created with Sketch. + + + + + + + + + + + + + + + + + diff --git a/outline_client/www/assets/privacy-lock.png b/outline_client/www/assets/privacy-lock.png new file mode 100644 index 0000000000000000000000000000000000000000..12c942ec6d64ddbe9621f0866f8e38c46a59f522 GIT binary patch literal 32285 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 literal 0 HcmV?d00001 diff --git a/outline_client/www/index_electron.html b/outline_client/www/index_electron.html new file mode 100644 index 0000000000..64c46e07cf --- /dev/null +++ b/outline_client/www/index_electron.html @@ -0,0 +1,33 @@ + + + + + + + Outline + + + + + + + diff --git a/outline_client/www/main.js b/outline_client/www/main.js new file mode 100644 index 0000000000..1b093541e4 --- /dev/null +++ b/outline_client/www/main.js @@ -0,0 +1,117852 @@ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./node_modules/@material/base/foundation.js": +/*!***************************************************!*\ + !*** ./node_modules/@material/base/foundation.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MDCFoundation: () => (/* binding */ MDCFoundation), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var MDCFoundation = /** @class */ (function () { + function MDCFoundation(adapter) { + if (adapter === void 0) { adapter = {}; } + this.adapter = adapter; + } + Object.defineProperty(MDCFoundation, "cssClasses", { + get: function () { + // Classes extending MDCFoundation should implement this method to return an object which exports every + // CSS class the foundation class needs as a property. e.g. {ACTIVE: 'mdc-component--active'} + return {}; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCFoundation, "strings", { + get: function () { + // Classes extending MDCFoundation should implement this method to return an object which exports all + // semantic strings as constants. e.g. {ARIA_ROLE: 'tablist'} + return {}; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCFoundation, "numbers", { + get: function () { + // Classes extending MDCFoundation should implement this method to return an object which exports all + // of its semantic numbers as constants. e.g. {ANIMATION_DELAY_MS: 350} + return {}; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCFoundation, "defaultAdapter", { + get: function () { + // Classes extending MDCFoundation may choose to implement this getter in order to provide a convenient + // way of viewing the necessary methods of an adapter. In the future, this could also be used for adapter + // validation. + return {}; + }, + enumerable: false, + configurable: true + }); + MDCFoundation.prototype.init = function () { + // Subclasses should override this method to perform initialization routines (registering events, etc.) + }; + MDCFoundation.prototype.destroy = function () { + // Subclasses should override this method to perform de-initialization routines (de-registering events, etc.) + }; + return MDCFoundation; +}()); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MDCFoundation); +//# sourceMappingURL=foundation.js.map + +/***/ }), + +/***/ "./node_modules/@material/dom/keyboard.js": +/*!************************************************!*\ + !*** ./node_modules/@material/dom/keyboard.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ KEY: () => (/* binding */ KEY), +/* harmony export */ isNavigationEvent: () => (/* binding */ isNavigationEvent), +/* harmony export */ normalizeKey: () => (/* binding */ normalizeKey) +/* harmony export */ }); +/** + * @license + * Copyright 2020 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +/** + * KEY provides normalized string values for keys. + */ +var KEY = { + UNKNOWN: 'Unknown', + BACKSPACE: 'Backspace', + ENTER: 'Enter', + SPACEBAR: 'Spacebar', + PAGE_UP: 'PageUp', + PAGE_DOWN: 'PageDown', + END: 'End', + HOME: 'Home', + ARROW_LEFT: 'ArrowLeft', + ARROW_UP: 'ArrowUp', + ARROW_RIGHT: 'ArrowRight', + ARROW_DOWN: 'ArrowDown', + DELETE: 'Delete', + ESCAPE: 'Escape', + TAB: 'Tab', +}; +var normalizedKeys = new Set(); +// IE11 has no support for new Map with iterable so we need to initialize this +// by hand. +normalizedKeys.add(KEY.BACKSPACE); +normalizedKeys.add(KEY.ENTER); +normalizedKeys.add(KEY.SPACEBAR); +normalizedKeys.add(KEY.PAGE_UP); +normalizedKeys.add(KEY.PAGE_DOWN); +normalizedKeys.add(KEY.END); +normalizedKeys.add(KEY.HOME); +normalizedKeys.add(KEY.ARROW_LEFT); +normalizedKeys.add(KEY.ARROW_UP); +normalizedKeys.add(KEY.ARROW_RIGHT); +normalizedKeys.add(KEY.ARROW_DOWN); +normalizedKeys.add(KEY.DELETE); +normalizedKeys.add(KEY.ESCAPE); +normalizedKeys.add(KEY.TAB); +var KEY_CODE = { + BACKSPACE: 8, + ENTER: 13, + SPACEBAR: 32, + PAGE_UP: 33, + PAGE_DOWN: 34, + END: 35, + HOME: 36, + ARROW_LEFT: 37, + ARROW_UP: 38, + ARROW_RIGHT: 39, + ARROW_DOWN: 40, + DELETE: 46, + ESCAPE: 27, + TAB: 9, +}; +var mappedKeyCodes = new Map(); +// IE11 has no support for new Map with iterable so we need to initialize this +// by hand. +mappedKeyCodes.set(KEY_CODE.BACKSPACE, KEY.BACKSPACE); +mappedKeyCodes.set(KEY_CODE.ENTER, KEY.ENTER); +mappedKeyCodes.set(KEY_CODE.SPACEBAR, KEY.SPACEBAR); +mappedKeyCodes.set(KEY_CODE.PAGE_UP, KEY.PAGE_UP); +mappedKeyCodes.set(KEY_CODE.PAGE_DOWN, KEY.PAGE_DOWN); +mappedKeyCodes.set(KEY_CODE.END, KEY.END); +mappedKeyCodes.set(KEY_CODE.HOME, KEY.HOME); +mappedKeyCodes.set(KEY_CODE.ARROW_LEFT, KEY.ARROW_LEFT); +mappedKeyCodes.set(KEY_CODE.ARROW_UP, KEY.ARROW_UP); +mappedKeyCodes.set(KEY_CODE.ARROW_RIGHT, KEY.ARROW_RIGHT); +mappedKeyCodes.set(KEY_CODE.ARROW_DOWN, KEY.ARROW_DOWN); +mappedKeyCodes.set(KEY_CODE.DELETE, KEY.DELETE); +mappedKeyCodes.set(KEY_CODE.ESCAPE, KEY.ESCAPE); +mappedKeyCodes.set(KEY_CODE.TAB, KEY.TAB); +var navigationKeys = new Set(); +// IE11 has no support for new Set with iterable so we need to initialize this +// by hand. +navigationKeys.add(KEY.PAGE_UP); +navigationKeys.add(KEY.PAGE_DOWN); +navigationKeys.add(KEY.END); +navigationKeys.add(KEY.HOME); +navigationKeys.add(KEY.ARROW_LEFT); +navigationKeys.add(KEY.ARROW_UP); +navigationKeys.add(KEY.ARROW_RIGHT); +navigationKeys.add(KEY.ARROW_DOWN); +/** + * normalizeKey returns the normalized string for a navigational action. + */ +function normalizeKey(evt) { + var key = evt.key; + // If the event already has a normalized key, return it + if (normalizedKeys.has(key)) { + return key; + } + // tslint:disable-next-line:deprecation + var mappedKey = mappedKeyCodes.get(evt.keyCode); + if (mappedKey) { + return mappedKey; + } + return KEY.UNKNOWN; +} +/** + * isNavigationEvent returns whether the event is a navigation event + */ +function isNavigationEvent(evt) { + return navigationKeys.has(normalizeKey(evt)); +} +//# sourceMappingURL=keyboard.js.map + +/***/ }), + +/***/ "./node_modules/@material/dom/ponyfill.js": +/*!************************************************!*\ + !*** ./node_modules/@material/dom/ponyfill.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ closest: () => (/* binding */ closest), +/* harmony export */ estimateScrollWidth: () => (/* binding */ estimateScrollWidth), +/* harmony export */ matches: () => (/* binding */ matches) +/* harmony export */ }); +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +/** + * @fileoverview A "ponyfill" is a polyfill that doesn't modify the global prototype chain. + * This makes ponyfills safer than traditional polyfills, especially for libraries like MDC. + */ +function closest(element, selector) { + if (element.closest) { + return element.closest(selector); + } + var el = element; + while (el) { + if (matches(el, selector)) { + return el; + } + el = el.parentElement; + } + return null; +} +function matches(element, selector) { + var nativeMatches = element.matches + || element.webkitMatchesSelector + || element.msMatchesSelector; + return nativeMatches.call(element, selector); +} +/** + * Used to compute the estimated scroll width of elements. When an element is + * hidden due to display: none; being applied to a parent element, the width is + * returned as 0. However, the element will have a true width once no longer + * inside a display: none context. This method computes an estimated width when + * the element is hidden or returns the true width when the element is visble. + * @param {Element} element the element whose width to estimate + */ +function estimateScrollWidth(element) { + // Check the offsetParent. If the element inherits display: none from any + // parent, the offsetParent property will be null (see + // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent). + // This check ensures we only clone the node when necessary. + var htmlEl = element; + if (htmlEl.offsetParent !== null) { + return htmlEl.scrollWidth; + } + var clone = htmlEl.cloneNode(true); + clone.style.setProperty('position', 'absolute'); + clone.style.setProperty('transform', 'translate(-9999px, -9999px)'); + document.documentElement.appendChild(clone); + var scrollWidth = clone.scrollWidth; + document.documentElement.removeChild(clone); + return scrollWidth; +} +//# sourceMappingURL=ponyfill.js.map + +/***/ }), + +/***/ "./node_modules/@material/list/constants.js": +/*!**************************************************!*\ + !*** ./node_modules/@material/list/constants.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ cssClasses: () => (/* binding */ cssClasses), +/* harmony export */ deprecatedClassNameMap: () => (/* binding */ deprecatedClassNameMap), +/* harmony export */ evolutionAttribute: () => (/* binding */ evolutionAttribute), +/* harmony export */ evolutionClassNameMap: () => (/* binding */ evolutionClassNameMap), +/* harmony export */ numbers: () => (/* binding */ numbers), +/* harmony export */ strings: () => (/* binding */ strings) +/* harmony export */ }); +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var _a, _b; +var cssClasses = { + LIST_ITEM_ACTIVATED_CLASS: 'mdc-list-item--activated', + LIST_ITEM_CLASS: 'mdc-list-item', + LIST_ITEM_DISABLED_CLASS: 'mdc-list-item--disabled', + LIST_ITEM_SELECTED_CLASS: 'mdc-list-item--selected', + LIST_ITEM_TEXT_CLASS: 'mdc-list-item__text', + LIST_ITEM_PRIMARY_TEXT_CLASS: 'mdc-list-item__primary-text', + ROOT: 'mdc-list', +}; +var evolutionClassNameMap = (_a = {}, + _a["" + cssClasses.LIST_ITEM_ACTIVATED_CLASS] = 'mdc-list-item--activated', + _a["" + cssClasses.LIST_ITEM_CLASS] = 'mdc-list-item', + _a["" + cssClasses.LIST_ITEM_DISABLED_CLASS] = 'mdc-list-item--disabled', + _a["" + cssClasses.LIST_ITEM_SELECTED_CLASS] = 'mdc-list-item--selected', + _a["" + cssClasses.LIST_ITEM_PRIMARY_TEXT_CLASS] = 'mdc-list-item__primary-text', + _a["" + cssClasses.ROOT] = 'mdc-list', + _a); +var deprecatedClassNameMap = (_b = {}, + _b["" + cssClasses.LIST_ITEM_ACTIVATED_CLASS] = 'mdc-deprecated-list-item--activated', + _b["" + cssClasses.LIST_ITEM_CLASS] = 'mdc-deprecated-list-item', + _b["" + cssClasses.LIST_ITEM_DISABLED_CLASS] = 'mdc-deprecated-list-item--disabled', + _b["" + cssClasses.LIST_ITEM_SELECTED_CLASS] = 'mdc-deprecated-list-item--selected', + _b["" + cssClasses.LIST_ITEM_TEXT_CLASS] = 'mdc-deprecated-list-item__text', + _b["" + cssClasses.LIST_ITEM_PRIMARY_TEXT_CLASS] = 'mdc-deprecated-list-item__primary-text', + _b["" + cssClasses.ROOT] = 'mdc-deprecated-list', + _b); +var strings = { + ACTION_EVENT: 'MDCList:action', + ARIA_CHECKED: 'aria-checked', + ARIA_CHECKED_CHECKBOX_SELECTOR: '[role="checkbox"][aria-checked="true"]', + ARIA_CHECKED_RADIO_SELECTOR: '[role="radio"][aria-checked="true"]', + ARIA_CURRENT: 'aria-current', + ARIA_DISABLED: 'aria-disabled', + ARIA_ORIENTATION: 'aria-orientation', + ARIA_ORIENTATION_HORIZONTAL: 'horizontal', + ARIA_ROLE_CHECKBOX_SELECTOR: '[role="checkbox"]', + ARIA_SELECTED: 'aria-selected', + ARIA_INTERACTIVE_ROLES_SELECTOR: '[role="listbox"], [role="menu"]', + ARIA_MULTI_SELECTABLE_SELECTOR: '[aria-multiselectable="true"]', + CHECKBOX_RADIO_SELECTOR: 'input[type="checkbox"], input[type="radio"]', + CHECKBOX_SELECTOR: 'input[type="checkbox"]', + CHILD_ELEMENTS_TO_TOGGLE_TABINDEX: "\n ." + cssClasses.LIST_ITEM_CLASS + " button:not(:disabled),\n ." + cssClasses.LIST_ITEM_CLASS + " a,\n ." + deprecatedClassNameMap[cssClasses.LIST_ITEM_CLASS] + " button:not(:disabled),\n ." + deprecatedClassNameMap[cssClasses.LIST_ITEM_CLASS] + " a\n ", + DEPRECATED_SELECTOR: '.mdc-deprecated-list', + FOCUSABLE_CHILD_ELEMENTS: "\n ." + cssClasses.LIST_ITEM_CLASS + " button:not(:disabled),\n ." + cssClasses.LIST_ITEM_CLASS + " a,\n ." + cssClasses.LIST_ITEM_CLASS + " input[type=\"radio\"]:not(:disabled),\n ." + cssClasses.LIST_ITEM_CLASS + " input[type=\"checkbox\"]:not(:disabled),\n ." + deprecatedClassNameMap[cssClasses.LIST_ITEM_CLASS] + " button:not(:disabled),\n ." + deprecatedClassNameMap[cssClasses.LIST_ITEM_CLASS] + " a,\n ." + deprecatedClassNameMap[cssClasses.LIST_ITEM_CLASS] + " input[type=\"radio\"]:not(:disabled),\n ." + deprecatedClassNameMap[cssClasses.LIST_ITEM_CLASS] + " input[type=\"checkbox\"]:not(:disabled)\n ", + RADIO_SELECTOR: 'input[type="radio"]', + SELECTED_ITEM_SELECTOR: '[aria-selected="true"], [aria-current="true"]', +}; +var numbers = { + UNSET_INDEX: -1, + TYPEAHEAD_BUFFER_CLEAR_TIMEOUT_MS: 300 +}; +var evolutionAttribute = 'evolution'; + +//# sourceMappingURL=constants.js.map + +/***/ }), + +/***/ "./node_modules/@material/menu-surface/constants.js": +/*!**********************************************************!*\ + !*** ./node_modules/@material/menu-surface/constants.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Corner: () => (/* binding */ Corner), +/* harmony export */ CornerBit: () => (/* binding */ CornerBit), +/* harmony export */ cssClasses: () => (/* binding */ cssClasses), +/* harmony export */ numbers: () => (/* binding */ numbers), +/* harmony export */ strings: () => (/* binding */ strings) +/* harmony export */ }); +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var cssClasses = { + ANCHOR: 'mdc-menu-surface--anchor', + ANIMATING_CLOSED: 'mdc-menu-surface--animating-closed', + ANIMATING_OPEN: 'mdc-menu-surface--animating-open', + FIXED: 'mdc-menu-surface--fixed', + IS_OPEN_BELOW: 'mdc-menu-surface--is-open-below', + OPEN: 'mdc-menu-surface--open', + ROOT: 'mdc-menu-surface', +}; +// tslint:disable:object-literal-sort-keys +var strings = { + CLOSED_EVENT: 'MDCMenuSurface:closed', + CLOSING_EVENT: 'MDCMenuSurface:closing', + OPENED_EVENT: 'MDCMenuSurface:opened', + FOCUSABLE_ELEMENTS: [ + 'button:not(:disabled)', + '[href]:not([aria-disabled="true"])', + 'input:not(:disabled)', + 'select:not(:disabled)', + 'textarea:not(:disabled)', + '[tabindex]:not([tabindex="-1"]):not([aria-disabled="true"])', + ].join(', '), +}; +// tslint:enable:object-literal-sort-keys +var numbers = { + /** Total duration of menu-surface open animation. */ + TRANSITION_OPEN_DURATION: 120, + /** Total duration of menu-surface close animation. */ + TRANSITION_CLOSE_DURATION: 75, + /** + * Margin left to the edge of the viewport when menu-surface is at maximum + * possible height. Also used as a viewport margin. + */ + MARGIN_TO_EDGE: 32, + /** + * Ratio of anchor width to menu-surface width for switching from corner + * positioning to center positioning. + */ + ANCHOR_TO_MENU_SURFACE_WIDTH_RATIO: 0.67, + /** + * Amount of time to wait before restoring focus when closing the menu + * surface. This is important because if a touch event triggered the menu + * close, and the subsequent mouse event occurs after focus is restored, then + * the restored focus would be lost. + */ + TOUCH_EVENT_WAIT_MS: 30, +}; +/** + * Enum for bits in the {@see Corner) bitmap. + */ +var CornerBit; +(function (CornerBit) { + CornerBit[CornerBit["BOTTOM"] = 1] = "BOTTOM"; + CornerBit[CornerBit["CENTER"] = 2] = "CENTER"; + CornerBit[CornerBit["RIGHT"] = 4] = "RIGHT"; + CornerBit[CornerBit["FLIP_RTL"] = 8] = "FLIP_RTL"; +})(CornerBit || (CornerBit = {})); +/** + * Enum for representing an element corner for positioning the menu-surface. + * + * The START constants map to LEFT if element directionality is left + * to right and RIGHT if the directionality is right to left. + * Likewise END maps to RIGHT or LEFT depending on the directionality. + */ +var Corner; +(function (Corner) { + Corner[Corner["TOP_LEFT"] = 0] = "TOP_LEFT"; + Corner[Corner["TOP_RIGHT"] = 4] = "TOP_RIGHT"; + Corner[Corner["BOTTOM_LEFT"] = 1] = "BOTTOM_LEFT"; + Corner[Corner["BOTTOM_RIGHT"] = 5] = "BOTTOM_RIGHT"; + Corner[Corner["TOP_START"] = 8] = "TOP_START"; + Corner[Corner["TOP_END"] = 12] = "TOP_END"; + Corner[Corner["BOTTOM_START"] = 9] = "BOTTOM_START"; + Corner[Corner["BOTTOM_END"] = 13] = "BOTTOM_END"; +})(Corner || (Corner = {})); + +//# sourceMappingURL=constants.js.map + +/***/ }), + +/***/ "./node_modules/@material/menu-surface/foundation.js": +/*!***********************************************************!*\ + !*** ./node_modules/@material/menu-surface/foundation.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MDCMenuSurfaceFoundation: () => (/* binding */ MDCMenuSurfaceFoundation), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var _material_base_foundation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material/base/foundation */ "./node_modules/@material/base/foundation.js"); +/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constants */ "./node_modules/@material/menu-surface/constants.js"); +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var MDCMenuSurfaceFoundation = /** @class */ (function (_super) { + (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__extends)(MDCMenuSurfaceFoundation, _super); + function MDCMenuSurfaceFoundation(adapter) { + var _this = _super.call(this, (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)((0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)({}, MDCMenuSurfaceFoundation.defaultAdapter), adapter)) || this; + _this.isSurfaceOpen = false; + _this.isQuickOpen = false; + _this.isHoistedElement = false; + _this.isFixedPosition = false; + _this.isHorizontallyCenteredOnViewport = false; + _this.maxHeight = 0; + _this.openBottomBias = 0; + _this.openAnimationEndTimerId = 0; + _this.closeAnimationEndTimerId = 0; + _this.animationRequestId = 0; + _this.anchorCorner = _constants__WEBPACK_IMPORTED_MODULE_1__.Corner.TOP_START; + /** + * Corner of the menu surface to which menu surface is attached to anchor. + * + * Anchor corner --->+----------+ + * | ANCHOR | + * +----------+ + * Origin corner --->+--------------+ + * | | + * | | + * | MENU SURFACE | + * | | + * | | + * +--------------+ + */ + _this.originCorner = _constants__WEBPACK_IMPORTED_MODULE_1__.Corner.TOP_START; + _this.anchorMargin = { top: 0, right: 0, bottom: 0, left: 0 }; + _this.position = { x: 0, y: 0 }; + return _this; + } + Object.defineProperty(MDCMenuSurfaceFoundation, "cssClasses", { + get: function () { + return _constants__WEBPACK_IMPORTED_MODULE_1__.cssClasses; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCMenuSurfaceFoundation, "strings", { + get: function () { + return _constants__WEBPACK_IMPORTED_MODULE_1__.strings; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCMenuSurfaceFoundation, "numbers", { + get: function () { + return _constants__WEBPACK_IMPORTED_MODULE_1__.numbers; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCMenuSurfaceFoundation, "Corner", { + get: function () { + return _constants__WEBPACK_IMPORTED_MODULE_1__.Corner; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCMenuSurfaceFoundation, "defaultAdapter", { + /** + * @see {@link MDCMenuSurfaceAdapter} for typing information on parameters and return types. + */ + get: function () { + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + return { + addClass: function () { return undefined; }, + removeClass: function () { return undefined; }, + hasClass: function () { return false; }, + hasAnchor: function () { return false; }, + isElementInContainer: function () { return false; }, + isFocused: function () { return false; }, + isRtl: function () { return false; }, + getInnerDimensions: function () { return ({ height: 0, width: 0 }); }, + getAnchorDimensions: function () { return null; }, + getWindowDimensions: function () { return ({ height: 0, width: 0 }); }, + getBodyDimensions: function () { return ({ height: 0, width: 0 }); }, + getWindowScroll: function () { return ({ x: 0, y: 0 }); }, + setPosition: function () { return undefined; }, + setMaxHeight: function () { return undefined; }, + setTransformOrigin: function () { return undefined; }, + saveFocus: function () { return undefined; }, + restoreFocus: function () { return undefined; }, + notifyClose: function () { return undefined; }, + notifyOpen: function () { return undefined; }, + notifyClosing: function () { return undefined; }, + }; + // tslint:enable:object-literal-sort-keys + }, + enumerable: false, + configurable: true + }); + MDCMenuSurfaceFoundation.prototype.init = function () { + var _a = MDCMenuSurfaceFoundation.cssClasses, ROOT = _a.ROOT, OPEN = _a.OPEN; + if (!this.adapter.hasClass(ROOT)) { + throw new Error(ROOT + " class required in root element."); + } + if (this.adapter.hasClass(OPEN)) { + this.isSurfaceOpen = true; + } + }; + MDCMenuSurfaceFoundation.prototype.destroy = function () { + clearTimeout(this.openAnimationEndTimerId); + clearTimeout(this.closeAnimationEndTimerId); + // Cancel any currently running animations. + cancelAnimationFrame(this.animationRequestId); + }; + /** + * @param corner Default anchor corner alignment of top-left menu surface + * corner. + */ + MDCMenuSurfaceFoundation.prototype.setAnchorCorner = function (corner) { + this.anchorCorner = corner; + }; + /** + * Flip menu corner horizontally. + */ + MDCMenuSurfaceFoundation.prototype.flipCornerHorizontally = function () { + this.originCorner = this.originCorner ^ _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.RIGHT; + }; + /** + * @param margin Set of margin values from anchor. + */ + MDCMenuSurfaceFoundation.prototype.setAnchorMargin = function (margin) { + this.anchorMargin.top = margin.top || 0; + this.anchorMargin.right = margin.right || 0; + this.anchorMargin.bottom = margin.bottom || 0; + this.anchorMargin.left = margin.left || 0; + }; + /** Used to indicate if the menu-surface is hoisted to the body. */ + MDCMenuSurfaceFoundation.prototype.setIsHoisted = function (isHoisted) { + this.isHoistedElement = isHoisted; + }; + /** + * Used to set the menu-surface calculations based on a fixed position menu. + */ + MDCMenuSurfaceFoundation.prototype.setFixedPosition = function (isFixedPosition) { + this.isFixedPosition = isFixedPosition; + }; + /** + * @return Returns true if menu is in fixed (`position: fixed`) position. + */ + MDCMenuSurfaceFoundation.prototype.isFixed = function () { + return this.isFixedPosition; + }; + /** Sets the menu-surface position on the page. */ + MDCMenuSurfaceFoundation.prototype.setAbsolutePosition = function (x, y) { + this.position.x = this.isFinite(x) ? x : 0; + this.position.y = this.isFinite(y) ? y : 0; + }; + /** Sets whether menu-surface should be horizontally centered to viewport. */ + MDCMenuSurfaceFoundation.prototype.setIsHorizontallyCenteredOnViewport = function (isCentered) { + this.isHorizontallyCenteredOnViewport = isCentered; + }; + MDCMenuSurfaceFoundation.prototype.setQuickOpen = function (quickOpen) { + this.isQuickOpen = quickOpen; + }; + /** + * Sets maximum menu-surface height on open. + * @param maxHeight The desired max-height. Set to 0 (default) to + * automatically calculate max height based on available viewport space. + */ + MDCMenuSurfaceFoundation.prototype.setMaxHeight = function (maxHeight) { + this.maxHeight = maxHeight; + }; + /** + * Set to a positive integer to influence the menu to preferentially open + * below the anchor instead of above. + * @param bias A value of `x` simulates an extra `x` pixels of available space + * below the menu during positioning calculations. + */ + MDCMenuSurfaceFoundation.prototype.setOpenBottomBias = function (bias) { + this.openBottomBias = bias; + }; + MDCMenuSurfaceFoundation.prototype.isOpen = function () { + return this.isSurfaceOpen; + }; + /** + * Open the menu surface. + */ + MDCMenuSurfaceFoundation.prototype.open = function () { + var _this = this; + if (this.isSurfaceOpen) { + return; + } + this.adapter.saveFocus(); + if (this.isQuickOpen) { + this.isSurfaceOpen = true; + this.adapter.addClass(MDCMenuSurfaceFoundation.cssClasses.OPEN); + this.dimensions = this.adapter.getInnerDimensions(); + this.autoposition(); + this.adapter.notifyOpen(); + } + else { + this.adapter.addClass(MDCMenuSurfaceFoundation.cssClasses.ANIMATING_OPEN); + this.animationRequestId = requestAnimationFrame(function () { + _this.dimensions = _this.adapter.getInnerDimensions(); + _this.autoposition(); + _this.adapter.addClass(MDCMenuSurfaceFoundation.cssClasses.OPEN); + _this.openAnimationEndTimerId = setTimeout(function () { + _this.openAnimationEndTimerId = 0; + _this.adapter.removeClass(MDCMenuSurfaceFoundation.cssClasses.ANIMATING_OPEN); + _this.adapter.notifyOpen(); + }, _constants__WEBPACK_IMPORTED_MODULE_1__.numbers.TRANSITION_OPEN_DURATION); + }); + this.isSurfaceOpen = true; + } + }; + /** + * Closes the menu surface. + */ + MDCMenuSurfaceFoundation.prototype.close = function (skipRestoreFocus) { + var _this = this; + if (skipRestoreFocus === void 0) { skipRestoreFocus = false; } + if (!this.isSurfaceOpen) { + return; + } + this.adapter.notifyClosing(); + if (this.isQuickOpen) { + this.isSurfaceOpen = false; + if (!skipRestoreFocus) { + this.maybeRestoreFocus(); + } + this.adapter.removeClass(MDCMenuSurfaceFoundation.cssClasses.OPEN); + this.adapter.removeClass(MDCMenuSurfaceFoundation.cssClasses.IS_OPEN_BELOW); + this.adapter.notifyClose(); + return; + } + this.adapter.addClass(MDCMenuSurfaceFoundation.cssClasses.ANIMATING_CLOSED); + requestAnimationFrame(function () { + _this.adapter.removeClass(MDCMenuSurfaceFoundation.cssClasses.OPEN); + _this.adapter.removeClass(MDCMenuSurfaceFoundation.cssClasses.IS_OPEN_BELOW); + _this.closeAnimationEndTimerId = setTimeout(function () { + _this.closeAnimationEndTimerId = 0; + _this.adapter.removeClass(MDCMenuSurfaceFoundation.cssClasses.ANIMATING_CLOSED); + _this.adapter.notifyClose(); + }, _constants__WEBPACK_IMPORTED_MODULE_1__.numbers.TRANSITION_CLOSE_DURATION); + }); + this.isSurfaceOpen = false; + if (!skipRestoreFocus) { + this.maybeRestoreFocus(); + } + }; + /** Handle clicks and close if not within menu-surface element. */ + MDCMenuSurfaceFoundation.prototype.handleBodyClick = function (evt) { + var el = evt.target; + if (this.adapter.isElementInContainer(el)) { + return; + } + this.close(); + }; + /** Handle keys that close the surface. */ + MDCMenuSurfaceFoundation.prototype.handleKeydown = function (evt) { + var keyCode = evt.keyCode, key = evt.key; + var isEscape = key === 'Escape' || keyCode === 27; + if (isEscape) { + this.close(); + } + }; + MDCMenuSurfaceFoundation.prototype.autoposition = function () { + var _a; + // Compute measurements for autoposition methods reuse. + this.measurements = this.getAutoLayoutmeasurements(); + var corner = this.getoriginCorner(); + var maxMenuSurfaceHeight = this.getMenuSurfaceMaxHeight(corner); + var verticalAlignment = this.hasBit(corner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.BOTTOM) ? 'bottom' : 'top'; + var horizontalAlignment = this.hasBit(corner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.RIGHT) ? 'right' : 'left'; + var horizontalOffset = this.getHorizontalOriginOffset(corner); + var verticalOffset = this.getVerticalOriginOffset(corner); + var _b = this.measurements, anchorSize = _b.anchorSize, surfaceSize = _b.surfaceSize; + var position = (_a = {}, + _a[horizontalAlignment] = horizontalOffset, + _a[verticalAlignment] = verticalOffset, + _a); + // Center align when anchor width is comparable or greater than menu + // surface, otherwise keep corner. + if (anchorSize.width / surfaceSize.width > + _constants__WEBPACK_IMPORTED_MODULE_1__.numbers.ANCHOR_TO_MENU_SURFACE_WIDTH_RATIO) { + horizontalAlignment = 'center'; + } + // If the menu-surface has been hoisted to the body, it's no longer relative + // to the anchor element + if (this.isHoistedElement || this.isFixedPosition) { + this.adjustPositionForHoistedElement(position); + } + this.adapter.setTransformOrigin(horizontalAlignment + " " + verticalAlignment); + this.adapter.setPosition(position); + this.adapter.setMaxHeight(maxMenuSurfaceHeight ? maxMenuSurfaceHeight + 'px' : ''); + // If it is opened from the top then add is-open-below class + if (!this.hasBit(corner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.BOTTOM)) { + this.adapter.addClass(MDCMenuSurfaceFoundation.cssClasses.IS_OPEN_BELOW); + } + }; + /** + * @return Measurements used to position menu surface popup. + */ + MDCMenuSurfaceFoundation.prototype.getAutoLayoutmeasurements = function () { + var anchorRect = this.adapter.getAnchorDimensions(); + var bodySize = this.adapter.getBodyDimensions(); + var viewportSize = this.adapter.getWindowDimensions(); + var windowScroll = this.adapter.getWindowScroll(); + if (!anchorRect) { + // tslint:disable:object-literal-sort-keys Positional properties are more readable when they're grouped together + anchorRect = { + top: this.position.y, + right: this.position.x, + bottom: this.position.y, + left: this.position.x, + width: 0, + height: 0, + }; + // tslint:enable:object-literal-sort-keys + } + return { + anchorSize: anchorRect, + bodySize: bodySize, + surfaceSize: this.dimensions, + viewportDistance: { + // tslint:disable:object-literal-sort-keys Positional properties are more readable when they're grouped together + top: anchorRect.top, + right: viewportSize.width - anchorRect.right, + bottom: viewportSize.height - anchorRect.bottom, + left: anchorRect.left, + // tslint:enable:object-literal-sort-keys + }, + viewportSize: viewportSize, + windowScroll: windowScroll, + }; + }; + /** + * Computes the corner of the anchor from which to animate and position the + * menu surface. + * + * Only LEFT or RIGHT bit is used to position the menu surface ignoring RTL + * context. E.g., menu surface will be positioned from right side on TOP_END. + */ + MDCMenuSurfaceFoundation.prototype.getoriginCorner = function () { + var corner = this.originCorner; + var _a = this.measurements, viewportDistance = _a.viewportDistance, anchorSize = _a.anchorSize, surfaceSize = _a.surfaceSize; + var MARGIN_TO_EDGE = MDCMenuSurfaceFoundation.numbers.MARGIN_TO_EDGE; + var isAnchoredToBottom = this.hasBit(this.anchorCorner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.BOTTOM); + var availableTop; + var availableBottom; + if (isAnchoredToBottom) { + availableTop = + viewportDistance.top - MARGIN_TO_EDGE + this.anchorMargin.bottom; + availableBottom = + viewportDistance.bottom - MARGIN_TO_EDGE - this.anchorMargin.bottom; + } + else { + availableTop = + viewportDistance.top - MARGIN_TO_EDGE + this.anchorMargin.top; + availableBottom = viewportDistance.bottom - MARGIN_TO_EDGE + + anchorSize.height - this.anchorMargin.top; + } + var isAvailableBottom = availableBottom - surfaceSize.height > 0; + if (!isAvailableBottom && + availableTop > availableBottom + this.openBottomBias) { + // Attach bottom side of surface to the anchor. + corner = this.setBit(corner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.BOTTOM); + } + var isRtl = this.adapter.isRtl(); + var isFlipRtl = this.hasBit(this.anchorCorner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.FLIP_RTL); + var hasRightBit = this.hasBit(this.anchorCorner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.RIGHT) || + this.hasBit(corner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.RIGHT); + // Whether surface attached to right side of anchor element. + var isAnchoredToRight = false; + // Anchored to start + if (isRtl && isFlipRtl) { + isAnchoredToRight = !hasRightBit; + } + else { + // Anchored to right + isAnchoredToRight = hasRightBit; + } + var availableLeft; + var availableRight; + if (isAnchoredToRight) { + availableLeft = + viewportDistance.left + anchorSize.width + this.anchorMargin.right; + availableRight = viewportDistance.right - this.anchorMargin.right; + } + else { + availableLeft = viewportDistance.left + this.anchorMargin.left; + availableRight = + viewportDistance.right + anchorSize.width - this.anchorMargin.left; + } + var isAvailableLeft = availableLeft - surfaceSize.width > 0; + var isAvailableRight = availableRight - surfaceSize.width > 0; + var isOriginCornerAlignedToEnd = this.hasBit(corner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.FLIP_RTL) && + this.hasBit(corner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.RIGHT); + if (isAvailableRight && isOriginCornerAlignedToEnd && isRtl || + !isAvailableLeft && isOriginCornerAlignedToEnd) { + // Attach left side of surface to the anchor. + corner = this.unsetBit(corner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.RIGHT); + } + else if (isAvailableLeft && isAnchoredToRight && isRtl || + (isAvailableLeft && !isAnchoredToRight && hasRightBit) || + (!isAvailableRight && availableLeft >= availableRight)) { + // Attach right side of surface to the anchor. + corner = this.setBit(corner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.RIGHT); + } + return corner; + }; + /** + * @param corner Origin corner of the menu surface. + * @return Maximum height of the menu surface, based on available space. 0 + * indicates should not be set. + */ + MDCMenuSurfaceFoundation.prototype.getMenuSurfaceMaxHeight = function (corner) { + if (this.maxHeight > 0) { + return this.maxHeight; + } + var viewportDistance = this.measurements.viewportDistance; + var maxHeight = 0; + var isBottomAligned = this.hasBit(corner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.BOTTOM); + var isBottomAnchored = this.hasBit(this.anchorCorner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.BOTTOM); + var MARGIN_TO_EDGE = MDCMenuSurfaceFoundation.numbers.MARGIN_TO_EDGE; + // When maximum height is not specified, it is handled from CSS. + if (isBottomAligned) { + maxHeight = viewportDistance.top + this.anchorMargin.top - MARGIN_TO_EDGE; + if (!isBottomAnchored) { + maxHeight += this.measurements.anchorSize.height; + } + } + else { + maxHeight = viewportDistance.bottom - this.anchorMargin.bottom + + this.measurements.anchorSize.height - MARGIN_TO_EDGE; + if (isBottomAnchored) { + maxHeight -= this.measurements.anchorSize.height; + } + } + return maxHeight; + }; + /** + * @param corner Origin corner of the menu surface. + * @return Horizontal offset of menu surface origin corner from corresponding + * anchor corner. + */ + MDCMenuSurfaceFoundation.prototype.getHorizontalOriginOffset = function (corner) { + var anchorSize = this.measurements.anchorSize; + // isRightAligned corresponds to using the 'right' property on the surface. + var isRightAligned = this.hasBit(corner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.RIGHT); + var avoidHorizontalOverlap = this.hasBit(this.anchorCorner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.RIGHT); + if (isRightAligned) { + var rightOffset = avoidHorizontalOverlap ? + anchorSize.width - this.anchorMargin.left : + this.anchorMargin.right; + // For hoisted or fixed elements, adjust the offset by the difference + // between viewport width and body width so when we calculate the right + // value (`adjustPositionForHoistedElement`) based on the element + // position, the right property is correct. + if (this.isHoistedElement || this.isFixedPosition) { + return rightOffset - + (this.measurements.viewportSize.width - + this.measurements.bodySize.width); + } + return rightOffset; + } + return avoidHorizontalOverlap ? anchorSize.width - this.anchorMargin.right : + this.anchorMargin.left; + }; + /** + * @param corner Origin corner of the menu surface. + * @return Vertical offset of menu surface origin corner from corresponding + * anchor corner. + */ + MDCMenuSurfaceFoundation.prototype.getVerticalOriginOffset = function (corner) { + var anchorSize = this.measurements.anchorSize; + var isBottomAligned = this.hasBit(corner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.BOTTOM); + var avoidVerticalOverlap = this.hasBit(this.anchorCorner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.BOTTOM); + var y = 0; + if (isBottomAligned) { + y = avoidVerticalOverlap ? anchorSize.height - this.anchorMargin.top : + -this.anchorMargin.bottom; + } + else { + y = avoidVerticalOverlap ? + (anchorSize.height + this.anchorMargin.bottom) : + this.anchorMargin.top; + } + return y; + }; + /** + * Calculates the offsets for positioning the menu-surface when the + * menu-surface has been hoisted to the body. + */ + MDCMenuSurfaceFoundation.prototype.adjustPositionForHoistedElement = function (position) { + var e_1, _a; + var _b = this.measurements, windowScroll = _b.windowScroll, viewportDistance = _b.viewportDistance, surfaceSize = _b.surfaceSize, viewportSize = _b.viewportSize; + var props = Object.keys(position); + try { + for (var props_1 = (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__values)(props), props_1_1 = props_1.next(); !props_1_1.done; props_1_1 = props_1.next()) { + var prop = props_1_1.value; + var value = position[prop] || 0; + if (this.isHorizontallyCenteredOnViewport && + (prop === 'left' || prop === 'right')) { + position[prop] = (viewportSize.width - surfaceSize.width) / 2; + continue; + } + // Hoisted surfaces need to have the anchor elements location on the page + // added to the position properties for proper alignment on the body. + value += viewportDistance[prop]; + // Surfaces that are absolutely positioned need to have additional + // calculations for scroll and bottom positioning. + if (!this.isFixedPosition) { + if (prop === 'top') { + value += windowScroll.y; + } + else if (prop === 'bottom') { + value -= windowScroll.y; + } + else if (prop === 'left') { + value += windowScroll.x; + } + else { // prop === 'right' + value -= windowScroll.x; + } + } + position[prop] = value; + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (props_1_1 && !props_1_1.done && (_a = props_1.return)) _a.call(props_1); + } + finally { if (e_1) throw e_1.error; } + } + }; + /** + * The last focused element when the menu surface was opened should regain + * focus, if the user is focused on or within the menu surface when it is + * closed. + */ + MDCMenuSurfaceFoundation.prototype.maybeRestoreFocus = function () { + var _this = this; + var isRootFocused = this.adapter.isFocused(); + var childHasFocus = document.activeElement && + this.adapter.isElementInContainer(document.activeElement); + if (isRootFocused || childHasFocus) { + // Wait before restoring focus when closing the menu surface. This is + // important because if a touch event triggered the menu close, and the + // subsequent mouse event occurs after focus is restored, then the + // restored focus would be lost. + setTimeout(function () { + _this.adapter.restoreFocus(); + }, _constants__WEBPACK_IMPORTED_MODULE_1__.numbers.TOUCH_EVENT_WAIT_MS); + } + }; + MDCMenuSurfaceFoundation.prototype.hasBit = function (corner, bit) { + return Boolean(corner & bit); // tslint:disable-line:no-bitwise + }; + MDCMenuSurfaceFoundation.prototype.setBit = function (corner, bit) { + return corner | bit; // tslint:disable-line:no-bitwise + }; + MDCMenuSurfaceFoundation.prototype.unsetBit = function (corner, bit) { + return corner ^ bit; + }; + /** + * isFinite that doesn't force conversion to number type. + * Equivalent to Number.isFinite in ES2015, which is not supported in IE. + */ + MDCMenuSurfaceFoundation.prototype.isFinite = function (num) { + return typeof num === 'number' && isFinite(num); + }; + return MDCMenuSurfaceFoundation; +}(_material_base_foundation__WEBPACK_IMPORTED_MODULE_2__.MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MDCMenuSurfaceFoundation); +//# sourceMappingURL=foundation.js.map + +/***/ }), + +/***/ "./node_modules/@material/menu/constants.js": +/*!**************************************************!*\ + !*** ./node_modules/@material/menu/constants.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ DefaultFocusState: () => (/* binding */ DefaultFocusState), +/* harmony export */ cssClasses: () => (/* binding */ cssClasses), +/* harmony export */ numbers: () => (/* binding */ numbers), +/* harmony export */ strings: () => (/* binding */ strings) +/* harmony export */ }); +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var cssClasses = { + MENU_SELECTED_LIST_ITEM: 'mdc-menu-item--selected', + MENU_SELECTION_GROUP: 'mdc-menu__selection-group', + ROOT: 'mdc-menu', +}; +var strings = { + ARIA_CHECKED_ATTR: 'aria-checked', + ARIA_DISABLED_ATTR: 'aria-disabled', + CHECKBOX_SELECTOR: 'input[type="checkbox"]', + LIST_SELECTOR: '.mdc-list,.mdc-deprecated-list', + SELECTED_EVENT: 'MDCMenu:selected', + SKIP_RESTORE_FOCUS: 'data-menu-item-skip-restore-focus', +}; +var numbers = { + FOCUS_ROOT_INDEX: -1, +}; +var DefaultFocusState; +(function (DefaultFocusState) { + DefaultFocusState[DefaultFocusState["NONE"] = 0] = "NONE"; + DefaultFocusState[DefaultFocusState["LIST_ROOT"] = 1] = "LIST_ROOT"; + DefaultFocusState[DefaultFocusState["FIRST_ITEM"] = 2] = "FIRST_ITEM"; + DefaultFocusState[DefaultFocusState["LAST_ITEM"] = 3] = "LAST_ITEM"; +})(DefaultFocusState || (DefaultFocusState = {})); + +//# sourceMappingURL=constants.js.map + +/***/ }), + +/***/ "./node_modules/@material/menu/foundation.js": +/*!***************************************************!*\ + !*** ./node_modules/@material/menu/foundation.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MDCMenuFoundation: () => (/* binding */ MDCMenuFoundation), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var _material_base_foundation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @material/base/foundation */ "./node_modules/@material/base/foundation.js"); +/* harmony import */ var _material_list_constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @material/list/constants */ "./node_modules/@material/list/constants.js"); +/* harmony import */ var _material_menu_surface_foundation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material/menu-surface/foundation */ "./node_modules/@material/menu-surface/foundation.js"); +/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constants */ "./node_modules/@material/menu/constants.js"); +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + + +var MDCMenuFoundation = /** @class */ (function (_super) { + (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__extends)(MDCMenuFoundation, _super); + function MDCMenuFoundation(adapter) { + var _this = _super.call(this, (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)((0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)({}, MDCMenuFoundation.defaultAdapter), adapter)) || this; + _this.closeAnimationEndTimerId = 0; + _this.defaultFocusState = _constants__WEBPACK_IMPORTED_MODULE_1__.DefaultFocusState.LIST_ROOT; + _this.selectedIndex = -1; + return _this; + } + Object.defineProperty(MDCMenuFoundation, "cssClasses", { + get: function () { + return _constants__WEBPACK_IMPORTED_MODULE_1__.cssClasses; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCMenuFoundation, "strings", { + get: function () { + return _constants__WEBPACK_IMPORTED_MODULE_1__.strings; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCMenuFoundation, "numbers", { + get: function () { + return _constants__WEBPACK_IMPORTED_MODULE_1__.numbers; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCMenuFoundation, "defaultAdapter", { + /** + * @see {@link MDCMenuAdapter} for typing information on parameters and return types. + */ + get: function () { + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + return { + addClassToElementAtIndex: function () { return undefined; }, + removeClassFromElementAtIndex: function () { return undefined; }, + addAttributeToElementAtIndex: function () { return undefined; }, + removeAttributeFromElementAtIndex: function () { return undefined; }, + getAttributeFromElementAtIndex: function () { return null; }, + elementContainsClass: function () { return false; }, + closeSurface: function () { return undefined; }, + getElementIndex: function () { return -1; }, + notifySelected: function () { return undefined; }, + getMenuItemCount: function () { return 0; }, + focusItemAtIndex: function () { return undefined; }, + focusListRoot: function () { return undefined; }, + getSelectedSiblingOfItemAtIndex: function () { return -1; }, + isSelectableItemAtIndex: function () { return false; }, + }; + // tslint:enable:object-literal-sort-keys + }, + enumerable: false, + configurable: true + }); + MDCMenuFoundation.prototype.destroy = function () { + if (this.closeAnimationEndTimerId) { + clearTimeout(this.closeAnimationEndTimerId); + } + this.adapter.closeSurface(); + }; + MDCMenuFoundation.prototype.handleKeydown = function (evt) { + var key = evt.key, keyCode = evt.keyCode; + var isTab = key === 'Tab' || keyCode === 9; + if (isTab) { + this.adapter.closeSurface(/** skipRestoreFocus */ true); + } + }; + MDCMenuFoundation.prototype.handleItemAction = function (listItem) { + var _this = this; + var index = this.adapter.getElementIndex(listItem); + if (index < 0) { + return; + } + this.adapter.notifySelected({ index: index }); + var skipRestoreFocus = this.adapter.getAttributeFromElementAtIndex(index, _constants__WEBPACK_IMPORTED_MODULE_1__.strings.SKIP_RESTORE_FOCUS) === 'true'; + this.adapter.closeSurface(skipRestoreFocus); + // Wait for the menu to close before adding/removing classes that affect styles. + this.closeAnimationEndTimerId = setTimeout(function () { + // Recompute the index in case the menu contents have changed. + var recomputedIndex = _this.adapter.getElementIndex(listItem); + if (recomputedIndex >= 0 && + _this.adapter.isSelectableItemAtIndex(recomputedIndex)) { + _this.setSelectedIndex(recomputedIndex); + } + }, _material_menu_surface_foundation__WEBPACK_IMPORTED_MODULE_2__.MDCMenuSurfaceFoundation.numbers.TRANSITION_CLOSE_DURATION); + }; + MDCMenuFoundation.prototype.handleMenuSurfaceOpened = function () { + switch (this.defaultFocusState) { + case _constants__WEBPACK_IMPORTED_MODULE_1__.DefaultFocusState.FIRST_ITEM: + this.adapter.focusItemAtIndex(0); + break; + case _constants__WEBPACK_IMPORTED_MODULE_1__.DefaultFocusState.LAST_ITEM: + this.adapter.focusItemAtIndex(this.adapter.getMenuItemCount() - 1); + break; + case _constants__WEBPACK_IMPORTED_MODULE_1__.DefaultFocusState.NONE: + // Do nothing. + break; + default: + this.adapter.focusListRoot(); + break; + } + }; + /** + * Sets default focus state where the menu should focus every time when menu + * is opened. Focuses the list root (`DefaultFocusState.LIST_ROOT`) element by + * default. + */ + MDCMenuFoundation.prototype.setDefaultFocusState = function (focusState) { + this.defaultFocusState = focusState; + }; + /** @return Index of the currently selected list item within the menu. */ + MDCMenuFoundation.prototype.getSelectedIndex = function () { + return this.selectedIndex; + }; + /** + * Selects the list item at `index` within the menu. + * @param index Index of list item within the menu. + */ + MDCMenuFoundation.prototype.setSelectedIndex = function (index) { + this.validatedIndex(index); + if (!this.adapter.isSelectableItemAtIndex(index)) { + throw new Error('MDCMenuFoundation: No selection group at specified index.'); + } + var prevSelectedIndex = this.adapter.getSelectedSiblingOfItemAtIndex(index); + if (prevSelectedIndex >= 0) { + this.adapter.removeAttributeFromElementAtIndex(prevSelectedIndex, _constants__WEBPACK_IMPORTED_MODULE_1__.strings.ARIA_CHECKED_ATTR); + this.adapter.removeClassFromElementAtIndex(prevSelectedIndex, _constants__WEBPACK_IMPORTED_MODULE_1__.cssClasses.MENU_SELECTED_LIST_ITEM); + } + this.adapter.addClassToElementAtIndex(index, _constants__WEBPACK_IMPORTED_MODULE_1__.cssClasses.MENU_SELECTED_LIST_ITEM); + this.adapter.addAttributeToElementAtIndex(index, _constants__WEBPACK_IMPORTED_MODULE_1__.strings.ARIA_CHECKED_ATTR, 'true'); + this.selectedIndex = index; + }; + /** + * Sets the enabled state to isEnabled for the menu item at the given index. + * @param index Index of the menu item + * @param isEnabled The desired enabled state of the menu item. + */ + MDCMenuFoundation.prototype.setEnabled = function (index, isEnabled) { + this.validatedIndex(index); + if (isEnabled) { + this.adapter.removeClassFromElementAtIndex(index, _material_list_constants__WEBPACK_IMPORTED_MODULE_3__.cssClasses.LIST_ITEM_DISABLED_CLASS); + this.adapter.addAttributeToElementAtIndex(index, _constants__WEBPACK_IMPORTED_MODULE_1__.strings.ARIA_DISABLED_ATTR, 'false'); + } + else { + this.adapter.addClassToElementAtIndex(index, _material_list_constants__WEBPACK_IMPORTED_MODULE_3__.cssClasses.LIST_ITEM_DISABLED_CLASS); + this.adapter.addAttributeToElementAtIndex(index, _constants__WEBPACK_IMPORTED_MODULE_1__.strings.ARIA_DISABLED_ATTR, 'true'); + } + }; + MDCMenuFoundation.prototype.validatedIndex = function (index) { + var menuSize = this.adapter.getMenuItemCount(); + var isIndexInRange = index >= 0 && index < menuSize; + if (!isIndexInRange) { + throw new Error('MDCMenuFoundation: No list item at specified index.'); + } + }; + return MDCMenuFoundation; +}(_material_base_foundation__WEBPACK_IMPORTED_MODULE_4__.MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MDCMenuFoundation); +//# sourceMappingURL=foundation.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-base/aria-property.js": +/*!**********************************************************!*\ + !*** ./node_modules/@material/mwc-base/aria-property.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ariaProperty: () => (/* binding */ ariaProperty) +/* harmony export */ }); +/** + * @license + * Copyright 2021 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ +/** + * TypeScript version of the decorator + * @see https://www.typescriptlang.org/docs/handbook/decorators.html#property-decorators + */ +function tsDecorator(prototype, name, descriptor) { + const constructor = prototype.constructor; + if (!descriptor) { + /** + * lit uses internal properties with two leading underscores to + * provide storage for accessors + */ + const litInternalPropertyKey = `__${name}`; + descriptor = + constructor.getPropertyDescriptor(name, litInternalPropertyKey); + if (!descriptor) { + throw new Error('@ariaProperty must be used after a @property decorator'); + } + } + // descriptor must exist at this point, reassign so typescript understands + const propDescriptor = descriptor; + let attribute = ''; + if (!propDescriptor.set) { + throw new Error(`@ariaProperty requires a setter for ${name}`); + } + // TODO(b/202853219): Remove this check when internal tooling is + // compatible + // tslint:disable-next-line:no-any bail if applied to internal generated class + if (prototype.dispatchWizEvent) { + return descriptor; + } + const wrappedDescriptor = { + configurable: true, + enumerable: true, + set(value) { + if (attribute === '') { + const options = constructor.getPropertyOptions(name); + // if attribute is not a string, use `name` instead + attribute = + typeof options.attribute === 'string' ? options.attribute : name; + } + if (this.hasAttribute(attribute)) { + this.removeAttribute(attribute); + } + propDescriptor.set.call(this, value); + } + }; + if (propDescriptor.get) { + wrappedDescriptor.get = function () { + return propDescriptor.get.call(this); + }; + } + return wrappedDescriptor; +} +/** + * A property decorator proxies an aria attribute to an internal node + * + * This decorator is only intended for use with ARIA attributes, such as `role` + * and `aria-label` due to screenreader needs. + * + * Upon first render, `@ariaProperty` will remove the attribute from the host + * element to prevent screenreaders from reading the host instead of the + * internal node. + * + * This decorator should only be used for non-Symbol public fields decorated + * with `@property`, or on a setter with an optional getter. + * + * @example + * ```ts + * class MyElement { + * @ariaProperty + * @property({ type: String, attribute: 'aria-label' }) + * ariaLabel!: string; + * } + * ``` + * @category Decorator + * @ExportDecoratedItems + */ +function ariaProperty(protoOrDescriptor, name, +// tslint:disable-next-line:no-any any is required as a return type from decorators +descriptor) { + if (name !== undefined) { + return tsDecorator(protoOrDescriptor, name, descriptor); + } + else { + throw new Error('@ariaProperty only supports TypeScript Decorators'); + } +} +//# sourceMappingURL=aria-property.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-base/base-element.js": +/*!*********************************************************!*\ + !*** ./node_modules/@material/mwc-base/base-element.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ BaseElement: () => (/* binding */ BaseElement), +/* harmony export */ addHasRemoveClass: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_1__.addHasRemoveClass) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ "./node_modules/@material/mwc-base/utils.js"); +/** + * @license + * Copyright 2018 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + + +/** @soyCompatible */ +class BaseElement extends lit__WEBPACK_IMPORTED_MODULE_0__.LitElement { + click() { + if (this.mdcRoot) { + this.mdcRoot.focus(); + this.mdcRoot.click(); + return; + } + super.click(); + } + /** + * Create and attach the MDC Foundation to the instance + */ + createFoundation() { + if (this.mdcFoundation !== undefined) { + this.mdcFoundation.destroy(); + } + if (this.mdcFoundationClass) { + this.mdcFoundation = new this.mdcFoundationClass(this.createAdapter()); + this.mdcFoundation.init(); + } + } + firstUpdated() { + this.createFoundation(); + } +} +//# sourceMappingURL=base-element.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-base/observer.js": +/*!*****************************************************!*\ + !*** ./node_modules/@material/mwc-base/observer.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ observer: () => (/* binding */ observer) +/* harmony export */ }); +/** + * @license + * Copyright 2018 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ +/** + * Specifies an observer callback that is run when the decorated property + * changes. The observer receives the current and old value as arguments. + */ +const observer = (observer) => +// eslint-disable-next-line @typescript-eslint/no-explicit-any +(proto, propName) => { + // if we haven't wrapped `updated` in this class, do so + if (!proto.constructor + ._observers) { + proto.constructor._observers = new Map(); + const userUpdated = proto.updated; + proto.updated = function (changedProperties) { + userUpdated.call(this, changedProperties); + changedProperties.forEach((v, k) => { + const observers = this.constructor + ._observers; + const observer = observers.get(k); + if (observer !== undefined) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + observer.call(this, this[k], v); + } + }); + }; + // clone any existing observers (superclasses) + // eslint-disable-next-line no-prototype-builtins + } + else if (!proto.constructor.hasOwnProperty('_observers')) { + const observers = proto.constructor._observers; + proto.constructor._observers = new Map(); + observers.forEach( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (v, k) => proto.constructor._observers.set(k, v)); + } + // set this method + proto.constructor._observers.set(propName, observer); +}; +//# sourceMappingURL=observer.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-base/utils.js": +/*!**************************************************!*\ + !*** ./node_modules/@material/mwc-base/utils.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ addHasRemoveClass: () => (/* binding */ addHasRemoveClass), +/* harmony export */ deepActiveElementPath: () => (/* binding */ deepActiveElementPath), +/* harmony export */ doesElementContainFocus: () => (/* binding */ doesElementContainFocus), +/* harmony export */ isNodeElement: () => (/* binding */ isNodeElement), +/* harmony export */ supportsPassiveEventListener: () => (/* binding */ supportsPassiveEventListener) +/* harmony export */ }); +/** + * @license + * Copyright 2018 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore +/** + * Determines whether a node is an element. + * + * @param node Node to check + */ +const isNodeElement = (node) => { + return node.nodeType === Node.ELEMENT_NODE; +}; +function addHasRemoveClass(element) { + return { + addClass: (className) => { + element.classList.add(className); + }, + removeClass: (className) => { + element.classList.remove(className); + }, + hasClass: (className) => element.classList.contains(className), + }; +} +let supportsPassive = false; +const fn = () => { }; +const optionsBlock = { + get passive() { + supportsPassive = true; + return false; + } +}; +document.addEventListener('x', fn, optionsBlock); +document.removeEventListener('x', fn); +/** + * Do event listeners suport the `passive` option? + */ +const supportsPassiveEventListener = supportsPassive; +const deepActiveElementPath = (doc = window.document) => { + let activeElement = doc.activeElement; + const path = []; + if (!activeElement) { + return path; + } + while (activeElement) { + path.push(activeElement); + if (activeElement.shadowRoot) { + activeElement = activeElement.shadowRoot.activeElement; + } + else { + break; + } + } + return path; +}; +const doesElementContainFocus = (element) => { + const activePath = deepActiveElementPath(); + if (!activePath.length) { + return false; + } + const deepActiveElement = activePath[activePath.length - 1]; + const focusEv = new Event('check-if-focused', { bubbles: true, composed: true }); + let composedPath = []; + const listener = (ev) => { + composedPath = ev.composedPath(); + }; + document.body.addEventListener('check-if-focused', listener); + deepActiveElement.dispatchEvent(focusEv); + document.body.removeEventListener('check-if-focused', listener); + return composedPath.indexOf(element) !== -1; +}; +//# sourceMappingURL=utils.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-button/mwc-button-base.js": +/*!**************************************************************!*\ + !*** ./node_modules/@material/mwc-button/mwc-button-base.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ButtonBase: () => (/* binding */ ButtonBase) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var _material_mwc_icon_mwc_icon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material/mwc-icon/mwc-icon */ "./node_modules/@material/mwc-icon/mwc-icon.js"); +/* harmony import */ var _material_mwc_ripple_mwc_ripple__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/mwc-ripple/mwc-ripple */ "./node_modules/@material/mwc-ripple/mwc-ripple.js"); +/* harmony import */ var _material_mwc_base_aria_property__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material/mwc-base/aria-property */ "./node_modules/@material/mwc-base/aria-property.js"); +/* harmony import */ var _material_mwc_ripple_ripple_handlers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @material/mwc-ripple/ripple-handlers */ "./node_modules/@material/mwc-ripple/ripple-handlers.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var lit_directives_class_map_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lit/directives/class-map.js */ "./node_modules/lit/directives/class-map.js"); +/* harmony import */ var lit_directives_if_defined_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! lit/directives/if-defined.js */ "./node_modules/lit/directives/if-defined.js"); +/** + * @license + * Copyright 2019 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + + + + + + +/** @soyCompatible */ +class ButtonBase extends lit__WEBPACK_IMPORTED_MODULE_4__.LitElement { + constructor() { + super(...arguments); + this.raised = false; + this.unelevated = false; + this.outlined = false; + this.dense = false; + this.disabled = false; + this.trailingIcon = false; + this.fullwidth = false; + this.icon = ''; + this.label = ''; + this.expandContent = false; + this.shouldRenderRipple = false; + this.rippleHandlers = new _material_mwc_ripple_ripple_handlers__WEBPACK_IMPORTED_MODULE_3__.RippleHandlers(() => { + this.shouldRenderRipple = true; + return this.ripple; + }); + } + /** @soyTemplate */ + renderOverlay() { + return (0,lit__WEBPACK_IMPORTED_MODULE_4__.html) ``; + } + /** @soyTemplate */ + renderRipple() { + const filled = this.raised || this.unelevated; + return this.shouldRenderRipple ? + (0,lit__WEBPACK_IMPORTED_MODULE_4__.html) `` : + ''; + } + focus() { + const buttonElement = this.buttonElement; + if (buttonElement) { + this.rippleHandlers.startFocus(); + buttonElement.focus(); + } + } + blur() { + const buttonElement = this.buttonElement; + if (buttonElement) { + this.rippleHandlers.endFocus(); + buttonElement.blur(); + } + } + /** @soyTemplate */ + getRenderClasses() { + return { + 'mdc-button--raised': this.raised, + 'mdc-button--unelevated': this.unelevated, + 'mdc-button--outlined': this.outlined, + 'mdc-button--dense': this.dense, + }; + } + /** + * @soyTemplate + * @soyAttributes buttonAttributes: #button + * @soyClasses buttonClasses: #button + */ + render() { + return (0,lit__WEBPACK_IMPORTED_MODULE_4__.html) ` + `; + } + /** @soyTemplate */ + renderIcon() { + return (0,lit__WEBPACK_IMPORTED_MODULE_4__.html) ` + + ${this.icon} + `; + } + handleRippleActivate(evt) { + const onUp = () => { + window.removeEventListener('mouseup', onUp); + this.handleRippleDeactivate(); + }; + window.addEventListener('mouseup', onUp); + this.rippleHandlers.startPress(evt); + } + handleRippleDeactivate() { + this.rippleHandlers.endPress(); + } + handleRippleMouseEnter() { + this.rippleHandlers.startHover(); + } + handleRippleMouseLeave() { + this.rippleHandlers.endHover(); + } + handleRippleFocus() { + this.rippleHandlers.startFocus(); + } + handleRippleBlur() { + this.rippleHandlers.endFocus(); + } +} +ButtonBase.shadowRootOptions = { mode: 'open', delegatesFocus: true }; +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + _material_mwc_base_aria_property__WEBPACK_IMPORTED_MODULE_2__.ariaProperty, + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: String, attribute: 'aria-haspopup' }) +], ButtonBase.prototype, "ariaHasPopup", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean, reflect: true }) +], ButtonBase.prototype, "raised", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean, reflect: true }) +], ButtonBase.prototype, "unelevated", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean, reflect: true }) +], ButtonBase.prototype, "outlined", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }) +], ButtonBase.prototype, "dense", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean, reflect: true }) +], ButtonBase.prototype, "disabled", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean, attribute: 'trailingicon' }) +], ButtonBase.prototype, "trailingIcon", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean, reflect: true }) +], ButtonBase.prototype, "fullwidth", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: String }) +], ButtonBase.prototype, "icon", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: String }) +], ButtonBase.prototype, "label", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }) +], ButtonBase.prototype, "expandContent", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.query)('#button') +], ButtonBase.prototype, "buttonElement", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.queryAsync)('mwc-ripple') +], ButtonBase.prototype, "ripple", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.state)() +], ButtonBase.prototype, "shouldRenderRipple", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.eventOptions)({ passive: true }) +], ButtonBase.prototype, "handleRippleActivate", null); +//# sourceMappingURL=mwc-button-base.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-button/mwc-button.js": +/*!*********************************************************!*\ + !*** ./node_modules/@material/mwc-button/mwc-button.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Button: () => (/* binding */ Button) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var _mwc_button_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mwc-button-base */ "./node_modules/@material/mwc-button/mwc-button-base.js"); +/* harmony import */ var _styles_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./styles.css */ "./node_modules/@material/mwc-button/styles.css.js"); +/** + * @license + * Copyright 2018 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + +/** @soyCompatible */ +let Button = class Button extends _mwc_button_base__WEBPACK_IMPORTED_MODULE_1__.ButtonBase { +}; +Button.styles = [_styles_css__WEBPACK_IMPORTED_MODULE_2__.styles]; +Button = (0,tslib__WEBPACK_IMPORTED_MODULE_3__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__.customElement)('mwc-button') +], Button); + +//# sourceMappingURL=mwc-button.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-button/styles.css.js": +/*!*********************************************************!*\ + !*** ./node_modules/@material/mwc-button/styles.css.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ styles: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/** + * @license + * Copyright 2021 Google LLC + * SPDX-LIcense-Identifier: Apache-2.0 + */ + +const styles = (0,lit__WEBPACK_IMPORTED_MODULE_0__.css) `.mdc-button{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-button-font-size, 0.875rem);line-height:2.25rem;line-height:var(--mdc-typography-button-line-height, 2.25rem);font-weight:500;font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:0.0892857143em;letter-spacing:var(--mdc-typography-button-letter-spacing, 0.0892857143em);text-decoration:none;text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:uppercase;text-transform:var(--mdc-typography-button-text-transform, uppercase)}.mdc-touch-target-wrapper{display:inline}.mdc-elevation-overlay{position:absolute;border-radius:inherit;pointer-events:none;opacity:0;opacity:var(--mdc-elevation-overlay-opacity, 0);transition:opacity 280ms cubic-bezier(0.4, 0, 0.2, 1);background-color:#fff;background-color:var(--mdc-elevation-overlay-color, #fff)}.mdc-button{position:relative;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;min-width:64px;border:none;outline:none;line-height:inherit;user-select:none;-webkit-appearance:none;overflow:visible;vertical-align:middle;background:transparent}.mdc-button .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-button::-moz-focus-inner{padding:0;border:0}.mdc-button:active{outline:none}.mdc-button:hover{cursor:pointer}.mdc-button:disabled{cursor:default;pointer-events:none}.mdc-button .mdc-button__icon{margin-left:0;margin-right:8px;display:inline-block;position:relative;vertical-align:top}[dir=rtl] .mdc-button .mdc-button__icon,.mdc-button .mdc-button__icon[dir=rtl]{margin-left:8px;margin-right:0}.mdc-button .mdc-button__label{position:relative}.mdc-button .mdc-button__touch{position:absolute;top:50%;height:48px;left:0;right:0;transform:translateY(-50%)}.mdc-button__label+.mdc-button__icon{margin-left:8px;margin-right:0}[dir=rtl] .mdc-button__label+.mdc-button__icon,.mdc-button__label+.mdc-button__icon[dir=rtl]{margin-left:0;margin-right:8px}svg.mdc-button__icon{fill:currentColor}.mdc-button--touch{margin-top:6px;margin-bottom:6px}.mdc-button{padding:0 8px 0 8px}.mdc-button--unelevated{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);padding:0 16px 0 16px}.mdc-button--unelevated.mdc-button--icon-trailing{padding:0 12px 0 16px}.mdc-button--unelevated.mdc-button--icon-leading{padding:0 16px 0 12px}.mdc-button--raised{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);padding:0 16px 0 16px}.mdc-button--raised.mdc-button--icon-trailing{padding:0 12px 0 16px}.mdc-button--raised.mdc-button--icon-leading{padding:0 16px 0 12px}.mdc-button--outlined{border-style:solid;transition:border 280ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-button--outlined .mdc-button__ripple{border-style:solid;border-color:transparent}.mdc-button{height:36px;border-radius:4px;border-radius:var(--mdc-shape-small, 4px)}.mdc-button:not(:disabled){color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-button:disabled{color:rgba(0, 0, 0, 0.38)}.mdc-button .mdc-button__icon{font-size:1.125rem;width:1.125rem;height:1.125rem}.mdc-button .mdc-button__ripple{border-radius:4px;border-radius:var(--mdc-shape-small, 4px)}.mdc-button--raised,.mdc-button--unelevated{height:36px;border-radius:4px;border-radius:var(--mdc-shape-small, 4px)}.mdc-button--raised:not(:disabled),.mdc-button--unelevated:not(:disabled){background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee)}.mdc-button--raised:disabled,.mdc-button--unelevated:disabled{background-color:rgba(0, 0, 0, 0.12)}.mdc-button--raised:not(:disabled),.mdc-button--unelevated:not(:disabled){color:#fff;color:var(--mdc-theme-on-primary, #fff)}.mdc-button--raised:disabled,.mdc-button--unelevated:disabled{color:rgba(0, 0, 0, 0.38)}.mdc-button--raised .mdc-button__icon,.mdc-button--unelevated .mdc-button__icon{font-size:1.125rem;width:1.125rem;height:1.125rem}.mdc-button--raised .mdc-button__ripple,.mdc-button--unelevated .mdc-button__ripple{border-radius:4px;border-radius:var(--mdc-shape-small, 4px)}.mdc-button--outlined{height:36px;border-radius:4px;border-radius:var(--mdc-shape-small, 4px);padding:0 15px 0 15px;border-width:1px}.mdc-button--outlined:not(:disabled){color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-button--outlined:disabled{color:rgba(0, 0, 0, 0.38)}.mdc-button--outlined .mdc-button__icon{font-size:1.125rem;width:1.125rem;height:1.125rem}.mdc-button--outlined .mdc-button__ripple{border-radius:4px;border-radius:var(--mdc-shape-small, 4px)}.mdc-button--outlined:not(:disabled){border-color:rgba(0, 0, 0, 0.12)}.mdc-button--outlined:disabled{border-color:rgba(0, 0, 0, 0.12)}.mdc-button--outlined.mdc-button--icon-trailing{padding:0 11px 0 15px}.mdc-button--outlined.mdc-button--icon-leading{padding:0 15px 0 11px}.mdc-button--outlined .mdc-button__ripple{top:calc(-1 * 1px);left:calc(-1 * 1px);border-width:1px}.mdc-button--outlined .mdc-button__touch{left:calc(-1 * 1px);width:calc(100% + 2 * 1px)}.mdc-button--raised{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0,0,0,.12);transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-button--raised:hover,.mdc-button--raised:focus{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0,0,0,.12)}.mdc-button--raised:active{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0,0,0,.12)}.mdc-button--raised:disabled{box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0,0,0,.12)}:host{display:inline-flex;outline:none;-webkit-tap-highlight-color:transparent;vertical-align:top}:host([fullwidth]){width:100%}:host([raised]),:host([unelevated]){--mdc-ripple-color:#fff;--mdc-ripple-focus-opacity:0.24;--mdc-ripple-hover-opacity:0.08;--mdc-ripple-press-opacity:0.24}.trailing-icon ::slotted(*),.trailing-icon .mdc-button__icon,.leading-icon ::slotted(*),.leading-icon .mdc-button__icon{margin-left:0;margin-right:8px;display:inline-block;position:relative;vertical-align:top;font-size:1.125rem;height:1.125rem;width:1.125rem}[dir=rtl] .trailing-icon ::slotted(*),[dir=rtl] .trailing-icon .mdc-button__icon,[dir=rtl] .leading-icon ::slotted(*),[dir=rtl] .leading-icon .mdc-button__icon,.trailing-icon ::slotted(*[dir=rtl]),.trailing-icon .mdc-button__icon[dir=rtl],.leading-icon ::slotted(*[dir=rtl]),.leading-icon .mdc-button__icon[dir=rtl]{margin-left:8px;margin-right:0}.trailing-icon ::slotted(*),.trailing-icon .mdc-button__icon{margin-left:8px;margin-right:0}[dir=rtl] .trailing-icon ::slotted(*),[dir=rtl] .trailing-icon .mdc-button__icon,.trailing-icon ::slotted(*[dir=rtl]),.trailing-icon .mdc-button__icon[dir=rtl]{margin-left:0;margin-right:8px}.slot-container{display:inline-flex;align-items:center;justify-content:center}.slot-container.flex{flex:auto}.mdc-button{flex:auto;overflow:hidden;padding-left:8px;padding-left:var(--mdc-button-horizontal-padding, 8px);padding-right:8px;padding-right:var(--mdc-button-horizontal-padding, 8px)}.mdc-button--raised{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);box-shadow:var(--mdc-button-raised-box-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12))}.mdc-button--raised:focus{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);box-shadow:var(--mdc-button-raised-box-shadow-focus, var(--mdc-button-raised-box-shadow-hover, 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12)))}.mdc-button--raised:hover{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);box-shadow:var(--mdc-button-raised-box-shadow-hover, 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12))}.mdc-button--raised:active{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);box-shadow:var(--mdc-button-raised-box-shadow-active, 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12))}.mdc-button--raised:disabled{box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);box-shadow:var(--mdc-button-raised-box-shadow-disabled, 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12))}.mdc-button--raised,.mdc-button--unelevated{padding-left:16px;padding-left:var(--mdc-button-horizontal-padding, 16px);padding-right:16px;padding-right:var(--mdc-button-horizontal-padding, 16px)}.mdc-button--outlined{border-width:1px;border-width:var(--mdc-button-outline-width, 1px);padding-left:calc(16px - 1px);padding-left:calc(var(--mdc-button-horizontal-padding, 16px) - var(--mdc-button-outline-width, 1px));padding-right:calc(16px - 1px);padding-right:calc(var(--mdc-button-horizontal-padding, 16px) - var(--mdc-button-outline-width, 1px))}.mdc-button--outlined:not(:disabled){border-color:rgba(0, 0, 0, 0.12);border-color:var(--mdc-button-outline-color, rgba(0, 0, 0, 0.12))}.mdc-button--outlined .ripple{top:calc(-1 * 1px);top:calc(-1 * var(--mdc-button-outline-width, 1px));left:calc(-1 * 1px);left:calc(-1 * var(--mdc-button-outline-width, 1px));right:initial;right:initial;border-width:1px;border-width:var(--mdc-button-outline-width, 1px);border-style:solid;border-color:transparent}[dir=rtl] .mdc-button--outlined .ripple,.mdc-button--outlined .ripple[dir=rtl]{left:initial;left:initial;right:calc(-1 * 1px);right:calc(-1 * var(--mdc-button-outline-width, 1px))}.mdc-button--dense{height:28px;margin-top:0;margin-bottom:0}.mdc-button--dense .mdc-button__touch{height:100%}:host([disabled]){pointer-events:none}:host([disabled]) .mdc-button{color:rgba(0, 0, 0, 0.38);color:var(--mdc-button-disabled-ink-color, rgba(0, 0, 0, 0.38))}:host([disabled]) .mdc-button--raised,:host([disabled]) .mdc-button--unelevated{background-color:rgba(0, 0, 0, 0.12);background-color:var(--mdc-button-disabled-fill-color, rgba(0, 0, 0, 0.12))}:host([disabled]) .mdc-button--outlined{border-color:rgba(0, 0, 0, 0.12);border-color:var(--mdc-button-disabled-outline-color, rgba(0, 0, 0, 0.12))}`; +//# sourceMappingURL=styles.css.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-icon-button/mwc-icon-button-base.js": +/*!************************************************************************!*\ + !*** ./node_modules/@material/mwc-icon-button/mwc-icon-button-base.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IconButtonBase: () => (/* binding */ IconButtonBase) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var _material_mwc_ripple_mwc_ripple__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material/mwc-ripple/mwc-ripple */ "./node_modules/@material/mwc-ripple/mwc-ripple.js"); +/* harmony import */ var _material_mwc_base_aria_property__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/mwc-base/aria-property */ "./node_modules/@material/mwc-base/aria-property.js"); +/* harmony import */ var _material_mwc_ripple_ripple_handlers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material/mwc-ripple/ripple-handlers */ "./node_modules/@material/mwc-ripple/ripple-handlers.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var lit_directives_if_defined_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lit/directives/if-defined.js */ "./node_modules/lit/directives/if-defined.js"); +/** + * @license + * Copyright 2018 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + + + + +/** @soyCompatible */ +class IconButtonBase extends lit__WEBPACK_IMPORTED_MODULE_3__.LitElement { + constructor() { + super(...arguments); + this.disabled = false; + this.icon = ''; + this.shouldRenderRipple = false; + this.rippleHandlers = new _material_mwc_ripple_ripple_handlers__WEBPACK_IMPORTED_MODULE_2__.RippleHandlers(() => { + this.shouldRenderRipple = true; + return this.ripple; + }); + } + /** @soyTemplate */ + renderRipple() { + return this.shouldRenderRipple ? (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) ` + + ` : + ''; + } + focus() { + const buttonElement = this.buttonElement; + if (buttonElement) { + this.rippleHandlers.startFocus(); + buttonElement.focus(); + } + } + blur() { + const buttonElement = this.buttonElement; + if (buttonElement) { + this.rippleHandlers.endFocus(); + buttonElement.blur(); + } + } + /** @soyTemplate */ + render() { + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) ``; + } + handleRippleMouseDown(event) { + const onUp = () => { + window.removeEventListener('mouseup', onUp); + this.handleRippleDeactivate(); + }; + window.addEventListener('mouseup', onUp); + this.rippleHandlers.startPress(event); + } + handleRippleTouchStart(event) { + this.rippleHandlers.startPress(event); + } + handleRippleDeactivate() { + this.rippleHandlers.endPress(); + } + handleRippleMouseEnter() { + this.rippleHandlers.startHover(); + } + handleRippleMouseLeave() { + this.rippleHandlers.endHover(); + } + handleRippleFocus() { + this.rippleHandlers.startFocus(); + } + handleRippleBlur() { + this.rippleHandlers.endFocus(); + } +} +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean, reflect: true }) +], IconButtonBase.prototype, "disabled", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: String }) +], IconButtonBase.prototype, "icon", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + _material_mwc_base_aria_property__WEBPACK_IMPORTED_MODULE_1__.ariaProperty, + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: String, attribute: 'aria-label' }) +], IconButtonBase.prototype, "ariaLabel", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + _material_mwc_base_aria_property__WEBPACK_IMPORTED_MODULE_1__.ariaProperty, + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: String, attribute: 'aria-haspopup' }) +], IconButtonBase.prototype, "ariaHasPopup", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.query)('button') +], IconButtonBase.prototype, "buttonElement", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.queryAsync)('mwc-ripple') +], IconButtonBase.prototype, "ripple", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.state)() +], IconButtonBase.prototype, "shouldRenderRipple", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.eventOptions)({ passive: true }) +], IconButtonBase.prototype, "handleRippleMouseDown", null); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.eventOptions)({ passive: true }) +], IconButtonBase.prototype, "handleRippleTouchStart", null); +//# sourceMappingURL=mwc-icon-button-base.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-icon-button/mwc-icon-button.css.js": +/*!***********************************************************************!*\ + !*** ./node_modules/@material/mwc-icon-button/mwc-icon-button.css.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ styles: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/** + * @license + * Copyright 2021 Google LLC + * SPDX-LIcense-Identifier: Apache-2.0 + */ + +const styles = (0,lit__WEBPACK_IMPORTED_MODULE_0__.css) `.material-icons{font-family:var(--mdc-icon-font, "Material Icons");font-weight:normal;font-style:normal;font-size:var(--mdc-icon-size, 24px);line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga"}.mdc-icon-button{font-size:24px;width:48px;height:48px;padding:12px}.mdc-icon-button.mdc-icon-button--reduced-size .mdc-icon-button__ripple{width:40px;height:40px;margin-top:4px;margin-bottom:4px;margin-right:4px;margin-left:4px}.mdc-icon-button .mdc-icon-button__touch{position:absolute;top:50%;height:48px;left:50%;width:48px;transform:translate(-50%, -50%)}.mdc-icon-button:disabled{color:rgba(0, 0, 0, 0.38);color:var(--mdc-theme-text-disabled-on-light, rgba(0, 0, 0, 0.38))}.mdc-icon-button svg,.mdc-icon-button img{width:24px;height:24px}.mdc-icon-button{display:inline-block;position:relative;box-sizing:border-box;border:none;outline:none;background-color:transparent;fill:currentColor;color:inherit;text-decoration:none;cursor:pointer;user-select:none;z-index:0;overflow:visible}.mdc-icon-button .mdc-icon-button__touch{position:absolute;top:50%;height:48px;left:50%;width:48px;transform:translate(-50%, -50%)}.mdc-icon-button:disabled{cursor:default;pointer-events:none}.mdc-icon-button--display-flex{align-items:center;display:inline-flex;justify-content:center}.mdc-icon-button__icon{display:inline-block}.mdc-icon-button__icon.mdc-icon-button__icon--on{display:none}.mdc-icon-button--on .mdc-icon-button__icon{display:none}.mdc-icon-button--on .mdc-icon-button__icon.mdc-icon-button__icon--on{display:inline-block}.mdc-icon-button{display:inline-block;position:relative;box-sizing:border-box;border:none;outline:none;background-color:transparent;fill:currentColor;color:inherit;text-decoration:none;cursor:pointer;user-select:none;z-index:0;overflow:visible}.mdc-icon-button .mdc-icon-button__touch{position:absolute;top:50%;height:48px;left:50%;width:48px;transform:translate(-50%, -50%)}.mdc-icon-button:disabled{cursor:default;pointer-events:none}.mdc-icon-button--display-flex{align-items:center;display:inline-flex;justify-content:center}.mdc-icon-button__icon{display:inline-block}.mdc-icon-button__icon.mdc-icon-button__icon--on{display:none}.mdc-icon-button--on .mdc-icon-button__icon{display:none}.mdc-icon-button--on .mdc-icon-button__icon.mdc-icon-button__icon--on{display:inline-block}:host{display:inline-block;outline:none}:host([disabled]){pointer-events:none}.mdc-icon-button i,.mdc-icon-button svg,.mdc-icon-button img,.mdc-icon-button ::slotted(*){display:block}:host{--mdc-ripple-color: currentcolor;-webkit-tap-highlight-color:transparent}:host,.mdc-icon-button{vertical-align:top}.mdc-icon-button{width:var(--mdc-icon-button-size, 48px);height:var(--mdc-icon-button-size, 48px);padding:calc( (var(--mdc-icon-button-size, 48px) - var(--mdc-icon-size, 24px)) / 2 )}.mdc-icon-button i,.mdc-icon-button svg,.mdc-icon-button img,.mdc-icon-button ::slotted(*){display:block;width:var(--mdc-icon-size, 24px);height:var(--mdc-icon-size, 24px)}`; +//# sourceMappingURL=mwc-icon-button.css.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-icon-button/mwc-icon-button.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@material/mwc-icon-button/mwc-icon-button.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IconButton: () => (/* binding */ IconButton) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var _mwc_icon_button_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mwc-icon-button-base */ "./node_modules/@material/mwc-icon-button/mwc-icon-button-base.js"); +/* harmony import */ var _mwc_icon_button_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mwc-icon-button.css */ "./node_modules/@material/mwc-icon-button/mwc-icon-button.css.js"); +/** + * @license + * Copyright 2018 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + +/** @soyCompatible */ +let IconButton = class IconButton extends _mwc_icon_button_base__WEBPACK_IMPORTED_MODULE_1__.IconButtonBase { +}; +IconButton.styles = [_mwc_icon_button_css__WEBPACK_IMPORTED_MODULE_2__.styles]; +IconButton = (0,tslib__WEBPACK_IMPORTED_MODULE_3__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__.customElement)('mwc-icon-button') +], IconButton); + +//# sourceMappingURL=mwc-icon-button.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-icon/mwc-icon-host.css.js": +/*!**************************************************************!*\ + !*** ./node_modules/@material/mwc-icon/mwc-icon-host.css.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ styles: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/** + * @license + * Copyright 2021 Google LLC + * SPDX-LIcense-Identifier: Apache-2.0 + */ + +const styles = (0,lit__WEBPACK_IMPORTED_MODULE_0__.css) `:host{font-family:var(--mdc-icon-font, "Material Icons");font-weight:normal;font-style:normal;font-size:var(--mdc-icon-size, 24px);line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga"}`; +//# sourceMappingURL=mwc-icon-host.css.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-icon/mwc-icon.js": +/*!*****************************************************!*\ + !*** ./node_modules/@material/mwc-icon/mwc-icon.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Icon: () => (/* binding */ Icon) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var _mwc_icon_host_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mwc-icon-host.css */ "./node_modules/@material/mwc-icon/mwc-icon-host.css.js"); +/** + * @license + * Copyright 2018 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + +/** @soyCompatible */ +let Icon = class Icon extends lit__WEBPACK_IMPORTED_MODULE_0__.LitElement { + /** @soyTemplate */ + render() { + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html) ``; + } +}; +Icon.styles = [_mwc_icon_host_css__WEBPACK_IMPORTED_MODULE_2__.styles]; +Icon = (0,tslib__WEBPACK_IMPORTED_MODULE_3__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_1__.customElement)('mwc-icon') +], Icon); + +//# sourceMappingURL=mwc-icon.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-list/mwc-list-base.js": +/*!**********************************************************!*\ + !*** ./node_modules/@material/mwc-list/mwc-list-base.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ListBase: () => (/* binding */ ListBase), +/* harmony export */ createSetFromIndex: () => (/* reexport safe */ _mwc_list_foundation__WEBPACK_IMPORTED_MODULE_7__.createSetFromIndex), +/* harmony export */ isEventMulti: () => (/* reexport safe */ _mwc_list_foundation__WEBPACK_IMPORTED_MODULE_7__.isEventMulti), +/* harmony export */ isIndexSet: () => (/* reexport safe */ _mwc_list_foundation__WEBPACK_IMPORTED_MODULE_7__.isIndexSet) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var _mwc_list_item__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mwc-list-item */ "./node_modules/@material/mwc-list/mwc-list-item.js"); +/* harmony import */ var _material_mwc_base_base_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/mwc-base/base-element */ "./node_modules/@material/mwc-base/base-element.js"); +/* harmony import */ var _material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material/mwc-base/observer */ "./node_modules/@material/mwc-base/observer.js"); +/* harmony import */ var _material_mwc_base_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @material/mwc-base/utils */ "./node_modules/@material/mwc-base/utils.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var lit_directives_if_defined_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lit/directives/if-defined.js */ "./node_modules/lit/directives/if-defined.js"); +/* harmony import */ var _mwc_list_foundation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./mwc-list-foundation */ "./node_modules/@material/mwc-list/mwc-list-foundation.js"); +/** + * @license + * Copyright 2020 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + + + + + + + +function debounceLayout(callback, waitInMS = 50) { + let timeoutId; + // tslint:disable-next-line + return function (updateItems = true) { + clearTimeout(timeoutId); + timeoutId = setTimeout(() => { + callback(updateItems); + }, waitInMS); + }; +} +const isListItem = (element) => { + return element.hasAttribute('mwc-list-item'); +}; +function clearAndCreateItemsReadyPromise() { + const oldResolver = this.itemsReadyResolver; + this.itemsReady = new Promise((res) => { + // TODO(b/175626389): Type '(value: never[] | PromiseLike) => void' + // is not assignable to type '(value?: never[] | PromiseLike | + // undefined) => void'. + return this.itemsReadyResolver = res; + }); + oldResolver(); +} +/** + * @fires selected {SelectedDetail} + * @fires action {ActionDetail} + * @fires items-updated + */ +class ListBase extends _material_mwc_base_base_element__WEBPACK_IMPORTED_MODULE_1__.BaseElement { + constructor() { + super(); + this.mdcAdapter = null; + this.mdcFoundationClass = _mwc_list_foundation__WEBPACK_IMPORTED_MODULE_7__["default"]; + this.activatable = false; + this.multi = false; + this.wrapFocus = false; + this.itemRoles = null; + this.innerRole = null; + this.innerAriaLabel = null; + this.rootTabbable = false; + this.previousTabindex = null; + this.noninteractive = false; + this.itemsReadyResolver = (() => { + // + }); + this.itemsReady = Promise.resolve([]); + // tslint:enable:ban-ts-ignore + this.items_ = []; + const debouncedFunction = debounceLayout(this.layout.bind(this)); + this.debouncedLayout = (updateItems = true) => { + clearAndCreateItemsReadyPromise.call(this); + debouncedFunction(updateItems); + }; + } + // tslint:disable:ban-ts-ignore + async getUpdateComplete() { + // @ts-ignore + const result = await super.getUpdateComplete(); + await this.itemsReady; + return result; + } + get items() { + return this.items_; + } + updateItems() { + var _a; + const nodes = (_a = this.assignedElements) !== null && _a !== void 0 ? _a : []; + const listItems = []; + for (const node of nodes) { + if (isListItem(node)) { + listItems.push(node); + node._managingList = this; + } + if (node.hasAttribute('divider') && !node.hasAttribute('role')) { + node.setAttribute('role', 'separator'); + } + } + this.items_ = listItems; + const selectedIndices = new Set(); + this.items_.forEach((item, index) => { + if (this.itemRoles) { + item.setAttribute('role', this.itemRoles); + } + else { + item.removeAttribute('role'); + } + if (item.selected) { + selectedIndices.add(index); + } + }); + if (this.multi) { + this.select(selectedIndices); + } + else { + const index = selectedIndices.size ? selectedIndices.entries().next().value[1] : -1; + this.select(index); + } + const itemsUpdatedEv = new Event('items-updated', { bubbles: true, composed: true }); + this.dispatchEvent(itemsUpdatedEv); + } + get selected() { + const index = this.index; + if (!(0,_mwc_list_foundation__WEBPACK_IMPORTED_MODULE_7__.isIndexSet)(index)) { + if (index === -1) { + return null; + } + return this.items[index]; + } + const selected = []; + for (const entry of index) { + selected.push(this.items[entry]); + } + return selected; + } + get index() { + if (this.mdcFoundation) { + return this.mdcFoundation.getSelectedIndex(); + } + return -1; + } + render() { + const role = this.innerRole === null ? undefined : this.innerRole; + const ariaLabel = this.innerAriaLabel === null ? undefined : this.innerAriaLabel; + const tabindex = this.rootTabbable ? '0' : '-1'; + return (0,lit__WEBPACK_IMPORTED_MODULE_4__.html) ` + +
    + + ${this.renderPlaceholder()} +
+ `; + } + renderPlaceholder() { + var _a; + const nodes = (_a = this.assignedElements) !== null && _a !== void 0 ? _a : []; + if (this.emptyMessage !== undefined && nodes.length === 0) { + return (0,lit__WEBPACK_IMPORTED_MODULE_4__.html) ` + ${this.emptyMessage} + `; + } + return null; + } + firstUpdated() { + super.firstUpdated(); + if (!this.items.length) { + // required because this is called before observers + this.mdcFoundation.setMulti(this.multi); + // for when children upgrade before list + this.layout(); + } + } + onFocusIn(evt) { + if (this.mdcFoundation && this.mdcRoot) { + const index = this.getIndexOfTarget(evt); + this.mdcFoundation.handleFocusIn(evt, index); + } + } + onFocusOut(evt) { + if (this.mdcFoundation && this.mdcRoot) { + const index = this.getIndexOfTarget(evt); + this.mdcFoundation.handleFocusOut(evt, index); + } + } + onKeydown(evt) { + if (this.mdcFoundation && this.mdcRoot) { + const index = this.getIndexOfTarget(evt); + const target = evt.target; + const isRootListItem = isListItem(target); + this.mdcFoundation.handleKeydown(evt, isRootListItem, index); + } + } + onRequestSelected(evt) { + if (this.mdcFoundation) { + let index = this.getIndexOfTarget(evt); + // might happen in shady dom slowness. Recalc children + if (index === -1) { + this.layout(); + index = this.getIndexOfTarget(evt); + // still not found; may not be mwc-list-item. Unsupported case. + if (index === -1) { + return; + } + } + const element = this.items[index]; + if (element.disabled) { + return; + } + const selected = evt.detail.selected; + const source = evt.detail.source; + this.mdcFoundation.handleSingleSelection(index, source === 'interaction', selected); + evt.stopPropagation(); + } + } + getIndexOfTarget(evt) { + const elements = this.items; + const path = evt.composedPath(); + for (const pathItem of path) { + let index = -1; + if ((0,_material_mwc_base_utils__WEBPACK_IMPORTED_MODULE_3__.isNodeElement)(pathItem) && isListItem(pathItem)) { + index = elements.indexOf(pathItem); + } + if (index !== -1) { + return index; + } + } + return -1; + } + createAdapter() { + this.mdcAdapter = { + getListItemCount: () => { + if (this.mdcRoot) { + return this.items.length; + } + return 0; + }, + getFocusedElementIndex: this.getFocusedItemIndex, + getAttributeForElementIndex: (index, attr) => { + const listElement = this.mdcRoot; + if (!listElement) { + return ''; + } + const element = this.items[index]; + return element ? element.getAttribute(attr) : ''; + }, + setAttributeForElementIndex: (index, attr, val) => { + if (!this.mdcRoot) { + return; + } + const element = this.items[index]; + if (element) { + element.setAttribute(attr, val); + } + }, + focusItemAtIndex: (index) => { + const element = this.items[index]; + if (element) { + element.focus(); + } + }, + setTabIndexForElementIndex: (index, value) => { + const item = this.items[index]; + if (item) { + item.tabindex = value; + } + }, + notifyAction: (index) => { + const init = { bubbles: true, composed: true }; + init.detail = { index }; + const ev = new CustomEvent('action', init); + this.dispatchEvent(ev); + }, + notifySelected: (index, diff) => { + const init = { bubbles: true, composed: true }; + init.detail = { index, diff }; + const ev = new CustomEvent('selected', init); + this.dispatchEvent(ev); + }, + isFocusInsideList: () => { + return (0,_material_mwc_base_utils__WEBPACK_IMPORTED_MODULE_3__.doesElementContainFocus)(this); + }, + isRootFocused: () => { + const mdcRoot = this.mdcRoot; + const root = mdcRoot.getRootNode(); + return root.activeElement === mdcRoot; + }, + setDisabledStateForElementIndex: (index, value) => { + const item = this.items[index]; + if (!item) { + return; + } + item.disabled = value; + }, + getDisabledStateForElementIndex: (index) => { + const item = this.items[index]; + if (!item) { + return false; + } + return item.disabled; + }, + setSelectedStateForElementIndex: (index, value) => { + const item = this.items[index]; + if (!item) { + return; + } + item.selected = value; + }, + getSelectedStateForElementIndex: (index) => { + const item = this.items[index]; + if (!item) { + return false; + } + return item.selected; + }, + setActivatedStateForElementIndex: (index, value) => { + const item = this.items[index]; + if (!item) { + return; + } + item.activated = value; + }, + }; + return this.mdcAdapter; + } + selectUi(index, activate = false) { + const item = this.items[index]; + if (item) { + item.selected = true; + item.activated = activate; + } + } + deselectUi(index) { + const item = this.items[index]; + if (item) { + item.selected = false; + item.activated = false; + } + } + select(index) { + if (!this.mdcFoundation) { + return; + } + this.mdcFoundation.setSelectedIndex(index); + } + toggle(index, force) { + if (this.multi) { + this.mdcFoundation.toggleMultiAtIndex(index, force); + } + } + onListItemConnected(e) { + const target = e.target; + this.layout(this.items.indexOf(target) === -1); + } + layout(updateItems = true) { + if (updateItems) { + this.updateItems(); + } + const first = this.items[0]; + for (const item of this.items) { + item.tabindex = -1; + } + if (first) { + if (this.noninteractive) { + if (!this.previousTabindex) { + this.previousTabindex = first; + } + } + else { + first.tabindex = 0; + } + } + this.itemsReadyResolver(); + } + getFocusedItemIndex() { + if (!this.mdcRoot) { + return -1; + } + if (!this.items.length) { + return -1; + } + const activeElementPath = (0,_material_mwc_base_utils__WEBPACK_IMPORTED_MODULE_3__.deepActiveElementPath)(); + if (!activeElementPath.length) { + return -1; + } + for (let i = activeElementPath.length - 1; i >= 0; i--) { + const activeItem = activeElementPath[i]; + if (isListItem(activeItem)) { + return this.items.indexOf(activeItem); + } + } + return -1; + } + focusItemAtIndex(index) { + for (const item of this.items) { + if (item.tabindex === 0) { + item.tabindex = -1; + break; + } + } + this.items[index].tabindex = 0; + this.items[index].focus(); + } + focus() { + const root = this.mdcRoot; + if (root) { + root.focus(); + } + } + blur() { + const root = this.mdcRoot; + if (root) { + root.blur(); + } + } +} +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: String }) +], ListBase.prototype, "emptyMessage", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.query)('.mdc-deprecated-list') +], ListBase.prototype, "mdcRoot", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.queryAssignedNodes)('', true, '*') +], ListBase.prototype, "assignedElements", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.queryAssignedNodes)('', true, '[tabindex="0"]') +], ListBase.prototype, "tabbableElements", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_2__.observer)(function (value) { + if (this.mdcFoundation) { + this.mdcFoundation.setUseActivatedClass(value); + } + }) +], ListBase.prototype, "activatable", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_2__.observer)(function (newValue, oldValue) { + if (this.mdcFoundation) { + this.mdcFoundation.setMulti(newValue); + } + if (oldValue !== undefined) { + this.layout(); + } + }) +], ListBase.prototype, "multi", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_2__.observer)(function (value) { + if (this.mdcFoundation) { + this.mdcFoundation.setWrapFocus(value); + } + }) +], ListBase.prototype, "wrapFocus", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: String }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_2__.observer)(function (_newValue, oldValue) { + if (oldValue !== undefined) { + this.updateItems(); + } + }) +], ListBase.prototype, "itemRoles", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: String }) +], ListBase.prototype, "innerRole", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: String }) +], ListBase.prototype, "innerAriaLabel", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }) +], ListBase.prototype, "rootTabbable", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean, reflect: true }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_2__.observer)(function (value) { + var _a, _b; + if (value) { + const tabbable = (_b = (_a = this.tabbableElements) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null; + this.previousTabindex = tabbable; + if (tabbable) { + tabbable.setAttribute('tabindex', '-1'); + } + } + else if (!value && this.previousTabindex) { + this.previousTabindex.setAttribute('tabindex', '0'); + this.previousTabindex = null; + } + }) +], ListBase.prototype, "noninteractive", void 0); +//# sourceMappingURL=mwc-list-base.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-list/mwc-list-foundation.js": +/*!****************************************************************!*\ + !*** ./node_modules/@material/mwc-list/mwc-list-foundation.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MDCListFoundation: () => (/* binding */ MDCListFoundation), +/* harmony export */ createSetFromIndex: () => (/* binding */ createSetFromIndex), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), +/* harmony export */ isEventMulti: () => (/* binding */ isEventMulti), +/* harmony export */ isIndexSet: () => (/* binding */ isIndexSet) +/* harmony export */ }); +/* harmony import */ var _material_base_foundation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/base/foundation */ "./node_modules/@material/base/foundation.js"); +/* harmony import */ var _material_dom_keyboard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material/dom/keyboard */ "./node_modules/@material/dom/keyboard.js"); +/* harmony import */ var _material_list_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material/list/constants */ "./node_modules/@material/list/constants.js"); +/** + * @license + * Copyright 2020 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + +const integerSort = (a, b) => { + return a - b; +}; +const findIndexDiff = (oldSet, newSet) => { + const oldArr = Array.from(oldSet); + const newArr = Array.from(newSet); + const diff = { added: [], removed: [] }; + const oldSorted = oldArr.sort(integerSort); + const newSorted = newArr.sort(integerSort); + let i = 0; + let j = 0; + while (i < oldSorted.length || j < newSorted.length) { + const oldVal = oldSorted[i]; + const newVal = newSorted[j]; + if (oldVal === newVal) { + i++; + j++; + continue; + } + if (oldVal !== undefined && (newVal === undefined || oldVal < newVal)) { + diff.removed.push(oldVal); + i++; + continue; + } + if (newVal !== undefined && (oldVal === undefined || newVal < oldVal)) { + diff.added.push(newVal); + j++; + continue; + } + } + return diff; +}; +const ELEMENTS_KEY_ALLOWED_IN = ['input', 'button', 'textarea', 'select']; +function isIndexSet(selectedIndex) { + return selectedIndex instanceof Set; +} +function isEventMulti(evt) { + return isIndexSet(evt.detail.index); +} +const createSetFromIndex = (index) => { + const entry = index === _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX ? new Set() : index; + return isIndexSet(entry) ? new Set(entry) : new Set([entry]); +}; +class MDCListFoundation extends _material_base_foundation__WEBPACK_IMPORTED_MODULE_1__.MDCFoundation { + constructor(adapter) { + super(Object.assign(Object.assign({}, MDCListFoundation.defaultAdapter), adapter)); + this.isMulti_ = false; + this.wrapFocus_ = false; + this.isVertical_ = true; + this.selectedIndex_ = _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX; + this.focusedItemIndex_ = _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX; + this.useActivatedClass_ = false; + this.ariaCurrentAttrValue_ = null; + } + static get strings() { + return _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.strings; + } + static get numbers() { + return _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers; + } + static get defaultAdapter() { + return { + focusItemAtIndex: () => undefined, + getFocusedElementIndex: () => 0, + getListItemCount: () => 0, + isFocusInsideList: () => false, + isRootFocused: () => false, + notifyAction: () => undefined, + notifySelected: () => undefined, + getSelectedStateForElementIndex: () => false, + setDisabledStateForElementIndex: () => undefined, + getDisabledStateForElementIndex: () => false, + setSelectedStateForElementIndex: () => undefined, + setActivatedStateForElementIndex: () => undefined, + setTabIndexForElementIndex: () => undefined, + setAttributeForElementIndex: () => undefined, + getAttributeForElementIndex: () => null, + }; + } + /** + * Sets the private wrapFocus_ variable. + */ + setWrapFocus(value) { + this.wrapFocus_ = value; + } + /** + * Sets the private wrapFocus_ variable. + */ + setMulti(value) { + this.isMulti_ = value; + const currentIndex = this.selectedIndex_; + if (value) { + // number to set + if (!isIndexSet(currentIndex)) { + const isUnset = currentIndex === _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX; + this.selectedIndex_ = isUnset ? new Set() : new Set([currentIndex]); + } + } + else { + // set to first sorted number in set + if (isIndexSet(currentIndex)) { + if (currentIndex.size) { + const vals = Array.from(currentIndex).sort(integerSort); + this.selectedIndex_ = vals[0]; + } + else { + this.selectedIndex_ = _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX; + } + } + } + } + /** + * Sets the isVertical_ private variable. + */ + setVerticalOrientation(value) { + this.isVertical_ = value; + } + /** + * Sets the useActivatedClass_ private variable. + */ + setUseActivatedClass(useActivated) { + this.useActivatedClass_ = useActivated; + } + getSelectedIndex() { + return this.selectedIndex_; + } + setSelectedIndex(index) { + if (!this.isIndexValid_(index)) { + return; + } + if (this.isMulti_) { + this.setMultiSelectionAtIndex_(createSetFromIndex(index)); + } + else { + this.setSingleSelectionAtIndex_(index); + } + } + /** + * Focus in handler for the list items. + */ + handleFocusIn(_, listItemIndex) { + if (listItemIndex >= 0) { + this.adapter.setTabIndexForElementIndex(listItemIndex, 0); + } + } + /** + * Focus out handler for the list items. + */ + handleFocusOut(_, listItemIndex) { + if (listItemIndex >= 0) { + this.adapter.setTabIndexForElementIndex(listItemIndex, -1); + } + /** + * Between Focusout & Focusin some browsers do not have focus on any + * element. Setting a delay to wait till the focus is moved to next element. + */ + setTimeout(() => { + if (!this.adapter.isFocusInsideList()) { + this.setTabindexToFirstSelectedItem_(); + } + }, 0); + } + /** + * Key handler for the list. + */ + handleKeydown(event, isRootListItem, listItemIndex) { + const isArrowLeft = (0,_material_dom_keyboard__WEBPACK_IMPORTED_MODULE_2__.normalizeKey)(event) === 'ArrowLeft'; + const isArrowUp = (0,_material_dom_keyboard__WEBPACK_IMPORTED_MODULE_2__.normalizeKey)(event) === 'ArrowUp'; + const isArrowRight = (0,_material_dom_keyboard__WEBPACK_IMPORTED_MODULE_2__.normalizeKey)(event) === 'ArrowRight'; + const isArrowDown = (0,_material_dom_keyboard__WEBPACK_IMPORTED_MODULE_2__.normalizeKey)(event) === 'ArrowDown'; + const isHome = (0,_material_dom_keyboard__WEBPACK_IMPORTED_MODULE_2__.normalizeKey)(event) === 'Home'; + const isEnd = (0,_material_dom_keyboard__WEBPACK_IMPORTED_MODULE_2__.normalizeKey)(event) === 'End'; + const isEnter = (0,_material_dom_keyboard__WEBPACK_IMPORTED_MODULE_2__.normalizeKey)(event) === 'Enter'; + const isSpace = (0,_material_dom_keyboard__WEBPACK_IMPORTED_MODULE_2__.normalizeKey)(event) === 'Spacebar'; + if (this.adapter.isRootFocused()) { + if (isArrowUp || isEnd) { + event.preventDefault(); + this.focusLastElement(); + } + else if (isArrowDown || isHome) { + event.preventDefault(); + this.focusFirstElement(); + } + return; + } + let currentIndex = this.adapter.getFocusedElementIndex(); + if (currentIndex === -1) { + currentIndex = listItemIndex; + if (currentIndex < 0) { + // If this event doesn't have a mdc-deprecated-list-item ancestor from + // the current list (not from a sublist), return early. + return; + } + } + let nextIndex; + if ((this.isVertical_ && isArrowDown) || + (!this.isVertical_ && isArrowRight)) { + this.preventDefaultEvent(event); + nextIndex = this.focusNextElement(currentIndex); + } + else if ((this.isVertical_ && isArrowUp) || (!this.isVertical_ && isArrowLeft)) { + this.preventDefaultEvent(event); + nextIndex = this.focusPrevElement(currentIndex); + } + else if (isHome) { + this.preventDefaultEvent(event); + nextIndex = this.focusFirstElement(); + } + else if (isEnd) { + this.preventDefaultEvent(event); + nextIndex = this.focusLastElement(); + } + else if (isEnter || isSpace) { + if (isRootListItem) { + // Return early if enter key is pressed on anchor element which triggers + // synthetic MouseEvent event. + const target = event.target; + if (target && target.tagName === 'A' && isEnter) { + return; + } + this.preventDefaultEvent(event); + this.setSelectedIndexOnAction_(currentIndex, true); + } + } + this.focusedItemIndex_ = currentIndex; + if (nextIndex !== undefined) { + this.setTabindexAtIndex_(nextIndex); + this.focusedItemIndex_ = nextIndex; + } + } + /** + * Click handler for the list. + */ + handleSingleSelection(index, isInteraction, force) { + if (index === _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX) { + return; + } + this.setSelectedIndexOnAction_(index, isInteraction, force); + this.setTabindexAtIndex_(index); + this.focusedItemIndex_ = index; + } + /** + * Focuses the next element on the list. + */ + focusNextElement(index) { + const count = this.adapter.getListItemCount(); + let nextIndex = index + 1; + if (nextIndex >= count) { + if (this.wrapFocus_) { + nextIndex = 0; + } + else { + // Return early because last item is already focused. + return index; + } + } + this.adapter.focusItemAtIndex(nextIndex); + return nextIndex; + } + /** + * Focuses the previous element on the list. + */ + focusPrevElement(index) { + let prevIndex = index - 1; + if (prevIndex < 0) { + if (this.wrapFocus_) { + prevIndex = this.adapter.getListItemCount() - 1; + } + else { + // Return early because first item is already focused. + return index; + } + } + this.adapter.focusItemAtIndex(prevIndex); + return prevIndex; + } + focusFirstElement() { + this.adapter.focusItemAtIndex(0); + return 0; + } + focusLastElement() { + const lastIndex = this.adapter.getListItemCount() - 1; + this.adapter.focusItemAtIndex(lastIndex); + return lastIndex; + } + /** + * @param itemIndex Index of the list item + * @param isEnabled Sets the list item to enabled or disabled. + */ + setEnabled(itemIndex, isEnabled) { + if (!this.isIndexValid_(itemIndex)) { + return; + } + this.adapter.setDisabledStateForElementIndex(itemIndex, !isEnabled); + } + /** + * Ensures that preventDefault is only called if the containing element + * doesn't consume the event, and it will cause an unintended scroll. + */ + preventDefaultEvent(evt) { + const target = evt.target; + const tagName = `${target.tagName}`.toLowerCase(); + if (ELEMENTS_KEY_ALLOWED_IN.indexOf(tagName) === -1) { + evt.preventDefault(); + } + } + setSingleSelectionAtIndex_(index, isInteraction = true) { + if (this.selectedIndex_ === index) { + return; + } + // unset previous + if (this.selectedIndex_ !== _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX) { + this.adapter.setSelectedStateForElementIndex(this.selectedIndex_, false); + if (this.useActivatedClass_) { + this.adapter.setActivatedStateForElementIndex(this.selectedIndex_, false); + } + } + // set new + if (isInteraction) { + this.adapter.setSelectedStateForElementIndex(index, true); + } + if (this.useActivatedClass_) { + this.adapter.setActivatedStateForElementIndex(index, true); + } + this.setAriaForSingleSelectionAtIndex_(index); + this.selectedIndex_ = index; + this.adapter.notifySelected(index); + } + setMultiSelectionAtIndex_(newIndex, isInteraction = true) { + const oldIndex = createSetFromIndex(this.selectedIndex_); + const diff = findIndexDiff(oldIndex, newIndex); + if (!diff.removed.length && !diff.added.length) { + return; + } + for (const removed of diff.removed) { + if (isInteraction) { + this.adapter.setSelectedStateForElementIndex(removed, false); + } + if (this.useActivatedClass_) { + this.adapter.setActivatedStateForElementIndex(removed, false); + } + } + for (const added of diff.added) { + if (isInteraction) { + this.adapter.setSelectedStateForElementIndex(added, true); + } + if (this.useActivatedClass_) { + this.adapter.setActivatedStateForElementIndex(added, true); + } + } + this.selectedIndex_ = newIndex; + this.adapter.notifySelected(newIndex, diff); + } + /** + * Sets aria attribute for single selection at given index. + */ + setAriaForSingleSelectionAtIndex_(index) { + // Detect the presence of aria-current and get the value only during list + // initialization when it is in unset state. + if (this.selectedIndex_ === _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX) { + this.ariaCurrentAttrValue_ = + this.adapter.getAttributeForElementIndex(index, _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.strings.ARIA_CURRENT); + } + const isAriaCurrent = this.ariaCurrentAttrValue_ !== null; + const ariaAttribute = isAriaCurrent ? _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.strings.ARIA_CURRENT : _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.strings.ARIA_SELECTED; + if (this.selectedIndex_ !== _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX) { + this.adapter.setAttributeForElementIndex(this.selectedIndex_, ariaAttribute, 'false'); + } + const ariaAttributeValue = isAriaCurrent ? this.ariaCurrentAttrValue_ : 'true'; + this.adapter.setAttributeForElementIndex(index, ariaAttribute, ariaAttributeValue); + } + setTabindexAtIndex_(index) { + if (this.focusedItemIndex_ === _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX && index !== 0) { + // If no list item was selected set first list item's tabindex to -1. + // Generally, tabindex is set to 0 on first list item of list that has no + // preselected items. + this.adapter.setTabIndexForElementIndex(0, -1); + } + else if (this.focusedItemIndex_ >= 0 && this.focusedItemIndex_ !== index) { + this.adapter.setTabIndexForElementIndex(this.focusedItemIndex_, -1); + } + this.adapter.setTabIndexForElementIndex(index, 0); + } + setTabindexToFirstSelectedItem_() { + let targetIndex = 0; + if (typeof this.selectedIndex_ === 'number' && + this.selectedIndex_ !== _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX) { + targetIndex = this.selectedIndex_; + } + else if (isIndexSet(this.selectedIndex_) && this.selectedIndex_.size > 0) { + targetIndex = Math.min(...this.selectedIndex_); + } + this.setTabindexAtIndex_(targetIndex); + } + isIndexValid_(index) { + if (index instanceof Set) { + if (!this.isMulti_) { + throw new Error('MDCListFoundation: Array of index is only supported for checkbox based list'); + } + if (index.size === 0) { + return true; + } + else { + let isOneInRange = false; + for (const entry of index) { + isOneInRange = this.isIndexInRange_(entry); + if (isOneInRange) { + break; + } + } + return isOneInRange; + } + } + else if (typeof index === 'number') { + if (this.isMulti_) { + throw new Error('MDCListFoundation: Expected array of index for checkbox based list but got number: ' + + index); + } + return index === _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX || this.isIndexInRange_(index); + } + else { + return false; + } + } + isIndexInRange_(index) { + const listSize = this.adapter.getListItemCount(); + return index >= 0 && index < listSize; + } + /** + * Sets selected index on user action, toggles checkbox / radio based on + * toggleCheckbox value. User interaction should not toggle list item(s) when + * disabled. + */ + setSelectedIndexOnAction_(index, isInteraction, force) { + if (this.adapter.getDisabledStateForElementIndex(index)) { + return; + } + let checkedIndex = index; + if (this.isMulti_) { + checkedIndex = new Set([index]); + } + if (!this.isIndexValid_(checkedIndex)) { + return; + } + if (this.isMulti_) { + this.toggleMultiAtIndex(index, force, isInteraction); + } + else { + if (isInteraction || force) { + this.setSingleSelectionAtIndex_(index, isInteraction); + } + else { + const isDeselection = this.selectedIndex_ === index; + if (isDeselection) { + this.setSingleSelectionAtIndex_(_material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX); + } + } + } + if (isInteraction) { + this.adapter.notifyAction(index); + } + } + toggleMultiAtIndex(index, force, isInteraction = true) { + let newSelectionValue = false; + if (force === undefined) { + newSelectionValue = !this.adapter.getSelectedStateForElementIndex(index); + } + else { + newSelectionValue = force; + } + const newSet = createSetFromIndex(this.selectedIndex_); + if (newSelectionValue) { + newSet.add(index); + } + else { + newSet.delete(index); + } + this.setMultiSelectionAtIndex_(newSet, isInteraction); + } +} +// tslint:disable-next-line:no-default-export Needed for backward compatibility +// with MDC Web v0.44.0 and earlier. +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MDCListFoundation); +//# sourceMappingURL=mwc-list-foundation.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-list/mwc-list-item-base.js": +/*!***************************************************************!*\ + !*** ./node_modules/@material/mwc-list/mwc-list-item-base.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ListItemBase: () => (/* binding */ ListItemBase) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var _material_mwc_ripple_mwc_ripple__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material/mwc-ripple/mwc-ripple */ "./node_modules/@material/mwc-ripple/mwc-ripple.js"); +/* harmony import */ var _material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/mwc-base/observer */ "./node_modules/@material/mwc-base/observer.js"); +/* harmony import */ var _material_mwc_ripple_ripple_handlers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material/mwc-ripple/ripple-handlers */ "./node_modules/@material/mwc-ripple/ripple-handlers.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var lit_directives_class_map_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lit/directives/class-map.js */ "./node_modules/lit/directives/class-map.js"); +/** + * @license + * Copyright 2020 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + + + + +/** + * @fires request-selected {RequestSelectedDetail} + * @fires list-item-rendered + */ +class ListItemBase extends lit__WEBPACK_IMPORTED_MODULE_3__.LitElement { + constructor() { + super(...arguments); + this.value = ''; + this.group = null; + this.tabindex = -1; + this.disabled = false; + this.twoline = false; + this.activated = false; + this.graphic = null; + this.multipleGraphics = false; + this.hasMeta = false; + this.noninteractive = false; + this.selected = false; + this.shouldRenderRipple = false; + this._managingList = null; + this.boundOnClick = this.onClick.bind(this); + this._firstChanged = true; + this._skipPropRequest = false; + this.rippleHandlers = new _material_mwc_ripple_ripple_handlers__WEBPACK_IMPORTED_MODULE_2__.RippleHandlers(() => { + this.shouldRenderRipple = true; + return this.ripple; + }); + this.listeners = [ + { + target: this, + eventNames: ['click'], + cb: () => { + this.onClick(); + }, + }, + { + target: this, + eventNames: ['mouseenter'], + cb: this.rippleHandlers.startHover, + }, + { + target: this, + eventNames: ['mouseleave'], + cb: this.rippleHandlers.endHover, + }, + { + target: this, + eventNames: ['focus'], + cb: this.rippleHandlers.startFocus, + }, + { + target: this, + eventNames: ['blur'], + cb: this.rippleHandlers.endFocus, + }, + { + target: this, + eventNames: ['mousedown', 'touchstart'], + cb: (e) => { + const name = e.type; + this.onDown(name === 'mousedown' ? 'mouseup' : 'touchend', e); + }, + }, + ]; + } + get text() { + const textContent = this.textContent; + return textContent ? textContent.trim() : ''; + } + render() { + const text = this.renderText(); + const graphic = this.graphic ? this.renderGraphic() : (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) ``; + const meta = this.hasMeta ? this.renderMeta() : (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) ``; + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) ` + ${this.renderRipple()} + ${graphic} + ${text} + ${meta}`; + } + renderRipple() { + if (this.shouldRenderRipple) { + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) ` + + `; + } + else if (this.activated) { + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) `
`; + } + else { + return ''; + } + } + renderGraphic() { + const graphicClasses = { + multi: this.multipleGraphics, + }; + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) ` + + + `; + } + renderMeta() { + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) ` + + + `; + } + renderText() { + const inner = this.twoline ? this.renderTwoline() : this.renderSingleLine(); + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) ` + + ${inner} + `; + } + renderSingleLine() { + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) ``; + } + renderTwoline() { + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) ` + + + + + + + `; + } + onClick() { + this.fireRequestSelected(!this.selected, 'interaction'); + } + onDown(upName, evt) { + const onUp = () => { + window.removeEventListener(upName, onUp); + this.rippleHandlers.endPress(); + }; + window.addEventListener(upName, onUp); + this.rippleHandlers.startPress(evt); + } + fireRequestSelected(selected, source) { + if (this.noninteractive) { + return; + } + const customEv = new CustomEvent('request-selected', { bubbles: true, composed: true, detail: { source, selected } }); + this.dispatchEvent(customEv); + } + connectedCallback() { + super.connectedCallback(); + if (!this.noninteractive) { + this.setAttribute('mwc-list-item', ''); + } + for (const listener of this.listeners) { + for (const eventName of listener.eventNames) { + listener.target.addEventListener(eventName, listener.cb, { passive: true }); + } + } + } + disconnectedCallback() { + super.disconnectedCallback(); + for (const listener of this.listeners) { + for (const eventName of listener.eventNames) { + listener.target.removeEventListener(eventName, listener.cb); + } + } + if (this._managingList) { + this._managingList.debouncedLayout ? + this._managingList.debouncedLayout(true) : + this._managingList.layout(true); + } + } + // composed flag, event fire through shadow root and up through composed tree + firstUpdated() { + const ev = new Event('list-item-rendered', { bubbles: true, composed: true }); + this.dispatchEvent(ev); + } +} +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.query)('slot') +], ListItemBase.prototype, "slotElement", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.queryAsync)('mwc-ripple') +], ListItemBase.prototype, "ripple", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: String }) +], ListItemBase.prototype, "value", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: String, reflect: true }) +], ListItemBase.prototype, "group", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Number, reflect: true }) +], ListItemBase.prototype, "tabindex", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean, reflect: true }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__.observer)(function (value) { + if (value) { + this.setAttribute('aria-disabled', 'true'); + } + else { + this.setAttribute('aria-disabled', 'false'); + } + }) +], ListItemBase.prototype, "disabled", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean, reflect: true }) +], ListItemBase.prototype, "twoline", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean, reflect: true }) +], ListItemBase.prototype, "activated", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: String, reflect: true }) +], ListItemBase.prototype, "graphic", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean }) +], ListItemBase.prototype, "multipleGraphics", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean }) +], ListItemBase.prototype, "hasMeta", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean, reflect: true }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__.observer)(function (value) { + if (value) { + this.removeAttribute('aria-checked'); + this.removeAttribute('mwc-list-item'); + this.selected = false; + this.activated = false; + this.tabIndex = -1; + } + else { + this.setAttribute('mwc-list-item', ''); + } + }) +], ListItemBase.prototype, "noninteractive", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean, reflect: true }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__.observer)(function (value) { + const role = this.getAttribute('role'); + const isAriaSelectable = role === 'gridcell' || role === 'option' || + role === 'row' || role === 'tab'; + if (isAriaSelectable && value) { + this.setAttribute('aria-selected', 'true'); + } + else if (isAriaSelectable) { + this.setAttribute('aria-selected', 'false'); + } + if (this._firstChanged) { + this._firstChanged = false; + return; + } + if (this._skipPropRequest) { + return; + } + this.fireRequestSelected(value, 'property'); + }) +], ListItemBase.prototype, "selected", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.state)() +], ListItemBase.prototype, "shouldRenderRipple", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.state)() +], ListItemBase.prototype, "_managingList", void 0); +//# sourceMappingURL=mwc-list-item-base.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-list/mwc-list-item.css.js": +/*!**************************************************************!*\ + !*** ./node_modules/@material/mwc-list/mwc-list-item.css.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ styles: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/** + * @license + * Copyright 2021 Google LLC + * SPDX-LIcense-Identifier: Apache-2.0 + */ + +const styles = (0,lit__WEBPACK_IMPORTED_MODULE_0__.css) `:host{cursor:pointer;user-select:none;-webkit-tap-highlight-color:transparent;height:48px;display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;padding:0;padding-left:var(--mdc-list-side-padding, 16px);padding-right:var(--mdc-list-side-padding, 16px);outline:none;height:48px;color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87))}:host:focus{outline:none}:host([activated]){color:#6200ee;color:var(--mdc-theme-primary, #6200ee);--mdc-ripple-color: var( --mdc-theme-primary, #6200ee )}:host([activated]) .mdc-deprecated-list-item__graphic{color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}:host([activated]) .fake-activated-ripple::before{position:absolute;display:block;top:0;bottom:0;left:0;right:0;width:100%;height:100%;pointer-events:none;z-index:1;content:"";opacity:0.12;opacity:var(--mdc-ripple-activated-opacity, 0.12);background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}.mdc-deprecated-list-item__graphic{flex-shrink:0;align-items:center;justify-content:center;fill:currentColor;display:inline-flex}.mdc-deprecated-list-item__graphic ::slotted(*){flex-shrink:0;align-items:center;justify-content:center;fill:currentColor;width:100%;height:100%;text-align:center}.mdc-deprecated-list-item__meta{width:var(--mdc-list-item-meta-size, 24px);height:var(--mdc-list-item-meta-size, 24px);margin-left:auto;margin-right:0;color:rgba(0, 0, 0, 0.38);color:var(--mdc-theme-text-hint-on-background, rgba(0, 0, 0, 0.38))}.mdc-deprecated-list-item__meta.multi{width:auto}.mdc-deprecated-list-item__meta ::slotted(*){width:var(--mdc-list-item-meta-size, 24px);line-height:var(--mdc-list-item-meta-size, 24px)}.mdc-deprecated-list-item__meta ::slotted(.material-icons),.mdc-deprecated-list-item__meta ::slotted(mwc-icon){line-height:var(--mdc-list-item-meta-size, 24px) !important}.mdc-deprecated-list-item__meta ::slotted(:not(.material-icons):not(mwc-icon)){-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.75rem;font-size:var(--mdc-typography-caption-font-size, 0.75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:0.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, 0.0333333333em);text-decoration:inherit;text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform, inherit)}[dir=rtl] .mdc-deprecated-list-item__meta,.mdc-deprecated-list-item__meta[dir=rtl]{margin-left:0;margin-right:auto}.mdc-deprecated-list-item__meta ::slotted(*){width:100%;height:100%}.mdc-deprecated-list-item__text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mdc-deprecated-list-item__text ::slotted([for]),.mdc-deprecated-list-item__text[for]{pointer-events:none}.mdc-deprecated-list-item__primary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;margin-top:0;line-height:normal;margin-bottom:-20px;display:block}.mdc-deprecated-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-deprecated-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-deprecated-list-item__secondary-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:0.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;margin-top:0;line-height:normal;display:block}.mdc-deprecated-list-item__secondary-text::before{display:inline-block;width:0;height:20px;content:"";vertical-align:0}.mdc-deprecated-list--dense .mdc-deprecated-list-item__secondary-text{font-size:inherit}* ::slotted(a),a{color:inherit;text-decoration:none}:host([twoline]){height:72px}:host([twoline]) .mdc-deprecated-list-item__text{align-self:flex-start}:host([disabled]),:host([noninteractive]){cursor:default;pointer-events:none}:host([disabled]) .mdc-deprecated-list-item__text ::slotted(*){opacity:.38}:host([disabled]) .mdc-deprecated-list-item__text ::slotted(*),:host([disabled]) .mdc-deprecated-list-item__primary-text ::slotted(*),:host([disabled]) .mdc-deprecated-list-item__secondary-text ::slotted(*){color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-deprecated-list-item__secondary-text ::slotted(*){color:rgba(0, 0, 0, 0.54);color:var(--mdc-theme-text-secondary-on-background, rgba(0, 0, 0, 0.54))}.mdc-deprecated-list-item__graphic ::slotted(*){background-color:transparent;color:rgba(0, 0, 0, 0.38);color:var(--mdc-theme-text-icon-on-background, rgba(0, 0, 0, 0.38))}.mdc-deprecated-list-group__subheader ::slotted(*){color:rgba(0, 0, 0, 0.87);color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87))}:host([graphic=avatar]) .mdc-deprecated-list-item__graphic{width:var(--mdc-list-item-graphic-size, 40px);height:var(--mdc-list-item-graphic-size, 40px)}:host([graphic=avatar]) .mdc-deprecated-list-item__graphic.multi{width:auto}:host([graphic=avatar]) .mdc-deprecated-list-item__graphic ::slotted(*){width:var(--mdc-list-item-graphic-size, 40px);line-height:var(--mdc-list-item-graphic-size, 40px)}:host([graphic=avatar]) .mdc-deprecated-list-item__graphic ::slotted(.material-icons),:host([graphic=avatar]) .mdc-deprecated-list-item__graphic ::slotted(mwc-icon){line-height:var(--mdc-list-item-graphic-size, 40px) !important}:host([graphic=avatar]) .mdc-deprecated-list-item__graphic ::slotted(*){border-radius:50%}:host([graphic=avatar]) .mdc-deprecated-list-item__graphic,:host([graphic=medium]) .mdc-deprecated-list-item__graphic,:host([graphic=large]) .mdc-deprecated-list-item__graphic,:host([graphic=control]) .mdc-deprecated-list-item__graphic{margin-left:0;margin-right:var(--mdc-list-item-graphic-margin, 16px)}[dir=rtl] :host([graphic=avatar]) .mdc-deprecated-list-item__graphic,[dir=rtl] :host([graphic=medium]) .mdc-deprecated-list-item__graphic,[dir=rtl] :host([graphic=large]) .mdc-deprecated-list-item__graphic,[dir=rtl] :host([graphic=control]) .mdc-deprecated-list-item__graphic,:host([graphic=avatar]) .mdc-deprecated-list-item__graphic[dir=rtl],:host([graphic=medium]) .mdc-deprecated-list-item__graphic[dir=rtl],:host([graphic=large]) .mdc-deprecated-list-item__graphic[dir=rtl],:host([graphic=control]) .mdc-deprecated-list-item__graphic[dir=rtl]{margin-left:var(--mdc-list-item-graphic-margin, 16px);margin-right:0}:host([graphic=icon]) .mdc-deprecated-list-item__graphic{width:var(--mdc-list-item-graphic-size, 24px);height:var(--mdc-list-item-graphic-size, 24px);margin-left:0;margin-right:var(--mdc-list-item-graphic-margin, 32px)}:host([graphic=icon]) .mdc-deprecated-list-item__graphic.multi{width:auto}:host([graphic=icon]) .mdc-deprecated-list-item__graphic ::slotted(*){width:var(--mdc-list-item-graphic-size, 24px);line-height:var(--mdc-list-item-graphic-size, 24px)}:host([graphic=icon]) .mdc-deprecated-list-item__graphic ::slotted(.material-icons),:host([graphic=icon]) .mdc-deprecated-list-item__graphic ::slotted(mwc-icon){line-height:var(--mdc-list-item-graphic-size, 24px) !important}[dir=rtl] :host([graphic=icon]) .mdc-deprecated-list-item__graphic,:host([graphic=icon]) .mdc-deprecated-list-item__graphic[dir=rtl]{margin-left:var(--mdc-list-item-graphic-margin, 32px);margin-right:0}:host([graphic=avatar]:not([twoLine])),:host([graphic=icon]:not([twoLine])){height:56px}:host([graphic=medium]:not([twoLine])),:host([graphic=large]:not([twoLine])){height:72px}:host([graphic=medium]) .mdc-deprecated-list-item__graphic,:host([graphic=large]) .mdc-deprecated-list-item__graphic{width:var(--mdc-list-item-graphic-size, 56px);height:var(--mdc-list-item-graphic-size, 56px)}:host([graphic=medium]) .mdc-deprecated-list-item__graphic.multi,:host([graphic=large]) .mdc-deprecated-list-item__graphic.multi{width:auto}:host([graphic=medium]) .mdc-deprecated-list-item__graphic ::slotted(*),:host([graphic=large]) .mdc-deprecated-list-item__graphic ::slotted(*){width:var(--mdc-list-item-graphic-size, 56px);line-height:var(--mdc-list-item-graphic-size, 56px)}:host([graphic=medium]) .mdc-deprecated-list-item__graphic ::slotted(.material-icons),:host([graphic=medium]) .mdc-deprecated-list-item__graphic ::slotted(mwc-icon),:host([graphic=large]) .mdc-deprecated-list-item__graphic ::slotted(.material-icons),:host([graphic=large]) .mdc-deprecated-list-item__graphic ::slotted(mwc-icon){line-height:var(--mdc-list-item-graphic-size, 56px) !important}:host([graphic=large]){padding-left:0px}`; +//# sourceMappingURL=mwc-list-item.css.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-list/mwc-list-item.js": +/*!**********************************************************!*\ + !*** ./node_modules/@material/mwc-list/mwc-list-item.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ListItem: () => (/* binding */ ListItem) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var _mwc_list_item_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mwc-list-item-base */ "./node_modules/@material/mwc-list/mwc-list-item-base.js"); +/* harmony import */ var _mwc_list_item_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mwc-list-item.css */ "./node_modules/@material/mwc-list/mwc-list-item.css.js"); +/** + * @license + * Copyright 2020 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + +let ListItem = class ListItem extends _mwc_list_item_base__WEBPACK_IMPORTED_MODULE_1__.ListItemBase { +}; +ListItem.styles = [_mwc_list_item_css__WEBPACK_IMPORTED_MODULE_2__.styles]; +ListItem = (0,tslib__WEBPACK_IMPORTED_MODULE_3__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__.customElement)('mwc-list-item') +], ListItem); + +//# sourceMappingURL=mwc-list-item.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-list/mwc-list.css.js": +/*!*********************************************************!*\ + !*** ./node_modules/@material/mwc-list/mwc-list.css.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ styles: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/** + * @license + * Copyright 2021 Google LLC + * SPDX-LIcense-Identifier: Apache-2.0 + */ + +const styles = (0,lit__WEBPACK_IMPORTED_MODULE_0__.css) `@keyframes mdc-ripple-fg-radius-in{from{animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transform:translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1)}to{transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}}@keyframes mdc-ripple-fg-opacity-in{from{animation-timing-function:linear;opacity:0}to{opacity:var(--mdc-ripple-fg-opacity, 0)}}@keyframes mdc-ripple-fg-opacity-out{from{animation-timing-function:linear;opacity:var(--mdc-ripple-fg-opacity, 0)}to{opacity:0}}:host{display:block}.mdc-deprecated-list{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height, 1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:0.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);line-height:1.5rem;margin:0;padding:8px 0;list-style-type:none;color:rgba(0, 0, 0, 0.87);color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87));padding:var(--mdc-list-vertical-padding, 8px) 0}.mdc-deprecated-list:focus{outline:none}.mdc-deprecated-list-item{height:48px}.mdc-deprecated-list--dense{padding-top:4px;padding-bottom:4px;font-size:.812rem}.mdc-deprecated-list ::slotted([divider]){height:0;margin:0;border:none;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgba(0, 0, 0, 0.12)}.mdc-deprecated-list ::slotted([divider][padded]){margin:0 var(--mdc-list-side-padding, 16px)}.mdc-deprecated-list ::slotted([divider][inset]){margin-left:var(--mdc-list-inset-margin, 72px);margin-right:0;width:calc( 100% - var(--mdc-list-inset-margin, 72px) )}[dir=rtl] .mdc-deprecated-list ::slotted([divider][inset]),.mdc-deprecated-list ::slotted([divider][inset][dir=rtl]){margin-left:0;margin-right:var(--mdc-list-inset-margin, 72px)}.mdc-deprecated-list ::slotted([divider][inset][padded]){width:calc( 100% - var(--mdc-list-inset-margin, 72px) - var(--mdc-list-side-padding, 16px) )}.mdc-deprecated-list--dense ::slotted([mwc-list-item]){height:40px}.mdc-deprecated-list--dense ::slotted([mwc-list]){--mdc-list-item-graphic-size: 20px}.mdc-deprecated-list--two-line.mdc-deprecated-list--dense ::slotted([mwc-list-item]),.mdc-deprecated-list--avatar-list.mdc-deprecated-list--dense ::slotted([mwc-list-item]){height:60px}.mdc-deprecated-list--avatar-list.mdc-deprecated-list--dense ::slotted([mwc-list]){--mdc-list-item-graphic-size: 36px}:host([noninteractive]){pointer-events:none;cursor:default}.mdc-deprecated-list--dense ::slotted(.mdc-deprecated-list-item__primary-text){display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-deprecated-list--dense ::slotted(.mdc-deprecated-list-item__primary-text)::before{display:inline-block;width:0;height:24px;content:"";vertical-align:0}.mdc-deprecated-list--dense ::slotted(.mdc-deprecated-list-item__primary-text)::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}`; +//# sourceMappingURL=mwc-list.css.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-list/mwc-list.js": +/*!*****************************************************!*\ + !*** ./node_modules/@material/mwc-list/mwc-list.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ List: () => (/* binding */ List), +/* harmony export */ createSetFromIndex: () => (/* reexport safe */ _mwc_list_foundation__WEBPACK_IMPORTED_MODULE_3__.createSetFromIndex), +/* harmony export */ isEventMulti: () => (/* reexport safe */ _mwc_list_foundation__WEBPACK_IMPORTED_MODULE_3__.isEventMulti), +/* harmony export */ isIndexSet: () => (/* reexport safe */ _mwc_list_foundation__WEBPACK_IMPORTED_MODULE_3__.isIndexSet) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var _mwc_list_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mwc-list-base */ "./node_modules/@material/mwc-list/mwc-list-base.js"); +/* harmony import */ var _mwc_list_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mwc-list.css */ "./node_modules/@material/mwc-list/mwc-list.css.js"); +/* harmony import */ var _mwc_list_foundation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./mwc-list-foundation */ "./node_modules/@material/mwc-list/mwc-list-foundation.js"); +/** + * @license + * Copyright 2020 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + + +let List = class List extends _mwc_list_base__WEBPACK_IMPORTED_MODULE_1__.ListBase { +}; +List.styles = [_mwc_list_css__WEBPACK_IMPORTED_MODULE_2__.styles]; +List = (0,tslib__WEBPACK_IMPORTED_MODULE_4__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__.customElement)('mwc-list') +], List); + +//# sourceMappingURL=mwc-list.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-menu/mwc-menu-base.js": +/*!**********************************************************!*\ + !*** ./node_modules/@material/mwc-menu/mwc-menu-base.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MenuBase: () => (/* binding */ MenuBase), +/* harmony export */ createSetFromIndex: () => (/* reexport safe */ _material_mwc_list_mwc_list_foundation__WEBPACK_IMPORTED_MODULE_6__.createSetFromIndex), +/* harmony export */ isEventMulti: () => (/* reexport safe */ _material_mwc_list_mwc_list_foundation__WEBPACK_IMPORTED_MODULE_6__.isEventMulti), +/* harmony export */ isIndexSet: () => (/* reexport safe */ _material_mwc_list_mwc_list_foundation__WEBPACK_IMPORTED_MODULE_6__.isIndexSet) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var _material_mwc_list__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material/mwc-list */ "./node_modules/@material/mwc-list/mwc-list.js"); +/* harmony import */ var _mwc_menu_surface__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mwc-menu-surface */ "./node_modules/@material/mwc-menu/mwc-menu-surface.js"); +/* harmony import */ var _material_menu_constants__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @material/menu/constants */ "./node_modules/@material/menu/constants.js"); +/* harmony import */ var _material_menu_foundation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @material/menu/foundation */ "./node_modules/@material/menu/foundation.js"); +/* harmony import */ var _material_mwc_base_base_element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material/mwc-base/base-element */ "./node_modules/@material/mwc-base/base-element.js"); +/* harmony import */ var _material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @material/mwc-base/observer */ "./node_modules/@material/mwc-base/observer.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var _material_mwc_list_mwc_list_foundation__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @material/mwc-list/mwc-list-foundation */ "./node_modules/@material/mwc-list/mwc-list-foundation.js"); +/** + * @license + * Copyright 2020 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + + + + + + + +/** + * @fires selected {SelectedDetail} + * @fires action {ActionDetail} + * @fires items-updated + * @fires opened + * @fires closed + */ +class MenuBase extends _material_mwc_base_base_element__WEBPACK_IMPORTED_MODULE_2__.BaseElement { + constructor() { + super(...arguments); + this.mdcFoundationClass = _material_menu_foundation__WEBPACK_IMPORTED_MODULE_7__["default"]; + this.listElement_ = null; + this.anchor = null; + this.open = false; + this.quick = false; + this.wrapFocus = false; + this.innerRole = 'menu'; + this.innerAriaLabel = null; + this.corner = 'TOP_START'; + this.x = null; + this.y = null; + this.absolute = false; + this.multi = false; + this.activatable = false; + this.fixed = false; + this.forceGroupSelection = false; + this.fullwidth = false; + this.menuCorner = 'START'; + this.stayOpenOnBodyClick = false; + this.defaultFocus = 'LIST_ROOT'; + this._listUpdateComplete = null; + } + get listElement() { + if (!this.listElement_) { + this.listElement_ = this.renderRoot.querySelector('mwc-list'); + return this.listElement_; + } + return this.listElement_; + } + get items() { + const listElement = this.listElement; + if (listElement) { + return listElement.items; + } + return []; + } + get index() { + const listElement = this.listElement; + if (listElement) { + return listElement.index; + } + return -1; + } + get selected() { + const listElement = this.listElement; + if (listElement) { + return listElement.selected; + } + return null; + } + render() { + const itemRoles = this.innerRole === 'menu' ? 'menuitem' : 'option'; + return (0,lit__WEBPACK_IMPORTED_MODULE_4__.html) ` + + + + + `; + } + createAdapter() { + return { + addClassToElementAtIndex: (index, className) => { + const listElement = this.listElement; + if (!listElement) { + return; + } + const element = listElement.items[index]; + if (!element) { + return; + } + if (className === 'mdc-menu-item--selected') { + if (this.forceGroupSelection && !element.selected) { + listElement.toggle(index, true); + } + } + else { + element.classList.add(className); + } + }, + removeClassFromElementAtIndex: (index, className) => { + const listElement = this.listElement; + if (!listElement) { + return; + } + const element = listElement.items[index]; + if (!element) { + return; + } + if (className === 'mdc-menu-item--selected') { + if (element.selected) { + listElement.toggle(index, false); + } + } + else { + element.classList.remove(className); + } + }, + addAttributeToElementAtIndex: (index, attr, value) => { + const listElement = this.listElement; + if (!listElement) { + return; + } + const element = listElement.items[index]; + if (!element) { + return; + } + element.setAttribute(attr, value); + }, + removeAttributeFromElementAtIndex: (index, attr) => { + const listElement = this.listElement; + if (!listElement) { + return; + } + const element = listElement.items[index]; + if (!element) { + return; + } + element.removeAttribute(attr); + }, + getAttributeFromElementAtIndex: (index, attr) => { + const listElement = this.listElement; + if (!listElement) { + return null; + } + const element = listElement.items[index]; + if (!element) { + return null; + } + return element.getAttribute(attr); + }, + elementContainsClass: (element, className) => element.classList.contains(className), + closeSurface: () => { + this.open = false; + }, + getElementIndex: (element) => { + const listElement = this.listElement; + if (listElement) { + return listElement.items.indexOf(element); + } + return -1; + }, + notifySelected: () => { }, + getMenuItemCount: () => { + const listElement = this.listElement; + if (!listElement) { + return 0; + } + return listElement.items.length; + }, + focusItemAtIndex: (index) => { + const listElement = this.listElement; + if (!listElement) { + return; + } + const element = listElement.items[index]; + if (element) { + element.focus(); + } + }, + focusListRoot: () => { + if (this.listElement) { + this.listElement.focus(); + } + }, + getSelectedSiblingOfItemAtIndex: (index) => { + const listElement = this.listElement; + if (!listElement) { + return -1; + } + const elementAtIndex = listElement.items[index]; + if (!elementAtIndex || !elementAtIndex.group) { + return -1; + } + for (let i = 0; i < listElement.items.length; i++) { + if (i === index) { + continue; + } + const current = listElement.items[i]; + if (current.selected && current.group === elementAtIndex.group) { + return i; + } + } + return -1; + }, + isSelectableItemAtIndex: (index) => { + const listElement = this.listElement; + if (!listElement) { + return false; + } + const elementAtIndex = listElement.items[index]; + if (!elementAtIndex) { + return false; + } + return elementAtIndex.hasAttribute('group'); + }, + }; + } + onKeydown(evt) { + if (this.mdcFoundation) { + this.mdcFoundation.handleKeydown(evt); + } + } + onAction(evt) { + const listElement = this.listElement; + if (this.mdcFoundation && listElement) { + const index = evt.detail.index; + const el = listElement.items[index]; + if (el) { + this.mdcFoundation.handleItemAction(el); + } + } + } + onOpened() { + this.open = true; + if (this.mdcFoundation) { + this.mdcFoundation.handleMenuSurfaceOpened(); + } + } + onClosed() { + this.open = false; + } + // tslint:disable:ban-ts-ignore + async getUpdateComplete() { + await this._listUpdateComplete; + // @ts-ignore + const result = await super.getUpdateComplete(); + return result; + } + // tslint:enable:ban-ts-ignore + async firstUpdated() { + super.firstUpdated(); + const listElement = this.listElement; + if (listElement) { + this._listUpdateComplete = listElement.updateComplete; + await this._listUpdateComplete; + } + } + select(index) { + const listElement = this.listElement; + if (listElement) { + listElement.select(index); + } + } + close() { + this.open = false; + } + show() { + this.open = true; + } + getFocusedItemIndex() { + const listElement = this.listElement; + if (listElement) { + return listElement.getFocusedItemIndex(); + } + return -1; + } + focusItemAtIndex(index) { + const listElement = this.listElement; + if (listElement) { + listElement.focusItemAtIndex(index); + } + } + layout(updateItems = true) { + const listElement = this.listElement; + if (listElement) { + listElement.layout(updateItems); + } + } +} +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.query)('.mdc-menu') +], MenuBase.prototype, "mdcRoot", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.query)('slot') +], MenuBase.prototype, "slotElement", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Object }) +], MenuBase.prototype, "anchor", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean, reflect: true }) +], MenuBase.prototype, "open", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }) +], MenuBase.prototype, "quick", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }) +], MenuBase.prototype, "wrapFocus", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: String }) +], MenuBase.prototype, "innerRole", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: String }) +], MenuBase.prototype, "innerAriaLabel", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: String }) +], MenuBase.prototype, "corner", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Number }) +], MenuBase.prototype, "x", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Number }) +], MenuBase.prototype, "y", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }) +], MenuBase.prototype, "absolute", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }) +], MenuBase.prototype, "multi", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }) +], MenuBase.prototype, "activatable", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }) +], MenuBase.prototype, "fixed", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }) +], MenuBase.prototype, "forceGroupSelection", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }) +], MenuBase.prototype, "fullwidth", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: String }) +], MenuBase.prototype, "menuCorner", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }) +], MenuBase.prototype, "stayOpenOnBodyClick", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: String }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_3__.observer)(function (value) { + if (this.mdcFoundation) { + this.mdcFoundation.setDefaultFocusState(_material_menu_constants__WEBPACK_IMPORTED_MODULE_9__.DefaultFocusState[value]); + } + }) +], MenuBase.prototype, "defaultFocus", void 0); +//# sourceMappingURL=mwc-menu-base.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-menu/mwc-menu-surface-base.js": +/*!******************************************************************!*\ + !*** ./node_modules/@material/mwc-menu/mwc-menu-surface-base.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MenuSurfaceBase: () => (/* binding */ MenuSurfaceBase) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var _material_menu_surface_constants__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @material/menu-surface/constants */ "./node_modules/@material/menu-surface/constants.js"); +/* harmony import */ var _material_menu_surface_foundation__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @material/menu-surface/foundation */ "./node_modules/@material/menu-surface/foundation.js"); +/* harmony import */ var _material_mwc_base_base_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material/mwc-base/base-element */ "./node_modules/@material/mwc-base/base-element.js"); +/* harmony import */ var _material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/mwc-base/observer */ "./node_modules/@material/mwc-base/observer.js"); +/* harmony import */ var _material_mwc_base_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material/mwc-base/utils */ "./node_modules/@material/mwc-base/utils.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var lit_directives_class_map_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lit/directives/class-map.js */ "./node_modules/lit/directives/class-map.js"); +/* harmony import */ var lit_directives_style_map_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lit/directives/style-map.js */ "./node_modules/lit/directives/style-map.js"); +/** + * @license + * Copyright 2020 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + + + + + + + + + + +// tslint:disable:no-bitwise +// required for closure compiler +const stringToCorner = { + 'TOP_LEFT': _material_menu_surface_constants__WEBPACK_IMPORTED_MODULE_7__.Corner.TOP_LEFT, + 'TOP_RIGHT': _material_menu_surface_constants__WEBPACK_IMPORTED_MODULE_7__.Corner.TOP_RIGHT, + 'BOTTOM_LEFT': _material_menu_surface_constants__WEBPACK_IMPORTED_MODULE_7__.Corner.BOTTOM_LEFT, + 'BOTTOM_RIGHT': _material_menu_surface_constants__WEBPACK_IMPORTED_MODULE_7__.Corner.BOTTOM_RIGHT, + 'TOP_START': _material_menu_surface_constants__WEBPACK_IMPORTED_MODULE_7__.Corner.TOP_START, + 'TOP_END': _material_menu_surface_constants__WEBPACK_IMPORTED_MODULE_7__.Corner.TOP_END, + 'BOTTOM_START': _material_menu_surface_constants__WEBPACK_IMPORTED_MODULE_7__.Corner.BOTTOM_START, + 'BOTTOM_END': _material_menu_surface_constants__WEBPACK_IMPORTED_MODULE_7__.Corner.BOTTOM_END, +}; +/** + * @fires opened + * @fires closed + */ +class MenuSurfaceBase extends _material_mwc_base_base_element__WEBPACK_IMPORTED_MODULE_0__.BaseElement { + constructor() { + super(...arguments); + this.mdcFoundationClass = _material_menu_surface_foundation__WEBPACK_IMPORTED_MODULE_8__["default"]; + this.absolute = false; + this.fullwidth = false; + this.fixed = false; + this.x = null; + this.y = null; + // must be defined before open or else race condition in foundation occurs. + this.quick = false; + this.open = false; + this.stayOpenOnBodyClick = false; + this.bitwiseCorner = _material_menu_surface_constants__WEBPACK_IMPORTED_MODULE_7__.Corner.TOP_START; + this.previousMenuCorner = null; + // must be defined before observer of anchor corner for initialization + this.menuCorner = 'START'; + this.corner = 'TOP_START'; + this.styleTop = ''; + this.styleLeft = ''; + this.styleRight = ''; + this.styleBottom = ''; + this.styleMaxHeight = ''; + this.styleTransformOrigin = ''; + this.anchor = null; + this.previouslyFocused = null; + this.previousAnchor = null; + this.onBodyClickBound = () => undefined; + } + render() { + const classes = { + 'mdc-menu-surface--fixed': this.fixed, + 'mdc-menu-surface--fullwidth': this.fullwidth, + }; + const styles = { + 'top': this.styleTop, + 'left': this.styleLeft, + 'right': this.styleRight, + 'bottom': this.styleBottom, + 'max-height': this.styleMaxHeight, + 'transform-origin': this.styleTransformOrigin, + }; + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) ` +
+ +
`; + } + createAdapter() { + return Object.assign(Object.assign({}, (0,_material_mwc_base_base_element__WEBPACK_IMPORTED_MODULE_0__.addHasRemoveClass)(this.mdcRoot)), { hasAnchor: () => { + return !!this.anchor; + }, notifyClose: () => { + const init = { bubbles: true, composed: true }; + const ev = new CustomEvent('closed', init); + this.open = false; + this.mdcRoot.dispatchEvent(ev); + }, notifyClosing: () => { + const init = { bubbles: true, composed: true }; + const ev = new CustomEvent('closing', init); + this.mdcRoot.dispatchEvent(ev); + }, notifyOpen: () => { + const init = { bubbles: true, composed: true }; + const ev = new CustomEvent('opened', init); + this.open = true; + this.mdcRoot.dispatchEvent(ev); + }, isElementInContainer: () => false, isRtl: () => { + if (this.mdcRoot) { + return getComputedStyle(this.mdcRoot).direction === 'rtl'; + } + return false; + }, setTransformOrigin: (origin) => { + const root = this.mdcRoot; + if (!root) { + return; + } + this.styleTransformOrigin = origin; + }, isFocused: () => { + return (0,_material_mwc_base_utils__WEBPACK_IMPORTED_MODULE_2__.doesElementContainFocus)(this); + }, saveFocus: () => { + const activeElementPath = (0,_material_mwc_base_utils__WEBPACK_IMPORTED_MODULE_2__.deepActiveElementPath)(); + const pathLength = activeElementPath.length; + if (!pathLength) { + this.previouslyFocused = null; + } + this.previouslyFocused = activeElementPath[pathLength - 1]; + }, restoreFocus: () => { + if (!this.previouslyFocused) { + return; + } + if ('focus' in this.previouslyFocused) { + this.previouslyFocused.focus(); + } + }, getInnerDimensions: () => { + const mdcRoot = this.mdcRoot; + if (!mdcRoot) { + return { width: 0, height: 0 }; + } + return { width: mdcRoot.offsetWidth, height: mdcRoot.offsetHeight }; + }, getAnchorDimensions: () => { + const anchorElement = this.anchor; + return anchorElement ? anchorElement.getBoundingClientRect() : null; + }, getBodyDimensions: () => { + return { + width: document.body.clientWidth, + height: document.body.clientHeight, + }; + }, getWindowDimensions: () => { + return { + width: window.innerWidth, + height: window.innerHeight, + }; + }, getWindowScroll: () => { + return { + x: window.pageXOffset, + y: window.pageYOffset, + }; + }, setPosition: (position) => { + const mdcRoot = this.mdcRoot; + if (!mdcRoot) { + return; + } + this.styleLeft = 'left' in position ? `${position.left}px` : ''; + this.styleRight = 'right' in position ? `${position.right}px` : ''; + this.styleTop = 'top' in position ? `${position.top}px` : ''; + this.styleBottom = 'bottom' in position ? `${position.bottom}px` : ''; + }, setMaxHeight: async (height) => { + const mdcRoot = this.mdcRoot; + if (!mdcRoot) { + return; + } + // must set both for IE support as IE will not set a var + this.styleMaxHeight = height; + await this.updateComplete; + this.styleMaxHeight = `var(--mdc-menu-max-height, ${height})`; + } }); + } + onKeydown(evt) { + if (this.mdcFoundation) { + this.mdcFoundation.handleKeydown(evt); + } + } + onBodyClick(evt) { + if (this.stayOpenOnBodyClick) { + return; + } + const path = evt.composedPath(); + if (path.indexOf(this) === -1) { + this.close(); + } + } + registerBodyClick() { + this.onBodyClickBound = this.onBodyClick.bind(this); + // capture otherwise listener closes menu after quick menu opens + document.body.addEventListener('click', this.onBodyClickBound, { passive: true, capture: true }); + } + deregisterBodyClick() { + document.body.removeEventListener('click', this.onBodyClickBound, { capture: true }); + } + close() { + this.open = false; + } + show() { + this.open = true; + } +} +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.query)('.mdc-menu-surface') +], MenuSurfaceBase.prototype, "mdcRoot", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.query)('slot') +], MenuSurfaceBase.prototype, "slotElement", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__.observer)(function (isAbsolute) { + if (this.mdcFoundation && !this.fixed) { + this.mdcFoundation.setIsHoisted(isAbsolute); + } + }) +], MenuSurfaceBase.prototype, "absolute", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean }) +], MenuSurfaceBase.prototype, "fullwidth", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__.observer)(function (isFixed) { + if (this.mdcFoundation && !this.absolute) { + this.mdcFoundation.setFixedPosition(isFixed); + } + }) +], MenuSurfaceBase.prototype, "fixed", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Number }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__.observer)(function (value) { + if (this.mdcFoundation && this.y !== null && value !== null) { + this.mdcFoundation.setAbsolutePosition(value, this.y); + this.mdcFoundation.setAnchorMargin({ left: value, top: this.y, right: -value, bottom: this.y }); + } + }) +], MenuSurfaceBase.prototype, "x", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Number }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__.observer)(function (value) { + if (this.mdcFoundation && this.x !== null && value !== null) { + this.mdcFoundation.setAbsolutePosition(this.x, value); + this.mdcFoundation.setAnchorMargin({ left: this.x, top: value, right: -this.x, bottom: value }); + } + }) +], MenuSurfaceBase.prototype, "y", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__.observer)(function (value) { + if (this.mdcFoundation) { + this.mdcFoundation.setQuickOpen(value); + } + }) +], MenuSurfaceBase.prototype, "quick", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean, reflect: true }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__.observer)(function (isOpen, wasOpen) { + if (this.mdcFoundation) { + if (isOpen) { + this.mdcFoundation.open(); + // wasOpen helps with first render (when it is `undefined`) perf + } + else if (wasOpen !== undefined) { + this.mdcFoundation.close(); + } + } + }) +], MenuSurfaceBase.prototype, "open", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean }) +], MenuSurfaceBase.prototype, "stayOpenOnBodyClick", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.state)(), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__.observer)(function (value) { + if (this.mdcFoundation) { + if (value) { + this.mdcFoundation.setAnchorCorner(value); + } + else { + this.mdcFoundation.setAnchorCorner(value); + } + } + }) +], MenuSurfaceBase.prototype, "bitwiseCorner", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: String }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__.observer)(function (value) { + if (this.mdcFoundation) { + const isValidValue = value === 'START' || value === 'END'; + const isFirstTimeSet = this.previousMenuCorner === null; + const cornerChanged = !isFirstTimeSet && value !== this.previousMenuCorner; + const initiallySetToEnd = isFirstTimeSet && value === 'END'; + if (isValidValue && (cornerChanged || initiallySetToEnd)) { + this.bitwiseCorner = this.bitwiseCorner ^ _material_menu_surface_constants__WEBPACK_IMPORTED_MODULE_7__.CornerBit.RIGHT; + this.mdcFoundation.flipCornerHorizontally(); + this.previousMenuCorner = value; + } + } + }) +], MenuSurfaceBase.prototype, "menuCorner", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: String }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__.observer)(function (value) { + if (this.mdcFoundation) { + if (value) { + let newCorner = stringToCorner[value]; + if (this.menuCorner === 'END') { + newCorner = newCorner ^ _material_menu_surface_constants__WEBPACK_IMPORTED_MODULE_7__.CornerBit.RIGHT; + } + this.bitwiseCorner = newCorner; + } + } + }) +], MenuSurfaceBase.prototype, "corner", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.state)() +], MenuSurfaceBase.prototype, "styleTop", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.state)() +], MenuSurfaceBase.prototype, "styleLeft", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.state)() +], MenuSurfaceBase.prototype, "styleRight", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.state)() +], MenuSurfaceBase.prototype, "styleBottom", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.state)() +], MenuSurfaceBase.prototype, "styleMaxHeight", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.state)() +], MenuSurfaceBase.prototype, "styleTransformOrigin", void 0); +//# sourceMappingURL=mwc-menu-surface-base.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-menu/mwc-menu-surface.css.js": +/*!*****************************************************************!*\ + !*** ./node_modules/@material/mwc-menu/mwc-menu-surface.css.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ styles: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/** + * @license + * Copyright 2021 Google LLC + * SPDX-LIcense-Identifier: Apache-2.0 + */ + +const styles = (0,lit__WEBPACK_IMPORTED_MODULE_0__.css) `.mdc-menu-surface{display:none;position:absolute;box-sizing:border-box;max-width:calc(100vw - 32px);max-width:var(--mdc-menu-max-width, calc(100vw - 32px));max-height:calc(100vh - 32px);max-height:var(--mdc-menu-max-height, calc(100vh - 32px));margin:0;padding:0;transform:scale(1);transform-origin:top left;opacity:0;overflow:auto;will-change:transform,opacity;z-index:8;transition:opacity .03s linear,transform .12s cubic-bezier(0, 0, 0.2, 1),height 250ms cubic-bezier(0, 0, 0.2, 1);box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0,0,0,.12);background-color:#fff;background-color:var(--mdc-theme-surface, #fff);color:#000;color:var(--mdc-theme-on-surface, #000);border-radius:4px;border-radius:var(--mdc-shape-medium, 4px);transform-origin-left:top left;transform-origin-right:top right}.mdc-menu-surface:focus{outline:none}.mdc-menu-surface--animating-open{display:inline-block;transform:scale(0.8);opacity:0}.mdc-menu-surface--open{display:inline-block;transform:scale(1);opacity:1}.mdc-menu-surface--animating-closed{display:inline-block;opacity:0;transition:opacity .075s linear}[dir=rtl] .mdc-menu-surface,.mdc-menu-surface[dir=rtl]{transform-origin-left:top right;transform-origin-right:top left}.mdc-menu-surface--anchor{position:relative;overflow:visible}.mdc-menu-surface--fixed{position:fixed}.mdc-menu-surface--fullwidth{width:100%}:host(:not([open])){display:none}.mdc-menu-surface{z-index:8;z-index:var(--mdc-menu-z-index, 8);min-width:112px;min-width:var(--mdc-menu-min-width, 112px)}`; +//# sourceMappingURL=mwc-menu-surface.css.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-menu/mwc-menu-surface.js": +/*!*************************************************************!*\ + !*** ./node_modules/@material/mwc-menu/mwc-menu-surface.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MenuSurface: () => (/* binding */ MenuSurface) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var _mwc_menu_surface_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mwc-menu-surface-base */ "./node_modules/@material/mwc-menu/mwc-menu-surface-base.js"); +/* harmony import */ var _mwc_menu_surface_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mwc-menu-surface.css */ "./node_modules/@material/mwc-menu/mwc-menu-surface.css.js"); +/** + * @license + * Copyright 2020 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + +let MenuSurface = class MenuSurface extends _mwc_menu_surface_base__WEBPACK_IMPORTED_MODULE_1__.MenuSurfaceBase { +}; +MenuSurface.styles = [_mwc_menu_surface_css__WEBPACK_IMPORTED_MODULE_2__.styles]; +MenuSurface = (0,tslib__WEBPACK_IMPORTED_MODULE_3__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__.customElement)('mwc-menu-surface') +], MenuSurface); + +//# sourceMappingURL=mwc-menu-surface.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-menu/mwc-menu.css.js": +/*!*********************************************************!*\ + !*** ./node_modules/@material/mwc-menu/mwc-menu.css.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ styles: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/** + * @license + * Copyright 2021 Google LLC + * SPDX-LIcense-Identifier: Apache-2.0 + */ + +const styles = (0,lit__WEBPACK_IMPORTED_MODULE_0__.css) `mwc-list ::slotted([mwc-list-item]:not([twoline])),mwc-list ::slotted([noninteractive]:not([twoline])){height:var(--mdc-menu-item-height, 48px)}`; +//# sourceMappingURL=mwc-menu.css.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-menu/mwc-menu.js": +/*!*****************************************************!*\ + !*** ./node_modules/@material/mwc-menu/mwc-menu.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Menu: () => (/* binding */ Menu), +/* harmony export */ createSetFromIndex: () => (/* reexport safe */ _material_mwc_list_mwc_list_foundation__WEBPACK_IMPORTED_MODULE_3__.createSetFromIndex), +/* harmony export */ isEventMulti: () => (/* reexport safe */ _material_mwc_list_mwc_list_foundation__WEBPACK_IMPORTED_MODULE_3__.isEventMulti), +/* harmony export */ isIndexSet: () => (/* reexport safe */ _material_mwc_list_mwc_list_foundation__WEBPACK_IMPORTED_MODULE_3__.isIndexSet) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var _mwc_menu_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mwc-menu-base */ "./node_modules/@material/mwc-menu/mwc-menu-base.js"); +/* harmony import */ var _mwc_menu_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mwc-menu.css */ "./node_modules/@material/mwc-menu/mwc-menu.css.js"); +/* harmony import */ var _material_mwc_list_mwc_list_foundation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @material/mwc-list/mwc-list-foundation */ "./node_modules/@material/mwc-list/mwc-list-foundation.js"); +/** + * @license + * Copyright 2020 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + + +let Menu = class Menu extends _mwc_menu_base__WEBPACK_IMPORTED_MODULE_1__.MenuBase { +}; +Menu.styles = [_mwc_menu_css__WEBPACK_IMPORTED_MODULE_2__.styles]; +Menu = (0,tslib__WEBPACK_IMPORTED_MODULE_4__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__.customElement)('mwc-menu') +], Menu); + +//# sourceMappingURL=mwc-menu.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-ripple/mwc-ripple-base.js": +/*!**************************************************************!*\ + !*** ./node_modules/@material/mwc-ripple/mwc-ripple-base.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ RippleBase: () => (/* binding */ RippleBase) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var _material_dom_ponyfill__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @material/dom/ponyfill */ "./node_modules/@material/dom/ponyfill.js"); +/* harmony import */ var _material_mwc_base_base_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material/mwc-base/base-element */ "./node_modules/@material/mwc-base/base-element.js"); +/* harmony import */ var _material_ripple_foundation__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material/ripple/foundation */ "./node_modules/@material/ripple/foundation.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var lit_directives_class_map_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lit/directives/class-map.js */ "./node_modules/lit/directives/class-map.js"); +/* harmony import */ var lit_directives_style_map_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit/directives/style-map.js */ "./node_modules/lit/directives/style-map.js"); +/** + * @license + * Copyright 2018 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + + + + + +/** @soyCompatible */ +class RippleBase extends _material_mwc_base_base_element__WEBPACK_IMPORTED_MODULE_0__.BaseElement { + constructor() { + super(...arguments); + this.primary = false; + this.accent = false; + this.unbounded = false; + this.disabled = false; + this.activated = false; + this.selected = false; + this.internalUseStateLayerCustomProperties = false; + this.hovering = false; + this.bgFocused = false; + this.fgActivation = false; + this.fgDeactivation = false; + this.fgScale = ''; + this.fgSize = ''; + this.translateStart = ''; + this.translateEnd = ''; + this.leftPos = ''; + this.topPos = ''; + this.mdcFoundationClass = _material_ripple_foundation__WEBPACK_IMPORTED_MODULE_5__["default"]; + } + get isActive() { + return (0,_material_dom_ponyfill__WEBPACK_IMPORTED_MODULE_6__.matches)(this.parentElement || this, ':active'); + } + createAdapter() { + return { + browserSupportsCssVars: () => true, + isUnbounded: () => this.unbounded, + isSurfaceActive: () => this.isActive, + isSurfaceDisabled: () => this.disabled, + addClass: (className) => { + switch (className) { + case 'mdc-ripple-upgraded--background-focused': + this.bgFocused = true; + break; + case 'mdc-ripple-upgraded--foreground-activation': + this.fgActivation = true; + break; + case 'mdc-ripple-upgraded--foreground-deactivation': + this.fgDeactivation = true; + break; + default: + break; + } + }, + removeClass: (className) => { + switch (className) { + case 'mdc-ripple-upgraded--background-focused': + this.bgFocused = false; + break; + case 'mdc-ripple-upgraded--foreground-activation': + this.fgActivation = false; + break; + case 'mdc-ripple-upgraded--foreground-deactivation': + this.fgDeactivation = false; + break; + default: + break; + } + }, + containsEventTarget: () => true, + registerInteractionHandler: () => undefined, + deregisterInteractionHandler: () => undefined, + registerDocumentInteractionHandler: () => undefined, + deregisterDocumentInteractionHandler: () => undefined, + registerResizeHandler: () => undefined, + deregisterResizeHandler: () => undefined, + updateCssVariable: (varName, value) => { + switch (varName) { + case '--mdc-ripple-fg-scale': + this.fgScale = value; + break; + case '--mdc-ripple-fg-size': + this.fgSize = value; + break; + case '--mdc-ripple-fg-translate-end': + this.translateEnd = value; + break; + case '--mdc-ripple-fg-translate-start': + this.translateStart = value; + break; + case '--mdc-ripple-left': + this.leftPos = value; + break; + case '--mdc-ripple-top': + this.topPos = value; + break; + default: + break; + } + }, + computeBoundingRect: () => (this.parentElement || this).getBoundingClientRect(), + getWindowPageOffset: () => ({ x: window.pageXOffset, y: window.pageYOffset }), + }; + } + startPress(ev) { + this.waitForFoundation(() => { + this.mdcFoundation.activate(ev); + }); + } + endPress() { + this.waitForFoundation(() => { + this.mdcFoundation.deactivate(); + }); + } + startFocus() { + this.waitForFoundation(() => { + this.mdcFoundation.handleFocus(); + }); + } + endFocus() { + this.waitForFoundation(() => { + this.mdcFoundation.handleBlur(); + }); + } + startHover() { + this.hovering = true; + } + endHover() { + this.hovering = false; + } + /** + * Wait for the MDCFoundation to be created by `firstUpdated` + */ + waitForFoundation(fn) { + if (this.mdcFoundation) { + fn(); + } + else { + this.updateComplete.then(fn); + } + } + update(changedProperties) { + if (changedProperties.has('disabled')) { + // stop hovering when ripple is disabled to prevent a stuck "hover" state + // When re-enabled, the outer component will get a `mouseenter` event on + // the first movement, which will call `startHover()` + if (this.disabled) { + this.endHover(); + } + } + super.update(changedProperties); + } + /** @soyTemplate */ + render() { + const shouldActivateInPrimary = this.activated && (this.primary || !this.accent); + const shouldSelectInPrimary = this.selected && (this.primary || !this.accent); + /** @classMap */ + const classes = { + 'mdc-ripple-surface--accent': this.accent, + 'mdc-ripple-surface--primary--activated': shouldActivateInPrimary, + 'mdc-ripple-surface--accent--activated': this.accent && this.activated, + 'mdc-ripple-surface--primary--selected': shouldSelectInPrimary, + 'mdc-ripple-surface--accent--selected': this.accent && this.selected, + 'mdc-ripple-surface--disabled': this.disabled, + 'mdc-ripple-surface--hover': this.hovering, + 'mdc-ripple-surface--primary': this.primary, + 'mdc-ripple-surface--selected': this.selected, + 'mdc-ripple-upgraded--background-focused': this.bgFocused, + 'mdc-ripple-upgraded--foreground-activation': this.fgActivation, + 'mdc-ripple-upgraded--foreground-deactivation': this.fgDeactivation, + 'mdc-ripple-upgraded--unbounded': this.unbounded, + 'mdc-ripple-surface--internal-use-state-layer-custom-properties': this.internalUseStateLayerCustomProperties, + }; + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html) ` +
`; + } +} +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.query)('.mdc-ripple-surface') +], RippleBase.prototype, "mdcRoot", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.property)({ type: Boolean }) +], RippleBase.prototype, "primary", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.property)({ type: Boolean }) +], RippleBase.prototype, "accent", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.property)({ type: Boolean }) +], RippleBase.prototype, "unbounded", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.property)({ type: Boolean }) +], RippleBase.prototype, "disabled", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.property)({ type: Boolean }) +], RippleBase.prototype, "activated", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.property)({ type: Boolean }) +], RippleBase.prototype, "selected", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.property)({ type: Boolean }) +], RippleBase.prototype, "internalUseStateLayerCustomProperties", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.state)() +], RippleBase.prototype, "hovering", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.state)() +], RippleBase.prototype, "bgFocused", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.state)() +], RippleBase.prototype, "fgActivation", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.state)() +], RippleBase.prototype, "fgDeactivation", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.state)() +], RippleBase.prototype, "fgScale", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.state)() +], RippleBase.prototype, "fgSize", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.state)() +], RippleBase.prototype, "translateStart", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.state)() +], RippleBase.prototype, "translateEnd", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.state)() +], RippleBase.prototype, "leftPos", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.state)() +], RippleBase.prototype, "topPos", void 0); +//# sourceMappingURL=mwc-ripple-base.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-ripple/mwc-ripple.css.js": +/*!*************************************************************!*\ + !*** ./node_modules/@material/mwc-ripple/mwc-ripple.css.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ styles: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/** + * @license + * Copyright 2021 Google LLC + * SPDX-LIcense-Identifier: Apache-2.0 + */ + +const styles = (0,lit__WEBPACK_IMPORTED_MODULE_0__.css) `.mdc-ripple-surface{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity;position:relative;outline:none;overflow:hidden}.mdc-ripple-surface::before,.mdc-ripple-surface::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-ripple-surface::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-ripple-surface::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-ripple-surface.mdc-ripple-upgraded::before{transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-ripple-surface.mdc-ripple-upgraded::after{top:0;left:0;transform:scale(0);transform-origin:center center}.mdc-ripple-surface.mdc-ripple-upgraded--unbounded::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-ripple-surface.mdc-ripple-upgraded--foreground-activation::after{animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-ripple-surface.mdc-ripple-upgraded--foreground-deactivation::after{animation:mdc-ripple-fg-opacity-out 150ms;transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-ripple-surface::before,.mdc-ripple-surface::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-ripple-surface.mdc-ripple-upgraded::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-ripple-surface[data-mdc-ripple-is-unbounded],.mdc-ripple-upgraded--unbounded{overflow:visible}.mdc-ripple-surface[data-mdc-ripple-is-unbounded]::before,.mdc-ripple-surface[data-mdc-ripple-is-unbounded]::after,.mdc-ripple-upgraded--unbounded::before,.mdc-ripple-upgraded--unbounded::after{top:calc(50% - 50%);left:calc(50% - 50%);width:100%;height:100%}.mdc-ripple-surface[data-mdc-ripple-is-unbounded].mdc-ripple-upgraded::before,.mdc-ripple-surface[data-mdc-ripple-is-unbounded].mdc-ripple-upgraded::after,.mdc-ripple-upgraded--unbounded.mdc-ripple-upgraded::before,.mdc-ripple-upgraded--unbounded.mdc-ripple-upgraded::after{top:var(--mdc-ripple-top, calc(50% - 50%));left:var(--mdc-ripple-left, calc(50% - 50%));width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-ripple-surface[data-mdc-ripple-is-unbounded].mdc-ripple-upgraded::after,.mdc-ripple-upgraded--unbounded.mdc-ripple-upgraded::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-ripple-surface::before,.mdc-ripple-surface::after{background-color:#000;background-color:var(--mdc-ripple-color, #000)}.mdc-ripple-surface:hover::before,.mdc-ripple-surface.mdc-ripple-surface--hover::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-ripple-surface.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-ripple-surface:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-ripple-surface.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}@keyframes mdc-ripple-fg-radius-in{from{animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transform:translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1)}to{transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}}@keyframes mdc-ripple-fg-opacity-in{from{animation-timing-function:linear;opacity:0}to{opacity:var(--mdc-ripple-fg-opacity, 0)}}@keyframes mdc-ripple-fg-opacity-out{from{animation-timing-function:linear;opacity:var(--mdc-ripple-fg-opacity, 0)}to{opacity:0}}:host{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;display:block}:host .mdc-ripple-surface{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;will-change:unset}.mdc-ripple-surface--primary::before,.mdc-ripple-surface--primary::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}.mdc-ripple-surface--primary:hover::before,.mdc-ripple-surface--primary.mdc-ripple-surface--hover::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-ripple-surface--primary.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface--primary:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-ripple-surface--primary:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface--primary:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-ripple-surface--primary.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-ripple-surface--primary--activated::before{opacity:0.12;opacity:var(--mdc-ripple-activated-opacity, 0.12)}.mdc-ripple-surface--primary--activated::before,.mdc-ripple-surface--primary--activated::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}.mdc-ripple-surface--primary--activated:hover::before,.mdc-ripple-surface--primary--activated.mdc-ripple-surface--hover::before{opacity:0.16;opacity:var(--mdc-ripple-hover-opacity, 0.16)}.mdc-ripple-surface--primary--activated.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface--primary--activated:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-focus-opacity, 0.24)}.mdc-ripple-surface--primary--activated:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface--primary--activated:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-ripple-surface--primary--activated.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-ripple-surface--primary--selected::before{opacity:0.08;opacity:var(--mdc-ripple-selected-opacity, 0.08)}.mdc-ripple-surface--primary--selected::before,.mdc-ripple-surface--primary--selected::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}.mdc-ripple-surface--primary--selected:hover::before,.mdc-ripple-surface--primary--selected.mdc-ripple-surface--hover::before{opacity:0.12;opacity:var(--mdc-ripple-hover-opacity, 0.12)}.mdc-ripple-surface--primary--selected.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface--primary--selected:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.2;opacity:var(--mdc-ripple-focus-opacity, 0.2)}.mdc-ripple-surface--primary--selected:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface--primary--selected:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.2;opacity:var(--mdc-ripple-press-opacity, 0.2)}.mdc-ripple-surface--primary--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.2)}.mdc-ripple-surface--accent::before,.mdc-ripple-surface--accent::after{background-color:#018786;background-color:var(--mdc-ripple-color, var(--mdc-theme-secondary, #018786))}.mdc-ripple-surface--accent:hover::before,.mdc-ripple-surface--accent.mdc-ripple-surface--hover::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-ripple-surface--accent.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface--accent:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-ripple-surface--accent:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface--accent:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-ripple-surface--accent.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-ripple-surface--accent--activated::before{opacity:0.12;opacity:var(--mdc-ripple-activated-opacity, 0.12)}.mdc-ripple-surface--accent--activated::before,.mdc-ripple-surface--accent--activated::after{background-color:#018786;background-color:var(--mdc-ripple-color, var(--mdc-theme-secondary, #018786))}.mdc-ripple-surface--accent--activated:hover::before,.mdc-ripple-surface--accent--activated.mdc-ripple-surface--hover::before{opacity:0.16;opacity:var(--mdc-ripple-hover-opacity, 0.16)}.mdc-ripple-surface--accent--activated.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface--accent--activated:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-focus-opacity, 0.24)}.mdc-ripple-surface--accent--activated:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface--accent--activated:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-ripple-surface--accent--activated.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-ripple-surface--accent--selected::before{opacity:0.08;opacity:var(--mdc-ripple-selected-opacity, 0.08)}.mdc-ripple-surface--accent--selected::before,.mdc-ripple-surface--accent--selected::after{background-color:#018786;background-color:var(--mdc-ripple-color, var(--mdc-theme-secondary, #018786))}.mdc-ripple-surface--accent--selected:hover::before,.mdc-ripple-surface--accent--selected.mdc-ripple-surface--hover::before{opacity:0.12;opacity:var(--mdc-ripple-hover-opacity, 0.12)}.mdc-ripple-surface--accent--selected.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface--accent--selected:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.2;opacity:var(--mdc-ripple-focus-opacity, 0.2)}.mdc-ripple-surface--accent--selected:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface--accent--selected:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.2;opacity:var(--mdc-ripple-press-opacity, 0.2)}.mdc-ripple-surface--accent--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.2)}.mdc-ripple-surface--disabled{opacity:0}.mdc-ripple-surface--internal-use-state-layer-custom-properties::before,.mdc-ripple-surface--internal-use-state-layer-custom-properties::after{background-color:#000;background-color:var(--mdc-ripple-hover-state-layer-color, #000)}.mdc-ripple-surface--internal-use-state-layer-custom-properties:hover::before,.mdc-ripple-surface--internal-use-state-layer-custom-properties.mdc-ripple-surface--hover::before{opacity:0.04;opacity:var(--mdc-ripple-hover-state-layer-opacity, 0.04)}.mdc-ripple-surface--internal-use-state-layer-custom-properties.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface--internal-use-state-layer-custom-properties:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-state-layer-opacity, 0.12)}.mdc-ripple-surface--internal-use-state-layer-custom-properties:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface--internal-use-state-layer-custom-properties:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-pressed-state-layer-opacity, 0.12)}.mdc-ripple-surface--internal-use-state-layer-custom-properties.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-pressed-state-layer-opacity, 0.12)}`; +//# sourceMappingURL=mwc-ripple.css.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-ripple/mwc-ripple.js": +/*!*********************************************************!*\ + !*** ./node_modules/@material/mwc-ripple/mwc-ripple.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Ripple: () => (/* binding */ Ripple) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var _mwc_ripple_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mwc-ripple-base */ "./node_modules/@material/mwc-ripple/mwc-ripple-base.js"); +/* harmony import */ var _mwc_ripple_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mwc-ripple.css */ "./node_modules/@material/mwc-ripple/mwc-ripple.css.js"); +/** + * @license + * Copyright 2018 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + +/** @soyCompatible */ +let Ripple = class Ripple extends _mwc_ripple_base__WEBPACK_IMPORTED_MODULE_1__.RippleBase { +}; +Ripple.styles = [_mwc_ripple_css__WEBPACK_IMPORTED_MODULE_2__.styles]; +Ripple = (0,tslib__WEBPACK_IMPORTED_MODULE_3__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__.customElement)('mwc-ripple') +], Ripple); + +//# sourceMappingURL=mwc-ripple.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-ripple/ripple-handlers.js": +/*!**************************************************************!*\ + !*** ./node_modules/@material/mwc-ripple/ripple-handlers.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ RippleHandlers: () => (/* binding */ RippleHandlers) +/* harmony export */ }); +/** + * @license + * Copyright 2020 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ +/** + * Class that encapsulates the events handlers for `mwc-ripple` + * + * + * Example: + * ``` + * class XFoo extends LitElement { + * async getRipple() { + * this.renderRipple = true; + * await this.updateComplete; + * return this.renderRoot.querySelector('mwc-ripple'); + * } + * rippleHandlers = new RippleHandlers(() => this.getRipple()); + * + * render() { + * return html` + *
+ * ${this.renderRipple ? html`` : ''} + * `; + * } + * } + * ``` + */ +class RippleHandlers { + constructor( + /** Function that returns a `mwc-ripple` */ + rippleFn) { + this.startPress = (ev) => { + rippleFn().then((r) => { + r && r.startPress(ev); + }); + }; + this.endPress = () => { + rippleFn().then((r) => { + r && r.endPress(); + }); + }; + this.startFocus = () => { + rippleFn().then((r) => { + r && r.startFocus(); + }); + }; + this.endFocus = () => { + rippleFn().then((r) => { + r && r.endFocus(); + }); + }; + this.startHover = () => { + rippleFn().then((r) => { + r && r.startHover(); + }); + }; + this.endHover = () => { + rippleFn().then((r) => { + r && r.endHover(); + }); + }; + } +} +//# sourceMappingURL=ripple-handlers.js.map + +/***/ }), + +/***/ "./node_modules/@material/ripple/constants.js": +/*!****************************************************!*\ + !*** ./node_modules/@material/ripple/constants.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ cssClasses: () => (/* binding */ cssClasses), +/* harmony export */ numbers: () => (/* binding */ numbers), +/* harmony export */ strings: () => (/* binding */ strings) +/* harmony export */ }); +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var cssClasses = { + // Ripple is a special case where the "root" component is really a "mixin" of sorts, + // given that it's an 'upgrade' to an existing component. That being said it is the root + // CSS class that all other CSS classes derive from. + BG_FOCUSED: 'mdc-ripple-upgraded--background-focused', + FG_ACTIVATION: 'mdc-ripple-upgraded--foreground-activation', + FG_DEACTIVATION: 'mdc-ripple-upgraded--foreground-deactivation', + ROOT: 'mdc-ripple-upgraded', + UNBOUNDED: 'mdc-ripple-upgraded--unbounded', +}; +var strings = { + VAR_FG_SCALE: '--mdc-ripple-fg-scale', + VAR_FG_SIZE: '--mdc-ripple-fg-size', + VAR_FG_TRANSLATE_END: '--mdc-ripple-fg-translate-end', + VAR_FG_TRANSLATE_START: '--mdc-ripple-fg-translate-start', + VAR_LEFT: '--mdc-ripple-left', + VAR_TOP: '--mdc-ripple-top', +}; +var numbers = { + DEACTIVATION_TIMEOUT_MS: 225, + FG_DEACTIVATION_MS: 150, + INITIAL_ORIGIN_SCALE: 0.6, + PADDING: 10, + TAP_DELAY_MS: 300, // Delay between touch and simulated mouse events on touch devices +}; +//# sourceMappingURL=constants.js.map + +/***/ }), + +/***/ "./node_modules/@material/ripple/foundation.js": +/*!*****************************************************!*\ + !*** ./node_modules/@material/ripple/foundation.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MDCRippleFoundation: () => (/* binding */ MDCRippleFoundation), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var _material_base_foundation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @material/base/foundation */ "./node_modules/@material/base/foundation.js"); +/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constants */ "./node_modules/@material/ripple/constants.js"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./node_modules/@material/ripple/util.js"); +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + +// Activation events registered on the root element of each instance for activation +var ACTIVATION_EVENT_TYPES = [ + 'touchstart', 'pointerdown', 'mousedown', 'keydown', +]; +// Deactivation events registered on documentElement when a pointer-related down event occurs +var POINTER_DEACTIVATION_EVENT_TYPES = [ + 'touchend', 'pointerup', 'mouseup', 'contextmenu', +]; +// simultaneous nested activations +var activatedTargets = []; +var MDCRippleFoundation = /** @class */ (function (_super) { + (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__extends)(MDCRippleFoundation, _super); + function MDCRippleFoundation(adapter) { + var _this = _super.call(this, (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)((0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)({}, MDCRippleFoundation.defaultAdapter), adapter)) || this; + _this.activationAnimationHasEnded = false; + _this.activationTimer = 0; + _this.fgDeactivationRemovalTimer = 0; + _this.fgScale = '0'; + _this.frame = { width: 0, height: 0 }; + _this.initialSize = 0; + _this.layoutFrame = 0; + _this.maxRadius = 0; + _this.unboundedCoords = { left: 0, top: 0 }; + _this.activationState = _this.defaultActivationState(); + _this.activationTimerCallback = function () { + _this.activationAnimationHasEnded = true; + _this.runDeactivationUXLogicIfReady(); + }; + _this.activateHandler = function (e) { + _this.activateImpl(e); + }; + _this.deactivateHandler = function () { + _this.deactivateImpl(); + }; + _this.focusHandler = function () { + _this.handleFocus(); + }; + _this.blurHandler = function () { + _this.handleBlur(); + }; + _this.resizeHandler = function () { + _this.layout(); + }; + return _this; + } + Object.defineProperty(MDCRippleFoundation, "cssClasses", { + get: function () { + return _constants__WEBPACK_IMPORTED_MODULE_1__.cssClasses; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCRippleFoundation, "strings", { + get: function () { + return _constants__WEBPACK_IMPORTED_MODULE_1__.strings; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCRippleFoundation, "numbers", { + get: function () { + return _constants__WEBPACK_IMPORTED_MODULE_1__.numbers; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCRippleFoundation, "defaultAdapter", { + get: function () { + return { + addClass: function () { return undefined; }, + browserSupportsCssVars: function () { return true; }, + computeBoundingRect: function () { + return ({ top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0 }); + }, + containsEventTarget: function () { return true; }, + deregisterDocumentInteractionHandler: function () { return undefined; }, + deregisterInteractionHandler: function () { return undefined; }, + deregisterResizeHandler: function () { return undefined; }, + getWindowPageOffset: function () { return ({ x: 0, y: 0 }); }, + isSurfaceActive: function () { return true; }, + isSurfaceDisabled: function () { return true; }, + isUnbounded: function () { return true; }, + registerDocumentInteractionHandler: function () { return undefined; }, + registerInteractionHandler: function () { return undefined; }, + registerResizeHandler: function () { return undefined; }, + removeClass: function () { return undefined; }, + updateCssVariable: function () { return undefined; }, + }; + }, + enumerable: false, + configurable: true + }); + MDCRippleFoundation.prototype.init = function () { + var _this = this; + var supportsPressRipple = this.supportsPressRipple(); + this.registerRootHandlers(supportsPressRipple); + if (supportsPressRipple) { + var _a = MDCRippleFoundation.cssClasses, ROOT_1 = _a.ROOT, UNBOUNDED_1 = _a.UNBOUNDED; + requestAnimationFrame(function () { + _this.adapter.addClass(ROOT_1); + if (_this.adapter.isUnbounded()) { + _this.adapter.addClass(UNBOUNDED_1); + // Unbounded ripples need layout logic applied immediately to set coordinates for both shade and ripple + _this.layoutInternal(); + } + }); + } + }; + MDCRippleFoundation.prototype.destroy = function () { + var _this = this; + if (this.supportsPressRipple()) { + if (this.activationTimer) { + clearTimeout(this.activationTimer); + this.activationTimer = 0; + this.adapter.removeClass(MDCRippleFoundation.cssClasses.FG_ACTIVATION); + } + if (this.fgDeactivationRemovalTimer) { + clearTimeout(this.fgDeactivationRemovalTimer); + this.fgDeactivationRemovalTimer = 0; + this.adapter.removeClass(MDCRippleFoundation.cssClasses.FG_DEACTIVATION); + } + var _a = MDCRippleFoundation.cssClasses, ROOT_2 = _a.ROOT, UNBOUNDED_2 = _a.UNBOUNDED; + requestAnimationFrame(function () { + _this.adapter.removeClass(ROOT_2); + _this.adapter.removeClass(UNBOUNDED_2); + _this.removeCssVars(); + }); + } + this.deregisterRootHandlers(); + this.deregisterDeactivationHandlers(); + }; + /** + * @param evt Optional event containing position information. + */ + MDCRippleFoundation.prototype.activate = function (evt) { + this.activateImpl(evt); + }; + MDCRippleFoundation.prototype.deactivate = function () { + this.deactivateImpl(); + }; + MDCRippleFoundation.prototype.layout = function () { + var _this = this; + if (this.layoutFrame) { + cancelAnimationFrame(this.layoutFrame); + } + this.layoutFrame = requestAnimationFrame(function () { + _this.layoutInternal(); + _this.layoutFrame = 0; + }); + }; + MDCRippleFoundation.prototype.setUnbounded = function (unbounded) { + var UNBOUNDED = MDCRippleFoundation.cssClasses.UNBOUNDED; + if (unbounded) { + this.adapter.addClass(UNBOUNDED); + } + else { + this.adapter.removeClass(UNBOUNDED); + } + }; + MDCRippleFoundation.prototype.handleFocus = function () { + var _this = this; + requestAnimationFrame(function () { return _this.adapter.addClass(MDCRippleFoundation.cssClasses.BG_FOCUSED); }); + }; + MDCRippleFoundation.prototype.handleBlur = function () { + var _this = this; + requestAnimationFrame(function () { return _this.adapter.removeClass(MDCRippleFoundation.cssClasses.BG_FOCUSED); }); + }; + /** + * We compute this property so that we are not querying information about the client + * until the point in time where the foundation requests it. This prevents scenarios where + * client-side feature-detection may happen too early, such as when components are rendered on the server + * and then initialized at mount time on the client. + */ + MDCRippleFoundation.prototype.supportsPressRipple = function () { + return this.adapter.browserSupportsCssVars(); + }; + MDCRippleFoundation.prototype.defaultActivationState = function () { + return { + activationEvent: undefined, + hasDeactivationUXRun: false, + isActivated: false, + isProgrammatic: false, + wasActivatedByPointer: false, + wasElementMadeActive: false, + }; + }; + /** + * supportsPressRipple Passed from init to save a redundant function call + */ + MDCRippleFoundation.prototype.registerRootHandlers = function (supportsPressRipple) { + var e_1, _a; + if (supportsPressRipple) { + try { + for (var ACTIVATION_EVENT_TYPES_1 = (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__values)(ACTIVATION_EVENT_TYPES), ACTIVATION_EVENT_TYPES_1_1 = ACTIVATION_EVENT_TYPES_1.next(); !ACTIVATION_EVENT_TYPES_1_1.done; ACTIVATION_EVENT_TYPES_1_1 = ACTIVATION_EVENT_TYPES_1.next()) { + var evtType = ACTIVATION_EVENT_TYPES_1_1.value; + this.adapter.registerInteractionHandler(evtType, this.activateHandler); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (ACTIVATION_EVENT_TYPES_1_1 && !ACTIVATION_EVENT_TYPES_1_1.done && (_a = ACTIVATION_EVENT_TYPES_1.return)) _a.call(ACTIVATION_EVENT_TYPES_1); + } + finally { if (e_1) throw e_1.error; } + } + if (this.adapter.isUnbounded()) { + this.adapter.registerResizeHandler(this.resizeHandler); + } + } + this.adapter.registerInteractionHandler('focus', this.focusHandler); + this.adapter.registerInteractionHandler('blur', this.blurHandler); + }; + MDCRippleFoundation.prototype.registerDeactivationHandlers = function (evt) { + var e_2, _a; + if (evt.type === 'keydown') { + this.adapter.registerInteractionHandler('keyup', this.deactivateHandler); + } + else { + try { + for (var POINTER_DEACTIVATION_EVENT_TYPES_1 = (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__values)(POINTER_DEACTIVATION_EVENT_TYPES), POINTER_DEACTIVATION_EVENT_TYPES_1_1 = POINTER_DEACTIVATION_EVENT_TYPES_1.next(); !POINTER_DEACTIVATION_EVENT_TYPES_1_1.done; POINTER_DEACTIVATION_EVENT_TYPES_1_1 = POINTER_DEACTIVATION_EVENT_TYPES_1.next()) { + var evtType = POINTER_DEACTIVATION_EVENT_TYPES_1_1.value; + this.adapter.registerDocumentInteractionHandler(evtType, this.deactivateHandler); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (POINTER_DEACTIVATION_EVENT_TYPES_1_1 && !POINTER_DEACTIVATION_EVENT_TYPES_1_1.done && (_a = POINTER_DEACTIVATION_EVENT_TYPES_1.return)) _a.call(POINTER_DEACTIVATION_EVENT_TYPES_1); + } + finally { if (e_2) throw e_2.error; } + } + } + }; + MDCRippleFoundation.prototype.deregisterRootHandlers = function () { + var e_3, _a; + try { + for (var ACTIVATION_EVENT_TYPES_2 = (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__values)(ACTIVATION_EVENT_TYPES), ACTIVATION_EVENT_TYPES_2_1 = ACTIVATION_EVENT_TYPES_2.next(); !ACTIVATION_EVENT_TYPES_2_1.done; ACTIVATION_EVENT_TYPES_2_1 = ACTIVATION_EVENT_TYPES_2.next()) { + var evtType = ACTIVATION_EVENT_TYPES_2_1.value; + this.adapter.deregisterInteractionHandler(evtType, this.activateHandler); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (ACTIVATION_EVENT_TYPES_2_1 && !ACTIVATION_EVENT_TYPES_2_1.done && (_a = ACTIVATION_EVENT_TYPES_2.return)) _a.call(ACTIVATION_EVENT_TYPES_2); + } + finally { if (e_3) throw e_3.error; } + } + this.adapter.deregisterInteractionHandler('focus', this.focusHandler); + this.adapter.deregisterInteractionHandler('blur', this.blurHandler); + if (this.adapter.isUnbounded()) { + this.adapter.deregisterResizeHandler(this.resizeHandler); + } + }; + MDCRippleFoundation.prototype.deregisterDeactivationHandlers = function () { + var e_4, _a; + this.adapter.deregisterInteractionHandler('keyup', this.deactivateHandler); + try { + for (var POINTER_DEACTIVATION_EVENT_TYPES_2 = (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__values)(POINTER_DEACTIVATION_EVENT_TYPES), POINTER_DEACTIVATION_EVENT_TYPES_2_1 = POINTER_DEACTIVATION_EVENT_TYPES_2.next(); !POINTER_DEACTIVATION_EVENT_TYPES_2_1.done; POINTER_DEACTIVATION_EVENT_TYPES_2_1 = POINTER_DEACTIVATION_EVENT_TYPES_2.next()) { + var evtType = POINTER_DEACTIVATION_EVENT_TYPES_2_1.value; + this.adapter.deregisterDocumentInteractionHandler(evtType, this.deactivateHandler); + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (POINTER_DEACTIVATION_EVENT_TYPES_2_1 && !POINTER_DEACTIVATION_EVENT_TYPES_2_1.done && (_a = POINTER_DEACTIVATION_EVENT_TYPES_2.return)) _a.call(POINTER_DEACTIVATION_EVENT_TYPES_2); + } + finally { if (e_4) throw e_4.error; } + } + }; + MDCRippleFoundation.prototype.removeCssVars = function () { + var _this = this; + var rippleStrings = MDCRippleFoundation.strings; + var keys = Object.keys(rippleStrings); + keys.forEach(function (key) { + if (key.indexOf('VAR_') === 0) { + _this.adapter.updateCssVariable(rippleStrings[key], null); + } + }); + }; + MDCRippleFoundation.prototype.activateImpl = function (evt) { + var _this = this; + if (this.adapter.isSurfaceDisabled()) { + return; + } + var activationState = this.activationState; + if (activationState.isActivated) { + return; + } + // Avoid reacting to follow-on events fired by touch device after an already-processed user interaction + var previousActivationEvent = this.previousActivationEvent; + var isSameInteraction = previousActivationEvent && evt !== undefined && previousActivationEvent.type !== evt.type; + if (isSameInteraction) { + return; + } + activationState.isActivated = true; + activationState.isProgrammatic = evt === undefined; + activationState.activationEvent = evt; + activationState.wasActivatedByPointer = activationState.isProgrammatic ? false : evt !== undefined && (evt.type === 'mousedown' || evt.type === 'touchstart' || evt.type === 'pointerdown'); + var hasActivatedChild = evt !== undefined && + activatedTargets.length > 0 && + activatedTargets.some(function (target) { return _this.adapter.containsEventTarget(target); }); + if (hasActivatedChild) { + // Immediately reset activation state, while preserving logic that prevents touch follow-on events + this.resetActivationState(); + return; + } + if (evt !== undefined) { + activatedTargets.push(evt.target); + this.registerDeactivationHandlers(evt); + } + activationState.wasElementMadeActive = this.checkElementMadeActive(evt); + if (activationState.wasElementMadeActive) { + this.animateActivation(); + } + requestAnimationFrame(function () { + // Reset array on next frame after the current event has had a chance to bubble to prevent ancestor ripples + activatedTargets = []; + if (!activationState.wasElementMadeActive + && evt !== undefined + && (evt.key === ' ' || evt.keyCode === 32)) { + // If space was pressed, try again within an rAF call to detect :active, because different UAs report + // active states inconsistently when they're called within event handling code: + // - https://bugs.chromium.org/p/chromium/issues/detail?id=635971 + // - https://bugzilla.mozilla.org/show_bug.cgi?id=1293741 + // We try first outside rAF to support Edge, which does not exhibit this problem, but will crash if a CSS + // variable is set within a rAF callback for a submit button interaction (#2241). + activationState.wasElementMadeActive = _this.checkElementMadeActive(evt); + if (activationState.wasElementMadeActive) { + _this.animateActivation(); + } + } + if (!activationState.wasElementMadeActive) { + // Reset activation state immediately if element was not made active. + _this.activationState = _this.defaultActivationState(); + } + }); + }; + MDCRippleFoundation.prototype.checkElementMadeActive = function (evt) { + return (evt !== undefined && evt.type === 'keydown') ? + this.adapter.isSurfaceActive() : + true; + }; + MDCRippleFoundation.prototype.animateActivation = function () { + var _this = this; + var _a = MDCRippleFoundation.strings, VAR_FG_TRANSLATE_START = _a.VAR_FG_TRANSLATE_START, VAR_FG_TRANSLATE_END = _a.VAR_FG_TRANSLATE_END; + var _b = MDCRippleFoundation.cssClasses, FG_DEACTIVATION = _b.FG_DEACTIVATION, FG_ACTIVATION = _b.FG_ACTIVATION; + var DEACTIVATION_TIMEOUT_MS = MDCRippleFoundation.numbers.DEACTIVATION_TIMEOUT_MS; + this.layoutInternal(); + var translateStart = ''; + var translateEnd = ''; + if (!this.adapter.isUnbounded()) { + var _c = this.getFgTranslationCoordinates(), startPoint = _c.startPoint, endPoint = _c.endPoint; + translateStart = startPoint.x + "px, " + startPoint.y + "px"; + translateEnd = endPoint.x + "px, " + endPoint.y + "px"; + } + this.adapter.updateCssVariable(VAR_FG_TRANSLATE_START, translateStart); + this.adapter.updateCssVariable(VAR_FG_TRANSLATE_END, translateEnd); + // Cancel any ongoing activation/deactivation animations + clearTimeout(this.activationTimer); + clearTimeout(this.fgDeactivationRemovalTimer); + this.rmBoundedActivationClasses(); + this.adapter.removeClass(FG_DEACTIVATION); + // Force layout in order to re-trigger the animation. + this.adapter.computeBoundingRect(); + this.adapter.addClass(FG_ACTIVATION); + this.activationTimer = setTimeout(function () { + _this.activationTimerCallback(); + }, DEACTIVATION_TIMEOUT_MS); + }; + MDCRippleFoundation.prototype.getFgTranslationCoordinates = function () { + var _a = this.activationState, activationEvent = _a.activationEvent, wasActivatedByPointer = _a.wasActivatedByPointer; + var startPoint; + if (wasActivatedByPointer) { + startPoint = (0,_util__WEBPACK_IMPORTED_MODULE_2__.getNormalizedEventCoords)(activationEvent, this.adapter.getWindowPageOffset(), this.adapter.computeBoundingRect()); + } + else { + startPoint = { + x: this.frame.width / 2, + y: this.frame.height / 2, + }; + } + // Center the element around the start point. + startPoint = { + x: startPoint.x - (this.initialSize / 2), + y: startPoint.y - (this.initialSize / 2), + }; + var endPoint = { + x: (this.frame.width / 2) - (this.initialSize / 2), + y: (this.frame.height / 2) - (this.initialSize / 2), + }; + return { startPoint: startPoint, endPoint: endPoint }; + }; + MDCRippleFoundation.prototype.runDeactivationUXLogicIfReady = function () { + var _this = this; + // This method is called both when a pointing device is released, and when the activation animation ends. + // The deactivation animation should only run after both of those occur. + var FG_DEACTIVATION = MDCRippleFoundation.cssClasses.FG_DEACTIVATION; + var _a = this.activationState, hasDeactivationUXRun = _a.hasDeactivationUXRun, isActivated = _a.isActivated; + var activationHasEnded = hasDeactivationUXRun || !isActivated; + if (activationHasEnded && this.activationAnimationHasEnded) { + this.rmBoundedActivationClasses(); + this.adapter.addClass(FG_DEACTIVATION); + this.fgDeactivationRemovalTimer = setTimeout(function () { + _this.adapter.removeClass(FG_DEACTIVATION); + }, _constants__WEBPACK_IMPORTED_MODULE_1__.numbers.FG_DEACTIVATION_MS); + } + }; + MDCRippleFoundation.prototype.rmBoundedActivationClasses = function () { + var FG_ACTIVATION = MDCRippleFoundation.cssClasses.FG_ACTIVATION; + this.adapter.removeClass(FG_ACTIVATION); + this.activationAnimationHasEnded = false; + this.adapter.computeBoundingRect(); + }; + MDCRippleFoundation.prototype.resetActivationState = function () { + var _this = this; + this.previousActivationEvent = this.activationState.activationEvent; + this.activationState = this.defaultActivationState(); + // Touch devices may fire additional events for the same interaction within a short time. + // Store the previous event until it's safe to assume that subsequent events are for new interactions. + setTimeout(function () { return _this.previousActivationEvent = undefined; }, MDCRippleFoundation.numbers.TAP_DELAY_MS); + }; + MDCRippleFoundation.prototype.deactivateImpl = function () { + var _this = this; + var activationState = this.activationState; + // This can happen in scenarios such as when you have a keyup event that blurs the element. + if (!activationState.isActivated) { + return; + } + var state = (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)({}, activationState); + if (activationState.isProgrammatic) { + requestAnimationFrame(function () { + _this.animateDeactivation(state); + }); + this.resetActivationState(); + } + else { + this.deregisterDeactivationHandlers(); + requestAnimationFrame(function () { + _this.activationState.hasDeactivationUXRun = true; + _this.animateDeactivation(state); + _this.resetActivationState(); + }); + } + }; + MDCRippleFoundation.prototype.animateDeactivation = function (_a) { + var wasActivatedByPointer = _a.wasActivatedByPointer, wasElementMadeActive = _a.wasElementMadeActive; + if (wasActivatedByPointer || wasElementMadeActive) { + this.runDeactivationUXLogicIfReady(); + } + }; + MDCRippleFoundation.prototype.layoutInternal = function () { + var _this = this; + this.frame = this.adapter.computeBoundingRect(); + var maxDim = Math.max(this.frame.height, this.frame.width); + // Surface diameter is treated differently for unbounded vs. bounded ripples. + // Unbounded ripple diameter is calculated smaller since the surface is expected to already be padded appropriately + // to extend the hitbox, and the ripple is expected to meet the edges of the padded hitbox (which is typically + // square). Bounded ripples, on the other hand, are fully expected to expand beyond the surface's longest diameter + // (calculated based on the diagonal plus a constant padding), and are clipped at the surface's border via + // `overflow: hidden`. + var getBoundedRadius = function () { + var hypotenuse = Math.sqrt(Math.pow(_this.frame.width, 2) + Math.pow(_this.frame.height, 2)); + return hypotenuse + MDCRippleFoundation.numbers.PADDING; + }; + this.maxRadius = this.adapter.isUnbounded() ? maxDim : getBoundedRadius(); + // Ripple is sized as a fraction of the largest dimension of the surface, then scales up using a CSS scale transform + var initialSize = Math.floor(maxDim * MDCRippleFoundation.numbers.INITIAL_ORIGIN_SCALE); + // Unbounded ripple size should always be even number to equally center align. + if (this.adapter.isUnbounded() && initialSize % 2 !== 0) { + this.initialSize = initialSize - 1; + } + else { + this.initialSize = initialSize; + } + this.fgScale = "" + this.maxRadius / this.initialSize; + this.updateLayoutCssVars(); + }; + MDCRippleFoundation.prototype.updateLayoutCssVars = function () { + var _a = MDCRippleFoundation.strings, VAR_FG_SIZE = _a.VAR_FG_SIZE, VAR_LEFT = _a.VAR_LEFT, VAR_TOP = _a.VAR_TOP, VAR_FG_SCALE = _a.VAR_FG_SCALE; + this.adapter.updateCssVariable(VAR_FG_SIZE, this.initialSize + "px"); + this.adapter.updateCssVariable(VAR_FG_SCALE, this.fgScale); + if (this.adapter.isUnbounded()) { + this.unboundedCoords = { + left: Math.round((this.frame.width / 2) - (this.initialSize / 2)), + top: Math.round((this.frame.height / 2) - (this.initialSize / 2)), + }; + this.adapter.updateCssVariable(VAR_LEFT, this.unboundedCoords.left + "px"); + this.adapter.updateCssVariable(VAR_TOP, this.unboundedCoords.top + "px"); + } + }; + return MDCRippleFoundation; +}(_material_base_foundation__WEBPACK_IMPORTED_MODULE_3__.MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MDCRippleFoundation); +//# sourceMappingURL=foundation.js.map + +/***/ }), + +/***/ "./node_modules/@material/ripple/util.js": +/*!***********************************************!*\ + !*** ./node_modules/@material/ripple/util.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ getNormalizedEventCoords: () => (/* binding */ getNormalizedEventCoords), +/* harmony export */ supportsCssVariables: () => (/* binding */ supportsCssVariables) +/* harmony export */ }); +/** + * Stores result from supportsCssVariables to avoid redundant processing to + * detect CSS custom variable support. + */ +var supportsCssVariables_; +function supportsCssVariables(windowObj, forceRefresh) { + if (forceRefresh === void 0) { forceRefresh = false; } + var CSS = windowObj.CSS; + var supportsCssVars = supportsCssVariables_; + if (typeof supportsCssVariables_ === 'boolean' && !forceRefresh) { + return supportsCssVariables_; + } + var supportsFunctionPresent = CSS && typeof CSS.supports === 'function'; + if (!supportsFunctionPresent) { + return false; + } + var explicitlySupportsCssVars = CSS.supports('--css-vars', 'yes'); + // See: https://bugs.webkit.org/show_bug.cgi?id=154669 + // See: README section on Safari + var weAreFeatureDetectingSafari10plus = (CSS.supports('(--css-vars: yes)') && + CSS.supports('color', '#00000000')); + supportsCssVars = + explicitlySupportsCssVars || weAreFeatureDetectingSafari10plus; + if (!forceRefresh) { + supportsCssVariables_ = supportsCssVars; + } + return supportsCssVars; +} +function getNormalizedEventCoords(evt, pageOffset, clientRect) { + if (!evt) { + return { x: 0, y: 0 }; + } + var x = pageOffset.x, y = pageOffset.y; + var documentX = x + clientRect.left; + var documentY = y + clientRect.top; + var normalizedX; + var normalizedY; + // Determine touch point relative to the ripple container. + if (evt.type === 'touchstart') { + var touchEvent = evt; + normalizedX = touchEvent.changedTouches[0].pageX - documentX; + normalizedY = touchEvent.changedTouches[0].pageY - documentY; + } + else { + var mouseEvent = evt; + normalizedX = mouseEvent.pageX - documentX; + normalizedY = mouseEvent.pageY - documentY; + } + return { x: normalizedX, y: normalizedY }; +} +//# sourceMappingURL=util.js.map + +/***/ }), + +/***/ "./node_modules/@polymer/app-layout/app-drawer/app-drawer.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@polymer/app-layout/app-drawer/app-drawer.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_flex_layout_iron_flex_layout_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-flex-layout/iron-flex-layout.js */ "./node_modules/@polymer/iron-flex-layout/iron-flex-layout.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/* harmony import */ var _polymer_polymer_lib_utils_render_status_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @polymer/polymer/lib/utils/render-status.js */ "./node_modules/@polymer/polymer/lib/utils/render-status.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + +/** +app-drawer is a navigation drawer that can slide in from the left or right. + +Example: + +Align the drawer at the start, which is left in LTR layouts (default): + +```html + +``` + +Align the drawer at the end: + +```html + +``` + +To make the contents of the drawer scrollable, create a wrapper for the scroll +content, and apply height and overflow styles to it. + +```html + +
+
+``` + +### Styling + +Custom property | Description | Default +---------------------------------|----------------------------------------|-------------------- +`--app-drawer-width` | Width of the drawer | 256px +`--app-drawer-content-container` | Mixin for the drawer content container | {} +`--app-drawer-scrim-background` | Background for the scrim | rgba(0, 0, 0, 0.5) + +**NOTE:** If you use `` with `` and specify a +value for +`--app-drawer-width`, that value must be accessible by both elements. This can +be done by defining the value on the `:host` that contains `` +(or `html` if outside a shadow root): + +```css +:host { + --app-drawer-width: 300px; +} +``` + +@element app-drawer +@demo app-drawer/demo/left-drawer.html Simple Left Drawer +@demo app-drawer/demo/right-drawer.html Right Drawer with Icons +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_2__.Polymer)({ + /** @override */ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_4__.html)` + + +
+ + +
+ +
+`, + + is: 'app-drawer', + + properties: { + /** + * The opened state of the drawer. + */ + opened: + {type: Boolean, value: false, notify: true, reflectToAttribute: true}, + + /** + * The drawer does not have a scrim and cannot be swiped close. + */ + persistent: {type: Boolean, value: false, reflectToAttribute: true}, + + /** + * The transition duration of the drawer in milliseconds. + */ + transitionDuration: {type: Number, value: 200}, + + /** + * The alignment of the drawer on the screen ('left', 'right', 'start' or + * 'end'). 'start' computes to left and 'end' to right in LTR layout and + * vice versa in RTL layout. + */ + align: {type: String, value: 'left'}, + + /** + * The computed, read-only position of the drawer on the screen ('left' or + * 'right'). + */ + position: {type: String, readOnly: true, reflectToAttribute: true}, + + /** + * Create an area at the edge of the screen to swipe open the drawer. + */ + swipeOpen: {type: Boolean, value: false, reflectToAttribute: true}, + + /** + * Trap keyboard focus when the drawer is opened and not persistent. + */ + noFocusTrap: {type: Boolean, value: false}, + + /** + * Disables swiping on the drawer. + */ + disableSwipe: {type: Boolean, value: false} + }, + + observers: [ + 'resetLayout(position, isAttached)', + '_resetPosition(align, isAttached)', + '_styleTransitionDuration(transitionDuration)', + '_openedPersistentChanged(opened, persistent)' + ], + + _translateOffset: 0, + _trackDetails: null, + _drawerState: 0, + _boundEscKeydownHandler: null, + _firstTabStop: null, + _lastTabStop: null, + + /** @override */ + attached: function() { + (0,_polymer_polymer_lib_utils_render_status_js__WEBPACK_IMPORTED_MODULE_5__.afterNextRender)(this, function() { + this._boundEscKeydownHandler = this._escKeydownHandler.bind(this); + this.addEventListener('keydown', this._tabKeydownHandler.bind(this)); + + // Only listen for horizontal track so you can vertically scroll + // inside the drawer. + this.listen(this, 'track', '_track'); + this.setScrollDirection('y'); + }); + + this.fire('app-reset-layout'); + }, + + /** @override */ + detached: function() { + document.removeEventListener('keydown', this._boundEscKeydownHandler); + }, + + /** + * Opens the drawer. + */ + open: function() { + this.opened = true; + }, + + /** + * Closes the drawer. + */ + close: function() { + this.opened = false; + }, + + /** + * Toggles the drawer open and close. + */ + toggle: function() { + this.opened = !this.opened; + }, + + /** + * Gets the width of the drawer. + * + * @return {number} The width of the drawer in pixels. + */ + getWidth: function() { + return this._savedWidth || this.$.contentContainer.offsetWidth; + }, + + _isRTL: function() { + return window.getComputedStyle(this).direction === 'rtl'; + }, + + _resetPosition: function() { + switch (this.align) { + case 'start': + this._setPosition(this._isRTL() ? 'right' : 'left'); + return; + case 'end': + this._setPosition(this._isRTL() ? 'left' : 'right'); + return; + } + this._setPosition(this.align); + }, + + _escKeydownHandler: function(event) { + var ESC_KEYCODE = 27; + if (event.keyCode === ESC_KEYCODE) { + // Prevent any side effects if app-drawer closes. + event.preventDefault(); + this.close(); + } + }, + + _track: function(event) { + if (this.persistent || this.disableSwipe) { + return; + } + + // Disable user selection on desktop. + event.preventDefault(); + + switch (event.detail.state) { + case 'start': + this._trackStart(event); + break; + case 'track': + this._trackMove(event); + break; + case 'end': + this._trackEnd(event); + break; + } + }, + + _trackStart: function(event) { + this._drawerState = this._DRAWER_STATE.TRACKING; + + var rect = this.$.contentContainer.getBoundingClientRect(); + this._savedWidth = rect.width; + if (this.position === 'left') { + this._translateOffset = rect.left; + } else { + this._translateOffset = rect.right - window.innerWidth; + } + + this._trackDetails = []; + + // Disable transitions since style attributes will reflect user track + // events. + this._styleTransitionDuration(0); + this.style.visibility = 'visible'; + }, + + _trackMove: function(event) { + this._translateDrawer(event.detail.dx + this._translateOffset); + + // Use Date.now() since event.timeStamp is inconsistent across browsers + // (e.g. most browsers use milliseconds but FF 44 uses microseconds). + this._trackDetails.push({dx: event.detail.dx, timeStamp: Date.now()}); + }, + + _trackEnd: function(event) { + var x = event.detail.dx + this._translateOffset; + var drawerWidth = this.getWidth(); + var isPositionLeft = this.position === 'left'; + var isInEndState = isPositionLeft ? (x >= 0 || x <= -drawerWidth) : + (x <= 0 || x >= drawerWidth); + + if (!isInEndState) { + // No longer need the track events after this method returns - allow them + // to be GC'd. + var trackDetails = this._trackDetails; + this._trackDetails = null; + + this._flingDrawer(event, trackDetails); + if (this._drawerState === this._DRAWER_STATE.FLINGING) { + return; + } + } + + // If the drawer is not flinging, toggle the opened state based on the + // position of the drawer. + var halfWidth = drawerWidth / 2; + if (event.detail.dx < -halfWidth) { + this.opened = this.position === 'right'; + } else if (event.detail.dx > halfWidth) { + this.opened = this.position === 'left'; + } + + if (isInEndState) { + this.debounce('_resetDrawerState', this._resetDrawerState); + } else { + this.debounce( + '_resetDrawerState', this._resetDrawerState, this.transitionDuration); + } + + this._styleTransitionDuration(this.transitionDuration); + this._resetDrawerTranslate(); + this.style.visibility = ''; + }, + + _calculateVelocity: function(event, trackDetails) { + // Find the oldest track event that is within 100ms using binary search. + var now = Date.now(); + var timeLowerBound = now - 100; + var trackDetail; + var min = 0; + var max = trackDetails.length - 1; + + while (min <= max) { + // Floor of average of min and max. + var mid = (min + max) >> 1; + var d = trackDetails[mid]; + if (d.timeStamp >= timeLowerBound) { + trackDetail = d; + max = mid - 1; + } else { + min = mid + 1; + } + } + + if (trackDetail) { + var dx = event.detail.dx - trackDetail.dx; + var dt = (now - trackDetail.timeStamp) || 1; + return dx / dt; + } + return 0; + }, + + _flingDrawer: function(event, trackDetails) { + var velocity = this._calculateVelocity(event, trackDetails); + + // Do not fling if velocity is not above a threshold. + if (Math.abs(velocity) < this._MIN_FLING_THRESHOLD) { + return; + } + + this._drawerState = this._DRAWER_STATE.FLINGING; + + var x = event.detail.dx + this._translateOffset; + var drawerWidth = this.getWidth(); + var isPositionLeft = this.position === 'left'; + var isVelocityPositive = velocity > 0; + var isClosingLeft = !isVelocityPositive && isPositionLeft; + var isClosingRight = isVelocityPositive && !isPositionLeft; + var dx; + if (isClosingLeft) { + dx = -(x + drawerWidth); + } else if (isClosingRight) { + dx = (drawerWidth - x); + } else { + dx = -x; + } + + // Enforce a minimum transition velocity to make the drawer feel snappy. + if (isVelocityPositive) { + velocity = Math.max(velocity, this._MIN_TRANSITION_VELOCITY); + this.opened = this.position === 'left'; + } else { + velocity = Math.min(velocity, -this._MIN_TRANSITION_VELOCITY); + this.opened = this.position === 'right'; + } + + // Calculate the amount of time needed to finish the transition based on the + // initial slope of the timing function. + var t = this._FLING_INITIAL_SLOPE * dx / velocity; + this._styleTransitionDuration(t); + this._styleTransitionTimingFunction(this._FLING_TIMING_FUNCTION); + + this._resetDrawerTranslate(); + this.debounce('_resetDrawerState', this._resetDrawerState, t); + }, + + _styleTransitionDuration: function(duration) { + this.style.transitionDuration = duration + 'ms'; + this.$.contentContainer.style.transitionDuration = duration + 'ms'; + this.$.scrim.style.transitionDuration = duration + 'ms'; + }, + + _styleTransitionTimingFunction: function(timingFunction) { + this.$.contentContainer.style.transitionTimingFunction = timingFunction; + this.$.scrim.style.transitionTimingFunction = timingFunction; + }, + + _translateDrawer: function(x) { + var drawerWidth = this.getWidth(); + + if (this.position === 'left') { + x = Math.max(-drawerWidth, Math.min(x, 0)); + this.$.scrim.style.opacity = 1 + x / drawerWidth; + } else { + x = Math.max(0, Math.min(x, drawerWidth)); + this.$.scrim.style.opacity = 1 - x / drawerWidth; + } + + this.translate3d(x + 'px', '0', '0', this.$.contentContainer); + }, + + _resetDrawerTranslate: function() { + this.$.scrim.style.opacity = ''; + this.transform('', this.$.contentContainer); + }, + + _resetDrawerState: function() { + var oldState = this._drawerState; + + // If the drawer was flinging, we need to reset the style attributes. + if (oldState === this._DRAWER_STATE.FLINGING) { + this._styleTransitionDuration(this.transitionDuration); + this._styleTransitionTimingFunction(''); + this.style.visibility = ''; + } + + this._savedWidth = null; + + if (this.opened) { + this._drawerState = this.persistent ? + this._DRAWER_STATE.OPENED_PERSISTENT : + this._DRAWER_STATE.OPENED; + } else { + this._drawerState = this._DRAWER_STATE.CLOSED; + } + + if (oldState !== this._drawerState) { + if (this._drawerState === this._DRAWER_STATE.OPENED) { + this._setKeyboardFocusTrap(); + document.addEventListener('keydown', this._boundEscKeydownHandler); + document.body.style.overflow = 'hidden'; + } else { + document.removeEventListener('keydown', this._boundEscKeydownHandler); + document.body.style.overflow = ''; + } + + // Don't fire the event on initial load. + if (oldState !== this._DRAWER_STATE.INIT) { + this.fire('app-drawer-transitioned'); + } + } + }, + + /** + * Resets the layout. + * + * @method resetLayout + */ + resetLayout: function() { + this.fire('app-reset-layout'); + }, + + _setKeyboardFocusTrap: function() { + if (this.noFocusTrap) { + return; + } + + // NOTE: Unless we use /deep/ (which we shouldn't since it's deprecated), + // this will not select focusable elements inside shadow roots. + var focusableElementsSelector = [ + 'a[href]:not([tabindex="-1"])', + 'area[href]:not([tabindex="-1"])', + 'input:not([disabled]):not([tabindex="-1"])', + 'select:not([disabled]):not([tabindex="-1"])', + 'textarea:not([disabled]):not([tabindex="-1"])', + 'button:not([disabled]):not([tabindex="-1"])', + 'iframe:not([tabindex="-1"])', + '[tabindex]:not([tabindex="-1"])', + '[contentEditable=true]:not([tabindex="-1"])' + ].join(','); + var focusableElements = + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this).querySelectorAll(focusableElementsSelector); + + if (focusableElements.length > 0) { + this._firstTabStop = focusableElements[0]; + this._lastTabStop = focusableElements[focusableElements.length - 1]; + } else { + // Reset saved tab stops when there are no focusable elements in the + // drawer. + this._firstTabStop = null; + this._lastTabStop = null; + } + + // Focus on app-drawer if it has non-zero tabindex. Otherwise, focus the + // first focusable element in the drawer, if it exists. Use the tabindex + // attribute since the this.tabIndex property in IE/Edge returns 0 (instead + // of -1) when the attribute is not set. + var tabindex = this.getAttribute('tabindex'); + if (tabindex && parseInt(tabindex, 10) > -1) { + this.focus(); + } else if (this._firstTabStop) { + this._firstTabStop.focus(); + } + }, + + _tabKeydownHandler: function(event) { + if (this.noFocusTrap) { + return; + } + + var TAB_KEYCODE = 9; + if (this._drawerState === this._DRAWER_STATE.OPENED && + event.keyCode === TAB_KEYCODE) { + if (event.shiftKey) { + if (this._firstTabStop && + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(event).localTarget === this._firstTabStop) { + event.preventDefault(); + this._lastTabStop.focus(); + } + } else { + if (this._lastTabStop && (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(event).localTarget === this._lastTabStop) { + event.preventDefault(); + this._firstTabStop.focus(); + } + } + } + }, + + _openedPersistentChanged: function(opened, persistent) { + this.toggleClass('visible', opened && !persistent, this.$.scrim); + + // Use a debounce timer instead of transitionend since transitionend won't + // fire when app-drawer is display: none. + this.debounce( + '_resetDrawerState', this._resetDrawerState, this.transitionDuration); + }, + + _MIN_FLING_THRESHOLD: 0.2, + _MIN_TRANSITION_VELOCITY: 1.2, + _FLING_TIMING_FUNCTION: 'cubic-bezier(0.667, 1, 0.667, 1)', + _FLING_INITIAL_SLOPE: 1.5, + + _DRAWER_STATE: { + INIT: 0, + OPENED: 1, + OPENED_PERSISTENT: 2, + CLOSED: 3, + TRACKING: 4, + FLINGING: 5 + } + + /** + * Fired when the layout of app-drawer has changed. + * + * @event app-reset-layout + */ + + /** + * Fired when app-drawer has finished transitioning. + * + * @event app-drawer-transitioned + */ +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/app-layout/app-header-layout/app-header-layout.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/@polymer/app-layout/app-header-layout/app-header-layout.js ***! + \*********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_flex_layout_iron_flex_layout_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-flex-layout/iron-flex-layout.js */ "./node_modules/@polymer/iron-flex-layout/iron-flex-layout.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/* harmony import */ var _app_layout_behavior_app_layout_behavior_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../app-layout-behavior/app-layout-behavior.js */ "./node_modules/@polymer/app-layout/app-layout-behavior/app-layout-behavior.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + + +/** +app-header-layout is a wrapper element that positions an app-header and other +content. This element uses the document scroll by default, but it can also +define its own scrolling region. + +Using the document scroll: + +```html + + + +
App name
+
+
+
+ main content +
+
+``` + +Using an own scrolling region: + +```html + + + +
App name
+
+
+
+ main content +
+
+``` + +Add the `fullbleed` attribute to app-header-layout to make it fit the size of +its container: + +```html + + ... + +``` + +@element app-header-layout +@demo app-header-layout/demo/simple.html Simple Demo +@demo app-header-layout/demo/scrolling-region.html Scrolling Region +@demo app-header-layout/demo/music.html Music Demo +@demo app-header-layout/demo/footer.html Footer Demo +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_2__.Polymer)({ + /** @override */ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_4__.html)` + + +
+ + +
+ +
+
+`, + + is: 'app-header-layout', + behaviors: [_app_layout_behavior_app_layout_behavior_js__WEBPACK_IMPORTED_MODULE_5__.AppLayoutBehavior], + + properties: { + /** + * If true, the current element will have its own scrolling region. + * Otherwise, it will use the document scroll to control the header. + */ + hasScrollingRegion: {type: Boolean, value: false, reflectToAttribute: true} + }, + + observers: ['resetLayout(isAttached, hasScrollingRegion)'], + + /** + * A reference to the app-header element. + * + * @property header + */ + get header() { + return (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this.$.headerSlot).getDistributedNodes()[0]; + }, + + _updateLayoutStates: function() { + var header = this.header; + if (!this.isAttached || !header) { + return; + } + // Remove the initializing class, which staticly positions the header and + // the content until the height of the header can be read. + this.$.wrapper.classList.remove('initializing'); + // Update scroll target. + header.scrollTarget = this.hasScrollingRegion ? + this.$.contentContainer : + this.ownerDocument.documentElement; + // Get header height here so that style reads are batched together before + // style writes (i.e. getBoundingClientRect() below). + var headerHeight = header.offsetHeight; + // Update the header position. + if (!this.hasScrollingRegion) { + requestAnimationFrame(function() { + var rect = this.getBoundingClientRect(); + var rightOffset = document.documentElement.clientWidth - rect.right; + header.style.left = rect.left + 'px'; + header.style.right = rightOffset + 'px'; + }.bind(this)); + } else { + header.style.left = ''; + header.style.right = ''; + } + // Update the content container position. + var containerStyle = this.$.contentContainer.style; + if (header.fixed && !header.condenses && this.hasScrollingRegion) { + // If the header size does not change and we're using a scrolling region, + // exclude the header area from the scrolling region so that the header + // doesn't overlap the scrollbar. + containerStyle.marginTop = headerHeight + 'px'; + containerStyle.paddingTop = ''; + } else { + containerStyle.paddingTop = headerHeight + 'px'; + containerStyle.marginTop = ''; + } + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/app-layout/app-header/app-header.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@polymer/app-layout/app-header/app-header.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_flex_layout_iron_flex_layout_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-flex-layout/iron-flex-layout.js */ "./node_modules/@polymer/iron-flex-layout/iron-flex-layout.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/* harmony import */ var _app_layout_behavior_app_layout_behavior_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../app-layout-behavior/app-layout-behavior.js */ "./node_modules/@polymer/app-layout/app-layout-behavior/app-layout-behavior.js"); +/* harmony import */ var _app_scroll_effects_app_scroll_effects_behavior_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../app-scroll-effects/app-scroll-effects-behavior.js */ "./node_modules/@polymer/app-layout/app-scroll-effects/app-scroll-effects-behavior.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + + + +/** +app-header is container element for app-toolbars at the top of the screen that +can have scroll effects. By default, an app-header moves away from the viewport +when scrolling down and if using `reveals`, the header slides back when +scrolling back up. For example: + +```html + + +
App name
+
+
+``` + +app-header can also condense when scrolling down. To achieve this behavior, the +header must have a larger height than the `sticky` element in the light DOM. For +example: + +```html + + +
App name
+
+
+``` + +In this case the header is initially `96px` tall, and it shrinks to `64px` when +scrolling down. That is what is meant by "condensing". + +### Sticky element + +The element that is positioned fixed to top of the header's `scrollTarget` when +a threshold is reached, similar to `position: sticky` in CSS. This element +**must** be an immediate child of app-header. By default, the `sticky` element +is the first `app-toolbar that is an immediate child of app-header. + +```html + + Sticky element + + +``` + +#### Customizing the sticky element + +```html + + + Sticky element + +``` + +### Scroll target + +The app-header's `scrollTarget` property allows to customize the scrollable +element to which the header responds when the user scrolls. By default, +app-header uses the document as the scroll target, but you can customize this +property by setting the id of the element, e.g. + +```html +
+ + +
+``` + +In this case, the `scrollTarget` property points to the outer div element. +Alternatively, you can set this property programmatically: + +```js +appHeader.scrollTarget = document.querySelector("#scrollingRegion"); +``` + +## Backgrounds +app-header has two background layers that can be used for styling when the +header is condensed or when the scrollable element is scrolled to the top. + +## Scroll effects + +Scroll effects are _optional_ visual effects applied in app-header based on +scroll position. For example, The [Material Design scrolling +techniques](https://www.google.com/design/spec/patterns/scrolling-techniques.html) +recommends effects that can be installed via the `effects` property. e.g. + +```html + + App name + +``` + +#### Importing the effects + +To use the scroll effects, you must explicitly import them in addition to +`app-header`: + +```js +import '@polymer/app-layout/app-scroll-effects/app-scroll-effects.js'; +``` + +#### List of effects + +* **blend-background** +Fades in/out two background elements by applying CSS opacity based on scroll +position. You can use this effect to smoothly change the background color or +image of the header. For example, using the mixin +`--app-header-background-rear-layer` lets you assign a different background when +the header is condensed: + +```css +app-header { + background-color: red; + --app-header-background-rear-layer: { + /* The header is blue when condensed *\/ + background-color: blue; + }; +} +``` + +* **fade-background** +Upon scrolling past a threshold, this effect will trigger an opacity transition +to fade in/out the backgrounds. Compared to the `blend-background` effect, this +effect doesn't interpolate the opacity based on scroll position. + + +* **parallax-background** +A simple parallax effect that vertically translates the backgrounds based on a +fraction of the scroll position. For example: + +```css +app-header { + --app-header-background-front-layer: { + background-image: url(...); + }; +} +``` +```html + + App name + +``` + +The fraction determines how far the background moves relative to the scroll +position. This value can be assigned via the `scalar` config value and it is +typically a value between 0 and 1 inclusive. If `scalar=0`, the background +doesn't move away from the header. + +* **resize-title** +Progressively interpolates the size of the title from the element with the +`main-title` attribute to the element with the `condensed-title` attribute as +the header condenses. For example: + +```html + + +

App name

+
+ +

App name

+
+
+``` + +* **resize-snapped-title** +Upon scrolling past a threshold, this effect fades in/out the titles using +opacity transitions. Similarly to `resize-title`, the `main-title` and +`condensed-title` elements must be placed in the light DOM. + +* **waterfall** +Toggles the shadow property in app-header to create a sense of depth (as +recommended in the MD spec) between the header and the underneath content. You +can change the shadow by customizing the `--app-header-shadow` mixin. For +example: + +```css +app-header { + --app-header-shadow: { + box-shadow: inset 0px 5px 2px -3px rgba(0, 0, 0, 0.2); + }; +} +``` + +```html + + +

App name

+
+
+``` + +* **material** +Installs the waterfall, resize-title, blend-background and parallax-background +effects. + +### Content attributes + +Attribute | Description | Default +----------|---------------------|---------------------------------------- +`sticky` | Element that remains at the top when the header condenses. | The first app-toolbar in the light DOM. + + +## Styling + +Mixin | Description | Default +------|-------------|---------- +`--app-header-background-front-layer` | Applies to the front layer of the background. | {} +`--app-header-background-rear-layer` | Applies to the rear layer of the background. | {} +`--app-header-shadow` | Applies to the shadow. | {} + +@element app-header +@demo app-header/demo/blend-background-1.html Blend Background Image +@demo app-header/demo/blend-background-2.html Blend 2 Background Images +@demo app-header/demo/blend-background-3.html Blend Background Colors +@demo app-header/demo/contacts.html Contacts Demo +@demo app-header/demo/give.html Resize Snapped Title Demo +@demo app-header/demo/music.html Reveals Demo +@demo app-header/demo/no-effects.html Condenses and Reveals Demo +@demo app-header/demo/notes.html Fixed with Dynamic Shadow Demo +@demo app-header/demo/custom-sticky-element-1.html Custom Sticky Element Demo 1 +@demo app-header/demo/custom-sticky-element-2.html Custom Sticky Element Demo 2 + +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_2__.Polymer)({ + /** @override */ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_4__.html)` + +
+ +
+`, + + is: 'app-header', + behaviors: [_app_scroll_effects_app_scroll_effects_behavior_js__WEBPACK_IMPORTED_MODULE_6__.AppScrollEffectsBehavior, _app_layout_behavior_app_layout_behavior_js__WEBPACK_IMPORTED_MODULE_5__.AppLayoutBehavior], + + properties: { + /** + * If true, the header will automatically collapse when scrolling down. + * That is, the `sticky` element remains visible when the header is fully + *condensed whereas the rest of the elements will collapse below `sticky` + *element. + * + * By default, the `sticky` element is the first toolbar in the light DOM: + * + *```html + * + * This toolbar remains on top + * + * + * + * ``` + * + * Additionally, you can specify which toolbar or element remains visible in + *condensed mode by adding the `sticky` attribute to that element. For + *example: if we want the last toolbar to remain visible, we can add the + *`sticky` attribute to it. + * + *```html + * + * + * + * This toolbar remains on top + * + * ``` + * + * Note the `sticky` element must be a direct child of `app-header`. + */ + condenses: {type: Boolean, value: false}, + + /** + * Mantains the header fixed at the top so it never moves away. + */ + fixed: {type: Boolean, value: false}, + + /** + * Slides back the header when scrolling back up. + */ + reveals: {type: Boolean, value: false}, + + /** + * Displays a shadow below the header. + */ + shadow: {type: Boolean, reflectToAttribute: true, value: false} + }, + + observers: ['_configChanged(isAttached, condenses, fixed)'], + + /** + * A cached offsetHeight of the current element. + * + * @type {number} + */ + _height: 0, + + /** + * The distance in pixels the header will be translated to when scrolling. + * + * @type {number} + */ + _dHeight: 0, + + /** + * The offsetTop of `_stickyEl` + * + * @type {number} + */ + _stickyElTop: 0, + + /** + * A reference to the element that remains visible when the header condenses. + * + * @type {HTMLElement} + */ + _stickyElRef: null, + + /** + * The header's top value used for the `transformY` + * + * @type {number} + */ + _top: 0, + + /** + * The current scroll progress. + * + * @type {number} + */ + _progress: 0, + + _wasScrollingDown: false, + _initScrollTop: 0, + _initTimestamp: 0, + _lastTimestamp: 0, + _lastScrollTop: 0, + + /** + * The distance the header is allowed to move away. + * + * @type {number} + */ + get _maxHeaderTop() { + return this.fixed ? this._dHeight : this._height + 5; + }, + + /** + * Returns a reference to the sticky element. + * + * @return {HTMLElement}? + */ + get _stickyEl() { + if (this._stickyElRef) { + return this._stickyElRef; + } + var nodes = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this.$.slot).getDistributedNodes(); + // Get the element with the sticky attribute on it or the first element in + // the light DOM. + for (var i = 0, node; node = /** @type {!HTMLElement} */ (nodes[i]); i++) { + if (node.nodeType === Node.ELEMENT_NODE) { + if (node.hasAttribute('sticky')) { + this._stickyElRef = node; + break; + } else if (!this._stickyElRef) { + this._stickyElRef = node; + } + } + } + return this._stickyElRef; + }, + + _configChanged: function() { + this.resetLayout(); + this._notifyLayoutChanged(); + }, + + _updateLayoutStates: function() { + if (this.offsetWidth === 0 && this.offsetHeight === 0) { + return; + } + var scrollTop = this._clampedScrollTop; + var firstSetup = this._height === 0 || scrollTop === 0; + var currentDisabled = this.disabled; + this._height = this.offsetHeight; + this._stickyElRef = null; + this.disabled = true; + // prepare for measurement + if (!firstSetup) { + this._updateScrollState(0, true); + } + if (this._mayMove()) { + this._dHeight = + this._stickyEl ? this._height - this._stickyEl.offsetHeight : 0; + } else { + this._dHeight = 0; + } + this._stickyElTop = this._stickyEl ? this._stickyEl.offsetTop : 0; + this._setUpEffect(); + if (firstSetup) { + this._updateScrollState(scrollTop, true); + } else { + this._updateScrollState(this._lastScrollTop, true); + this._layoutIfDirty(); + } + // restore no transition + this.disabled = currentDisabled; + }, + + /** + * Updates the scroll state. + * + * @param {number} scrollTop + * @param {boolean=} forceUpdate (default: false) + */ + _updateScrollState: function(scrollTop, forceUpdate) { + if (this._height === 0) { + return; + } + var progress = 0; + var top = 0; + var lastTop = this._top; + var lastScrollTop = this._lastScrollTop; + var maxHeaderTop = this._maxHeaderTop; + var dScrollTop = scrollTop - this._lastScrollTop; + var absDScrollTop = Math.abs(dScrollTop); + var isScrollingDown = scrollTop > this._lastScrollTop; + var now = performance.now(); + + if (this._mayMove()) { + top = this._clamp( + this.reveals ? lastTop + dScrollTop : scrollTop, 0, maxHeaderTop); + } + if (scrollTop >= this._dHeight) { + top = this.condenses && !this.fixed ? Math.max(this._dHeight, top) : top; + this.style.transitionDuration = '0ms'; + } + if (this.reveals && !this.disabled && absDScrollTop < 100) { + // set the initial scroll position + if (now - this._initTimestamp > 300 || + this._wasScrollingDown !== isScrollingDown) { + this._initScrollTop = scrollTop; + this._initTimestamp = now; + } + if (scrollTop >= maxHeaderTop) { + // check if the header is allowed to snap + if (Math.abs(this._initScrollTop - scrollTop) > 30 || + absDScrollTop > 10) { + if (isScrollingDown && scrollTop >= maxHeaderTop) { + top = maxHeaderTop; + } else if (!isScrollingDown && scrollTop >= this._dHeight) { + top = this.condenses && !this.fixed ? this._dHeight : 0; + } + var scrollVelocity = dScrollTop / (now - this._lastTimestamp); + this.style.transitionDuration = + this._clamp((top - lastTop) / scrollVelocity, 0, 300) + 'ms'; + } else { + top = this._top; + } + } + } + if (this._dHeight === 0) { + progress = scrollTop > 0 ? 1 : 0; + } else { + progress = top / this._dHeight; + } + if (!forceUpdate) { + this._lastScrollTop = scrollTop; + this._top = top; + this._wasScrollingDown = isScrollingDown; + this._lastTimestamp = now; + } + if (forceUpdate || progress !== this._progress || lastTop !== top || + scrollTop === 0) { + this._progress = progress; + this._runEffects(progress, top); + this._transformHeader(top); + } + }, + + /** + * Returns true if the current header is allowed to move as the user scrolls. + * + * @return {boolean} + */ + _mayMove: function() { + return this.condenses || !this.fixed; + }, + + /** + * Returns true if the current header will condense based on the size of the + * header and the `consenses` property. + * + * @return {boolean} + */ + willCondense: function() { + return this._dHeight > 0 && this.condenses; + }, + + /** + * Returns true if the current element is on the screen. + * That is, visible in the current viewport. + * + * @method isOnScreen + * @return {boolean} + */ + isOnScreen: function() { + return this._height !== 0 && this._top < this._height; + }, + + /** + * Returns true if there's content below the current element. + * + * @method isContentBelow + * @return {boolean} + */ + isContentBelow: function() { + return this._top === 0 ? this._clampedScrollTop > 0 : + this._clampedScrollTop - this._maxHeaderTop >= 0; + }, + + /** + * Transforms the header. + * + * @param {number} y + */ + _transformHeader: function(y) { + this.translate3d(0, (-y) + 'px', 0); + if (this._stickyEl) { + this.translate3d( + 0, + this.condenses && y >= this._stickyElTop ? + (Math.min(y, this._dHeight) - this._stickyElTop) + 'px' : + 0, + 0, + this._stickyEl); + } + }, + + _clamp: function(v, min, max) { + return Math.min(max, Math.max(min, v)); + }, + + _ensureBgContainers: function() { + if (!this._bgContainer) { + this._bgContainer = document.createElement('div'); + this._bgContainer.id = 'background'; + this._bgRear = document.createElement('div'); + this._bgRear.id = 'backgroundRearLayer'; + this._bgContainer.appendChild(this._bgRear); + this._bgFront = document.createElement('div'); + this._bgFront.id = 'backgroundFrontLayer'; + this._bgContainer.appendChild(this._bgFront); + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this.root).insertBefore(this._bgContainer, this.$.contentContainer); + } + }, + + _getDOMRef: function(id) { + switch (id) { + case 'backgroundFrontLayer': + this._ensureBgContainers(); + return this._bgFront; + case 'backgroundRearLayer': + this._ensureBgContainers(); + return this._bgRear; + case 'background': + this._ensureBgContainers(); + return this._bgContainer; + case 'mainTitle': + return (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this).querySelector('[main-title]'); + case 'condensedTitle': + return (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this).querySelector('[condensed-title]'); + } + return null; + }, + + /** + * Returns an object containing the progress value of the scroll effects + * and the top position of the header. + * + * @method getScrollState + * @return {Object} + */ + getScrollState: function() { + return {progress: this._progress, top: this._top}; + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/app-layout/app-layout-behavior/app-layout-behavior.js": +/*!*************************************************************************************!*\ + !*** ./node_modules/@polymer/app-layout/app-layout-behavior/app-layout-behavior.js ***! + \*************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ AppLayoutBehavior: () => (/* binding */ AppLayoutBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_resizable_behavior_iron_resizable_behavior_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-resizable-behavior/iron-resizable-behavior.js */ "./node_modules/@polymer/iron-resizable-behavior/iron-resizable-behavior.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_async_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/utils/async.js */ "./node_modules/@polymer/polymer/lib/utils/async.js"); +/* harmony import */ var _polymer_polymer_lib_utils_debounce_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/utils/debounce.js */ "./node_modules/@polymer/polymer/lib/utils/debounce.js"); +/* harmony import */ var _polymer_polymer_lib_utils_flush_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @polymer/polymer/lib/utils/flush.js */ "./node_modules/@polymer/polymer/lib/utils/flush.js"); +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + +/** + * @polymerBehavior + */ +const AppLayoutBehavior = [ + _polymer_iron_resizable_behavior_iron_resizable_behavior_js__WEBPACK_IMPORTED_MODULE_1__.IronResizableBehavior, + { + + listeners: { + 'app-reset-layout': '_appResetLayoutHandler', + 'iron-resize': 'resetLayout' + }, + + attached: function() { + this.fire('app-reset-layout'); + }, + + _appResetLayoutHandler: function(e) { + if ((0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_2__.dom)(e).path[0] === this) { + return; + } + this.resetLayout(); + e.stopPropagation(); + }, + + _updateLayoutStates: function() { + console.error('unimplemented'); + }, + + /** + * Resets the layout. If you changed the size of this element via CSS + * you can notify the changes by either firing the `iron-resize` event + * or calling `resetLayout` directly. + * + * @method resetLayout + */ + resetLayout: function() { + var self = this; + var cb = this._updateLayoutStates.bind(this); + this._layoutDebouncer = + _polymer_polymer_lib_utils_debounce_js__WEBPACK_IMPORTED_MODULE_4__.Debouncer.debounce(this._layoutDebouncer, _polymer_polymer_lib_utils_async_js__WEBPACK_IMPORTED_MODULE_3__.animationFrame, cb); + (0,_polymer_polymer_lib_utils_flush_js__WEBPACK_IMPORTED_MODULE_5__.enqueueDebouncer)(this._layoutDebouncer); + this._notifyDescendantResize(); + }, + + _notifyLayoutChanged: function() { + var self = this; + // TODO: the event `app-reset-layout` can be fired synchronously + // as long as `_updateLayoutStates` waits for all the microtasks after + // rAF. E.g. requestAnimationFrame(setTimeOut()) + requestAnimationFrame(function() { + self.fire('app-reset-layout'); + }); + }, + + _notifyDescendantResize: function() { + if (!this.isAttached) { + return; + } + this._interestedResizables.forEach(function(resizable) { + if (this.resizerShouldNotify(resizable)) { + this._notifyDescendant(resizable); + } + }, this); + } + } +]; + + +/***/ }), + +/***/ "./node_modules/@polymer/app-layout/app-scroll-effects/app-scroll-effects-behavior.js": +/*!********************************************************************************************!*\ + !*** ./node_modules/@polymer/app-layout/app-scroll-effects/app-scroll-effects-behavior.js ***! + \********************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ AppScrollEffectsBehavior: () => (/* binding */ AppScrollEffectsBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_scroll_target_behavior_iron_scroll_target_behavior_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-scroll-target-behavior/iron-scroll-target-behavior.js */ "./node_modules/@polymer/iron-scroll-target-behavior/iron-scroll-target-behavior.js"); +/* harmony import */ var _helpers_helpers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../helpers/helpers.js */ "./node_modules/@polymer/app-layout/helpers/helpers.js"); +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + +/** + * `Polymer.AppScrollEffectsBehavior` provides an interface that allows an + * element to use scrolls effects. + * + * ### Importing the app-layout effects + * + * app-layout provides a set of scroll effects that can be used by explicitly + * importing `app-scroll-effects.js`: + * + * ```js + * import '@polymer/app-layout/app-scroll-effects/app-scroll-effects.js'; + * ``` + * + * The scroll effects can also be used by individually importing + * `@polymer/app-layout/app-scroll-effects/effects/[effectName].js`. For + * example: + * + * ```js + * import '@polymer/app-layout/app-scroll-effects/effects/waterfall.js'; + * ``` + * + * ### Consuming effects + * + * Effects can be consumed via the `effects` property. For example: + * + * ```html + * + * ``` + * + * ### Creating scroll effects + * + * You may want to create a custom scroll effect if you need to modify the CSS + * of an element based on the scroll position. + * + * A scroll effect definition is an object with `setUp()`, `tearDown()` and + * `run()` functions. + * + * To register the effect, you can use + * `Polymer.AppLayout.registerEffect(effectName, effectDef)` For example, let's + * define an effect that resizes the header's logo: + * + * ```js + * Polymer.AppLayout.registerEffect('resizable-logo', { + * setUp: function(config) { + * // the effect's config is passed to the setUp. + * this._fxResizeLogo = { logo: Polymer.dom(this).querySelector('[logo]') }; + * }, + * + * run: function(progress) { + * // the progress of the effect + * this.transform('scale3d(' + progress + ', '+ progress +', 1)', + * this._fxResizeLogo.logo); + * }, + * + * tearDown: function() { + * // clean up and reset of states + * delete this._fxResizeLogo; + * } + * }); + * ``` + * Now, you can consume the effect: + * + * ```html + * + * + * + * ``` + * + * ### Imperative API + * + * ```js + * var logoEffect = appHeader.createEffect('resizable-logo', effectConfig); + * // run the effect: logoEffect.run(progress); + * // tear down the effect: logoEffect.tearDown(); + * ``` + * + * ### Configuring effects + * + * For effects installed via the `effects` property, their configuration can be + * set via the `effectsConfig` property. For example: + * + * ```html + * + * + * ``` + * + * All effects have a `startsAt` and `endsAt` config property. They specify at + * what point the effect should start and end. This value goes from 0 to 1 + * inclusive. + * + * @polymerBehavior + */ +const AppScrollEffectsBehavior = [ + _polymer_iron_scroll_target_behavior_iron_scroll_target_behavior_js__WEBPACK_IMPORTED_MODULE_1__.IronScrollTargetBehavior, + { + + properties: { + + /** + * A space-separated list of the effects names that will be triggered when + * the user scrolls. e.g. `waterfall parallax-background` installs the + * `waterfall` and `parallax-background`. + */ + effects: {type: String}, + + /** + * An object that configurates the effects installed via the `effects` + * property. e.g. + * ```js + * element.effectsConfig = { + * "blend-background": { + * "startsAt": 0.5 + * } + * }; + * ``` + * Every effect has at least two config properties: `startsAt` and + * `endsAt`. These properties indicate when the event should start and end + * respectively and relative to the overall element progress. So for + * example, if `blend-background` starts at `0.5`, the effect will only + * start once the current element reaches 0.5 of its progress. In this + * context, the progress is a value in the range of `[0, 1]` that + * indicates where this element is on the screen relative to the viewport. + */ + effectsConfig: { + type: Object, + value: function() { + return {}; + } + }, + + /** + * Disables CSS transitions and scroll effects on the element. + */ + disabled: {type: Boolean, reflectToAttribute: true, value: false}, + + /** + * Allows to set a `scrollTop` threshold. When greater than 0, + * `thresholdTriggered` is true only when the scroll target's `scrollTop` + * has reached this value. + * + * For example, if `threshold = 100`, `thresholdTriggered` is true when + * the `scrollTop` is at least `100`. + */ + threshold: {type: Number, value: 0}, + + /** + * True if the `scrollTop` threshold (set in `scrollTopThreshold`) has + * been reached. + */ + thresholdTriggered: { + type: Boolean, + notify: true, + readOnly: true, + reflectToAttribute: true + } + }, + + observers: ['_effectsChanged(effects, effectsConfig, isAttached)'], + + /** + * Updates the scroll state. This method should be overridden + * by the consumer of this behavior. + * + * @method _updateScrollState + * @param {number} scrollTop + */ + _updateScrollState: function(scrollTop) {}, + + /** + * Returns true if the current element is on the screen. + * That is, visible in the current viewport. This method should be + * overridden by the consumer of this behavior. + * + * @method isOnScreen + * @return {boolean} + */ + isOnScreen: function() { + return false; + }, + + /** + * Returns true if there's content below the current element. This method + * should be overridden by the consumer of this behavior. + * + * @method isContentBelow + * @return {boolean} + */ + isContentBelow: function() { + return false; + }, + + /** + * List of effects handlers that will take place during scroll. + * + * @type {Array} + */ + _effectsRunFn: null, + + /** + * List of the effects definitions installed via the `effects` property. + * + * @type {Array} + */ + _effects: null, + + /** + * The clamped value of `_scrollTop`. + * @type number + */ + get _clampedScrollTop() { + return Math.max(0, this._scrollTop); + }, + + attached: function() { + this._scrollStateChanged(); + }, + + detached: function() { + this._tearDownEffects(); + }, + + /** + * Creates an effect object from an effect's name that can be used to run + * effects programmatically. + * + * @method createEffect + * @param {string} effectName The effect's name registered via `Polymer.AppLayout.registerEffect`. + * @param {Object=} effectConfig The effect config object. (Optional) + * @return {Object} An effect object with the following functions: + * + * * `effect.setUp()`, Sets up the requirements for the effect. + * This function is called automatically before the `effect` function + * returns. + * * `effect.run(progress, y)`, Runs the effect given a `progress`. + * * `effect.tearDown()`, Cleans up any DOM nodes or element references + * used by the effect. + * + * Example: + * ```js + * var parallax = element.createEffect('parallax-background'); + * // runs the effect + * parallax.run(0.5, 0); + * ``` + */ + createEffect: function(effectName, effectConfig) { + var effectDef = _helpers_helpers_js__WEBPACK_IMPORTED_MODULE_2__._scrollEffects[effectName]; + if (!effectDef) { + throw new ReferenceError(this._getUndefinedMsg(effectName)); + } + var prop = this._boundEffect(effectDef, effectConfig || {}); + prop.setUp(); + return prop; + }, + + /** + * Called when `effects` or `effectsConfig` changes. + */ + _effectsChanged: function(effects, effectsConfig, isAttached) { + this._tearDownEffects(); + + if (!effects || !isAttached) { + return; + } + effects.split(' ').forEach(function(effectName) { + var effectDef; + if (effectName !== '') { + if ((effectDef = _helpers_helpers_js__WEBPACK_IMPORTED_MODULE_2__._scrollEffects[effectName])) { + this._effects.push( + this._boundEffect(effectDef, effectsConfig[effectName])); + } else { + console.warn(this._getUndefinedMsg(effectName)); + } + } + }, this); + + this._setUpEffect(); + }, + + /** + * Forces layout + */ + _layoutIfDirty: function() { + return this.offsetWidth; + }, + + /** + * Returns an effect object bound to the current context. + * + * @param {Object} effectDef + * @param {Object=} effectsConfig The effect config object if the effect accepts config values. (Optional) + */ + _boundEffect: function(effectDef, effectsConfig) { + effectsConfig = effectsConfig || {}; + var startsAt = parseFloat(effectsConfig.startsAt || 0); + var endsAt = parseFloat(effectsConfig.endsAt || 1); + var deltaS = endsAt - startsAt; + var noop = function() {}; + // fast path if possible + var runFn = (startsAt === 0 && endsAt === 1) ? + effectDef.run : + function(progress, y) { + effectDef.run.call( + this, Math.max(0, (progress - startsAt) / deltaS), y); + }; + return { + setUp: effectDef.setUp ? effectDef.setUp.bind(this, effectsConfig) : + noop, + run: effectDef.run ? runFn.bind(this) : noop, + tearDown: effectDef.tearDown ? effectDef.tearDown.bind(this) : noop + }; + }, + + /** + * Sets up the effects. + */ + _setUpEffect: function() { + if (this.isAttached && this._effects) { + this._effectsRunFn = []; + this._effects.forEach(function(effectDef) { + // install the effect only if no error was reported + if (effectDef.setUp() !== false) { + this._effectsRunFn.push(effectDef.run); + } + }, this); + } + }, + + /** + * Tears down the effects. + */ + _tearDownEffects: function() { + if (this._effects) { + this._effects.forEach(function(effectDef) { + effectDef.tearDown(); + }); + } + this._effectsRunFn = []; + this._effects = []; + }, + + /** + * Runs the effects. + * + * @param {number} p The progress + * @param {number} y The top position of the current element relative to the viewport. + */ + _runEffects: function(p, y) { + if (this._effectsRunFn) { + this._effectsRunFn.forEach(function(run) { + run(p, y); + }); + } + }, + + /** + * Overrides the `_scrollHandler`. + */ + _scrollHandler: function() { + this._scrollStateChanged(); + }, + + _scrollStateChanged: function() { + if (!this.disabled) { + var scrollTop = this._clampedScrollTop; + this._updateScrollState(scrollTop); + if (this.threshold > 0) { + this._setThresholdTriggered(scrollTop >= this.threshold); + } + } + }, + + /** + * Override this method to return a reference to a node in the local DOM. + * The node is consumed by a scroll effect. + * + * @param {string} id The id for the node. + */ + _getDOMRef: function(id) { + console.warn('_getDOMRef', '`' + id + '` is undefined'); + }, + + _getUndefinedMsg: function(effectName) { + return 'Scroll effect `' + effectName + '` is undefined. ' + + 'Did you forget to import app-layout/app-scroll-effects/effects/' + + effectName + '.html ?'; + } + + } +]; + + +/***/ }), + +/***/ "./node_modules/@polymer/app-layout/app-toolbar/app-toolbar.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@polymer/app-layout/app-toolbar/app-toolbar.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_flex_layout_iron_flex_layout_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-flex-layout/iron-flex-layout.js */ "./node_modules/@polymer/iron-flex-layout/iron-flex-layout.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + +/** +app-toolbar is a horizontal toolbar containing items that can be used for +label, navigation, search and actions. + +### Example + +Add a title to the toolbar. + +```html + +
App name
+
+``` + +Add a button to the left and right side of the toolbar. + +```html + + +
App name
+ +
+``` + +You can use the attributes `top-item` or `bottom-item` to completely fit an +element to the top or bottom of the toolbar respectively. + +### Content attributes + +Attribute | Description +---------------------|--------------------------------------------------------- +`main-title` | The main title element. +`condensed-title` | The title element if used inside a condensed app-header. +`spacer` | Adds a left margin of `64px`. +`bottom-item` | Sticks the element to the bottom of the toolbar. +`top-item` | Sticks the element to the top of the toolbar. + +### Styling + +Custom property | Description | Default +-----------------------------|------------------------------|----------------------- +`--app-toolbar-font-size` | Toolbar font size | 20px + +@element app-toolbar +@demo app-toolbar/demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_2__.Polymer)({ + /** @override */ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_3__.html)` + + + +`, + + is: 'app-toolbar' +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/app-layout/helpers/helpers.js": +/*!*************************************************************!*\ + !*** ./node_modules/@polymer/app-layout/helpers/helpers.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ElementWithBackground: () => (/* binding */ ElementWithBackground), +/* harmony export */ _scrollEffects: () => (/* binding */ _scrollEffects), +/* harmony export */ _scrollTimer: () => (/* binding */ _scrollTimer), +/* harmony export */ queryAllRoot: () => (/* binding */ queryAllRoot), +/* harmony export */ registerEffect: () => (/* binding */ registerEffect), +/* harmony export */ scroll: () => (/* binding */ scroll), +/* harmony export */ scrollTimingFunction: () => (/* binding */ scrollTimingFunction) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + +const _scrollEffects = {}; +let _scrollTimer = null; + +const scrollTimingFunction = function easeOutQuad(t, b, c, d) { + t /= d; + return -c * t * (t - 2) + b; +}; + +/** + * Registers a scroll effect to be used in elements that implement the + * `Polymer.AppScrollEffectsBehavior` behavior. + * + * @param {string} effectName The effect name. + * @param {Object} effectDef The effect definition. + */ +const registerEffect = function registerEffect(effectName, effectDef) { + if (_scrollEffects[effectName] != null) { + throw new Error('effect `' + effectName + '` is already registered.'); + } + _scrollEffects[effectName] = effectDef; +}; + +const queryAllRoot = function(selector, root) { + var queue = [root]; + var matches = []; + + while (queue.length > 0) { + var node = queue.shift(); + matches.push.apply(matches, node.querySelectorAll(selector)); + for (var i = 0; node.children[i]; i++) { + if (node.children[i].shadowRoot) { + queue.push(node.children[i].shadowRoot); + } + } + } + return matches; +}; + +/** + * Scrolls to a particular set of coordinates in a scroll target. + * If the scroll target is not defined, then it would use the main document as + * the target. + * + * To scroll in a smooth fashion, you can set the option `behavior: 'smooth'`. + * e.g. + * + * ```js + * Polymer.AppLayout.scroll({top: 0, behavior: 'smooth'}); + * ``` + * + * To scroll in a silent mode, without notifying scroll changes to any + * app-layout elements, you can set the option `behavior: 'silent'`. This is + * particularly useful we you are using `app-header` and you desire to scroll to + * the top of a scrolling region without running scroll effects. e.g. + * + * ```js + * Polymer.AppLayout.scroll({top: 0, behavior: 'silent'}); + * ``` + * + * @param {Object} options {top: Number, left: Number, behavior: String(smooth | silent)} + */ +const scroll = function scroll(options) { + options = options || {}; + + var docEl = document.documentElement; + var target = options.target || docEl; + var hasNativeScrollBehavior = + 'scrollBehavior' in target.style && target.scroll; + var scrollClassName = 'app-layout-silent-scroll'; + var scrollTop = options.top || 0; + var scrollLeft = options.left || 0; + var scrollTo = target === docEl ? window.scrollTo : + function scrollTo(scrollLeft, scrollTop) { + target.scrollLeft = scrollLeft; + target.scrollTop = scrollTop; + }; + + if (options.behavior === 'smooth') { + if (hasNativeScrollBehavior) { + target.scroll(options); + + } else { + var timingFn = scrollTimingFunction; + var startTime = Date.now(); + var currentScrollTop = + target === docEl ? window.pageYOffset : target.scrollTop; + var currentScrollLeft = + target === docEl ? window.pageXOffset : target.scrollLeft; + var deltaScrollTop = scrollTop - currentScrollTop; + var deltaScrollLeft = scrollLeft - currentScrollLeft; + var duration = 300; + var updateFrame = + (function updateFrame() { + var now = Date.now(); + var elapsedTime = now - startTime; + + if (elapsedTime < duration) { + scrollTo( + timingFn( + elapsedTime, + currentScrollLeft, + deltaScrollLeft, + duration), + timingFn( + elapsedTime, currentScrollTop, deltaScrollTop, duration)); + requestAnimationFrame(updateFrame); + } else { + scrollTo(scrollLeft, scrollTop); + } + }).bind(this); + + updateFrame(); + } + + } else if (options.behavior === 'silent') { + var headers = queryAllRoot('app-header', document.body); + + headers.forEach(function(header) { + header.setAttribute('silent-scroll', ''); + }); + + // Browsers keep the scroll momentum even if the bottom of the scrolling + // content was reached. This means that calling scroll({top: 0, behavior: + // 'silent'}) when the momentum is still going will result in more scroll + // events and thus scroll effects. This seems to only apply when using + // document scrolling. Therefore, when should we remove the class from the + // document element? + + if (_scrollTimer) { + window.cancelAnimationFrame(_scrollTimer); + } + + _scrollTimer = window.requestAnimationFrame(function() { + headers.forEach(function(header) { + header.removeAttribute('silent-scroll'); + }); + _scrollTimer = null; + }); + + scrollTo(scrollLeft, scrollTop); + + } else { + scrollTo(scrollLeft, scrollTop); + } +}; + +/** + * @interface + * @extends {Polymer_LegacyElementMixin} + */ +class ElementWithBackground { + /** @return {boolean} True if there's content below the current element */ + isContentBelow() { + } + + + /** @return {boolean} true if the element is on screen */ + isOnScreen() { + } + + /** + * @param {string} title + * @return {?Element} Element in local dom by id. + */ + _getDOMRef(title) { + } +} + + +/***/ }), + +/***/ "./node_modules/@polymer/app-localize-behavior/app-localize-behavior.js": +/*!******************************************************************************!*\ + !*** ./node_modules/@polymer/app-localize-behavior/app-localize-behavior.js ***! + \******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ AppLocalizeBehavior: () => (/* binding */ AppLocalizeBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_ajax_iron_ajax_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-ajax/iron-ajax.js */ "./node_modules/@polymer/iron-ajax/iron-ajax.js"); +/* harmony import */ var intl_messageformat_src_main_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! intl-messageformat/src/main.js */ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/main.js"); +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + +window.IntlMessageFormat = intl_messageformat_src_main_js__WEBPACK_IMPORTED_MODULE_2__["default"]; + +// This isn't a complete `Object.assign` polyfill, but this element expects +// JSON and doesn't provide more than one source object. +var assign = + Object.assign ? Object.assign.bind(Object) : function(destination, source) { + for (var prop in source) { + if (source.hasOwnProperty(prop)) { + destination[prop] = source[prop]; + } + } + + return destination; + }; + +/** + `AppLocalizeBehavior` wraps the [format.js](http://formatjs.io/) + library to help you internationalize your application. Note that if you're on + a browser that does not natively support the + [Intl](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl) + object, you must load the polyfill yourself. An example polyfill can + be found [here](https://github.com/andyearnshaw/Intl.js/). + + `AppLocalizeBehavior` supports the same + [message-syntax](http://formatjs.io/guides/message-syntax/) of format.js, in + its entirety; use the library docs as reference for the available message + formats and options. + + Sample application loading resources from an external file: + + import {PolymerElement, html} from '@polymer/polymer'; + import {mixinBehaviors} from '@polymer/polymer/lib/legacy/class.js'; + import {AppLocalizeBehavior} from + '@polymer/app-localize-behavior/app-localize-behavior.js'; + + class SampleElement extends extends mixinBehaviors( + [AppLocalizeBehavior], PolymerElement) { + static get template() { + return html` +
{{localize('hello', 'name', 'Batman')}}
+ `; + } + static get properties() { + return { + language: { value: 'en' }, + } + } + + function attached() { + this.loadResources(this.resolveUrl('locales.json')); + } + } + customElements.define('sample-element', SampleElement); + + If the resources stored in your external file are for a single language and + so are not nested inside any language keys, you can pass an optional + `language` parameter to store the fetched resources inside that key. + + This complements the optional third parameter, `merge`, nicely: If you pass + `merge = true`, the fetched resources will be merged into any existing + resources rather than clobbering them. + + This is also useful for storing resources for different parts of a page that + the user might or might not see at the same time in different files, so that + the user can fetch only the needed resources on-demand, and doesn't have to + load any resources they'll never see anyway. For example, you could store + your resources for your global nav, homepage, and FAQ page in 3 different + files. When a user requests the homepage, both the global nav and the + homepage resources are fetched and merged together, since they both appear + on the page at the same time, but you spare the user from fetching the + unneeded FAQ resources. + + + Example: + + attached: function() { + this.loadResources( + // Only contains the flattened "es" translations: + 'locales/es.json', // {"hi": "hola"} + 'es', // unflatten -> {"es": {"hi": "hola"}} + true // merge so existing resources won't be clobbered + ); + } + + Alternatively, you can also inline your resources inside the app itself: + + import {PolymerElement, html} from '@polymer/polymer'; + import {mixinBehaviors} from '@polymer/polymer/lib/legacy/class.js'; + import {AppLocalizeBehavior} from + '@polymer/app-localize-behavior/app-localize-behavior.js'; + + class SampleElement extends extends mixinBehaviors( + [AppLocalizeBehavior], PolymerElement) { + static get template() { + return html` +
{{localize('hello', 'name', 'Batman')}}
+ `; + } + + static get properties() { + return { + language: { value: 'en' }, + resources: { + value: function() { + return { + 'en': { 'hello': 'My name is {name}.' }, + 'fr': { 'hello': 'Je m\'appelle {name}.' } + } + }, + } + } + + function attached() { + this.loadResources(this.resolveUrl('locales.json')); + } + } + customElements.define('sample-element', SampleElement); + + @demo demo/index.html + @polymerBehavior AppLocalizeBehavior + */ +const AppLocalizeBehavior = { + /** + Internal singleton cache. This is the private implementation of the + behaviour; don't interact with it directly. + */ + __localizationCache: { + requests: {}, /* One iron-request per unique resources path. */ + messages: {}, /* Unique localized strings. Invalidated when the language, + formats or resources change. */ + ajax: null /* Global iron-ajax object used to request resource files. */ + }, + + /** + Fired after the resources have been loaded. + @event app-localize-resources-loaded + */ + + /** + Fired when the resources cannot be loaded due to an error. + @event app-localize-resources-error + */ + + properties: { + /** + The language used for translation. + */ + language: {type: String}, + + /** + The dictionary of localized messages, for each of the languages that + are going to be used. See http://formatjs.io/guides/message-syntax/ for + more information on the message syntax. + * + For example, a valid dictionary would be: + this.resources = { + 'en': { 'greeting': 'Hello!' }, 'fr' : { 'greeting': 'Bonjour!' } + } + */ + resources: {type: Object}, + + /** + Optional dictionary of user defined formats, as explained here: + http://formatjs.io/guides/message-syntax/#custom-formats + * + For example, a valid dictionary of formats would be: + this.formats = { + number: { USD: { style: 'currency', currency: 'USD' } } + } + */ + formats: { + type: Object, + value: function() { + return { + } + } + }, + + /** + If true, will use the provided key when + the translation does not exist for that key. + */ + useKeyIfMissing: {type: Boolean, value: false}, + + /** + Translates a string to the current `language`. Any parameters to the + string should be passed in order, as follows: + `localize(stringKey, param1Name, param1Value, param2Name, param2Value)` + */ + localize: { + type: Function, + computed: '__computeLocalize(language, resources, formats)' + }, + + /** + If true, will bubble up the event to the parents + */ + bubbleEvent: {type: Boolean, value: false} + }, + + loadResources: function(path, language, merge) { + var proto = this.constructor.prototype; + + // Check if localCache exist just in case. + this.__checkLocalizationCache(proto); + + // If the global ajax object has not been initialized, initialize and cache + // it. + var ajax = proto.__localizationCache.ajax; + if (!ajax) { + ajax = proto.__localizationCache.ajax = + document.createElement('iron-ajax'); + } + + var request = proto.__localizationCache.requests[path]; + + function onRequestResponse(event) { + this.__onRequestResponse(event, language, merge); + } + + if (!request) { + ajax.url = path; + var request = ajax.generateRequest(); + + request.completes.then( + onRequestResponse.bind(this), this.__onRequestError.bind(this)); + + // Cache the instance so that it can be reused if the same path is loaded. + proto.__localizationCache.requests[path] = request; + } else { + request.completes.then( + onRequestResponse.bind(this), this.__onRequestError.bind(this)); + } + }, + + /** + Returns a computed `localize` method, based on the current `language`. + */ + __computeLocalize: function(language, resources, formats) { + var proto = this.constructor.prototype; + + // Check if localCache exist just in case. + this.__checkLocalizationCache(proto); + + // Everytime any of the parameters change, invalidate the strings cache. + if (!proto.__localizationCache) { + proto['__localizationCache'] = {requests: {}, messages: {}, ajax: null}; + } + proto.__localizationCache.messages = {}; + + return function() { + var key = arguments[0]; + if (!key || !resources || !language || !resources[language]) + return; + + // Cache the key/value pairs for the same language, so that we don't + // do extra work if we're just reusing strings across an application. + var translatedValue = resources[language][key]; + + if (!translatedValue) { + return this.useKeyIfMissing ? key : ''; + } + + var messageKey = key + translatedValue; + var translatedMessage = proto.__localizationCache.messages[messageKey]; + + if (!translatedMessage) { + translatedMessage = + new intl_messageformat_src_main_js__WEBPACK_IMPORTED_MODULE_2__["default"](translatedValue, language, formats); + proto.__localizationCache.messages[messageKey] = translatedMessage; + } + + var args = {}; + for (var i = 1; i < arguments.length; i += 2) { + args[arguments[i]] = arguments[i + 1]; + } + + return translatedMessage.format(args); + }.bind(this); + }, + + __onRequestResponse: function(event, language, merge) { + var propertyUpdates = {}; + var newResources = event.response; + if (merge) { + if (language) { + propertyUpdates.resources = assign({}, this.resources || {}); + propertyUpdates['resources.' + language] = + assign(propertyUpdates.resources[language] || {}, newResources); + } else { + propertyUpdates.resources = assign(this.resources, newResources); + } + } else { + if (language) { + propertyUpdates.resources = {}; + propertyUpdates.resources[language] = newResources; + propertyUpdates['resources.' + language] = newResources; + } else { + propertyUpdates.resources = newResources; + } + } + if (this.setProperties) { + this.setProperties(propertyUpdates); + } else { + for (var key in propertyUpdates) { + this.set(key, propertyUpdates[key]); + } + } + this.fire( + 'app-localize-resources-loaded', event, {bubbles: this.bubbleEvent}); + }, + + __onRequestError: function(event) { + this.fire('app-localize-resources-error'); + }, + + __checkLocalizationCache: function(proto) { + // do nothing if proto is undefined. + if (proto === undefined) + return; + + // In the event proto not have __localizationCache object, create it. + if (proto['__localizationCache'] === undefined) { + proto['__localizationCache'] = {requests: {}, messages: {}, ajax: null}; + } + } +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/compiler.js": +/*!*****************************************************************************************************!*\ + !*** ./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/compiler.js ***! + \*****************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* +Copyright (c) 2014, Yahoo! Inc. All rights reserved. +Copyrights licensed under the New BSD License. +See the accompanying LICENSE file for terms. +*/ + +/* jslint esnext: true */ + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Compiler); + +function Compiler(locales, formats, pluralFn) { + this.locales = locales; + this.formats = formats; + this.pluralFn = pluralFn; +} + +Compiler.prototype.compile = function (ast) { + this.pluralStack = []; + this.currentPlural = null; + this.pluralNumberFormat = null; + + return this.compileMessage(ast); +}; + +Compiler.prototype.compileMessage = function (ast) { + if (!(ast && ast.type === 'messageFormatPattern')) { + throw new Error('Message AST is not of type: "messageFormatPattern"'); + } + + var elements = ast.elements, + pattern = []; + + var i, len, element; + + for (i = 0, len = elements.length; i < len; i += 1) { + element = elements[i]; + + switch (element.type) { + case 'messageTextElement': + pattern.push(this.compileMessageText(element)); + break; + + case 'argumentElement': + pattern.push(this.compileArgument(element)); + break; + + default: + throw new Error('Message element does not have a valid type'); + } + } + + return pattern; +}; + +Compiler.prototype.compileMessageText = function (element) { + // When this `element` is part of plural sub-pattern and its value contains + // an unescaped '#', use a `PluralOffsetString` helper to properly output + // the number with the correct offset in the string. + if (this.currentPlural && /(^|[^\\])#/g.test(element.value)) { + // Create a cache a NumberFormat instance that can be reused for any + // PluralOffsetString instance in this message. + if (!this.pluralNumberFormat) { + this.pluralNumberFormat = new Intl.NumberFormat(this.locales); + } + + return new PluralOffsetString( + this.currentPlural.id, + this.currentPlural.format.offset, + this.pluralNumberFormat, + element.value); + } + + // Unescape the escaped '#'s in the message text. + return element.value.replace(/\\#/g, '#'); +}; + +Compiler.prototype.compileArgument = function (element) { + var format = element.format; + + if (!format) { + return new StringFormat(element.id); + } + + var formats = this.formats, + locales = this.locales, + pluralFn = this.pluralFn, + options; + + switch (format.type) { + case 'numberFormat': + options = formats.number[format.style]; + return { + id : element.id, + format: new Intl.NumberFormat(locales, options).format + }; + + case 'dateFormat': + options = formats.date[format.style]; + return { + id : element.id, + format: new Intl.DateTimeFormat(locales, options).format + }; + + case 'timeFormat': + options = formats.time[format.style]; + return { + id : element.id, + format: new Intl.DateTimeFormat(locales, options).format + }; + + case 'pluralFormat': + options = this.compileOptions(element); + return new PluralFormat( + element.id, format.ordinal, format.offset, options, pluralFn + ); + + case 'selectFormat': + options = this.compileOptions(element); + return new SelectFormat(element.id, options); + + default: + throw new Error('Message element does not have a valid format type'); + } +}; + +Compiler.prototype.compileOptions = function (element) { + var format = element.format, + options = format.options, + optionsHash = {}; + + // Save the current plural element, if any, then set it to a new value when + // compiling the options sub-patterns. This conforms the spec's algorithm + // for handling `"#"` syntax in message text. + this.pluralStack.push(this.currentPlural); + this.currentPlural = format.type === 'pluralFormat' ? element : null; + + var i, len, option; + + for (i = 0, len = options.length; i < len; i += 1) { + option = options[i]; + + // Compile the sub-pattern and save it under the options's selector. + optionsHash[option.selector] = this.compileMessage(option.value); + } + + // Pop the plural stack to put back the original current plural value. + this.currentPlural = this.pluralStack.pop(); + + return optionsHash; +}; + +// -- Compiler Helper Classes -------------------------------------------------- + +function StringFormat(id) { + this.id = id; +} + +StringFormat.prototype.format = function (value) { + if (!value && typeof value !== 'number') { + return ''; + } + + return typeof value === 'string' ? value : String(value); +}; + +function PluralFormat(id, useOrdinal, offset, options, pluralFn) { + this.id = id; + this.useOrdinal = useOrdinal; + this.offset = offset; + this.options = options; + this.pluralFn = pluralFn; +} + +PluralFormat.prototype.getOption = function (value) { + var options = this.options; + + var option = options['=' + value] || + options[this.pluralFn(value - this.offset, this.useOrdinal)]; + + return option || options.other; +}; + +function PluralOffsetString(id, offset, numberFormat, string) { + this.id = id; + this.offset = offset; + this.numberFormat = numberFormat; + this.string = string; +} + +PluralOffsetString.prototype.format = function (value) { + var number = this.numberFormat.format(value - this.offset); + + return this.string + .replace(/(^|[^\\])#/g, '$1' + number) + .replace(/\\#/g, '#'); +}; + +function SelectFormat(id, options) { + this.id = id; + this.options = options; +} + +SelectFormat.prototype.getOption = function (value) { + var options = this.options; + return options[value] || options.other; +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/core.js": +/*!*************************************************************************************************!*\ + !*** ./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/core.js ***! + \*************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/utils.js"); +/* harmony import */ var _es5__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./es5 */ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/es5.js"); +/* harmony import */ var _compiler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./compiler */ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/compiler.js"); +/* harmony import */ var intl_messageformat_parser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! intl-messageformat-parser */ "./node_modules/intl-messageformat-parser/index.js"); +/* harmony import */ var intl_messageformat_parser__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(intl_messageformat_parser__WEBPACK_IMPORTED_MODULE_3__); +/* +Copyright (c) 2014, Yahoo! Inc. All rights reserved. +Copyrights licensed under the New BSD License. +See the accompanying LICENSE file for terms. +*/ + +/* jslint esnext: true */ + + + + + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MessageFormat); + +// -- MessageFormat -------------------------------------------------------- + +function MessageFormat(message, locales, formats) { + // Parse string messages into an AST. + var ast = typeof message === 'string' ? + MessageFormat.__parse(message) : message; + + if (!(ast && ast.type === 'messageFormatPattern')) { + throw new TypeError('A message must be provided as a String or AST.'); + } + + // Creates a new object with the specified `formats` merged with the default + // formats. + formats = this._mergeFormats(MessageFormat.formats, formats); + + // Defined first because it's used to build the format pattern. + (0,_es5__WEBPACK_IMPORTED_MODULE_1__.defineProperty)(this, '_locale', {value: this._resolveLocale(locales)}); + + // Compile the `ast` to a pattern that is highly optimized for repeated + // `format()` invocations. **Note:** This passes the `locales` set provided + // to the constructor instead of just the resolved locale. + var pluralFn = this._findPluralRuleFunction(this._locale); + var pattern = this._compilePattern(ast, locales, formats, pluralFn); + + // "Bind" `format()` method to `this` so it can be passed by reference like + // the other `Intl` APIs. + var messageFormat = this; + this.format = function (values) { + try { + return messageFormat._format(pattern, values); + } catch (e) { + if (e.variableId) { + throw new Error( + 'The intl string context variable \'' + e.variableId + '\'' + + ' was not provided to the string \'' + message + '\'' + ); + } else { + throw e; + } + } + }; +} + +// Default format options used as the prototype of the `formats` provided to the +// constructor. These are used when constructing the internal Intl.NumberFormat +// and Intl.DateTimeFormat instances. +(0,_es5__WEBPACK_IMPORTED_MODULE_1__.defineProperty)(MessageFormat, 'formats', { + enumerable: true, + + value: { + number: { + 'currency': { + style: 'currency' + }, + + 'percent': { + style: 'percent' + } + }, + + date: { + 'short': { + month: 'numeric', + day : 'numeric', + year : '2-digit' + }, + + 'medium': { + month: 'short', + day : 'numeric', + year : 'numeric' + }, + + 'long': { + month: 'long', + day : 'numeric', + year : 'numeric' + }, + + 'full': { + weekday: 'long', + month : 'long', + day : 'numeric', + year : 'numeric' + } + }, + + time: { + 'short': { + hour : 'numeric', + minute: 'numeric' + }, + + 'medium': { + hour : 'numeric', + minute: 'numeric', + second: 'numeric' + }, + + 'long': { + hour : 'numeric', + minute : 'numeric', + second : 'numeric', + timeZoneName: 'short' + }, + + 'full': { + hour : 'numeric', + minute : 'numeric', + second : 'numeric', + timeZoneName: 'short' + } + } + } +}); + +// Define internal private properties for dealing with locale data. +(0,_es5__WEBPACK_IMPORTED_MODULE_1__.defineProperty)(MessageFormat, '__localeData__', {value: (0,_es5__WEBPACK_IMPORTED_MODULE_1__.objCreate)(null)}); +(0,_es5__WEBPACK_IMPORTED_MODULE_1__.defineProperty)(MessageFormat, '__addLocaleData', {value: function (data) { + if (!(data && data.locale)) { + throw new Error( + 'Locale data provided to IntlMessageFormat is missing a ' + + '`locale` property' + ); + } + + MessageFormat.__localeData__[data.locale.toLowerCase()] = data; +}}); + +// Defines `__parse()` static method as an exposed private. +(0,_es5__WEBPACK_IMPORTED_MODULE_1__.defineProperty)(MessageFormat, '__parse', {value: (intl_messageformat_parser__WEBPACK_IMPORTED_MODULE_3___default().parse)}); + +// Define public `defaultLocale` property which defaults to English, but can be +// set by the developer. +(0,_es5__WEBPACK_IMPORTED_MODULE_1__.defineProperty)(MessageFormat, 'defaultLocale', { + enumerable: true, + writable : true, + value : undefined +}); + +MessageFormat.prototype.resolvedOptions = function () { + // TODO: Provide anything else? + return { + locale: this._locale + }; +}; + +MessageFormat.prototype._compilePattern = function (ast, locales, formats, pluralFn) { + var compiler = new _compiler__WEBPACK_IMPORTED_MODULE_2__["default"](locales, formats, pluralFn); + return compiler.compile(ast); +}; + +MessageFormat.prototype._findPluralRuleFunction = function (locale) { + var localeData = MessageFormat.__localeData__; + var data = localeData[locale.toLowerCase()]; + + // The locale data is de-duplicated, so we have to traverse the locale's + // hierarchy until we find a `pluralRuleFunction` to return. + while (data) { + if (data.pluralRuleFunction) { + return data.pluralRuleFunction; + } + + data = data.parentLocale && localeData[data.parentLocale.toLowerCase()]; + } + + throw new Error( + 'Locale data added to IntlMessageFormat is missing a ' + + '`pluralRuleFunction` for :' + locale + ); +}; + +MessageFormat.prototype._format = function (pattern, values) { + var result = '', + i, len, part, id, value, err; + + for (i = 0, len = pattern.length; i < len; i += 1) { + part = pattern[i]; + + // Exist early for string parts. + if (typeof part === 'string') { + result += part; + continue; + } + + id = part.id; + + // Enforce that all required values are provided by the caller. + if (!(values && _utils__WEBPACK_IMPORTED_MODULE_0__.hop.call(values, id))) { + err = new Error('A value must be provided for: ' + id); + err.variableId = id; + throw err; + } + + value = values[id]; + + // Recursively format plural and select parts' option — which can be a + // nested pattern structure. The choosing of the option to use is + // abstracted-by and delegated-to the part helper object. + if (part.options) { + result += this._format(part.getOption(value), values); + } else { + result += part.format(value); + } + } + + return result; +}; + +MessageFormat.prototype._mergeFormats = function (defaults, formats) { + var mergedFormats = {}, + type, mergedType; + + for (type in defaults) { + if (!_utils__WEBPACK_IMPORTED_MODULE_0__.hop.call(defaults, type)) { continue; } + + mergedFormats[type] = mergedType = (0,_es5__WEBPACK_IMPORTED_MODULE_1__.objCreate)(defaults[type]); + + if (formats && _utils__WEBPACK_IMPORTED_MODULE_0__.hop.call(formats, type)) { + (0,_utils__WEBPACK_IMPORTED_MODULE_0__.extend)(mergedType, formats[type]); + } + } + + return mergedFormats; +}; + +MessageFormat.prototype._resolveLocale = function (locales) { + if (typeof locales === 'string') { + locales = [locales]; + } + + // Create a copy of the array so we can push on the default locale. + locales = (locales || []).concat(MessageFormat.defaultLocale); + + var localeData = MessageFormat.__localeData__; + var i, len, localeParts, data; + + // Using the set of locales + the default locale, we look for the first one + // which that has been registered. When data does not exist for a locale, we + // traverse its ancestors to find something that's been registered within + // its hierarchy of locales. Since we lack the proper `parentLocale` data + // here, we must take a naive approach to traversal. + for (i = 0, len = locales.length; i < len; i += 1) { + localeParts = locales[i].toLowerCase().split('-'); + + while (localeParts.length) { + data = localeData[localeParts.join('-')]; + if (data) { + // Return the normalized locale string; e.g., we return "en-US", + // instead of "en-us". + return data.locale; + } + + localeParts.pop(); + } + } + + var defaultLocale = locales.pop(); + throw new Error( + 'No locale data has been added to IntlMessageFormat for: ' + + locales.join(', ') + ', or the default locale: ' + defaultLocale + ); +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/en.js": +/*!***********************************************************************************************!*\ + !*** ./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/en.js ***! + \***********************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +// GENERATED FILE +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({"locale":"en","pluralRuleFunction":function (n,ord){var s=String(n).split("."),v0=!s[1],t0=Number(s[0])==n,n10=t0&&s[0].slice(-1),n100=t0&&s[0].slice(-2);if(ord)return n10==1&&n100!=11?"one":n10==2&&n100!=12?"two":n10==3&&n100!=13?"few":"other";return n==1&&v0?"one":"other"}}); + + +/***/ }), + +/***/ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/es5.js": +/*!************************************************************************************************!*\ + !*** ./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/es5.js ***! + \************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ defineProperty: () => (/* binding */ defineProperty), +/* harmony export */ objCreate: () => (/* binding */ objCreate) +/* harmony export */ }); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/utils.js"); +/* +Copyright (c) 2014, Yahoo! Inc. All rights reserved. +Copyrights licensed under the New BSD License. +See the accompanying LICENSE file for terms. +*/ + +/* jslint esnext: true */ + + + +// Purposely using the same implementation as the Intl.js `Intl` polyfill. +// Copyright 2013 Andy Earnshaw, MIT License + +var realDefineProp = (function () { + try { return !!Object.defineProperty({}, 'a', {}); } + catch (e) { return false; } +})(); + +var es3 = !realDefineProp && !Object.prototype.__defineGetter__; + +var defineProperty = realDefineProp ? Object.defineProperty : + function (obj, name, desc) { + + if ('get' in desc && obj.__defineGetter__) { + obj.__defineGetter__(name, desc.get); + } else if (!_utils__WEBPACK_IMPORTED_MODULE_0__.hop.call(obj, name) || 'value' in desc) { + obj[name] = desc.value; + } +}; + +var objCreate = Object.create || function (proto, props) { + var obj, k; + + function F() {} + F.prototype = proto; + obj = new F(); + + for (k in props) { + if (_utils__WEBPACK_IMPORTED_MODULE_0__.hop.call(props, k)) { + defineProperty(obj, k, props[k]); + } + } + + return obj; +}; + + + + +/***/ }), + +/***/ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/main.js": +/*!*************************************************************************************************!*\ + !*** ./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/main.js ***! + \*************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core */ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/core.js"); +/* harmony import */ var _en__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./en */ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/en.js"); +/* jslint esnext: true */ + + + + +_core__WEBPACK_IMPORTED_MODULE_0__["default"].__addLocaleData(_en__WEBPACK_IMPORTED_MODULE_1__["default"]); +_core__WEBPACK_IMPORTED_MODULE_0__["default"].defaultLocale = 'en'; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_core__WEBPACK_IMPORTED_MODULE_0__["default"]); + + +/***/ }), + +/***/ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/utils.js": +/*!**************************************************************************************************!*\ + !*** ./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/utils.js ***! + \**************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ extend: () => (/* binding */ extend), +/* harmony export */ hop: () => (/* binding */ hop) +/* harmony export */ }); +/* +Copyright (c) 2014, Yahoo! Inc. All rights reserved. +Copyrights licensed under the New BSD License. +See the accompanying LICENSE file for terms. +*/ + +/* jslint esnext: true */ + +var hop = Object.prototype.hasOwnProperty; + +function extend(obj) { + var sources = Array.prototype.slice.call(arguments, 1), + i, len, source, key; + + for (i = 0, len = sources.length; i < len; i += 1) { + source = sources[i]; + if (!source) { continue; } + + for (key in source) { + if (hop.call(source, key)) { + obj[key] = source[key]; + } + } + } + + return obj; +} + + +/***/ }), + +/***/ "./node_modules/@polymer/app-route/app-location.js": +/*!*********************************************************!*\ + !*** ./node_modules/@polymer/app-route/app-location.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_location_iron_location_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-location/iron-location.js */ "./node_modules/@polymer/iron-location/iron-location.js"); +/* harmony import */ var _polymer_iron_location_iron_query_params_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-location/iron-query-params.js */ "./node_modules/@polymer/iron-location/iron-query-params.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/* harmony import */ var _app_route_converter_behavior_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./app-route-converter-behavior.js */ "./node_modules/@polymer/app-route/app-route-converter-behavior.js"); +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + + +/** +`app-location` is an element that provides synchronization between the +browser location bar and the state of an app. When created, `app-location` +elements will automatically watch the global location for changes. As changes +occur, `app-location` produces and updates an object called `route`. This +`route` object is suitable for passing into a `app-route`, and other similar +elements. + +An example of the public API of a route object that describes the URL +`https://elements.polymer-project.org/elements/app-location`: + + { + prefix: '', + path: '/elements/app-location' + } + +Example Usage: + + + + +As you can see above, the `app-location` element produces a `route` and that +property is then bound into the `app-route` element. The bindings are two- +directional, so when changes to the `route` object occur within `app-route`, +they automatically reflect back to the global location. + +### Hashes vs Paths + +By default `app-location` routes using the pathname portion of the URL. This has +broad browser support but it does require cooperation of the backend server. An +`app-location` can be configured to use the hash part of a URL instead using +the `use-hash-as-path` attribute, like so: + + + +### Integrating with other routing code + +There is no standard event that is fired when window.location is modified. +`app-location` fires a `location-changed` event on `window` when it updates the +location. It also listens for that same event, and re-reads the URL when it's +fired. This makes it very easy to interop with other routing code. + +So for example if you want to navigate to `/new_path` imperatively you could +call `window.location.pushState` or `window.location.replaceState` followed by +firing a `location-changed` event on `window`. i.e. + + window.history.pushState({}, null, '/new_path'); + window.dispatchEvent(new CustomEvent('location-changed')); + +@element app-location +@demo demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_3__.Polymer)({ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_4__.html)` + + + + + `, + + is: 'app-location', + + properties: { + /** + * A model representing the deserialized path through the route tree, as + * well as the current queryParams. + */ + route: { + type: Object, + notify: true, + }, + + /** + * In many scenarios, it is convenient to treat the `hash` as a stand-in + * alternative to the `path`. For example, if deploying an app to a static + * web server (e.g., Github Pages) - where one does not have control over + * server-side routing - it is usually a better experience to use the hash + * to represent paths through one's app. + * + * When this property is set to true, the `hash` will be used in place of + + * the `path` for generating a `route`. + */ + useHashAsPath: { + type: Boolean, + value: false, + }, + + /** + * A regexp that defines the set of URLs that should be considered part + * of this web app. + * + * Clicking on a link that matches this regex won't result in a full page + * navigation, but will instead just update the URL state in place. + * + * This regexp is given everything after the origin in an absolute + * URL. So to match just URLs that start with /search/ do: + * url-space-regex="^/search/" + * + * @type {string|RegExp} + */ + urlSpaceRegex: { + type: String, + notify: true, + }, + + /** + * A set of key/value pairs that are universally accessible to branches + * of the route tree. + */ + __queryParams: { + type: Object, + }, + + /** + * The pathname component of the current URL. + */ + __path: { + type: String, + }, + + /** + * The query string portion of the current URL. + */ + __query: { + type: String, + }, + + /** + * The hash portion of the current URL. + */ + __hash: { + type: String, + }, + + /** + * The route path, which will be either the hash or the path, depending + * on useHashAsPath. + */ + path: { + type: String, + observer: '__onPathChanged', + }, + + /** + * Whether or not the ready function has been called. + */ + _isReady: { + type: Boolean, + }, + + /** + * If the user was on a URL for less than `dwellTime` milliseconds, it + * won't be added to the browser's history, but instead will be + * replaced by the next entry. + * + * This is to prevent large numbers of entries from clogging up the + * user's browser history. Disable by setting to a negative number. + * + * See `iron-location` for more information. + */ + dwellTime: { + type: Number, + } + }, + + behaviors: [_app_route_converter_behavior_js__WEBPACK_IMPORTED_MODULE_5__.AppRouteConverterBehavior], + observers: ['__computeRoutePath(useHashAsPath, __hash, __path)'], + + ready: function() { + this._isReady = true; + }, + + __computeRoutePath: function() { + this.path = this.useHashAsPath ? this.__hash : this.__path; + }, + + __onPathChanged: function() { + if (!this._isReady) { + return; + } + + if (this.useHashAsPath) { + this.__hash = this.path; + } else { + this.__path = this.path; + } + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/app-route/app-route-converter-behavior.js": +/*!*************************************************************************!*\ + !*** ./node_modules/@polymer/app-route/app-route-converter-behavior.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ AppRouteConverterBehavior: () => (/* binding */ AppRouteConverterBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + +/** + * Provides bidirectional mapping between `path` and `queryParams` and a + * app-route compatible `route` object. + * + * For more information, see the docs for `app-route-converter`. + * + * @polymerBehavior + */ +const AppRouteConverterBehavior = { + properties: { + /** + * A model representing the deserialized path through the route tree, as + * well as the current queryParams. + * + * A route object is the kernel of the routing system. It is intended to + * be fed into consuming elements such as `app-route`. + * + * @type {?Object|undefined} + */ + route: { + type: Object, + notify: true, + }, + + /** + * A set of key/value pairs that are universally accessible to branches of + * the route tree. + * + * @type {?Object} + */ + queryParams: { + type: Object, + notify: true, + }, + + /** + * The serialized path through the route tree. This corresponds to the + * `window.location.pathname` value, and will update to reflect changes + * to that value. + */ + path: { + type: String, + notify: true, + } + }, + + observers: [ + '_locationChanged(path, queryParams)', + '_routeChanged(route.prefix, route.path)', + '_routeQueryParamsChanged(route.__queryParams)' + ], + + created: function() { + this.linkPaths('route.__queryParams', 'queryParams'); + this.linkPaths('queryParams', 'route.__queryParams'); + }, + + /** + * Handler called when the path or queryParams change. + */ + _locationChanged: function() { + if (this.route && this.route.path === this.path && + this.queryParams === this.route.__queryParams) { + return; + } + this.route = {prefix: '', path: this.path, __queryParams: this.queryParams}; + }, + + /** + * Handler called when the route prefix and route path change. + */ + _routeChanged: function() { + if (!this.route) { + return; + } + + this.path = this.route.prefix + this.route.path; + }, + + /** + * Handler called when the route queryParams change. + * + * @param {Object} queryParams A set of key/value pairs that are + * universally accessible to branches of the route tree. + */ + _routeQueryParamsChanged: function(queryParams) { + if (!this.route) { + return; + } + this.queryParams = queryParams; + } +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/app-route/app-route.js": +/*!******************************************************!*\ + !*** ./node_modules/@polymer/app-route/app-route.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + +/** +`app-route` is an element that enables declarative, self-describing routing +for a web app. + +In its typical usage, a `app-route` element consumes an object that describes +some state about the current route, via the `route` property. It then parses +that state using the `pattern` property, and produces two artifacts: some `data` +related to the `route`, and a `tail` that contains the rest of the `route` that +did not match. + +Here is a basic example, when used with `app-location`: + + + + + +In the above example, the `app-location` produces a `route` value. Then, the +`route.path` property is matched by comparing it to the `pattern` property. If +the `pattern` property matches `route.path`, the `app-route` will set or update +its `data` property with an object whose properties correspond to the parameters +in `pattern`. So, in the above example, if `route.path` was `'/about'`, the +value of `data` would be `{"page": "about"}`. + +The `tail` property represents the remaining part of the route state after the +`pattern` has been applied to a matching `route`. + +Here is another example, where `tail` is used: + + + + + + + +In the above example, there are two `app-route` elements. The first +`app-route` consumes a `route`. When the `route` is matched, the first +`app-route` also produces `routeData` from its `data`, and `subroute` from +its `tail`. The second `app-route` consumes the `subroute`, and when it +matches, it produces an object called `subrouteData` from its `data`. + +So, when `route.path` is `'/about'`, the `routeData` object will look like +this: `{ page: 'about' }` + +And `subrouteData` will be null. However, if `route.path` changes to +`'/article/123'`, the `routeData` object will look like this: +`{ page: 'article' }` + +And the `subrouteData` will look like this: `{ id: '123' }` + +`app-route` is responsive to bi-directional changes to the `data` objects +they produce. So, if `routeData.page` changed from `'article'` to `'about'`, +the `app-route` will update `route.path`. This in-turn will update the +`app-location`, and cause the global location bar to change its value. + +@element app-route +@demo demo/index.html +@demo demo/data-loading-demo.html +@demo demo/simple-demo.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__.Polymer)({ + is: 'app-route', + + properties: { + /** + * The URL component managed by this element. + */ + route: { + type: Object, + notify: true, + }, + + /** + * The pattern of slash-separated segments to match `route.path` against. + * + * For example the pattern "/foo" will match "/foo" or "/foo/bar" + * but not "/foobar". + * + * Path segments like `/:named` are mapped to properties on the `data` + * object. + */ + pattern: { + type: String, + }, + + /** + * The parameterized values that are extracted from the route as + * described by `pattern`. + */ + data: { + type: Object, + value: function() { + return {}; + }, + notify: true, + }, + + /** + * Auto activate route if path empty + */ + autoActivate: { + type: Boolean, + value: false, + }, + + _queryParamsUpdating: { + type: Boolean, + value: false, + }, + + /** + * @type {?Object} + */ + queryParams: { + type: Object, + value: function() { + return {}; + }, + notify: true, + }, + + /** + * The part of `route.path` NOT consumed by `pattern`. + */ + tail: { + type: Object, + value: function() { + return { + path: null, + prefix: null, + __queryParams: null, + }; + }, + notify: true, + }, + + /** + * Whether the current route is active. True if `route.path` matches the + * `pattern`, false otherwise. + */ + active: { + type: Boolean, + notify: true, + readOnly: true, + }, + + /** + * @type {?string} + */ + _matched: { + type: String, + value: '', + } + }, + + observers: [ + '__tryToMatch(route.path, pattern)', + '__updatePathOnDataChange(data.*)', + '__tailPathChanged(tail.path)', + '__routeQueryParamsChanged(route.__queryParams)', + '__tailQueryParamsChanged(tail.__queryParams)', + '__queryParamsChanged(queryParams.*)' + ], + + created: function() { + this.linkPaths('route.__queryParams', 'tail.__queryParams'); + this.linkPaths('tail.__queryParams', 'route.__queryParams'); + }, + + /** + * Deal with the query params object being assigned to wholesale. + */ + __routeQueryParamsChanged: function(queryParams) { + if (queryParams && this.tail) { + if (this.tail.__queryParams !== queryParams) { + this.set('tail.__queryParams', queryParams); + } + + if (!this.active || this._queryParamsUpdating) { + return; + } + + // Copy queryParams and track whether there are any differences compared + // to the existing query params. + var copyOfQueryParams = {}; + var anythingChanged = false; + for (var key in queryParams) { + copyOfQueryParams[key] = queryParams[key]; + if (anythingChanged || !this.queryParams || + queryParams[key] !== this.queryParams[key]) { + anythingChanged = true; + } + } + // Need to check whether any keys were deleted + for (var key in this.queryParams) { + if (anythingChanged || !(key in queryParams)) { + anythingChanged = true; + break; + } + } + + if (!anythingChanged) { + return; + } + this._queryParamsUpdating = true; + this.set('queryParams', copyOfQueryParams); + this._queryParamsUpdating = false; + } + }, + + __tailQueryParamsChanged: function(queryParams) { + if (queryParams && this.route && this.route.__queryParams != queryParams) { + this.set('route.__queryParams', queryParams); + } + }, + + __queryParamsChanged: function(changes) { + if (!this.active || this._queryParamsUpdating) { + return; + } + + this.set('route.__' + changes.path, changes.value); + }, + + __resetProperties: function() { + this._setActive(false); + this._matched = null; + }, + + __tryToMatch: function() { + if (!this.route) { + return; + } + + var path = this.route.path; + var pattern = this.pattern; + + if (this.autoActivate && path === '') { + path = '/'; + } + + if (!pattern) { + return; + } + + if (!path) { + this.__resetProperties(); + return; + } + + var remainingPieces = path.split('/'); + var patternPieces = pattern.split('/'); + + var matched = []; + var namedMatches = {}; + + for (var i = 0; i < patternPieces.length; i++) { + var patternPiece = patternPieces[i]; + if (!patternPiece && patternPiece !== '') { + break; + } + var pathPiece = remainingPieces.shift(); + + // We don't match this path. + if (!pathPiece && pathPiece !== '') { + this.__resetProperties(); + return; + } + matched.push(pathPiece); + + if (patternPiece.charAt(0) == ':') { + namedMatches[patternPiece.slice(1)] = pathPiece; + } else if (patternPiece !== pathPiece) { + this.__resetProperties(); + return; + } + } + + this._matched = matched.join('/'); + + // Properties that must be updated atomically. + var propertyUpdates = {}; + + // this.active + if (!this.active) { + propertyUpdates.active = true; + } + + // this.tail + var tailPrefix = this.route.prefix + this._matched; + var tailPath = remainingPieces.join('/'); + if (remainingPieces.length > 0) { + tailPath = '/' + tailPath; + } + if (!this.tail || this.tail.prefix !== tailPrefix || + this.tail.path !== tailPath) { + propertyUpdates.tail = { + prefix: tailPrefix, + path: tailPath, + __queryParams: this.route.__queryParams + }; + } + + // this.data + propertyUpdates.data = namedMatches; + this._dataInUrl = {}; + for (var key in namedMatches) { + this._dataInUrl[key] = namedMatches[key]; + } + + if (this.setProperties) { + // atomic update + this.setProperties(propertyUpdates, true); + } else { + this.__setMulti(propertyUpdates); + } + }, + + __tailPathChanged: function(path) { + if (!this.active) { + return; + } + var tailPath = path; + var newPath = this._matched; + if (tailPath) { + if (tailPath.charAt(0) !== '/') { + tailPath = '/' + tailPath; + } + newPath += tailPath; + } + this.set('route.path', newPath); + }, + + __updatePathOnDataChange: function() { + if (!this.route || !this.active) { + return; + } + var newPath = this.__getLink({}); + var oldPath = this.__getLink(this._dataInUrl); + if (newPath === oldPath) { + return; + } + this.set('route.path', newPath); + }, + + __getLink: function(overrideValues) { + var values = {tail: null}; + for (var key in this.data) { + values[key] = this.data[key]; + } + for (var key in overrideValues) { + values[key] = overrideValues[key]; + } + var patternPieces = this.pattern.split('/'); + var interp = patternPieces.map(function(value) { + if (value[0] == ':') { + value = values[value.slice(1)]; + } + return value; + }, this); + if (values.tail && values.tail.path) { + if (interp.length > 0 && values.tail.path.charAt(0) === '/') { + interp.push(values.tail.path.slice(1)); + } else { + interp.push(values.tail.path); + } + } + return interp.join('/'); + }, + + __setMulti: function(setObj) { + // HACK(rictic): skirting around 1.0's lack of a setMulti by poking at + // internal data structures. I would not advise that you copy this + // example. + // + // In the future this will be a feature of Polymer itself. + // See: https://github.com/Polymer/polymer/issues/3640 + // + // Hacking around with private methods like this is juggling footguns, + // and is likely to have unexpected and unsupported rough edges. + // + // Be ye so warned. + for (var property in setObj) { + this._propertySetter(property, setObj[property]); + } + // notify in a specific order + if (setObj.data !== undefined) { + this._pathEffector('data', this.data); + this._notifyChange('data'); + } + if (setObj.active !== undefined) { + this._pathEffector('active', this.active); + this._notifyChange('active'); + } + if (setObj.tail !== undefined) { + this._pathEffector('tail', this.tail); + this._notifyChange('tail'); + } + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/decorators/lib/decorators.js": +/*!************************************************************!*\ + !*** ./node_modules/@polymer/decorators/lib/decorators.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ computed: () => (/* binding */ computed), +/* harmony export */ customElement: () => (/* binding */ customElement), +/* harmony export */ listen: () => (/* binding */ listen), +/* harmony export */ observe: () => (/* binding */ observe), +/* harmony export */ property: () => (/* binding */ property), +/* harmony export */ query: () => (/* binding */ query), +/* harmony export */ queryAll: () => (/* binding */ queryAll) +/* harmony export */ }); +/** + * @license + * Copyright (c) 2016 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt The complete set of authors may be found + * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may + * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by + * Google as part of the polymer project is also subject to an additional IP + * rights grant found at http://polymer.github.io/PATENTS.txt + */ +/** + * A TypeScript class decorator factory that registers the class as a custom + * element. + * + * If `tagname` is provided, it will be used as the custom element name, and + * will be assigned to the class static `is` property. If `tagname` is omitted, + * the static `is` property of the class will be used instead. If neither exist, + * or if both exist but have different values (except in the case that the `is` + * property is not an own-property of the class), an exception is thrown. + */ +function customElement(tagname) { + return (class_) => { + if (tagname) { + // Only check that tag names match when `is` is our own property. It might + // be inherited from a superclass, in which case it's ok if they're + // different, and we'll override it with our own property below. + if (class_.hasOwnProperty('is')) { + if (tagname !== class_.is) { + throw new Error(`custom element tag names do not match: ` + + `(${tagname} !== ${class_.is})`); + } + } + else { + Object.defineProperty(class_, 'is', { value: tagname }); + } + } + // Throws if tag name is missing or invalid. + window.customElements.define(class_.is, class_); + }; +} +function createProperty(proto, name, options) { + if (!proto.constructor.hasOwnProperty('properties')) { + Object.defineProperty(proto.constructor, 'properties', { value: {} }); + } + proto.constructor.properties[name] = Object.assign({}, proto.constructor.properties[name], options); +} +/** + * A TypeScript property decorator factory that defines this as a Polymer + * property. + * + * This function must be invoked to return a decorator. + * + * @ExportDecoratedItems + */ +function property(options) { + return (proto, propName) => { + createProperty(proto, propName, options); + }; +} +/** + * A TypeScript property decorator factory that causes the decorated method to + * be called when a property changes. + * + * This function must be invoked to return a decorator. + * + * @ExportDecoratedItems + */ +function observe(...targets) { + return (proto, propName) => { + if (!proto.constructor.hasOwnProperty('observers')) { + Object.defineProperty(proto.constructor, 'observers', { value: [] }); + } + proto.constructor.observers.push(`${propName}(${targets.join(',')})`); + }; +} +/** + * A TypeScript accessor decorator factory that causes the decorated getter to + * be called when a set of dependencies change. The arguments of this decorator + * should be paths of the data dependencies as described + * [here](https://www.polymer-project.org/2.0/docs/devguide/observers#define-a-computed-property) + * The decorated getter should not have an associated setter. + * + * This function must be invoked to return a decorator. + * + * @ExportDecoratedItems + */ +function computed(firstTarget, ...moreTargets) { + return (proto, propName, descriptor) => { + const fnName = `__compute${propName}`; + Object.defineProperty(proto, fnName, { value: descriptor.get }); + descriptor.get = undefined; + const targets = [firstTarget, ...moreTargets].join(','); + createProperty(proto, propName, { computed: `${fnName}(${targets})` }); + }; +} +/** + * A TypeScript property decorator factory that converts a class property into + * a getter that executes a querySelector on the element's shadow root. + * + * By annotating the property with the correct type, elements can have + * type-checked access to internal elements. + * + * This function must be invoked to return a decorator. + */ +const query = _query((target, selector) => target.querySelector(selector)); +/** + * A TypeScript property decorator factory that converts a class property into + * a getter that executes a querySelectorAll on the element's shadow root. + * + * By annotating the property with the correct type, elements can have + * type-checked access to internal elements. The type should be NodeList + * with the correct type argument. + * + * This function must be invoked to return a decorator. + */ +const queryAll = _query((target, selector) => target.querySelectorAll(selector)); +/** + * Creates a decorator function that accepts a selector, and replaces a + * property with a getter than executes the selector with the given queryFn + * + * @param queryFn A function that executes a query with a selector + */ +function _query(queryFn) { + return (selector) => (proto, propName) => { + Object.defineProperty(proto, propName, { + get() { + return queryFn(this.shadowRoot, selector); + }, + enumerable: true, + configurable: true, + }); + }; +} +/** + * A TypeScript property decorator factory that causes the decorated method to + * be called when a imperative event is fired on the targeted element. `target` + * can be either a single element by id or element. + * + * You must apply the supplied DeclarativeEventListeners mixin to your element + * class for this decorator to function. + * + * https://www.polymer-project.org/2.0/docs/devguide/events#imperative-listeners + * + * @param eventName A string representing the event type to listen for + * @param target A single element by id or EventTarget to target + * + * @ExportDecoratedItems + */ +function listen(eventName, target) { + return (proto, methodName) => { + if (!proto.constructor._addDeclarativeEventListener) { + throw new Error(`Cannot add listener for ${eventName} because ` + + `DeclarativeEventListeners mixin was not applied to element.`); + } + proto.constructor._addDeclarativeEventListener(target, eventName, proto[methodName]); + }; +} +//# sourceMappingURL=decorators.js.map + +/***/ }), + +/***/ "./node_modules/@polymer/font-roboto/roboto.js": +/*!*****************************************************!*\ + !*** ./node_modules/@polymer/font-roboto/roboto.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + // ensure this file can only be parsed as a module. + +// Give the user the choice to opt out of font loading. +if (false) {} + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-a11y-announcer/iron-a11y-announcer.js": +/*!**************************************************************************!*\ + !*** ./node_modules/@polymer/iron-a11y-announcer/iron-a11y-announcer.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronA11yAnnouncer: () => (/* binding */ IronA11yAnnouncer) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + +/** +`iron-a11y-announcer` is a singleton element that is intended to add a11y +to features that require on-demand announcement from screen readers. In +order to make use of the announcer, it is best to request its availability +in the announcing element. + +Example: + + Polymer({ + + is: 'x-chatty', + + attached: function() { + // This will create the singleton element if it has not + // been created yet: + Polymer.IronA11yAnnouncer.requestAvailability(); + } + }); + +After the `iron-a11y-announcer` has been made available, elements can +make announces by firing bubbling `iron-announce` events. + +Example: + + this.fire('iron-announce', { + text: 'This is an announcement!' + }, { bubbles: true }); + +Note: announcements are only audible if you have a screen reader enabled. + +@demo demo/index.html +*/ +const IronA11yAnnouncer = (0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__.Polymer)({ + /** @override */ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_2__.html)` + +
[[_text]]
+`, + + is: 'iron-a11y-announcer', + + properties: { + + /** + * The value of mode is used to set the `aria-live` attribute + * for the element that will be announced. Valid values are: `off`, + * `polite` and `assertive`. + */ + mode: {type: String, value: 'polite'}, + + /** + * The timeout on refreshing the announcement text. Larger timeouts are + * needed for certain screen readers to re-announce the same message. + */ + timeout: {type: Number, value: 150}, + + _text: {type: String, value: ''}, + }, + + /** @override */ + created: function() { + if (!IronA11yAnnouncer.instance) { + IronA11yAnnouncer.instance = this; + } + + document.addEventListener('iron-announce', this._onIronAnnounce.bind(this)); + }, + + /** + * Cause a text string to be announced by screen readers. + * + * @param {string} text The text that should be announced. + */ + announce: function(text) { + this._text = ''; + this.async(function() { + this._text = text; + }, this.timeout); + }, + + _onIronAnnounce: function(event) { + if (event.detail && event.detail.text) { + this.announce(event.detail.text); + } + } +}); + +IronA11yAnnouncer.instance = null; + +IronA11yAnnouncer.requestAvailability = function() { + if (!IronA11yAnnouncer.instance) { + IronA11yAnnouncer.instance = document.createElement('iron-a11y-announcer'); + } + + if (document.body) { + document.body.appendChild(IronA11yAnnouncer.instance); + } else { + document.addEventListener('load', function() { + document.body.appendChild(IronA11yAnnouncer.instance); + }); + } +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js": +/*!**********************************************************************************!*\ + !*** ./node_modules/@polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js ***! + \**********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronA11yKeysBehavior: () => (/* binding */ IronA11yKeysBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + +/** + * Chrome uses an older version of DOM Level 3 Keyboard Events + * + * Most keys are labeled as text, but some are Unicode codepoints. + * Values taken from: + * http://www.w3.org/TR/2007/WD-DOM-Level-3-Events-20071221/keyset.html#KeySet-Set + */ +var KEY_IDENTIFIER = { + 'U+0008': 'backspace', + 'U+0009': 'tab', + 'U+001B': 'esc', + 'U+0020': 'space', + 'U+007F': 'del' +}; + +/** + * Special table for KeyboardEvent.keyCode. + * KeyboardEvent.keyIdentifier is better, and KeyBoardEvent.key is even better + * than that. + * + * Values from: + * https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent.keyCode#Value_of_keyCode + */ +var KEY_CODE = { + 8: 'backspace', + 9: 'tab', + 13: 'enter', + 27: 'esc', + 33: 'pageup', + 34: 'pagedown', + 35: 'end', + 36: 'home', + 32: 'space', + 37: 'left', + 38: 'up', + 39: 'right', + 40: 'down', + 46: 'del', + 106: '*' +}; + +/** + * MODIFIER_KEYS maps the short name for modifier keys used in a key + * combo string to the property name that references those same keys + * in a KeyboardEvent instance. + */ +var MODIFIER_KEYS = { + 'shift': 'shiftKey', + 'ctrl': 'ctrlKey', + 'alt': 'altKey', + 'meta': 'metaKey' +}; + +/** + * KeyboardEvent.key is mostly represented by printable character made by + * the keyboard, with unprintable keys labeled nicely. + * + * However, on OS X, Alt+char can make a Unicode character that follows an + * Apple-specific mapping. In this case, we fall back to .keyCode. + */ +var KEY_CHAR = /[a-z0-9*]/; + +/** + * Matches a keyIdentifier string. + */ +var IDENT_CHAR = /U\+/; + +/** + * Matches arrow keys in Gecko 27.0+ + */ +var ARROW_KEY = /^arrow/; + +/** + * Matches space keys everywhere (notably including IE10's exceptional name + * `spacebar`). + */ +var SPACE_KEY = /^space(bar)?/; + +/** + * Matches ESC key. + * + * Value from: http://w3c.github.io/uievents-key/#key-Escape + */ +var ESC_KEY = /^escape$/; + +/** + * Transforms the key. + * @param {string} key The KeyBoardEvent.key + * @param {Boolean} [noSpecialChars] Limits the transformation to + * alpha-numeric characters. + */ +function transformKey(key, noSpecialChars) { + var validKey = ''; + if (key) { + var lKey = key.toLowerCase(); + if (lKey === ' ' || SPACE_KEY.test(lKey)) { + validKey = 'space'; + } else if (ESC_KEY.test(lKey)) { + validKey = 'esc'; + } else if (lKey.length == 1) { + if (!noSpecialChars || KEY_CHAR.test(lKey)) { + validKey = lKey; + } + } else if (ARROW_KEY.test(lKey)) { + validKey = lKey.replace('arrow', ''); + } else if (lKey == 'multiply') { + // numpad '*' can map to Multiply on IE/Windows + validKey = '*'; + } else { + validKey = lKey; + } + } + return validKey; +} + +function transformKeyIdentifier(keyIdent) { + var validKey = ''; + if (keyIdent) { + if (keyIdent in KEY_IDENTIFIER) { + validKey = KEY_IDENTIFIER[keyIdent]; + } else if (IDENT_CHAR.test(keyIdent)) { + keyIdent = parseInt(keyIdent.replace('U+', '0x'), 16); + validKey = String.fromCharCode(keyIdent).toLowerCase(); + } else { + validKey = keyIdent.toLowerCase(); + } + } + return validKey; +} + +function transformKeyCode(keyCode) { + var validKey = ''; + if (Number(keyCode)) { + if (keyCode >= 65 && keyCode <= 90) { + // ascii a-z + // lowercase is 32 offset from uppercase + validKey = String.fromCharCode(32 + keyCode); + } else if (keyCode >= 112 && keyCode <= 123) { + // function keys f1-f12 + validKey = 'f' + (keyCode - 112 + 1); + } else if (keyCode >= 48 && keyCode <= 57) { + // top 0-9 keys + validKey = String(keyCode - 48); + } else if (keyCode >= 96 && keyCode <= 105) { + // num pad 0-9 + validKey = String(keyCode - 96); + } else { + validKey = KEY_CODE[keyCode]; + } + } + return validKey; +} + +/** + * Calculates the normalized key for a KeyboardEvent. + * @param {KeyboardEvent} keyEvent + * @param {Boolean} [noSpecialChars] Set to true to limit keyEvent.key + * transformation to alpha-numeric chars. This is useful with key + * combinations like shift + 2, which on FF for MacOS produces + * keyEvent.key = @ + * To get 2 returned, set noSpecialChars = true + * To get @ returned, set noSpecialChars = false + */ +function normalizedKeyForEvent(keyEvent, noSpecialChars) { + // Fall back from .key, to .detail.key for artifical keyboard events, + // and then to deprecated .keyIdentifier and .keyCode. + if (keyEvent.key) { + return transformKey(keyEvent.key, noSpecialChars); + } + if (keyEvent.detail && keyEvent.detail.key) { + return transformKey(keyEvent.detail.key, noSpecialChars); + } + return transformKeyIdentifier(keyEvent.keyIdentifier) || + transformKeyCode(keyEvent.keyCode) || ''; +} + +function keyComboMatchesEvent(keyCombo, event) { + // For combos with modifiers we support only alpha-numeric keys + var keyEvent = normalizedKeyForEvent(event, keyCombo.hasModifiers); + return keyEvent === keyCombo.key && + (!keyCombo.hasModifiers || + (!!event.shiftKey === !!keyCombo.shiftKey && + !!event.ctrlKey === !!keyCombo.ctrlKey && + !!event.altKey === !!keyCombo.altKey && + !!event.metaKey === !!keyCombo.metaKey)); +} + +function parseKeyComboString(keyComboString) { + if (keyComboString.length === 1) { + return {combo: keyComboString, key: keyComboString, event: 'keydown'}; + } + return keyComboString.split('+') + .reduce(function(parsedKeyCombo, keyComboPart) { + var eventParts = keyComboPart.split(':'); + var keyName = eventParts[0]; + var event = eventParts[1]; + + if (keyName in MODIFIER_KEYS) { + parsedKeyCombo[MODIFIER_KEYS[keyName]] = true; + parsedKeyCombo.hasModifiers = true; + } else { + parsedKeyCombo.key = keyName; + parsedKeyCombo.event = event || 'keydown'; + } + + return parsedKeyCombo; + }, {combo: keyComboString.split(':').shift()}); +} + +function parseEventString(eventString) { + return eventString.trim().split(' ').map(function(keyComboString) { + return parseKeyComboString(keyComboString); + }); +} + +/** + * `Polymer.IronA11yKeysBehavior` provides a normalized interface for processing + * keyboard commands that pertain to [WAI-ARIA best + * practices](http://www.w3.org/TR/wai-aria-practices/#kbd_general_binding). The + * element takes care of browser differences with respect to Keyboard events and + * uses an expressive syntax to filter key presses. + * + * Use the `keyBindings` prototype property to express what combination of keys + * will trigger the callback. A key binding has the format + * `"KEY+MODIFIER:EVENT": "callback"` (`"KEY": "callback"` or + * `"KEY:EVENT": "callback"` are valid as well). Some examples: + * + * keyBindings: { + * 'space': '_onKeydown', // same as 'space:keydown' + * 'shift+tab': '_onKeydown', + * 'enter:keypress': '_onKeypress', + * 'esc:keyup': '_onKeyup' + * } + * + * The callback will receive with an event containing the following information + * in `event.detail`: + * + * _onKeydown: function(event) { + * console.log(event.detail.combo); // KEY+MODIFIER, e.g. "shift+tab" + * console.log(event.detail.key); // KEY only, e.g. "tab" + * console.log(event.detail.event); // EVENT, e.g. "keydown" + * console.log(event.detail.keyboardEvent); // the original KeyboardEvent + * } + * + * Use the `keyEventTarget` attribute to set up event handlers on a specific + * node. + * + * See the [demo source + * code](https://github.com/PolymerElements/iron-a11y-keys-behavior/blob/master/demo/x-key-aware.html) + * for an example. + * + * @demo demo/index.html + * @polymerBehavior + */ +const IronA11yKeysBehavior = { + properties: { + /** + * The EventTarget that will be firing relevant KeyboardEvents. Set it to + * `null` to disable the listeners. + * @type {?EventTarget} + */ + keyEventTarget: { + type: Object, + value: function() { + return this; + } + }, + + /** + * If true, this property will cause the implementing element to + * automatically stop propagation on any handled KeyboardEvents. + */ + stopKeyboardEventPropagation: {type: Boolean, value: false}, + + _boundKeyHandlers: { + type: Array, + value: function() { + return []; + } + }, + + // We use this due to a limitation in IE10 where instances will have + // own properties of everything on the "prototype". + _imperativeKeyBindings: { + type: Object, + value: function() { + return {}; + } + } + }, + + observers: ['_resetKeyEventListeners(keyEventTarget, _boundKeyHandlers)'], + + + /** + * To be used to express what combination of keys will trigger the relative + * callback. e.g. `keyBindings: { 'esc': '_onEscPressed'}` + * @type {!Object} + */ + keyBindings: {}, + + registered: function() { + this._prepKeyBindings(); + }, + + attached: function() { + this._listenKeyEventListeners(); + }, + + detached: function() { + this._unlistenKeyEventListeners(); + }, + + /** + * Can be used to imperatively add a key binding to the implementing + * element. This is the imperative equivalent of declaring a keybinding + * in the `keyBindings` prototype property. + * + * @param {string} eventString + * @param {string} handlerName + */ + addOwnKeyBinding: function(eventString, handlerName) { + this._imperativeKeyBindings[eventString] = handlerName; + this._prepKeyBindings(); + this._resetKeyEventListeners(); + }, + + /** + * When called, will remove all imperatively-added key bindings. + */ + removeOwnKeyBindings: function() { + this._imperativeKeyBindings = {}; + this._prepKeyBindings(); + this._resetKeyEventListeners(); + }, + + /** + * Returns true if a keyboard event matches `eventString`. + * + * @param {KeyboardEvent} event + * @param {string} eventString + * @return {boolean} + */ + keyboardEventMatchesKeys: function(event, eventString) { + var keyCombos = parseEventString(eventString); + for (var i = 0; i < keyCombos.length; ++i) { + if (keyComboMatchesEvent(keyCombos[i], event)) { + return true; + } + } + return false; + }, + + _collectKeyBindings: function() { + var keyBindings = this.behaviors.map(function(behavior) { + return behavior.keyBindings; + }); + + if (keyBindings.indexOf(this.keyBindings) === -1) { + keyBindings.push(this.keyBindings); + } + + return keyBindings; + }, + + _prepKeyBindings: function() { + this._keyBindings = {}; + + this._collectKeyBindings().forEach(function(keyBindings) { + for (var eventString in keyBindings) { + this._addKeyBinding(eventString, keyBindings[eventString]); + } + }, this); + + for (var eventString in this._imperativeKeyBindings) { + this._addKeyBinding( + eventString, this._imperativeKeyBindings[eventString]); + } + + // Give precedence to combos with modifiers to be checked first. + for (var eventName in this._keyBindings) { + this._keyBindings[eventName].sort(function(kb1, kb2) { + var b1 = kb1[0].hasModifiers; + var b2 = kb2[0].hasModifiers; + return (b1 === b2) ? 0 : b1 ? -1 : 1; + }) + } + }, + + _addKeyBinding: function(eventString, handlerName) { + parseEventString(eventString).forEach(function(keyCombo) { + this._keyBindings[keyCombo.event] = + this._keyBindings[keyCombo.event] || []; + + this._keyBindings[keyCombo.event].push([keyCombo, handlerName]); + }, this); + }, + + _resetKeyEventListeners: function() { + this._unlistenKeyEventListeners(); + + if (this.isAttached) { + this._listenKeyEventListeners(); + } + }, + + _listenKeyEventListeners: function() { + if (!this.keyEventTarget) { + return; + } + Object.keys(this._keyBindings).forEach(function(eventName) { + var keyBindings = this._keyBindings[eventName]; + var boundKeyHandler = this._onKeyBindingEvent.bind(this, keyBindings); + + this._boundKeyHandlers.push( + [this.keyEventTarget, eventName, boundKeyHandler]); + + this.keyEventTarget.addEventListener(eventName, boundKeyHandler); + }, this); + }, + + _unlistenKeyEventListeners: function() { + var keyHandlerTuple; + var keyEventTarget; + var eventName; + var boundKeyHandler; + + while (this._boundKeyHandlers.length) { + // My kingdom for block-scope binding and destructuring assignment.. + keyHandlerTuple = this._boundKeyHandlers.pop(); + keyEventTarget = keyHandlerTuple[0]; + eventName = keyHandlerTuple[1]; + boundKeyHandler = keyHandlerTuple[2]; + + keyEventTarget.removeEventListener(eventName, boundKeyHandler); + } + }, + + _onKeyBindingEvent: function(keyBindings, event) { + if (this.stopKeyboardEventPropagation) { + event.stopPropagation(); + } + + // if event has been already prevented, don't do anything + if (event.defaultPrevented) { + return; + } + + for (var i = 0; i < keyBindings.length; i++) { + var keyCombo = keyBindings[i][0]; + var handlerName = keyBindings[i][1]; + if (keyComboMatchesEvent(keyCombo, event)) { + this._triggerKeyHandler(keyCombo, handlerName, event); + // exit the loop if eventDefault was prevented + if (event.defaultPrevented) { + return; + } + } + } + }, + + _triggerKeyHandler: function(keyCombo, handlerName, keyboardEvent) { + var detail = Object.create(keyCombo); + detail.keyboardEvent = keyboardEvent; + var event = + new CustomEvent(keyCombo.event, {detail: detail, cancelable: true}); + this[handlerName].call(this, event); + if (event.defaultPrevented) { + keyboardEvent.preventDefault(); + } + } +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-ajax/iron-ajax.js": +/*!******************************************************!*\ + !*** ./node_modules/@polymer/iron-ajax/iron-ajax.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _iron_request_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./iron-request.js */ "./node_modules/@polymer/iron-ajax/iron-request.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + +/** +The `iron-ajax` element exposes network request functionality. + + + +With `auto` set to `true`, the element performs a request whenever +its `url`, `params` or `body` properties are changed. Automatically generated +requests will be debounced in the case that multiple attributes are changed +sequentially. + +Note: The `params` attribute must be double quoted JSON. + +You can trigger a request explicitly by calling `generateRequest` on the +element. + +@demo demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__.Polymer)({ + + is: 'iron-ajax', + + /** + * Fired before a request is sent. + * + * @event iron-ajax-presend + */ + + /** + * Fired when a request is sent. + * + * @event request + */ + + /** + * Fired when a request is sent. + * + * @event iron-ajax-request + */ + + /** + * Fired when a response is received. + * + * @event response + */ + + /** + * Fired when a response is received. + * + * @event iron-ajax-response + */ + + /** + * Fired when an error is received. + * + * @event error + */ + + /** + * Fired when an error is received. + * + * @event iron-ajax-error + */ + + hostAttributes: {hidden: true}, + + properties: { + /** + * The URL target of the request. + */ + url: {type: String}, + + /** + * An object that contains query parameters to be appended to the + * specified `url` when generating a request. If you wish to set the body + * content when making a POST request, you should use the `body` property + * instead. + */ + params: { + type: Object, + value: function() { + return {}; + } + }, + + /** + * The HTTP method to use such as 'GET', 'POST', 'PUT', or 'DELETE'. + * Default is 'GET'. + */ + method: {type: String, value: 'GET'}, + + /** + * HTTP request headers to send. + * + * Example: + * + * + * + * Note: setting a `Content-Type` header here will override the value + * specified by the `contentType` property of this element. + */ + headers: { + type: Object, + value: function() { + return {}; + } + }, + + /** + * Content type to use when sending data. If the `contentType` property + * is set and a `Content-Type` header is specified in the `headers` + * property, the `headers` property value will take precedence. + * + * Varies the handling of the `body` param. + */ + contentType: {type: String, value: null}, + + /** + * Body content to send with the request, typically used with "POST" + * requests. + * + * If body is a string it will be sent unmodified. + * + * If Content-Type is set to a value listed below, then + * the body will be encoded accordingly. + * + * * `content-type="application/json"` + * * body is encoded like `{"foo":"bar baz","x":1}` + * * `content-type="application/x-www-form-urlencoded"` + * * body is encoded like `foo=bar+baz&x=1` + * + * Otherwise the body will be passed to the browser unmodified, and it + * will handle any encoding (e.g. for FormData, Blob, ArrayBuffer). + * + * @type + * (ArrayBuffer|ArrayBufferView|Blob|Document|FormData|null|string|undefined|Object) + */ + body: {type: Object, value: null}, + + /** + * Toggle whether XHR is synchronous or asynchronous. Don't change this + * to true unless You Know What You Are Doing™. + */ + sync: {type: Boolean, value: false}, + + /** + * Specifies what data to store in the `response` property, and + * to deliver as `event.detail.response` in `response` events. + * + * One of: + * + * `text`: uses `XHR.responseText`. + * + * `xml`: uses `XHR.responseXML`. + * + * `json`: uses `XHR.responseText` parsed as JSON. + * + * `arraybuffer`: uses `XHR.response`. + * + * `blob`: uses `XHR.response`. + * + * `document`: uses `XHR.response`. + */ + handleAs: {type: String, value: 'json'}, + + /** + * Set the withCredentials flag on the request. + */ + withCredentials: {type: Boolean, value: false}, + + /** + * Set the timeout flag on the request. + */ + timeout: {type: Number, value: 0}, + + /** + * If true, automatically performs an Ajax request when either `url` or + * `params` changes. + */ + auto: {type: Boolean, value: false}, + + /** + * If true, error messages will automatically be logged to the console. + */ + verbose: {type: Boolean, value: false}, + + /** + * The most recent request made by this iron-ajax element. + * + * @type {Object|undefined} + */ + lastRequest: {type: Object, notify: true, readOnly: true}, + + /** + * The `progress` property of this element's `lastRequest`. + * + * @type {Object|undefined} + */ + lastProgress: {type: Object, notify: true, readOnly: true}, + + /** + * True while lastRequest is in flight. + */ + loading: {type: Boolean, notify: true, readOnly: true}, + + /** + * lastRequest's response. + * + * Note that lastResponse and lastError are set when lastRequest finishes, + * so if loading is true, then lastResponse and lastError will correspond + * to the result of the previous request. + * + * The type of the response is determined by the value of `handleAs` at + * the time that the request was generated. + * + * @type {Object} + */ + lastResponse: {type: Object, notify: true, readOnly: true}, + + /** + * lastRequest's error, if any. + * + * @type {Object} + */ + lastError: {type: Object, notify: true, readOnly: true}, + + /** + * An Array of all in-flight requests originating from this iron-ajax + * element. + */ + activeRequests: { + type: Array, + notify: true, + readOnly: true, + value: function() { + return []; + } + }, + + /** + * Length of time in milliseconds to debounce multiple automatically + * generated requests. + */ + debounceDuration: {type: Number, value: 0, notify: true}, + + /** + * Prefix to be stripped from a JSON response before parsing it. + * + * In order to prevent an attack using CSRF with Array responses + * (http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx/) + * many backends will mitigate this by prefixing all JSON response bodies + * with a string that would be nonsensical to a JavaScript parser. + * + */ + jsonPrefix: {type: String, value: ''}, + + /** + * By default, iron-ajax's events do not bubble. Setting this attribute will + * cause its request and response events as well as its iron-ajax-request, + * -response, and -error events to bubble to the window object. The vanilla + * error event never bubbles when using shadow dom even if this.bubbles is + * true because a scoped flag is not passed with it (first link) and because + * the shadow dom spec did not used to allow certain events, including + * events named error, to leak outside of shadow trees (second link). + * https://www.w3.org/TR/shadow-dom/#scoped-flag + * https://www.w3.org/TR/2015/WD-shadow-dom-20151215/#events-that-are-not-leaked-into-ancestor-trees + */ + bubbles: {type: Boolean, value: false}, + + /** + * Changes the [`completes`](iron-request#property-completes) promise chain + * from `generateRequest` to reject with an object + * containing the original request, as well an error message. + * If false (default), the promise rejects with an error message only. + */ + rejectWithRequest: {type: Boolean, value: false}, + + _boundHandleResponse: { + type: Function, + value: function() { + return this._handleResponse.bind(this); + } + } + }, + + observers: + ['_requestOptionsChanged(url, method, params.*, headers, contentType, ' + + 'body, sync, handleAs, jsonPrefix, withCredentials, timeout, auto)'], + + created: function() { + this._boundOnProgressChanged = this._onProgressChanged.bind(this); + }, + + /** + * The query string that should be appended to the `url`, serialized from + * the current value of `params`. + * + * @return {string} + */ + get queryString() { + var queryParts = []; + var param; + var value; + + for (param in this.params) { + value = this.params[param]; + param = window.encodeURIComponent(param); + + if (Array.isArray(value)) { + for (var i = 0; i < value.length; i++) { + queryParts.push(param + '=' + window.encodeURIComponent(value[i])); + } + } else if (value !== null) { + queryParts.push(param + '=' + window.encodeURIComponent(value)); + } else { + queryParts.push(param); + } + } + + return queryParts.join('&'); + }, + + /** + * The `url` with query string (if `params` are specified), suitable for + * providing to an `iron-request` instance. + * + * @return {string} + */ + get requestUrl() { + var queryString = this.queryString; + var url = this.url || ''; + + if (queryString) { + var bindingChar = url.indexOf('?') >= 0 ? '&' : '?'; + return url + bindingChar + queryString; + } + + return url; + }, + + /** + * An object that maps header names to header values, first applying the + * the value of `Content-Type` and then overlaying the headers specified + * in the `headers` property. + * + * @return {Object} + */ + get requestHeaders() { + var headers = {}; + var contentType = this.contentType; + if (contentType == null && (typeof this.body === 'string')) { + contentType = 'application/x-www-form-urlencoded'; + } + if (contentType) { + headers['content-type'] = contentType; + } + var header; + + if (typeof this.headers === 'object') { + for (header in this.headers) { + headers[header] = this.headers[header].toString(); + } + } + + return headers; + }, + + _onProgressChanged: function(event) { + this._setLastProgress(event.detail.value); + }, + + /** + * Request options suitable for generating an `iron-request` instance based + * on the current state of the `iron-ajax` instance's properties. + * + * @return {{ + * url: string, + * method: (string|undefined), + * async: (boolean|undefined), + * body: + * (ArrayBuffer|ArrayBufferView|Blob|Document|FormData|null|string|undefined|Object), + * headers: (Object|undefined), + * handleAs: (string|undefined), + * jsonPrefix: (string|undefined), + * withCredentials: (boolean|undefined)}} + */ + toRequestOptions: function() { + return { + url: this.requestUrl || '', + method: this.method, + headers: this.requestHeaders, + body: this.body, + async: !this.sync, + handleAs: this.handleAs, + jsonPrefix: this.jsonPrefix, + withCredentials: this.withCredentials, + timeout: this.timeout, + rejectWithRequest: this.rejectWithRequest, + }; + }, + + /** + * Performs an AJAX request to the specified URL. + * + * @return {!IronRequestElement} + */ + generateRequest: function() { + var request = /** @type {!IronRequestElement} */ ( + document.createElement('iron-request')); + var requestOptions = this.toRequestOptions(); + + this.push('activeRequests', request); + + request.completes.then(this._boundHandleResponse) + .catch(this._handleError.bind(this, request)) + .then(this._discardRequest.bind(this, request)); + + var evt = this.fire( + 'iron-ajax-presend', + {request: request, options: requestOptions}, + {bubbles: this.bubbles, cancelable: true}); + + if (evt.defaultPrevented) { + request.abort(); + request.rejectCompletes(request); + return request; + } + + if (this.lastRequest) { + this.lastRequest.removeEventListener( + 'iron-request-progress-changed', this._boundOnProgressChanged); + } + + request.addEventListener( + 'iron-request-progress-changed', this._boundOnProgressChanged); + + request.send(requestOptions); + this._setLastProgress(null); + this._setLastRequest(request); + this._setLoading(true); + + this.fire( + 'request', + {request: request, options: requestOptions}, + {bubbles: this.bubbles, composed: true}); + + this.fire( + 'iron-ajax-request', + {request: request, options: requestOptions}, + {bubbles: this.bubbles, composed: true}); + + return request; + }, + + _handleResponse: function(request) { + if (request === this.lastRequest) { + this._setLastResponse(request.response); + this._setLastError(null); + this._setLoading(false); + } + this.fire('response', request, {bubbles: this.bubbles, composed: true}); + this.fire( + 'iron-ajax-response', request, {bubbles: this.bubbles, composed: true}); + }, + + _handleError: function(request, error) { + if (this.verbose) { + _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_2__.Base._error(error); + } + + if (request === this.lastRequest) { + this._setLastError({ + request: request, + error: error, + status: request.xhr.status, + statusText: request.xhr.statusText, + response: request.xhr.response + }); + this._setLastResponse(null); + this._setLoading(false); + } + + // Tests fail if this goes after the normal this.fire('error', ...) + this.fire( + 'iron-ajax-error', + {request: request, error: error}, + {bubbles: this.bubbles, composed: true}); + + this.fire( + 'error', + {request: request, error: error}, + {bubbles: this.bubbles, composed: true}); + }, + + _discardRequest: function(request) { + var requestIndex = this.activeRequests.indexOf(request); + + if (requestIndex > -1) { + this.splice('activeRequests', requestIndex, 1); + } + }, + + _requestOptionsChanged: function() { + this.debounce('generate-request', function() { + if (this.url == null) { + return; + } + + if (this.auto) { + this.generateRequest(); + } + }, this.debounceDuration); + }, + +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-ajax/iron-request.js": +/*!*********************************************************!*\ + !*** ./node_modules/@polymer/iron-ajax/iron-request.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + +/* +iron-request can be used to perform XMLHttpRequests. + + + ... + this.$.xhr.send({url: url, body: params}); +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_0__.Polymer)({ + is: 'iron-request', + + hostAttributes: {hidden: true}, + + properties: { + + /** + * A reference to the XMLHttpRequest instance used to generate the + * network request. + * + * @type {XMLHttpRequest} + */ + xhr: { + type: Object, + notify: true, + readOnly: true, + value: function() { + return new XMLHttpRequest(); + } + }, + + /** + * A reference to the parsed response body, if the `xhr` has completely + * resolved. + * + * @type {*} + * @default null + */ + response: { + type: Object, + notify: true, + readOnly: true, + value: function() { + return null; + } + }, + + /** + * A reference to the status code, if the `xhr` has completely resolved. + */ + status: {type: Number, notify: true, readOnly: true, value: 0}, + + /** + * A reference to the status text, if the `xhr` has completely resolved. + */ + statusText: {type: String, notify: true, readOnly: true, value: ''}, + + /** + * A promise that resolves when the `xhr` response comes back, or rejects + * if there is an error before the `xhr` completes. + * The resolve callback is called with the original request as an argument. + * By default, the reject callback is called with an `Error` as an argument. + * If `rejectWithRequest` is true, the reject callback is called with an + * object with two keys: `request`, the original request, and `error`, the + * error object. + * + * @type {Promise} + */ + completes: { + type: Object, + readOnly: true, + notify: true, + value: function() { + return new Promise(function(resolve, reject) { + this.resolveCompletes = resolve; + this.rejectCompletes = reject; + }.bind(this)); + } + }, + + /** + * An object that contains progress information emitted by the XHR if + * available. + * + * @default {} + */ + progress: { + type: Object, + notify: true, + readOnly: true, + value: function() { + return {}; + } + }, + + /** + * Aborted will be true if an abort of the request is attempted. + */ + aborted: { + type: Boolean, + notify: true, + readOnly: true, + value: false, + }, + + /** + * Errored will be true if the browser fired an error event from the + * XHR object (mainly network errors). + */ + errored: {type: Boolean, notify: true, readOnly: true, value: false}, + + /** + * TimedOut will be true if the XHR threw a timeout event. + */ + timedOut: {type: Boolean, notify: true, readOnly: true, value: false} + }, + + /** + * Succeeded is true if the request succeeded. The request succeeded if it + * loaded without error, wasn't aborted, and the status code is ≥ 200, and + * < 300, or if the status code is 0. + * + * The status code 0 is accepted as a success because some schemes - e.g. + * file:// - don't provide status codes. + * + * @return {boolean} + */ + get succeeded() { + if (this.errored || this.aborted || this.timedOut) { + return false; + } + var status = this.xhr.status || 0; + + // Note: if we are using the file:// protocol, the status code will be 0 + // for all outcomes (successful or otherwise). + return status === 0 || (status >= 200 && status < 300); + }, + + /** + * Sends an HTTP request to the server and returns a promise (see the + * `completes` property for details). + * + * The handling of the `body` parameter will vary based on the Content-Type + * header. See the docs for iron-ajax's `body` property for details. + * + * @param {{ + * url: string, + * method: (string|undefined), + * async: (boolean|undefined), + * body: + * (ArrayBuffer|ArrayBufferView|Blob|Document|FormData|null|string|undefined|Object), + * headers: (Object|undefined), + * handleAs: (string|undefined), + * jsonPrefix: (string|undefined), + * withCredentials: (boolean|undefined), + * timeout: (number|undefined), + * rejectWithRequest: (boolean|undefined)}} options - + * - url The url to which the request is sent. + * - method The HTTP method to use, default is GET. + * - async By default, all requests are sent asynchronously. To send + * synchronous requests, set to false. + * - body The content for the request body for POST method. + * - headers HTTP request headers. + * - handleAs The response type. Default is 'text'. + * - withCredentials Whether or not to send credentials on the request. + * Default is false. + * - timeout - Timeout for request, in milliseconds. + * - rejectWithRequest Set to true to include the request object with + * promise rejections. + * @return {Promise} + */ + send: function(options) { + var xhr = this.xhr; + + if (xhr.readyState > 0) { + return null; + } + + xhr.addEventListener('progress', function(progress) { + this._setProgress({ + lengthComputable: progress.lengthComputable, + loaded: progress.loaded, + total: progress.total + }); + + // Webcomponents v1 spec does not fire *-changed events when not connected + this.fire('iron-request-progress-changed', {value: this.progress}); + }.bind(this)) + + xhr.addEventListener('error', function(error) { + this._setErrored(true); + this._updateStatus(); + var response = + options.rejectWithRequest ? {error: error, request: this} : error; + this.rejectCompletes(response); + }.bind(this)); + + xhr.addEventListener('timeout', function(error) { + this._setTimedOut(true); + this._updateStatus(); + var response = + options.rejectWithRequest ? {error: error, request: this} : error; + this.rejectCompletes(response); + }.bind(this)); + + xhr.addEventListener('abort', function() { + this._setAborted(true); + this._updateStatus(); + var error = new Error('Request aborted.'); + var response = + options.rejectWithRequest ? {error: error, request: this} : error; + this.rejectCompletes(response); + }.bind(this)); + + // Called after all of the above. + xhr.addEventListener('loadend', function() { + this._updateStatus(); + this._setResponse(this.parseResponse()); + + if (!this.succeeded) { + var error = new Error( + 'The request failed with status code: ' + this.xhr.status); + var response = + options.rejectWithRequest ? {error: error, request: this} : error; + this.rejectCompletes(response); + return; + } + + this.resolveCompletes(this); + }.bind(this)); + + this.url = options.url; + var isXHRAsync = options.async !== false; + xhr.open(options.method || 'GET', options.url, isXHRAsync); + + var acceptType = { + 'json': 'application/json', + 'text': 'text/plain', + 'html': 'text/html', + 'xml': 'application/xml', + 'arraybuffer': 'application/octet-stream' + }[options.handleAs]; + var headers = options.headers || Object.create(null); + var newHeaders = Object.create(null); + for (var key in headers) { + newHeaders[key.toLowerCase()] = headers[key]; + } + headers = newHeaders; + + if (acceptType && !headers['accept']) { + headers['accept'] = acceptType; + } + Object.keys(headers).forEach(function(requestHeader) { + if (/[A-Z]/.test(requestHeader)) { + _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_1__.Base._error('Headers must be lower case, got', requestHeader); + } + xhr.setRequestHeader(requestHeader, headers[requestHeader]); + }, this); + + if (isXHRAsync) { + xhr.timeout = options.timeout; + + var handleAs = options.handleAs; + + // If a JSON prefix is present, the responseType must be 'text' or the + // browser won’t be able to parse the response. + if (!!options.jsonPrefix || !handleAs) { + handleAs = 'text'; + } + + // In IE, `xhr.responseType` is an empty string when the response + // returns. Hence, caching it as `xhr._responseType`. + xhr.responseType = xhr._responseType = handleAs; + + // Cache the JSON prefix, if it exists. + if (!!options.jsonPrefix) { + xhr._jsonPrefix = options.jsonPrefix; + } + } + + xhr.withCredentials = !!options.withCredentials; + + + var body = this._encodeBodyObject(options.body, headers['content-type']); + + xhr.send( + /** + @type {ArrayBuffer|ArrayBufferView|Blob|Document|FormData| + null|string|undefined} + */ + (body)); + + return this.completes; + }, + + /** + * Attempts to parse the response body of the XHR. If parsing succeeds, + * the value returned will be deserialized based on the `responseType` + * set on the XHR. + * + * @return {*} The parsed response, + * or undefined if there was an empty response or parsing failed. + */ + parseResponse: function() { + var xhr = this.xhr; + var responseType = xhr.responseType || xhr._responseType; + var preferResponseText = !this.xhr.responseType; + var prefixLen = (xhr._jsonPrefix && xhr._jsonPrefix.length) || 0; + + try { + switch (responseType) { + case 'json': + // If the xhr object doesn't have a natural `xhr.responseType`, + // we can assume that the browser hasn't parsed the response for us, + // and so parsing is our responsibility. Likewise if response is + // undefined, as there's no way to encode undefined in JSON. + if (preferResponseText || xhr.response === undefined) { + // Try to emulate the JSON section of the response body section of + // the spec: https://xhr.spec.whatwg.org/#response-body + // That is to say, we try to parse as JSON, but if anything goes + // wrong return null. + try { + return JSON.parse(xhr.responseText); + } catch (_) { + console.warn('Failed to parse JSON sent from ' + xhr.responseURL); + return null; + } + } + + return xhr.response; + case 'xml': + return xhr.responseXML; + case 'blob': + case 'document': + case 'arraybuffer': + return xhr.response; + case 'text': + default: { + // If `prefixLen` is set, it implies the response should be parsed + // as JSON once the prefix of length `prefixLen` is stripped from + // it. Emulate the behavior above where null is returned on failure + // to parse. + if (prefixLen) { + try { + return JSON.parse(xhr.responseText.substring(prefixLen)); + } catch (_) { + console.warn('Failed to parse JSON sent from ' + xhr.responseURL); + return null; + } + } + return xhr.responseText; + } + } + } catch (e) { + this.rejectCompletes(new Error('Could not parse response. ' + e.message)); + } + }, + + /** + * Aborts the request. + */ + abort: function() { + this._setAborted(true); + this.xhr.abort(); + }, + + /** + * @param {*} body The given body of the request to try and encode. + * @param {?string} contentType The given content type, to infer an encoding + * from. + * @return {*} Either the encoded body as a string, if successful, + * or the unaltered body object if no encoding could be inferred. + */ + _encodeBodyObject: function(body, contentType) { + if (typeof body == 'string') { + return body; // Already encoded. + } + var bodyObj = /** @type {Object} */ (body); + switch (contentType) { + case ('application/json'): + return JSON.stringify(bodyObj); + case ('application/x-www-form-urlencoded'): + return this._wwwFormUrlEncode(bodyObj); + } + return body; + }, + + /** + * @param {Object} object The object to encode as x-www-form-urlencoded. + * @return {string} . + */ + _wwwFormUrlEncode: function(object) { + if (!object) { + return ''; + } + var pieces = []; + Object.keys(object).forEach(function(key) { + // TODO(rictic): handle array values here, in a consistent way with + // iron-ajax params. + pieces.push( + this._wwwFormUrlEncodePiece(key) + '=' + + this._wwwFormUrlEncodePiece(object[key])); + }, this); + return pieces.join('&'); + }, + + /** + * @param {*} str A key or value to encode as x-www-form-urlencoded. + * @return {string} . + */ + _wwwFormUrlEncodePiece: function(str) { + // Spec says to normalize newlines to \r\n and replace %20 spaces with +. + // jQuery does this as well, so this is likely to be widely compatible. + if (str === null || str === undefined || !str.toString) { + return ''; + } + + return encodeURIComponent(str.toString().replace(/\r?\n/g, '\r\n')) + .replace(/%20/g, '+'); + }, + + /** + * Updates the status code and status text. + */ + _updateStatus: function() { + this._setStatus(this.xhr.status); + this._setStatusText( + (this.xhr.statusText === undefined) ? '' : this.xhr.statusText); + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-autogrow-textarea/iron-autogrow-textarea.js": +/*!********************************************************************************!*\ + !*** ./node_modules/@polymer/iron-autogrow-textarea/iron-autogrow-textarea.js ***! + \********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_flex_layout_iron_flex_layout_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-flex-layout/iron-flex-layout.js */ "./node_modules/@polymer/iron-flex-layout/iron-flex-layout.js"); +/* harmony import */ var _polymer_iron_behaviors_iron_control_state_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-behaviors/iron-control-state.js */ "./node_modules/@polymer/iron-behaviors/iron-control-state.js"); +/* harmony import */ var _polymer_iron_validatable_behavior_iron_validatable_behavior_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/iron-validatable-behavior/iron-validatable-behavior.js */ "./node_modules/@polymer/iron-validatable-behavior/iron-validatable-behavior.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + + +/** +`iron-autogrow-textarea` is an element containing a textarea that grows in +height as more lines of input are entered. Unless an explicit height or the +`maxRows` property is set, it will never scroll. + +Example: + + + +### Styling + +The following custom properties and mixins are available for styling: + +Custom property | Description | Default +----------------|-------------|---------- +`--iron-autogrow-textarea` | Mixin applied to the textarea | `{}` +`--iron-autogrow-textarea-placeholder` | Mixin applied to the textarea placeholder | `{}` + +@demo demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_4__.Polymer)({ + /** @override */ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_6__.html)` + + + + + + + +
+ +
+`, + + is: 'iron-autogrow-textarea', + behaviors: [_polymer_iron_validatable_behavior_iron_validatable_behavior_js__WEBPACK_IMPORTED_MODULE_3__.IronValidatableBehavior, _polymer_iron_behaviors_iron_control_state_js__WEBPACK_IMPORTED_MODULE_2__.IronControlState], + + properties: { + /** + * Use this property instead of `bind-value` for two-way data binding. + * @type {string|number} + */ + value: {observer: '_valueChanged', type: String, notify: true}, + + /** + * This property is deprecated, and just mirrors `value`. Use `value` + * instead. + * @type {string|number} + */ + bindValue: {observer: '_bindValueChanged', type: String, notify: true}, + + /** + * The initial number of rows. + * + * @attribute rows + * @type number + * @default 1 + */ + rows: {type: Number, value: 1, observer: '_updateCached'}, + + /** + * The maximum number of rows this element can grow to until it + * scrolls. 0 means no maximum. + * + * @attribute maxRows + * @type number + * @default 0 + */ + maxRows: {type: Number, value: 0, observer: '_updateCached'}, + + /** + * Bound to the textarea's `autocomplete` attribute. + */ + autocomplete: {type: String, value: 'off'}, + + /** + * Bound to the textarea's `autofocus` attribute. + * + * @type {!boolean} + */ + autofocus: {type: Boolean, value: false}, + + /** + * Bound to the textarea's `autocapitalize` attribute. + */ + autocapitalize: {type: String, value: 'none'}, + + /** + * Bound to the textarea's `inputmode` attribute. + */ + inputmode: {type: String}, + + /** + * Bound to the textarea's `placeholder` attribute. + */ + placeholder: {type: String}, + + /** + * Bound to the textarea's `readonly` attribute. + */ + readonly: {type: String}, + + /** + * Set to true to mark the textarea as required. + */ + required: {type: Boolean}, + + /** + * The minimum length of the input value. + */ + minlength: {type: Number}, + + /** + * The maximum length of the input value. + */ + maxlength: {type: Number}, + + /** + * Bound to the textarea's `aria-label` attribute. + */ + label: {type: String} + + }, + + listeners: {'input': '_onInput'}, + + /** + * Returns the underlying textarea. + * @return {!HTMLTextAreaElement} + */ + get textarea() { + return /** @type {!HTMLTextAreaElement} */ (this.$.textarea); + }, + + /** + * Returns textarea's selection start. + * @return {number} + */ + get selectionStart() { + return this.$.textarea.selectionStart; + }, + + /** + * Returns textarea's selection end. + * @return {number} + */ + get selectionEnd() { + return this.$.textarea.selectionEnd; + }, + + /** + * Sets the textarea's selection start. + */ + set selectionStart(value) { + this.$.textarea.selectionStart = value; + }, + + /** + * Sets the textarea's selection end. + */ + set selectionEnd(value) { + this.$.textarea.selectionEnd = value; + }, + + /** @override */ + attached: function() { + /* iOS has an arbitrary left margin of 3px that isn't present + * in any other browser, and means that the paper-textarea's cursor + * overlaps the label. + * See https://github.com/PolymerElements/paper-input/issues/468. + */ + var IS_IOS = navigator.userAgent.match(/iP(?:[oa]d|hone)/) && + !navigator.userAgent.match(/OS 1[3456789]/); + if (IS_IOS) { + this.$.textarea.style.marginLeft = '-3px'; + } + }, + + /** + * Returns true if `value` is valid. The validator provided in `validator` + * will be used first, if it exists; otherwise, the `textarea`'s validity + * is used. + * @return {boolean} True if the value is valid. + */ + validate: function() { + // Use the nested input's native validity. + var valid = this.$.textarea.validity.valid; + + // Only do extra checking if the browser thought this was valid. + if (valid) { + // Empty, required input is invalid + if (this.required && this.value === '') { + valid = false; + } else if (this.hasValidator()) { + valid = _polymer_iron_validatable_behavior_iron_validatable_behavior_js__WEBPACK_IMPORTED_MODULE_3__.IronValidatableBehavior.validate.call(this, this.value); + } + } + + this.invalid = !valid; + this.fire('iron-input-validate'); + return valid; + }, + + _bindValueChanged: function(bindValue) { + this.value = bindValue; + }, + + _valueChanged: function(value) { + var textarea = this.textarea; + if (!textarea) { + return; + } + + // If the bindValue changed manually, then we need to also update + // the underlying textarea's value. Otherwise this change was probably + // generated from the _onInput handler, and the two values are already + // the same. + if (textarea.value !== value) { + textarea.value = !(value || value === 0) ? '' : value; + } + + this.bindValue = value; + this.$.mirror.innerHTML = this._valueForMirror(); + + // Manually notify because we don't want to notify until after setting + // value. + this.fire('bind-value-changed', {value: this.bindValue}); + }, + + _onInput: function(event) { + var eventPath = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_5__.dom)(event).path; + this.value = eventPath ? eventPath[0].value : event.target.value; + }, + + _constrain: function(tokens) { + var _tokens; + tokens = tokens || ['']; + // Enforce the min and max heights for a multiline input to avoid + // measurement + if (this.maxRows > 0 && tokens.length > this.maxRows) { + _tokens = tokens.slice(0, this.maxRows); + } else { + _tokens = tokens.slice(0); + } + while (this.rows > 0 && _tokens.length < this.rows) { + _tokens.push(''); + } + // Use   instead   of to allow this element to be used in XHTML. + return _tokens.join('
') + ' '; + }, + + _valueForMirror: function() { + var input = this.textarea; + if (!input) { + return; + } + this.tokens = (input && input.value) ? input.value.replace(/&/gm, '&') + .replace(/"/gm, '"') + .replace(/'/gm, ''') + .replace(//gm, '>') + .split('\n') : + ['']; + return this._constrain(this.tokens); + }, + + _updateCached: function() { + this.$.mirror.innerHTML = this._constrain(this.tokens); + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-behaviors/iron-button-state.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@polymer/iron-behaviors/iron-button-state.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronButtonState: () => (/* binding */ IronButtonState), +/* harmony export */ IronButtonStateImpl: () => (/* binding */ IronButtonStateImpl) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _iron_control_state_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iron-control-state.js */ "./node_modules/@polymer/iron-behaviors/iron-control-state.js"); +/* harmony import */ var _polymer_iron_a11y_keys_behavior_iron_a11y_keys_behavior_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js */ "./node_modules/@polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + +/** + * @demo demo/index.html + * @polymerBehavior IronButtonState + */ +const IronButtonStateImpl = { + + properties: { + + /** + * If true, the user is currently holding down the button. + */ + pressed: { + type: Boolean, + readOnly: true, + value: false, + reflectToAttribute: true, + observer: '_pressedChanged' + }, + + /** + * If true, the button toggles the active state with each tap or press + * of the spacebar. + */ + toggles: {type: Boolean, value: false, reflectToAttribute: true}, + + /** + * If true, the button is a toggle and is currently in the active state. + */ + active: + {type: Boolean, value: false, notify: true, reflectToAttribute: true}, + + /** + * True if the element is currently being pressed by a "pointer," which + * is loosely defined as mouse or touch input (but specifically excluding + * keyboard input). + */ + pointerDown: {type: Boolean, readOnly: true, value: false}, + + /** + * True if the input device that caused the element to receive focus + * was a keyboard. + */ + receivedFocusFromKeyboard: {type: Boolean, readOnly: true}, + + /** + * The aria attribute to be set if the button is a toggle and in the + * active state. + */ + ariaActiveAttribute: { + type: String, + value: 'aria-pressed', + observer: '_ariaActiveAttributeChanged' + } + }, + + listeners: {down: '_downHandler', up: '_upHandler', tap: '_tapHandler'}, + + observers: + ['_focusChanged(focused)', '_activeChanged(active, ariaActiveAttribute)'], + + /** + * @type {!Object} + */ + keyBindings: { + 'enter:keydown': '_asyncClick', + 'space:keydown': '_spaceKeyDownHandler', + 'space:keyup': '_spaceKeyUpHandler', + }, + + _mouseEventRe: /^mouse/, + + _tapHandler: function() { + if (this.toggles) { + // a tap is needed to toggle the active state + this._userActivate(!this.active); + } else { + this.active = false; + } + }, + + _focusChanged: function(focused) { + this._detectKeyboardFocus(focused); + + if (!focused) { + this._setPressed(false); + } + }, + + _detectKeyboardFocus: function(focused) { + this._setReceivedFocusFromKeyboard(!this.pointerDown && focused); + }, + + // to emulate native checkbox, (de-)activations from a user interaction fire + // 'change' events + _userActivate: function(active) { + if (this.active !== active) { + this.active = active; + this.fire('change'); + } + }, + + _downHandler: function(event) { + this._setPointerDown(true); + this._setPressed(true); + this._setReceivedFocusFromKeyboard(false); + }, + + _upHandler: function() { + this._setPointerDown(false); + this._setPressed(false); + }, + + /** + * @param {!KeyboardEvent} event . + */ + _spaceKeyDownHandler: function(event) { + var keyboardEvent = event.detail.keyboardEvent; + var target = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(keyboardEvent).localTarget; + + // Ignore the event if this is coming from a focused light child, since that + // element will deal with it. + if (this.isLightDescendant(/** @type {Node} */ (target))) + return; + + keyboardEvent.preventDefault(); + keyboardEvent.stopImmediatePropagation(); + this._setPressed(true); + }, + + /** + * @param {!KeyboardEvent} event . + */ + _spaceKeyUpHandler: function(event) { + var keyboardEvent = event.detail.keyboardEvent; + var target = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(keyboardEvent).localTarget; + + // Ignore the event if this is coming from a focused light child, since that + // element will deal with it. + if (this.isLightDescendant(/** @type {Node} */ (target))) + return; + + if (this.pressed) { + this._asyncClick(); + } + this._setPressed(false); + }, + + // trigger click asynchronously, the asynchrony is useful to allow one + // event handler to unwind before triggering another event + _asyncClick: function() { + this.async(function() { + this.click(); + }, 1); + }, + + // any of these changes are considered a change to button state + + _pressedChanged: function(pressed) { + this._changedButtonState(); + }, + + _ariaActiveAttributeChanged: function(value, oldValue) { + if (oldValue && oldValue != value && this.hasAttribute(oldValue)) { + this.removeAttribute(oldValue); + } + }, + + _activeChanged: function(active, ariaActiveAttribute) { + if (this.toggles) { + this.setAttribute(this.ariaActiveAttribute, active ? 'true' : 'false'); + } else { + this.removeAttribute(this.ariaActiveAttribute); + } + this._changedButtonState(); + }, + + _controlStateChanged: function() { + if (this.disabled) { + this._setPressed(false); + } else { + this._changedButtonState(); + } + }, + + // provide hook for follow-on behaviors to react to button-state + + _changedButtonState: function() { + if (this._buttonStateChanged) { + this._buttonStateChanged(); // abstract + } + } + +}; + +/** @polymerBehavior */ +const IronButtonState = [_polymer_iron_a11y_keys_behavior_iron_a11y_keys_behavior_js__WEBPACK_IMPORTED_MODULE_2__.IronA11yKeysBehavior, IronButtonStateImpl]; + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-behaviors/iron-control-state.js": +/*!********************************************************************!*\ + !*** ./node_modules/@polymer/iron-behaviors/iron-control-state.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronControlState: () => (/* binding */ IronControlState) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + +/** + * @demo demo/index.html + * @polymerBehavior + */ +const IronControlState = { + + properties: { + + /** + * If true, the element currently has focus. + */ + focused: { + type: Boolean, + value: false, + notify: true, + readOnly: true, + reflectToAttribute: true + }, + + /** + * If true, the user cannot interact with this element. + */ + disabled: { + type: Boolean, + value: false, + notify: true, + observer: '_disabledChanged', + reflectToAttribute: true + }, + + /** + * Value of the `tabindex` attribute before `disabled` was activated. + * `null` means the attribute was not present. + * @type {?string|undefined} + */ + _oldTabIndex: {type: String}, + + _boundFocusBlurHandler: { + type: Function, + value: function() { + return this._focusBlurHandler.bind(this); + } + } + }, + + observers: ['_changedControlState(focused, disabled)'], + + /** + * @return {void} + */ + ready: function() { + this.addEventListener('focus', this._boundFocusBlurHandler, true); + this.addEventListener('blur', this._boundFocusBlurHandler, true); + }, + + _focusBlurHandler: function(event) { + // Polymer takes care of retargeting events. + this._setFocused(event.type === 'focus'); + return; + }, + + _disabledChanged: function(disabled, old) { + this.setAttribute('aria-disabled', disabled ? 'true' : 'false'); + this.style.pointerEvents = disabled ? 'none' : ''; + if (disabled) { + // Read the `tabindex` attribute instead of the `tabIndex` property. + // The property returns `-1` if there is no `tabindex` attribute. + // This distinction is important when restoring the value because + // leaving `-1` hides shadow root children from the tab order. + this._oldTabIndex = this.getAttribute('tabindex'); + this._setFocused(false); + this.tabIndex = -1; + this.blur(); + } else if (this._oldTabIndex !== undefined) { + if (this._oldTabIndex === null) { + this.removeAttribute('tabindex'); + } else { + this.setAttribute('tabindex', this._oldTabIndex); + } + } + }, + + _changedControlState: function() { + // _controlStateChanged is abstract, follow-on behaviors may implement it + if (this._controlStateChanged) { + this._controlStateChanged(); + } + } + +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-dropdown/iron-dropdown.js": +/*!**************************************************************!*\ + !*** ./node_modules/@polymer/iron-dropdown/iron-dropdown.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_a11y_keys_behavior_iron_a11y_keys_behavior_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js */ "./node_modules/@polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js"); +/* harmony import */ var _polymer_iron_behaviors_iron_control_state_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-behaviors/iron-control-state.js */ "./node_modules/@polymer/iron-behaviors/iron-control-state.js"); +/* harmony import */ var _polymer_iron_overlay_behavior_iron_overlay_behavior_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/iron-overlay-behavior/iron-overlay-behavior.js */ "./node_modules/@polymer/iron-overlay-behavior/iron-overlay-behavior.js"); +/* harmony import */ var _polymer_neon_animation_neon_animation_runner_behavior_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/neon-animation/neon-animation-runner-behavior.js */ "./node_modules/@polymer/neon-animation/neon-animation-runner-behavior.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + + + +/** +`` is a generalized element that is useful when you have +hidden content (`dropdown-content`) that is revealed due to some change in +state that should cause it to do so. + +Note that this is a low-level element intended to be used as part of other +composite elements that cause dropdowns to be revealed. + +Examples of elements that might be implemented using an `iron-dropdown` +include comboboxes, menubuttons, selects. The list goes on. + +The `` element exposes attributes that allow the position +of the `dropdown-content` relative to the `dropdown-trigger` to be +configured. + + +
Hello!
+
+ +In the above example, the `
` assigned to the `dropdown-content` slot will +be hidden until the dropdown element has `opened` set to true, or when the +`open` method is called on the element. + +@demo demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_5__.Polymer)({ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_7__.html)` + + +
+ +
+`, + + is: 'iron-dropdown', + + behaviors: [ + _polymer_iron_behaviors_iron_control_state_js__WEBPACK_IMPORTED_MODULE_2__.IronControlState, + _polymer_iron_a11y_keys_behavior_iron_a11y_keys_behavior_js__WEBPACK_IMPORTED_MODULE_1__.IronA11yKeysBehavior, + _polymer_iron_overlay_behavior_iron_overlay_behavior_js__WEBPACK_IMPORTED_MODULE_3__.IronOverlayBehavior, + _polymer_neon_animation_neon_animation_runner_behavior_js__WEBPACK_IMPORTED_MODULE_4__.NeonAnimationRunnerBehavior + ], + + properties: { + /** + * The orientation against which to align the dropdown content + * horizontally relative to the dropdown trigger. + * Overridden from `Polymer.IronFitBehavior`. + */ + horizontalAlign: {type: String, value: 'left', reflectToAttribute: true}, + + /** + * The orientation against which to align the dropdown content + * vertically relative to the dropdown trigger. + * Overridden from `Polymer.IronFitBehavior`. + */ + verticalAlign: {type: String, value: 'top', reflectToAttribute: true}, + + /** + * An animation config. If provided, this will be used to animate the + * opening of the dropdown. Pass an Array for multiple animations. + * See `neon-animation` documentation for more animation configuration + * details. + */ + openAnimationConfig: {type: Object}, + + /** + * An animation config. If provided, this will be used to animate the + * closing of the dropdown. Pass an Array for multiple animations. + * See `neon-animation` documentation for more animation configuration + * details. + */ + closeAnimationConfig: {type: Object}, + + /** + * If provided, this will be the element that will be focused when + * the dropdown opens. + */ + focusTarget: {type: Object}, + + /** + * Set to true to disable animations when opening and closing the + * dropdown. + */ + noAnimations: {type: Boolean, value: false}, + + /** + * By default, the dropdown will constrain scrolling on the page + * to itself when opened. + * Set to true in order to prevent scroll from being constrained + * to the dropdown when it opens. + * This property is a shortcut to set `scrollAction` to lock or refit. + * Prefer directly setting the `scrollAction` property. + */ + allowOutsideScroll: + {type: Boolean, value: false, observer: '_allowOutsideScrollChanged'} + }, + + listeners: {'neon-animation-finish': '_onNeonAnimationFinish'}, + + observers: [ + '_updateOverlayPosition(positionTarget, verticalAlign, horizontalAlign, verticalOffset, horizontalOffset)' + ], + + /** + * The element that is contained by the dropdown, if any. + */ + get containedElement() { + // Polymer 2.x returns slot.assignedNodes which can contain text nodes. + var nodes = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_6__.dom)(this.$.content).getDistributedNodes(); + for (var i = 0, l = nodes.length; i < l; i++) { + if (nodes[i].nodeType === Node.ELEMENT_NODE) { + return nodes[i]; + } + } + }, + + ready: function() { + // Ensure scrollAction is set. + if (!this.scrollAction) { + this.scrollAction = this.allowOutsideScroll ? 'refit' : 'lock'; + } + this._readied = true; + }, + + attached: function() { + if (!this.sizingTarget || this.sizingTarget === this) { + this.sizingTarget = this.containedElement || this; + } + }, + + detached: function() { + this.cancelAnimation(); + }, + + /** + * Called when the value of `opened` changes. + * Overridden from `IronOverlayBehavior` + */ + _openedChanged: function() { + if (this.opened && this.disabled) { + this.cancel(); + } else { + this.cancelAnimation(); + this._updateAnimationConfig(); + _polymer_iron_overlay_behavior_iron_overlay_behavior_js__WEBPACK_IMPORTED_MODULE_3__.IronOverlayBehaviorImpl._openedChanged.apply(this, arguments); + } + }, + + /** + * Overridden from `IronOverlayBehavior`. + */ + _renderOpened: function() { + if (!this.noAnimations && this.animationConfig.open) { + this.$.contentWrapper.classList.add('animating'); + this.playAnimation('open'); + } else { + _polymer_iron_overlay_behavior_iron_overlay_behavior_js__WEBPACK_IMPORTED_MODULE_3__.IronOverlayBehaviorImpl._renderOpened.apply(this, arguments); + } + }, + + /** + * Overridden from `IronOverlayBehavior`. + */ + _renderClosed: function() { + if (!this.noAnimations && this.animationConfig.close) { + this.$.contentWrapper.classList.add('animating'); + this.playAnimation('close'); + } else { + _polymer_iron_overlay_behavior_iron_overlay_behavior_js__WEBPACK_IMPORTED_MODULE_3__.IronOverlayBehaviorImpl._renderClosed.apply(this, arguments); + } + }, + + /** + * Called when animation finishes on the dropdown (when opening or + * closing). Responsible for "completing" the process of opening or + * closing the dropdown by positioning it or setting its display to + * none. + */ + _onNeonAnimationFinish: function() { + this.$.contentWrapper.classList.remove('animating'); + if (this.opened) { + this._finishRenderOpened(); + } else { + this._finishRenderClosed(); + } + }, + + /** + * Constructs the final animation config from different properties used + * to configure specific parts of the opening and closing animations. + */ + _updateAnimationConfig: function() { + // Update the animation node to be the containedElement. + var animationNode = this.containedElement; + var animations = [].concat(this.openAnimationConfig || []) + .concat(this.closeAnimationConfig || []); + for (var i = 0; i < animations.length; i++) { + animations[i].node = animationNode; + } + this.animationConfig = { + open: this.openAnimationConfig, + close: this.closeAnimationConfig + }; + }, + + /** + * Updates the overlay position based on configured horizontal + * and vertical alignment. + */ + _updateOverlayPosition: function() { + if (this.isAttached) { + // This triggers iron-resize, and iron-overlay-behavior will call refit if + // needed. + this.notifyResize(); + } + }, + + /** + * Sets scrollAction according to the value of allowOutsideScroll. + * Prefer setting directly scrollAction. + */ + _allowOutsideScrollChanged: function(allowOutsideScroll) { + // Wait until initial values are all set. + if (!this._readied) { + return; + } + if (!allowOutsideScroll) { + this.scrollAction = 'lock'; + } else if (!this.scrollAction || this.scrollAction === 'lock') { + this.scrollAction = 'refit'; + } + }, + + /** + * Apply focus to focusTarget or containedElement + */ + _applyFocus: function() { + var focusTarget = this.focusTarget || this.containedElement; + if (focusTarget && this.opened && !this.noAutoFocus) { + focusTarget.focus(); + } else { + _polymer_iron_overlay_behavior_iron_overlay_behavior_js__WEBPACK_IMPORTED_MODULE_3__.IronOverlayBehaviorImpl._applyFocus.apply(this, arguments); + } + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-fit-behavior/iron-fit-behavior.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@polymer/iron-fit-behavior/iron-fit-behavior.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronFitBehavior: () => (/* binding */ IronFitBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + +// IE11 has a bug where an element with (1) `overflow: auto;`, (2) size based on +// its content's natural size, (3) absolute positioning (either `absolute` or +// `fixed`), and (4) use `max-width` to constrain its width will place its +// vertical scrollbar outside the area constrained by `max-width`. +// +// Unlike other browsers, IE11 doesn't support changing the size of scrollbars +// with CSS, so we don't need to read this value live from the element in +// question when trying to work around the bug. +let verticalScrollbarMaxWidthBugOffset = undefined; +const getVerticalScrollbarMaxWidthBugOffset = () => { + if (verticalScrollbarMaxWidthBugOffset !== undefined) { + return verticalScrollbarMaxWidthBugOffset; + } + + const container = document.createElement('div'); + Object.assign(container.style, { + overflow: 'auto', + position: 'fixed', + left: '0px', + top: '0px', + maxWidth: '100px', + maxHeight: '100px', + }); + + const content = document.createElement('div'); + content.style.width = '200px'; + content.style.height = '200px'; + container.appendChild(content); + + document.body.appendChild(container); + verticalScrollbarMaxWidthBugOffset = + Math.abs(container.offsetWidth - 100) > 1 ? + container.offsetWidth - container.clientWidth : + 0; + document.body.removeChild(container); + + return verticalScrollbarMaxWidthBugOffset; +}; + +/** +`Polymer.IronFitBehavior` fits an element in another element using `max-height` +and `max-width`, and optionally centers it in the window or another element. + +The element will only be sized and/or positioned if it has not already been +sized and/or positioned by CSS. + +CSS properties | Action +--------------------------|------------------------------------------- +`position` set | Element is not centered horizontally or vertically +`top` or `bottom` set | Element is not vertically centered +`left` or `right` set | Element is not horizontally centered +`max-height` set | Element respects `max-height` +`max-width` set | Element respects `max-width` + +`Polymer.IronFitBehavior` can position an element into another element using +`verticalAlign` and `horizontalAlign`. This will override the element's css +position. + +
+ + Positioned into the container + +
+ +Use `noOverlap` to position the element around another element without +overlapping it. + +
+ + Positioned around the container + +
+ +Use `horizontalOffset, verticalOffset` to offset the element from its +`positionTarget`; `Polymer.IronFitBehavior` will collapse these in order to +keep the element within `fitInto` boundaries, while preserving the element's +CSS margin values. + +
+ + With vertical offset + +
+ +@demo demo/index.html +@polymerBehavior +*/ +const IronFitBehavior = { + + properties: { + + /** + * The element that will receive a `max-height`/`width`. By default it is + * the same as `this`, but it can be set to a child element. This is useful, + * for example, for implementing a scrolling region inside the element. + * @type {!Element} + */ + sizingTarget: { + type: Object, + value: function() { + return this; + } + }, + + /** + * The element to fit `this` into. + */ + fitInto: {type: Object, value: window}, + + /** + * Will position the element around the positionTarget without overlapping + * it. + */ + noOverlap: {type: Boolean}, + + /** + * The element that should be used to position the element. If not set, it + * will default to the parent node. + * @type {!Element} + */ + positionTarget: {type: Element}, + + /** + * The orientation against which to align the element horizontally + * relative to the `positionTarget`. Possible values are "left", "right", + * "center", "auto". + */ + horizontalAlign: {type: String}, + + /** + * The orientation against which to align the element vertically + * relative to the `positionTarget`. Possible values are "top", "bottom", + * "middle", "auto". + */ + verticalAlign: {type: String}, + + /** + * If true, it will use `horizontalAlign` and `verticalAlign` values as + * preferred alignment and if there's not enough space, it will pick the + * values which minimize the cropping. + */ + dynamicAlign: {type: Boolean}, + + /** + * A pixel value that will be added to the position calculated for the + * given `horizontalAlign`, in the direction of alignment. You can think + * of it as increasing or decreasing the distance to the side of the + * screen given by `horizontalAlign`. + * + * If `horizontalAlign` is "left" or "center", this offset will increase or + * decrease the distance to the left side of the screen: a negative offset + * will move the dropdown to the left; a positive one, to the right. + * + * Conversely if `horizontalAlign` is "right", this offset will increase + * or decrease the distance to the right side of the screen: a negative + * offset will move the dropdown to the right; a positive one, to the left. + */ + horizontalOffset: {type: Number, value: 0, notify: true}, + + /** + * A pixel value that will be added to the position calculated for the + * given `verticalAlign`, in the direction of alignment. You can think + * of it as increasing or decreasing the distance to the side of the + * screen given by `verticalAlign`. + * + * If `verticalAlign` is "top" or "middle", this offset will increase or + * decrease the distance to the top side of the screen: a negative offset + * will move the dropdown upwards; a positive one, downwards. + * + * Conversely if `verticalAlign` is "bottom", this offset will increase + * or decrease the distance to the bottom side of the screen: a negative + * offset will move the dropdown downwards; a positive one, upwards. + */ + verticalOffset: {type: Number, value: 0, notify: true}, + + /** + * Set to true to auto-fit on attach. + */ + autoFitOnAttach: {type: Boolean, value: false}, + + /** + * If true and scrollbars are added to `sizingTarget` after it is + * positioned, the size of the added scrollbars will be added to its + * `maxWidth` and `maxHeight`. + */ + expandSizingTargetForScrollbars: {type: Boolean, value: false}, + + /** @type {?Object} */ + _fitInfo: {type: Object} + }, + + get _fitWidth() { + var fitWidth; + if (this.fitInto === window) { + fitWidth = this.fitInto.innerWidth; + } else { + fitWidth = this.fitInto.getBoundingClientRect().width; + } + return fitWidth; + }, + + get _fitHeight() { + var fitHeight; + if (this.fitInto === window) { + fitHeight = this.fitInto.innerHeight; + } else { + fitHeight = this.fitInto.getBoundingClientRect().height; + } + return fitHeight; + }, + + get _fitLeft() { + var fitLeft; + if (this.fitInto === window) { + fitLeft = 0; + } else { + fitLeft = this.fitInto.getBoundingClientRect().left; + } + return fitLeft; + }, + + get _fitTop() { + var fitTop; + if (this.fitInto === window) { + fitTop = 0; + } else { + fitTop = this.fitInto.getBoundingClientRect().top; + } + return fitTop; + }, + + /** + * The element that should be used to position the element, + * if no position target is configured. + */ + get _defaultPositionTarget() { + var parent = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__.dom)(this).parentNode; + + if (parent && parent.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { + parent = parent.host; + } + + return parent; + }, + + /** + * The horizontal align value, accounting for the RTL/LTR text direction. + */ + get _localeHorizontalAlign() { + if (this._isRTL) { + // In RTL, "left" becomes "right". + if (this.horizontalAlign === 'right') { + return 'left'; + } + if (this.horizontalAlign === 'left') { + return 'right'; + } + } + return this.horizontalAlign; + }, + + /** + * True if the element should be positioned instead of centered. + * @private + */ + get __shouldPosition() { + return (this.horizontalAlign || this.verticalAlign) && this.positionTarget; + }, + + /** + * True if the component is RTL. + * @private + */ + get _isRTL() { + // Memoize this to avoid expensive calculations & relayouts. + // Make sure we do it only once + if (typeof this._memoizedIsRTL === 'undefined') { + this._memoizedIsRTL = window.getComputedStyle(this).direction == 'rtl'; + } + return this._memoizedIsRTL; + }, + + /** @override */ + attached: function() { + this.positionTarget = this.positionTarget || this._defaultPositionTarget; + if (this.autoFitOnAttach) { + if (window.getComputedStyle(this).display === 'none') { + setTimeout(function() { + this.fit(); + }.bind(this)); + } else { + // NOTE: shadydom applies distribution asynchronously + // for performance reasons webcomponents/shadydom#120 + // Flush to get correct layout info. + window.ShadyDOM && ShadyDOM.flush(); + this.fit(); + } + } + }, + + /** @override */ + detached: function() { + if (this.__deferredFit) { + clearTimeout(this.__deferredFit); + this.__deferredFit = null; + } + }, + + /** + * Positions and fits the element into the `fitInto` element. + */ + fit: function() { + this.position(); + this.constrain(); + this.center(); + }, + + /** + * Memoize information needed to position and size the target element. + * @suppress {deprecated} + */ + _discoverInfo: function() { + if (this._fitInfo) { + return; + } + var target = window.getComputedStyle(this); + var sizer = window.getComputedStyle(this.sizingTarget); + + this._fitInfo = { + inlineStyle: { + top: this.style.top || '', + left: this.style.left || '', + position: this.style.position || '' + }, + sizerInlineStyle: { + maxWidth: this.sizingTarget.style.maxWidth || '', + maxHeight: this.sizingTarget.style.maxHeight || '', + boxSizing: this.sizingTarget.style.boxSizing || '' + }, + positionedBy: { + vertically: target.top !== 'auto' ? + 'top' : + (target.bottom !== 'auto' ? 'bottom' : null), + horizontally: target.left !== 'auto' ? + 'left' : + (target.right !== 'auto' ? 'right' : null) + }, + sizedBy: { + height: sizer.maxHeight !== 'none', + width: sizer.maxWidth !== 'none', + minWidth: parseInt(sizer.minWidth, 10) || 0, + minHeight: parseInt(sizer.minHeight, 10) || 0 + }, + margin: { + top: parseInt(target.marginTop, 10) || 0, + right: parseInt(target.marginRight, 10) || 0, + bottom: parseInt(target.marginBottom, 10) || 0, + left: parseInt(target.marginLeft, 10) || 0 + } + }; + }, + + /** + * Resets the target element's position and size constraints, and clear + * the memoized data. + */ + resetFit: function() { + var info = this._fitInfo || {}; + for (var property in info.sizerInlineStyle) { + this.sizingTarget.style[property] = info.sizerInlineStyle[property]; + } + for (var property in info.inlineStyle) { + this.style[property] = info.inlineStyle[property]; + } + + this._fitInfo = null; + }, + + /** + * Equivalent to calling `resetFit()` and `fit()`. Useful to call this after + * the element or the `fitInto` element has been resized, or if any of the + * positioning properties (e.g. `horizontalAlign, verticalAlign`) is updated. + * It preserves the scroll position of the sizingTarget. + */ + refit: function() { + var scrollLeft = this.sizingTarget.scrollLeft; + var scrollTop = this.sizingTarget.scrollTop; + this.resetFit(); + this.fit(); + this.sizingTarget.scrollLeft = scrollLeft; + this.sizingTarget.scrollTop = scrollTop; + }, + + /** + * Positions the element according to `horizontalAlign, verticalAlign`. + */ + position: function() { + if (!this.__shouldPosition) { + // needs to be centered, and it is done after constrain. + return; + } + this._discoverInfo(); + + window.ShadyDOM && window.ShadyDOM.flush(); + + this.style.position = 'fixed'; + // Need border-box for margin/padding. + this.sizingTarget.style.boxSizing = 'border-box'; + // Set to 0, 0 in order to discover any offset caused by parent stacking + // contexts. + this.style.left = '0px'; + this.style.top = '0px'; + + var rect = this.getBoundingClientRect(); + var positionRect = this.__getNormalizedRect(this.positionTarget); + var fitRect = this.__getNormalizedRect(this.fitInto); + + let unpositionedOffsetWidth; + let unpositionedOffsetHeight; + let unpositionedClientWidth; + let unpositionedClientHeight; + if (this.expandSizingTargetForScrollbars) { + unpositionedOffsetWidth = this.sizingTarget.offsetWidth; + unpositionedOffsetHeight = this.sizingTarget.offsetHeight; + unpositionedClientWidth = this.sizingTarget.clientWidth; + unpositionedClientHeight = this.sizingTarget.clientHeight; + } + + var margin = this._fitInfo.margin; + + // Consider the margin as part of the size for position calculations. + var size = { + width: rect.width + margin.left + margin.right, + height: rect.height + margin.top + margin.bottom + }; + + var position = this.__getPosition( + this._localeHorizontalAlign, + this.verticalAlign, + size, + rect, + positionRect, + fitRect); + + var left = position.left + margin.left; + var top = position.top + margin.top; + + // We first limit right/bottom within fitInto respecting the margin, + // then use those values to limit top/left. + var right = Math.min(fitRect.right - margin.right, left + rect.width); + var bottom = Math.min(fitRect.bottom - margin.bottom, top + rect.height); + + // Keep left/top within fitInto respecting the margin. + left = Math.max( + fitRect.left + margin.left, + Math.min(left, right - this._fitInfo.sizedBy.minWidth)); + top = Math.max( + fitRect.top + margin.top, + Math.min(top, bottom - this._fitInfo.sizedBy.minHeight)); + + // Use right/bottom to set maxWidth/maxHeight, and respect + // minWidth/minHeight. + const maxWidth = Math.max(right - left, this._fitInfo.sizedBy.minWidth); + const maxHeight = Math.max(bottom - top, this._fitInfo.sizedBy.minHeight); + this.sizingTarget.style.maxWidth = maxWidth + 'px'; + this.sizingTarget.style.maxHeight = maxHeight + 'px'; + + // Remove the offset caused by any stacking context. + const leftPosition = left - rect.left; + const topPosition = top - rect.top; + this.style.left = `${leftPosition}px`; + this.style.top = `${topPosition}px`; + + if (this.expandSizingTargetForScrollbars) { + // Expand the height first - i.e. in the typical block direction - in case + // this expands the element enough to remove the vertical scrollbar. + + const positionedOffsetHeight = this.sizingTarget.offsetHeight; + const positionedClientHeight = this.sizingTarget.clientHeight; + const unpositionedHeightDelta = + unpositionedOffsetHeight - unpositionedClientHeight; + const positionedHeightDelta = + positionedOffsetHeight - positionedClientHeight; + + const sizingTargetScrollbarHeight = + positionedHeightDelta - unpositionedHeightDelta; + if (sizingTargetScrollbarHeight > 0) { + // Expand `maxHeight` by `sizingTargetScrollbarHeight` up to the overall + // allowed height within `fitRect`. + const fitRectMaxHeight = fitRect.height - margin.top - margin.bottom; + const newMaxHeight = + Math.min(fitRectMaxHeight, maxHeight + sizingTargetScrollbarHeight); + this.sizingTarget.style.maxHeight = `${newMaxHeight}px`; + + // Measure the element's real change in height. This may not equal + // `sizingTargetScrollbarHeight` if the overflow amount is less than the + // scrollbar size. + const offsetHeight = this.sizingTarget.offsetHeight; + const addedHeight = offsetHeight - positionedOffsetHeight; + + // Adjust the top position if the alignment requires it. + let newTopPosition; + if (position.verticalAlign === 'top') { + newTopPosition = topPosition; + } else if (position.verticalAlign === 'middle') { + newTopPosition = topPosition - addedHeight / 2; + } else if (position.verticalAlign === 'bottom') { + newTopPosition = topPosition - addedHeight; + } + + // Constrain the new top position based on `fitRect` again. + newTopPosition = Math.max( + fitRect.top + margin.top, + Math.min( + newTopPosition, fitRect.bottom - margin.bottom - offsetHeight)); + this.style.top = `${newTopPosition}px`; + } + + const positionedOffsetWidth = this.sizingTarget.offsetWidth; + const positionedClientWidth = this.sizingTarget.clientWidth; + const unpositionedWidthDelta = + unpositionedOffsetWidth - unpositionedClientWidth; + const positionedWidthDelta = + positionedOffsetWidth - positionedClientWidth; + + const sizingTargetScrollbarWidth = + positionedWidthDelta - unpositionedWidthDelta; + if (sizingTargetScrollbarWidth > 0) { + const maxWidthBugOffset = getVerticalScrollbarMaxWidthBugOffset(); + + // Expand `maxWidth` by `sizingTargetScrollbarWidth` up to the overall + // allowed width within `fitRect`. + const fitRectMaxWidth = fitRect.width - margin.left - margin.right; + const newMaxWidth = Math.min( + fitRectMaxWidth, + maxWidth + sizingTargetScrollbarWidth - maxWidthBugOffset); + this.sizingTarget.style.maxWidth = `${newMaxWidth}px`; + + // Measure the element's real change in width. This may not equal + // `sizingTargetScrollbarWidth` if the overflow amount is less than the + // scrollbar size. + const offsetWidth = this.sizingTarget.offsetWidth + maxWidthBugOffset; + const addedWidth = offsetWidth - positionedOffsetWidth; + + // Adjust the left position if the alignment requires it. + let newLeftPosition; + if (position.horizontalAlign === 'left') { + newLeftPosition = leftPosition; + } else if (position.horizontalAlign === 'center') { + newLeftPosition = leftPosition - addedWidth / 2; + } else if (position.horizontalAlign === 'right') { + newLeftPosition = leftPosition - addedWidth; + } + + // Constrain the new left position based on `fitRect` again. + newLeftPosition = Math.max( + fitRect.left + margin.left, + Math.min( + newLeftPosition, fitRect.right - margin.right - offsetWidth)); + this.style.left = `${newLeftPosition}px`; + } + } + }, + + /** + * Constrains the size of the element to `fitInto` by setting `max-height` + * and/or `max-width`. + */ + constrain: function() { + if (this.__shouldPosition) { + return; + } + this._discoverInfo(); + + var info = this._fitInfo; + // position at (0px, 0px) if not already positioned, so we can measure the + // natural size. + if (!info.positionedBy.vertically) { + this.style.position = 'fixed'; + this.style.top = '0px'; + } + if (!info.positionedBy.horizontally) { + this.style.position = 'fixed'; + this.style.left = '0px'; + } + + // need border-box for margin/padding + this.sizingTarget.style.boxSizing = 'border-box'; + // constrain the width and height if not already set + var rect = this.getBoundingClientRect(); + if (!info.sizedBy.height) { + this.__sizeDimension( + rect, info.positionedBy.vertically, 'top', 'bottom', 'Height'); + } + if (!info.sizedBy.width) { + this.__sizeDimension( + rect, info.positionedBy.horizontally, 'left', 'right', 'Width'); + } + }, + + /** + * @protected + * @deprecated + */ + _sizeDimension: function(rect, positionedBy, start, end, extent) { + this.__sizeDimension(rect, positionedBy, start, end, extent); + }, + + /** + * @private + */ + __sizeDimension: function(rect, positionedBy, start, end, extent) { + var info = this._fitInfo; + var fitRect = this.__getNormalizedRect(this.fitInto); + var max = extent === 'Width' ? fitRect.width : fitRect.height; + var flip = (positionedBy === end); + var offset = flip ? max - rect[end] : rect[start]; + var margin = info.margin[flip ? start : end]; + var offsetExtent = 'offset' + extent; + var sizingOffset = this[offsetExtent] - this.sizingTarget[offsetExtent]; + this.sizingTarget.style['max' + extent] = + (max - margin - offset - sizingOffset) + 'px'; + }, + + /** + * Centers horizontally and vertically if not already positioned. This also + * sets `position:fixed`. + */ + center: function() { + if (this.__shouldPosition) { + return; + } + this._discoverInfo(); + + var positionedBy = this._fitInfo.positionedBy; + if (positionedBy.vertically && positionedBy.horizontally) { + // Already positioned. + return; + } + // Need position:fixed to center + this.style.position = 'fixed'; + // Take into account the offset caused by parents that create stacking + // contexts (e.g. with transform: translate3d). Translate to 0,0 and + // measure the bounding rect. + if (!positionedBy.vertically) { + this.style.top = '0px'; + } + if (!positionedBy.horizontally) { + this.style.left = '0px'; + } + // It will take in consideration margins and transforms + var rect = this.getBoundingClientRect(); + var fitRect = this.__getNormalizedRect(this.fitInto); + if (!positionedBy.vertically) { + var top = fitRect.top - rect.top + (fitRect.height - rect.height) / 2; + this.style.top = top + 'px'; + } + if (!positionedBy.horizontally) { + var left = fitRect.left - rect.left + (fitRect.width - rect.width) / 2; + this.style.left = left + 'px'; + } + }, + + __getNormalizedRect: function(target) { + if (target === document.documentElement || target === window) { + return { + top: 0, + left: 0, + width: window.innerWidth, + height: window.innerHeight, + right: window.innerWidth, + bottom: window.innerHeight + }; + } + return target.getBoundingClientRect(); + }, + + __getOffscreenArea: function(position, size, fitRect) { + var verticalCrop = Math.min(0, position.top) + + Math.min(0, fitRect.bottom - (position.top + size.height)); + var horizontalCrop = Math.min(0, position.left) + + Math.min(0, fitRect.right - (position.left + size.width)); + return Math.abs(verticalCrop) * size.width + + Math.abs(horizontalCrop) * size.height; + }, + + + __getPosition: function( + hAlign, vAlign, size, sizeNoMargins, positionRect, fitRect) { + // All the possible configurations. + // Ordered as top-left, top-right, bottom-left, bottom-right. + var positions = [ + { + verticalAlign: 'top', + horizontalAlign: 'left', + top: positionRect.top + this.verticalOffset, + left: positionRect.left + this.horizontalOffset + }, + { + verticalAlign: 'top', + horizontalAlign: 'right', + top: positionRect.top + this.verticalOffset, + left: positionRect.right - size.width - this.horizontalOffset + }, + { + verticalAlign: 'bottom', + horizontalAlign: 'left', + top: positionRect.bottom - size.height - this.verticalOffset, + left: positionRect.left + this.horizontalOffset + }, + { + verticalAlign: 'bottom', + horizontalAlign: 'right', + top: positionRect.bottom - size.height - this.verticalOffset, + left: positionRect.right - size.width - this.horizontalOffset + } + ]; + + if (this.noOverlap) { + // Duplicate. + for (var i = 0, l = positions.length; i < l; i++) { + var copy = {}; + for (var key in positions[i]) { + copy[key] = positions[i][key]; + } + positions.push(copy); + } + // Horizontal overlap only. + positions[0].top = positions[1].top += positionRect.height; + positions[2].top = positions[3].top -= positionRect.height; + // Vertical overlap only. + positions[4].left = positions[6].left += positionRect.width; + positions[5].left = positions[7].left -= positionRect.width; + } + + // Consider auto as null for coding convenience. + vAlign = vAlign === 'auto' ? null : vAlign; + hAlign = hAlign === 'auto' ? null : hAlign; + + if (!hAlign || hAlign === 'center') { + positions.push({ + verticalAlign: 'top', + horizontalAlign: 'center', + top: positionRect.top + this.verticalOffset + + (this.noOverlap ? positionRect.height : 0), + left: positionRect.left - sizeNoMargins.width / 2 + + positionRect.width / 2 + this.horizontalOffset + }); + positions.push({ + verticalAlign: 'bottom', + horizontalAlign: 'center', + top: positionRect.bottom - size.height - this.verticalOffset - + (this.noOverlap ? positionRect.height : 0), + left: positionRect.left - sizeNoMargins.width / 2 + + positionRect.width / 2 + this.horizontalOffset + }); + } + + if (!vAlign || vAlign === 'middle') { + positions.push({ + verticalAlign: 'middle', + horizontalAlign: 'left', + top: positionRect.top - sizeNoMargins.height / 2 + + positionRect.height / 2 + this.verticalOffset, + left: positionRect.left + this.horizontalOffset + + (this.noOverlap ? positionRect.width : 0) + }); + positions.push({ + verticalAlign: 'middle', + horizontalAlign: 'right', + top: positionRect.top - sizeNoMargins.height / 2 + + positionRect.height / 2 + this.verticalOffset, + left: positionRect.right - size.width - this.horizontalOffset - + (this.noOverlap ? positionRect.width : 0) + }); + } + + if (vAlign === 'middle' && hAlign === 'center') { + positions.push({ + verticalAlign: 'middle', + horizontalAlign: 'center', + top: positionRect.top - sizeNoMargins.height / 2 + + positionRect.height / 2 + this.verticalOffset, + left: positionRect.left - sizeNoMargins.width / 2 + + positionRect.width / 2 + this.horizontalOffset + }); + } + + var position; + for (var i = 0; i < positions.length; i++) { + var candidate = positions[i]; + var vAlignOk = candidate.verticalAlign === vAlign; + var hAlignOk = candidate.horizontalAlign === hAlign; + + // If both vAlign and hAlign are defined, return exact match. + // For dynamicAlign and noOverlap we'll have more than one candidate, so + // we'll have to check the offscreenArea to make the best choice. + if (!this.dynamicAlign && !this.noOverlap && vAlignOk && hAlignOk) { + position = candidate; + break; + } + + // Align is ok if alignment preferences are respected. If no preferences, + // it is considered ok. + var alignOk = (!vAlign || vAlignOk) && (!hAlign || hAlignOk); + + // Filter out elements that don't match the alignment (if defined). + // With dynamicAlign, we need to consider all the positions to find the + // one that minimizes the cropped area. + if (!this.dynamicAlign && !alignOk) { + continue; + } + + candidate.offscreenArea = + this.__getOffscreenArea(candidate, size, fitRect); + // If not cropped and respects the align requirements, keep it. + // This allows to prefer positions overlapping horizontally over the + // ones overlapping vertically. + if (candidate.offscreenArea === 0 && alignOk) { + position = candidate; + break; + } + position = position || candidate; + var diff = candidate.offscreenArea - position.offscreenArea; + // Check which crops less. If it crops equally, check if at least one + // align setting is ok. + if (diff < 0 || (diff === 0 && (vAlignOk || hAlignOk))) { + position = candidate; + } + } + + return position; + } + +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-flex-layout/iron-flex-layout.js": +/*!********************************************************************!*\ + !*** ./node_modules/@polymer/iron-flex-layout/iron-flex-layout.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + +/** +The `` component provides simple ways to use +[CSS flexible box +layout](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Flexible_boxes), +also known as flexbox. Note that this is an old element, that was written +before all modern browsers had non-prefixed flex styles. As such, nowadays you +don't really need to use this element anymore, and can use CSS flex styles +directly in your code. + +This component provides two different ways to use flexbox: + +1. [Layout +classes](https://github.com/PolymerElements/iron-flex-layout/tree/master/iron-flex-layout-classes.html). +The layout class stylesheet provides a simple set of class-based flexbox rules, +that let you specify layout properties directly in markup. You must include this +file in every element that needs to use them. + + Sample use: + + ``` + + + + ``` + + ```js + import {html} from '@polymer/polymer/lib/utils/html-tag.js'; + import '@polymer/iron-flex-layout/iron-flex-layout-classes.js'; + + const template = html` + + +
+
horizontal layout center alignment
+
+ `; + document.body.appendChild(template.content); + ``` + +2. [Custom CSS +mixins](https://github.com/PolymerElements/iron-flex-layout/blob/master/iron-flex-layout.html). +The mixin stylesheet includes custom CSS mixins that can be applied inside a CSS +rule using the `@apply` function. + +Please note that the old [/deep/ layout +classes](https://github.com/PolymerElements/iron-flex-layout/tree/master/classes) +are deprecated, and should not be used. To continue using layout properties +directly in markup, please switch to using the new `dom-module`-based +[layout +classes](https://github.com/PolymerElements/iron-flex-layout/tree/master/iron-flex-layout-classes.html). +Please note that the new version does not use `/deep/`, and therefore requires +you to import the `dom-modules` in every element that needs to use them. + +@group Iron Elements +@pseudoElement iron-flex-layout +@demo demo/index.html +*/ +const template = (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_1__.html)` + + + + + +`; + +template.setAttribute('style', 'display: none;'); +document.head.appendChild(template.content); + +var style = document.createElement('style'); +style.textContent = '[hidden] { display: none !important; }'; +document.head.appendChild(style); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-form-element-behavior/iron-form-element-behavior.js": +/*!****************************************************************************************!*\ + !*** ./node_modules/@polymer/iron-form-element-behavior/iron-form-element-behavior.js ***! + \****************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronFormElementBehavior: () => (/* binding */ IronFormElementBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + +/** + IronFormElementBehavior adds a `name`, `value` and `required` properties to + a custom element. It mostly exists for backcompatibility with Polymer 1.x, and + is probably not something you want to use. + + @demo demo/index.html + @polymerBehavior + */ +const IronFormElementBehavior = { + + properties: { + /** + * The name of this element. + */ + name: {type: String}, + + /** + * The value for this element. + * @type {*} + */ + value: {notify: true, type: String}, + + /** + * Set to true to mark the input as required. If used in a form, a + * custom element that uses this behavior should also use + * IronValidatableBehavior and define a custom validation method. + * Otherwise, a `required` element will always be considered valid. + * It's also strongly recommended to provide a visual style for the element + * when its value is invalid. + */ + required: {type: Boolean, value: false}, + }, + + // Empty implementations for backcompatibility. + attached: function() {}, + detached: function() {} +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-icon/iron-icon.js": +/*!******************************************************!*\ + !*** ./node_modules/@polymer/iron-icon/iron-icon.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_iron_flex_layout_iron_flex_layout_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/iron-flex-layout/iron-flex-layout.js */ "./node_modules/@polymer/iron-flex-layout/iron-flex-layout.js"); +/* harmony import */ var _polymer_iron_meta_iron_meta_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-meta/iron-meta.js */ "./node_modules/@polymer/iron-meta/iron-meta.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + +/** + +The `iron-icon` element displays an icon. By default an icon renders as a 24px +square. + +Example using src: + + + +Example setting size to 32px x 32px: + + + + + +The iron elements include several sets of icons. To use the default set of +icons, import `iron-icons.js` and use the `icon` attribute to specify an icon: + + + + + +To use a different built-in set of icons, import the specific +`iron-icons/-icons.js`, and specify the icon as `:`. +For example, to use a communication icon, you would use: + + + + + +You can also create custom icon sets of bitmap or SVG icons. + +Example of using an icon named `cherry` from a custom iconset with the ID +`fruit`: + + + +See `` and `` for more information about how to +create a custom iconset. + +See the `iron-icons` demo to see the icons available in the various iconsets. + +### Styling + +The following custom properties are available for styling: + +Custom property | Description | Default +----------------|-------------|---------- +`--iron-icon` | Mixin applied to the icon | {} +`--iron-icon-width` | Width of the icon | `24px` +`--iron-icon-height` | Height of the icon | `24px` +`--iron-icon-fill-color` | Fill color of the svg icon | `currentcolor` +`--iron-icon-stroke-color` | Stroke color of the svg icon | none + +@group Iron Elements +@element iron-icon +@demo demo/index.html +@hero hero.svg +@homepage polymer.github.io +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_2__.Polymer)({ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_4__.html)` + +`, + + is: 'iron-icon', + + properties: { + + /** + * The name of the icon to use. The name should be of the form: + * `iconset_name:icon_name`. + */ + icon: {type: String}, + + /** + * The name of the theme to used, if one is specified by the + * iconset. + */ + theme: {type: String}, + + /** + * If using iron-icon without an iconset, you can set the src to be + * the URL of an individual icon image file. Note that this will take + * precedence over a given icon attribute. + */ + src: {type: String}, + + /** + * @type {!IronMeta} + */ + _meta: {value: _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_5__.Base.create('iron-meta', {type: 'iconset'})} + + }, + + observers: [ + '_updateIcon(_meta, isAttached)', + '_updateIcon(theme, isAttached)', + '_srcChanged(src, isAttached)', + '_iconChanged(icon, isAttached)' + ], + + _DEFAULT_ICONSET: 'icons', + + _iconChanged: function(icon) { + var parts = (icon || '').split(':'); + this._iconName = parts.pop(); + this._iconsetName = parts.pop() || this._DEFAULT_ICONSET; + this._updateIcon(); + }, + + _srcChanged: function(src) { + this._updateIcon(); + }, + + _usesIconset: function() { + return this.icon || !this.src; + }, + + /** @suppress {visibility} */ + _updateIcon: function() { + if (this._usesIconset()) { + if (this._img && this._img.parentNode) { + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this.root).removeChild(this._img); + } + if (this._iconName === '') { + if (this._iconset) { + this._iconset.removeIcon(this); + } + } else if (this._iconsetName && this._meta) { + this._iconset = /** @type {?Polymer.Iconset} */ ( + this._meta.byKey(this._iconsetName)); + if (this._iconset) { + this._iconset.applyIcon(this, this._iconName, this.theme); + this.unlisten(window, 'iron-iconset-added', '_updateIcon'); + } else { + this.listen(window, 'iron-iconset-added', '_updateIcon'); + } + } + } else { + if (this._iconset) { + this._iconset.removeIcon(this); + } + if (!this._img) { + this._img = document.createElement('img'); + this._img.style.width = '100%'; + this._img.style.height = '100%'; + this._img.draggable = false; + } + this._img.src = this.src; + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this.root).appendChild(this._img); + } + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-icons/communication-icons.js": +/*!*****************************************************************!*\ + !*** ./node_modules/@polymer/iron-icons/communication-icons.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_iron_icon_iron_icon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/iron-icon/iron-icon.js */ "./node_modules/@polymer/iron-icon/iron-icon.js"); +/* harmony import */ var _polymer_iron_iconset_svg_iron_iconset_svg_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-iconset-svg/iron-iconset-svg.js */ "./node_modules/@polymer/iron-iconset-svg/iron-iconset-svg.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2014 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + +const template = (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_2__.html)` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +`; + +document.head.appendChild(template.content); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-icons/iron-icons.js": +/*!********************************************************!*\ + !*** ./node_modules/@polymer/iron-icons/iron-icons.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_iron_icon_iron_icon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/iron-icon/iron-icon.js */ "./node_modules/@polymer/iron-icon/iron-icon.js"); +/* harmony import */ var _polymer_iron_iconset_svg_iron_iconset_svg_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-iconset-svg/iron-iconset-svg.js */ "./node_modules/@polymer/iron-iconset-svg/iron-iconset-svg.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2014 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + +/** + +`iron-icons` is a utility import that includes the definition for the +`iron-icon` element, `iron-iconset-svg` element, as well as an import for the +default icon set. + +The `iron-icons` directory also includes imports for additional icon sets that +can be loaded into your project. + +Example loading icon set: + + + +To use an icon from one of these sets, first prefix your `iron-icon` with the +icon set name, followed by a colon, ":", and then the icon id. + +Example using the directions-bus icon from the maps icon set: + + + +See [iron-icon](https://www.webcomponents.org/element/@polymer/iron-icon) for +more information about working with icons. + +See [iron-iconset](https://www.webcomponents.org/element/@polymer/iron-iconset) +and +[iron-iconset-svg](https://www.webcomponents.org/element/@polymer/iron-iconset-svg) +for more information about how to create a custom iconset. + +@group Iron Elements +@pseudoElement iron-icons +@demo demo/index.html +*/ + +const template = (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_2__.html)` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +`; + +document.head.appendChild(template.content); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-iconset-svg/iron-iconset-svg.js": +/*!********************************************************************!*\ + !*** ./node_modules/@polymer/iron-iconset-svg/iron-iconset-svg.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_meta_iron_meta_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-meta/iron-meta.js */ "./node_modules/@polymer/iron-meta/iron-meta.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + +/** + * The `iron-iconset-svg` element allows users to define their own icon sets + * that contain svg icons. The svg icon elements should be children of the + * `iron-iconset-svg` element. Multiple icons should be given distinct id's. + * + * Using svg elements to create icons has a few advantages over traditional + * bitmap graphics like jpg or png. Icons that use svg are vector based so + * they are resolution independent and should look good on any device. They + * are stylable via css. Icons can be themed, colorized, and even animated. + * + * Example: + * + * + * + * + * + * + * + * + * + * + * + * + * This will automatically register the icon set "my-svg-icons" to the iconset + * database. To use these icons from within another element, make a + * `iron-iconset` element and call the `byId` method + * to retrieve a given iconset. To apply a particular icon inside an + * element use the `applyIcon` method. For example: + * + * iconset.applyIcon(iconNode, 'car'); + * + * @element iron-iconset-svg + * @demo demo/index.html + * @implements {Polymer.Iconset} + */ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_2__.Polymer)({ + is: 'iron-iconset-svg', + + properties: { + + /** + * The name of the iconset. + */ + name: {type: String, observer: '_nameChanged'}, + + /** + * The size of an individual icon. Note that icons must be square. + */ + size: {type: Number, value: 24}, + + /** + * Set to true to enable mirroring of icons where specified when they are + * stamped. Icons that should be mirrored should be decorated with a + * `mirror-in-rtl` attribute. + * + * NOTE: For performance reasons, direction will be resolved once per + * document per iconset, so moving icons in and out of RTL subtrees will + * not cause their mirrored state to change. + */ + rtlMirroring: {type: Boolean, value: false}, + + /** + * Set to true to measure RTL based on the dir attribute on the body or + * html elements (measured on document.body or document.documentElement as + * available). + */ + useGlobalRtlAttribute: {type: Boolean, value: false} + }, + + created: function() { + this._meta = new _polymer_iron_meta_iron_meta_js__WEBPACK_IMPORTED_MODULE_1__.IronMeta({type: 'iconset', key: null, value: null}); + }, + + attached: function() { + this.style.display = 'none'; + }, + + /** + * Construct an array of all icon names in this iconset. + * + * @return {!Array} Array of icon names. + */ + getIconNames: function() { + this._icons = this._createIconMap(); + return Object.keys(this._icons).map(function(n) { + return this.name + ':' + n; + }, this); + }, + + /** + * Applies an icon to the given element. + * + * An svg icon is prepended to the element's shadowRoot if it exists, + * otherwise to the element itself. + * + * If RTL mirroring is enabled, and the icon is marked to be mirrored in + * RTL, the element will be tested (once and only once ever for each + * iconset) to determine the direction of the subtree the element is in. + * This direction will apply to all future icon applications, although only + * icons marked to be mirrored will be affected. + * + * @method applyIcon + * @param {Element} element Element to which the icon is applied. + * @param {string} iconName Name of the icon to apply. + * @return {?Element} The svg element which renders the icon. + */ + applyIcon: function(element, iconName) { + // Remove old svg element + this.removeIcon(element); + // install new svg element + var svg = this._cloneIcon( + iconName, this.rtlMirroring && this._targetIsRTL(element)); + if (svg) { + // insert svg element into shadow root, if it exists + var pde = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(element.root || element); + pde.insertBefore(svg, pde.childNodes[0]); + return element._svgIcon = svg; + } + return null; + }, + + /** + * Remove an icon from the given element by undoing the changes effected + * by `applyIcon`. + * + * @param {Element} element The element from which the icon is removed. + */ + removeIcon: function(element) { + // Remove old svg element + if (element._svgIcon) { + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(element.root || element).removeChild(element._svgIcon); + element._svgIcon = null; + } + }, + + /** + * Measures and memoizes the direction of the element. Note that this + * measurement is only done once and the result is memoized for future + * invocations. + */ + _targetIsRTL: function(target) { + if (this.__targetIsRTL == null) { + if (this.useGlobalRtlAttribute) { + var globalElement = + (document.body && document.body.hasAttribute('dir')) ? + document.body : + document.documentElement; + + this.__targetIsRTL = globalElement.getAttribute('dir') === 'rtl'; + } else { + if (target && target.nodeType !== Node.ELEMENT_NODE) { + target = target.host; + } + + this.__targetIsRTL = + target && window.getComputedStyle(target)['direction'] === 'rtl'; + } + } + + return this.__targetIsRTL; + }, + + /** + * + * When name is changed, register iconset metadata + * + */ + _nameChanged: function() { + this._meta.value = null; + this._meta.key = this.name; + this._meta.value = this; + + this.async(function() { + this.fire('iron-iconset-added', this, {node: window}); + }); + }, + + /** + * Create a map of child SVG elements by id. + * + * @return {!Object} Map of id's to SVG elements. + */ + _createIconMap: function() { + // Objects chained to Object.prototype (`{}`) have members. Specifically, + // on FF there is a `watch` method that confuses the icon map, so we + // need to use a null-based object here. + var icons = Object.create(null); + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this).querySelectorAll('[id]').forEach(function(icon) { + icons[icon.id] = icon; + }); + return icons; + }, + + /** + * Produce installable clone of the SVG element matching `id` in this + * iconset, or `undefined` if there is no matching element. + * + * @return {Element} Returns an installable clone of the SVG element + * matching `id`. + */ + _cloneIcon: function(id, mirrorAllowed) { + // create the icon map on-demand, since the iconset itself has no discrete + // signal to know when it's children are fully parsed + this._icons = this._icons || this._createIconMap(); + return this._prepareSvgClone(this._icons[id], this.size, mirrorAllowed); + }, + + /** + * @param {Element} sourceSvg + * @param {number} size + * @param {Boolean} mirrorAllowed + * @return {Element} + */ + _prepareSvgClone: function(sourceSvg, size, mirrorAllowed) { + if (sourceSvg) { + var content = sourceSvg.cloneNode(true), + svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'), + viewBox = + content.getAttribute('viewBox') || '0 0 ' + size + ' ' + size, + cssText = + 'pointer-events: none; display: block; width: 100%; height: 100%;'; + + if (mirrorAllowed && content.hasAttribute('mirror-in-rtl')) { + cssText += + '-webkit-transform:scale(-1,1);transform:scale(-1,1);transform-origin:center;'; + } + + svg.setAttribute('viewBox', viewBox); + svg.setAttribute('preserveAspectRatio', 'xMidYMid meet'); + svg.setAttribute('focusable', 'false'); + // TODO(dfreedm): `pointer-events: none` works around + // https://crbug.com/370136 + // TODO(sjmiles): inline style may not be ideal, but avoids requiring a + // shadow-root + svg.style.cssText = cssText; + svg.appendChild(content).removeAttribute('id'); + return svg; + } + return null; + } + +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-image/iron-image.js": +/*!********************************************************!*\ + !*** ./node_modules/@polymer/iron-image/iron-image.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/* harmony import */ var _polymer_polymer_lib_utils_resolve_url_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/utils/resolve-url.js */ "./node_modules/@polymer/polymer/lib/utils/resolve-url.js"); +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt +The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt +The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt +Code distributed by Google as part of the polymer project is also +subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + +/** +`iron-image` is an element for displaying an image that provides useful sizing and +preloading options not found on the standard `` tag. + +The `sizing` option allows the image to be either cropped (`cover`) or +letterboxed (`contain`) to fill a fixed user-size placed on the element. + +The `preload` option prevents the browser from rendering the image until the +image is fully loaded. In the interim, either the element's CSS `background-color` +can be be used as the placeholder, or the `placeholder` property can be +set to a URL (preferably a data-URI, for instant rendering) for an +placeholder image. + +The `fade` option (only valid when `preload` is set) will cause the placeholder +image/color to be faded out once the image is rendered. + +Examples: + + Basically identical to `` tag: + + + + Will letterbox the image to fit: + + + + Will crop the image to fit: + + + + Will show light-gray background until the image loads: + + + + Will show a base-64 encoded placeholder image until the image loads: + + + + Will fade the light-gray background out once the image is loaded: + + + +Custom property | Description | Default +----------------|-------------|---------- +`--iron-image-placeholder` | Mixin applied to #placeholder | `{}` +`--iron-image-width` | Sets the width of the wrapped image | `auto` +`--iron-image-height` | Sets the height of the wrapped image | `auto` + +@group Iron Elements +@element iron-image +@demo demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__.Polymer)({ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_2__.html)` + + + + + +
+`, + + is: 'iron-image', + + properties: { + /** + * The URL of an image. + */ + src: {type: String, value: ''}, + + /** + * A short text alternative for the image. + */ + alt: {type: String, value: null}, + + /** + * CORS enabled images support: + * https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image + */ + crossorigin: {type: String, value: null}, + + /** + * When true, the image is prevented from loading and any placeholder is + * shown. This may be useful when a binding to the src property is known to + * be invalid, to prevent 404 requests. + */ + preventLoad: {type: Boolean, value: false}, + + /** + * Sets a sizing option for the image. Valid values are `contain` (full + * aspect ratio of the image is contained within the element and + * letterboxed) or `cover` (image is cropped in order to fully cover the + * bounds of the element), or `null` (default: image takes natural size). + */ + sizing: {type: String, value: null, reflectToAttribute: true}, + + /** + * When a sizing option is used (`cover` or `contain`), this determines + * how the image is aligned within the element bounds. + */ + position: {type: String, value: 'center'}, + + /** + * When `true`, any change to the `src` property will cause the + * `placeholder` image to be shown until the new image has loaded. + */ + preload: {type: Boolean, value: false}, + + /** + * This image will be used as a background/placeholder until the src image + * has loaded. Use of a data-URI for placeholder is encouraged for instant + * rendering. + */ + placeholder: {type: String, value: null, observer: '_placeholderChanged'}, + + /** + * When `preload` is true, setting `fade` to true will cause the image to + * fade into place. + */ + fade: {type: Boolean, value: false}, + + /** + * Read-only value that is true when the image is loaded. + */ + loaded: {notify: true, readOnly: true, type: Boolean, value: false}, + + /** + * Read-only value that tracks the loading state of the image when the + * `preload` option is used. + */ + loading: {notify: true, readOnly: true, type: Boolean, value: false}, + + /** + * Read-only value that indicates that the last set `src` failed to load. + */ + error: {notify: true, readOnly: true, type: Boolean, value: false}, + + /** + * Can be used to set the width of image (e.g. via binding); size may also + * be set via CSS. + */ + width: {observer: '_widthChanged', type: Number, value: null}, + + /** + * Can be used to set the height of image (e.g. via binding); size may also + * be set via CSS. + * + * @attribute height + * @type number + * @default null + */ + height: {observer: '_heightChanged', type: Number, value: null}, + }, + + observers: [ + '_transformChanged(sizing, position)', + '_loadStateObserver(src, preventLoad)' + ], + + created: function() { + this._resolvedSrc = ''; + }, + + _imgOnLoad: function() { + if (this.$.img.src !== this._resolveSrc(this.src)) { + return; + } + + this._setLoading(false); + this._setLoaded(true); + this._setError(false); + }, + + _imgOnError: function() { + if (this.$.img.src !== this._resolveSrc(this.src)) { + return; + } + + this.$.img.removeAttribute('src'); + this.$.sizedImgDiv.style.backgroundImage = ''; + + this._setLoading(false); + this._setLoaded(false); + this._setError(true); + }, + + _computePlaceholderHidden: function() { + return !this.preload || (!this.fade && !this.loading && this.loaded); + }, + + _computePlaceholderClassName: function() { + return (this.preload && this.fade && !this.loading && this.loaded) ? + 'faded-out' : + ''; + }, + + _computeImgDivHidden: function() { + return !this.sizing; + }, + + _computeImgDivARIAHidden: function() { + return this.alt === '' ? 'true' : undefined; + }, + + _computeImgDivARIALabel: function() { + if (this.alt !== null) { + return this.alt; + } + + // Polymer.ResolveUrl.resolveUrl will resolve '' relative to a URL x to + // that URL x, but '' is the default for src. + if (this.src === '') { + return ''; + } + + // NOTE: Use of `URL` was removed here because IE11 doesn't support + // constructing it. If this ends up being problematic, we should + // consider reverting and adding the URL polyfill as a dev dependency. + var resolved = this._resolveSrc(this.src); + // Remove query parts, get file name. + return resolved.replace(/[?|#].*/g, '').split('/').pop(); + }, + + _computeImgHidden: function() { + return !!this.sizing; + }, + + _widthChanged: function() { + this.style.width = isNaN(this.width) ? this.width : this.width + 'px'; + }, + + _heightChanged: function() { + this.style.height = isNaN(this.height) ? this.height : this.height + 'px'; + }, + + _loadStateObserver: function(src, preventLoad) { + var newResolvedSrc = this._resolveSrc(src); + if (newResolvedSrc === this._resolvedSrc) { + return; + } + + this._resolvedSrc = ''; + this.$.img.removeAttribute('src'); + this.$.sizedImgDiv.style.backgroundImage = ''; + + if (src === '' || preventLoad) { + this._setLoading(false); + this._setLoaded(false); + this._setError(false); + } else { + this._resolvedSrc = newResolvedSrc; + this.$.img.src = this._resolvedSrc; + this.$.sizedImgDiv.style.backgroundImage = + 'url("' + this._resolvedSrc + '")'; + + this._setLoading(true); + this._setLoaded(false); + this._setError(false); + } + }, + + _placeholderChanged: function() { + this.$.placeholder.style.backgroundImage = + this.placeholder ? 'url("' + this.placeholder + '")' : ''; + }, + + _transformChanged: function() { + var sizedImgDivStyle = this.$.sizedImgDiv.style; + var placeholderStyle = this.$.placeholder.style; + + sizedImgDivStyle.backgroundSize = placeholderStyle.backgroundSize = + this.sizing; + + sizedImgDivStyle.backgroundPosition = placeholderStyle.backgroundPosition = + this.sizing ? this.position : ''; + + sizedImgDivStyle.backgroundRepeat = placeholderStyle.backgroundRepeat = + this.sizing ? 'no-repeat' : ''; + }, + + _resolveSrc: function(testSrc) { + var resolved = (0,_polymer_polymer_lib_utils_resolve_url_js__WEBPACK_IMPORTED_MODULE_3__.resolveUrl)(testSrc, this.$.baseURIAnchor.href); + // NOTE: Use of `URL` was removed here because IE11 doesn't support + // constructing it. If this ends up being problematic, we should + // consider reverting and adding the URL polyfill as a dev dependency. + if (resolved.length >= 2 && resolved[0] === '/' && resolved[1] !== '/') { + // In IE location.origin might not work + // https://connect.microsoft.com/IE/feedback/details/1763802/location-origin-is-undefined-in-ie-11-on-windows-10-but-works-on-windows-7 + resolved = (location.origin || location.protocol + '//' + location.host) + + resolved; + } + return resolved; + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-input/iron-input.js": +/*!********************************************************!*\ + !*** ./node_modules/@polymer/iron-input/iron-input.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_a11y_announcer_iron_a11y_announcer_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-a11y-announcer/iron-a11y-announcer.js */ "./node_modules/@polymer/iron-a11y-announcer/iron-a11y-announcer.js"); +/* harmony import */ var _polymer_iron_validatable_behavior_iron_validatable_behavior_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-validatable-behavior/iron-validatable-behavior.js */ "./node_modules/@polymer/iron-validatable-behavior/iron-validatable-behavior.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + +/** +`` is a wrapper to a native `` element, that adds two-way +binding and prevention of invalid input. To use it, you must distribute a native +`` yourself. You can continue to use the native `input` as you would +normally: + + + + + + + + + +### Two-way binding + +By default you can only get notified of changes to a native ``'s `value` +due to user input: + + + +This means that if you imperatively set the value (i.e. `someNativeInput.value = +'foo'`), no events will be fired and this change cannot be observed. + +`iron-input` adds the `bind-value` property that mirrors the native `input`'s +'`value` property; this property can be used for two-way data binding. +`bind-value` will notify if it is changed either by user input or by script. + + + + + +Note: this means that if you want to imperatively set the native `input`'s, you +_must_ set `bind-value` instead, so that the wrapper `iron-input` can be +notified. + +### Validation + +`iron-input` uses the native `input`'s validation. For simplicity, `iron-input` +has a `validate()` method (which internally just checks the distributed +`input`'s validity), which sets an `invalid` attribute that can also be used for +styling. + +To validate automatically as you type, you can use the `auto-validate` +attribute. + +`iron-input` also fires an `iron-input-validate` event after `validate()` is +called. You can use it to implement a custom validator: + + var CatsOnlyValidator = { + validate: function(ironInput) { + var valid = !ironInput.bindValue || ironInput.bindValue === 'cat'; + ironInput.invalid = !valid; + return valid; + } + } + ironInput.addEventListener('iron-input-validate', function() { + CatsOnly.validate(input2); + }); + +You can also use an element implementing an +[`IronValidatorBehavior`](/element/PolymerElements/iron-validatable-behavior). +This example can also be found in the demo for this element: + + + + + +### Preventing invalid input + +It may be desirable to only allow users to enter certain characters. You can use +the `allowed-pattern` attribute to accomplish this. This feature is separate +from validation, and `allowed-pattern` does not affect how the input is +validated. + + // Only allow typing digits, but a valid input has exactly 5 digits. + + + + +@demo demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_3__.Polymer)({ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_5__.html)` + + +`, + + is: 'iron-input', + behaviors: [_polymer_iron_validatable_behavior_iron_validatable_behavior_js__WEBPACK_IMPORTED_MODULE_2__.IronValidatableBehavior], + + /** + * Fired whenever `validate()` is called. + * + * @event iron-input-validate + */ + + properties: { + + /** + * Use this property instead of `value` for two-way data binding, or to + * set a default value for the input. **Do not** use the distributed + * input's `value` property to set a default value. + */ + bindValue: {type: String, value: ''}, + + /** + * Computed property that echoes `bindValue` (mostly used for Polymer 1.0 + * backcompatibility, if you were one-way binding to the Polymer 1.0 + * `input is="iron-input"` value attribute). + */ + value: {type: String, computed: '_computeValue(bindValue)'}, + + /** + * Regex-like list of characters allowed as input; all characters not in the + * list will be rejected. The recommended format should be a list of allowed + * characters, for example, `[a-zA-Z0-9.+-!;:]`. + * + * This pattern represents the allowed characters for the field; as the user + * inputs text, each individual character will be checked against the + * pattern (rather than checking the entire value as a whole). If a + * character is not a match, it will be rejected. + * + * Pasted input will have each character checked individually; if any + * character doesn't match `allowedPattern`, the entire pasted string will + * be rejected. + * + * Note: if you were using `iron-input` in 1.0, you were also required to + * set `prevent-invalid-input`. This is no longer needed as of Polymer 2.0, + * and will be set automatically for you if an `allowedPattern` is provided. + * + */ + allowedPattern: {type: String}, + + /** + * Set to true to auto-validate the input value as you type. + */ + autoValidate: {type: Boolean, value: false}, + + /** + * The native input element. + */ + _inputElement: Object, + }, + + observers: ['_bindValueChanged(bindValue, _inputElement)'], + listeners: {'input': '_onInput', 'keypress': '_onKeypress'}, + + created: function() { + _polymer_iron_a11y_announcer_iron_a11y_announcer_js__WEBPACK_IMPORTED_MODULE_1__.IronA11yAnnouncer.requestAvailability(); + this._previousValidInput = ''; + this._patternAlreadyChecked = false; + }, + + attached: function() { + // If the input is added at a later time, update the internal reference. + this._observer = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_4__.dom)(this).observeNodes(function(info) { + this._initSlottedInput(); + }.bind(this)); + }, + + detached: function() { + if (this._observer) { + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_4__.dom)(this).unobserveNodes(this._observer); + this._observer = null; + } + }, + + /** + * Returns the distributed input element. + */ + get inputElement() { + return this._inputElement; + }, + + _initSlottedInput: function() { + this._inputElement = this.getEffectiveChildren()[0]; + + if (this.inputElement && this.inputElement.value) { + this.bindValue = this.inputElement.value; + } + + this.fire('iron-input-ready'); + }, + + get _patternRegExp() { + var pattern; + if (this.allowedPattern) { + pattern = new RegExp(this.allowedPattern); + } else { + switch (this.inputElement.type) { + case 'number': + pattern = /[0-9.,e-]/; + break; + } + } + return pattern; + }, + + /** + * @suppress {checkTypes} + */ + _bindValueChanged: function(bindValue, inputElement) { + // The observer could have run before attached() when we have actually + // initialized this property. + if (!inputElement) { + return; + } + + if (bindValue === undefined) { + inputElement.value = null; + } else if (bindValue !== inputElement.value) { + this.inputElement.value = bindValue; + } + + if (this.autoValidate) { + this.validate(); + } + + // manually notify because we don't want to notify until after setting value + this.fire('bind-value-changed', {value: bindValue}); + }, + + _onInput: function() { + // Need to validate each of the characters pasted if they haven't + // been validated inside `_onKeypress` already. + if (this.allowedPattern && !this._patternAlreadyChecked) { + var valid = this._checkPatternValidity(); + if (!valid) { + this._announceInvalidCharacter( + 'Invalid string of characters not entered.'); + this.inputElement.value = this._previousValidInput; + } + } + this.bindValue = this._previousValidInput = this.inputElement.value; + this._patternAlreadyChecked = false; + }, + + _isPrintable: function(event) { + // What a control/printable character is varies wildly based on the browser. + // - most control characters (arrows, backspace) do not send a `keypress` + // event + // in Chrome, but the *do* on Firefox + // - in Firefox, when they do send a `keypress` event, control chars have + // a charCode = 0, keyCode = xx (for ex. 40 for down arrow) + // - printable characters always send a keypress event. + // - in Firefox, printable chars always have a keyCode = 0. In Chrome, the + // keyCode + // always matches the charCode. + // None of this makes any sense. + + // For these keys, ASCII code == browser keycode. + var anyNonPrintable = (event.keyCode == 8) || // backspace + (event.keyCode == 9) || // tab + (event.keyCode == 13) || // enter + (event.keyCode == 27); // escape + + // For these keys, make sure it's a browser keycode and not an ASCII code. + var mozNonPrintable = (event.keyCode == 19) || // pause + (event.keyCode == 20) || // caps lock + (event.keyCode == 45) || // insert + (event.keyCode == 46) || // delete + (event.keyCode == 144) || // num lock + (event.keyCode == 145) || // scroll lock + (event.keyCode > 32 && + event.keyCode < 41) || // page up/down, end, home, arrows + (event.keyCode > 111 && event.keyCode < 124); // fn keys + + return !anyNonPrintable && !(event.charCode == 0 && mozNonPrintable); + }, + + _onKeypress: function(event) { + if (!this.allowedPattern && this.inputElement.type !== 'number') { + return; + } + var regexp = this._patternRegExp; + if (!regexp) { + return; + } + + // Handle special keys and backspace + if (event.metaKey || event.ctrlKey || event.altKey) { + return; + } + + // Check the pattern either here or in `_onInput`, but not in both. + this._patternAlreadyChecked = true; + + var thisChar = String.fromCharCode(event.charCode); + if (this._isPrintable(event) && !regexp.test(thisChar)) { + event.preventDefault(); + this._announceInvalidCharacter( + 'Invalid character ' + thisChar + ' not entered.'); + } + }, + + _checkPatternValidity: function() { + var regexp = this._patternRegExp; + if (!regexp) { + return true; + } + for (var i = 0; i < this.inputElement.value.length; i++) { + if (!regexp.test(this.inputElement.value[i])) { + return false; + } + } + return true; + }, + + /** + * Returns true if `value` is valid. The validator provided in `validator` + * will be used first, then any constraints. + * @return {boolean} True if the value is valid. + */ + validate: function() { + if (!this.inputElement) { + this.invalid = false; + return true; + } + + // Use the nested input's native validity. + var valid = this.inputElement.checkValidity(); + + // Only do extra checking if the browser thought this was valid. + if (valid) { + // Empty, required input is invalid + if (this.required && this.bindValue === '') { + valid = false; + } else if (this.hasValidator()) { + valid = _polymer_iron_validatable_behavior_iron_validatable_behavior_js__WEBPACK_IMPORTED_MODULE_2__.IronValidatableBehavior.validate.call(this, this.bindValue); + } + } + + this.invalid = !valid; + this.fire('iron-input-validate'); + return valid; + }, + + _announceInvalidCharacter: function(message) { + this.fire('iron-announce', {text: message}); + }, + + _computeValue: function(bindValue) { + return bindValue; + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-location/iron-location.js": +/*!**************************************************************!*\ + !*** ./node_modules/@polymer/iron-location/iron-location.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + +/** + +The `iron-location` element manages binding to and from the current URL. + +iron-location is the first, and lowest level element in the Polymer team's +routing system. This is a beta release of iron-location as we continue work +on higher level elements, and as such iron-location may undergo breaking +changes. + +#### Properties + +When the URL is: `/search?query=583#details` iron-location's properties will be: + + - path: `'/search'` + - query: `'query=583'` + - hash: `'details'` + +These bindings are bidirectional. Modifying them will in turn modify the URL. + +iron-location is only active while it is attached to the document. + +#### Links + +While iron-location is active in the document it will intercept clicks on links +within your site, updating the URL pushing the updated URL out through the +databinding system. iron-location only intercepts clicks with the intent to +open in the same window, so middle mouse clicks and ctrl/cmd clicks work fine. + +You can customize this behavior with the `urlSpaceRegex`. + +#### Dwell Time + +iron-location protects against accidental history spamming by only adding +entries to the user's history if the URL stays unchanged for `dwellTime` +milliseconds. + +@demo demo/index.html + + */ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__.Polymer)({ + is: 'iron-location', + _template: null, + + properties: { + /** + * The pathname component of the URL. + */ + path: { + type: String, + notify: true, + value: function() { + return window.decodeURIComponent(window.location.pathname); + } + }, + + /** + * The query string portion of the URL. + */ + query: { + type: String, + notify: true, + value: function() { + return window.location.search.slice(1); + } + }, + + /** + * The hash component of the URL. + */ + hash: { + type: String, + notify: true, + value: function() { + return window.decodeURIComponent(window.location.hash.slice(1)); + } + }, + + /** + * If the user was on a URL for less than `dwellTime` milliseconds, it + * won't be added to the browser's history, but instead will be replaced + * by the next entry. + * + * This is to prevent large numbers of entries from clogging up the user's + * browser history. Disable by setting to a negative number. + */ + dwellTime: {type: Number, value: 2000}, + + /** + * A regexp that defines the set of URLs that should be considered part + * of this web app. + * + * Clicking on a link that matches this regex won't result in a full page + * navigation, but will instead just update the URL state in place. + * + * This regexp is given everything after the origin in an absolute + * URL. So to match just URLs that start with /search/ do: + * url-space-regex="^/search/" + * + * @type {string|RegExp} + */ + urlSpaceRegex: {type: String, value: ''}, + + /** + * A flag that specifies whether the spaces in query that would normally be + * encoded as %20 should be encoded as +. + * + * Given an example text "hello world", it is encoded in query as + * - "hello%20world" without the parameter + * - "hello+world" with the parameter + */ + encodeSpaceAsPlusInQuery: {type: Boolean, value: false}, + + /** + * urlSpaceRegex, but coerced into a regexp. + * + * @type {RegExp} + */ + _urlSpaceRegExp: {computed: '_makeRegExp(urlSpaceRegex)'}, + + _lastChangedAt: {type: Number}, + + _initialized: {type: Boolean, value: false} + }, + + hostAttributes: {hidden: true}, + + observers: ['_updateUrl(path, query, hash)'], + + created: function() { + this.__location = window.location; + }, + + attached: function() { + this.listen(window, 'hashchange', '_hashChanged'); + this.listen(window, 'location-changed', '_urlChanged'); + this.listen(window, 'popstate', '_urlChanged'); + this.listen( + /** @type {!HTMLBodyElement} */ (document.body), + 'click', + '_globalOnClick'); + // Give a 200ms grace period to make initial redirects without any + // additions to the user's history. + this._lastChangedAt = window.performance.now() - (this.dwellTime - 200); + this._initialized = true; + + this._urlChanged(); + }, + + detached: function() { + this.unlisten(window, 'hashchange', '_hashChanged'); + this.unlisten(window, 'location-changed', '_urlChanged'); + this.unlisten(window, 'popstate', '_urlChanged'); + this.unlisten( + /** @type {!HTMLBodyElement} */ (document.body), + 'click', + '_globalOnClick'); + this._initialized = false; + }, + + _hashChanged: function() { + this.hash = window.decodeURIComponent(this.__location.hash.substring(1)); + }, + + _urlChanged: function() { + // We want to extract all info out of the updated URL before we + // try to write anything back into it. + // + // i.e. without _dontUpdateUrl we'd overwrite the new path with the old + // one when we set this.hash. Likewise for query. + this._dontUpdateUrl = true; + this._hashChanged(); + this.path = window.decodeURIComponent(this.__location.pathname); + this.query = this.__location.search.substring(1); + this._dontUpdateUrl = false; + this._updateUrl(); + }, + + _getUrl: function() { + var partiallyEncodedPath = + window.encodeURI(this.path).replace(/\#/g, '%23').replace(/\?/g, '%3F'); + var partiallyEncodedQuery = ''; + if (this.query) { + partiallyEncodedQuery = '?' + this.query.replace(/\#/g, '%23'); + if (this.encodeSpaceAsPlusInQuery) { + partiallyEncodedQuery = partiallyEncodedQuery.replace(/\+/g, '%2B') + .replace(/ /g, '+') + .replace(/%20/g, '+'); + } else { + // required for edge + partiallyEncodedQuery = + partiallyEncodedQuery.replace(/\+/g, '%2B').replace(/ /g, '%20'); + } + } + var partiallyEncodedHash = ''; + if (this.hash) { + partiallyEncodedHash = '#' + window.encodeURI(this.hash); + } + return ( + partiallyEncodedPath + partiallyEncodedQuery + partiallyEncodedHash); + }, + + _updateUrl: function() { + if (this._dontUpdateUrl || !this._initialized) { + return; + } + + if (this.path === window.decodeURIComponent(this.__location.pathname) && + this.query === this.__location.search.substring(1) && + this.hash === + window.decodeURIComponent(this.__location.hash.substring(1))) { + // Nothing to do, the current URL is a representation of our properties. + return; + } + + var newUrl = this._getUrl(); + // Need to use a full URL in case the containing page has a base URI. + var fullNewUrl = + new URL(newUrl, this.__location.protocol + '//' + this.__location.host) + .href; + var now = window.performance.now(); + var shouldReplace = this._lastChangedAt + this.dwellTime > now; + this._lastChangedAt = now; + + if (shouldReplace) { + window.history.replaceState({}, '', fullNewUrl); + } else { + window.history.pushState({}, '', fullNewUrl); + } + + this.fire('location-changed', {}, {node: window}); + }, + + /** + * A necessary evil so that links work as expected. Does its best to + * bail out early if possible. + * + * @param {MouseEvent} event . + */ + _globalOnClick: function(event) { + // If another event handler has stopped this event then there's nothing + // for us to do. This can happen e.g. when there are multiple + // iron-location elements in a page. + if (event.defaultPrevented) { + return; + } + + var href = this._getSameOriginLinkHref(event); + + if (!href) { + return; + } + + event.preventDefault(); + + // If the navigation is to the current page we shouldn't add a history + // entry or fire a change event. + if (href === this.__location.href) { + return; + } + + window.history.pushState({}, '', href); + this.fire('location-changed', {}, {node: window}); + }, + + /** + * Returns the absolute URL of the link (if any) that this click event + * is clicking on, if we can and should override the resulting full + * page navigation. Returns null otherwise. + * + * @param {MouseEvent} event . + * @return {string?} . + */ + _getSameOriginLinkHref: function(event) { + // We only care about left-clicks. + if (event.button !== 0) { + return null; + } + + // We don't want modified clicks, where the intent is to open the page + // in a new tab. + if (event.metaKey || event.ctrlKey || event.shiftKey) { + return null; + } + + var eventPath = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_2__.dom)(event).path; + var anchor = null; + + for (var i = 0; i < eventPath.length; i++) { + var element = eventPath[i]; + + if (element.tagName === 'A' && element.href) { + anchor = element; + break; + } + } + + // If there's no link there's nothing to do. + if (!anchor) { + return null; + } + + // Target blank is a new tab, don't intercept. + if (anchor.target === '_blank') { + return null; + } + + // If the link is for an existing parent frame, don't intercept. + if ((anchor.target === '_top' || anchor.target === '_parent') && + window.top !== window) { + return null; + } + + // If the link is a download, don't intercept. + if (anchor.download) { + return null; + } + + var href = anchor.href; + + // It only makes sense for us to intercept same-origin navigations. + // pushState/replaceState don't work with cross-origin links. + var url; + + if (document.baseURI != null) { + url = new URL(href, /** @type {string} */ (document.baseURI)); + } else { + url = new URL(href); + } + + var origin; + + // IE Polyfill + if (this.__location.origin) { + origin = this.__location.origin; + } else { + origin = this.__location.protocol + '//' + this.__location.host; + } + + var urlOrigin; + + if (url.origin) { + urlOrigin = url.origin; + } else { + // IE always adds port number on HTTP and HTTPS on .host but not on + // window.location.host + var urlHost = url.host; + var urlPort = url.port; + var urlProtocol = url.protocol; + var isExtraneousHTTPS = urlProtocol === 'https:' && urlPort === '443'; + var isExtraneousHTTP = urlProtocol === 'http:' && urlPort === '80'; + + if (isExtraneousHTTPS || isExtraneousHTTP) { + urlHost = url.hostname; + } + urlOrigin = urlProtocol + '//' + urlHost; + } + + if (urlOrigin !== origin) { + return null; + } + + var normalizedHref = url.pathname + url.search + url.hash; + + // pathname should start with '/', but may not if `new URL` is not supported + if (normalizedHref[0] !== '/') { + normalizedHref = '/' + normalizedHref; + } + + // If we've been configured not to handle this url... don't handle it! + if (this._urlSpaceRegExp && !this._urlSpaceRegExp.test(normalizedHref)) { + return null; + } + + // Need to use a full URL in case the containing page has a base URI. + var fullNormalizedHref = new URL(normalizedHref, this.__location.href).href; + return fullNormalizedHref; + }, + + _makeRegExp: function(urlSpaceRegex) { + return RegExp(urlSpaceRegex); + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-location/iron-query-params.js": +/*!******************************************************************!*\ + !*** ./node_modules/@polymer/iron-location/iron-query-params.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + +/** + * @demo demo/iron-query-params.html + */ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__.Polymer)({ + is: 'iron-query-params', + _template: null, + + properties: { + /** + * @type{string|undefined} + */ + paramsString: { + type: String, + notify: true, + observer: 'paramsStringChanged', + }, + + /** + * @type{Object|undefined} + */ + paramsObject: { + type: Object, + notify: true, + }, + + _dontReact: {type: Boolean, value: false} + }, + + hostAttributes: {hidden: true}, + + observers: ['paramsObjectChanged(paramsObject.*)'], + + paramsStringChanged: function() { + this._dontReact = true; + this.paramsObject = this._decodeParams(this.paramsString); + this._dontReact = false; + }, + + paramsObjectChanged: function() { + if (this._dontReact) { + return; + } + this.paramsString = this._encodeParams(this.paramsObject) + .replace(/%3F/g, '?') + .replace(/%2F/g, '/') + .replace(/'/g, '%27'); + }, + + _encodeParams: function(params) { + var encodedParams = []; + + for (var key in params) { + var value = params[key]; + + if (value === '') { + encodedParams.push(encodeURIComponent(key)); + + } else if (value) { + encodedParams.push( + encodeURIComponent(key) + '=' + + encodeURIComponent(value.toString())); + } + } + return encodedParams.join('&'); + }, + + _decodeParams: function(paramString) { + var params = {}; + // Work around a bug in decodeURIComponent where + is not + // converted to spaces: + paramString = (paramString || '').replace(/\+/g, '%20'); + var paramList = paramString.split('&'); + for (var i = 0; i < paramList.length; i++) { + var param = paramList[i].split('='); + if (param[0]) { + params[decodeURIComponent(param[0])] = + decodeURIComponent(param[1] || ''); + } + } + return params; + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-menu-behavior/iron-menu-behavior.js": +/*!************************************************************************!*\ + !*** ./node_modules/@polymer/iron-menu-behavior/iron-menu-behavior.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronMenuBehavior: () => (/* binding */ IronMenuBehavior), +/* harmony export */ IronMenuBehaviorImpl: () => (/* binding */ IronMenuBehaviorImpl) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_a11y_keys_behavior_iron_a11y_keys_behavior_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js */ "./node_modules/@polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js"); +/* harmony import */ var _polymer_iron_selector_iron_multi_selectable_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-selector/iron-multi-selectable.js */ "./node_modules/@polymer/iron-selector/iron-multi-selectable.js"); +/* harmony import */ var _polymer_iron_selector_iron_selectable_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/iron-selector/iron-selectable.js */ "./node_modules/@polymer/iron-selector/iron-selectable.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + +/** + * `IronMenuBehavior` implements accessible menu behavior. + * + * @demo demo/index.html + * @polymerBehavior IronMenuBehavior + */ +const IronMenuBehaviorImpl = { + + properties: { + + /** + * Returns the currently focused item. + * @type {?Object} + */ + focusedItem: + {observer: '_focusedItemChanged', readOnly: true, type: Object}, + + /** + * The attribute to use on menu items to look up the item title. Typing the + * first letter of an item when the menu is open focuses that item. If + * unset, `textContent` will be used. + */ + attrForItemTitle: {type: String}, + + /** + * @type {boolean} + */ + disabled: { + type: Boolean, + value: false, + observer: '_disabledChanged', + }, + }, + + /** + * The list of keys has been taken from + * https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/getModifierState + * @private + */ + _MODIFIER_KEYS: [ + 'Alt', + 'AltGraph', + 'CapsLock', + 'Control', + 'Fn', + 'FnLock', + 'Hyper', + 'Meta', + 'NumLock', + 'OS', + 'ScrollLock', + 'Shift', + 'Super', + 'Symbol', + 'SymbolLock' + ], + + /** @private */ + _SEARCH_RESET_TIMEOUT_MS: 1000, + + /** @private */ + _previousTabIndex: 0, + + hostAttributes: { + 'role': 'menu', + }, + + observers: ['_updateMultiselectable(multi)'], + + listeners: { + 'focus': '_onFocus', + 'keydown': '_onKeydown', + 'iron-items-changed': '_onIronItemsChanged' + }, + + /** + * @type {!Object} + */ + keyBindings: { + 'up': '_onUpKey', + 'down': '_onDownKey', + 'esc': '_onEscKey', + 'shift+tab:keydown': '_onShiftTabDown' + }, + + attached: function() { + this._resetTabindices(); + }, + + /** + * Selects the given value. If the `multi` property is true, then the selected + * state of the `value` will be toggled; otherwise the `value` will be + * selected. + * + * @param {string|number} value the value to select. + */ + select: function(value) { + // Cancel automatically focusing a default item if the menu received focus + // through a user action selecting a particular item. + if (this._defaultFocusAsync) { + this.cancelAsync(this._defaultFocusAsync); + this._defaultFocusAsync = null; + } + var item = this._valueToItem(value); + if (item && item.hasAttribute('disabled')) + return; + this._setFocusedItem(item); + _polymer_iron_selector_iron_multi_selectable_js__WEBPACK_IMPORTED_MODULE_2__.IronMultiSelectableBehaviorImpl.select.apply(this, arguments); + }, + + /** + * Resets all tabindex attributes to the appropriate value based on the + * current selection state. The appropriate value is `0` (focusable) for + * the default selected item, and `-1` (not keyboard focusable) for all + * other items. Also sets the correct initial values for aria-selected + * attribute, true for default selected item and false for others. + */ + _resetTabindices: function() { + var firstSelectedItem = this.multi ? + (this.selectedItems && this.selectedItems[0]) : + this.selectedItem; + + this.items.forEach(function(item) { + item.setAttribute('tabindex', item === firstSelectedItem ? '0' : '-1'); + item.setAttribute('aria-selected', this._selection.isSelected(item)); + }, this); + }, + + /** + * Sets appropriate ARIA based on whether or not the menu is meant to be + * multi-selectable. + * + * @param {boolean} multi True if the menu should be multi-selectable. + */ + _updateMultiselectable: function(multi) { + if (multi) { + this.setAttribute('aria-multiselectable', 'true'); + } else { + this.removeAttribute('aria-multiselectable'); + } + }, + + /** + * Given a KeyboardEvent, this method will focus the appropriate item in the + * menu (if there is a relevant item, and it is possible to focus it). + * + * @param {KeyboardEvent} event A KeyboardEvent. + */ + _focusWithKeyboardEvent: function(event) { + // Make sure that the key pressed is not a modifier key. + // getModifierState is not being used, as it is not available in Safari + // earlier than 10.0.2 (https://trac.webkit.org/changeset/206725/webkit) + if (this._MODIFIER_KEYS.indexOf(event.key) !== -1) + return; + + this.cancelDebouncer('_clearSearchText'); + + var searchText = this._searchText || ''; + var key = event.key && event.key.length == 1 ? + event.key : + String.fromCharCode(event.keyCode); + searchText += key.toLocaleLowerCase(); + + var searchLength = searchText.length; + + for (var i = 0, item; item = this.items[i]; i++) { + if (item.hasAttribute('disabled')) { + continue; + } + + var attr = this.attrForItemTitle || 'textContent'; + var title = (item[attr] || item.getAttribute(attr) || '').trim(); + + if (title.length < searchLength) { + continue; + } + + if (title.slice(0, searchLength).toLocaleLowerCase() == searchText) { + this._setFocusedItem(item); + break; + } + } + + this._searchText = searchText; + this.debounce( + '_clearSearchText', + this._clearSearchText, + this._SEARCH_RESET_TIMEOUT_MS); + }, + + _clearSearchText: function() { + this._searchText = ''; + }, + + /** + * Focuses the previous item (relative to the currently focused item) in the + * menu, disabled items will be skipped. + * Loop until length + 1 to handle case of single item in menu. + */ + _focusPrevious: function() { + var length = this.items.length; + var curFocusIndex = Number(this.indexOf(this.focusedItem)); + + for (var i = 1; i < length + 1; i++) { + var item = this.items[(curFocusIndex - i + length) % length]; + if (!item.hasAttribute('disabled')) { + var owner = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_4__.dom)(item).getOwnerRoot() || document; + this._setFocusedItem(item); + + // Focus might not have worked, if the element was hidden or not + // focusable. In that case, try again. + if ((0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_4__.dom)(owner).activeElement == item) { + return; + } + } + } + }, + + /** + * Focuses the next item (relative to the currently focused item) in the + * menu, disabled items will be skipped. + * Loop until length + 1 to handle case of single item in menu. + */ + _focusNext: function() { + var length = this.items.length; + var curFocusIndex = Number(this.indexOf(this.focusedItem)); + + for (var i = 1; i < length + 1; i++) { + var item = this.items[(curFocusIndex + i) % length]; + if (!item.hasAttribute('disabled')) { + var owner = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_4__.dom)(item).getOwnerRoot() || document; + this._setFocusedItem(item); + + // Focus might not have worked, if the element was hidden or not + // focusable. In that case, try again. + if ((0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_4__.dom)(owner).activeElement == item) { + return; + } + } + } + }, + + /** + * Mutates items in the menu based on provided selection details, so that + * all items correctly reflect selection state. + * + * @param {Element} item An item in the menu. + * @param {boolean} isSelected True if the item should be shown in a + * selected state, otherwise false. + */ + _applySelection: function(item, isSelected) { + if (isSelected) { + item.setAttribute('aria-selected', 'true'); + } else { + item.setAttribute('aria-selected', 'false'); + } + _polymer_iron_selector_iron_selectable_js__WEBPACK_IMPORTED_MODULE_3__.IronSelectableBehavior._applySelection.apply(this, arguments); + }, + + /** + * Discretely updates tabindex values among menu items as the focused item + * changes. + * + * @param {Element} focusedItem The element that is currently focused. + * @param {?Element} old The last element that was considered focused, if + * applicable. + */ + _focusedItemChanged: function(focusedItem, old) { + old && old.setAttribute('tabindex', '-1'); + if (focusedItem && !focusedItem.hasAttribute('disabled') && + !this.disabled) { + focusedItem.setAttribute('tabindex', '0'); + focusedItem.focus(); + } + }, + + /** + * A handler that responds to mutation changes related to the list of items + * in the menu. + * + * @param {CustomEvent} event An event containing mutation records as its + * detail. + */ + _onIronItemsChanged: function(event) { + if (event.detail.addedNodes.length) { + this._resetTabindices(); + } + }, + + /** + * Handler that is called when a shift+tab keypress is detected by the menu. + * + * @param {CustomEvent} event A key combination event. + */ + _onShiftTabDown: function(event) { + var oldTabIndex = this.getAttribute('tabindex'); + + IronMenuBehaviorImpl._shiftTabPressed = true; + + this._setFocusedItem(null); + + this.setAttribute('tabindex', '-1'); + + this.async(function() { + this.setAttribute('tabindex', oldTabIndex); + IronMenuBehaviorImpl._shiftTabPressed = false; + // NOTE(cdata): polymer/polymer#1305 + }, 1); + }, + + /** + * Handler that is called when the menu receives focus. + * + * @param {FocusEvent} event A focus event. + */ + _onFocus: function(event) { + if (IronMenuBehaviorImpl._shiftTabPressed) { + // do not focus the menu itself + return; + } + + // Do not focus the selected tab if the deepest target is part of the + // menu element's local DOM and is focusable. + var rootTarget = + /** @type {?HTMLElement} */ ((0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_4__.dom)(event).rootTarget); + if (rootTarget !== this && typeof rootTarget.tabIndex !== 'undefined' && + !this.isLightDescendant(rootTarget)) { + return; + } + + // clear the cached focus item + this._defaultFocusAsync = this.async(function() { + // focus the selected item when the menu receives focus, or the first item + // if no item is selected + var firstSelectedItem = this.multi ? + (this.selectedItems && this.selectedItems[0]) : + this.selectedItem; + + this._setFocusedItem(null); + + if (firstSelectedItem) { + this._setFocusedItem(firstSelectedItem); + } else if (this.items[0]) { + // We find the first none-disabled item (if one exists) + this._focusNext(); + } + }); + }, + + /** + * Handler that is called when the up key is pressed. + * + * @param {CustomEvent} event A key combination event. + */ + _onUpKey: function(event) { + // up and down arrows moves the focus + this._focusPrevious(); + event.detail.keyboardEvent.preventDefault(); + }, + + /** + * Handler that is called when the down key is pressed. + * + * @param {CustomEvent} event A key combination event. + */ + _onDownKey: function(event) { + this._focusNext(); + event.detail.keyboardEvent.preventDefault(); + }, + + /** + * Handler that is called when the esc key is pressed. + * + * @param {CustomEvent} event A key combination event. + */ + _onEscKey: function(event) { + var focusedItem = this.focusedItem; + if (focusedItem) { + focusedItem.blur(); + } + }, + + /** + * Handler that is called when a keydown event is detected. + * + * @param {KeyboardEvent} event A keyboard event. + */ + _onKeydown: function(event) { + if (!this.keyboardEventMatchesKeys(event, 'up down esc')) { + // all other keys focus the menu item starting with that character + this._focusWithKeyboardEvent(event); + } + event.stopPropagation(); + }, + + // override _activateHandler + _activateHandler: function(event) { + _polymer_iron_selector_iron_selectable_js__WEBPACK_IMPORTED_MODULE_3__.IronSelectableBehavior._activateHandler.call(this, event); + event.stopPropagation(); + }, + + /** + * Updates this element's tab index when it's enabled/disabled. + * @param {boolean} disabled + */ + _disabledChanged: function(disabled) { + if (disabled) { + this._previousTabIndex = + this.hasAttribute('tabindex') ? this.tabIndex : 0; + this.removeAttribute( + 'tabindex'); // No tabindex means not tab-able or select-able. + } else if (!this.hasAttribute('tabindex')) { + this.setAttribute('tabindex', this._previousTabIndex); + } + } +}; + +IronMenuBehaviorImpl._shiftTabPressed = false; + +/** @polymerBehavior */ +const IronMenuBehavior = + [_polymer_iron_selector_iron_multi_selectable_js__WEBPACK_IMPORTED_MODULE_2__.IronMultiSelectableBehavior, _polymer_iron_a11y_keys_behavior_iron_a11y_keys_behavior_js__WEBPACK_IMPORTED_MODULE_1__.IronA11yKeysBehavior, IronMenuBehaviorImpl]; + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-meta/iron-meta.js": +/*!******************************************************!*\ + !*** ./node_modules/@polymer/iron-meta/iron-meta.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronMeta: () => (/* binding */ IronMeta) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + +class IronMeta { + /** + * @param {{ + * type: (string|null|undefined), + * key: (string|null|undefined), + * value: *, + * }=} options + */ + constructor(options) { + IronMeta[' '](options); + + /** @type {string} */ + this.type = (options && options.type) || 'default'; + /** @type {string|null|undefined} */ + this.key = options && options.key; + if (options && 'value' in options) { + /** @type {*} */ + this.value = options.value; + } + } + + /** @return {*} */ + get value() { + var type = this.type; + var key = this.key; + + if (type && key) { + return IronMeta.types[type] && IronMeta.types[type][key]; + } + } + + /** @param {*} value */ + set value(value) { + var type = this.type; + var key = this.key; + + if (type && key) { + type = IronMeta.types[type] = IronMeta.types[type] || {}; + if (value == null) { + delete type[key]; + } else { + type[key] = value; + } + } + } + + /** @return {!Array<*>} */ + get list() { + var type = this.type; + + if (type) { + var items = IronMeta.types[this.type]; + if (!items) { + return []; + } + + return Object.keys(items).map(function(key) { + return metaDatas[this.type][key]; + }, this); + } + } + + /** + * @param {string} key + * @return {*} + */ + byKey(key) { + this.key = key; + return this.value; + } +}; + +// This function is used to convince Closure not to remove constructor calls +// for instances that are not held anywhere. For example, when +// `new IronMeta({...})` is used only for the side effect of adding a value. +IronMeta[' '] = function() {}; + +IronMeta.types = {}; + +var metaDatas = IronMeta.types; + +/** +`iron-meta` is a generic element you can use for sharing information across the +DOM tree. It uses [monostate pattern](http://c2.com/cgi/wiki?MonostatePattern) +such that any instance of iron-meta has access to the shared information. You +can use `iron-meta` to share whatever you want (or create an extension [like +x-meta] for enhancements). + +The `iron-meta` instances containing your actual data can be loaded in an +import, or constructed in any way you see fit. The only requirement is that you +create them before you try to access them. + +Examples: + +If I create an instance like this: + + + +Note that value="foo/bar" is the metadata I've defined. I could define more +attributes or use child nodes to define additional metadata. + +Now I can access that element (and it's metadata) from any iron-meta instance +via the byKey method, e.g. + + meta.byKey('info'); + +Pure imperative form would be like: + + document.createElement('iron-meta').byKey('info'); + +Or, in a Polymer element, you can include a meta in your template: + + + ... + this.$.meta.byKey('info'); + +@group Iron Elements +@demo demo/index.html +@element iron-meta +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__.Polymer)({ + + is: 'iron-meta', + + properties: { + + /** + * The type of meta-data. All meta-data of the same type is stored + * together. + * @type {string} + */ + type: { + type: String, + value: 'default', + }, + + /** + * The key used to store `value` under the `type` namespace. + * @type {?string} + */ + key: { + type: String, + }, + + /** + * The meta-data to store or retrieve. + * @type {*} + */ + value: { + type: String, + notify: true, + }, + + /** + * If true, `value` is set to the iron-meta instance itself. + */ + self: {type: Boolean, observer: '_selfChanged'}, + + __meta: {type: Boolean, computed: '__computeMeta(type, key, value)'} + }, + + hostAttributes: {hidden: true}, + + __computeMeta: function(type, key, value) { + var meta = new IronMeta({type: type, key: key}); + + if (value !== undefined && value !== meta.value) { + meta.value = value; + } else if (this.value !== meta.value) { + this.value = meta.value; + } + + return meta; + }, + + get list() { + return this.__meta && this.__meta.list; + }, + + _selfChanged: function(self) { + if (self) { + this.value = this; + } + }, + + /** + * Retrieves meta data value by key. + * + * @method byKey + * @param {string} key The key of the meta-data to be returned. + * @return {*} + */ + byKey: function(key) { + return new IronMeta({type: this.type, key: key}).value; + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-overlay-behavior/iron-focusables-helper.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/@polymer/iron-overlay-behavior/iron-focusables-helper.js ***! + \*******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronFocusablesHelper: () => (/* binding */ IronFocusablesHelper) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + +var p = Element.prototype; +var matches = p.matches || p.matchesSelector || p.mozMatchesSelector || + p.msMatchesSelector || p.oMatchesSelector || p.webkitMatchesSelector; + +class IronFocusablesHelperClass { + /** + * Returns a sorted array of tabbable nodes, including the root node. + * It searches the tabbable nodes in the light and shadow dom of the chidren, + * sorting the result by tabindex. + * @param {!Node} node + * @return {!Array} + */ + getTabbableNodes(node) { + var result = []; + // If there is at least one element with tabindex > 0, we need to sort + // the final array by tabindex. + var needsSortByTabIndex = this._collectTabbableNodes(node, result); + if (needsSortByTabIndex) { + return this._sortByTabIndex(result); + } + return result; + } + + /** + * Returns if a element is focusable. + * @param {!HTMLElement} element + * @return {boolean} + */ + isFocusable(element) { + // From http://stackoverflow.com/a/1600194/4228703: + // There isn't a definite list, it's up to the browser. The only + // standard we have is DOM Level 2 HTML + // https://www.w3.org/TR/DOM-Level-2-HTML/html.html, according to which the + // only elements that have a focus() method are HTMLInputElement, + // HTMLSelectElement, HTMLTextAreaElement and HTMLAnchorElement. This + // notably omits HTMLButtonElement and HTMLAreaElement. Referring to these + // tests with tabbables in different browsers + // http://allyjs.io/data-tables/focusable.html + + // Elements that cannot be focused if they have [disabled] attribute. + if (matches.call(element, 'input, select, textarea, button, object')) { + return matches.call(element, ':not([disabled])'); + } + // Elements that can be focused even if they have [disabled] attribute. + return matches.call( + element, 'a[href], area[href], iframe, [tabindex], [contentEditable]'); + } + + /** + * Returns if a element is tabbable. To be tabbable, a element must be + * focusable, visible, and with a tabindex !== -1. + * @param {!HTMLElement} element + * @return {boolean} + */ + isTabbable(element) { + return this.isFocusable(element) && + matches.call(element, ':not([tabindex="-1"])') && + this._isVisible(element); + } + + /** + * Returns the normalized element tabindex. If not focusable, returns -1. + * It checks for the attribute "tabindex" instead of the element property + * `tabIndex` since browsers assign different values to it. + * e.g. in Firefox `
` has `tabIndex = -1` + * @param {!HTMLElement} element + * @return {!number} + * @private + */ + _normalizedTabIndex(element) { + if (this.isFocusable(element)) { + var tabIndex = element.getAttribute('tabindex') || 0; + return Number(tabIndex); + } + return -1; + } + + /** + * Searches for nodes that are tabbable and adds them to the `result` array. + * Returns if the `result` array needs to be sorted by tabindex. + * @param {!Node} node The starting point for the search; added to `result` + * if tabbable. + * @param {!Array} result + * @return {boolean} + * @private + */ + _collectTabbableNodes(node, result) { + // If not an element or not visible, no need to explore children. + if (node.nodeType !== Node.ELEMENT_NODE) { + return false; + } + var element = /** @type {!HTMLElement} */ (node); + if (!this._isVisible(element)) { + return false; + } + var tabIndex = this._normalizedTabIndex(element); + var needsSort = tabIndex > 0; + if (tabIndex >= 0) { + result.push(element); + } + // In ShadowDOM v1, tab order is affected by the order of distrubution. + // E.g. getTabbableNodes(#root) in ShadowDOM v1 should return [#A, #B]; + // in ShadowDOM v0 tab order is not affected by the distrubution order, + // in fact getTabbableNodes(#root) returns [#B, #A]. + //
+ // + // + // + // + // + // + //
+ // TODO(valdrin) support ShadowDOM v1 when upgrading to Polymer v2.0. + var children; + if (element.localName === 'content' || element.localName === 'slot') { + children = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__.dom)(element).getDistributedNodes(); + } else { + // Use shadow root if possible, will check for distributed nodes. + children = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__.dom)(element.root || element).children; + } + for (var i = 0; i < children.length; i++) { + // Ensure method is always invoked to collect tabbable children. + needsSort = this._collectTabbableNodes(children[i], result) || needsSort; + } + return needsSort; + } + + /** + * Returns false if the element has `visibility: hidden` or `display: none` + * @param {!HTMLElement} element + * @return {boolean} + * @private + */ + _isVisible(element) { + // Check inline style first to save a re-flow. If looks good, check also + // computed style. + var style = element.style; + if (style.visibility !== 'hidden' && style.display !== 'none') { + style = window.getComputedStyle(element); + return (style.visibility !== 'hidden' && style.display !== 'none'); + } + return false; + } + + /** + * Sorts an array of tabbable elements by tabindex. Returns a new array. + * @param {!Array} tabbables + * @return {!Array} + * @private + */ + _sortByTabIndex(tabbables) { + // Implement a merge sort as Array.prototype.sort does a non-stable sort + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort + var len = tabbables.length; + if (len < 2) { + return tabbables; + } + var pivot = Math.ceil(len / 2); + var left = this._sortByTabIndex(tabbables.slice(0, pivot)); + var right = this._sortByTabIndex(tabbables.slice(pivot)); + return this._mergeSortByTabIndex(left, right); + } + + /** + * Merge sort iterator, merges the two arrays into one, sorted by tab index. + * @param {!Array} left + * @param {!Array} right + * @return {!Array} + * @private + */ + _mergeSortByTabIndex(left, right) { + var result = []; + while ((left.length > 0) && (right.length > 0)) { + if (this._hasLowerTabOrder(left[0], right[0])) { + result.push(right.shift()); + } else { + result.push(left.shift()); + } + } + + return result.concat(left, right); + } + + /** + * Returns if element `a` has lower tab order compared to element `b` + * (both elements are assumed to be focusable and tabbable). + * Elements with tabindex = 0 have lower tab order compared to elements + * with tabindex > 0. + * If both have same tabindex, it returns false. + * @param {!HTMLElement} a + * @param {!HTMLElement} b + * @return {boolean} + * @private + */ + _hasLowerTabOrder(a, b) { + // Normalize tabIndexes + // e.g. in Firefox `
` has `tabIndex = -1` + var ati = Math.max(a.tabIndex, 0); + var bti = Math.max(b.tabIndex, 0); + return (ati === 0 || bti === 0) ? bti > ati : ati > bti; + } +} + +const IronFocusablesHelper = new IronFocusablesHelperClass(); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-overlay-behavior/iron-overlay-backdrop.js": +/*!******************************************************************************!*\ + !*** ./node_modules/@polymer/iron-overlay-behavior/iron-overlay-backdrop.js ***! + \******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + +/* +`iron-overlay-backdrop` is a backdrop used by `Polymer.IronOverlayBehavior`. It +should be a singleton. + +### Styling + +The following custom properties and mixins are available for styling. + +Custom property | Description | Default +-------------------------------------------|------------------------|--------- +`--iron-overlay-backdrop-background-color` | Backdrop background color | #000 +`--iron-overlay-backdrop-opacity` | Backdrop opacity | 0.6 +`--iron-overlay-backdrop` | Mixin applied to `iron-overlay-backdrop`. | {} +`--iron-overlay-backdrop-opened` | Mixin applied to `iron-overlay-backdrop` when it is displayed | {} +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__.Polymer)({ + /** @override */ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_3__.html)` + + + +`, + + is: 'iron-overlay-backdrop', + + properties: { + + /** + * Returns true if the backdrop is opened. + */ + opened: { + reflectToAttribute: true, + type: Boolean, + value: false, + observer: '_openedChanged', + } + + }, + + listeners: { + 'transitionend': '_onTransitionend', + }, + + /** @override */ + created: function() { + // Used to cancel previous requestAnimationFrame calls when opened changes. + this.__openedRaf = null; + }, + + /** @override */ + attached: function() { + this.opened && this._openedChanged(this.opened); + }, + + /** + * Appends the backdrop to document body if needed. + */ + prepare: function() { + if (this.opened && !this.parentNode) { + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_2__.dom)(document.body).appendChild(this); + } + }, + + /** + * Shows the backdrop. + */ + open: function() { + this.opened = true; + }, + + /** + * Hides the backdrop. + */ + close: function() { + this.opened = false; + }, + + /** + * Removes the backdrop from document body if needed. + */ + complete: function() { + if (!this.opened && this.parentNode === document.body) { + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_2__.dom)(this.parentNode).removeChild(this); + } + }, + + _onTransitionend: function(event) { + if (event && event.target === this) { + this.complete(); + } + }, + + /** + * @param {boolean} opened + * @private + */ + _openedChanged: function(opened) { + if (opened) { + // Auto-attach. + this.prepare(); + } else { + // Animation might be disabled via the mixin or opacity custom property. + // If it is disabled in other ways, it's up to the user to call complete. + var cs = window.getComputedStyle(this); + if (cs.transitionDuration === '0s' || cs.opacity == 0) { + this.complete(); + } + } + + if (!this.isAttached) { + return; + } + + // Always cancel previous requestAnimationFrame. + if (this.__openedRaf) { + window.cancelAnimationFrame(this.__openedRaf); + this.__openedRaf = null; + } + // Force relayout to ensure proper transitions. + this.scrollTop = this.scrollTop; + this.__openedRaf = window.requestAnimationFrame(function() { + this.__openedRaf = null; + this.toggleClass('opened', this.opened); + }.bind(this)); + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-overlay-behavior/iron-overlay-behavior.js": +/*!******************************************************************************!*\ + !*** ./node_modules/@polymer/iron-overlay-behavior/iron-overlay-behavior.js ***! + \******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronOverlayBehavior: () => (/* binding */ IronOverlayBehavior), +/* harmony export */ IronOverlayBehaviorImpl: () => (/* binding */ IronOverlayBehaviorImpl) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_fit_behavior_iron_fit_behavior_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-fit-behavior/iron-fit-behavior.js */ "./node_modules/@polymer/iron-fit-behavior/iron-fit-behavior.js"); +/* harmony import */ var _polymer_iron_resizable_behavior_iron_resizable_behavior_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-resizable-behavior/iron-resizable-behavior.js */ "./node_modules/@polymer/iron-resizable-behavior/iron-resizable-behavior.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_settings_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/utils/settings.js */ "./node_modules/@polymer/polymer/lib/utils/settings.js"); +/* harmony import */ var _iron_focusables_helper_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./iron-focusables-helper.js */ "./node_modules/@polymer/iron-overlay-behavior/iron-focusables-helper.js"); +/* harmony import */ var _iron_overlay_manager_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./iron-overlay-manager.js */ "./node_modules/@polymer/iron-overlay-behavior/iron-overlay-manager.js"); +/* harmony import */ var _iron_scroll_manager_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./iron-scroll-manager.js */ "./node_modules/@polymer/iron-overlay-behavior/iron-scroll-manager.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + + + + +/** @polymerBehavior */ +const IronOverlayBehaviorImpl = { + + properties: { + + /** + * True if the overlay is currently displayed. + */ + opened: + {observer: '_openedChanged', type: Boolean, value: false, notify: true}, + + /** + * True if the overlay was canceled when it was last closed. + */ + canceled: { + observer: '_canceledChanged', + readOnly: true, + type: Boolean, + value: false + }, + + /** + * Set to true to display a backdrop behind the overlay. It traps the focus + * within the light DOM of the overlay. + */ + withBackdrop: { + observer: '_withBackdropChanged', + type: Boolean, + }, + + /** + * Set to true to disable auto-focusing the overlay or child nodes with + * the `autofocus` attribute` when the overlay is opened. + */ + noAutoFocus: { + type: Boolean, + value: false, + }, + + /** + * Set to true to disable canceling the overlay with the ESC key. + */ + noCancelOnEscKey: { + type: Boolean, + value: false, + }, + + /** + * Set to true to disable canceling the overlay by clicking outside it. + */ + noCancelOnOutsideClick: { + type: Boolean, + value: false, + }, + + /** + * Contains the reason(s) this overlay was last closed (see + * `iron-overlay-closed`). `IronOverlayBehavior` provides the `canceled` + * reason; implementers of the behavior can provide other reasons in + * addition to `canceled`. + */ + closingReason: { + // was a getter before, but needs to be a property so other + // behaviors can override this. + type: Object, + }, + + /** + * Set to true to enable restoring of focus when overlay is closed. + */ + restoreFocusOnClose: { + type: Boolean, + value: false, + }, + + /** + * Set to true to allow clicks to go through overlays. + * When the user clicks outside this overlay, the click may + * close the overlay below. + */ + allowClickThrough: { + type: Boolean, + }, + + /** + * Set to true to keep overlay always on top. + */ + alwaysOnTop: { + type: Boolean, + }, + + /** + * Determines which action to perform when scroll outside an opened overlay + * happens. Possible values: lock - blocks scrolling from happening, refit - + * computes the new position on the overlay cancel - causes the overlay to + * close + */ + scrollAction: { + type: String, + }, + + /** + * Shortcut to access to the overlay manager. + * @private + * @type {!IronOverlayManagerClass} + */ + _manager: { + type: Object, + value: _iron_overlay_manager_js__WEBPACK_IMPORTED_MODULE_6__.IronOverlayManager, + }, + + /** + * The node being focused. + * @type {?Node} + */ + _focusedChild: { + type: Object, + } + + }, + + listeners: {'iron-resize': '_onIronResize'}, + + observers: ['__updateScrollObservers(isAttached, opened, scrollAction)'], + + /** + * The backdrop element. + * @return {!Element} + */ + get backdropElement() { + return this._manager.backdropElement; + }, + + /** + * Returns the node to give focus to. + * @return {!Node} + */ + get _focusNode() { + return this._focusedChild || (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this).querySelector('[autofocus]') || this; + }, + + /** + * Array of nodes that can receive focus (overlay included), ordered by + * `tabindex`. This is used to retrieve which is the first and last focusable + * nodes in order to wrap the focus for overlays `with-backdrop`. + * + * If you know what is your content (specifically the first and last focusable + * children), you can override this method to return only `[firstFocusable, + * lastFocusable];` + * @return {!Array} + * @protected + */ + get _focusableNodes() { + return _iron_focusables_helper_js__WEBPACK_IMPORTED_MODULE_5__.IronFocusablesHelper.getTabbableNodes(this); + }, + + /** + * @return {void} + */ + ready: function() { + // Used to skip calls to notifyResize and refit while the overlay is + // animating. + this.__isAnimating = false; + // with-backdrop needs tabindex to be set in order to trap the focus. + // If it is not set, IronOverlayBehavior will set it, and remove it if + // with-backdrop = false. + this.__shouldRemoveTabIndex = false; + // Used for wrapping the focus on TAB / Shift+TAB. + this.__firstFocusableNode = this.__lastFocusableNode = null; + // Used by to keep track of the RAF callbacks. + this.__rafs = {}; + // Focused node before overlay gets opened. Can be restored on close. + this.__restoreFocusNode = null; + // Scroll info to be restored. + this.__scrollTop = this.__scrollLeft = null; + this.__onCaptureScroll = this.__onCaptureScroll.bind(this); + // Root nodes hosting the overlay, used to listen for scroll events on them. + this.__rootNodes = null; + this._ensureSetup(); + }, + + /** @override */ + attached: function() { + // Call _openedChanged here so that position can be computed correctly. + if (this.opened) { + this._openedChanged(this.opened); + } + this._observer = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this).observeNodes(this._onNodesChange); + }, + + /** @override */ + detached: function() { + // TODO(bicknellr): Per spec, checking `this._observer` should never be + // necessary because `connectedCallback` and `disconnectedCallback` should + // always be called in alternating order. However, the custom elements + // polyfill doesn't implement the reactions stack, so this can sometimes + // happen, particularly if ShadyDOM is in noPatch mode where the custom + // elements polyfill is installed before ShadyDOM. We should investigate + // whether or not we can either implement the reactions stack without major + // performance implications or patch ShadyDOM's functions to restore the + // typical ShadyDOM-then-custom-elements order and remove this workaround. + if (this._observer) { + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this).unobserveNodes(this._observer); + } + this._observer = null; + for (var cb in this.__rafs) { + if (this.__rafs[cb] !== null) { + cancelAnimationFrame(this.__rafs[cb]); + } + } + this.__rafs = {}; + this._manager.removeOverlay(this); + + // We got detached while animating, ensure we show/hide the overlay + // and fire iron-overlay-opened/closed event! + if (this.__isAnimating) { + if (this.opened) { + this._finishRenderOpened(); + } else { + // Restore the focus if necessary. + this._applyFocus(); + this._finishRenderClosed(); + } + } + }, + + /** + * Toggle the opened state of the overlay. + */ + toggle: function() { + this._setCanceled(false); + this.opened = !this.opened; + }, + + /** + * Open the overlay. + */ + open: function() { + this._setCanceled(false); + this.opened = true; + }, + + /** + * Close the overlay. + */ + close: function() { + this._setCanceled(false); + this.opened = false; + }, + + /** + * Cancels the overlay. + * @param {Event=} event The original event + */ + cancel: function(event) { + var cancelEvent = + this.fire('iron-overlay-canceled', event, {cancelable: true}); + if (cancelEvent.defaultPrevented) { + return; + } + + this._setCanceled(true); + this.opened = false; + }, + + /** + * Invalidates the cached tabbable nodes. To be called when any of the + * focusable content changes (e.g. a button is disabled). + */ + invalidateTabbables: function() { + this.__firstFocusableNode = this.__lastFocusableNode = null; + }, + + _ensureSetup: function() { + if (this._overlaySetup) { + return; + } + this._overlaySetup = true; + this.style.outline = 'none'; + this.style.display = 'none'; + }, + + /** + * Called when `opened` changes. + * @param {boolean=} opened + * @protected + */ + _openedChanged: function(opened) { + if (opened) { + this.removeAttribute('aria-hidden'); + } else { + this.setAttribute('aria-hidden', 'true'); + } + + // Defer any animation-related code on attached + // (_openedChanged gets called again on attached). + if (!this.isAttached) { + return; + } + + this.__isAnimating = true; + + // Deraf for non-blocking rendering. + this.__deraf('__openedChanged', this.__openedChanged); + }, + + _canceledChanged: function() { + this.closingReason = this.closingReason || {}; + this.closingReason.canceled = this.canceled; + }, + + _withBackdropChanged: function() { + // If tabindex is already set, no need to override it. + if (this.withBackdrop && !this.hasAttribute('tabindex')) { + this.setAttribute('tabindex', '-1'); + this.__shouldRemoveTabIndex = true; + } else if (this.__shouldRemoveTabIndex) { + this.removeAttribute('tabindex'); + this.__shouldRemoveTabIndex = false; + } + if (this.opened && this.isAttached) { + this._manager.trackBackdrop(); + } + }, + + /** + * tasks which must occur before opening; e.g. making the element visible. + * @protected + */ + _prepareRenderOpened: function() { + // Store focused node. + this.__restoreFocusNode = this._manager.deepActiveElement; + + // Needed to calculate the size of the overlay so that transitions on its + // size will have the correct starting points. + this._preparePositioning(); + this.refit(); + this._finishPositioning(); + + // Safari will apply the focus to the autofocus element when displayed + // for the first time, so we make sure to return the focus where it was. + if (this.noAutoFocus && document.activeElement === this._focusNode) { + this._focusNode.blur(); + this.__restoreFocusNode.focus(); + } + }, + + /** + * Tasks which cause the overlay to actually open; typically play an + * animation. + * @protected + */ + _renderOpened: function() { + this._finishRenderOpened(); + }, + + /** + * Tasks which cause the overlay to actually close; typically play an + * animation. + * @protected + */ + _renderClosed: function() { + this._finishRenderClosed(); + }, + + /** + * Tasks to be performed at the end of open action. Will fire + * `iron-overlay-opened`. + * @protected + */ + _finishRenderOpened: function() { + this.notifyResize(); + this.__isAnimating = false; + + this.fire('iron-overlay-opened'); + }, + + /** + * Tasks to be performed at the end of close action. Will fire + * `iron-overlay-closed`. + * @protected + */ + _finishRenderClosed: function() { + // Hide the overlay. + this.style.display = 'none'; + // Reset z-index only at the end of the animation. + this.style.zIndex = ''; + this.notifyResize(); + this.__isAnimating = false; + this.fire('iron-overlay-closed', this.closingReason); + }, + + _preparePositioning: function() { + this.style.transition = this.style.webkitTransition = 'none'; + this.style.transform = this.style.webkitTransform = 'none'; + this.style.display = ''; + }, + + _finishPositioning: function() { + // First, make it invisible & reactivate animations. + this.style.display = 'none'; + // Force reflow before re-enabling animations so that they don't start. + // Set scrollTop to itself so that Closure Compiler doesn't remove this. + this.scrollTop = this.scrollTop; + this.style.transition = this.style.webkitTransition = ''; + this.style.transform = this.style.webkitTransform = ''; + // Now that animations are enabled, make it visible again + this.style.display = ''; + // Force reflow, so that following animations are properly started. + // Set scrollTop to itself so that Closure Compiler doesn't remove this. + this.scrollTop = this.scrollTop; + }, + + /** + * Applies focus according to the opened state. + * @protected + */ + _applyFocus: function() { + if (this.opened) { + if (!this.noAutoFocus) { + this._focusNode.focus(); + } + } else { + // Restore focus. + if (this.restoreFocusOnClose && this.__restoreFocusNode) { + // If the activeElement is `` or inside the overlay, + // we are allowed to restore the focus. In all the other + // cases focus might have been moved elsewhere by another + // component or by an user interaction (e.g. click on a + // button outside the overlay). + var activeElement = this._manager.deepActiveElement; + if (activeElement === document.body || + composedContains(this, activeElement)) { + this.__restoreFocusNode.focus(); + } + } + this.__restoreFocusNode = null; + this._focusNode.blur(); + this._focusedChild = null; + } + }, + + /** + * Cancels (closes) the overlay. Call when click happens outside the overlay. + * @param {!Event} event + * @protected + */ + _onCaptureClick: function(event) { + if (!this.noCancelOnOutsideClick) { + this.cancel(event); + } + }, + + /** + * Keeps track of the focused child. If withBackdrop, traps focus within + * overlay. + * @param {!Event} event + * @protected + */ + _onCaptureFocus: function(event) { + if (!this.withBackdrop) { + return; + } + var path = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(event).path; + if (path.indexOf(this) === -1) { + event.stopPropagation(); + this._applyFocus(); + } else { + this._focusedChild = /** @type {Node} */ (path[0]); + } + }, + + /** + * Handles the ESC key event and cancels (closes) the overlay. + * @param {!Event} event + * @protected + */ + _onCaptureEsc: function(event) { + if (!this.noCancelOnEscKey) { + this.cancel(event); + } + }, + + /** + * Handles TAB key events to track focus changes. + * Will wrap focus for overlays withBackdrop. + * @param {!Event} event + * @protected + */ + _onCaptureTab: function(event) { + if (!this.withBackdrop) { + return; + } + this.__ensureFirstLastFocusables(); + // TAB wraps from last to first focusable. + // Shift + TAB wraps from first to last focusable. + var shift = event.shiftKey; + var nodeToCheck = + shift ? this.__firstFocusableNode : this.__lastFocusableNode; + var nodeToSet = + shift ? this.__lastFocusableNode : this.__firstFocusableNode; + var shouldWrap = false; + if (nodeToCheck === nodeToSet) { + // If nodeToCheck is the same as nodeToSet, it means we have an overlay + // with 0 or 1 focusables; in either case we still need to trap the + // focus within the overlay. + shouldWrap = true; + } else { + // In dom=shadow, the manager will receive focus changes on the main + // root but not the ones within other shadow roots, so we can't rely on + // _focusedChild, but we should check the deepest active element. + var focusedNode = this._manager.deepActiveElement; + // If the active element is not the nodeToCheck but the overlay itself, + // it means the focus is about to go outside the overlay, hence we + // should prevent that (e.g. user opens the overlay and hit Shift+TAB). + shouldWrap = (focusedNode === nodeToCheck || focusedNode === this); + } + + if (shouldWrap) { + // When the overlay contains the last focusable element of the document + // and it's already focused, pressing TAB would move the focus outside + // the document (e.g. to the browser search bar). Similarly, when the + // overlay contains the first focusable element of the document and it's + // already focused, pressing Shift+TAB would move the focus outside the + // document (e.g. to the browser search bar). + // In both cases, we would not receive a focus event, but only a blur. + // In order to achieve focus wrapping, we prevent this TAB event and + // force the focus. This will also prevent the focus to temporarily move + // outside the overlay, which might cause scrolling. + event.preventDefault(); + this._focusedChild = nodeToSet; + this._applyFocus(); + } + }, + + /** + * Refits if the overlay is opened and not animating. + * @protected + */ + _onIronResize: function() { + if (this.opened && !this.__isAnimating) { + this.__deraf('refit', this.refit); + } + }, + + /** + * Will call notifyResize if overlay is opened. + * Can be overridden in order to avoid multiple observers on the same node. + * @protected + */ + _onNodesChange: function() { + if (this.opened && !this.__isAnimating) { + // It might have added focusable nodes, so invalidate cached values. + this.invalidateTabbables(); + this.notifyResize(); + } + }, + + /** + * Updates the references to the first and last focusable nodes. + * @private + */ + __ensureFirstLastFocusables: function() { + var focusableNodes = this._focusableNodes; + this.__firstFocusableNode = focusableNodes[0]; + this.__lastFocusableNode = focusableNodes[focusableNodes.length - 1]; + }, + + /** + * Tasks executed when opened changes: prepare for the opening, move the + * focus, update the manager, render opened/closed. + * @private + */ + __openedChanged: function() { + if (this.opened) { + // Make overlay visible, then add it to the manager. + this._prepareRenderOpened(); + this._manager.addOverlay(this); + // Move the focus to the child node with [autofocus]. + this._applyFocus(); + + this._renderOpened(); + } else { + // Remove overlay, then restore the focus before actually closing. + this._manager.removeOverlay(this); + this._applyFocus(); + + this._renderClosed(); + } + }, + + /** + * Debounces the execution of a callback to the next animation frame. + * @param {!string} jobname + * @param {!Function} callback Always bound to `this` + * @private + */ + __deraf: function(jobname, callback) { + var rafs = this.__rafs; + if (rafs[jobname] !== null) { + cancelAnimationFrame(rafs[jobname]); + } + rafs[jobname] = requestAnimationFrame(function nextAnimationFrame() { + rafs[jobname] = null; + callback.call(this); + }.bind(this)); + }, + + /** + * @param {boolean} isAttached + * @param {boolean} opened + * @param {string=} scrollAction + * @private + */ + __updateScrollObservers: function(isAttached, opened, scrollAction) { + if (!isAttached || !opened || !this.__isValidScrollAction(scrollAction)) { + (0,_iron_scroll_manager_js__WEBPACK_IMPORTED_MODULE_7__.removeScrollLock)(this); + this.__removeScrollListeners(); + } else { + if (scrollAction === 'lock') { + this.__saveScrollPosition(); + (0,_iron_scroll_manager_js__WEBPACK_IMPORTED_MODULE_7__.pushScrollLock)(this); + } + this.__addScrollListeners(); + } + }, + + /** + * @private + */ + __addScrollListeners: function() { + if (!this.__rootNodes) { + this.__rootNodes = []; + // Listen for scroll events in all shadowRoots hosting this overlay only + // when in native ShadowDOM. + if (_polymer_polymer_lib_utils_settings_js__WEBPACK_IMPORTED_MODULE_4__.useShadow) { + var node = this; + while (node) { + if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE && node.host) { + this.__rootNodes.push(node); + } + node = node.host || node.assignedSlot || node.parentNode; + } + } + this.__rootNodes.push(document); + } + this.__rootNodes.forEach(function(el) { + el.addEventListener('scroll', this.__onCaptureScroll, { + capture: true, + passive: true, + }); + }, this); + }, + + /** + * @private + */ + __removeScrollListeners: function() { + if (this.__rootNodes) { + this.__rootNodes.forEach(function(el) { + el.removeEventListener('scroll', this.__onCaptureScroll, { + capture: true, + passive: true, + }); + }, this); + } + if (!this.isAttached) { + this.__rootNodes = null; + } + }, + + /** + * @param {string=} scrollAction + * @return {boolean} + * @private + */ + __isValidScrollAction: function(scrollAction) { + return scrollAction === 'lock' || scrollAction === 'refit' || + scrollAction === 'cancel'; + }, + + /** + * @private + */ + __onCaptureScroll: function(event) { + if (this.__isAnimating) { + return; + } + // Check if scroll outside the overlay. + if ((0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(event).path.indexOf(this) >= 0) { + return; + } + switch (this.scrollAction) { + case 'lock': + // NOTE: scrolling might happen if a scroll event is not cancellable, or + // if user pressed keys that cause scrolling (they're not prevented in + // order not to break a11y features like navigate with arrow keys). + this.__restoreScrollPosition(); + break; + case 'refit': + this.__deraf('refit', this.refit); + break; + case 'cancel': + this.cancel(event); + break; + } + }, + + /** + * Memoizes the scroll position of the outside scrolling element. + * @private + */ + __saveScrollPosition: function() { + if (document.scrollingElement) { + this.__scrollTop = document.scrollingElement.scrollTop; + this.__scrollLeft = document.scrollingElement.scrollLeft; + } else { + // Since we don't know if is the body or html, get max. + this.__scrollTop = + Math.max(document.documentElement.scrollTop, document.body.scrollTop); + this.__scrollLeft = Math.max( + document.documentElement.scrollLeft, document.body.scrollLeft); + } + }, + + /** + * Resets the scroll position of the outside scrolling element. + * @private + */ + __restoreScrollPosition: function() { + if (document.scrollingElement) { + document.scrollingElement.scrollTop = this.__scrollTop; + document.scrollingElement.scrollLeft = this.__scrollLeft; + } else { + // Since we don't know if is the body or html, set both. + document.documentElement.scrollTop = document.body.scrollTop = + this.__scrollTop; + document.documentElement.scrollLeft = document.body.scrollLeft = + this.__scrollLeft; + } + }, + +}; + +const composedParent = node => + node.assignedSlot || node.parentNode || node.host; + +const composedContains = (ancestor, descendant) => { + for (let element = descendant; element; element = composedParent(element)) { + if (element === ancestor) { + return true; + } + } + return false; +}; + +/** + Use `Polymer.IronOverlayBehavior` to implement an element that can be hidden + or shown, and displays on top of other content. It includes an optional + backdrop, and can be used to implement a variety of UI controls including + dialogs and drop downs. Multiple overlays may be displayed at once. + + See the [demo source + code](https://github.com/PolymerElements/iron-overlay-behavior/blob/master/demo/simple-overlay.html) + for an example. + + ### Closing and canceling + + An overlay may be hidden by closing or canceling. The difference between close + and cancel is user intent. Closing generally implies that the user + acknowledged the content on the overlay. By default, it will cancel whenever + the user taps outside it or presses the escape key. This behavior is + configurable with the `no-cancel-on-esc-key` and the + `no-cancel-on-outside-click` properties. `close()` should be called explicitly + by the implementer when the user interacts with a control in the overlay + element. When the dialog is canceled, the overlay fires an + 'iron-overlay-canceled' event. Call `preventDefault` on this event to prevent + the overlay from closing. + + ### Positioning + + By default the element is sized and positioned to fit and centered inside the + window. You can position and size it manually using CSS. See + `Polymer.IronFitBehavior`. + + ### Backdrop + + Set the `with-backdrop` attribute to display a backdrop behind the overlay. + The backdrop is appended to `` and is of type ``. + See its doc page for styling options. + + In addition, `with-backdrop` will wrap the focus within the content in the + light DOM. Override the [`_focusableNodes` + getter](#Polymer.IronOverlayBehavior:property-_focusableNodes) to achieve a + different behavior. + + ### Limitations + + The element is styled to appear on top of other content by setting its + `z-index` property. You must ensure no element has a stacking context with a + higher `z-index` than its parent stacking context. You should place this + element as a child of `` whenever possible. + + @demo demo/index.html + @polymerBehavior + */ +const IronOverlayBehavior = + [_polymer_iron_fit_behavior_iron_fit_behavior_js__WEBPACK_IMPORTED_MODULE_1__.IronFitBehavior, _polymer_iron_resizable_behavior_iron_resizable_behavior_js__WEBPACK_IMPORTED_MODULE_2__.IronResizableBehavior, IronOverlayBehaviorImpl]; + +/** + * Fired after the overlay opens. + * @event iron-overlay-opened + */ + +/** + * Fired when the overlay is canceled, but before it is closed. + * @event iron-overlay-canceled + * @param {Event} event The closing of the overlay can be prevented + * by calling `event.preventDefault()`. The `event.detail` is the original event + * that originated the canceling (e.g. ESC keyboard event or click event outside + * the overlay). + */ + +/** + * Fired after the overlay closes. + * @event iron-overlay-closed + * @param {Event} event The `event.detail` is the `closingReason` property + * (contains `canceled`, whether the overlay was canceled). + */ + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-overlay-behavior/iron-overlay-manager.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/@polymer/iron-overlay-behavior/iron-overlay-manager.js ***! + \*****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronOverlayManager: () => (/* binding */ IronOverlayManager), +/* harmony export */ IronOverlayManagerClass: () => (/* binding */ IronOverlayManagerClass) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _iron_overlay_backdrop_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iron-overlay-backdrop.js */ "./node_modules/@polymer/iron-overlay-behavior/iron-overlay-backdrop.js"); +/* harmony import */ var _polymer_iron_a11y_keys_behavior_iron_a11y_keys_behavior_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js */ "./node_modules/@polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_gestures_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/utils/gestures.js */ "./node_modules/@polymer/polymer/lib/utils/gestures.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + +/** + * @package + */ +class IronOverlayManagerClass { + constructor() { + /** + * Used to keep track of the opened overlays. + * @private {!Array} + */ + this._overlays = []; + + /** + * iframes have a default z-index of 100, + * so this default should be at least that. + * @private {number} + */ + this._minimumZ = 101; + + /** + * Memoized backdrop element. + * @private {Element|null} + */ + this._backdropElement = null; + + // Enable document-wide tap recognizer. + // NOTE: Use useCapture=true to avoid accidentally prevention of the closing + // of an overlay via event.stopPropagation(). The only way to prevent + // closing of an overlay should be through its APIs. + // NOTE: enable tap on to workaround Polymer/polymer#4459 + // Pass no-op function because MSEdge 15 doesn't handle null as 2nd argument + // https://github.com/Microsoft/ChakraCore/issues/3863 + _polymer_polymer_lib_utils_gestures_js__WEBPACK_IMPORTED_MODULE_4__.addListener(document.documentElement, 'tap', function() {}); + document.addEventListener('tap', this._onCaptureClick.bind(this), true); + document.addEventListener('focus', this._onCaptureFocus.bind(this), true); + document.addEventListener( + 'keydown', this._onCaptureKeyDown.bind(this), true); + } + + /** + * The shared backdrop element. + * @return {!Element} backdropElement + */ + get backdropElement() { + if (!this._backdropElement) { + this._backdropElement = document.createElement('iron-overlay-backdrop'); + } + return this._backdropElement; + } + + /** + * The deepest active element. + * @return {!Element} activeElement the active element + */ + get deepActiveElement() { + var active = document.activeElement; + // document.activeElement can be null + // https://developer.mozilla.org/en-US/docs/Web/API/Document/activeElement + // In IE 11, it can also be an object when operating in iframes. + // In these cases, default it to document.body. + if (!active || active instanceof Element === false) { + active = document.body; + } + while (active.root && (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(active.root).activeElement) { + active = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(active.root).activeElement; + } + return active; + } + + /** + * Brings the overlay at the specified index to the front. + * @param {number} i + * @private + */ + _bringOverlayAtIndexToFront(i) { + var overlay = this._overlays[i]; + if (!overlay) { + return; + } + var lastI = this._overlays.length - 1; + var currentOverlay = this._overlays[lastI]; + // Ensure always-on-top overlay stays on top. + if (currentOverlay && + this._shouldBeBehindOverlay(overlay, currentOverlay)) { + lastI--; + } + // If already the top element, return. + if (i >= lastI) { + return; + } + // Update z-index to be on top. + var minimumZ = Math.max(this.currentOverlayZ(), this._minimumZ); + if (this._getZ(overlay) <= minimumZ) { + this._applyOverlayZ(overlay, minimumZ); + } + + // Shift other overlays behind the new on top. + while (i < lastI) { + this._overlays[i] = this._overlays[i + 1]; + i++; + } + this._overlays[lastI] = overlay; + } + + /** + * Adds the overlay and updates its z-index if it's opened, or removes it if + * it's closed. Also updates the backdrop z-index. + * @param {!Element} overlay + */ + addOrRemoveOverlay(overlay) { + if (overlay.opened) { + this.addOverlay(overlay); + } else { + this.removeOverlay(overlay); + } + } + + /** + * Tracks overlays for z-index and focus management. + * Ensures the last added overlay with always-on-top remains on top. + * @param {!Element} overlay + */ + addOverlay(overlay) { + var i = this._overlays.indexOf(overlay); + if (i >= 0) { + this._bringOverlayAtIndexToFront(i); + this.trackBackdrop(); + return; + } + var insertionIndex = this._overlays.length; + var currentOverlay = this._overlays[insertionIndex - 1]; + var minimumZ = Math.max(this._getZ(currentOverlay), this._minimumZ); + var newZ = this._getZ(overlay); + + // Ensure always-on-top overlay stays on top. + if (currentOverlay && + this._shouldBeBehindOverlay(overlay, currentOverlay)) { + // This bumps the z-index of +2. + this._applyOverlayZ(currentOverlay, minimumZ); + insertionIndex--; + // Update minimumZ to match previous overlay's z-index. + var previousOverlay = this._overlays[insertionIndex - 1]; + minimumZ = Math.max(this._getZ(previousOverlay), this._minimumZ); + } + + // Update z-index and insert overlay. + if (newZ <= minimumZ) { + this._applyOverlayZ(overlay, minimumZ); + } + this._overlays.splice(insertionIndex, 0, overlay); + + this.trackBackdrop(); + } + + /** + * @param {!Element} overlay + */ + removeOverlay(overlay) { + var i = this._overlays.indexOf(overlay); + if (i === -1) { + return; + } + this._overlays.splice(i, 1); + + this.trackBackdrop(); + } + + /** + * Returns the current overlay. + * @return {!Element|undefined} + */ + currentOverlay() { + var i = this._overlays.length - 1; + return this._overlays[i]; + } + + /** + * Returns the current overlay z-index. + * @return {number} + */ + currentOverlayZ() { + return this._getZ(this.currentOverlay()); + } + + /** + * Ensures that the minimum z-index of new overlays is at least `minimumZ`. + * This does not effect the z-index of any existing overlays. + * @param {number} minimumZ + */ + ensureMinimumZ(minimumZ) { + this._minimumZ = Math.max(this._minimumZ, minimumZ); + } + + focusOverlay() { + var current = /** @type {?} */ (this.currentOverlay()); + if (current) { + current._applyFocus(); + } + } + + /** + * Updates the backdrop z-index. + */ + trackBackdrop() { + var overlay = this._overlayWithBackdrop(); + // Avoid creating the backdrop if there is no overlay with backdrop. + if (!overlay && !this._backdropElement) { + return; + } + this.backdropElement.style.zIndex = this._getZ(overlay) - 1; + this.backdropElement.opened = !!overlay; + // Property observers are not fired until element is attached + // in Polymer 2.x, so we ensure element is attached if needed. + // https://github.com/Polymer/polymer/issues/4526 + this.backdropElement.prepare(); + } + + /** + * @return {!Array} + */ + getBackdrops() { + var backdrops = []; + for (var i = 0; i < this._overlays.length; i++) { + if (this._overlays[i].withBackdrop) { + backdrops.push(this._overlays[i]); + } + } + return backdrops; + } + + /** + * Returns the z-index for the backdrop. + * @return {number} + */ + backdropZ() { + return this._getZ(this._overlayWithBackdrop()) - 1; + } + + /** + * Returns the top opened overlay that has a backdrop. + * @return {!Element|undefined} + * @private + */ + _overlayWithBackdrop() { + for (var i = this._overlays.length - 1; i >= 0; i--) { + if (this._overlays[i].withBackdrop) { + return this._overlays[i]; + } + } + } + + /** + * Calculates the minimum z-index for the overlay. + * @param {Element=} overlay + * @private + */ + _getZ(overlay) { + var z = this._minimumZ; + if (overlay) { + var z1 = Number( + overlay.style.zIndex || window.getComputedStyle(overlay).zIndex); + // Check if is a number + // Number.isNaN not supported in IE 10+ + if (z1 === z1) { + z = z1; + } + } + return z; + } + + /** + * @param {!Element} element + * @param {number|string} z + * @private + */ + _setZ(element, z) { + element.style.zIndex = z; + } + + /** + * @param {!Element} overlay + * @param {number} aboveZ + * @private + */ + _applyOverlayZ(overlay, aboveZ) { + this._setZ(overlay, aboveZ + 2); + } + + /** + * Returns the deepest overlay in the path. + * @param {!Array=} path + * @return {!Element|undefined} + * @suppress {missingProperties} + * @private + */ + _overlayInPath(path) { + path = path || []; + for (var i = 0; i < path.length; i++) { + if (path[i]._manager === this) { + return path[i]; + } + } + } + + /** + * Ensures the click event is delegated to the right overlay. + * @param {!Event} event + * @private + */ + _onCaptureClick(event) { + var i = this._overlays.length - 1; + if (i === -1) + return; + var path = /** @type {!Array} */ ((0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(event).path); + var overlay; + // Check if clicked outside of overlay. + while ((overlay = /** @type {?} */ (this._overlays[i])) && + this._overlayInPath(path) !== overlay) { + overlay._onCaptureClick(event); + if (overlay.allowClickThrough) { + i--; + } else { + break; + } + } + } + + /** + * Ensures the focus event is delegated to the right overlay. + * @param {!Event} event + * @private + */ + _onCaptureFocus(event) { + var overlay = /** @type {?} */ (this.currentOverlay()); + if (overlay) { + overlay._onCaptureFocus(event); + } + } + + /** + * Ensures TAB and ESC keyboard events are delegated to the right overlay. + * @param {!Event} event + * @private + */ + _onCaptureKeyDown(event) { + var overlay = /** @type {?} */ (this.currentOverlay()); + if (overlay) { + if (_polymer_iron_a11y_keys_behavior_iron_a11y_keys_behavior_js__WEBPACK_IMPORTED_MODULE_2__.IronA11yKeysBehavior.keyboardEventMatchesKeys(event, 'esc')) { + overlay._onCaptureEsc(event); + } else if (_polymer_iron_a11y_keys_behavior_iron_a11y_keys_behavior_js__WEBPACK_IMPORTED_MODULE_2__.IronA11yKeysBehavior.keyboardEventMatchesKeys(event, 'tab')) { + overlay._onCaptureTab(event); + } + } + } + + /** + * Returns if the overlay1 should be behind overlay2. + * @param {!Element} overlay1 + * @param {!Element} overlay2 + * @return {boolean} + * @suppress {missingProperties} + * @private + */ + _shouldBeBehindOverlay(overlay1, overlay2) { + return !overlay1.alwaysOnTop && overlay2.alwaysOnTop; + } +}; + +const IronOverlayManager = new IronOverlayManagerClass(); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-overlay-behavior/iron-scroll-manager.js": +/*!****************************************************************************!*\ + !*** ./node_modules/@polymer/iron-overlay-behavior/iron-scroll-manager.js ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ _boundScrollHandler: () => (/* binding */ _boundScrollHandler), +/* harmony export */ _composedTreeContains: () => (/* binding */ _composedTreeContains), +/* harmony export */ _getScrollInfo: () => (/* binding */ _getScrollInfo), +/* harmony export */ _getScrollableNodes: () => (/* binding */ _getScrollableNodes), +/* harmony export */ _getScrollingNode: () => (/* binding */ _getScrollingNode), +/* harmony export */ _hasCachedLockedElement: () => (/* binding */ _hasCachedLockedElement), +/* harmony export */ _hasCachedUnlockedElement: () => (/* binding */ _hasCachedUnlockedElement), +/* harmony export */ _lockScrollInteractions: () => (/* binding */ _lockScrollInteractions), +/* harmony export */ _lockedElementCache: () => (/* binding */ _lockedElementCache), +/* harmony export */ _lockingElements: () => (/* binding */ _lockingElements), +/* harmony export */ _scrollInteractionHandler: () => (/* binding */ _scrollInteractionHandler), +/* harmony export */ _shouldPreventScrolling: () => (/* binding */ _shouldPreventScrolling), +/* harmony export */ _unlockScrollInteractions: () => (/* binding */ _unlockScrollInteractions), +/* harmony export */ _unlockedElementCache: () => (/* binding */ _unlockedElementCache), +/* harmony export */ currentLockingElement: () => (/* binding */ currentLockingElement), +/* harmony export */ elementIsScrollLocked: () => (/* binding */ elementIsScrollLocked), +/* harmony export */ pushScrollLock: () => (/* binding */ pushScrollLock), +/* harmony export */ removeScrollLock: () => (/* binding */ removeScrollLock) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/** +@license +Copyright (c) 2017 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + +/** + * Used to calculate the scroll direction during touch events. + * @type {!Object} + */ +var lastTouchPosition = {pageX: 0, pageY: 0}; +/** + * Used to avoid computing event.path and filter scrollable nodes (better perf). + * @type {?EventTarget} + */ +var lastRootTarget = null; +/** + * @type {!Array} + */ +var lastScrollableNodes = []; +/** + * @type {!Array} + */ +var scrollEvents = [ + // Modern `wheel` event for mouse wheel scrolling: + 'wheel', + // Older, non-standard `mousewheel` event for some FF: + 'mousewheel', + // IE: + 'DOMMouseScroll', + // Touch enabled devices + 'touchstart', + 'touchmove' +]; +// must be defined for modulizer +var _boundScrollHandler; + +/** + * The current element that defines the DOM boundaries of the + * scroll lock. This is always the most recently locking element. + * + * @type {!Node|undefined} + */ +var currentLockingElement; + + + +/** + * Returns true if the provided element is "scroll locked", which is to + * say that it cannot be scrolled via pointer or keyboard interactions. + * + * @param {!HTMLElement} element An HTML element instance which may or may + * not be scroll locked. + */ +function elementIsScrollLocked(element) { + var lockingElement = currentLockingElement; + + if (lockingElement === undefined) { + return false; + } + + var scrollLocked; + + if (_hasCachedLockedElement(element)) { + return true; + } + + if (_hasCachedUnlockedElement(element)) { + return false; + } + + scrollLocked = !!lockingElement && lockingElement !== element && + !_composedTreeContains(lockingElement, element); + + if (scrollLocked) { + _lockedElementCache.push(element); + } else { + _unlockedElementCache.push(element); + } + + return scrollLocked; +} + +/** + * Push an element onto the current scroll lock stack. The most recently + * pushed element and its children will be considered scrollable. All + * other elements will not be scrollable. + * + * Scroll locking is implemented as a stack so that cases such as + * dropdowns within dropdowns are handled well. + * + * @param {!HTMLElement} element The element that should lock scroll. + */ +function pushScrollLock(element) { + // Prevent pushing the same element twice + if (_lockingElements.indexOf(element) >= 0) { + return; + } + + if (_lockingElements.length === 0) { + _lockScrollInteractions(); + } + + _lockingElements.push(element); + currentLockingElement = _lockingElements[_lockingElements.length - 1]; + + _lockedElementCache = []; + _unlockedElementCache = []; +} + +/** + * Remove an element from the scroll lock stack. The element being + * removed does not need to be the most recently pushed element. However, + * the scroll lock constraints only change when the most recently pushed + * element is removed. + * + * @param {!HTMLElement} element The element to remove from the scroll + * lock stack. + */ +function removeScrollLock(element) { + var index = _lockingElements.indexOf(element); + + if (index === -1) { + return; + } + + _lockingElements.splice(index, 1); + currentLockingElement = _lockingElements[_lockingElements.length - 1]; + + _lockedElementCache = []; + _unlockedElementCache = []; + + if (_lockingElements.length === 0) { + _unlockScrollInteractions(); + } +} + +const _lockingElements = []; +let _lockedElementCache = null; +let _unlockedElementCache = null; + +function _hasCachedLockedElement(element) { + return _lockedElementCache.indexOf(element) > -1; +} + +function _hasCachedUnlockedElement(element) { + return _unlockedElementCache.indexOf(element) > -1; +} + +function _composedTreeContains(element, child) { + // NOTE(cdata): This method iterates over content elements and their + // corresponding distributed nodes to implement a contains-like method + // that pierces through the composed tree of the ShadowDOM. Results of + // this operation are cached (elsewhere) on a per-scroll-lock basis, to + // guard against potentially expensive lookups happening repeatedly as + // a user scrolls / touchmoves. + var contentElements; + var distributedNodes; + var contentIndex; + var nodeIndex; + + if (element.contains(child)) { + return true; + } + + contentElements = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__.dom)(element).querySelectorAll('content,slot'); + + for (contentIndex = 0; contentIndex < contentElements.length; + ++contentIndex) { + distributedNodes = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__.dom)(contentElements[contentIndex]).getDistributedNodes(); + + for (nodeIndex = 0; nodeIndex < distributedNodes.length; ++nodeIndex) { + // Polymer 2.x returns slot.assignedNodes which can contain text nodes. + if (distributedNodes[nodeIndex].nodeType !== Node.ELEMENT_NODE) + continue; + + if (_composedTreeContains(distributedNodes[nodeIndex], child)) { + return true; + } + } + } + + return false; +} + +function _scrollInteractionHandler(event) { + // Avoid canceling an event with cancelable=false, e.g. scrolling is in + // progress and cannot be interrupted. + if (event.cancelable && _shouldPreventScrolling(event)) { + event.preventDefault(); + } + // If event has targetTouches (touch event), update last touch position. + if (event.targetTouches) { + var touch = event.targetTouches[0]; + lastTouchPosition.pageX = touch.pageX; + lastTouchPosition.pageY = touch.pageY; + } +} + +/** + * @package + */ + + +function _lockScrollInteractions() { + _boundScrollHandler = + _boundScrollHandler || _scrollInteractionHandler.bind(undefined); + for (var i = 0, l = scrollEvents.length; i < l; i++) { + // NOTE: browsers that don't support objects as third arg will + // interpret it as boolean, hence useCapture = true in this case. + document.addEventListener( + scrollEvents[i], _boundScrollHandler, {capture: true, passive: false}); + } +} + +function _unlockScrollInteractions() { + for (var i = 0, l = scrollEvents.length; i < l; i++) { + // NOTE: browsers that don't support objects as third arg will + // interpret it as boolean, hence useCapture = true in this case. + document.removeEventListener( + scrollEvents[i], _boundScrollHandler, {capture: true, passive: false}); + } +} + +/** + * Returns true if the event causes scroll outside the current locking + * element, e.g. pointer/keyboard interactions, or scroll "leaking" + * outside the locking element when it is already at its scroll boundaries. + * @param {!Event} event + * @return {boolean} + * @package + */ +function _shouldPreventScrolling(event) { + // Update if root target changed. For touch events, ensure we don't + // update during touchmove. + var target = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__.dom)(event).rootTarget; + if (event.type !== 'touchmove' && lastRootTarget !== target) { + lastRootTarget = target; + lastScrollableNodes = _getScrollableNodes((0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__.dom)(event).path); + } + + // Prevent event if no scrollable nodes. + if (!lastScrollableNodes.length) { + return true; + } + // Don't prevent touchstart event inside the locking element when it has + // scrollable nodes. + if (event.type === 'touchstart') { + return false; + } + // Get deltaX/Y. + var info = _getScrollInfo(event); + // Prevent if there is no child that can scroll. + return !_getScrollingNode(lastScrollableNodes, info.deltaX, info.deltaY); +} + +/** + * Returns an array of scrollable nodes up to the current locking element, + * which is included too if scrollable. + * @param {!Array} nodes + * @return {!Array} scrollables + * @package + */ +function _getScrollableNodes(nodes) { + var scrollables = []; + var lockingIndex = + nodes.indexOf(/** @type {!Node} */ (currentLockingElement)); + // Loop from root target to locking element (included). + for (var i = 0; i <= lockingIndex; i++) { + // Skip non-Element nodes. + if (nodes[i].nodeType !== Node.ELEMENT_NODE) { + continue; + } + var node = /** @type {!Element} */ (nodes[i]); + // Check inline style before checking computed style. + var style = node.style; + if (style.overflow !== 'scroll' && style.overflow !== 'auto') { + style = window.getComputedStyle(node); + } + if (style.overflow === 'scroll' || style.overflow === 'auto') { + scrollables.push(node); + } + } + return scrollables; +} + +/** + * Returns the node that is scrolling. If there is no scrolling, + * returns undefined. + * @param {!Array} nodes + * @param {number} deltaX Scroll delta on the x-axis + * @param {number} deltaY Scroll delta on the y-axis + * @return {!Node|undefined} + * @package + */ +function _getScrollingNode(nodes, deltaX, deltaY) { + // No scroll. + if (!deltaX && !deltaY) { + return; + } + // Check only one axis according to where there is more scroll. + // Prefer vertical to horizontal. + var verticalScroll = Math.abs(deltaY) >= Math.abs(deltaX); + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var canScroll = false; + if (verticalScroll) { + // delta < 0 is scroll up, delta > 0 is scroll down. + canScroll = deltaY < 0 ? + node.scrollTop > 0 : + node.scrollTop < node.scrollHeight - node.clientHeight; + } else { + // delta < 0 is scroll left, delta > 0 is scroll right. + canScroll = deltaX < 0 ? + node.scrollLeft > 0 : + node.scrollLeft < node.scrollWidth - node.clientWidth; + } + if (canScroll) { + return node; + } + } +} + +/** + * Returns scroll `deltaX` and `deltaY`. + * @param {!Event} event The scroll event + * @return {{deltaX: number, deltaY: number}} Object containing the + * x-axis scroll delta (positive: scroll right, negative: scroll left, + * 0: no scroll), and the y-axis scroll delta (positive: scroll down, + * negative: scroll up, 0: no scroll). + * @package + */ +function _getScrollInfo(event) { + var info = {deltaX: event.deltaX, deltaY: event.deltaY}; + // Already available. + if ('deltaX' in event) { + // do nothing, values are already good. + } + // Safari has scroll info in `wheelDeltaX/Y`. + else if ('wheelDeltaX' in event && 'wheelDeltaY' in event) { + info.deltaX = -event.wheelDeltaX; + info.deltaY = -event.wheelDeltaY; + } + // IE10 has only vertical scroll info in `wheelDelta`. + else if ('wheelDelta' in event) { + info.deltaX = 0; + info.deltaY = -event.wheelDelta; + } + // Firefox has scroll info in `detail` and `axis`. + else if ('axis' in event) { + info.deltaX = event.axis === 1 ? event.detail : 0; + info.deltaY = event.axis === 2 ? event.detail : 0; + } + // On mobile devices, calculate scroll direction. + else if (event.targetTouches) { + var touch = event.targetTouches[0]; + // Touch moves from right to left => scrolling goes right. + info.deltaX = lastTouchPosition.pageX - touch.pageX; + // Touch moves from down to up => scrolling goes down. + info.deltaY = lastTouchPosition.pageY - touch.pageY; + } + return info; +} + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-pages/iron-pages.js": +/*!********************************************************!*\ + !*** ./node_modules/@polymer/iron-pages/iron-pages.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_resizable_behavior_iron_resizable_behavior_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-resizable-behavior/iron-resizable-behavior.js */ "./node_modules/@polymer/iron-resizable-behavior/iron-resizable-behavior.js"); +/* harmony import */ var _polymer_iron_selector_iron_selectable_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-selector/iron-selectable.js */ "./node_modules/@polymer/iron-selector/iron-selectable.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + +/** +`iron-pages` is used to select one of its children to show. One use is to cycle +through a list of children "pages". + +Example: + + +
One
+
Two
+
Three
+
+ + + +@group Iron Elements +@demo demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_3__.Polymer)({ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_4__.html)` + + + +`, + + is: 'iron-pages', + behaviors: [_polymer_iron_resizable_behavior_iron_resizable_behavior_js__WEBPACK_IMPORTED_MODULE_1__.IronResizableBehavior, _polymer_iron_selector_iron_selectable_js__WEBPACK_IMPORTED_MODULE_2__.IronSelectableBehavior], + + properties: { + + // as the selected page is the only one visible, activateEvent + // is both non-sensical and problematic; e.g. in cases where a user + // handler attempts to change the page and the activateEvent + // handler immediately changes it back + activateEvent: {type: String, value: null} + + }, + + observers: ['_selectedPageChanged(selected)'], + + _selectedPageChanged: function(selected, old) { + this.async(this.notifyResize); + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-resizable-behavior/iron-resizable-behavior.js": +/*!**********************************************************************************!*\ + !*** ./node_modules/@polymer/iron-resizable-behavior/iron-resizable-behavior.js ***! + \**********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronResizableBehavior: () => (/* binding */ IronResizableBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_settings_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/utils/settings.js */ "./node_modules/@polymer/polymer/lib/utils/settings.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + +// Contains all connected resizables that do not have a parent. +var ORPHANS = new Set(); + +/** + * `IronResizableBehavior` is a behavior that can be used in Polymer elements to + * coordinate the flow of resize events between "resizers" (elements that + *control the size or hidden state of their children) and "resizables" (elements + *that need to be notified when they are resized or un-hidden by their parents + *in order to take action on their new measurements). + * + * Elements that perform measurement should add the `IronResizableBehavior` + *behavior to their element definition and listen for the `iron-resize` event on + *themselves. This event will be fired when they become showing after having + *been hidden, when they are resized explicitly by another resizable, or when + *the window has been resized. + * + * Note, the `iron-resize` event is non-bubbling. + * + * @polymerBehavior + * @demo demo/index.html + **/ +const IronResizableBehavior = { + properties: { + /** + * The closest ancestor element that implements `IronResizableBehavior`. + */ + _parentResizable: { + type: Object, + observer: '_parentResizableChanged', + }, + + /** + * True if this element is currently notifying its descendant elements of + * resize. + */ + _notifyingDescendant: { + type: Boolean, + value: false, + } + }, + + listeners: { + 'iron-request-resize-notifications': '_onIronRequestResizeNotifications' + }, + + created: function() { + // We don't really need property effects on these, and also we want them + // to be created before the `_parentResizable` observer fires: + this._interestedResizables = []; + this._boundNotifyResize = this.notifyResize.bind(this); + this._boundOnDescendantIronResize = this._onDescendantIronResize.bind(this); + }, + + attached: function() { + this._requestResizeNotifications(); + }, + + detached: function() { + if (this._parentResizable) { + this._parentResizable.stopResizeNotificationsFor(this); + } else { + ORPHANS.delete(this); + window.removeEventListener('resize', this._boundNotifyResize); + } + + this._parentResizable = null; + }, + + /** + * Can be called to manually notify a resizable and its descendant + * resizables of a resize change. + */ + notifyResize: function() { + if (!this.isAttached) { + return; + } + + this._interestedResizables.forEach(function(resizable) { + if (this.resizerShouldNotify(resizable)) { + this._notifyDescendant(resizable); + } + }, this); + + this._fireResize(); + }, + + /** + * Used to assign the closest resizable ancestor to this resizable + * if the ancestor detects a request for notifications. + */ + assignParentResizable: function(parentResizable) { + if (this._parentResizable) { + this._parentResizable.stopResizeNotificationsFor(this); + } + + this._parentResizable = parentResizable; + + if (parentResizable && + parentResizable._interestedResizables.indexOf(this) === -1) { + parentResizable._interestedResizables.push(this); + parentResizable._subscribeIronResize(this); + } + }, + + /** + * Used to remove a resizable descendant from the list of descendants + * that should be notified of a resize change. + */ + stopResizeNotificationsFor: function(target) { + var index = this._interestedResizables.indexOf(target); + + if (index > -1) { + this._interestedResizables.splice(index, 1); + this._unsubscribeIronResize(target); + } + }, + + /** + * Subscribe this element to listen to iron-resize events on the given target. + * + * Preferred over target.listen because the property renamer does not + * understand to rename when the target is not specifically "this" + * + * @param {!HTMLElement} target Element to listen to for iron-resize events. + */ + _subscribeIronResize: function(target) { + target.addEventListener('iron-resize', this._boundOnDescendantIronResize); + }, + + /** + * Unsubscribe this element from listening to to iron-resize events on the + * given target. + * + * Preferred over target.unlisten because the property renamer does not + * understand to rename when the target is not specifically "this" + * + * @param {!HTMLElement} target Element to listen to for iron-resize events. + */ + _unsubscribeIronResize: function(target) { + target.removeEventListener( + 'iron-resize', this._boundOnDescendantIronResize); + }, + + /** + * This method can be overridden to filter nested elements that should or + * should not be notified by the current element. Return true if an element + * should be notified, or false if it should not be notified. + * + * @param {HTMLElement} element A candidate descendant element that + * implements `IronResizableBehavior`. + * @return {boolean} True if the `element` should be notified of resize. + */ + resizerShouldNotify: function(element) { + return true; + }, + + _onDescendantIronResize: function(event) { + if (this._notifyingDescendant) { + event.stopPropagation(); + return; + } + + // no need to use this during shadow dom because of event retargeting + if (!_polymer_polymer_lib_utils_settings_js__WEBPACK_IMPORTED_MODULE_2__.useShadow) { + this._fireResize(); + } + }, + + _fireResize: function() { + this.fire('iron-resize', null, {node: this, bubbles: false}); + }, + + _onIronRequestResizeNotifications: function(event) { + var target = /** @type {!EventTarget} */ ((0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__.dom)(event).rootTarget); + if (target === this) { + return; + } + + target.assignParentResizable(this); + this._notifyDescendant(target); + + event.stopPropagation(); + }, + + _parentResizableChanged: function(parentResizable) { + if (parentResizable) { + window.removeEventListener('resize', this._boundNotifyResize); + } + }, + + _notifyDescendant: function(descendant) { + // NOTE(cdata): In IE10, attached is fired on children first, so it's + // important not to notify them if the parent is not attached yet (or + // else they will get redundantly notified when the parent attaches). + if (!this.isAttached) { + return; + } + + this._notifyingDescendant = true; + descendant.notifyResize(); + this._notifyingDescendant = false; + }, + + _requestResizeNotifications: function() { + if (!this.isAttached) { + return; + } + + if (document.readyState === 'loading') { + var _requestResizeNotifications = + this._requestResizeNotifications.bind(this); + document.addEventListener( + 'readystatechange', function readystatechanged() { + document.removeEventListener('readystatechange', readystatechanged); + _requestResizeNotifications(); + }); + } else { + this._findParent(); + + if (!this._parentResizable) { + // If this resizable is an orphan, tell other orphans to try to find + // their parent again, in case it's this resizable. + ORPHANS.forEach(function(orphan) { + if (orphan !== this) { + orphan._findParent(); + } + }, this); + + window.addEventListener('resize', this._boundNotifyResize); + this.notifyResize(); + } else { + // If this resizable has a parent, tell other child resizables of + // that parent to try finding their parent again, in case it's this + // resizable. + this._parentResizable._interestedResizables + .forEach(function(resizable) { + if (resizable !== this) { + resizable._findParent(); + } + }, this); + } + } + }, + + _findParent: function() { + this.assignParentResizable(null); + this.fire( + 'iron-request-resize-notifications', + null, + {node: this, bubbles: true, cancelable: true}); + + if (!this._parentResizable) { + ORPHANS.add(this); + } else { + ORPHANS.delete(this); + } + } +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-scroll-target-behavior/iron-scroll-target-behavior.js": +/*!******************************************************************************************!*\ + !*** ./node_modules/@polymer/iron-scroll-target-behavior/iron-scroll-target-behavior.js ***! + \******************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronScrollTargetBehavior: () => (/* binding */ IronScrollTargetBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + +/** + * `Polymer.IronScrollTargetBehavior` allows an element to respond to scroll + * events from a designated scroll target. + * + * Elements that consume this behavior can override the `_scrollHandler` + * method to add logic on the scroll event. + * + * @demo demo/scrolling-region.html Scrolling Region + * @demo demo/document.html Document Element + * @polymerBehavior + */ +const IronScrollTargetBehavior = { + + properties: { + + /** + * Specifies the element that will handle the scroll event + * on the behalf of the current element. This is typically a reference to an + *element, but there are a few more posibilities: + * + * ### Elements id + * + *```html + *
+ * + * + * + *
+ *``` + * In this case, the `scrollTarget` will point to the outer div element. + * + * ### Document scrolling + * + * For document scrolling, you can use the reserved word `document`: + * + *```html + * + * + * + *``` + * + * ### Elements reference + * + *```js + * appHeader.scrollTarget = document.querySelector('#scrollable-element'); + *``` + * + * @type {HTMLElement} + * @default document + */ + scrollTarget: { + type: HTMLElement, + value: function() { + return this._defaultScrollTarget; + } + } + }, + + observers: ['_scrollTargetChanged(scrollTarget, isAttached)'], + + /** + * True if the event listener should be installed. + */ + _shouldHaveListener: true, + + _scrollTargetChanged: function(scrollTarget, isAttached) { + var eventTarget; + + if (this._oldScrollTarget) { + this._toggleScrollListener(false, this._oldScrollTarget); + this._oldScrollTarget = null; + } + if (!isAttached) { + return; + } + // Support element id references + if (scrollTarget === 'document') { + this.scrollTarget = this._doc; + + } else if (typeof scrollTarget === 'string') { + var domHost = this.domHost; + + this.scrollTarget = domHost && domHost.$ ? + domHost.$[scrollTarget] : + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__.dom)(this.ownerDocument).querySelector('#' + scrollTarget); + + } else if (this._isValidScrollTarget()) { + this._oldScrollTarget = scrollTarget; + this._toggleScrollListener(this._shouldHaveListener, scrollTarget); + } + }, + + /** + * Runs on every scroll event. Consumer of this behavior may override this + * method. + * + * @protected + */ + _scrollHandler: function scrollHandler() {}, + + /** + * The default scroll target. Consumers of this behavior may want to customize + * the default scroll target. + * + * @type {Element} + */ + get _defaultScrollTarget() { + return this._doc; + }, + + /** + * Shortcut for the document element + * + * @type {Element} + */ + get _doc() { + return this.ownerDocument.documentElement; + }, + + /** + * Gets the number of pixels that the content of an element is scrolled + * upward. + * + * @type {number} + */ + get _scrollTop() { + if (this._isValidScrollTarget()) { + return this.scrollTarget === this._doc ? window.pageYOffset : + this.scrollTarget.scrollTop; + } + return 0; + }, + + /** + * Gets the number of pixels that the content of an element is scrolled to the + * left. + * + * @type {number} + */ + get _scrollLeft() { + if (this._isValidScrollTarget()) { + return this.scrollTarget === this._doc ? window.pageXOffset : + this.scrollTarget.scrollLeft; + } + return 0; + }, + + /** + * Sets the number of pixels that the content of an element is scrolled + * upward. + * + * @type {number} + */ + set _scrollTop(top) { + if (this.scrollTarget === this._doc) { + window.scrollTo(window.pageXOffset, top); + } else if (this._isValidScrollTarget()) { + this.scrollTarget.scrollTop = top; + } + }, + + /** + * Sets the number of pixels that the content of an element is scrolled to the + * left. + * + * @type {number} + */ + set _scrollLeft(left) { + if (this.scrollTarget === this._doc) { + window.scrollTo(left, window.pageYOffset); + } else if (this._isValidScrollTarget()) { + this.scrollTarget.scrollLeft = left; + } + }, + + /** + * Scrolls the content to a particular place. + * + * @method scroll + * @param {number|!{left: number, top: number}} leftOrOptions The left position or scroll options + * @param {number=} top The top position + * @return {void} + */ + scroll: function(leftOrOptions, top) { + var left; + + if (typeof leftOrOptions === 'object') { + left = leftOrOptions.left; + top = leftOrOptions.top; + } else { + left = leftOrOptions; + } + + left = left || 0; + top = top || 0; + if (this.scrollTarget === this._doc) { + window.scrollTo(left, top); + } else if (this._isValidScrollTarget()) { + this.scrollTarget.scrollLeft = left; + this.scrollTarget.scrollTop = top; + } + }, + + /** + * Gets the width of the scroll target. + * + * @type {number} + */ + get _scrollTargetWidth() { + if (this._isValidScrollTarget()) { + return this.scrollTarget === this._doc ? window.innerWidth : + this.scrollTarget.offsetWidth; + } + return 0; + }, + + /** + * Gets the height of the scroll target. + * + * @type {number} + */ + get _scrollTargetHeight() { + if (this._isValidScrollTarget()) { + return this.scrollTarget === this._doc ? window.innerHeight : + this.scrollTarget.offsetHeight; + } + return 0; + }, + + /** + * Returns true if the scroll target is a valid HTMLElement. + * + * @return {boolean} + */ + _isValidScrollTarget: function() { + return this.scrollTarget instanceof HTMLElement; + }, + + _toggleScrollListener: function(yes, scrollTarget) { + var eventTarget = scrollTarget === this._doc ? window : scrollTarget; + if (yes) { + if (!this._boundScrollHandler) { + this._boundScrollHandler = this._scrollHandler.bind(this); + eventTarget.addEventListener('scroll', this._boundScrollHandler); + } + } else { + if (this._boundScrollHandler) { + eventTarget.removeEventListener('scroll', this._boundScrollHandler); + this._boundScrollHandler = null; + } + } + }, + + /** + * Enables or disables the scroll event listener. + * + * @param {boolean} yes True to add the event, False to remove it. + */ + toggleScrollListener: function(yes) { + this._shouldHaveListener = yes; + this._toggleScrollListener(yes, this.scrollTarget); + } + +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-selector/iron-multi-selectable.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@polymer/iron-selector/iron-multi-selectable.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronMultiSelectableBehavior: () => (/* binding */ IronMultiSelectableBehavior), +/* harmony export */ IronMultiSelectableBehaviorImpl: () => (/* binding */ IronMultiSelectableBehaviorImpl) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _iron_selectable_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iron-selectable.js */ "./node_modules/@polymer/iron-selector/iron-selectable.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + +/** + * @polymerBehavior IronMultiSelectableBehavior + */ +const IronMultiSelectableBehaviorImpl = { + properties: { + + /** + * If true, multiple selections are allowed. + */ + multi: {type: Boolean, value: false, observer: 'multiChanged'}, + + /** + * Gets or sets the selected elements. This is used instead of `selected` + * when `multi` is true. + */ + selectedValues: { + type: Array, + notify: true, + value: function() { + return []; + } + }, + + /** + * Returns an array of currently selected items. + */ + selectedItems: { + type: Array, + readOnly: true, + notify: true, + value: function() { + return []; + } + }, + + }, + + observers: ['_updateSelected(selectedValues.splices)'], + + /** + * Selects the given value. If the `multi` property is true, then the selected + * state of the `value` will be toggled; otherwise the `value` will be + * selected. + * + * @method select + * @param {string|number} value the value to select. + */ + select: function(value) { + if (this.multi) { + this._toggleSelected(value); + } else { + this.selected = value; + } + }, + + multiChanged: function(multi) { + this._selection.multi = multi; + this._updateSelected(); + }, + + // UNUSED, FOR API COMPATIBILITY + get _shouldUpdateSelection() { + return this.selected != null || + (this.selectedValues != null && this.selectedValues.length); + }, + + _updateAttrForSelected: function() { + if (!this.multi) { + _iron_selectable_js__WEBPACK_IMPORTED_MODULE_1__.IronSelectableBehavior._updateAttrForSelected.apply(this); + } else if (this.selectedItems && this.selectedItems.length > 0) { + this.selectedValues = + this.selectedItems + .map( + function(selectedItem) { + return this._indexToValue(this.indexOf(selectedItem)); + }, + this) + .filter(function(unfilteredValue) { + return unfilteredValue != null; + }, this); + } + }, + + _updateSelected: function() { + if (this.multi) { + this._selectMulti(this.selectedValues); + } else { + this._selectSelected(this.selected); + } + }, + + _selectMulti: function(values) { + values = values || []; + + var selectedItems = + (this._valuesToItems(values) || []).filter(function(item) { + return item !== null && item !== undefined; + }); + + // clear all but the current selected items + this._selection.clear(selectedItems); + + // select only those not selected yet + for (var i = 0; i < selectedItems.length; i++) { + this._selection.setItemSelected(selectedItems[i], true); + } + + // Check for items, since this array is populated only when attached + if (this.fallbackSelection && !this._selection.get().length) { + var fallback = this._valueToItem(this.fallbackSelection); + if (fallback) { + this.select(this.fallbackSelection); + } + } + }, + + _selectionChange: function() { + var s = this._selection.get(); + if (this.multi) { + this._setSelectedItems(s); + this._setSelectedItem(s.length ? s[0] : null); + } else { + if (s !== null && s !== undefined) { + this._setSelectedItems([s]); + this._setSelectedItem(s); + } else { + this._setSelectedItems([]); + this._setSelectedItem(null); + } + } + }, + + _toggleSelected: function(value) { + var i = this.selectedValues.indexOf(value); + var unselected = i < 0; + if (unselected) { + this.push('selectedValues', value); + } else { + this.splice('selectedValues', i, 1); + } + }, + + _valuesToItems: function(values) { + return (values == null) ? null : values.map(function(value) { + return this._valueToItem(value); + }, this); + } +}; + +/** @polymerBehavior */ +const IronMultiSelectableBehavior = + [_iron_selectable_js__WEBPACK_IMPORTED_MODULE_1__.IronSelectableBehavior, IronMultiSelectableBehaviorImpl]; + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-selector/iron-selectable.js": +/*!****************************************************************!*\ + !*** ./node_modules/@polymer/iron-selector/iron-selectable.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronSelectableBehavior: () => (/* binding */ IronSelectableBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_case_map_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/utils/case-map.js */ "./node_modules/@polymer/polymer/lib/utils/case-map.js"); +/* harmony import */ var _iron_selection_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./iron-selection.js */ "./node_modules/@polymer/iron-selector/iron-selection.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + +/** + * @polymerBehavior + */ +const IronSelectableBehavior = { + + /** + * Fired when iron-selector is activated (selected or deselected). + * It is fired before the selected items are changed. + * Cancel the event to abort selection. + * + * @event iron-activate + */ + + /** + * Fired when an item is selected + * + * @event iron-select + */ + + /** + * Fired when an item is deselected + * + * @event iron-deselect + */ + + /** + * Fired when the list of selectable items changes (e.g., items are + * added or removed). The detail of the event is a mutation record that + * describes what changed. + * + * @event iron-items-changed + */ + + properties: { + + /** + * If you want to use an attribute value or property of an element for + * `selected` instead of the index, set this to the name of the attribute + * or property. Hyphenated values are converted to camel case when used to + * look up the property of a selectable element. Camel cased values are + * *not* converted to hyphenated values for attribute lookup. It's + * recommended that you provide the hyphenated form of the name so that + * selection works in both cases. (Use `attr-or-property-name` instead of + * `attrOrPropertyName`.) + */ + attrForSelected: {type: String, value: null}, + + /** + * Gets or sets the selected element. The default is to use the index of the + * item. + * @type {string|number} + */ + selected: {type: String, notify: true}, + + /** + * Returns the currently selected item. + * + * @type {?Object} + */ + selectedItem: {type: Object, readOnly: true, notify: true}, + + /** + * The event that fires from items when they are selected. Selectable + * will listen for this event from items and update the selection state. + * Set to empty string to listen to no events. + */ + activateEvent: + {type: String, value: 'tap', observer: '_activateEventChanged'}, + + /** + * This is a CSS selector string. If this is set, only items that match the + * CSS selector are selectable. + */ + selectable: String, + + /** + * The class to set on elements when selected. + */ + selectedClass: {type: String, value: 'iron-selected'}, + + /** + * The attribute to set on elements when selected. + */ + selectedAttribute: {type: String, value: null}, + + /** + * Default fallback if the selection based on selected with + * `attrForSelected` is not found. + */ + fallbackSelection: {type: String, value: null}, + + /** + * The list of items from which a selection can be made. + */ + items: { + type: Array, + readOnly: true, + notify: true, + value: function() { + return []; + } + }, + + /** + * The set of excluded elements where the key is the `localName` + * of the element that will be ignored from the item list. + * + * @default {template: 1} + */ + _excludedLocalNames: { + type: Object, + value: function() { + return { + 'template': 1, + 'dom-bind': 1, + 'dom-if': 1, + 'dom-repeat': 1, + }; + } + } + }, + + observers: [ + '_updateAttrForSelected(attrForSelected)', + '_updateSelected(selected)', + '_checkFallback(fallbackSelection)' + ], + + created: function() { + this._bindFilterItem = this._filterItem.bind(this); + this._selection = new _iron_selection_js__WEBPACK_IMPORTED_MODULE_3__.IronSelection(this._applySelection.bind(this)); + }, + + attached: function() { + this._observer = this._observeItems(this); + this._addListener(this.activateEvent); + }, + + detached: function() { + if (this._observer) { + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__.dom)(this).unobserveNodes(this._observer); + } + this._removeListener(this.activateEvent); + }, + + /** + * Returns the index of the given item. + * + * @method indexOf + * @param {Object} item + * @returns Returns the index of the item + */ + indexOf: function(item) { + return this.items ? this.items.indexOf(item) : -1; + }, + + /** + * Selects the given value. + * + * @method select + * @param {string|number} value the value to select. + */ + select: function(value) { + this.selected = value; + }, + + /** + * Selects the previous item. + * + * @method selectPrevious + */ + selectPrevious: function() { + var length = this.items.length; + var index = length - 1; + if (this.selected !== undefined) { + index = (Number(this._valueToIndex(this.selected)) - 1 + length) % length; + } + this.selected = this._indexToValue(index); + }, + + /** + * Selects the next item. + * + * @method selectNext + */ + selectNext: function() { + var index = 0; + if (this.selected !== undefined) { + index = + (Number(this._valueToIndex(this.selected)) + 1) % this.items.length; + } + this.selected = this._indexToValue(index); + }, + + /** + * Selects the item at the given index. + * + * @method selectIndex + */ + selectIndex: function(index) { + this.select(this._indexToValue(index)); + }, + + /** + * Force a synchronous update of the `items` property. + * + * NOTE: Consider listening for the `iron-items-changed` event to respond to + * updates to the set of selectable items after updates to the DOM list and + * selection state have been made. + * + * WARNING: If you are using this method, you should probably consider an + * alternate approach. Synchronously querying for items is potentially + * slow for many use cases. The `items` property will update asynchronously + * on its own to reflect selectable items in the DOM. + */ + forceSynchronousItemUpdate: function() { + if (this._observer && typeof this._observer.flush === 'function') { + // NOTE(bicknellr): `dom.flush` above is no longer sufficient to trigger + // `observeNodes` callbacks. Polymer 2.x returns an object from + // `observeNodes` with a `flush` that synchronously gives the callback any + // pending MutationRecords (retrieved with `takeRecords`). Any case where + // ShadyDOM flushes were expected to synchronously trigger item updates + // will now require calling `forceSynchronousItemUpdate`. + this._observer.flush(); + } else { + this._updateItems(); + } + }, + + // UNUSED, FOR API COMPATIBILITY + get _shouldUpdateSelection() { + return this.selected != null; + }, + + _checkFallback: function() { + this._updateSelected(); + }, + + _addListener: function(eventName) { + this.listen(this, eventName, '_activateHandler'); + }, + + _removeListener: function(eventName) { + this.unlisten(this, eventName, '_activateHandler'); + }, + + _activateEventChanged: function(eventName, old) { + this._removeListener(old); + this._addListener(eventName); + }, + + _updateItems: function() { + var nodes = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__.dom)(this).queryDistributedElements(this.selectable || '*'); + nodes = Array.prototype.filter.call(nodes, this._bindFilterItem); + this._setItems(nodes); + }, + + _updateAttrForSelected: function() { + if (this.selectedItem) { + this.selected = this._valueForItem(this.selectedItem); + } + }, + + _updateSelected: function() { + this._selectSelected(this.selected); + }, + + _selectSelected: function(selected) { + if (!this.items) { + return; + } + + var item = this._valueToItem(this.selected); + if (item) { + this._selection.select(item); + } else { + this._selection.clear(); + } + // Check for items, since this array is populated only when attached + // Since Number(0) is falsy, explicitly check for undefined + if (this.fallbackSelection && this.items.length && + (this._selection.get() === undefined)) { + this.selected = this.fallbackSelection; + } + }, + + _filterItem: function(node) { + return !this._excludedLocalNames[node.localName]; + }, + + _valueToItem: function(value) { + return (value == null) ? null : this.items[this._valueToIndex(value)]; + }, + + _valueToIndex: function(value) { + if (this.attrForSelected) { + for (var i = 0, item; item = this.items[i]; i++) { + if (this._valueForItem(item) == value) { + return i; + } + } + } else { + return Number(value); + } + }, + + _indexToValue: function(index) { + if (this.attrForSelected) { + var item = this.items[index]; + if (item) { + return this._valueForItem(item); + } + } else { + return index; + } + }, + + _valueForItem: function(item) { + if (!item) { + return null; + } + if (!this.attrForSelected) { + var i = this.indexOf(item); + return i === -1 ? null : i; + } + var propValue = item[(0,_polymer_polymer_lib_utils_case_map_js__WEBPACK_IMPORTED_MODULE_2__.dashToCamelCase)(this.attrForSelected)]; + return propValue != undefined ? propValue : + item.getAttribute(this.attrForSelected); + }, + + _applySelection: function(item, isSelected) { + if (this.selectedClass) { + this.toggleClass(this.selectedClass, isSelected, item); + } + if (this.selectedAttribute) { + this.toggleAttribute(this.selectedAttribute, isSelected, item); + } + this._selectionChange(); + this.fire('iron-' + (isSelected ? 'select' : 'deselect'), {item: item}); + }, + + _selectionChange: function() { + this._setSelectedItem(this._selection.get()); + }, + + // observe items change under the given node. + _observeItems: function(node) { + return (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__.dom)(node).observeNodes(function(mutation) { + this._updateItems(); + this._updateSelected(); + + // Let other interested parties know about the change so that + // we don't have to recreate mutation observers everywhere. + this.fire( + 'iron-items-changed', mutation, {bubbles: false, cancelable: false}); + }); + }, + + _activateHandler: function(e) { + var t = e.target; + var items = this.items; + while (t && t != this) { + var i = items.indexOf(t); + if (i >= 0) { + var value = this._indexToValue(i); + this._itemActivate(value, t); + return; + } + t = t.parentNode; + } + }, + + _itemActivate: function(value, item) { + if (!this.fire('iron-activate', {selected: value, item: item}, { + cancelable: true + }) + .defaultPrevented) { + this.select(value); + } + } + +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-selector/iron-selection.js": +/*!***************************************************************!*\ + !*** ./node_modules/@polymer/iron-selector/iron-selection.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronSelection: () => (/* binding */ IronSelection) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + +class IronSelection { + /** + * @param {!Function} selectCallback + * @suppress {missingProvide} + */ + constructor(selectCallback) { + this.selection = []; + this.selectCallback = selectCallback; + } + + /** + * Retrieves the selected item(s). + * + * @returns Returns the selected item(s). If the multi property is true, + * `get` will return an array, otherwise it will return + * the selected item or undefined if there is no selection. + */ + get() { + return this.multi ? this.selection.slice() : this.selection[0]; + } + + /** + * Clears all the selection except the ones indicated. + * + * @param {Array} excludes items to be excluded. + */ + clear(excludes) { + this.selection.slice().forEach(function(item) { + if (!excludes || excludes.indexOf(item) < 0) { + this.setItemSelected(item, false); + } + }, this); + } + + /** + * Indicates if a given item is selected. + * + * @param {*} item The item whose selection state should be checked. + * @return {boolean} Returns true if `item` is selected. + */ + isSelected(item) { + return this.selection.indexOf(item) >= 0; + } + + /** + * Sets the selection state for a given item to either selected or deselected. + * + * @param {*} item The item to select. + * @param {boolean} isSelected True for selected, false for deselected. + */ + setItemSelected(item, isSelected) { + if (item != null) { + if (isSelected !== this.isSelected(item)) { + // proceed to update selection only if requested state differs from + // current + if (isSelected) { + this.selection.push(item); + } else { + var i = this.selection.indexOf(item); + if (i >= 0) { + this.selection.splice(i, 1); + } + } + if (this.selectCallback) { + this.selectCallback(item, isSelected); + } + } + } + } + + /** + * Sets the selection state for a given item. If the `multi` property + * is true, then the selected state of `item` will be toggled; otherwise + * the `item` will be selected. + * + * @param {*} item The item to select. + */ + select(item) { + if (this.multi) { + this.toggle(item); + } else if (this.get() !== item) { + this.setItemSelected(this.get(), false); + this.setItemSelected(item, true); + } + } + + /** + * Toggles the selection state for `item`. + * + * @param {*} item The item to toggle. + */ + toggle(item) { + this.setItemSelected(item, !this.isSelected(item)); + } +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-validatable-behavior/iron-validatable-behavior.js": +/*!**************************************************************************************!*\ + !*** ./node_modules/@polymer/iron-validatable-behavior/iron-validatable-behavior.js ***! + \**************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronValidatableBehavior: () => (/* binding */ IronValidatableBehavior), +/* harmony export */ IronValidatableBehaviorMeta: () => (/* binding */ IronValidatableBehaviorMeta) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_meta_iron_meta_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-meta/iron-meta.js */ "./node_modules/@polymer/iron-meta/iron-meta.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + +/** + * Singleton IronMeta instance. + */ +let IronValidatableBehaviorMeta = null; + +/** + * `Use IronValidatableBehavior` to implement an element that validates + * user input. Use the related `IronValidatorBehavior` to add custom + * validation logic to an iron-input. + * + * By default, an `` element validates its fields when the user + * presses the submit button. To validate a form imperatively, call the form's + * `validate()` method, which in turn will call `validate()` on all its + * children. By using `IronValidatableBehavior`, your custom element + * will get a public `validate()`, which will return the validity of the + * element, and a corresponding `invalid` attribute, which can be used for + * styling. + * + * To implement the custom validation logic of your element, you must override + * the protected `_getValidity()` method of this behaviour, rather than + * `validate()`. See + * [this](https://github.com/PolymerElements/iron-form/blob/master/demo/simple-element.html) + * for an example. + * + * ### Accessibility + * + * Changing the `invalid` property, either manually or by calling `validate()` + * will update the `aria-invalid` attribute. + * + * @demo demo/index.html + * @polymerBehavior + */ +const IronValidatableBehavior = { + + properties: { + /** + * Name of the validator to use. + */ + validator: {type: String}, + + /** + * True if the last call to `validate` is invalid. + */ + invalid: { + notify: true, + reflectToAttribute: true, + type: Boolean, + value: false, + observer: '_invalidChanged' + }, + }, + + registered: function() { + IronValidatableBehaviorMeta = new _polymer_iron_meta_iron_meta_js__WEBPACK_IMPORTED_MODULE_1__.IronMeta({type: 'validator'}); + }, + + _invalidChanged: function() { + if (this.invalid) { + this.setAttribute('aria-invalid', 'true'); + } else { + this.removeAttribute('aria-invalid'); + } + }, + + /* Recompute this every time it's needed, because we don't know if the + * underlying IronValidatableBehaviorMeta has changed. */ + get _validator() { + return IronValidatableBehaviorMeta && + IronValidatableBehaviorMeta.byKey(this.validator); + }, + + /** + * @return {boolean} True if the validator `validator` exists. + */ + hasValidator: function() { + return this._validator != null; + }, + + /** + * Returns true if the `value` is valid, and updates `invalid`. If you want + * your element to have custom validation logic, do not override this method; + * override `_getValidity(value)` instead. + + * @param {Object} value Deprecated: The value to be validated. By default, + * it is passed to the validator's `validate()` function, if a validator is + set. + * If this argument is not specified, then the element's `value` property + * is used, if it exists. + * @return {boolean} True if `value` is valid. + */ + validate: function(value) { + // If this is an element that also has a value property, and there was + // no explicit value argument passed, use the element's property instead. + if (value === undefined && this.value !== undefined) + this.invalid = !this._getValidity(this.value); + else + this.invalid = !this._getValidity(value); + return !this.invalid; + }, + + /** + * Returns true if `value` is valid. By default, it is passed + * to the validator's `validate()` function, if a validator is set. You + * should override this method if you want to implement custom validity + * logic for your element. + * + * @param {Object} value The value to be validated. + * @return {boolean} True if `value` is valid. + */ + + _getValidity: function(value) { + if (this.hasValidator()) { + return this._validator.validate(value); + } + return true; + } +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/neon-animation/animations/fade-in-animation.js": +/*!******************************************************************************!*\ + !*** ./node_modules/@polymer/neon-animation/animations/fade-in-animation.js ***! + \******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _neon_animation_behavior_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../neon-animation-behavior.js */ "./node_modules/@polymer/neon-animation/neon-animation-behavior.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + +/* +`` animates the opacity of an element from 0 to 1. + +Configuration: +``` +{ + name: 'fade-in-animation', + node: + timing: +} +``` +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__.Polymer)({ + + is: 'fade-in-animation', + + behaviors: [_neon_animation_behavior_js__WEBPACK_IMPORTED_MODULE_2__.NeonAnimationBehavior], + + configure: function(config) { + var node = config.node; + this._effect = new KeyframeEffect( + node, + [{'opacity': '0'}, {'opacity': '1'}], + this.timingFromConfig(config)); + return this._effect; + } + +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/neon-animation/animations/fade-out-animation.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/@polymer/neon-animation/animations/fade-out-animation.js ***! + \*******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _neon_animation_behavior_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../neon-animation-behavior.js */ "./node_modules/@polymer/neon-animation/neon-animation-behavior.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + +/* +`` animates the opacity of an element from 1 to 0. + +Configuration: +``` +{ + name: 'fade-out-animation', + node: + timing: +} +``` +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__.Polymer)({ + + is: 'fade-out-animation', + + behaviors: [_neon_animation_behavior_js__WEBPACK_IMPORTED_MODULE_2__.NeonAnimationBehavior], + + configure: function(config) { + var node = config.node; + this._effect = new KeyframeEffect( + node, + [ + {'opacity': '1'}, + {'opacity': '0'}, + ], + this.timingFromConfig(config)); + return this._effect; + } + +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/neon-animation/neon-animatable-behavior.js": +/*!**************************************************************************!*\ + !*** ./node_modules/@polymer/neon-animation/neon-animatable-behavior.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ NeonAnimatableBehavior: () => (/* binding */ NeonAnimatableBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + +/** + * `NeonAnimatableBehavior` is implemented by elements containing + * animations for use with elements implementing + * `NeonAnimationRunnerBehavior`. + * @polymerBehavior + */ +const NeonAnimatableBehavior = { + + properties: { + + /** + * Animation configuration. See README for more info. + */ + animationConfig: {type: Object}, + + /** + * Convenience property for setting an 'entry' animation. Do not set + * `animationConfig.entry` manually if using this. The animated node is set + * to `this` if using this property. + */ + entryAnimation: { + observer: '_entryAnimationChanged', + type: String, + }, + + /** + * Convenience property for setting an 'exit' animation. Do not set + * `animationConfig.exit` manually if using this. The animated node is set + * to `this` if using this property. + */ + exitAnimation: { + observer: '_exitAnimationChanged', + type: String, + }, + + }, + + _entryAnimationChanged: function() { + this.animationConfig = this.animationConfig || {}; + this.animationConfig['entry'] = [{name: this.entryAnimation, node: this}]; + }, + + _exitAnimationChanged: function() { + this.animationConfig = this.animationConfig || {}; + this.animationConfig['exit'] = [{name: this.exitAnimation, node: this}]; + }, + + _copyProperties: function(config1, config2) { + // shallowly copy properties from config2 to config1 + for (var property in config2) { + config1[property] = config2[property]; + } + }, + + _cloneConfig: function(config) { + var clone = {isClone: true}; + this._copyProperties(clone, config); + return clone; + }, + + _getAnimationConfigRecursive: function(type, map, allConfigs) { + if (!this.animationConfig) { + return; + } + + if (this.animationConfig.value && + typeof this.animationConfig.value === 'function') { + this._warn(this._logf( + 'playAnimation', + 'Please put \'animationConfig\' inside of your components \'properties\' object instead of outside of it.')); + return; + } + + // type is optional + var thisConfig; + if (type) { + thisConfig = this.animationConfig[type]; + } else { + thisConfig = this.animationConfig; + } + + if (!Array.isArray(thisConfig)) { + thisConfig = [thisConfig]; + } + + // iterate animations and recurse to process configurations from child nodes + if (thisConfig) { + for (var config, index = 0; config = thisConfig[index]; index++) { + if (config.animatable) { + config.animatable._getAnimationConfigRecursive( + config.type || type, map, allConfigs); + } else { + if (config.id) { + var cachedConfig = map[config.id]; + if (cachedConfig) { + // merge configurations with the same id, making a clone lazily + if (!cachedConfig.isClone) { + map[config.id] = this._cloneConfig(cachedConfig); + cachedConfig = map[config.id]; + } + this._copyProperties(cachedConfig, config); + } else { + // put any configs with an id into a map + map[config.id] = config; + } + } else { + allConfigs.push(config); + } + } + } + } + }, + + /** + * An element implementing `NeonAnimationRunnerBehavior` calls this + * method to configure an animation with an optional type. Elements + * implementing `NeonAnimatableBehavior` should define the property + * `animationConfig`, which is either a configuration object or a map of + * animation type to array of configuration objects. + */ + getAnimationConfig: function(type) { + var map = {}; + var allConfigs = []; + this._getAnimationConfigRecursive(type, map, allConfigs); + // append the configurations saved in the map to the array + for (var key in map) { + allConfigs.push(map[key]); + } + return allConfigs; + } + +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/neon-animation/neon-animation-behavior.js": +/*!*************************************************************************!*\ + !*** ./node_modules/@polymer/neon-animation/neon-animation-behavior.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ NeonAnimationBehavior: () => (/* binding */ NeonAnimationBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + +/** + * Use `NeonAnimationBehavior` to implement an animation. + * @polymerBehavior + */ +const NeonAnimationBehavior = { + + properties: { + + /** + * Defines the animation timing. + */ + animationTiming: { + type: Object, + value: function() { + return { + duration: 500, easing: 'cubic-bezier(0.4, 0, 0.2, 1)', fill: 'both' + } + } + } + + }, + + /** + * Can be used to determine that elements implement this behavior. + */ + isNeonAnimation: true, + + /** + * Do any animation configuration here. + */ + // configure: function(config) { + // }, + + created: function() { + if (!document.body.animate) { + console.warn( + 'No web animations detected. This element will not' + + ' function without a web animations polyfill.'); + } + }, + + /** + * Returns the animation timing by mixing in properties from `config` to the + * defaults defined by the animation. + */ + timingFromConfig: function(config) { + if (config.timing) { + for (var property in config.timing) { + this.animationTiming[property] = config.timing[property]; + } + } + return this.animationTiming; + }, + + /** + * Sets `transform` and `transformOrigin` properties along with the prefixed + * versions. + */ + setPrefixedProperty: function(node, property, value) { + var map = { + 'transform': ['webkitTransform'], + 'transformOrigin': ['mozTransformOrigin', 'webkitTransformOrigin'] + }; + var prefixes = map[property]; + for (var prefix, index = 0; prefix = prefixes[index]; index++) { + node.style[prefix] = value; + } + node.style[property] = value; + }, + + /** + * Called when the animation finishes. + */ + complete: function(config) {} + +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/neon-animation/neon-animation-runner-behavior.js": +/*!********************************************************************************!*\ + !*** ./node_modules/@polymer/neon-animation/neon-animation-runner-behavior.js ***! + \********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ NeonAnimationRunnerBehavior: () => (/* binding */ NeonAnimationRunnerBehavior), +/* harmony export */ NeonAnimationRunnerBehaviorImpl: () => (/* binding */ NeonAnimationRunnerBehaviorImpl) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _neon_animatable_behavior_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./neon-animatable-behavior.js */ "./node_modules/@polymer/neon-animation/neon-animatable-behavior.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + +/** + * `NeonAnimationRunnerBehavior` adds a method to run animations. + * + * @polymerBehavior NeonAnimationRunnerBehavior + */ +const NeonAnimationRunnerBehaviorImpl = { + + _configureAnimations: function(configs) { + var results = []; + var resultsToPlay = []; + + if (configs.length > 0) { + for (let config, index = 0; config = configs[index]; index++) { + let neonAnimation = document.createElement(config.name); + // is this element actually a neon animation? + if (neonAnimation.isNeonAnimation) { + let result = null; + // Closure compiler does not work well with a try / catch here. + // .configure needs to be explicitly defined + if (!neonAnimation.configure) { + /** + * @param {Object} config + * @return {AnimationEffectReadOnly} + */ + neonAnimation.configure = function(config) { + return null; + } + } + + result = neonAnimation.configure(config); + resultsToPlay.push({ + result: result, + config: config, + neonAnimation: neonAnimation, + }); + } else { + console.warn(this.is + ':', config.name, 'not found!'); + } + } + } + + for (var i = 0; i < resultsToPlay.length; i++) { + let result = resultsToPlay[i].result; + let config = resultsToPlay[i].config; + let neonAnimation = resultsToPlay[i].neonAnimation; + // configuration or play could fail if polyfills aren't loaded + try { + // Check if we have an Effect rather than an Animation + if (typeof result.cancel != 'function') { + result = document.timeline.play(result); + } + } catch (e) { + result = null; + console.warn('Couldnt play', '(', config.name, ').', e); + } + + if (result) { + results.push({ + neonAnimation: neonAnimation, + config: config, + animation: result, + }); + } + } + + return results; + }, + + _shouldComplete: function(activeEntries) { + var finished = true; + for (var i = 0; i < activeEntries.length; i++) { + if (activeEntries[i].animation.playState != 'finished') { + finished = false; + break; + } + } + return finished; + }, + + _complete: function(activeEntries) { + for (var i = 0; i < activeEntries.length; i++) { + activeEntries[i].neonAnimation.complete(activeEntries[i].config); + } + for (var i = 0; i < activeEntries.length; i++) { + activeEntries[i].animation.cancel(); + } + }, + + /** + * Plays an animation with an optional `type`. + * @param {string=} type + * @param {!Object=} cookie + */ + playAnimation: function(type, cookie) { + var configs = this.getAnimationConfig(type); + if (!configs) { + return; + } + this._active = this._active || {}; + if (this._active[type]) { + this._complete(this._active[type]); + delete this._active[type]; + } + + var activeEntries = this._configureAnimations(configs); + + if (activeEntries.length == 0) { + this.fire('neon-animation-finish', cookie, {bubbles: false}); + return; + } + + this._active[type] = activeEntries; + + for (var i = 0; i < activeEntries.length; i++) { + activeEntries[i].animation.onfinish = function() { + if (this._shouldComplete(activeEntries)) { + this._complete(activeEntries); + delete this._active[type]; + this.fire('neon-animation-finish', cookie, {bubbles: false}); + } + }.bind(this); + } + }, + + /** + * Cancels the currently running animations. + */ + cancelAnimation: function() { + for (var k in this._active) { + var entries = this._active[k] + + for (var j in entries) { + entries[j].animation.cancel(); + } + } + + this._active = {}; + } +}; + +/** @polymerBehavior */ +const NeonAnimationRunnerBehavior = + [_neon_animatable_behavior_js__WEBPACK_IMPORTED_MODULE_1__.NeonAnimatableBehavior, NeonAnimationRunnerBehaviorImpl]; + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-behaviors/paper-button-behavior.js": +/*!************************************************************************!*\ + !*** ./node_modules/@polymer/paper-behaviors/paper-button-behavior.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PaperButtonBehavior: () => (/* binding */ PaperButtonBehavior), +/* harmony export */ PaperButtonBehaviorImpl: () => (/* binding */ PaperButtonBehaviorImpl) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_behaviors_iron_button_state_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-behaviors/iron-button-state.js */ "./node_modules/@polymer/iron-behaviors/iron-button-state.js"); +/* harmony import */ var _polymer_iron_behaviors_iron_control_state_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-behaviors/iron-control-state.js */ "./node_modules/@polymer/iron-behaviors/iron-control-state.js"); +/* harmony import */ var _paper_ripple_behavior_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./paper-ripple-behavior.js */ "./node_modules/@polymer/paper-behaviors/paper-ripple-behavior.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + +/** @polymerBehavior PaperButtonBehavior */ +const PaperButtonBehaviorImpl = { + properties: { + /** + * The z-depth of this element, from 0-5. Setting to 0 will remove the + * shadow, and each increasing number greater than 0 will be "deeper" + * than the last. + * + * @attribute elevation + * @type number + * @default 1 + */ + elevation: {type: Number, reflectToAttribute: true, readOnly: true} + }, + + observers: [ + '_calculateElevation(focused, disabled, active, pressed, receivedFocusFromKeyboard)', + '_computeKeyboardClass(receivedFocusFromKeyboard)' + ], + + hostAttributes: {role: 'button', tabindex: '0', animated: true}, + + _calculateElevation: function() { + var e = 1; + if (this.disabled) { + e = 0; + } else if (this.active || this.pressed) { + e = 4; + } else if (this.receivedFocusFromKeyboard) { + e = 3; + } + this._setElevation(e); + }, + + _computeKeyboardClass: function(receivedFocusFromKeyboard) { + this.toggleClass('keyboard-focus', receivedFocusFromKeyboard); + }, + + /** + * In addition to `IronButtonState` behavior, when space key goes down, + * create a ripple down effect. + * + * @param {!KeyboardEvent} event . + */ + _spaceKeyDownHandler: function(event) { + _polymer_iron_behaviors_iron_button_state_js__WEBPACK_IMPORTED_MODULE_1__.IronButtonStateImpl._spaceKeyDownHandler.call(this, event); + // Ensure that there is at most one ripple when the space key is held down. + if (this.hasRipple() && this.getRipple().ripples.length < 1) { + this._ripple.uiDownAction(); + } + }, + + /** + * In addition to `IronButtonState` behavior, when space key goes up, + * create a ripple up effect. + * + * @param {!KeyboardEvent} event . + */ + _spaceKeyUpHandler: function(event) { + _polymer_iron_behaviors_iron_button_state_js__WEBPACK_IMPORTED_MODULE_1__.IronButtonStateImpl._spaceKeyUpHandler.call(this, event); + if (this.hasRipple()) { + this._ripple.uiUpAction(); + } + } +}; + +/** @polymerBehavior */ +const PaperButtonBehavior = [ + _polymer_iron_behaviors_iron_button_state_js__WEBPACK_IMPORTED_MODULE_1__.IronButtonState, + _polymer_iron_behaviors_iron_control_state_js__WEBPACK_IMPORTED_MODULE_2__.IronControlState, + _paper_ripple_behavior_js__WEBPACK_IMPORTED_MODULE_3__.PaperRippleBehavior, + PaperButtonBehaviorImpl +]; + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-behaviors/paper-inky-focus-behavior.js": +/*!****************************************************************************!*\ + !*** ./node_modules/@polymer/paper-behaviors/paper-inky-focus-behavior.js ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PaperInkyFocusBehavior: () => (/* binding */ PaperInkyFocusBehavior), +/* harmony export */ PaperInkyFocusBehaviorImpl: () => (/* binding */ PaperInkyFocusBehaviorImpl) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_behaviors_iron_button_state_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-behaviors/iron-button-state.js */ "./node_modules/@polymer/iron-behaviors/iron-button-state.js"); +/* harmony import */ var _polymer_iron_behaviors_iron_control_state_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-behaviors/iron-control-state.js */ "./node_modules/@polymer/iron-behaviors/iron-control-state.js"); +/* harmony import */ var _paper_ripple_behavior_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./paper-ripple-behavior.js */ "./node_modules/@polymer/paper-behaviors/paper-ripple-behavior.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + +/** + * `PaperInkyFocusBehavior` implements a ripple when the element has keyboard + * focus. + * + * @polymerBehavior PaperInkyFocusBehavior + */ +const PaperInkyFocusBehaviorImpl = { + observers: ['_focusedChanged(receivedFocusFromKeyboard)'], + + _focusedChanged: function(receivedFocusFromKeyboard) { + if (receivedFocusFromKeyboard) { + this.ensureRipple(); + } + if (this.hasRipple()) { + this._ripple.holdDown = receivedFocusFromKeyboard; + } + }, + + _createRipple: function() { + var ripple = _paper_ripple_behavior_js__WEBPACK_IMPORTED_MODULE_3__.PaperRippleBehavior._createRipple(); + ripple.id = 'ink'; + ripple.setAttribute('center', ''); + ripple.classList.add('circle'); + return ripple; + } +}; + +/** @polymerBehavior */ +const PaperInkyFocusBehavior = [ + _polymer_iron_behaviors_iron_button_state_js__WEBPACK_IMPORTED_MODULE_1__.IronButtonState, + _polymer_iron_behaviors_iron_control_state_js__WEBPACK_IMPORTED_MODULE_2__.IronControlState, + _paper_ripple_behavior_js__WEBPACK_IMPORTED_MODULE_3__.PaperRippleBehavior, + PaperInkyFocusBehaviorImpl +]; + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-behaviors/paper-ripple-behavior.js": +/*!************************************************************************!*\ + !*** ./node_modules/@polymer/paper-behaviors/paper-ripple-behavior.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PaperRippleBehavior: () => (/* binding */ PaperRippleBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_paper_ripple_paper_ripple_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/paper-ripple/paper-ripple.js */ "./node_modules/@polymer/paper-ripple/paper-ripple.js"); +/* harmony import */ var _polymer_iron_behaviors_iron_button_state_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-behaviors/iron-button-state.js */ "./node_modules/@polymer/iron-behaviors/iron-button-state.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + +/** + * `PaperRippleBehavior` dynamically implements a ripple when the element has + * focus via pointer or keyboard. + * + * NOTE: This behavior is intended to be used in conjunction with and after + * `IronButtonState` and `IronControlState`. + * + * @polymerBehavior PaperRippleBehavior + */ +const PaperRippleBehavior = { + properties: { + /** + * If true, the element will not produce a ripple effect when interacted + * with via the pointer. + */ + noink: {type: Boolean, observer: '_noinkChanged'}, + + /** + * @type {Element|undefined} + */ + _rippleContainer: { + type: Object, + } + }, + + /** + * Ensures a `` element is available when the element is + * focused. + */ + _buttonStateChanged: function() { + if (this.focused) { + this.ensureRipple(); + } + }, + + /** + * In addition to the functionality provided in `IronButtonState`, ensures + * a ripple effect is created when the element is in a `pressed` state. + */ + _downHandler: function(event) { + _polymer_iron_behaviors_iron_button_state_js__WEBPACK_IMPORTED_MODULE_2__.IronButtonStateImpl._downHandler.call(this, event); + if (this.pressed) { + this.ensureRipple(event); + } + }, + + /** + * Ensures this element contains a ripple effect. For startup efficiency + * the ripple effect is dynamically on demand when needed. + * @param {!Event=} optTriggeringEvent (optional) event that triggered the + * ripple. + */ + ensureRipple: function(optTriggeringEvent) { + if (!this.hasRipple()) { + this._ripple = this._createRipple(); + this._ripple.noink = this.noink; + var rippleContainer = this._rippleContainer || this.root; + if (rippleContainer) { + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(rippleContainer).appendChild(this._ripple); + } + if (optTriggeringEvent) { + // Check if the event happened inside of the ripple container + // Fall back to host instead of the root because distributed text + // nodes are not valid event targets + var domContainer = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this._rippleContainer || this); + var target = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(optTriggeringEvent).rootTarget; + if (domContainer.deepContains(/** @type {Node} */ (target))) { + this._ripple.uiDownAction(optTriggeringEvent); + } + } + } + }, + + /** + * Returns the `` element used by this element to create + * ripple effects. The element's ripple is created on demand, when + * necessary, and calling this method will force the + * ripple to be created. + */ + getRipple: function() { + this.ensureRipple(); + return this._ripple; + }, + + /** + * Returns true if this element currently contains a ripple effect. + * @return {boolean} + */ + hasRipple: function() { + return Boolean(this._ripple); + }, + + /** + * Create the element's ripple effect via creating a ``. + * Override this method to customize the ripple element. + * @return {!PaperRippleElement} Returns a `` element. + */ + _createRipple: function() { + var element = /** @type {!PaperRippleElement} */ ( + document.createElement('paper-ripple')); + return element; + }, + + _noinkChanged: function(noink) { + if (this.hasRipple()) { + this._ripple.noink = noink; + } + } +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-button/paper-button.js": +/*!************************************************************!*\ + !*** ./node_modules/@polymer/paper-button/paper-button.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_iron_flex_layout_iron_flex_layout_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/iron-flex-layout/iron-flex-layout.js */ "./node_modules/@polymer/iron-flex-layout/iron-flex-layout.js"); +/* harmony import */ var _polymer_paper_styles_element_styles_paper_material_styles_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/paper-styles/element-styles/paper-material-styles.js */ "./node_modules/@polymer/paper-styles/element-styles/paper-material-styles.js"); +/* harmony import */ var _polymer_paper_behaviors_paper_button_behavior_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/paper-behaviors/paper-button-behavior.js */ "./node_modules/@polymer/paper-behaviors/paper-button-behavior.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + +const template = (0,_polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_4__.html)` + + + `; + +template.setAttribute('strip-whitespace', ''); + +/** +Material design: +[Buttons](https://www.google.com/design/spec/components/buttons.html) + +`paper-button` is a button. When the user touches the button, a ripple effect +emanates from the point of contact. It may be flat or raised. A raised button is +styled with a shadow. + +Example: + + Flat button + Raised button + No ripple effect + Toggle-able button + +A button that has `toggles` true will remain `active` after being clicked (and +will have an `active` attribute set). For more information, see the +`IronButtonState` behavior. + +You may use custom DOM in the button body to create a variety of buttons. For +example, to create a button with an icon and some text: + + + + custom button content + + +To use `paper-button` as a link, wrap it in an anchor tag. Since `paper-button` +will already receive focus, you may want to prevent the anchor tag from +receiving focus as well by setting its tabindex to -1. + +
+ Polymer Project + + +### Styling + +Style the button with CSS as you would a normal DOM element. + + paper-button.fancy { + background: green; + color: yellow; + } + + paper-button.fancy:hover { + background: lime; + } + + paper-button[disabled], + paper-button[toggles][active] { + background: red; + } + +By default, the ripple is the same color as the foreground at 25% opacity. You +may customize the color using the `--paper-button-ink-color` custom property. + +The following custom properties and mixins are also available for styling: + +Custom property | Description | Default +----------------|-------------|---------- +`--paper-button-ink-color` | Background color of the ripple | `Based on the button's color` +`--paper-button` | Mixin applied to the button | `{}` +`--paper-button-disabled` | Mixin applied to the disabled button. Note that you can also use the `paper-button[disabled]` selector | `{}` +`--paper-button-flat-keyboard-focus` | Mixin applied to a flat button after it's been focused using the keyboard | `{}` +`--paper-button-raised-keyboard-focus` | Mixin applied to a raised button after it's been focused using the keyboard | `{}` + +@demo demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_3__.Polymer)({ + _template: template, + + is: 'paper-button', + + behaviors: [_polymer_paper_behaviors_paper_button_behavior_js__WEBPACK_IMPORTED_MODULE_2__.PaperButtonBehavior], + + properties: { + /** + * If true, the button should be styled with a shadow. + */ + raised: { + type: Boolean, + reflectToAttribute: true, + value: false, + observer: '_calculateElevation', + } + }, + + _calculateElevation: function() { + if (!this.raised) { + this._setElevation(0); + } else { + _polymer_paper_behaviors_paper_button_behavior_js__WEBPACK_IMPORTED_MODULE_2__.PaperButtonBehaviorImpl._calculateElevation.apply(this); + } + } + + /** + Fired when the animation finishes. + This is useful if you want to wait until + the ripple animation finishes to perform some action. + + @event transitionend + Event param: {{node: Object}} detail Contains the animated node. + */ +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-card/paper-card.js": +/*!********************************************************!*\ + !*** ./node_modules/@polymer/paper-card/paper-card.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_flex_layout_iron_flex_layout_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-flex-layout/iron-flex-layout.js */ "./node_modules/@polymer/iron-flex-layout/iron-flex-layout.js"); +/* harmony import */ var _polymer_iron_image_iron_image_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-image/iron-image.js */ "./node_modules/@polymer/iron-image/iron-image.js"); +/* harmony import */ var _polymer_paper_styles_element_styles_paper_material_styles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/paper-styles/element-styles/paper-material-styles.js */ "./node_modules/@polymer/paper-styles/element-styles/paper-material-styles.js"); +/* harmony import */ var _polymer_paper_styles_default_theme_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/paper-styles/default-theme.js */ "./node_modules/@polymer/paper-styles/default-theme.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + + +/** +Material design: +[Cards](https://www.google.com/design/spec/components/cards.html) + +`paper-card` is a container with a drop shadow. + +Example: + + +
Some content
+
+ Some action +
+
+ +Example - top card image: + + + ... + + +### Accessibility + +By default, the `aria-label` will be set to the value of the `heading` +attribute. + +### Styling + +The following custom properties and mixins are available for styling: + +Custom property | Description | Default +----------------|-------------|---------- +`--paper-card-background-color` | The background color of the card | `--primary-background-color` +`--paper-card-header-color` | The color of the header text | `#000` +`--paper-card-header` | Mixin applied to the card header section | `{}` +`--paper-card-header-text` | Mixin applied to the title in the card header section | `{}` +`--paper-card-header-image` | Mixin applied to the image in the card header section | `{}` +`--paper-card-header-image-text` | Mixin applied to the text overlapping the image in the card header section | `{}` +`--paper-card-content` | Mixin applied to the card content section| `{}` +`--paper-card-actions` | Mixin applied to the card action section | `{}` +`--paper-card` | Mixin applied to the card | `{}` + +@group Paper Elements +@element paper-card +@demo demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_5__.Polymer)({ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_6__.html)` + + +
+ +
[[heading]]
+
+ + +`, + + is: 'paper-card', + + properties: { + /** + * The title of the card. + */ + heading: {type: String, value: '', observer: '_headingChanged'}, + + /** + * The url of the title image of the card. + */ + image: {type: String, value: ''}, + + /** + * The text alternative of the card's title image. + */ + alt: {type: String}, + + /** + * When `true`, any change to the image url property will cause the + * `placeholder` image to be shown until the image is fully rendered. + */ + preloadImage: {type: Boolean, value: false}, + + /** + * When `preloadImage` is true, setting `fadeImage` to true will cause the + * image to fade into place. + */ + fadeImage: {type: Boolean, value: false}, + + /** + * This image will be used as a background/placeholder until the src image + * has loaded. Use of a data-URI for placeholder is encouraged for instant + * rendering. + */ + placeholderImage: {type: String, value: null}, + + /** + * The z-depth of the card, from 0-5. + */ + elevation: {type: Number, value: 1, reflectToAttribute: true}, + + /** + * Set this to true to animate the card shadow when setting a new + * `z` value. + */ + animatedShadow: {type: Boolean, value: false}, + + /** + * Read-only property used to pass down the `animatedShadow` value to + * the underlying paper-material style (since they have different names). + */ + animated: { + type: Boolean, + reflectToAttribute: true, + readOnly: true, + computed: '_computeAnimated(animatedShadow)' + } + }, + + /** + * Format function for aria-hidden. Use the ! operator results in the + * empty string when given a falsy value. + */ + _isHidden: function(image) { + return image ? 'false' : 'true'; + }, + + _headingChanged: function(heading) { + var currentHeading = this.getAttribute('heading'), + currentLabel = this.getAttribute('aria-label'); + + if (typeof currentLabel !== 'string' || currentLabel === currentHeading) { + this.setAttribute('aria-label', heading); + } + }, + + _computeHeadingClass: function(image) { + return image ? ' over-image' : ''; + }, + + _computeAnimated: function(animatedShadow) { + return animatedShadow; + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-dialog-behavior/paper-dialog-behavior.js": +/*!******************************************************************************!*\ + !*** ./node_modules/@polymer/paper-dialog-behavior/paper-dialog-behavior.js ***! + \******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PaperDialogBehavior: () => (/* binding */ PaperDialogBehavior), +/* harmony export */ PaperDialogBehaviorImpl: () => (/* binding */ PaperDialogBehaviorImpl) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_overlay_behavior_iron_overlay_behavior_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-overlay-behavior/iron-overlay-behavior.js */ "./node_modules/@polymer/iron-overlay-behavior/iron-overlay-behavior.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + +/** + Use `Polymer.PaperDialogBehavior` and `paper-dialog-shared-styles.html` to + implement a Material Design dialog. + + For example, if `` implements this behavior: + + +

Header

+
Dialog body
+
+ Cancel + Accept +
+
+ + `paper-dialog-shared-styles.html` provide styles for a header, content area, + and an action area for buttons. Use the `

` tag for the header and the + `buttons` class for the action area. You can use the `paper-dialog-scrollable` + element (in its own repository) if you need a scrolling content area. + + Use the `dialog-dismiss` and `dialog-confirm` attributes on interactive + controls to close the dialog. If the user dismisses the dialog with + `dialog-confirm`, the `closingReason` will update to include `confirmed: + true`. + + ### Accessibility + + This element has `role="dialog"` by default. Depending on the context, it may + be more appropriate to override this attribute with `role="alertdialog"`. + + If `modal` is set, the element will prevent the focus from exiting the + element. It will also ensure that focus remains in the dialog. + + @hero hero.svg + @demo demo/index.html + @polymerBehavior PaperDialogBehavior + */ +const PaperDialogBehaviorImpl = { + + hostAttributes: {'role': 'dialog', 'tabindex': '-1'}, + + properties: { + + /** + * If `modal` is true, this implies `no-cancel-on-outside-click`, + * `no-cancel-on-esc-key` and `with-backdrop`. + */ + modal: {type: Boolean, value: false}, + + __readied: {type: Boolean, value: false} + + }, + + observers: ['_modalChanged(modal, __readied)'], + + listeners: {'tap': '_onDialogClick'}, + + /** + * @return {void} + */ + ready: function() { + // Only now these properties can be read. + this.__prevNoCancelOnOutsideClick = this.noCancelOnOutsideClick; + this.__prevNoCancelOnEscKey = this.noCancelOnEscKey; + this.__prevWithBackdrop = this.withBackdrop; + this.__readied = true; + }, + + _modalChanged: function(modal, readied) { + // modal implies noCancelOnOutsideClick, noCancelOnEscKey and withBackdrop. + // We need to wait for the element to be ready before we can read the + // properties values. + if (!readied) { + return; + } + + if (modal) { + this.__prevNoCancelOnOutsideClick = this.noCancelOnOutsideClick; + this.__prevNoCancelOnEscKey = this.noCancelOnEscKey; + this.__prevWithBackdrop = this.withBackdrop; + this.noCancelOnOutsideClick = true; + this.noCancelOnEscKey = true; + this.withBackdrop = true; + } else { + // If the value was changed to false, let it false. + this.noCancelOnOutsideClick = + this.noCancelOnOutsideClick && this.__prevNoCancelOnOutsideClick; + this.noCancelOnEscKey = + this.noCancelOnEscKey && this.__prevNoCancelOnEscKey; + this.withBackdrop = this.withBackdrop && this.__prevWithBackdrop; + } + }, + + _updateClosingReasonConfirmed: function(confirmed) { + this.closingReason = this.closingReason || {}; + this.closingReason.confirmed = confirmed; + }, + + /** + * Will dismiss the dialog if user clicked on an element with dialog-dismiss + * or dialog-confirm attribute. + */ + _onDialogClick: function(event) { + // Search for the element with dialog-confirm or dialog-dismiss, + // from the root target until this (excluded). + var path = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_2__.dom)(event).path; + for (var i = 0, l = path.indexOf(this); i < l; i++) { + var target = path[i]; + if (target.hasAttribute && + (target.hasAttribute('dialog-dismiss') || + target.hasAttribute('dialog-confirm'))) { + this._updateClosingReasonConfirmed( + target.hasAttribute('dialog-confirm')); + this.close(); + event.stopPropagation(); + break; + } + } + } + +}; + +/** @polymerBehavior */ +const PaperDialogBehavior = + [_polymer_iron_overlay_behavior_iron_overlay_behavior_js__WEBPACK_IMPORTED_MODULE_1__.IronOverlayBehavior, PaperDialogBehaviorImpl]; + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-dialog-behavior/paper-dialog-shared-styles.js": +/*!***********************************************************************************!*\ + !*** ./node_modules/@polymer/paper-dialog-behavior/paper-dialog-shared-styles.js ***! + \***********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_flex_layout_iron_flex_layout_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-flex-layout/iron-flex-layout.js */ "./node_modules/@polymer/iron-flex-layout/iron-flex-layout.js"); +/* harmony import */ var _polymer_paper_styles_default_theme_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/paper-styles/default-theme.js */ "./node_modules/@polymer/paper-styles/default-theme.js"); +/* harmony import */ var _polymer_paper_styles_typography_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/paper-styles/typography.js */ "./node_modules/@polymer/paper-styles/typography.js"); +/* harmony import */ var _polymer_paper_styles_shadow_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/paper-styles/shadow.js */ "./node_modules/@polymer/paper-styles/shadow.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ +/* +### Styling + +The following custom properties and mixins are available for styling. + +Custom property | Description | Default +----------------|-------------|---------- +`--paper-dialog-background-color` | Dialog background color | `--primary-background-color` +`--paper-dialog-color` | Dialog foreground color | `--primary-text-color` +`--paper-dialog` | Mixin applied to the dialog | `{}` +`--paper-dialog-title` | Mixin applied to the title (`

`) element | `{}` +`--paper-dialog-button-color` | Button area foreground color | `--default-primary-color` +*/ + + + + + +const $_documentContainer = document.createElement('template'); +$_documentContainer.setAttribute('style', 'display: none;'); + +$_documentContainer.innerHTML = ` + +`; + +document.head.appendChild($_documentContainer.content); + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-dialog/paper-dialog.js": +/*!************************************************************!*\ + !*** ./node_modules/@polymer/paper-dialog/paper-dialog.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_paper_dialog_behavior_paper_dialog_shared_styles_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/paper-dialog-behavior/paper-dialog-shared-styles.js */ "./node_modules/@polymer/paper-dialog-behavior/paper-dialog-shared-styles.js"); +/* harmony import */ var _polymer_neon_animation_neon_animation_runner_behavior_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/neon-animation/neon-animation-runner-behavior.js */ "./node_modules/@polymer/neon-animation/neon-animation-runner-behavior.js"); +/* harmony import */ var _polymer_paper_dialog_behavior_paper_dialog_behavior_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/paper-dialog-behavior/paper-dialog-behavior.js */ "./node_modules/@polymer/paper-dialog-behavior/paper-dialog-behavior.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + +/** +Material design: +[Dialogs](https://www.google.com/design/spec/components/dialogs.html) + +`` is a dialog with Material Design styling and optional +animations when it is opened or closed. It provides styles for a header, content +area, and an action area for buttons. You can use the +`` element (in its own repository) if you need a +scrolling content area. To autofocus a specific child element after opening the +dialog, give it the `autofocus` attribute. See `Polymer.PaperDialogBehavior` and +`Polymer.IronOverlayBehavior` for specifics. + +For example, the following code implements a dialog with a header, scrolling +content area and buttons. Focus will be given to the `dialog-confirm` button +when the dialog is opened. + + +

Header

+ + Lorem ipsum... + +
+ Cancel + Accept +
+
+ +### Styling + +See the docs for `Polymer.PaperDialogBehavior` for the custom properties +available for styling this element. + +### Animations + +Set the `entry-animation` and/or `exit-animation` attributes to add an animation +when the dialog is opened or closed. See the documentation in +[PolymerElements/neon-animation](https://github.com/PolymerElements/neon-animation) +for more info. + +For example: + + + + +

Header

+
Dialog body
+
+ +### Accessibility + +See the docs for `Polymer.PaperDialogBehavior` for accessibility features +implemented by this element. + +@group Paper Elements +@element paper-dialog +@hero hero.svg +@demo demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_4__.Polymer)({ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_5__.html)` + + +`, + + is: 'paper-dialog', + behaviors: [_polymer_paper_dialog_behavior_paper_dialog_behavior_js__WEBPACK_IMPORTED_MODULE_3__.PaperDialogBehavior, _polymer_neon_animation_neon_animation_runner_behavior_js__WEBPACK_IMPORTED_MODULE_2__.NeonAnimationRunnerBehavior], + listeners: {'neon-animation-finish': '_onNeonAnimationFinish'}, + + _renderOpened: function() { + this.cancelAnimation(); + this.playAnimation('entry'); + }, + + _renderClosed: function() { + this.cancelAnimation(); + this.playAnimation('exit'); + }, + + _onNeonAnimationFinish: function() { + if (this.opened) { + this._finishRenderOpened(); + } else { + this._finishRenderClosed(); + } + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-dropdown-menu/paper-dropdown-menu-icons.js": +/*!********************************************************************************!*\ + !*** ./node_modules/@polymer/paper-dropdown-menu/paper-dropdown-menu-icons.js ***! + \********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_iron_iconset_svg_iron_iconset_svg_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/iron-iconset-svg/iron-iconset-svg.js */ "./node_modules/@polymer/iron-iconset-svg/iron-iconset-svg.js"); +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + +const $_documentContainer = document.createElement('template'); +$_documentContainer.setAttribute('style', 'display: none;'); + +$_documentContainer.innerHTML = + ` + + + +`; + +document.head.appendChild($_documentContainer.content); + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-dropdown-menu/paper-dropdown-menu-shared-styles.js": +/*!****************************************************************************************!*\ + !*** ./node_modules/@polymer/paper-dropdown-menu/paper-dropdown-menu-shared-styles.js ***! + \****************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_paper_styles_default_theme_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/paper-styles/default-theme.js */ "./node_modules/@polymer/paper-styles/default-theme.js"); +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + +const $_documentContainer = document.createElement('template'); +$_documentContainer.setAttribute('style', 'display: none;'); + +$_documentContainer.innerHTML = + ` + +`; + +document.head.appendChild($_documentContainer.content); + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-dropdown-menu/paper-dropdown-menu.js": +/*!**************************************************************************!*\ + !*** ./node_modules/@polymer/paper-dropdown-menu/paper-dropdown-menu.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_a11y_keys_behavior_iron_a11y_keys_behavior_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js */ "./node_modules/@polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js"); +/* harmony import */ var _polymer_iron_icon_iron_icon_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-icon/iron-icon.js */ "./node_modules/@polymer/iron-icon/iron-icon.js"); +/* harmony import */ var _polymer_paper_input_paper_input_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/paper-input/paper-input.js */ "./node_modules/@polymer/paper-input/paper-input.js"); +/* harmony import */ var _polymer_paper_menu_button_paper_menu_button_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/paper-menu-button/paper-menu-button.js */ "./node_modules/@polymer/paper-menu-button/paper-menu-button.js"); +/* harmony import */ var _polymer_paper_ripple_paper_ripple_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @polymer/paper-ripple/paper-ripple.js */ "./node_modules/@polymer/paper-ripple/paper-ripple.js"); +/* harmony import */ var _polymer_paper_styles_default_theme_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @polymer/paper-styles/default-theme.js */ "./node_modules/@polymer/paper-styles/default-theme.js"); +/* harmony import */ var _paper_dropdown_menu_icons_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./paper-dropdown-menu-icons.js */ "./node_modules/@polymer/paper-dropdown-menu/paper-dropdown-menu-icons.js"); +/* harmony import */ var _paper_dropdown_menu_shared_styles_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./paper-dropdown-menu-shared-styles.js */ "./node_modules/@polymer/paper-dropdown-menu/paper-dropdown-menu-shared-styles.js"); +/* harmony import */ var _polymer_iron_behaviors_iron_button_state_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @polymer/iron-behaviors/iron-button-state.js */ "./node_modules/@polymer/iron-behaviors/iron-button-state.js"); +/* harmony import */ var _polymer_iron_behaviors_iron_control_state_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @polymer/iron-behaviors/iron-control-state.js */ "./node_modules/@polymer/iron-behaviors/iron-control-state.js"); +/* harmony import */ var _polymer_iron_form_element_behavior_iron_form_element_behavior_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @polymer/iron-form-element-behavior/iron-form-element-behavior.js */ "./node_modules/@polymer/iron-form-element-behavior/iron-form-element-behavior.js"); +/* harmony import */ var _polymer_iron_validatable_behavior_iron_validatable_behavior_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @polymer/iron-validatable-behavior/iron-validatable-behavior.js */ "./node_modules/@polymer/iron-validatable-behavior/iron-validatable-behavior.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_legacy_element_mixin_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/legacy-element-mixin.js */ "./node_modules/@polymer/polymer/lib/legacy/legacy-element-mixin.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_gestures_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @polymer/polymer/lib/utils/gestures.js */ "./node_modules/@polymer/polymer/lib/utils/gestures.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/* harmony import */ var _polymer_polymer_lib_utils_wrap_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @polymer/polymer/lib/utils/wrap.js */ "./node_modules/@polymer/polymer/lib/utils/wrap.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + + + + + + + + + + + + + + +// LegacyElementMixin dedupes and this is the base class for elements created +// with the `Polymer` function, so this is only a cache lookup. +// https://github.com/Polymer/polymer/blob/640bc80ac7177b761d46b2fa9c455c318f2b85c6/lib/legacy/class.js#L533-L534 +const LegacyPolymerElementBase = (0,_polymer_polymer_lib_legacy_legacy_element_mixin_js__WEBPACK_IMPORTED_MODULE_13__.LegacyElementMixin)(HTMLElement); + +/** +Material design: [Dropdown +menus](https://www.google.com/design/spec/components/buttons.html#buttons-dropdown-buttons) + +`paper-dropdown-menu` is similar to a native browser select element. +`paper-dropdown-menu` works with selectable content. The currently selected +item is displayed in the control. If no item is selected, the `label` is +displayed instead. + +Example: + + + + Croissant + Donut + Financier + Madeleine + + + +This example renders a dropdown menu with 4 options. + +The child element with the slot `dropdown-content` is used as the dropdown +menu. This can be a [`paper-listbox`](paper-listbox), or any other or +element that acts like an [`iron-selector`](iron-selector). + +Specifically, the menu child must fire an +[`iron-select`](iron-selector#event-iron-select) event when one of its +children is selected, and an +[`iron-deselect`](iron-selector#event-iron-deselect) event when a child is +deselected. The selected or deselected item must be passed as the event's +`detail.item` property. + +Applications can listen for the `iron-select` and `iron-deselect` events +to react when options are selected and deselected. + +### Styling + +The following custom properties and mixins are also available for styling: + +Custom property | Description | Default +----------------|-------------|---------- +`--paper-dropdown-menu` | A mixin that is applied to the element host | `{}` +`--paper-dropdown-menu-disabled` | A mixin that is applied to the element host when disabled | `{}` +`--paper-dropdown-menu-ripple` | A mixin that is applied to the internal ripple | `{}` +`--paper-dropdown-menu-button` | A mixin that is applied to the internal menu button | `{}` +`--paper-dropdown-menu-input` | A mixin that is applied to the internal paper input | `{}` +`--paper-dropdown-menu-icon` | A mixin that is applied to the internal icon | `{}` + +You can also use any of the `paper-input-container` and `paper-menu-button` +style mixins and custom properties to style the internal input and menu button +respectively. + +@element paper-dropdown-menu +@demo demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_14__.Polymer)({ + /** @override */ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_17__.html)` + + + + + + + +`, + + is: 'paper-dropdown-menu', + + behaviors: [ + _polymer_iron_behaviors_iron_button_state_js__WEBPACK_IMPORTED_MODULE_9__.IronButtonState, + _polymer_iron_behaviors_iron_control_state_js__WEBPACK_IMPORTED_MODULE_10__.IronControlState, + _polymer_iron_form_element_behavior_iron_form_element_behavior_js__WEBPACK_IMPORTED_MODULE_11__.IronFormElementBehavior, + _polymer_iron_validatable_behavior_iron_validatable_behavior_js__WEBPACK_IMPORTED_MODULE_12__.IronValidatableBehavior + ], + + properties: { + /** + * The derived "label" of the currently selected item. This value + * is the `label` property on the selected item if set, or else the + * trimmed text content of the selected item. + */ + selectedItemLabel: {type: String, notify: true, readOnly: true}, + + /** + * The last selected item. An item is selected if the dropdown menu has + * a child with slot `dropdown-content`, and that child triggers an + * `iron-select` event with the selected `item` in the `detail`. + * + * @type {?Object} + */ + selectedItem: {type: Object, notify: true, readOnly: true}, + + /** + * The value for this element that will be used when submitting in + * a form. It reflects the value of `selectedItemLabel`. If set directly, + * it will not update the `selectedItemLabel` value. + */ + value: { + type: String, + notify: true, + }, + + /** + * The label for the dropdown. + */ + label: {type: String}, + + /** + * The placeholder for the dropdown. + */ + placeholder: {type: String}, + + /** + * The error message to display when invalid. + */ + errorMessage: {type: String}, + + /** + * True if the dropdown is open. Otherwise, false. + */ + opened: + {type: Boolean, notify: true, value: false, observer: '_openedChanged'}, + + /** + * By default, the dropdown will constrain scrolling on the page + * to itself when opened. + * Set to true in order to prevent scroll from being constrained + * to the dropdown when it opens. + */ + allowOutsideScroll: {type: Boolean, value: false}, + + /** + * Set to true to disable the floating label. Bind this to the + * ``'s `noLabelFloat` property. + */ + noLabelFloat: {type: Boolean, value: false, reflectToAttribute: true}, + + /** + * Set to true to always float the label. Bind this to the + * ``'s `alwaysFloatLabel` property. + */ + alwaysFloatLabel: {type: Boolean, value: false}, + + /** + * Set to true to disable animations when opening and closing the + * dropdown. + */ + noAnimations: {type: Boolean, value: false}, + + /** + * The orientation against which to align the menu dropdown + * horizontally relative to the dropdown trigger. + */ + horizontalAlign: {type: String, value: 'right'}, + + /** + * The orientation against which to align the menu dropdown + * vertically relative to the dropdown trigger. + */ + verticalAlign: {type: String, value: 'top'}, + + /** + * Overrides the vertical offset computed in + * _computeMenuVerticalOffset. + */ + verticalOffset: Number, + + /** + * If true, the `horizontalAlign` and `verticalAlign` properties will + * be considered preferences instead of strict requirements when + * positioning the dropdown and may be changed if doing so reduces + * the area of the dropdown falling outside of `fitInto`. + */ + dynamicAlign: {type: Boolean}, + + /** + * Whether focus should be restored to the dropdown when the menu closes. + */ + restoreFocusOnClose: {type: Boolean, value: true}, + + /** + * If true and scrollbars are added to the dropdown after it is positioned, + * the size of the added scrollbars will be added to its `maxWidth` and + * `maxHeight`. + */ + expandSizingTargetForScrollbars: {type: Boolean, value: false}, + }, + + listeners: {'tap': '_onTap'}, + + /** + * @type {!Object} + */ + keyBindings: {'up down': 'open', 'esc': 'close'}, + + observers: ['_selectedItemChanged(selectedItem)'], + + /** + * Override `_attachDom` so that we can pass `delegatesFocus`. The overridden + * implementation of `_attachDom` specifically skips the steps performed here + * if the node already hosts a shadow root: + * https://github.com/Polymer/polymer/blob/640bc80ac7177b761d46b2fa9c455c318f2b85c6/lib/mixins/element-mixin.js#L691-L694 + * @override + */ + _attachDom(dom) { + const wrappedThis = (0,_polymer_polymer_lib_utils_wrap_js__WEBPACK_IMPORTED_MODULE_18__.wrap)(this); + wrappedThis.attachShadow({ + mode: 'open', + delegatesFocus: true, + shadyUpgradeFragment: dom, + }); + wrappedThis.shadowRoot.appendChild(dom); + return LegacyPolymerElementBase.prototype._attachDom.call(this, dom); + }, + + /** @override */ + focus() { + // When using Shady DOM and in browsers that don't support + // `delegatesFocus`, attempting to focus this element with the browser's + // native `HTMLElement#focus` will cause focus to be lost because this + // element isn't focusable in those situations. To work around this, the + // element in the shadow root that this element intends to delegate focus + // to is manually focused instead. + this.$.input._focusableElement.focus(); + }, + + /** @override */ + attached: function() { + // NOTE(cdata): Due to timing, a preselected value in a `IronSelectable` + // child will cause an `iron-select` event to fire while the element is + // still in a `DocumentFragment`. This has the effect of causing + // handlers not to fire. So, we double check this value on attached: + var contentElement = this.contentElement; + if (contentElement && contentElement.selectedItem) { + this._setSelectedItem(contentElement.selectedItem); + } + }, + + /** + * The content element that is contained by the dropdown menu, if any. + */ + get contentElement() { + // Polymer 2.x returns slot.assignedNodes which can contain text nodes. + var nodes = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_15__.dom)(this.$.content).getDistributedNodes(); + for (var i = 0, l = nodes.length; i < l; i++) { + if (nodes[i].nodeType === Node.ELEMENT_NODE) { + return nodes[i]; + } + } + }, + + /** + * Show the dropdown content. + */ + open: function() { + this.$.menuButton.open(); + }, + + /** + * Hide the dropdown content. + */ + close: function() { + this.$.menuButton.close(); + }, + + /** + * A handler that is called when `iron-select` is fired. + * + * @param {CustomEvent} event An `iron-select` event. + */ + _onIronSelect: function(event) { + this._setSelectedItem(event.detail.item); + }, + + /** + * A handler that is called when `iron-deselect` is fired. + * + * @param {CustomEvent} event An `iron-deselect` event. + */ + _onIronDeselect: function(event) { + this._setSelectedItem(null); + }, + + /** + * A handler that is called when the dropdown is tapped. + * + * @param {CustomEvent} event A tap event. + */ + _onTap: function(event) { + if (_polymer_polymer_lib_utils_gestures_js__WEBPACK_IMPORTED_MODULE_16__.findOriginalTarget(event) === this) { + this.open(); + } + }, + + /** + * Compute the label for the dropdown given a selected item. + * + * @param {Element} selectedItem A selected Element item, with an + * optional `label` property. + */ + _selectedItemChanged: function(selectedItem) { + var value = ''; + if (!selectedItem) { + value = ''; + } else { + value = selectedItem.label || selectedItem.getAttribute('label') || + selectedItem.textContent.trim(); + } + + this.value = value; + this._setSelectedItemLabel(value); + }, + + /** + * Compute the vertical offset of the menu based on the value of + * `noLabelFloat`. + * + * @param {boolean} noLabelFloat True if the label should not float + * @param {number=} opt_verticalOffset Optional offset from the user + * above the input, otherwise false. + */ + _computeMenuVerticalOffset: function(noLabelFloat, opt_verticalOffset) { + // Override offset if it's passed from the user. + if (opt_verticalOffset) { + return opt_verticalOffset; + } + + // NOTE(cdata): These numbers are somewhat magical because they are + // derived from the metrics of elements internal to `paper-input`'s + // template. The metrics will change depending on whether or not the + // input has a floating label. + return noLabelFloat ? -4 : 8; + }, + + /** + * Returns false if the element is required and does not have a selection, + * and true otherwise. + * @param {*=} _value Ignored. + * @return {boolean} true if `required` is false, or if `required` is true + * and the element has a valid selection. + */ + _getValidity: function(_value) { + return this.disabled || !this.required || (this.required && !!this.value); + }, + + _openedChanged: function() { + var openState = this.opened ? 'true' : 'false'; + var e = this.contentElement; + if (e) { + e.setAttribute('aria-expanded', openState); + } + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-icon-button/paper-icon-button.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@polymer/paper-icon-button/paper-icon-button.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_icon_iron_icon_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-icon/iron-icon.js */ "./node_modules/@polymer/iron-icon/iron-icon.js"); +/* harmony import */ var _polymer_paper_styles_default_theme_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/paper-styles/default-theme.js */ "./node_modules/@polymer/paper-styles/default-theme.js"); +/* harmony import */ var _polymer_paper_behaviors_paper_inky_focus_behavior_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/paper-behaviors/paper-inky-focus-behavior.js */ "./node_modules/@polymer/paper-behaviors/paper-inky-focus-behavior.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + +/** +Material design: [Icon +toggles](https://www.google.com/design/spec/components/buttons.html#buttons-toggle-buttons) + +`paper-icon-button` is a button with an image placed at the center. When the +user touches the button, a ripple effect emanates from the center of the button. + +`paper-icon-button` does not include a default icon set. To use icons from the +default set, include `PolymerElements/iron-icons/iron-icons.html`, and use the +`icon` attribute to specify which icon from the icon set to use. + + + +See [`iron-iconset`](iron-iconset) for more information about +how to use a custom icon set. + +Example: + + + + + + +To use `paper-icon-button` as a link, wrap it in an anchor tag. Since +`paper-icon-button` will already receive focus, you may want to prevent the +anchor tag from receiving focus as well by setting its tabindex to -1. + + + + + +### Styling + +Style the button with CSS as you would a normal DOM element. If you are using +the icons provided by `iron-icons`, they will inherit the foreground color of +the button. + + /* make a red "favorite" button *\/ + + +By default, the ripple is the same color as the foreground at 25% opacity. You +may customize the color using the `--paper-icon-button-ink-color` custom +property. + +The following custom properties and mixins are available for styling: + +Custom property | Description | Default +----------------|-------------|---------- +`--paper-icon-button-disabled-text` | The color of the disabled button | `--disabled-text-color` +`--paper-icon-button-ink-color` | Selected/focus ripple color | `--primary-text-color` +`--paper-icon-button` | Mixin for a button | `{}` +`--paper-icon-button-disabled` | Mixin for a disabled button | `{}` +`--paper-icon-button-hover` | Mixin for button on hover | `{}` + +@group Paper Elements +@element paper-icon-button +@demo demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_4__.Polymer)({ + is: 'paper-icon-button', + + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_5__.html)` + + + + `, + + hostAttributes: {role: 'button', tabindex: '0'}, + + behaviors: [_polymer_paper_behaviors_paper_inky_focus_behavior_js__WEBPACK_IMPORTED_MODULE_3__.PaperInkyFocusBehavior], + + registered: function() { + this._template.setAttribute('strip-whitespace', ''); + }, + + properties: { + /** + * The URL of an image for the icon. If the src property is specified, + * the icon property should not be. + */ + src: {type: String}, + + /** + * Specifies the icon name or index in the set of icons available in + * the icon's icon set. If the icon property is specified, + * the src property should not be. + */ + icon: {type: String}, + + /** + * Specifies the alternate text for the button, for accessibility. + */ + alt: {type: String, observer: '_altChanged'} + }, + + _altChanged: function(newValue, oldValue) { + var label = this.getAttribute('aria-label'); + + // Don't stomp over a user-set aria-label. + if (!label || oldValue == label) { + this.setAttribute('aria-label', newValue); + } + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-input/paper-input-addon-behavior.js": +/*!*************************************************************************!*\ + !*** ./node_modules/@polymer/paper-input/paper-input-addon-behavior.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PaperInputAddonBehavior: () => (/* binding */ PaperInputAddonBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + +/** + * Use `Polymer.PaperInputAddonBehavior` to implement an add-on for + * ``. A add-on appears below the input, and may display + * information based on the input value and validity such as a character counter + * or an error message. + * @polymerBehavior + */ +const PaperInputAddonBehavior = { + attached: function() { + this.fire('addon-attached'); + }, + + /** + * The function called by `` when the input value or + * validity changes. + * @param {{ + * invalid: boolean, + * inputElement: (Element|undefined), + * value: (string|undefined) + * }} state - + * inputElement: The input element. + * value: The input value. + * invalid: True if the input value is invalid. + */ + update: function(state) {} + +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-input/paper-input-behavior.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@polymer/paper-input/paper-input-behavior.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PaperInputBehavior: () => (/* binding */ PaperInputBehavior), +/* harmony export */ PaperInputBehaviorImpl: () => (/* binding */ PaperInputBehaviorImpl), +/* harmony export */ PaperInputHelper: () => (/* binding */ PaperInputHelper) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_a11y_keys_behavior_iron_a11y_keys_behavior_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js */ "./node_modules/@polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js"); +/* harmony import */ var _polymer_iron_behaviors_iron_control_state_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-behaviors/iron-control-state.js */ "./node_modules/@polymer/iron-behaviors/iron-control-state.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_polymer_element_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/polymer-element.js */ "./node_modules/@polymer/polymer/polymer-element.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + +// Generate unique, monotonically increasing IDs for labels (needed by +// aria-labelledby) and add-ons. +const PaperInputHelper = {}; + +PaperInputHelper.NextLabelID = 1; +PaperInputHelper.NextAddonID = 1; +PaperInputHelper.NextInputID = 1; + +/** + * Use `PaperInputBehavior` to implement inputs with ``. + * This behavior is implemented by ``. It exposes a number of + * properties from `` and `` and + * they should be bound in your template. + * + * The input element can be accessed by the `inputElement` property if you need + * to access properties or methods that are not exposed. + * @polymerBehavior PaperInputBehavior + */ +const PaperInputBehaviorImpl = { + + properties: { + /** + * Fired when the input changes due to user interaction. + * + * @event change + */ + + /** + * The label for this input. If you're using PaperInputBehavior to + * implement your own paper-input-like element, bind this to + * `