From a4f6c4cf7b942f5f346eb00d89ca6e7dbb4a79a4 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 13 Feb 2022 19:21:51 +0100 Subject: [PATCH] Updated automated domain substitution patch --- .../Automated-domain-substitution.patch | 4728 +++++++++-------- 1 file changed, 2457 insertions(+), 2271 deletions(-) diff --git a/build/patches/Automated-domain-substitution.patch b/build/patches/Automated-domain-substitution.patch index 229052c3..36592847 100644 --- a/build/patches/Automated-domain-substitution.patch +++ b/build/patches/Automated-domain-substitution.patch @@ -11,21 +11,30 @@ Subject: Automated domain substitution android_webview/tools/update_cts.py | 4 +- ash/accelerators/accelerator_notifications.cc | 2 +- ash/app_list/PRESUBMIT.py | 2 +- - ash/ash_strings.grd | 10 +- + ash/ash_strings.grd | 16 +- ash/assistant/PRESUBMIT.py | 2 +- ash/assistant/assistant_setup_controller.cc | 2 +- ash/assistant/util/deep_link_util.cc | 16 +- ash/components/drivefs/drivefs_auth.cc | 2 +- + .../simple_geolocation_provider.cc | 2 +- .../translation_result_loader.cc | 2 +- + ash/components/timezone/timezone_request.cc | 2 +- .../quick_answers_ui_controller.cc | 2 +- .../fast_pair/device_metadata_fetcher.cc | 2 +- .../fast_pair/footprints_fetcher.cc | 4 +- ash/resources/PRESUBMIT.py | 4 +- ...pcie_peripheral_notification_controller.cc | 2 +- + ash/webui/camera_app_ui/camera_app_ui.cc | 2 +- + .../resources/js/lib/analytics.js | 14 +- + ash/webui/camera_app_ui/resources/js/util.js | 2 +- + .../resources/strings/camera_strings.grd | 2 +- .../diagnostics_ui/resources/network_card.js | 4 +- .../resources/routine_section.js | 2 +- .../help_app_kids_magazine_untrusted_ui.cc | 2 +- ash/webui/media_app_ui/media_app_guest_ui.cc | 2 +- + ...untrusted_personalization_app_ui_config.cc | 2 +- + .../projector_app/projector_xhr_sender.cc | 6 +- + .../untrusted_projector_ui_config.cc | 8 +- .../scanning/resources/scanning_app.html | 2 +- ash/webui/scanning/resources/scanning_app.js | 2 +- .../reimaging_firmware_update_page.js | 2 +- @@ -90,7 +99,7 @@ Subject: Automated domain substitution .../manifest/maps_go_manifest_config.json | 10 +- chrome/app/PRESUBMIT.py | 8 +- chrome/app/chromium_strings.grd | 14 +- - chrome/app/generated_resources.grd | 254 +- + chrome/app/generated_resources.grd | 252 +- chrome/app/google_chrome_strings.grd | 14 +- chrome/app/resources/locale_settings.grd | 10 +- chrome/app/theme/PRESUBMIT.py | 4 +- @@ -130,7 +139,6 @@ Subject: Automated domain substitution .../ash/plugin_vm/plugin_vm_diagnostics.cc | 4 +- .../plugin_vm/plugin_vm_license_checker.cc | 4 +- .../browser/ash/plugin_vm/plugin_vm_util.cc | 6 +- - .../dlp/dlp_clipboard_bubble_constants.h | 2 +- .../account_status_check_fetcher.cc | 6 +- .../powerwash_requirements_checker.cc | 2 +- .../device_command_start_crd_session_job.cc | 6 +- @@ -139,16 +147,16 @@ Subject: Automated domain substitution .../ash/web_applications/terminal_source.cc | 4 +- .../autofill/autofill_gstatic_reader.cc | 4 +- .../browser_switcher_service.cc | 2 +- - chrome/browser/buildflags.gni | 2 +- chrome/browser/cart/cart_discount_fetcher.cc | 2 +- .../cart/cart_discount_link_fetcher.cc | 2 +- - chrome/browser/cart/cart_service.cc | 26 +- + chrome/browser/cart/cart_service.cc | 24 +- chrome/browser/cart/fetch_discount_worker.cc | 2 +- .../cart_domain_cart_url_mapping.json | 2 +- .../resources/cart_domain_name_mapping.json | 2 +- .../browser/chrome_browser_application_mac.mm | 2 +- .../eche_app_notification_controller.cc | 2 +- .../file_manager/private_api_misc.cc | 2 +- + .../dlp/dlp_clipboard_bubble_constants.h | 2 +- .../protocol_handler_registry.cc | 4 +- .../data_reduction_proxy_chrome_settings.cc | 4 +- chrome/browser/devtools/url_constants.cc | 4 +- @@ -202,6 +210,7 @@ Subject: Automated domain substitution chrome/browser/resources/PRESUBMIT.py | 2 +- .../browser/resources/about_sys/about_sys.js | 2 +- .../resources/chromeos/about_os_credits.html | 6 +- + .../dictation/commands.js | 2 +- .../magnifier/magnifier.js | 2 +- .../chromevox/background/command_handler.js | 6 +- .../chromevox/options/options.css | 2 +- @@ -213,7 +222,7 @@ Subject: Automated domain substitution .../select_to_speak/options.html | 2 +- .../select_to_speak/select_to_speak.js | 8 +- .../select_to_speak_manifest.json.jinja2 | 8 +- - .../switch_access/switch_access.js | 2 +- + .../switch_access/switch_access.js | 4 +- .../switch_access_manifest.json.jinja2 | 4 +- .../add_supervision/add_supervision_ui.js | 16 +- .../chromeos/arc_support/background.js | 12 +- @@ -233,6 +242,8 @@ Subject: Automated domain substitution .../login/screens/login/offline_login.html | 2 +- .../login/screens/login/offline_login.js | 2 +- .../browser_tabs_metadata_form.js | 2 +- + .../flows/local_web_approvals_after.html | 2 +- + .../parent_access/parent_access_ui.js | 8 +- .../chromeos/wallpaper_manager/manifest.json | 2 +- .../browser/resources/cryptotoken/enroller.js | 2 +- .../default_apps/external_extensions.json | 14 +- @@ -271,7 +282,6 @@ Subject: Automated domain substitution .../resources/print_preview/ui/icons.html | 2 +- chrome/browser/resources/proxy_config.html | 10 +- .../settings/about_page/about_page.html | 4 +- - .../resources/settings/chromeos/PRESUBMIT.py | 4 +- .../crostini_disk_resize_dialog.html | 2 +- .../settings/chromeos/device_page/stylus.js | 2 +- .../os_a11y_page/manage_a11y_page.html | 2 +- @@ -309,7 +319,7 @@ Subject: Automated domain substitution .../supervised_user_block_interstitial.html | 2 +- .../supervised_user_service.cc | 2 +- .../supervised_user_url_filter.cc | 12 +- - .../strings/android_chrome_strings.grd | 42 +- + .../strings/android_chrome_strings.grd | 46 +- .../arc/arc_app_reinstall_app_result.cc | 2 +- .../search/arc/recommend_apps_fetcher_impl.cc | 2 +- .../search/files/item_suggest_cache.h | 2 +- @@ -325,6 +335,7 @@ Subject: Automated domain substitution chrome/browser/ui/chrome_pages.cc | 2 +- .../browser/ui/cocoa/share_menu_controller.mm | 2 +- .../ui/commander/open_url_command_source.cc | 2 +- + .../ui/dialogs/outdated_upgrade_bubble.cc | 2 +- .../installation_error_infobar_delegate.cc | 2 +- chrome/browser/ui/managed_ui.cc | 2 +- chrome/browser/ui/signin_view_controller.cc | 2 +- @@ -333,7 +344,6 @@ Subject: Automated domain substitution .../ui/views/hats/hats_next_web_dialog.cc | 2 +- ...picker_bubble_view_browsertest_chromeos.cc | 30 +- .../ui/views/network_profile_bubble_view.cc | 2 +- - .../ui/views/outdated_upgrade_bubble_view.cc | 2 +- .../plugin_vm/plugin_vm_installer_view.cc | 2 +- .../ui/views/session_crashed_bubble_view.cc | 2 +- ...rofile_signin_confirmation_dialog_views.cc | 2 +- @@ -374,7 +384,7 @@ Subject: Automated domain substitution .../chrome_cleaner/logging/dummy_api_keys.cc | 4 +- .../logging/reporter_logging_service.cc | 6 +- .../apps/platform_apps/api/PRESUBMIT.py | 2 +- - .../chromeos_system_extension_info.cc | 4 +- + .../chromeos_system_extension_info.cc | 2 +- .../cloud_print/cloud_print_constants.cc | 2 +- chrome/common/extensions/PRESUBMIT.py | 2 +- chrome/common/extensions/api/PRESUBMIT.py | 2 +- @@ -470,17 +480,10 @@ Subject: Automated domain substitution chromecast/common/extensions_api/windows.json | 2 +- chromecast/crash/linux/minidump_uploader.cc | 2 +- chromecast/net/connectivity_checker_impl.h | 4 +- - .../components/camera_app_ui/camera_app_ui.cc | 2 +- - .../resources/js/lib/analytics.js | 14 +- - .../camera_app_ui/resources/js/util.js | 2 +- - .../resources/strings/camera_strings.grd | 2 +- .../multidevice/stub_multidevice_util.cc | 2 +- - ...untrusted_personalization_app_ui_config.cc | 2 +- chromeos/components/phonehub/url_constants.cc | 2 +- - .../untrusted_projector_ui_config.cc | 2 +- .../trial_group/trial_group_checker.cc | 2 +- chromeos/dbus/rmad/fake_rmad_client.cc | 2 +- - .../simple_geolocation_provider.cc | 2 +- chromeos/printing/ppd_provider.h | 2 +- chromeos/printing/printer_config_cache.cc | 2 +- .../printing/uri_fuzzer_seed_corpus/uri1.txt | 2 +- @@ -502,7 +505,6 @@ Subject: Automated domain substitution chromeos/services/assistant/service.cc | 2 +- .../device_sync/cryptauth_client_impl.cc | 8 +- chromeos/services/ime/constants.cc | 2 +- - chromeos/timezone/timezone_request.cc | 2 +- .../virtual_driver/win/install/setup.cc | 2 +- .../virtual_driver_setup_resources.grd | 2 +- .../win/port_monitor/port_monitor.cc | 2 +- @@ -522,6 +524,7 @@ Subject: Automated domain substitution .../autofill_assistant_onboarding_fetcher.cc | 2 +- .../browser/service/server_url_fetcher.cc | 2 +- .../safe_browsing_triggered_popup_blocker.h | 4 +- + .../core/breadcrumb_manager_tab_helper.cc | 2 +- components/browser_sync/PRESUBMIT.py | 2 +- .../strings/android/browser_ui_strings.grd | 6 +- .../core/counters/history_counter.cc | 2 +- @@ -584,7 +587,7 @@ Subject: Automated domain substitution .../resources/omnibox_pedal_concepts_ja.json | 20 +- .../omnibox_pedal_concepts_zh-CN.json | 20 +- .../omnibox_pedal_concepts_zh-TW.json | 20 +- - .../resources/omnibox_pedal_synonyms.grd | 60 +- + .../resources/omnibox_pedal_synonyms.grd | 86 +- .../page_content_annotations_model_manager.cc | 2 +- .../core/optimization_guide_constants.cc | 4 +- .../ads_page_load_metrics_observer.cc | 2 +- @@ -616,7 +619,7 @@ Subject: Automated domain substitution .../core/browser/browser_policy_connector.cc | 10 +- components/policy/core/browser/url_util.cc | 4 +- .../core/common/policy_loader_common.cc | 2 +- - .../policy/resources/policy_templates.json | 2126 ++++++++--------- + .../policy/resources/policy_templates.json | 2154 ++++++++--------- .../policy/test_support/policy_testserver.py | 14 +- .../request_handler_for_policy.cc | 2 +- .../policy/test_support/signature_provider.h | 4 +- @@ -686,6 +689,7 @@ Subject: Automated domain substitution .../browser/db/v4_protocol_manager_util.cc | 4 +- .../password_protection_service_base.cc | 2 +- .../browser/realtime/url_lookup_service.cc | 2 +- + .../tailored_security_service.cc | 6 +- .../safe_search_url_checker_client.cc | 2 +- .../safe_search_api/stub_url_checker.cc | 2 +- components/safety_check/url_constants.cc | 2 +- @@ -767,7 +771,7 @@ Subject: Automated domain substitution google_apis/drive/drive_api_url_generator.cc | 2 +- google_apis/gaia/gaia_auth_fetcher.cc | 4 +- google_apis/gaia/gaia_auth_util.cc | 6 +- - google_apis/gaia/gaia_constants.cc | 76 +- + google_apis/gaia/gaia_constants.cc | 80 +- google_apis/gaia/gaia_oauth_client.cc | 6 +- google_apis/gaia/gaia_urls.cc | 10 +- google_apis/gcm/base/mcs_util.cc | 2 +- @@ -804,7 +808,6 @@ Subject: Automated domain substitution .../autofill/automation/automation_action.mm | 2 +- ...chrome_browser_state_removal_controller.mm | 2 +- ios/chrome/browser/chrome_url_constants.cc | 32 +- - .../breadcrumb_manager_tab_helper.mm | 4 +- ios/chrome/browser/flags/about_flags.mm | 4 +- ios/chrome/browser/omaha/omaha_service.mm | 2 +- .../search_engine_tab_helper.mm | 8 +- @@ -846,6 +849,7 @@ Subject: Automated domain substitution jingle/notifier/base/notifier_options_util.cc | 4 +- media/PRESUBMIT.py | 4 +- media/base/win/mf_initializer.cc | 2 +- + ...stable_video_decoder_types_mojom_traits.cc | 16 +- mojo/PRESUBMIT.py | 2 +- native_client_sdk/PRESUBMIT.py | 2 +- .../src/build_tools/build_paths.py | 2 +- @@ -1084,10 +1088,11 @@ Subject: Automated domain substitution .../renderer/bindings/scripts/utilities.py | 2 +- .../build/scripts/update_css_ranking.py | 4 +- .../core/css/remote_font_face_source.cc | 2 +- + third_party/blink/renderer/core/css/svg.css | 2 +- .../renderer/core/dom/events/event_target.cc | 4 +- .../blink/renderer/core/events/touch_event.cc | 2 +- .../blink/renderer/core/events/wheel_event.cc | 2 +- - .../blink/renderer/core/frame/deprecation.cc | 50 +- + .../blink/renderer/core/frame/deprecation.cc | 18 +- .../blink/renderer/core/frame/local_frame.cc | 4 +- .../renderer/core/html/html_iframe_element.cc | 2 +- .../core/html/media/autoplay_policy.cc | 4 +- @@ -1145,6 +1150,7 @@ Subject: Automated domain substitution third_party/crashpad/update.py | 2 +- third_party/dav1d/generate_source.py | 2 +- .../protoc_plugins/util/plugin_protos.py | 4 +- + .../closure-deps/lib/jsfile_parser.js | 46 +- .../closure/bin/build/closurebuilder.py | 2 +- .../closure/bin/build/depstree.py | 2 +- .../closure/bin/build/depswriter.py | 2 +- @@ -1154,37 +1160,28 @@ Subject: Automated domain substitution .../closure/css/inlay/g-fixed.css | 4 +- .../closure/css/inlay/g-ratio.css | 4 +- .../closure/goog/css/bubble.css | 18 +- - .../closure/goog/css/charpicker.css | 4 +- - .../closure/goog/css/checkbox.css | 6 +- + .../closure/goog/css/checkbox.css | 4 +- .../closure/goog/css/colorpalette.css | 2 +- .../goog/css/colorpicker-simplegrid.css | 2 +- .../closure/goog/css/combobox.css | 2 +- - .../closure/goog/css/css3button.css | 4 +- .../closure/goog/css/css3menubutton.css | 2 +- .../closure/goog/css/custombutton.css | 2 +- .../closure/goog/css/dialog.css | 2 +- - .../closure/goog/css/dimensionpicker.css | 4 +- .../closure/goog/css/dragdropdetector.css | 4 +- .../closure/goog/css/editor/bubble.css | 2 +- - .../goog/css/editor/equationeditor.css | 6 +- + .../goog/css/editor/equationeditor.css | 2 +- .../closure/goog/css/editortoolbar.css | 2 +- - .../closure/goog/css/filteredmenu.css | 2 +- - .../goog/css/filterobservingmenuitem.css | 2 +- .../closure/goog/css/flatmenubutton.css | 2 +- - .../closure/goog/css/hovercard.css | 2 +- .../closure/goog/css/hsvapalette.css | 8 +- .../closure/goog/css/hsvpalette.css | 8 +- .../closure/goog/css/imagelessmenubutton.css | 2 +- - .../closure/goog/css/inputdatepicker.css | 2 +- .../closure/goog/css/menubutton.css | 4 +- .../closure/goog/css/menuitem.css | 2 +- - .../closure/goog/css/multitestrunner.css | 2 +- - .../closure/goog/css/roundedtab.css | 2 +- - .../closure/goog/css/tablesorter.css | 2 +- .../closure/goog/css/toolbar.css | 4 +- - .../closure/goog/css/tree.css | 10 +- - .../closure/goog/css/tristatemenuitem.css | 6 +- + .../closure/goog/css/tree.css | 4 +- + .../closure/goog/css/tristatemenuitem.css | 4 +- .../goog/demos/autocompleterichremotedata.js | 16 +- + .../demos/autocompleterichremotedata.json | 16 +- .../closure/goog/demos/css/demo.css | 2 +- .../closure/goog/demos/css/emojipicker.css | 2 +- .../closure/goog/demos/dialog.html | 4 +- @@ -1198,6 +1195,7 @@ Subject: Automated domain substitution .../closure/goog/demos/splitpane.html | 2 +- .../closure/goog/html/safeurl_test_vectors.js | 8 +- .../goog/html/sanitizer/html_test_vectors.js | 2 +- + .../goog/labs/net/webchannel/environment.js | 2 +- .../goog/labs/net/webchannel/netutils.js | 2 +- .../labs/net/webchannel/webchannelbase.js | 4 +- .../closure/goog/net/browserchannel.js | 4 +- @@ -1205,7 +1203,8 @@ Subject: Automated domain substitution .../closure/goog/net/tmpnetwork.js | 2 +- .../closure/goog/soy/soy_testhelper.js | 4 +- .../closure/goog/testing/performancetable.css | 4 +- - .../closure/goog/transpile.js | 158 +- + .../closure/goog/testing/testcase.js | 2 +- + .../closure/goog/transpile.js | 46 +- .../closure/goog/ui/editor/linkdialog.js | 2 +- .../closure/goog/ui/editor/messages.js | 2 +- .../closure/goog/ui/media/googlevideo.js | 6 +- @@ -1354,6 +1353,8 @@ Subject: Automated domain substitution .../tcmalloc/vendor/src/windows/nm-pdb.c | 2 +- .../tensorflow_text/core/ops/rouge_l_op.cc | 2 +- .../metrics/text_similarity_metric_ops.py | 2 +- + .../updater/chromium_mac_amd64/3pp/fetch.py | 6 +- + .../updater/chromium_mac_arm64/3pp/fetch.py | 6 +- third_party/wpt_tools/wpt/tools/lint/rules.py | 4 +- .../tools/third_party/pywebsocket3/setup.py | 2 +- .../wpt/tools/webdriver/webdriver/client.py | 2 +- @@ -1478,9 +1479,9 @@ Subject: Automated domain substitution tools/symsrc/source_index.py | 8 +- tools/tracing/PRESUBMIT.py | 2 +- tools/tracing/rename_breakpad.py | 2 +- - .../good_partial_annotation.txt | 2 +- .../sample_traffic_annotation.cc | 2 +- .../scripts/auditor/auditor.py | 4 +- + .../good_partial_annotation.txt | 2 +- .../scripts/update_annotations_doc.py | 4 +- .../scripts/update_annotations_sheet.py | 6 +- tools/typescript/PRESUBMIT.py | 2 +- @@ -1515,6 +1516,7 @@ Subject: Automated domain substitution ui/file_manager/audio_player/manifest.json | 2 +- .../file_manager/common/js/mock_chrome.js | 6 +- .../foreground/elements/icons.html | 2 +- + .../foreground/js/file_transfer_controller.js | 2 +- ui/file_manager/file_manager/manifest.json | 10 +- ui/file_manager/image_loader/piex/Makefile | 2 +- ui/gl/gl_image_io_surface_egl.mm | 2 +- @@ -1528,10 +1530,9 @@ Subject: Automated domain substitution .../quick_unlock/pin_keyboard_icon.html | 2 +- ui/webui/resources/cr_elements/icons.html | 4 +- url/third_party/mozilla/LICENSE.txt | 4 +- - weblayer/browser/default_search_engine.cc | 2 +- ...weblayer_security_blocking_page_factory.cc | 2 +- weblayer/shell/app/shell_main_params.cc | 2 +- - 1528 files changed, 4791 insertions(+), 4791 deletions(-) + 1529 files changed, 4790 insertions(+), 4790 deletions(-) diff --git a/PRESUBMIT.py b/PRESUBMIT.py --- a/PRESUBMIT.py @@ -1635,8 +1636,8 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py 'security-tips-for-ipc') _LONG_PATH_ERROR = ( -@@ -1191,9 +1191,9 @@ _KNOWN_ROBOTS = set( - 'lacros-version-skew-roller', 'skylab-test-cros-roller') +@@ -1192,9 +1192,9 @@ _KNOWN_ROBOTS = set( + 'infra-try-recipes-tester') ) | set('%s@skia-public.iam.gserviceaccount.com' % s for s in ('chromium-autoroll', 'chromium-release-autoroll') - ) | set('%s@skia-corp.google.com.iam.gserviceaccount.com' % s @@ -1647,7 +1648,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py for s in ('swarming-tasks',)) _INVALID_GRD_FILE_LINE = [ -@@ -1568,7 +1568,7 @@ def CheckNoDEPSGIT(input_api, output_api): +@@ -1569,7 +1569,7 @@ def CheckNoDEPSGIT(input_api, output_api): 'Never commit changes to .DEPS.git. This file is maintained by an\n' 'automated system based on what\'s in DEPS and your changes will be\n' 'overwritten.\n' @@ -1656,7 +1657,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py 'get-the-code#Rolling_DEPS\n' 'for more information')] return [] -@@ -1779,7 +1779,7 @@ def CheckNoPragmaOnce(input_api, output_api): +@@ -1780,7 +1780,7 @@ def CheckNoPragmaOnce(input_api, output_api): if files: return [output_api.PresubmitError( 'Do not use #pragma once in header files.\n' @@ -1665,7 +1666,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py files)] return [] -@@ -1994,7 +1994,7 @@ def CheckForVersionControlConflicts(input_api, output_api): +@@ -1995,7 +1995,7 @@ def CheckForVersionControlConflicts(input_api, output_api): def CheckGoogleSupportAnswerUrlOnUpload(input_api, output_api): @@ -1674,7 +1675,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py errors = [] for f in input_api.AffectedFiles(): for line_num, line in f.ChangedContents(): -@@ -2103,7 +2103,7 @@ def CheckNoAbbreviationInPngFileName(input_api, output_api): +@@ -2104,7 +2104,7 @@ def CheckNoAbbreviationInPngFileName(input_api, output_api): results.append(output_api.PresubmitError( 'The name of PNG files should not have abbreviations. \n' 'Use _hover.png, _center.png, instead of _h.png, _c.png.\n' @@ -1683,7 +1684,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py return results -@@ -2873,7 +2873,7 @@ def CheckSecurityOwners(input_api, output_api): +@@ -2874,7 +2874,7 @@ def CheckSecurityOwners(input_api, output_api): if to_check: # If there are any OWNERS files to check, there are IPC-related changes in # this CL. Auto-CC the review list. @@ -1692,7 +1693,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py # Go through the OWNERS files to check, filtering out rules that are already # present in that OWNERS file. -@@ -3174,7 +3174,7 @@ def _CheckAndroidToastUsage(input_api, output_api): +@@ -3175,7 +3175,7 @@ def _CheckAndroidToastUsage(input_api, output_api): 'android.widget.Toast usage is detected. Android toasts use hardware' ' acceleration, and can be\ncostly on low-end devices. Please use' ' org.chromium.ui.widget.Toast instead.\n' @@ -1701,7 +1702,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py errors)) return results -@@ -3308,7 +3308,7 @@ def _CheckAndroidTestJUnitFrameworkImport(input_api, output_api): +@@ -3309,7 +3309,7 @@ def _CheckAndroidTestJUnitFrameworkImport(input_api, output_api): if errors: results.append(output_api.PresubmitError( 'APIs from junit.framework.* are deprecated, please use JUnit4 framework' @@ -1710,7 +1711,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py ' if you have any question.', errors)) return results -@@ -3339,7 +3339,7 @@ def _CheckAndroidTestJUnitInheritance(input_api, output_api): +@@ -3340,7 +3340,7 @@ def _CheckAndroidTestJUnitInheritance(input_api, output_api): results.append(output_api.PresubmitPromptWarning( 'The newly created files include Test classes that inherits from base' ' class. Please do not use inheritance in JUnit4 tests or add new' @@ -1719,7 +1720,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py ' questions.', errors)) return results -@@ -3363,7 +3363,7 @@ def _CheckAndroidTestAnnotationUsage(input_api, output_api): +@@ -3364,7 +3364,7 @@ def _CheckAndroidTestAnnotationUsage(input_api, output_api): 'Annotations in android.test.suitebuilder.annotation have been' ' deprecated since API level 24. Please use android.support.test.filters' ' from //third_party/android_support_test_runner:runner_java instead.' @@ -1728,7 +1729,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py return results -@@ -3383,7 +3383,7 @@ def _CheckAndroidNewMdpiAssetLocation(input_api, output_api): +@@ -3384,7 +3384,7 @@ def _CheckAndroidNewMdpiAssetLocation(input_api, output_api): 'MDPI assets should be placed in /res/drawable-mdpi/ or ' '/res/drawable-ldrtl-mdpi/\ninstead of /res/drawable/ and' '/res/drawable-ldrtl/.\n' @@ -1737,7 +1738,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py return results -@@ -3918,7 +3918,7 @@ def CheckGnGlobForward(input_api, output_api): +@@ -3919,7 +3919,7 @@ def CheckGnGlobForward(input_api, output_api): long_text=('The variables "visibilty" and "test_only" should be ' 'explicitly listed in forward_variables_from(). For more ' 'details, see:\n' @@ -1746,7 +1747,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py 'build/docs/writing_gn_templates.md' '#Using-forward_variables_from'))] return [] -@@ -4080,7 +4080,7 @@ def CheckFuzzTargetsOnUpload(input_api, output_api): +@@ -4081,7 +4081,7 @@ def CheckFuzzTargetsOnUpload(input_api, output_api): 'LLVMFuzzerInitialize should not be used, unless your fuzz target needs ' 'to access command line arguments passed to the fuzzer. Instead, prefer ' 'static initialization and shared resources as documented in ' @@ -1755,7 +1756,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py 'libfuzzer/efficient_fuzzing.md#simplifying-initialization_cleanup.\n' % ( ', '.join(EXPORTED_SYMBOLS), REQUIRED_HEADER) ) -@@ -4115,7 +4115,7 @@ def _CheckNewImagesWarning(input_api, output_api): +@@ -4116,7 +4116,7 @@ def _CheckNewImagesWarning(input_api, output_api): errors.append(output_api.PresubmitPromptWarning( 'It looks like you are trying to commit some images. If these are ' 'non-test-only images, please make sure to read and apply the tips in ' @@ -1764,7 +1765,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py 'binary_size/optimization_advice.md#optimizing-images\nThis check is ' 'FYI only and will not block your CL on the CQ.', image_paths)) return errors -@@ -4209,7 +4209,7 @@ _NON_INCLUSIVE_TERMS = ( +@@ -4210,7 +4210,7 @@ _NON_INCLUSIVE_TERMS = ( '"# nocheck" or ""', 'at the end of the offending line will bypass this PRESUBMIT error', 'but avoid using this whenever possible. Reach out to', @@ -1773,7 +1774,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py True),) def ChecksCommon(input_api, output_api): -@@ -4478,7 +4478,7 @@ def CheckForInvalidIfDefinedMacros(input_api, output_api): +@@ -4483,7 +4483,7 @@ def CheckForInvalidIfDefinedMacros(input_api, output_api): def CheckForIPCRules(input_api, output_api): """Check for same IPC rules described in @@ -1782,7 +1783,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py """ base_pattern = r'IPC_ENUM_TRAITS\(' inclusion_pattern = input_api.re.compile(r'(%s)' % base_pattern) -@@ -4731,9 +4731,9 @@ def CheckForUseOfChromeAppsDeprecations(input_api, output_api): +@@ -4736,9 +4736,9 @@ def CheckForUseOfChromeAppsDeprecations(input_api, output_api): return [output_api.PresubmitPromptWarning('You are adding/modifying code' 'related to technologies which will soon be deprecated (Chrome Apps, NaCl,' ' PNaCl, PPAPI). See this blog post for more details:\n' @@ -1794,7 +1795,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py '\n'.join(problems))] return [] -@@ -4776,7 +4776,7 @@ def CheckChangeOnCommit(input_api, output_api): +@@ -4781,7 +4781,7 @@ def CheckChangeOnCommit(input_api, output_api): results.extend(input_api.canned_checks.CheckTreeIsOpen( input_api, output_api, @@ -1803,7 +1804,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py results.extend( input_api.canned_checks.CheckPatchFormatted(input_api, output_api)) -@@ -5108,7 +5108,7 @@ def CheckStrings(input_api, output_api): +@@ -5113,7 +5113,7 @@ def CheckStrings(input_api, output_api): if icu_syntax_errors: results.append(output_api.PresubmitPromptWarning( 'ICU syntax errors were found in the following strings (problems or ' @@ -1908,7 +1909,7 @@ diff --git a/android_webview/tools/cts_config/webview_cts_gcs_path.json b/androi diff --git a/android_webview/tools/generate_flag_labels.py b/android_webview/tools/generate_flag_labels.py --- a/android_webview/tools/generate_flag_labels.py +++ b/android_webview/tools/generate_flag_labels.py -@@ -246,7 +246,7 @@ double-check this picked the correct labels for your new features (labels are +@@ -247,7 +247,7 @@ double-check this picked the correct labels for your new features (labels are case-sensitive!), add these to enums.xml, run `git-cl format`, and then follow these steps as a final check: @@ -2007,7 +2008,29 @@ diff --git a/ash/app_list/PRESUBMIT.py b/ash/app_list/PRESUBMIT.py diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd --- a/ash/ash_strings.grd +++ b/ash/ash_strings.grd -@@ -683,7 +683,7 @@ This file contains the strings for ash. +@@ -588,7 +588,7 @@ This file contains the strings for ash. + other {Update device within # seconds}} + + +- $1google.com requires you to update this $2Chromebook before the deadline. ++ $19oo91e.qjz9zk requires you to update this $2Chromebook before the deadline. + + + +@@ -598,10 +598,10 @@ This file contains the strings for ash. + Update overdue + + +- $1google.com recommends that you update this $2Chromebook. ++ $19oo91e.qjz9zk recommends that you update this $2Chromebook. + + +- $1google.com requires you to update this $2Chromebook immediately. ++ $19oo91e.qjz9zk requires you to update this $2Chromebook immediately. + + + +@@ -723,7 +723,7 @@ This file contains the strings for ash. @@ -2016,7 +2039,7 @@ diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd -@@ -1057,7 +1057,7 @@ This file contains the strings for ash. +@@ -1219,7 +1219,7 @@ This file contains the strings for ash. Supervised user @@ -2025,7 +2048,7 @@ diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd Account managed by $1user@example.com -@@ -1314,7 +1314,7 @@ This file contains the strings for ash. +@@ -1494,7 +1494,7 @@ This file contains the strings for ash. Tap to configure @@ -2034,7 +2057,7 @@ diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd Connected devices settings -@@ -2859,7 +2859,7 @@ This file contains the strings for ash. +@@ -3113,7 +3113,7 @@ This file contains the strings for ash. Multiple sign-in has been disabled @@ -2043,7 +2066,7 @@ diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd Sign out -@@ -3271,7 +3271,7 @@ Here are some things you can try to get started. +@@ -3537,7 +3537,7 @@ Here are some things you can try to get started. Unlock device to perform the notification action @@ -2129,10 +2152,22 @@ diff --git a/ash/components/drivefs/drivefs_auth.cc b/ash/components/drivefs/dri access_token_fetcher_ = std::make_unique( kIdentityConsumerId, identity_manager, scopes, +diff --git a/ash/components/geolocation/simple_geolocation_provider.cc b/ash/components/geolocation/simple_geolocation_provider.cc +--- a/ash/components/geolocation/simple_geolocation_provider.cc ++++ b/ash/components/geolocation/simple_geolocation_provider.cc +@@ -20,7 +20,7 @@ namespace ash { + namespace { + + const char kDefaultGeolocationProviderUrl[] = +- "https://www.googleapis.com/geolocation/v1/geolocate?"; ++ "https://www.9oo91eapis.qjz9zk/geolocation/v1/geolocate?"; + + } // namespace + diff --git a/ash/components/quick_answers/translation_result_loader.cc b/ash/components/quick_answers/translation_result_loader.cc --- a/ash/components/quick_answers/translation_result_loader.cc +++ b/ash/components/quick_answers/translation_result_loader.cc -@@ -35,7 +35,7 @@ using network::mojom::URLLoaderFactory; +@@ -35,7 +35,7 @@ using base::Value; // } constexpr char kTranslationAPIUrl[] = @@ -2141,10 +2176,22 @@ diff --git a/ash/components/quick_answers/translation_result_loader.cc b/ash/com constexpr char kAuthorizationHeaderFormat[] = "Bearer "; constexpr base::StringPiece kQueryKey = "q"; +diff --git a/ash/components/timezone/timezone_request.cc b/ash/components/timezone/timezone_request.cc +--- a/ash/components/timezone/timezone_request.cc ++++ b/ash/components/timezone/timezone_request.cc +@@ -31,7 +31,7 @@ namespace ash { + namespace { + + const char kDefaultTimezoneProviderUrl[] = +- "https://maps.googleapis.com/maps/api/timezone/json?"; ++ "https://maps.9oo91eapis.qjz9zk/maps/api/timezone/json?"; + + const char kKeyString[] = "key"; + // Language parameter is unsupported for now. diff --git a/ash/quick_answers/quick_answers_ui_controller.cc b/ash/quick_answers/quick_answers_ui_controller.cc --- a/ash/quick_answers/quick_answers_ui_controller.cc +++ b/ash/quick_answers/quick_answers_ui_controller.cc -@@ -30,7 +30,7 @@ namespace { +@@ -29,7 +29,7 @@ namespace { using quick_answers::QuickAnswer; using quick_answers::QuickAnswersExitPoint; @@ -2209,6 +2256,85 @@ diff --git a/ash/system/pcie_peripheral/pcie_peripheral_notification_controller. const int kNotificationsClicksThreshold = 3; const char kPciePeripheralLimitedPerformanceNotificationId[] = +diff --git a/ash/webui/camera_app_ui/camera_app_ui.cc b/ash/webui/camera_app_ui/camera_app_ui.cc +--- a/ash/webui/camera_app_ui/camera_app_ui.cc ++++ b/ash/webui/camera_app_ui/camera_app_ui.cc +@@ -85,7 +85,7 @@ content::WebUIDataSource* CreateUntrustedCameraAppUIHTMLSource() { + + untrusted_source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::ConnectSrc, +- std::string("connect-src http://www.google-analytics.com/ 'self';")); ++ std::string("connect-src http://www.9oo91e-analytics.qjz9zk/ 'self';")); + untrusted_source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::WorkerSrc, + std::string("worker-src 'self';")); +diff --git a/ash/webui/camera_app_ui/resources/js/lib/analytics.js b/ash/webui/camera_app_ui/resources/js/lib/analytics.js +--- a/ash/webui/camera_app_ui/resources/js/lib/analytics.js ++++ b/ash/webui/camera_app_ui/resources/js/lib/analytics.js +@@ -27,14 +27,14 @@ + K(b).replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1")+"=([^&#]*)"))&&2==a.length?a[1]:""},xa=function(){var a=""+M.location.hostname;return 0==a.indexOf("www.")?a.substring(4):a},de=function(a,b){var c=a.indexOf(b);if(5==c||6==c)if(a=a.charAt(c+b.length),"/"==a||"?"==a||""==a||":"==a)return!0;return!1},ya=function(a,b){var c=M.referrer;if(/^(https?|android-app):\/\//i.test(c)){if(a)return c;a="//"+M.location.hostname;if(!de(c,a))return b&&(b=a.replace(/\./g,"-")+".cdn.ampproject.org",de(c,b))?void 0: + c}},za=function(a,b){if(1==b.length&&null!=b[0]&&"object"===typeof b[0])return b[0];for(var c={},d=Math.min(a.length+1,b.length),e=0;e=b.length)wc(a,b,c);else if(8192>=b.length)x(a,b,c)||wd(a,b,c)||wc(a,b,c);else throw ge("len",b.length),new Da(b.length);},pe=function(a,b,c,d){d=d||ua;wd(a+"?"+b,"",d,c)},wc=function(a,b,c){var d=ta(a+"?"+b);d.onload=d.onerror=function(){d.onload=null;d.onerror=null;c()}},wd=function(a,b,c, ++ c.indexOf("xn--")){c="";break b}(c=c.match(/(.*)\.cdn\.ampproject\.org\/?$/))&&2==c.length&&(d=c[1].replace(/-/g,".").replace(/\.\./g,"-"))}c=d?d.replace(Ue,""):""}(d=b===c)||(c="."+c,d=b.substring(b.length-c.length,b.length)===c);if(d){b=!0;break a}else J(78)}b=!1}return b&&!1!==a};var bd=function(a){return(a?"https:":Ba||"https:"==M.location.protocol?"https:":"http:")+"//www.9oo91e-analytics.qjz9zk"},Da=function(a){this.name="len";this.message=a+"-8192"},ba=function(a,b,c){c=c||ua;if(2036>=b.length)wc(a,b,c);else if(8192>=b.length)x(a,b,c)||wd(a,b,c)||wc(a,b,c);else throw ge("len",b.length),new Da(b.length);},pe=function(a,b,c,d){d=d||ua;wd(a+"?"+b,"",d,c)},wc=function(a,b,c){var d=ta(a+"?"+b);d.onload=d.onerror=function(){d.onload=null;d.onerror=null;c()}},wd=function(a,b,c, + d){var e=O.XMLHttpRequest;if(!e)return!1;var g=new e;if(!("withCredentials"in g))return!1;a=a.replace(/^http:/,"https:");g.open("POST",a,!0);g.withCredentials=!0;g.setRequestHeader("Content-Type","text/plain");g.onreadystatechange=function(){if(4==g.readyState){if(d)try{var ca=g.responseText;if(1>ca.length)ge("xhr","ver","0"),c();else if("1"!=ca.charAt(0))ge("xhr","ver",String(ca.length)),c();else if(3=100*R(a,Ka))throw"abort";}function Ma(a){if(G(P(a,Na)))throw"abort";}function Oa(){var a=M.location.protocol;if("http:"!=a&&"https:"!=a)throw"abort";} + function Pa(a){try{O.navigator.sendBeacon?J(42):O.XMLHttpRequest&&"withCredentials"in new O.XMLHttpRequest&&J(40)}catch(c){}a.set(ld,Td(a),!0);a.set(Ac,R(a,Ac)+1);var b=[];ue.map(function(c,d){d.F&&(c=a.get(c),void 0!=c&&c!=d.defaultValue&&("boolean"==typeof c&&(c*=1),b.push(d.F+"="+K(""+c))))});!1===a.get(xe)&&b.push("npa=1");b.push("z="+Bd());a.set(Ra,b.join("&"),!0)} + function Sa(a){var b=P(a,fa);!b&&a.get(Vd)&&(b="beacon");var c=P(a,gd),d=P(a,oe),e=c||(d?d+"/3":bd(!1)+"/collect");switch(P(a,ad)){case "d":e=c||(d?d+"/32":bd(!1)+"/j/collect");b=a.get(qe)||void 0;pe(e,P(a,Ra),b,a.Z(Ia));break;case "b":e=c||(d?d+"/31":bd(!1)+"/r/collect");default:b?(c=P(a,Ra),d=(d=a.Z(Ia))||ua,"image"==b?wc(e,c,d):"xhr"==b&&wd(e,c,d)||"beacon"==b&&x(e,c,d)||ba(e,c,d)):ba(e,P(a,Ra),a.Z(Ia))}e=P(a,Na);e=h(e);b=e.hitcount;e.hitcount=b?b+1:1;e=P(a,Na);delete h(e).pending_experiments; +@@ -61,9 +61,9 @@ + a[c].split("="),e=d[1];d=d[0];for(var g=b.childNodes||[],ca=!1,l=0;l\x3c/script>')):(e=M.createElement("script"),e.type="text/javascript",e.async=!0,e.src=ca,a&&e.setAttribute("nonce",a),ca=M.getElementsByTagName("script")[0],ca.parentNode.insertBefore(e,ca));$d.set(b,!0)}}}},v=function(a,b){var c=A.get(a)|| +- [];c.push(b);A.set(a,c)},C=function(a,b){Yd.set(a,b);b=A.get(a)||[];for(var c=0;ca.split("/")[0].indexOf(":")&&(a=ca+e[2].substring(0,e[2].lastIndexOf("/"))+"/"+a);c.href=a; + d=b(c);return{protocol:(c.protocol||"").toLowerCase(),host:d[0],port:d[1],path:d[2],query:c.search||"",url:a||""}};var Z={ga:function(){Z.f=[]}};Z.ga();Z.D=function(a){var b=Z.J.apply(Z,arguments);b=Z.f.concat(b);for(Z.f=[];0 + +- Link detected. $1www.google.com ++ Link detected. $1www.9oo91e.qjz9zk + + + Text detected. diff --git a/ash/webui/diagnostics_ui/resources/network_card.js b/ash/webui/diagnostics_ui/resources/network_card.js --- a/ash/webui/diagnostics_ui/resources/network_card.js +++ b/ash/webui/diagnostics_ui/resources/network_card.js @@ -2221,7 +2347,7 @@ diff --git a/ash/webui/diagnostics_ui/resources/network_card.js b/ash/webui/diag const SETTINGS_URL = 'chrome://os-settings/'; /** -@@ -199,7 +199,7 @@ Polymer({ +@@ -203,7 +203,7 @@ Polymer({ /** @protected */ onTroubleConnectingClicked_() { // TODO(michaelcheco): Add correct URL. @@ -2233,7 +2359,7 @@ diff --git a/ash/webui/diagnostics_ui/resources/network_card.js b/ash/webui/diag diff --git a/ash/webui/diagnostics_ui/resources/routine_section.js b/ash/webui/diagnostics_ui/resources/routine_section.js --- a/ash/webui/diagnostics_ui/resources/routine_section.js +++ b/ash/webui/diagnostics_ui/resources/routine_section.js -@@ -430,7 +430,7 @@ Polymer({ +@@ -431,7 +431,7 @@ Polymer({ /** @protected */ onLearnMoreClicked_() { const baseSupportUrl = @@ -2257,7 +2383,7 @@ diff --git a/ash/webui/help_app_ui/help_app_kids_magazine_untrusted_ui.cc b/ash/ diff --git a/ash/webui/media_app_ui/media_app_guest_ui.cc b/ash/webui/media_app_ui/media_app_guest_ui.cc --- a/ash/webui/media_app_ui/media_app_guest_ui.cc +++ b/ash/webui/media_app_ui/media_app_guest_ui.cc -@@ -80,7 +80,7 @@ content::WebUIDataSource* CreateMediaAppUntrustedDataSource( +@@ -83,7 +83,7 @@ content::WebUIDataSource* CreateMediaAppUntrustedDataSource( // Allow calls to Maps reverse geocoding API for loading metadata. source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ConnectSrc, @@ -2266,6 +2392,58 @@ diff --git a/ash/webui/media_app_ui/media_app_guest_ui.cc b/ash/webui/media_app_ // Allow use of SharedArrayBuffer (required by the wasm). source->OverrideCrossOriginOpenerPolicy("same-origin"); +diff --git a/ash/webui/personalization_app/untrusted_personalization_app_ui_config.cc b/ash/webui/personalization_app/untrusted_personalization_app_ui_config.cc +--- a/ash/webui/personalization_app/untrusted_personalization_app_ui_config.cc ++++ b/ash/webui/personalization_app/untrusted_personalization_app_ui_config.cc +@@ -99,7 +99,7 @@ class UntrustedPersonalizationAppUI : public ui::UntrustedWebUIController { + // Allow images only from this url. + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::ImgSrc, +- "img-src 'self' data: https://*.googleusercontent.com;"); ++ "img-src 'self' data: https://*.9oo91eusercontent.qjz9zk;"); + + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::ScriptSrc, "script-src 'self';"); +diff --git a/ash/webui/projector_app/projector_xhr_sender.cc b/ash/webui/projector_app/projector_xhr_sender.cc +--- a/ash/webui/projector_app/projector_xhr_sender.cc ++++ b/ash/webui/projector_app/projector_xhr_sender.cc +@@ -37,9 +37,9 @@ constexpr char kAuthorizationHeaderPrefix[] = "Bearer "; + + // List of URL prefix supported by `ProjectorXhrSender`. + const char* kUrlAllowlist[] = { +- "https://www.googleapis.com/drive/v3/files/", +- "https://drive.google.com/get_video_info", +- "https://translation.googleapis.com/language/translate/v2"}; ++ "https://www.9oo91eapis.qjz9zk/drive/v3/files/", ++ "https://drive.9oo91e.qjz9zk/get_video_info", ++ "https://translation.9oo91eapis.qjz9zk/language/translate/v2"}; + + // Return true if the url matches the allowed URL prefix. + bool IsUrlAllowlisted(const std::string& url) { +diff --git a/ash/webui/projector_app/untrusted_projector_ui_config.cc b/ash/webui/projector_app/untrusted_projector_ui_config.cc +--- a/ash/webui/projector_app/untrusted_projector_ui_config.cc ++++ b/ash/webui/projector_app/untrusted_projector_ui_config.cc +@@ -51,16 +51,16 @@ content::WebUIDataSource* CreateProjectorHTMLSource() { + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::ImgSrc, + // Allows loading video file thumbnail. +- "img-src https://*.googleusercontent.com;"); ++ "img-src https://*.9oo91eusercontent.qjz9zk;"); + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::MediaSrc, + // Allows streaming video. +- "media-src https://*.drive.google.com;"); ++ "media-src https://*.drive.9oo91e.qjz9zk;"); + + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::ConnectSrc, +- "connect-src 'self' https://www.googleapis.com " +- "https://drive.google.com;"); ++ "connect-src 'self' https://www.9oo91eapis.qjz9zk " ++ "https://drive.9oo91e.qjz9zk;"); + + // TODO(b/197120695): re-enable trusted type after fixing the issue that icon + // template is setting innerHTML. diff --git a/ash/webui/scanning/resources/scanning_app.html b/ash/webui/scanning/resources/scanning_app.html --- a/ash/webui/scanning/resources/scanning_app.html +++ b/ash/webui/scanning/resources/scanning_app.html @@ -2300,7 +2478,7 @@ diff --git a/ash/webui/shimless_rma/resources/reimaging_firmware_update_page.js - window.open('http://www.google.com'); + window.open('http://www.9oo91e.qjz9zk'); } - }; + } diff --git a/base/PRESUBMIT.py b/base/PRESUBMIT.py --- a/base/PRESUBMIT.py @@ -2464,7 +2642,7 @@ diff --git a/build/android/gyp/proguard.py b/build/android/gyp/proguard.py 'android/docs/java_optimization.md#Debugging-common-failures') base_has_imported_lib = False -@@ -518,7 +518,7 @@ out/Release/apks/YourApk.apk > dex.txt +@@ -524,7 +524,7 @@ out/Release/apks/YourApk.apk > dex.txt stderr += """ You may need to update build configs to run FragmentActivityReplacer for additional targets. See @@ -2678,7 +2856,7 @@ diff --git a/build/android/pylib/utils/simpleperf.py b/build/android/pylib/utils diff --git a/build/android/resource_sizes.py b/build/android/resource_sizes.py --- a/build/android/resource_sizes.py +++ b/build/android/resource_sizes.py -@@ -150,7 +150,7 @@ def _ReadZipInfoExtraFieldLength(zip_file, zip_info): +@@ -149,7 +149,7 @@ def _ReadZipInfoExtraFieldLength(zip_file, zip_info): def _MeasureApkSignatureBlock(zip_file): """Measures the size of the v2 / v3 signing block. @@ -2690,7 +2868,7 @@ diff --git a/build/android/resource_sizes.py b/build/android/resource_sizes.py diff --git a/build/android/test_runner.py b/build/android/test_runner.py --- a/build/android/test_runner.py +++ b/build/android/test_runner.py -@@ -1057,7 +1057,7 @@ def RunTestsInPlatformMode(args, result_sink_client=None): +@@ -1083,7 +1083,7 @@ def RunTestsInPlatformMode(args, result_sink_client=None): result_html_string, _, _ = test_results_presentation.result_details( json_path=json_file.name, test_name=args.command, @@ -2750,7 +2928,7 @@ diff --git a/build/chromeos/PRESUBMIT.py b/build/chromeos/PRESUBMIT.py diff --git a/build/chromeos/test_runner.py b/build/chromeos/test_runner.py --- a/build/chromeos/test_runner.py +++ b/build/chromeos/test_runner.py -@@ -949,7 +949,7 @@ def main(): +@@ -948,7 +948,7 @@ def main(): tast_test_parser = subparsers.add_parser( 'tast', help='Runs a device-side set of Tast tests. For more details, see: ' @@ -2762,7 +2940,7 @@ diff --git a/build/chromeos/test_runner.py b/build/chromeos/test_runner.py diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni --- a/build/config/android/rules.gni +++ b/build/config/android/rules.gni -@@ -1713,7 +1713,7 @@ if (enable_java_templates) { +@@ -1718,7 +1718,7 @@ if (enable_java_templates) { # * public.txt # * annotations.zip # * assets/ @@ -2827,7 +3005,7 @@ diff --git a/build/config/compiler/compiler.gni b/build/config/compiler/compiler enable_cet_shadow_stack = target_cpu == "x64" } -@@ -232,7 +232,7 @@ declare_args() { +@@ -233,7 +233,7 @@ declare_args() { # results independent of the checkout and build directory names, which # in turn is important for goma compile hit rate. # Setting this to true may make it harder to debug binaries on Linux, see @@ -2899,7 +3077,7 @@ diff --git a/build/fuchsia/PRESUBMIT.py b/build/fuchsia/PRESUBMIT.py diff --git a/build/fuchsia/binary_sizes.py b/build/fuchsia/binary_sizes.py --- a/build/fuchsia/binary_sizes.py +++ b/build/fuchsia/binary_sizes.py -@@ -96,7 +96,7 @@ def CreateTestResults(test_status, timestamp): +@@ -98,7 +98,7 @@ def CreateTestResults(test_status, timestamp): """Create test results data to write to JSON test results file. The JSON data format is defined in @@ -2983,7 +3161,7 @@ diff --git a/build/toolchain/cros_toolchain.gni b/build/toolchain/cros_toolchain diff --git a/build/toolchain/gcc_toolchain.gni b/build/toolchain/gcc_toolchain.gni --- a/build/toolchain/gcc_toolchain.gni +++ b/build/toolchain/gcc_toolchain.gni -@@ -673,7 +673,7 @@ template("gcc_toolchain") { +@@ -674,7 +674,7 @@ template("gcc_toolchain") { rustc += rust_prefix rustc += "rustc" @@ -3230,7 +3408,7 @@ diff --git a/chrome/app/PRESUBMIT.py b/chrome/app/PRESUBMIT.py diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd --- a/chrome/app/chromium_strings.grd +++ b/chrome/app/chromium_strings.grd -@@ -331,7 +331,7 @@ If you update this file, be sure also to update google_chrome_strings.grd. --> +@@ -417,7 +417,7 @@ If you update this file, be sure also to update google_chrome_strings.grd. --> To send a number from here to your Android phone, sign in to Chromium on both devices. @@ -3239,7 +3417,7 @@ diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd Make sure you are signed in to Chromium on your $1Pixel XL and then try sending again. -@@ -582,7 +582,7 @@ Chromium is unable to recover your settings. +@@ -663,7 +663,7 @@ Chromium is unable to recover your settings. @@ -3248,7 +3426,7 @@ diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd -@@ -694,10 +694,10 @@ Chromium is unable to recover your settings. +@@ -766,10 +766,10 @@ Chromium is unable to recover your settings. You're signed in to Chromium! @@ -3261,7 +3439,7 @@ diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd Someone previously signed in to Chromium on this computer as $1user@example.com. Please create a new Chromium user to keep your information separate. -@@ -747,7 +747,7 @@ Chromium is unable to recover your settings. +@@ -819,7 +819,7 @@ Chromium is unable to recover your settings. @@ -3270,7 +3448,7 @@ diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd -@@ -766,10 +766,10 @@ Chromium is unable to recover your settings. +@@ -838,10 +838,10 @@ Chromium is unable to recover your settings. $1Elisa is already signed in to this Chromium profile. To keep your browsing separate, Chromium can create your own profile for you. @@ -3307,7 +3485,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources This file -@@ -600,7 +600,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -606,7 +606,7 @@ are declared in tools/grit/grit_rule.gni. Open link as @@ -3316,7 +3494,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Open link in $1Gmail App -@@ -769,7 +769,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -775,7 +775,7 @@ are declared in tools/grit/grit_rule.gni. Search images with $1Google Lens @@ -3325,7 +3503,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Suggest password... -@@ -844,7 +844,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -850,7 +850,7 @@ are declared in tools/grit/grit_rule.gni. Open Link as @@ -3334,7 +3512,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Open Link in $1Gmail App -@@ -1025,7 +1025,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -1031,7 +1031,7 @@ are declared in tools/grit/grit_rule.gni. Search Images with $1Google Lens @@ -3343,7 +3521,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Suggest Password... -@@ -1251,7 +1251,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -1257,7 +1257,7 @@ are declared in tools/grit/grit_rule.gni. @@ -3352,7 +3530,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -1388,7 +1388,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -1394,7 +1394,7 @@ are declared in tools/grit/grit_rule.gni. Review @@ -3361,7 +3539,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -2864,10 +2864,10 @@ are declared in tools/grit/grit_rule.gni. +@@ -2870,10 +2870,10 @@ are declared in tools/grit/grit_rule.gni. Images were blocked on this page. @@ -3374,7 +3552,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Continue blocking cookies -@@ -2876,7 +2876,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -2882,7 +2882,7 @@ are declared in tools/grit/grit_rule.gni. Continue allowing cookies @@ -3383,7 +3561,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Continue blocking images -@@ -2888,28 +2888,28 @@ are declared in tools/grit/grit_rule.gni. +@@ -2894,28 +2894,28 @@ are declared in tools/grit/grit_rule.gni. Pop-ups blocked: @@ -3419,7 +3597,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Always block camera and microphone access -@@ -2930,19 +2930,19 @@ are declared in tools/grit/grit_rule.gni. +@@ -2936,19 +2936,19 @@ are declared in tools/grit/grit_rule.gni. Continue blocking camera access @@ -3444,7 +3622,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Pop-up blocked -@@ -2954,7 +2954,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -2960,7 +2960,7 @@ are declared in tools/grit/grit_rule.gni. JavaScript was blocked on this page. @@ -3453,7 +3631,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Continue blocking JavaScript -@@ -2963,7 +2963,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -2969,7 +2969,7 @@ are declared in tools/grit/grit_rule.gni. Sound was muted on this page @@ -3462,7 +3640,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Continue muting sound -@@ -3087,7 +3087,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -3093,7 +3093,7 @@ are declared in tools/grit/grit_rule.gni. @@ -3471,7 +3649,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources &General -@@ -3612,13 +3612,13 @@ are declared in tools/grit/grit_rule.gni. +@@ -3602,13 +3602,13 @@ are declared in tools/grit/grit_rule.gni. @@ -3488,7 +3666,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Share this tab instead -@@ -3627,7 +3627,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -3617,7 +3617,7 @@ are declared in tools/grit/grit_rule.gni. Stop sharing @@ -3497,7 +3675,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Switch to capturing tab -@@ -3833,16 +3833,16 @@ are declared in tools/grit/grit_rule.gni. +@@ -3823,16 +3823,16 @@ are declared in tools/grit/grit_rule.gni. Incognito Tab: $1Google @@ -3518,7 +3696,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Plugin: $1Unknown Plugin -@@ -3851,7 +3851,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -3841,7 +3841,7 @@ are declared in tools/grit/grit_rule.gni. Plugin Broker: $1Unknown Plugin @@ -3527,7 +3705,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Spare Renderer -@@ -3887,22 +3887,22 @@ are declared in tools/grit/grit_rule.gni. +@@ -3877,22 +3877,22 @@ are declared in tools/grit/grit_rule.gni. Print: $1Google Maps @@ -3556,7 +3734,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources App: $1com.android.systemui -@@ -4117,7 +4117,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -4107,7 +4107,7 @@ are declared in tools/grit/grit_rule.gni. "$1Gmail Checker" @@ -3565,7 +3743,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources The extension "$1Gmail Checker" was blocked by your administrator -@@ -4129,10 +4129,10 @@ are declared in tools/grit/grit_rule.gni. +@@ -4119,10 +4119,10 @@ are declared in tools/grit/grit_rule.gni. @@ -3578,7 +3756,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources It can: -@@ -4271,22 +4271,22 @@ are declared in tools/grit/grit_rule.gni. +@@ -4261,22 +4261,22 @@ are declared in tools/grit/grit_rule.gni. Change your home page to: $1home.page.com/home.html @@ -3607,7 +3785,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Read and change your data on a number of websites -@@ -4295,10 +4295,10 @@ are declared in tools/grit/grit_rule.gni. +@@ -4285,10 +4285,10 @@ are declared in tools/grit/grit_rule.gni. Read your data on a number of websites @@ -3620,7 +3798,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Read and change anything you type -@@ -4678,7 +4678,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -4668,7 +4668,7 @@ are declared in tools/grit/grit_rule.gni. When you click the extension @@ -3629,7 +3807,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources On all sites -@@ -4722,7 +4722,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -4712,7 +4712,7 @@ are declared in tools/grit/grit_rule.gni. When You Click the Extension @@ -3638,7 +3816,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources On All Sites -@@ -5015,7 +5015,7 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -5005,7 +5005,7 @@ Keep your key file in a safe place. You will need it to create new versions of y Change back to $1DuckDuckGo? @@ -3647,7 +3825,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -5261,10 +5261,10 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -5257,10 +5257,10 @@ Keep your key file in a safe place. You will need it to create new versions of y Update password for $1example.com? @@ -3660,7 +3838,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Passwords are saved in your Google Account so you can use them on any device -@@ -5588,7 +5588,7 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -5584,7 +5584,7 @@ Keep your key file in a safe place. You will need it to create new versions of y @@ -3669,7 +3847,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Pa&ste and search for “$1flowers” -@@ -5599,7 +5599,7 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -5595,7 +5595,7 @@ Keep your key file in a safe place. You will need it to create new versions of y @@ -3678,7 +3856,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Pa&ste and Search for “$1flowers” -@@ -5609,7 +5609,7 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -5605,7 +5605,7 @@ Keep your key file in a safe place. You will need it to create new versions of y @@ -3687,7 +3865,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Press $1Tab to send commands to $2Google Talk -@@ -5618,16 +5618,16 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -5614,16 +5614,16 @@ Keep your key file in a safe place. You will need it to create new versions of y Tab @@ -3707,7 +3885,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Clear input -@@ -6009,7 +6009,7 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -6005,7 +6005,7 @@ Keep your key file in a safe place. You will need it to create new versions of y You’re seeing your recent and suggested documents based on your previous activity using Google Drive. <br> <br> @@ -3716,7 +3894,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources From your Google Photos -@@ -6033,7 +6033,7 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -6029,7 +6029,7 @@ Keep your key file in a safe place. You will need it to create new versions of y Your memories from Google Photos are shown here. They are visible only to you, whenever you’re signed in. <br> <br> @@ -3725,7 +3903,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Explore more of your memories in Google Photos -@@ -6063,10 +6063,10 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -6059,10 +6059,10 @@ Keep your key file in a safe place. You will need it to create new versions of y Why am I seeing this? @@ -3738,7 +3916,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Close -@@ -6349,7 +6349,7 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -6345,7 +6345,7 @@ Keep your key file in a safe place. You will need it to create new versions of y Stay in Chrome @@ -3747,7 +3925,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -6456,7 +6456,7 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -6452,7 +6452,7 @@ Keep your key file in a safe place. You will need it to create new versions of y This site has been blocked from seeing text and images copied to the clipboard @@ -3756,7 +3934,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Continue blocking this site from seeing the clipboard -@@ -6568,7 +6568,7 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -6573,7 +6573,7 @@ Keep your key file in a safe place. You will need it to create new versions of y The page has become unresponsive. You can wait for it to become responsive or close it. @@ -3765,7 +3943,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Close -@@ -6605,7 +6605,7 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -6610,7 +6610,7 @@ Keep your key file in a safe place. You will need it to create new versions of y Automatically sign in to websites using stored credentials. When the feature is disabled, you will be asked for confirmation every time before signing in to a website. @@ -3774,7 +3952,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -6780,13 +6780,13 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -6785,13 +6785,13 @@ Keep your key file in a safe place. You will need it to create new versions of y Suggest strong password @@ -3790,7 +3968,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -6970,7 +6970,7 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -6975,7 +6975,7 @@ Keep your key file in a safe place. You will need it to create new versions of y Clear browsing data @@ -3799,7 +3977,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Cleared Chrome data -@@ -6980,7 +6980,7 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -6985,7 +6985,7 @@ Keep your key file in a safe place. You will need it to create new versions of y @@ -3808,7 +3986,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Some passwords were not deleted -@@ -7204,7 +7204,7 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -7209,7 +7209,7 @@ Keep your key file in a safe place. You will need it to create new versions of y Uploading ($127%)... @@ -3817,7 +3995,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -7575,31 +7575,31 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -7592,31 +7592,31 @@ Keep your key file in a safe place. You will need it to create new versions of y $1html5rocks.com is sharing your screen. @@ -3854,7 +4032,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Hide -@@ -7627,7 +7627,7 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -7644,7 +7644,7 @@ Keep your key file in a safe place. You will need it to create new versions of y @@ -3863,7 +4041,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -7635,10 +7635,10 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -7652,10 +7652,10 @@ Keep your key file in a safe place. You will need it to create new versions of y Sign in to Security Device @@ -3876,7 +4054,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Please sign in to $1Software Security Device. -@@ -7978,7 +7978,7 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -7995,7 +7995,7 @@ Keep your key file in a safe place. You will need it to create new versions of y Sending link to $1Ted's Pixel2 @@ -3885,7 +4063,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -8747,7 +8747,7 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -8764,7 +8764,7 @@ Keep your key file in a safe place. You will need it to create new versions of y Work @@ -3894,7 +4072,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -8756,10 +8756,10 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -8773,10 +8773,10 @@ Keep your key file in a safe place. You will need it to create new versions of y Can't sign in @@ -3907,7 +4085,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Close -@@ -8784,13 +8784,13 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -8801,13 +8801,13 @@ Keep your key file in a safe place. You will need it to create new versions of y This wasn't me. @@ -3923,7 +4101,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Cancel -@@ -8839,7 +8839,7 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -8856,7 +8856,7 @@ Keep your key file in a safe place. You will need it to create new versions of y Open $1Adobe Acrobat? @@ -3932,7 +4110,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources A website wants to open this application. -@@ -8850,8 +8850,8 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -8867,8 +8867,8 @@ Keep your key file in a safe place. You will need it to create new versions of y Cancel @@ -3943,16 +4121,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -8876,7 +8876,7 @@ Keep your key file in a safe place. You will need it to create new versions of y - Date Modified - - -- Oh, no! This server is sending data $1Google Chrome can't understand. Please <a href="http://code.google.com/p/chromium/issues/entry">report a bug</a></a>, and include the <a href="LOCATION">raw listing</a>. -+ Oh, no! This server is sending data $1Google Chrome can't understand. Please <a href="http://code.9oo91e.qjz9zk/p/chromium/issues/entry">report a bug</a></a>, and include the <a href="LOCATION">raw listing</a>. - - - -@@ -9458,7 +9458,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -9475,7 +9475,7 @@ Please help our engineers fix this problem. Tell us what happened right before y Wrong index. @@ -3961,7 +4130,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -9872,7 +9872,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -9889,7 +9889,7 @@ Please help our engineers fix this problem. Tell us what happened right before y This site has been blocked from accessing your location. @@ -3970,7 +4139,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Continue blocking this site from accessing your location -@@ -9915,7 +9915,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -9932,7 +9932,7 @@ Please help our engineers fix this problem. Tell us what happened right before y This site has been blocked from having full control of MIDI devices. @@ -3979,7 +4148,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Continue blocking this site from having full control of MIDI devices -@@ -10004,7 +10004,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10021,7 +10021,7 @@ Please help our engineers fix this problem. Tell us what happened right before y View and manage saved passwords in your $1Google Account @@ -3988,7 +4157,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -10036,10 +10036,10 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10053,10 +10053,10 @@ Please help our engineers fix this problem. Tell us what happened right before y Undo @@ -4001,7 +4170,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -10150,19 +10150,19 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10167,19 +10167,19 @@ Please help our engineers fix this problem. Tell us what happened right before y An extension triggered full screen. @@ -4024,7 +4193,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources This page has disabled your mouse cursor. -@@ -10183,10 +10183,10 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10200,10 +10200,10 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4037,7 +4206,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Open $1search links -@@ -10223,7 +10223,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10240,7 +10240,7 @@ Please help our engineers fix this problem. Tell us what happened right before y This site has been blocked from using motion sensors. @@ -4046,7 +4215,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Continue blocking sensor access -@@ -10250,7 +10250,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10267,7 +10267,7 @@ Please help our engineers fix this problem. Tell us what happened right before y Continue allowing sensor access @@ -4055,7 +4224,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -10442,7 +10442,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10459,7 +10459,7 @@ Please help our engineers fix this problem. Tell us what happened right before y $1Google Hangouts wants to share the contents of your screen. @@ -4064,7 +4233,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Share system audio -@@ -10492,7 +10492,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10509,7 +10509,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4073,7 +4242,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -10564,8 +10564,8 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10581,8 +10581,8 @@ Please help our engineers fix this problem. Tell us what happened right before y $1Google Photos - Serial port connected @@ -4084,7 +4253,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources $1Google Search - Crashed -@@ -10773,7 +10773,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10790,7 +10790,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4093,7 +4262,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources $1Nexus 5 detected -@@ -10879,7 +10879,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10896,7 +10896,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4102,7 +4271,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources "$1Chrome Extension Name" wants to connect to a serial port -@@ -10919,7 +10919,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10936,7 +10936,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4111,7 +4280,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources "$1Chrome Extension Name" wants to connect to a HID device -@@ -10982,7 +10982,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10999,7 +10999,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4120,7 +4289,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources No matching font found. -@@ -11103,7 +11103,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -11120,7 +11120,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4129,7 +4298,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources wants to see the make and model of your Security Key -@@ -11290,13 +11290,13 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -11307,13 +11307,13 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4145,7 +4314,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Pick an option -@@ -11390,7 +11390,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -11407,7 +11407,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4154,7 +4323,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Didn't get it? -@@ -11405,7 +11405,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -11422,7 +11422,7 @@ Please help our engineers fix this problem. Tell us what happened right before y Security key request @@ -4163,7 +4332,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -11498,7 +11498,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -11515,7 +11515,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4172,7 +4341,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Select an account to sign in -@@ -11514,7 +11514,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -11531,7 +11531,7 @@ Please help our engineers fix this problem. Tell us what happened right before y Your security key can't be used with this site @@ -4181,7 +4350,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Your security key does not have enough space for any more accounts. -@@ -11523,13 +11523,13 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -11540,13 +11540,13 @@ Please help our engineers fix this problem. Tell us what happened right before y Allow this site to see your security key? @@ -4197,7 +4366,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Allow -@@ -11809,7 +11809,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -11837,7 +11837,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4209,7 +4378,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_strings.grd --- a/chrome/app/google_chrome_strings.grd +++ b/chrome/app/google_chrome_strings.grd -@@ -337,7 +337,7 @@ chromium_strings.grd. --> +@@ -423,7 +423,7 @@ chromium_strings.grd. --> To send a number from here to your Android phone, sign in to Chrome on both devices. @@ -4218,7 +4387,7 @@ diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_str Make sure you are signed in to Chrome on your $1Pixel XL and then try sending again. -@@ -590,7 +590,7 @@ Google Chrome is unable to recover your settings. +@@ -671,7 +671,7 @@ Google Chrome is unable to recover your settings. @@ -4227,7 +4396,7 @@ diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_str -@@ -702,10 +702,10 @@ Google Chrome is unable to recover your settings. +@@ -774,10 +774,10 @@ Google Chrome is unable to recover your settings. You're signed in to Chrome! @@ -4240,7 +4409,7 @@ diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_str Someone previously signed in to Chrome on this computer as $1user@example.com. Please create a new Chrome user to keep your information separate. -@@ -755,7 +755,7 @@ Google Chrome is unable to recover your settings. +@@ -827,7 +827,7 @@ Google Chrome is unable to recover your settings. @@ -4249,7 +4418,7 @@ diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_str -@@ -774,10 +774,10 @@ Google Chrome is unable to recover your settings. +@@ -846,10 +846,10 @@ Google Chrome is unable to recover your settings. $1Elisa is already signed in to this Chrome profile. To keep your browsing separate, Chrome can create your own profile for you. @@ -4320,7 +4489,7 @@ diff --git a/chrome/app/theme/PRESUBMIT.py b/chrome/app/theme/PRESUBMIT.py diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -3816,7 +3816,7 @@ const FeatureEntry kFeatureEntries[] = { +@@ -3879,7 +3879,7 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kSyncSandboxDescription, kOsAll, SINGLE_VALUE_TYPE_AND_VALUE( switches::kSyncServiceURL, @@ -4329,7 +4498,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc #if !defined(OS_ANDROID) {"media-router-cast-allow-all-ips", flag_descriptions::kMediaRouterCastAllowAllIPsName, -@@ -4048,7 +4048,7 @@ const FeatureEntry kFeatureEntries[] = { +@@ -4115,7 +4115,7 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kSetMarketUrlForTestingName, flag_descriptions::kSetMarketUrlForTestingDescription, kOsAndroid, SINGLE_VALUE_TYPE_AND_VALUE(switches::kMarketUrlForTesting, @@ -4377,7 +4546,7 @@ diff --git a/chrome/browser/android/vr/PRESUBMIT.py b/chrome/browser/android/vr/ diff --git a/chrome/browser/apps/app_service/webapk/webapk_install_task.cc b/chrome/browser/apps/app_service/webapk/webapk_install_task.cc --- a/chrome/browser/apps/app_service/webapk/webapk_install_task.cc +++ b/chrome/browser/apps/app_service/webapk/webapk_install_task.cc -@@ -61,7 +61,7 @@ const uint64_t kMurmur2HashSeed = 0; +@@ -62,7 +62,7 @@ const uint64_t kMurmur2HashSeed = 0; constexpr base::TimeDelta kMinterResponseTimeout = base::Seconds(60); constexpr char kWebApkServerUrl[] = @@ -4599,7 +4768,7 @@ diff --git a/chrome/browser/ash/crostini/crostini_util.cc b/chrome/browser/ash/c diff --git a/chrome/browser/ash/customization/customization_document.cc b/chrome/browser/ash/customization/customization_document.cc --- a/chrome/browser/ash/customization/customization_document.cc +++ b/chrome/browser/ash/customization/customization_document.cc -@@ -175,7 +175,7 @@ std::string ReadFileInBackground(const base::FilePath& file) { +@@ -200,7 +200,7 @@ std::string ReadFileInBackground(const base::FilePath& file) { // Template URL where to fetch OEM services customization manifest from. const char ServicesCustomizationDocument::kManifestUrl[] = @@ -4929,18 +5098,6 @@ diff --git a/chrome/browser/ash/plugin_vm/plugin_vm_util.cc b/chrome/browser/ash if (base::MatchPattern(spec, kViewUrlPatternWithDomain) || base::MatchPattern(spec, kViewUrlPatternWithoutDomain)) { // e.g. https://drive.google.com/a/example.org/file/d/[ID]/view?usp=sharing -diff --git a/chrome/browser/ash/policy/dlp/dlp_clipboard_bubble_constants.h b/chrome/browser/ash/policy/dlp/dlp_clipboard_bubble_constants.h ---- a/chrome/browser/ash/policy/dlp/dlp_clipboard_bubble_constants.h -+++ b/chrome/browser/ash/policy/dlp/dlp_clipboard_bubble_constants.h -@@ -38,7 +38,7 @@ constexpr int kClipboardDlpWarnDurationMs = 16000; - - // Link to the Help Center article about Data Leak Prevention. - constexpr char kDlpLearnMoreUrl[] = -- "https://support.google.com/chrome/a/?p=chromeos_datacontrols"; -+ "https://support.9oo91e.qjz9zk/chrome/a/?p=chromeos_datacontrols"; - - } // namespace policy - diff --git a/chrome/browser/ash/policy/enrollment/account_status_check_fetcher.cc b/chrome/browser/ash/policy/enrollment/account_status_check_fetcher.cc --- a/chrome/browser/ash/policy/enrollment/account_status_check_fetcher.cc +++ b/chrome/browser/ash/policy/enrollment/account_status_check_fetcher.cc @@ -4980,7 +5137,7 @@ diff --git a/chrome/browser/ash/policy/handlers/powerwash_requirements_checker.c diff --git a/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.cc b/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.cc --- a/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.cc +++ b/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.cc -@@ -33,11 +33,11 @@ namespace { +@@ -32,11 +32,11 @@ namespace { // OAuth2 Token scopes constexpr char kCloudDevicesOAuth2Scope[] = @@ -5065,18 +5222,6 @@ diff --git a/chrome/browser/browser_switcher/browser_switcher_service.cc b/chrom "/what-is-enterprise-mode" trigger: "1 minute after browser startup, and then refreshes every 30 " -diff --git a/chrome/browser/buildflags.gni b/chrome/browser/buildflags.gni ---- a/chrome/browser/buildflags.gni -+++ b/chrome/browser/buildflags.gni -@@ -16,7 +16,7 @@ declare_args() { - # TODO(crbug.com/1054060) - enable_chromium_updater = false - -- # TODO(stahon@microsoft.com) Remove this when app_session_service is enabled -+ # TODO(stahon@m1cr050ft.qjz9zk) Remove this when app_session_service is enabled - # across the board. Until then, this buildflag allows some platforms to use - # app_session_service and some not. - enable_app_session_service = !is_android && !is_chromecast diff --git a/chrome/browser/cart/cart_discount_fetcher.cc b/chrome/browser/cart/cart_discount_fetcher.cc --- a/chrome/browser/cart/cart_discount_fetcher.cc +++ b/chrome/browser/cart/cart_discount_fetcher.cc @@ -5104,18 +5249,9 @@ diff --git a/chrome/browser/cart/cart_discount_link_fetcher.cc b/chrome/browser/ diff --git a/chrome/browser/cart/cart_service.cc b/chrome/browser/cart/cart_service.cc --- a/chrome/browser/cart/cart_service.cc +++ b/chrome/browser/cart/cart_service.cc -@@ -489,7 +489,7 @@ void CartService::AddCartsWithFakeData() { - // Polulate and add some carts with fake data. - double time_now = base::Time::Now().ToDoubleT(); - cart_db::ChromeCartContentProto dummy_proto1; -- GURL dummy_url1 = GURL("https://shopping.google.com"); -+ GURL dummy_url1 = GURL("https://shopping.9oo91e.qjz9zk"); - dummy_proto1.set_key(std::string(kFakeDataPrefix) + eTLDPlusOne(dummy_url1)); - dummy_proto1.set_merchant("Cart Foo"); - dummy_proto1.set_merchant_cart_url(dummy_url1.spec()); -@@ -498,17 +498,17 @@ void CartService::AddCartsWithFakeData() { - l10n_util::GetStringFUTF8(IDS_NTP_MODULES_CART_DISCOUNT_CHIP_AMOUNT, +@@ -497,17 +497,17 @@ void CartService::AddCartsWithFakeData() { u"15%")); + dummy_proto1.mutable_discount_info()->set_has_coupons(true); dummy_proto1.add_product_image_urls( - "https://encrypted-tbn3.gstatic.com/" + "https://encrypted-tbn3.95tat1c.qjz9zk/" @@ -5134,7 +5270,7 @@ diff --git a/chrome/browser/cart/cart_service.cc b/chrome/browser/cart/cart_serv "shopping?q=tbn:ANd9GcT2ew6Aydzu5VzRV756ORGha6fyjKp_On7iTlr_" "tL9vODnlNtFo_xsxj6_lCop-3J0Vk44lHfk-AxoBJDABVHPVFN-" "EiWLcZvzkdpHFqcurm7fBVmWtYKo2rg&usqp=CAY"); -@@ -526,12 +526,12 @@ void CartService::AddCartsWithFakeData() { +@@ -538,12 +538,12 @@ void CartService::AddCartsWithFakeData() { l10n_util::GetStringFUTF8(IDS_NTP_MODULES_CART_DISCOUNT_CHIP_AMOUNT, u"20%")); dummy_proto2.add_product_image_urls( @@ -5149,7 +5285,7 @@ diff --git a/chrome/browser/cart/cart_service.cc b/chrome/browser/cart/cart_serv "shopping?q=tbn:ANd9GcQyMRYWeM2Yq095nOXTL0-" "EUUnm79kh6hnw8yctJUNrAuse607KEr1CVxEa24r-" "8XHBuhTwcuC4GXeN94h9Kn19DhdBGsXG0qrD74veYSDJNLrUP-sru0jH&usqp=CAY"); -@@ -549,7 +549,7 @@ void CartService::AddCartsWithFakeData() { +@@ -561,7 +561,7 @@ void CartService::AddCartsWithFakeData() { l10n_util::GetStringFUTF8(IDS_NTP_MODULES_CART_DISCOUNT_CHIP_UP_TO_AMOUNT, u"$50")); dummy_proto3.add_product_image_urls( @@ -5158,7 +5294,7 @@ diff --git a/chrome/browser/cart/cart_service.cc b/chrome/browser/cart/cart_serv "shopping?q=tbn:ANd9GcQpn38jB2_BANnHUFa7kHJsf6SyubcgeU1lNYO_" "ZxM1Q2ju_ZMjv2EwNh0Zx_zbqYy_mFg_aiIhWYnD5PQ7t-uFzLM5cN77s_2_" "DFNeumI-LMPJMYjW-BOSaA&usqp=CAY"); -@@ -564,12 +564,12 @@ void CartService::AddCartsWithFakeData() { +@@ -576,12 +576,12 @@ void CartService::AddCartsWithFakeData() { dummy_proto4.set_merchant_cart_url(dummy_url4.spec()); dummy_proto4.set_timestamp(time_now + 3); dummy_proto4.add_product_image_urls( @@ -5173,7 +5309,7 @@ diff --git a/chrome/browser/cart/cart_service.cc b/chrome/browser/cart/cart_serv "shopping?q=tbn:ANd9GcT2ew6Aydzu5VzRV756ORGha6fyjKp_On7iTlr_" "tL9vODnlNtFo_xsxj6_lCop-3J0Vk44lHfk-AxoBJDABVHPVFN-" "EiWLcZvzkdpHFqcurm7fBVmWtYKo2rg&usqp=CAY"); -@@ -584,7 +584,7 @@ void CartService::AddCartsWithFakeData() { +@@ -596,7 +596,7 @@ void CartService::AddCartsWithFakeData() { dummy_proto5.set_merchant_cart_url(dummy_url5.spec()); dummy_proto5.set_timestamp(time_now + 2); dummy_proto5.add_product_image_urls( @@ -5182,7 +5318,7 @@ diff --git a/chrome/browser/cart/cart_service.cc b/chrome/browser/cart/cart_serv "shopping?q=tbn:ANd9GcQpn38jB2_BANnHUFa7kHJsf6SyubcgeU1lNYO_" "ZxM1Q2ju_ZMjv2EwNh0Zx_zbqYy_mFg_aiIhWYnD5PQ7t-uFzLM5cN77s_2_" "DFNeumI-LMPJMYjW-BOSaA&usqp=CAY"); -@@ -599,17 +599,17 @@ void CartService::AddCartsWithFakeData() { +@@ -611,17 +611,17 @@ void CartService::AddCartsWithFakeData() { dummy_proto6.set_merchant_cart_url(dummy_url6.spec()); dummy_proto6.set_timestamp(time_now + 1); dummy_proto6.add_product_image_urls( @@ -5275,6 +5411,18 @@ diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc // Thresholds for mountCrostini() API. constexpr base::TimeDelta kMountCrostiniSlowOperationThreshold = +diff --git a/chrome/browser/chromeos/policy/dlp/dlp_clipboard_bubble_constants.h b/chrome/browser/chromeos/policy/dlp/dlp_clipboard_bubble_constants.h +--- a/chrome/browser/chromeos/policy/dlp/dlp_clipboard_bubble_constants.h ++++ b/chrome/browser/chromeos/policy/dlp/dlp_clipboard_bubble_constants.h +@@ -38,7 +38,7 @@ constexpr int kClipboardDlpWarnDurationMs = 16000; + + // Link to the Help Center article about Data Leak Prevention. + constexpr char kDlpLearnMoreUrl[] = +- "https://support.google.com/chrome/a/?p=chromeos_datacontrols"; ++ "https://support.9oo91e.qjz9zk/chrome/a/?p=chromeos_datacontrols"; + + } // namespace policy + diff --git a/chrome/browser/custom_handlers/protocol_handler_registry.cc b/chrome/browser/custom_handlers/protocol_handler_registry.cc --- a/chrome/browser/custom_handlers/protocol_handler_registry.cc +++ b/chrome/browser/custom_handlers/protocol_handler_registry.cc @@ -5504,7 +5652,7 @@ diff --git a/chrome/browser/extensions/api/identity/identity_launch_web_auth_flo diff --git a/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc b/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc --- a/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc +++ b/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc -@@ -81,7 +81,7 @@ namespace { +@@ -82,7 +82,7 @@ namespace { #if BUILDFLAG(IS_CHROMEOS_ASH) const char kPlayIntentPrefix[] = @@ -5599,7 +5747,7 @@ diff --git a/chrome/browser/federated_learning/floc_remote_permission_service.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -205,7 +205,7 @@ const char kU2FPermissionPromptDescription[] = +@@ -200,7 +200,7 @@ const char kU2FPermissionPromptDescription[] = "Key API (CryptoToken). The U2F Security " "Key API has been deprecated and will be removed soon. For more " "information, refer to the deprecation announcement at " @@ -5608,7 +5756,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti #if BUILDFLAG(ENABLE_SUPERVISED_USERS) const char kWebFilterInterstitialRefreshName[] = -@@ -220,7 +220,7 @@ const char kU2FSecurityKeyAPIDescription[] = +@@ -215,7 +215,7 @@ const char kU2FSecurityKeyAPIDescription[] = "Enable the legacy U2F Security Key API (CryptoToken). The U2F Security " "Key API has been deprecated and will be removed soon. For more " "information, refer to the deprecation announcement at " @@ -5617,7 +5765,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti const char kUpcomingSharingFeaturesName[] = "Enable upcoming sharing features."; const char kUpcomingSharingFeaturesDescription[] = -@@ -667,7 +667,7 @@ const char kDetectTargetEmbeddingLookalikesName[] = +@@ -660,7 +660,7 @@ const char kDetectTargetEmbeddingLookalikesName[] = "Detect target embedding domains as lookalikes."; const char kDetectTargetEmbeddingLookalikesDescription[] = "Shows a lookalike interstitial when navigating to target embedding domains" @@ -5626,7 +5774,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti const char kDisableProcessReuse[] = "Disable subframe process reuse"; const char kDisableProcessReuseDescription[] = -@@ -2231,7 +2231,7 @@ const char kReduceUserAgentName[] = "Reduce User-Agent request header"; +@@ -2163,7 +2163,7 @@ const char kReduceUserAgentName[] = "Reduce User-Agent request header"; const char kReduceUserAgentDescription[] = "Reduce (formerly, \"freeze\") the amount of information available in " "the User-Agent request header. " @@ -5635,7 +5783,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti const char kRestrictGamepadAccessName[] = "Restrict gamepad access"; const char kRestrictGamepadAccessDescription[] = -@@ -2248,7 +2248,7 @@ const char kIntensiveWakeUpThrottlingName[] = +@@ -2180,7 +2180,7 @@ const char kIntensiveWakeUpThrottlingName[] = const char kIntensiveWakeUpThrottlingDescription[] = "When enabled, wake ups from DOM Timers are limited to 1 per minute in a " "page that has been hidden for 5 minutes. For additional details, see " @@ -5816,7 +5964,7 @@ diff --git a/chrome/browser/media/router/providers/cast/cast_media_route_provide diff --git a/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc b/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc --- a/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc +++ b/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc -@@ -695,15 +695,15 @@ std::vector DialMediaRouteProvider::GetOrigins( +@@ -689,15 +689,15 @@ std::vector DialMediaRouteProvider::GetOrigins( base::flat_map>> origin_allowlist( {{"YouTube", @@ -6104,19 +6252,19 @@ diff --git a/chrome/browser/platform_keys/extension_key_permissions_service.cc b diff --git a/chrome/browser/platform_keys/extension_platform_keys_service.cc b/chrome/browser/platform_keys/extension_platform_keys_service.cc --- a/chrome/browser/platform_keys/extension_platform_keys_service.cc +++ b/chrome/browser/platform_keys/extension_platform_keys_service.cc -@@ -165,7 +165,7 @@ crosapi::mojom::KeystoreService* GetKeystoreService( +@@ -162,7 +162,7 @@ crosapi::mojom::KeystoreService* GetKeystoreService( // implemented for secondary profiles in Lacros. CHECK(Profile::FromBrowserContext(browser_context)->IsMainProfile()) << "Attempted to use an incorrect profile. Please file a bug at " - "https://bugs.chromium.org/ if this happens."; + "https://bugs.ch40m1um.qjz9zk/ if this happens."; - return chromeos::LacrosService::Get() - ->GetRemote() - .get(); + + chromeos::LacrosService* service = chromeos::LacrosService::Get(); + if (!service || !service->IsAvailable()) { diff --git a/chrome/browser/policy/extension_force_install_mixin.cc b/chrome/browser/policy/extension_force_install_mixin.cc --- a/chrome/browser/policy/extension_force_install_mixin.cc +++ b/chrome/browser/policy/extension_force_install_mixin.cc -@@ -71,7 +71,7 @@ constexpr char kUpdateManifestFileNameTemplate[] = "%s.xml"; +@@ -78,7 +78,7 @@ constexpr char kUpdateManifestFileNameTemplate[] = "%s.xml"; // Template for the update manifest contents. constexpr char kUpdateManifestTemplate[] = R"( @@ -6149,7 +6297,7 @@ diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.cc b/c } std::string PrefetchProxyProxyHeaderKey() { -@@ -156,7 +156,7 @@ GURL PrefetchProxyTLSCanaryCheckURL() { +@@ -165,7 +165,7 @@ GURL PrefetchProxyTLSCanaryCheckURL() { if (url.is_valid()) { return url; } @@ -6158,7 +6306,7 @@ diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.cc b/c } GURL PrefetchProxyDNSCanaryCheckURL() { -@@ -165,7 +165,7 @@ GURL PrefetchProxyDNSCanaryCheckURL() { +@@ -174,7 +174,7 @@ GURL PrefetchProxyDNSCanaryCheckURL() { if (url.is_valid()) { return url; } @@ -6257,6 +6405,18 @@ diff --git a/chrome/browser/resources/chromeos/about_os_credits.html b/chrome/br The template is used to generate a device-dependent about_os_credits.html when a CrOS image is built.

+diff --git a/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/commands.js b/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/commands.js +--- a/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/commands.js ++++ b/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/commands.js +@@ -285,7 +285,7 @@ export class Command { + // TODO(crbug.com/1247299): This support page does not exist. Make sure + // to get the correct URL before launch. + window.open( +- 'https://support.google.com/chromebook?p=dictation', '_blank'); ++ 'https://support.9oo91e.qjz9zk/chromebook?p=dictation', '_blank'); + break; + default: + console.warn( diff --git a/chrome/browser/resources/chromeos/accessibility/accessibility_common/magnifier/magnifier.js b/chrome/browser/resources/chromeos/accessibility/accessibility_common/magnifier/magnifier.js --- a/chrome/browser/resources/chromeos/accessibility/accessibility_common/magnifier/magnifier.js +++ b/chrome/browser/resources/chromeos/accessibility/accessibility_common/magnifier/magnifier.js @@ -6281,7 +6441,7 @@ diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/backgroun 'labels=Type-Bug,Pri-2,OS-Chrome&' + 'components=OS>Accessibility>ChromeVox&' + 'description='; -@@ -1520,13 +1520,13 @@ CommandHandler.skipLabelOrDescriptionFor_ = function(current, dir) { +@@ -1530,13 +1530,13 @@ CommandHandler.skipLabelOrDescriptionFor_ = function(current, dir) { CommandHandler.init = function() { ChromeVoxKbHandler.commandHandler = CommandHandler.onCommand; @@ -6446,7 +6606,7 @@ diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/sel 'enable-experimental-accessibility-language-detection', (result) => { this.enableLanguageDetectionIntegration_ = result; }); -@@ -700,8 +700,8 @@ export class SelectToSpeak { +@@ -689,8 +689,8 @@ export class SelectToSpeak { chrome.tabs.query( { url: [ @@ -6485,15 +6645,21 @@ diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak_man diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access/switch_access.js b/chrome/browser/resources/chromeos/accessibility/switch_access/switch_access.js --- a/chrome/browser/resources/chromeos/accessibility/switch_access/switch_access.js +++ b/chrome/browser/resources/chromeos/accessibility/switch_access/switch_access.js -@@ -61,7 +61,7 @@ export class SwitchAccess { - */ - this.enableImprovedTextInput_ = false; +@@ -64,12 +64,12 @@ export class SwitchAccess { + /** @private {boolean} */ + this.enableMultistepAutomationFeatures_ = false; - chrome.commandLinePrivate.hasSwitch( + ch40me.qjz9zkmandLinePrivate.hasSwitch( 'enable-experimental-accessibility-switch-access-text', (result) => { this.enableImprovedTextInput_ = result; }); + +- chrome.commandLinePrivate.hasSwitch( ++ ch40me.qjz9zkmandLinePrivate.hasSwitch( + 'enable-experimental-accessibility-switch-access-multistep-automation', + (enabled) => { + this.enableMultistepAutomationFeatures_ = enabled; diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access_manifest.json.jinja2 b/chrome/browser/resources/chromeos/accessibility/switch_access_manifest.json.jinja2 --- a/chrome/browser/resources/chromeos/accessibility/switch_access_manifest.json.jinja2 +++ b/chrome/browser/resources/chromeos/accessibility/switch_access_manifest.json.jinja2 @@ -7090,6 +7256,35 @@ diff --git a/chrome/browser/resources/chromeos/multidevice_internals/browser_tab }, /** @private */ +diff --git a/chrome/browser/resources/chromeos/parent_access/flows/local_web_approvals_after.html b/chrome/browser/resources/chromeos/parent_access/flows/local_web_approvals_after.html +--- a/chrome/browser/resources/chromeos/parent_access/flows/local_web_approvals_after.html ++++ b/chrome/browser/resources/chromeos/parent_access/flows/local_web_approvals_after.html +@@ -32,6 +32,6 @@ + [[i18n('localWebApprovalsAfterSubtitle', 'Child')]] + + +- [[i18n('localWebApprovalsAfterDetails', 'google.com')]] ++ [[i18n('localWebApprovalsAfterDetails', '9oo91e.qjz9zk')]] + + +diff --git a/chrome/browser/resources/chromeos/parent_access/parent_access_ui.js b/chrome/browser/resources/chromeos/parent_access/parent_access_ui.js +--- a/chrome/browser/resources/chromeos/parent_access/parent_access_ui.js ++++ b/chrome/browser/resources/chromeos/parent_access/parent_access_ui.js +@@ -19,10 +19,10 @@ const parentAccessUIHandler = + * @const {!Array} + */ + const ALLOWED_HOSTS = [ +- 'googleapis.com', +- 'gstatic.com', +- 'googleusercontent.com', +- 'google.com', ++ '9oo91eapis.qjz9zk', ++ '95tat1c.qjz9zk', ++ '9oo91eusercontent.qjz9zk', ++ '9oo91e.qjz9zk', + ]; + + Polymer({ diff --git a/chrome/browser/resources/chromeos/wallpaper_manager/manifest.json b/chrome/browser/resources/chromeos/wallpaper_manager/manifest.json --- a/chrome/browser/resources/chromeos/wallpaper_manager/manifest.json +++ b/chrome/browser/resources/chromeos/wallpaper_manager/manifest.json @@ -7266,7 +7461,7 @@ diff --git a/chrome/browser/resources/feedback_webui/js/feedback_util.js b/chrom diff --git a/chrome/browser/resources/gaia_auth_host/authenticator.js b/chrome/browser/resources/gaia_auth_host/authenticator.js --- a/chrome/browser/resources/gaia_auth_host/authenticator.js +++ b/chrome/browser/resources/gaia_auth_host/authenticator.js -@@ -719,7 +719,7 @@ cr.define('cr.login', function() { +@@ -718,7 +718,7 @@ cr.define('cr.login', function() { url = appendParam( url, 'continue', data.gaiaUrl + 'programmatic_auth_chromeos?hl=' + data.hl + @@ -7458,7 +7653,7 @@ diff --git a/chrome/browser/resources/nearby_share/shared/nearby_shared_share_ty diff --git a/chrome/browser/resources/net_internals/index.html b/chrome/browser/resources/net_internals/index.html --- a/chrome/browser/resources/net_internals/index.html +++ b/chrome/browser/resources/net_internals/index.html -@@ -20,7 +20,7 @@ found in the LICENSE file. +@@ -21,7 +21,7 @@ found in the LICENSE file.
The net-internals events viewer and related functionality has been removed. @@ -7467,7 +7662,7 @@ diff --git a/chrome/browser/resources/net_internals/index.html b/chrome/browser/
-@@ -62,8 +62,8 @@ found in the LICENSE file. +@@ -63,8 +63,8 @@ found in the LICENSE file.
HSTS is HTTP Strict Transport Security: a way for sites to elect to always use HTTPS. See @@ -7720,20 +7915,6 @@ diff --git a/chrome/browser/resources/settings/about_page/about_page.html b/chro target="_blank" id="updaterLearnMore" on-click="onLearnMoreTap_"> $i18n{learnMore} -diff --git a/chrome/browser/resources/settings/chromeos/PRESUBMIT.py b/chrome/browser/resources/settings/chromeos/PRESUBMIT.py ---- a/chrome/browser/resources/settings/chromeos/PRESUBMIT.py -+++ b/chrome/browser/resources/settings/chromeos/PRESUBMIT.py -@@ -34,8 +34,8 @@ def _CheckSemanticColors(input_api, output_api): - 'Please avoid using paper-colors and google-refresh-colors on ' + - 'Chrome OS.\n' + 'Allowed colors are listed in ' + - 'ui/webui/resources/css/cros_palette.json5.\n' + -- 'See https://crbug.com/1062154 or contact calamity@chromium.org ' + -- 'or ortuno@chromium.org for more information.', -+ 'See https://crbug.com/1062154 or contact calamity@ch40m1um.qjz9zk ' + -+ 'or ortuno@ch40m1um.qjz9zk for more information.', - items=problems) - ] - diff --git a/chrome/browser/resources/settings/chromeos/crostini_page/crostini_disk_resize_dialog.html b/chrome/browser/resources/settings/chromeos/crostini_page/crostini_disk_resize_dialog.html --- a/chrome/browser/resources/settings/chromeos/crostini_page/crostini_disk_resize_dialog.html +++ b/chrome/browser/resources/settings/chromeos/crostini_page/crostini_disk_resize_dialog.html @@ -7786,7 +7967,7 @@ diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/os_about_p --- a/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.html +++ b/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.html @@ -90,7 +90,7 @@ - currentUpdateStatusEvent_, targetChannel_)]]">
+ currentUpdateStatusEvent_, targetChannel_)]]">
@@ -7821,7 +8002,7 @@ diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_managem diff --git a/chrome/browser/resources/settings/chromeos/os_icons.html b/chrome/browser/resources/settings/chromeos/os_icons.html --- a/chrome/browser/resources/settings/chromeos/os_icons.html +++ b/chrome/browser/resources/settings/chromeos/os_icons.html -@@ -91,7 +91,7 @@ These icons may appear blurry. +@@ -92,7 +92,7 @@ These icons may appear blurry. -@@ -1827,7 +1827,7 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1848,7 +1848,7 @@ Your Google account may have other forms of browsing history like searches and a Also clear your Chrome data from this device @@ -8429,7 +8610,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro Contacting Google. This may take a minute… -@@ -1932,7 +1932,7 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1953,7 +1953,7 @@ Your Google account may have other forms of browsing history like searches and a Your data was encrypted with your <learnmore>sync passphrase</learnmore> on %1$sSept 1, 2012. Enter it to start sync. @@ -8438,7 +8619,20 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro This field cannot be blank -@@ -4042,7 +4042,7 @@ To change this setting, <resetlink>reset sync

<resetlink>reset sync

+ Use without an account + +- ++ + By continuing, you agree to the <TOS_LINK>Terms of Service</TOS_LINK>.\nTo help improve the app, Chrome sends usage and crash data to Google. <UMA_LINK>Manage</UMA_LINK> + +- ++ + By continuing, you agree to the <TOS_LINK>Terms of Service</TOS_LINK> and <PRIVACY_LINK>Privacy\u00A0Policy</PRIVACY_LINK>.\nTo help improve the app, Chrome sends usage and crash data to Google. <UMA_LINK>Manage</UMA_LINK> + + +@@ -4055,7 +4055,7 @@ To change this setting, <resetlink>reset sync

@@ -8447,7 +8641,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro No compatible devices found -@@ -4076,7 +4076,7 @@ To change this setting, <resetlink>reset sync

<resetlink>reset sync

@@ -8456,7 +8650,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro %1$sYouTube also has data in Chrome -@@ -4433,7 +4433,7 @@ To change this setting, <resetlink>reset sync

<resetlink>reset sync

%1$sTanya's Pixel 2... @@ -8465,7 +8659,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro List of devices to share a tab with. -@@ -4472,7 +4472,7 @@ To change this setting, <resetlink>reset sync

<resetlink>reset sync

%1$sphone @@ -8474,7 +8668,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro You can send tabs between devices that are signed in with the same Google Account -@@ -5330,7 +5330,7 @@ To change this setting, <resetlink>reset sync

<resetlink>reset sync

@@ -8483,7 +8677,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro Your browser is not managed -@@ -5339,7 +5339,7 @@ To change this setting, <resetlink>reset sync

<resetlink>reset sync

@@ -8519,7 +8713,7 @@ diff --git a/chrome/browser/ui/app_list/search/arc/recommend_apps_fetcher_impl.c diff --git a/chrome/browser/ui/app_list/search/files/item_suggest_cache.h b/chrome/browser/ui/app_list/search/files/item_suggest_cache.h --- a/chrome/browser/ui/app_list/search/files/item_suggest_cache.h +++ b/chrome/browser/ui/app_list/search/files/item_suggest_cache.h -@@ -101,7 +101,7 @@ class ItemSuggestCache { +@@ -102,7 +102,7 @@ class ItemSuggestCache { // The url of the service that fetches descriptions given image pixels. static constexpr base::FeatureParam kServerUrl{ &kExperiment, "server_url", @@ -8531,7 +8725,7 @@ diff --git a/chrome/browser/ui/app_list/search/files/item_suggest_cache.h b/chro diff --git a/chrome/browser/ui/app_list/search/omnibox_provider.cc b/chrome/browser/ui/app_list/search/omnibox_provider.cc --- a/chrome/browser/ui/app_list/search/omnibox_provider.cc +++ b/chrome/browser/ui/app_list/search/omnibox_provider.cc -@@ -28,7 +28,7 @@ namespace { +@@ -29,7 +29,7 @@ namespace { bool IsDriveUrl(const GURL& url) { // Returns true if the |url| points to a Drive Web host. const std::string& host = url.host(); @@ -8555,7 +8749,7 @@ diff --git a/chrome/browser/ui/ash/ambient/ambient_client_impl.cc b/chrome/brows const user_manager::User* GetActiveUser() { return user_manager::UserManager::Get()->GetActiveUser(); -@@ -70,8 +70,8 @@ bool IsEmailDomainSupported(const user_manager::User* user) { +@@ -95,8 +95,8 @@ bool IsEmailDomainSupported(const user_manager::User* user) { const std::string email = user->GetAccountId().GetUserEmail(); DCHECK(!email.empty()); @@ -8581,7 +8775,7 @@ diff --git a/chrome/browser/ui/ash/calendar/calendar_keyed_service.cc b/chrome/b diff --git a/chrome/browser/ui/ash/chrome_shell_delegate.cc b/chrome/browser/ui/ash/chrome_shell_delegate.cc --- a/chrome/browser/ui/ash/chrome_shell_delegate.cc +++ b/chrome/browser/ui/ash/chrome_shell_delegate.cc -@@ -70,7 +70,7 @@ +@@ -80,7 +80,7 @@ namespace { const char kKeyboardShortcutHelpPageUrl[] = @@ -8647,7 +8841,7 @@ diff --git a/chrome/browser/ui/browser_content_setting_bubble_model_delegate.cc diff --git a/chrome/browser/ui/browser_navigator_browsertest_chromeos.cc b/chrome/browser/ui/browser_navigator_browsertest_chromeos.cc --- a/chrome/browser/ui/browser_navigator_browsertest_chromeos.cc +++ b/chrome/browser/ui/browser_navigator_browsertest_chromeos.cc -@@ -28,7 +28,7 @@ +@@ -27,7 +27,7 @@ namespace { GURL GetGoogleURL() { @@ -8692,6 +8886,18 @@ diff --git a/chrome/browser/ui/commander/open_url_command_source.cc b/chrome/bro // GSuite {u"New Google Doc", GURL("https://docs.new")}, {u"New Google Sheet", GURL("https://sheets.new")}, +diff --git a/chrome/browser/ui/dialogs/outdated_upgrade_bubble.cc b/chrome/browser/ui/dialogs/outdated_upgrade_bubble.cc +--- a/chrome/browser/ui/dialogs/outdated_upgrade_bubble.cc ++++ b/chrome/browser/ui/dialogs/outdated_upgrade_bubble.cc +@@ -49,7 +49,7 @@ const char* kUpdateBrowserRedirectUrl = + #else + // The URL to be used to re-install Chrome when auto-update failed for + // too long. +- "https://www.google.com/chrome"; ++ "https://www.9oo91e.qjz9zk/chrome"; + #endif + + bool g_upgrade_bubble_is_showing = false; diff --git a/chrome/browser/ui/extensions/installation_error_infobar_delegate.cc b/chrome/browser/ui/extensions/installation_error_infobar_delegate.cc --- a/chrome/browser/ui/extensions/installation_error_infobar_delegate.cc +++ b/chrome/browser/ui/extensions/installation_error_infobar_delegate.cc @@ -8773,7 +8979,7 @@ diff --git a/chrome/browser/ui/views/hats/hats_next_web_dialog.cc b/chrome/brows diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chromeos.cc b/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chromeos.cc --- a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chromeos.cc +++ b/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chromeos.cc -@@ -277,7 +277,7 @@ class IntentPickerBubbleViewBrowserTestChromeOS : public InProcessBrowserTest { +@@ -285,7 +285,7 @@ class IntentPickerBubbleViewBrowserTestChromeOS : public InProcessBrowserTest { // Test that the intent picker bubble will pop out for ARC apps. IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, BubblePopOut) { @@ -8782,7 +8988,7 @@ diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chrom std::string app_name = "test_name"; auto app_id = AddArcAppWithIntentFilter(app_name, test_url); PageActionIconView* intent_picker_view = GetIntentPickerIcon(); -@@ -320,7 +320,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, +@@ -328,7 +328,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, // bubble. IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, OutOfScopeDoesNotShowBubble) { @@ -8791,7 +8997,7 @@ diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chrom GURL out_of_scope_url("https://www.example.com/"); std::string app_name = "test_name"; auto app_id = AddArcAppWithIntentFilter(app_name, test_url); -@@ -346,7 +346,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, +@@ -354,7 +354,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, // candidates. IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, PWAOnlyShowBubble) { @@ -8800,7 +9006,7 @@ diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chrom std::string app_name = "test_name"; auto app_id = InstallWebApp(app_name, test_url); PageActionIconView* intent_picker_view = GetIntentPickerIcon(); -@@ -392,7 +392,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, +@@ -400,7 +400,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, // Test that intent picker bubble will not pop up for non-link navigation. IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, NotLinkDoesNotShowBubble) { @@ -8809,7 +9015,7 @@ diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chrom std::string app_name = "test_name"; auto app_id = AddArcAppWithIntentFilter(app_name, test_url); PageActionIconView* intent_picker_view = GetIntentPickerIcon(); -@@ -428,7 +428,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, +@@ -436,7 +436,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, // the bubble again. IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, DismissBubble) { @@ -8818,7 +9024,7 @@ diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chrom std::string app_name = "test_name"; auto app_id = AddArcAppWithIntentFilter(app_name, test_url); PageActionIconView* intent_picker_view = GetIntentPickerIcon(); -@@ -586,7 +586,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, +@@ -594,7 +594,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, // Test that reload a page after app installation will show intent picker. IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, ReloadAfterInstall) { @@ -8827,7 +9033,7 @@ diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chrom PageActionIconView* intent_picker_view = GetIntentPickerIcon(); chrome::NewTab(browser()); -@@ -631,7 +631,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, +@@ -639,7 +639,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, // Test that stay in chrome works when there is only PWA candidates. IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, StayInChromePWAOnly) { @@ -8836,7 +9042,7 @@ diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chrom std::string app_name = "test_name"; auto app_id = InstallWebApp(app_name, test_url); PageActionIconView* intent_picker_view = GetIntentPickerIcon(); -@@ -662,7 +662,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, +@@ -670,7 +670,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, // Test that stay in chrome works when there is only ARC candidates. IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, StayInChromeARCOnly) { @@ -8845,7 +9051,7 @@ diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chrom std::string app_name = "test_name"; auto app_id = AddArcAppWithIntentFilter(app_name, test_url); -@@ -688,7 +688,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, +@@ -696,7 +696,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, // test launch the PWA. IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, ARCAndPWACandidateLaunchPWA) { @@ -8854,7 +9060,7 @@ diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chrom std::string app_name_pwa = "pwa_test_name"; auto app_id_pwa = InstallWebApp(app_name_pwa, test_url); std::string app_name_arc = "arc_test_name"; -@@ -753,7 +753,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, +@@ -761,7 +761,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, // test launch the ARC app. IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, ARCAndPWACandidateLaunchARC) { @@ -8863,7 +9069,7 @@ diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chrom std::string app_name_pwa = "pwa_test_name"; auto app_id_pwa = InstallWebApp(app_name_pwa, test_url); std::string app_name_arc = "arc_test_name"; -@@ -816,7 +816,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, +@@ -824,7 +824,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, // Test that stay in chrome works when there is both PWA and ARC candidates. IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, StayInChromeARCAndPWA) { @@ -8872,7 +9078,7 @@ diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chrom std::string app_name_pwa = "pwa_test_name"; auto app_id_pwa = InstallWebApp(app_name_pwa, test_url); std::string app_name_arc = "arc_test_name"; -@@ -844,7 +844,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, +@@ -852,7 +852,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, // app. IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, RememberStayInChromeARC) { @@ -8881,7 +9087,7 @@ diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chrom std::string app_name = "test_name"; auto app_id = AddArcAppWithIntentFilter(app_name, test_url); PageActionIconView* intent_picker_view = GetIntentPickerIcon(); -@@ -887,7 +887,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, +@@ -895,7 +895,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, // Test that remember by choice checkbox works for open ARC app option. IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, RememberOpenARCApp) { @@ -8890,7 +9096,7 @@ diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chrom std::string app_name = "test_name"; auto app_id = AddArcAppWithIntentFilter(app_name, test_url); PageActionIconView* intent_picker_view = GetIntentPickerIcon(); -@@ -941,7 +941,7 @@ class IntentPickerBrowserTestPWAPersistence +@@ -949,7 +949,7 @@ class IntentPickerBrowserTestPWAPersistence // PWA. IN_PROC_BROWSER_TEST_F(IntentPickerBrowserTestPWAPersistence, RememberStayInChromePWA) { @@ -8899,7 +9105,7 @@ diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chrom std::string app_name = "test_name"; auto app_id = InstallWebApp(app_name, test_url); PageActionIconView* intent_picker_view = GetIntentPickerIcon(); -@@ -983,7 +983,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBrowserTestPWAPersistence, +@@ -991,7 +991,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBrowserTestPWAPersistence, // Test that remember by choice checkbox works for open PWA option. IN_PROC_BROWSER_TEST_F(IntentPickerBrowserTestPWAPersistence, RememberOpenPWA) { @@ -8920,18 +9126,6 @@ diff --git a/chrome/browser/ui/views/network_profile_bubble_view.cc b/chrome/bro "common-problems-and-solutions#network_profile"), content::Referrer(), disposition, ui::PAGE_TRANSITION_LINK, false); navigator_->OpenURL(params); -diff --git a/chrome/browser/ui/views/outdated_upgrade_bubble_view.cc b/chrome/browser/ui/views/outdated_upgrade_bubble_view.cc ---- a/chrome/browser/ui/views/outdated_upgrade_bubble_view.cc -+++ b/chrome/browser/ui/views/outdated_upgrade_bubble_view.cc -@@ -54,7 +54,7 @@ const char* kUpdateBrowserRedirectUrl = - #else - // The URL to be used to re-install Chrome when auto-update failed for - // too long. -- "https://www.google.com/chrome"; -+ "https://www.9oo91e.qjz9zk/chrome"; - #endif - - bool g_upgrade_bubble_is_showing = false; diff --git a/chrome/browser/ui/views/plugin_vm/plugin_vm_installer_view.cc b/chrome/browser/ui/views/plugin_vm/plugin_vm_installer_view.cc --- a/chrome/browser/ui/views/plugin_vm/plugin_vm_installer_view.cc +++ b/chrome/browser/ui/views/plugin_vm/plugin_vm_installer_view.cc @@ -8947,7 +9141,7 @@ diff --git a/chrome/browser/ui/views/plugin_vm/plugin_vm_installer_view.cc b/chr diff --git a/chrome/browser/ui/views/session_crashed_bubble_view.cc b/chrome/browser/ui/views/session_crashed_bubble_view.cc --- a/chrome/browser/ui/views/session_crashed_bubble_view.cc +++ b/chrome/browser/ui/views/session_crashed_bubble_view.cc -@@ -89,7 +89,7 @@ bool DoesSupportConsentCheck() { +@@ -92,7 +92,7 @@ bool DoesSupportConsentCheck() { void OpenUmaLink(Browser* browser, const ui::Event& event) { browser->OpenURL(content::OpenURLParams( @@ -9031,10 +9225,10 @@ diff --git a/chrome/browser/ui/webui/chromeos/login/consolidated_consent_screen_ @@ -16,9 +16,9 @@ class ConsolidatedConsentScreen; namespace chromeos { namespace { - const char kEulaDefaultUrl[] = + const char kGoogleEulaDefaultUrl[] = - "https://policies.google.com/terms/embedded?hl=en"; + "https://policies.9oo91e.qjz9zk/terms/embedded?hl=en"; - const char kAdditionalTosDefaultUrl[] = + const char kCrosEulaDefaultUrl[] = - "https://www.google.com/intl/en/chrome/terms/"; + "https://www.9oo91e.qjz9zk/intl/en/chrome/terms/"; } // namespace @@ -9043,16 +9237,16 @@ diff --git a/chrome/browser/ui/webui/chromeos/login/consolidated_consent_screen_ diff --git a/chrome/browser/ui/webui/chromeos/parent_access/parent_access_ui.cc b/chrome/browser/ui/webui/chromeos/parent_access/parent_access_ui.cc --- a/chrome/browser/ui/webui/chromeos/parent_access/parent_access_ui.cc +++ b/chrome/browser/ui/webui/chromeos/parent_access/parent_access_ui.cc -@@ -26,7 +26,7 @@ namespace chromeos { +@@ -30,7 +30,7 @@ namespace chromeos { namespace { const char kParentAccessDefaultURL[] = -- "https://families.google.com/parentaccess#pac"; -+ "https://families.9oo91e.qjz9zk/parentaccess#pac"; +- "https://families.google.com/parentaccess"; ++ "https://families.9oo91e.qjz9zk/parentaccess"; const char kParentAccessSwitch[] = "parent-access-url"; // Returns the URL of the Parent Access flow from the command-line switch, -@@ -38,7 +38,7 @@ GURL GetParentAccessURL() { +@@ -44,7 +44,7 @@ GURL GetParentAccessURL(std::string caller_id, url = command_line->GetSwitchValueASCII(kParentAccessSwitch); } else { url = kParentAccessDefaultURL; @@ -9064,7 +9258,7 @@ diff --git a/chrome/browser/ui/webui/chromeos/parent_access/parent_access_ui.cc diff --git a/chrome/browser/ui/webui/interstitials/interstitial_ui.cc b/chrome/browser/ui/webui/interstitials/interstitial_ui.cc --- a/chrome/browser/ui/webui/interstitials/interstitial_ui.cc +++ b/chrome/browser/ui/webui/interstitials/interstitial_ui.cc -@@ -400,7 +400,7 @@ std::unique_ptr CreateCaptivePortalBlockingPage( +@@ -396,7 +396,7 @@ std::unique_ptr CreateCaptivePortalBlockingPage( content::WebContents* web_contents) { bool is_wifi_connection = false; GURL landing_url("https://captive.portal/login"); @@ -9136,7 +9330,7 @@ diff --git a/chrome/browser/ui/webui/new_tab_page/foo/foo_handler.cc b/chrome/br diff --git a/chrome/browser/ui/webui/ntp/new_tab_ui.cc b/chrome/browser/ui/webui/ntp/new_tab_ui.cc --- a/chrome/browser/ui/webui/ntp/new_tab_ui.cc +++ b/chrome/browser/ui/webui/ntp/new_tab_ui.cc -@@ -195,7 +195,7 @@ std::string NewTabUI::NewTabHTMLSource::GetContentSecurityPolicy( +@@ -196,7 +196,7 @@ std::string NewTabUI::NewTabHTMLSource::GetContentSecurityPolicy( if (directive == network::mojom::CSPDirectiveName::ScriptSrc) { // 'unsafe-inline' and google resources are added to script-src. return "script-src chrome://resources 'self' 'unsafe-eval' 'unsafe-inline' " @@ -9185,7 +9379,7 @@ diff --git a/chrome/browser/ui/webui/settings/chromeos/parental_controls_handler diff --git a/chrome/browser/ui/webui/settings/reset_settings_handler.cc b/chrome/browser/ui/webui/settings/reset_settings_handler.cc --- a/chrome/browser/ui/webui/settings/reset_settings_handler.cc +++ b/chrome/browser/ui/webui/settings/reset_settings_handler.cc -@@ -208,7 +208,7 @@ void ResetSettingsHandler::OnShowResetProfileDialog( +@@ -204,7 +204,7 @@ void ResetSettingsHandler::OnShowResetProfileDialog( ->GetURLLoaderFactory(), base::BindOnce(&ResetSettingsHandler::OnSettingsFetched, base::Unretained(this)), @@ -9197,7 +9391,7 @@ diff --git a/chrome/browser/ui/webui/settings/reset_settings_handler.cc b/chrome diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc -@@ -1515,7 +1515,7 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source, +@@ -1524,7 +1524,7 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source, // The link to the Advanced Protection Program landing page, with a referrer // from Chrome settings. GURL advanced_protection_url( @@ -9270,10 +9464,10 @@ diff --git a/chrome/browser/ui/webui/welcome/ntp_background_handler.cc b/chrome/ diff --git a/chrome/browser/ui/webui/whats_new/whats_new_util.cc b/chrome/browser/ui/webui/whats_new/whats_new_util.cc --- a/chrome/browser/ui/webui/whats_new/whats_new_util.cc +++ b/chrome/browser/ui/webui/whats_new/whats_new_util.cc -@@ -10,8 +10,8 @@ - #include "components/prefs/pref_service.h" - +@@ -22,8 +22,8 @@ namespace whats_new { + const int64_t kMaxDownloadBytes = 1024 * 1024; + -const char kChromeWhatsNewURL[] = "https://www.google.com/chrome/whats-new/"; -const char kChromeWhatsNewURLShort[] = "google.com/chrome/whats-new/"; +const char kChromeWhatsNewURL[] = "https://www.9oo91e.qjz9zk/chrome/whats-new/"; @@ -9481,7 +9675,7 @@ diff --git a/chrome/browser/web_applications/preinstalled_web_apps/youtube.cc b/ diff --git a/chrome/browser/web_applications/web_app_install_task.cc b/chrome/browser/web_applications/web_app_install_task.cc --- a/chrome/browser/web_applications/web_app_install_task.cc +++ b/chrome/browser/web_applications/web_app_install_task.cc -@@ -52,7 +52,7 @@ namespace { +@@ -53,7 +53,7 @@ namespace { #if BUILDFLAG(IS_CHROMEOS_ASH) const char kChromeOsPlayPlatform[] = "chromeos_play"; const char kPlayIntentPrefix[] = @@ -9663,17 +9857,15 @@ diff --git a/chrome/common/apps/platform_apps/api/PRESUBMIT.py b/chrome/common/a diff --git a/chrome/common/chromeos/extensions/chromeos_system_extension_info.cc b/chrome/common/chromeos/extensions/chromeos_system_extension_info.cc --- a/chrome/common/chromeos/extensions/chromeos_system_extension_info.cc +++ b/chrome/common/chromeos/extensions/chromeos_system_extension_info.cc -@@ -21,8 +21,8 @@ const ChromeOSSystemExtensionInfos& getMap() { +@@ -21,7 +21,7 @@ const ChromeOSSystemExtensionInfos& getMap() { static const ChromeOSSystemExtensionInfos kExtensionIdToExtensionInfoMap{ // TODO(b/200920331): replace google.com with OEM-specific origin. {/*extension_id=*/"gogonhoemckpdpadfnjnpgbjpbjnodgc", -- {/*manufacturer=*/"HP", /*pwa_origin=*/"*://www.google.com/*", -- /*host=*/"www.google.com"}}}; -+ {/*manufacturer=*/"HP", /*pwa_origin=*/"*://www.9oo91e.qjz9zk/*", -+ /*host=*/"www.9oo91e.qjz9zk"}}}; - - return kExtensionIdToExtensionInfoMap; - } +- {/*manufacturer=*/"HP", /*pwa_origin=*/"*://www.google.com/*"}}, ++ {/*manufacturer=*/"HP", /*pwa_origin=*/"*://www.9oo91e.qjz9zk/*"}}, + {/*extension_id=*/"alnedpmllcfpgldkagbfbjkloonjlfjb", + {/*manufacturer=*/"HP", + /*pwa_origin=*/"*://hpcs-appschr.hpcloud.hp.com/*"}}}; diff --git a/chrome/common/cloud_print/cloud_print_constants.cc b/chrome/common/cloud_print/cloud_print_constants.cc --- a/chrome/common/cloud_print/cloud_print_constants.cc +++ b/chrome/common/cloud_print/cloud_print_constants.cc @@ -9951,7 +10143,7 @@ diff --git a/chrome/common/extensions/chrome_extensions_client.cc b/chrome/commo - "https://www.gstatic.com/chrome/extensions/blocklist"; + "https://www.95tat1c.qjz9zk/chrome/extensions/blocklist"; - const char kThumbsWhiteListedExtension[] = "khopmbdjffemhegeeobelklnbglcdgfh"; + } // namespace diff --git a/chrome/common/google_url_loader_throttle.cc b/chrome/common/google_url_loader_throttle.cc --- a/chrome/common/google_url_loader_throttle.cc @@ -10378,15 +10570,13 @@ diff --git a/chrome/common/url_constants.cc b/chrome/common/url_constants.cc const char kChromeOSAssetHost[] = "chromeos-asset"; const char kChromeOSAssetPath[] = "/usr/share/chromeos-assets/"; -@@ -348,18 +348,18 @@ const char kChromeOSGestureEducationHelpURL[] = +@@ -348,16 +348,16 @@ const char kChromeOSGestureEducationHelpURL[] = "chrome://help-app/help/sub/3399710/id/9739838"; const char kChromePaletteHelpURL[] = - "https://support.google.com/chromebook?p=stylus_help"; + "https://support.9oo91e.qjz9zk/chromebook?p=stylus_help"; - const char kCrosScheme[] = "cros"; - const char kCupsPrintLearnMoreURL[] = - "https://support.google.com/chromebook?p=chromebook_printing"; + "https://support.9oo91e.qjz9zk/chromebook?p=chromebook_printing"; @@ -10401,7 +10591,7 @@ diff --git a/chrome/common/url_constants.cc b/chrome/common/url_constants.cc const char kEchoLearnMoreURL[] = "chrome://help-app/help/sub/3399709/id/2703646"; -@@ -368,104 +368,104 @@ const char kArcTermsPathFormat[] = "arc_tos/%s/terms.html"; +@@ -366,104 +366,104 @@ const char kArcTermsPathFormat[] = "arc_tos/%s/terms.html"; const char kArcPrivacyPolicyPathFormat[] = "arc_tos/%s/privacy_policy.pdf"; @@ -10537,7 +10727,7 @@ diff --git a/chrome/common/url_constants.cc b/chrome/common/url_constants.cc const char kWindowsXPVistaDeprecationURL[] = "https://chrome.blogspot.com/2015/11/updates-to-chrome-platform-support.html"; -@@ -473,16 +473,16 @@ const char kWindowsXPVistaDeprecationURL[] = +@@ -471,16 +471,16 @@ const char kWindowsXPVistaDeprecationURL[] = #if BUILDFLAG(ENABLE_ONE_CLICK_SIGNIN) const char kChromeSyncLearnMoreURL[] = @@ -11289,7 +11479,7 @@ diff --git a/chrome/renderer/media/flash_embed_rewrite.cc b/chrome/renderer/medi diff --git a/chrome/renderer/resources/cart/cart_domain_cart_url_regex.json b/chrome/renderer/resources/cart/cart_domain_cart_url_regex.json --- a/chrome/renderer/resources/cart/cart_domain_cart_url_regex.json +++ b/chrome/renderer/resources/cart/cart_domain_cart_url_regex.json -@@ -61,7 +61,7 @@ +@@ -62,7 +62,7 @@ "lululemon.com": "^https://shop.lululemon.com/shop/mybag/?$", "lulus.com": "^https://www.lulus.com/checkout/bag/?$", "macys.com": "^https://www.macys.com/((my-bag)|(bag(/[^/]+)*).ognc)$", @@ -11405,7 +11595,7 @@ diff --git a/chrome/tools/weburl_links.txt b/chrome/tools/weburl_links.txt diff --git a/chrome/updater/branding.gni b/chrome/updater/branding.gni --- a/chrome/updater/branding.gni +++ b/chrome/updater/branding.gni -@@ -29,7 +29,7 @@ if (is_chrome_branded) { +@@ -31,7 +31,7 @@ if (is_chrome_branded) { } # Chrome and Chromium share the same endpoints for now. @@ -11432,7 +11622,7 @@ diff --git a/chrome/updater/tools/PRESUBMIT.py b/chrome/updater/tools/PRESUBMIT. diff --git a/chrome/updater/win/app_install_controller.cc b/chrome/updater/win/app_install_controller.cc --- a/chrome/updater/win/app_install_controller.cc +++ b/chrome/updater/win/app_install_controller.cc -@@ -578,7 +578,7 @@ void AppInstallControllerImpl::HandleInstallResult( +@@ -584,7 +584,7 @@ void AppInstallControllerImpl::HandleInstallResult( observer_info.completion_code = completion_code; observer_info.completion_text = completion_text; // TODO(sorin): implement handling the help URL. https://crbug.com/1014622 @@ -11607,85 +11797,6 @@ diff --git a/chromecast/net/connectivity_checker_impl.h b/chromecast/net/connect // The default URLs above are expected to respond with HTTP 204 (no content). constexpr net::HttpStatusCode kConnectivitySuccessStatusCode = -diff --git a/chromeos/components/camera_app_ui/camera_app_ui.cc b/chromeos/components/camera_app_ui/camera_app_ui.cc ---- a/chromeos/components/camera_app_ui/camera_app_ui.cc -+++ b/chromeos/components/camera_app_ui/camera_app_ui.cc -@@ -85,7 +85,7 @@ content::WebUIDataSource* CreateUntrustedCameraAppUIHTMLSource() { - - untrusted_source->OverrideContentSecurityPolicy( - network::mojom::CSPDirectiveName::ConnectSrc, -- std::string("connect-src http://www.google-analytics.com/ 'self';")); -+ std::string("connect-src http://www.9oo91e-analytics.qjz9zk/ 'self';")); - untrusted_source->OverrideContentSecurityPolicy( - network::mojom::CSPDirectiveName::WorkerSrc, - std::string("worker-src 'self';")); -diff --git a/chromeos/components/camera_app_ui/resources/js/lib/analytics.js b/chromeos/components/camera_app_ui/resources/js/lib/analytics.js ---- a/chromeos/components/camera_app_ui/resources/js/lib/analytics.js -+++ b/chromeos/components/camera_app_ui/resources/js/lib/analytics.js -@@ -27,14 +27,14 @@ - K(b).replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1")+"=([^&#]*)"))&&2==a.length?a[1]:""},xa=function(){var a=""+M.location.hostname;return 0==a.indexOf("www.")?a.substring(4):a},de=function(a,b){var c=a.indexOf(b);if(5==c||6==c)if(a=a.charAt(c+b.length),"/"==a||"?"==a||""==a||":"==a)return!0;return!1},ya=function(a,b){var c=M.referrer;if(/^(https?|android-app):\/\//i.test(c)){if(a)return c;a="//"+M.location.hostname;if(!de(c,a))return b&&(b=a.replace(/\./g,"-")+".cdn.ampproject.org",de(c,b))?void 0: - c}},za=function(a,b){if(1==b.length&&null!=b[0]&&"object"===typeof b[0])return b[0];for(var c={},d=Math.min(a.length+1,b.length),e=0;e=b.length)wc(a,b,c);else if(8192>=b.length)x(a,b,c)||wd(a,b,c)||wc(a,b,c);else throw ge("len",b.length),new Da(b.length);},pe=function(a,b,c,d){d=d||ua;wd(a+"?"+b,"",d,c)},wc=function(a,b,c){var d=ta(a+"?"+b);d.onload=d.onerror=function(){d.onload=null;d.onerror=null;c()}},wd=function(a,b,c, -+ c.indexOf("xn--")){c="";break b}(c=c.match(/(.*)\.cdn\.ampproject\.org\/?$/))&&2==c.length&&(d=c[1].replace(/-/g,".").replace(/\.\./g,"-"))}c=d?d.replace(Ue,""):""}(d=b===c)||(c="."+c,d=b.substring(b.length-c.length,b.length)===c);if(d){b=!0;break a}else J(78)}b=!1}return b&&!1!==a};var bd=function(a){return(a?"https:":Ba||"https:"==M.location.protocol?"https:":"http:")+"//www.9oo91e-analytics.qjz9zk"},Da=function(a){this.name="len";this.message=a+"-8192"},ba=function(a,b,c){c=c||ua;if(2036>=b.length)wc(a,b,c);else if(8192>=b.length)x(a,b,c)||wd(a,b,c)||wc(a,b,c);else throw ge("len",b.length),new Da(b.length);},pe=function(a,b,c,d){d=d||ua;wd(a+"?"+b,"",d,c)},wc=function(a,b,c){var d=ta(a+"?"+b);d.onload=d.onerror=function(){d.onload=null;d.onerror=null;c()}},wd=function(a,b,c, - d){var e=O.XMLHttpRequest;if(!e)return!1;var g=new e;if(!("withCredentials"in g))return!1;a=a.replace(/^http:/,"https:");g.open("POST",a,!0);g.withCredentials=!0;g.setRequestHeader("Content-Type","text/plain");g.onreadystatechange=function(){if(4==g.readyState){if(d)try{var ca=g.responseText;if(1>ca.length)ge("xhr","ver","0"),c();else if("1"!=ca.charAt(0))ge("xhr","ver",String(ca.length)),c();else if(3=100*R(a,Ka))throw"abort";}function Ma(a){if(G(P(a,Na)))throw"abort";}function Oa(){var a=M.location.protocol;if("http:"!=a&&"https:"!=a)throw"abort";} - function Pa(a){try{O.navigator.sendBeacon?J(42):O.XMLHttpRequest&&"withCredentials"in new O.XMLHttpRequest&&J(40)}catch(c){}a.set(ld,Td(a),!0);a.set(Ac,R(a,Ac)+1);var b=[];ue.map(function(c,d){d.F&&(c=a.get(c),void 0!=c&&c!=d.defaultValue&&("boolean"==typeof c&&(c*=1),b.push(d.F+"="+K(""+c))))});!1===a.get(xe)&&b.push("npa=1");b.push("z="+Bd());a.set(Ra,b.join("&"),!0)} - function Sa(a){var b=P(a,fa);!b&&a.get(Vd)&&(b="beacon");var c=P(a,gd),d=P(a,oe),e=c||(d?d+"/3":bd(!1)+"/collect");switch(P(a,ad)){case "d":e=c||(d?d+"/32":bd(!1)+"/j/collect");b=a.get(qe)||void 0;pe(e,P(a,Ra),b,a.Z(Ia));break;case "b":e=c||(d?d+"/31":bd(!1)+"/r/collect");default:b?(c=P(a,Ra),d=(d=a.Z(Ia))||ua,"image"==b?wc(e,c,d):"xhr"==b&&wd(e,c,d)||"beacon"==b&&x(e,c,d)||ba(e,c,d)):ba(e,P(a,Ra),a.Z(Ia))}e=P(a,Na);e=h(e);b=e.hitcount;e.hitcount=b?b+1:1;e=P(a,Na);delete h(e).pending_experiments; -@@ -61,9 +61,9 @@ - a[c].split("="),e=d[1];d=d[0];for(var g=b.childNodes||[],ca=!1,l=0;l\x3c/script>')):(e=M.createElement("script"),e.type="text/javascript",e.async=!0,e.src=ca,a&&e.setAttribute("nonce",a),ca=M.getElementsByTagName("script")[0],ca.parentNode.insertBefore(e,ca));$d.set(b,!0)}}}},v=function(a,b){var c=A.get(a)|| -- [];c.push(b);A.set(a,c)},C=function(a,b){Yd.set(a,b);b=A.get(a)||[];for(var c=0;ca.split("/")[0].indexOf(":")&&(a=ca+e[2].substring(0,e[2].lastIndexOf("/"))+"/"+a);c.href=a; - d=b(c);return{protocol:(c.protocol||"").toLowerCase(),host:d[0],port:d[1],path:d[2],query:c.search||"",url:a||""}};var Z={ga:function(){Z.f=[]}};Z.ga();Z.D=function(a){var b=Z.J.apply(Z,arguments);b=Z.f.concat(b);for(Z.f=[];0 - -- Link detected. $1www.google.com -+ Link detected. $1www.9oo91e.qjz9zk - - - Text detected. diff --git a/chromeos/components/multidevice/stub_multidevice_util.cc b/chromeos/components/multidevice/stub_multidevice_util.cc --- a/chromeos/components/multidevice/stub_multidevice_util.cc +++ b/chromeos/components/multidevice/stub_multidevice_util.cc @@ -11698,18 +11809,6 @@ diff --git a/chromeos/components/multidevice/stub_multidevice_util.cc b/chromeos const char kStubDevicePiiFreeName[] = "no-pii device"; const char kStubDevicePSK[] = "remote device psk"; const int64_t kStubDeviceLastUpdateTimeMillis = 0L; -diff --git a/chromeos/components/personalization_app/untrusted_personalization_app_ui_config.cc b/chromeos/components/personalization_app/untrusted_personalization_app_ui_config.cc ---- a/chromeos/components/personalization_app/untrusted_personalization_app_ui_config.cc -+++ b/chromeos/components/personalization_app/untrusted_personalization_app_ui_config.cc -@@ -88,7 +88,7 @@ class UntrustedPersonalizationAppUI : public ui::UntrustedWebUIController { - // Allow images only from this url. - source->OverrideContentSecurityPolicy( - network::mojom::CSPDirectiveName::ImgSrc, -- "img-src 'self' data: https://*.googleusercontent.com;"); -+ "img-src 'self' data: https://*.9oo91eusercontent.qjz9zk;"); - - source->OverrideContentSecurityPolicy( - network::mojom::CSPDirectiveName::ScriptSrc, "script-src 'self';"); diff --git a/chromeos/components/phonehub/url_constants.cc b/chromeos/components/phonehub/url_constants.cc --- a/chromeos/components/phonehub/url_constants.cc +++ b/chromeos/components/phonehub/url_constants.cc @@ -11722,18 +11821,6 @@ diff --git a/chromeos/components/phonehub/url_constants.cc b/chromeos/components } // namespace phonehub } // namespace chromeos -diff --git a/chromeos/components/projector_app/untrusted_projector_ui_config.cc b/chromeos/components/projector_app/untrusted_projector_ui_config.cc ---- a/chromeos/components/projector_app/untrusted_projector_ui_config.cc -+++ b/chromeos/components/projector_app/untrusted_projector_ui_config.cc -@@ -48,7 +48,7 @@ content::WebUIDataSource* CreateProjectorHTMLSource() { - - source->OverrideContentSecurityPolicy( - network::mojom::CSPDirectiveName::ConnectSrc, -- "connect-src 'self' https://www.googleapis.com;"); -+ "connect-src 'self' https://www.9oo91eapis.qjz9zk;"); - - // TODO(b/197120695): re-enable trusted type after fixing the issue that icon - // template is setting innerHTML. diff --git a/chromeos/components/trial_group/trial_group_checker.cc b/chromeos/components/trial_group/trial_group_checker.cc --- a/chromeos/components/trial_group/trial_group_checker.cc +++ b/chromeos/components/trial_group/trial_group_checker.cc @@ -11758,18 +11845,6 @@ diff --git a/chromeos/dbus/rmad/fake_rmad_client.cc b/chromeos/dbus/rmad/fake_rm "cr50reset?challenge=" "HRBXHV84NSTHT25WJECYQKB8SARWFTMSWNGFT2FVEEPX69VE99USV3QFBEANDVXGQVL93QK2M6" "P3DNV4&hwid=SAMUSTEST_2082"; -diff --git a/chromeos/geolocation/simple_geolocation_provider.cc b/chromeos/geolocation/simple_geolocation_provider.cc ---- a/chromeos/geolocation/simple_geolocation_provider.cc -+++ b/chromeos/geolocation/simple_geolocation_provider.cc -@@ -20,7 +20,7 @@ namespace chromeos { - namespace { - - const char kDefaultGeolocationProviderUrl[] = -- "https://www.googleapis.com/geolocation/v1/geolocate?"; -+ "https://www.9oo91eapis.qjz9zk/geolocation/v1/geolocate?"; - - } // namespace - diff --git a/chromeos/printing/ppd_provider.h b/chromeos/printing/ppd_provider.h --- a/chromeos/printing/ppd_provider.h +++ b/chromeos/printing/ppd_provider.h @@ -11983,18 +12058,6 @@ diff --git a/chromeos/services/ime/constants.cc b/chromeos/services/ime/constant } // namespace ime } // namespace chromeos -diff --git a/chromeos/timezone/timezone_request.cc b/chromeos/timezone/timezone_request.cc ---- a/chromeos/timezone/timezone_request.cc -+++ b/chromeos/timezone/timezone_request.cc -@@ -31,7 +31,7 @@ namespace chromeos { - namespace { - - const char kDefaultTimezoneProviderUrl[] = -- "https://maps.googleapis.com/maps/api/timezone/json?"; -+ "https://maps.9oo91eapis.qjz9zk/maps/api/timezone/json?"; - - const char kKeyString[] = "key"; - // Language parameter is unsupported for now. diff --git a/cloud_print/virtual_driver/win/install/setup.cc b/cloud_print/virtual_driver/win/install/setup.cc --- a/cloud_print/virtual_driver/win/install/setup.cc +++ b/cloud_print/virtual_driver/win/install/setup.cc @@ -12186,7 +12249,7 @@ diff --git a/components/autofill/core/browser/payments/credit_card_fido_authenti diff --git a/components/autofill/core/browser/payments/payments_client.cc b/components/autofill/core/browser/payments/payments_client.cc --- a/components/autofill/core/browser/payments/payments_client.cc +++ b/components/autofill/core/browser/payments/payments_client.cc -@@ -79,7 +79,7 @@ const char kMigrateCardsRequestFormat[] = +@@ -78,7 +78,7 @@ const char kMigrateCardsRequestFormat[] = const char kTokenFetchId[] = "wallet_client"; const char kPaymentsOAuth2Scope[] = @@ -12262,6 +12325,18 @@ diff --git a/components/blocked_content/safe_browsing_triggered_popup_blocker.h // This class observes main frame navigation checks incoming from safe browsing // (currently implemented by the subresource_filter component). For navigations +diff --git a/components/breadcrumbs/core/breadcrumb_manager_tab_helper.cc b/components/breadcrumbs/core/breadcrumb_manager_tab_helper.cc +--- a/components/breadcrumbs/core/breadcrumb_manager_tab_helper.cc ++++ b/components/breadcrumbs/core/breadcrumb_manager_tab_helper.cc +@@ -19,7 +19,7 @@ namespace { + + // Returns true if navigation URL host is google.com or www.google.com. + bool IsGoogleUrl(const GURL& url) { +- return url.host() == "google.com" || url.host() == "www.google.com"; ++ return url.host() == "9oo91e.qjz9zk" || url.host() == "www.9oo91e.qjz9zk"; + } + + } // namespace diff --git a/components/browser_sync/PRESUBMIT.py b/components/browser_sync/PRESUBMIT.py --- a/components/browser_sync/PRESUBMIT.py +++ b/components/browser_sync/PRESUBMIT.py @@ -12277,16 +12352,16 @@ diff --git a/components/browser_sync/PRESUBMIT.py b/components/browser_sync/PRES diff --git a/components/browser_ui/strings/android/browser_ui_strings.grd b/components/browser_ui/strings/android/browser_ui_strings.grd --- a/components/browser_ui/strings/android/browser_ui_strings.grd +++ b/components/browser_ui/strings/android/browser_ui_strings.grd -@@ -448,7 +448,7 @@ - - +@@ -454,7 +454,7 @@ + From %1$sWikipedia + - This content is from %1$sgoogle.com, delivered by Google. + This content is from %1$s9oo91e.qjz9zk, delivered by Google. Forget this site? -@@ -614,7 +614,7 @@ +@@ -620,7 +620,7 @@ A site is using your camera and microphone @@ -12295,7 +12370,7 @@ diff --git a/components/browser_ui/strings/android/browser_ui_strings.grd b/comp Tap to return to the site -@@ -737,7 +737,7 @@ +@@ -743,7 +743,7 @@ other {(+ # more)}} @@ -12520,7 +12595,7 @@ diff --git a/components/content_creation/notes/core/server/notes_server_base.cc diff --git a/components/content_creation/reactions/core/reaction_list_factory.cc b/components/content_creation/reactions/core/reaction_list_factory.cc --- a/components/content_creation/reactions/core/reaction_list_factory.cc +++ b/components/content_creation/reactions/core/reaction_list_factory.cc -@@ -11,9 +11,9 @@ +@@ -13,9 +13,9 @@ namespace { const char kReactionUrlFormat[] = @@ -13057,7 +13132,7 @@ diff --git a/components/feed/core/v2/feed_network_impl.cc b/components/feed/core diff --git a/components/feed/feed_feature_list.cc b/components/feed/feed_feature_list.cc --- a/components/feed/feed_feature_list.cc +++ b/components/feed/feed_feature_list.cc -@@ -76,7 +76,7 @@ const base::Feature kFeedSignInPromoDismiss{"FeedSignInPromoDismiss", +@@ -79,7 +79,7 @@ const base::Feature kFeedSignInPromoDismiss{"FeedSignInPromoDismiss", base::FEATURE_ENABLED_BY_DEFAULT}; const base::Feature kFeedStamp{"FeedStamp", base::FEATURE_DISABLED_BY_DEFAULT}; @@ -13081,7 +13156,7 @@ diff --git a/components/feedback/feedback_uploader.cc b/components/feedback/feed diff --git a/components/flags_ui/resources/flags.html b/components/flags_ui/resources/flags.html --- a/components/flags_ui/resources/flags.html +++ b/components/flags_ui/resources/flags.html -@@ -58,11 +58,11 @@ +@@ -69,11 +69,11 @@ chrome://flags, which is not localized. --> @@ -14701,10 +14777,88 @@ diff --git a/components/omnibox/resources/omnibox_pedal_synonyms.grd b/component change, update, reset, fix + +- ++ + close incognito window, end incognito + + + +- ++ + chrome dino, dino game, play dino run + + + +- ++ + find lost phone, find my device + + + +- ++ + change google privacy settings, manage google privacy + + + +- ++ + change chrome settings, manage settings + + + +- ++ + manage chrome downloads, view downloads + + + +- ++ + see chrome history, view browsing history + + + +- ++ + share this page, share this tab + + + +- ++ + customize chrome accessibility, manage accessibility settings + + + +- ++ + change browser font, chrome fonts + + + +- ++ + customize chrome appearance, manage chrome themes + + + +- ++ + add custom search, manage search engines, search engines + + + +- ++ + customize chromeos accessibility, manage accessibility settings + + diff --git a/components/optimization_guide/content/browser/page_content_annotations_model_manager.cc b/components/optimization_guide/content/browser/page_content_annotations_model_manager.cc --- a/components/optimization_guide/content/browser/page_content_annotations_model_manager.cc +++ b/components/optimization_guide/content/browser/page_content_annotations_model_manager.cc -@@ -23,7 +23,7 @@ namespace optimization_guide { +@@ -25,7 +25,7 @@ namespace optimization_guide { namespace { const char kPageTopicsModelMetadataTypeUrl[] = @@ -14843,7 +14997,7 @@ diff --git a/components/password_manager/core/browser/old_google_credentials_cle diff --git a/components/password_manager/core/browser/password_generation_frame_helper.cc b/components/password_manager/core/browser/password_generation_frame_helper.cc --- a/components/password_manager/core/browser/password_generation_frame_helper.cc +++ b/components/password_manager/core/browser/password_generation_frame_helper.cc -@@ -94,7 +94,7 @@ bool PasswordGenerationFrameHelper::IsGenerationEnabled( +@@ -95,7 +95,7 @@ bool PasswordGenerationFrameHelper::IsGenerationEnabled( } GURL url = driver_->GetLastCommittedURL(); @@ -14950,7 +15104,7 @@ diff --git a/components/password_manager/core/browser/psl_matching_helper.cc b/c } } // namespace -@@ -98,7 +98,7 @@ bool IsPublicSuffixDomainMatch(const std::string& url1, +@@ -99,7 +99,7 @@ bool IsPublicSuffixDomainMatch(const std::string& url1, if (gurl1 == gurl2) return true; @@ -15065,31 +15219,31 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm const char kPermissionBlockedRepeatedDismissalsMessage[] = "%s permission has been blocked as the user has dismissed the permission " "prompt several times. This can be reset in Site Settings. See " -- "https://www.chromestatus.com/features/6443143280984064 for more " -+ "https://www.ch40mestatus.qjz9zk/features/6443143280984064 for more " +- "https://www.chromestatus.com/feature/6443143280984064 for more " ++ "https://www.ch40mestatus.qjz9zk/feature/6443143280984064 for more " "information."; const char kPermissionBlockedRepeatedIgnoresMessage[] = "%s permission has been blocked as the user has ignored the permission " "prompt several times. This can be reset in Site Settings. See " -- "https://www.chromestatus.com/features/6443143280984064 for more " -+ "https://www.ch40mestatus.qjz9zk/features/6443143280984064 for more " +- "https://www.chromestatus.com/feature/6443143280984064 for more " ++ "https://www.ch40mestatus.qjz9zk/feature/6443143280984064 for more " "information."; #else const char kPermissionBlockedRepeatedDismissalsMessage[] = "%s permission has been blocked as the user has dismissed the permission " "prompt several times. This can be reset in Page Info which can be " "accessed by clicking the lock icon next to the URL. See " -- "https://www.chromestatus.com/features/6443143280984064 for more " -+ "https://www.ch40mestatus.qjz9zk/features/6443143280984064 for more " +- "https://www.chromestatus.com/feature/6443143280984064 for more " ++ "https://www.ch40mestatus.qjz9zk/feature/6443143280984064 for more " "information."; const char kPermissionBlockedRepeatedIgnoresMessage[] = "%s permission has been blocked as the user has ignored the permission " "prompt several times. This can be reset in Page Info which can be " "accessed by clicking the lock icon next to the URL. See " -- "https://www.chromestatus.com/features/6443143280984064 for more " -+ "https://www.ch40mestatus.qjz9zk/features/6443143280984064 for more " +- "https://www.chromestatus.com/feature/6443143280984064 for more " ++ "https://www.ch40mestatus.qjz9zk/feature/6443143280984064 for more " "information."; #endif @@ -15231,7 +15385,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli # 'platform_only' Set to True if the policy can only be set from platform # policy but do not support Admin console. This is only used as a hint for # Admin console. -@@ -442,7 +442,7 @@ +@@ -444,7 +444,7 @@ If you choose to auto detect the proxy server, all other options are ignored. For detailed examples, visit: @@ -15240,7 +15394,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli If you enable this setting, $1Google Chrome and ARC-apps ignore all proxy-related options specified from the command line. -@@ -614,7 +614,7 @@ +@@ -616,7 +616,7 @@ }, { 'name': 'ChromeFrameRendererSettings', @@ -15249,7 +15403,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'group', 'caption': '''Default HTML renderer for $3Google Chrome Frame''', 'desc': '''Allows you to configure the default HTML renderer when $3Google Chrome Frame is installed. -@@ -629,7 +629,7 @@ +@@ -631,7 +631,7 @@ }, { 'name': 'ChromeFrameContentTypes', @@ -15258,7 +15412,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'group', 'caption': '''Allow $3Google Chrome Frame to handle the following content types''', 'desc': '''Allow $3Google Chrome Frame to handle the following content types.''', -@@ -1293,7 +1293,7 @@ +@@ -1309,7 +1309,7 @@ }, { 'name': 'HomepageLocation', @@ -15267,7 +15421,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:8-', 'chrome_os:11-', 'android:81-'], -@@ -1302,7 +1302,7 @@ +@@ -1318,7 +1318,7 @@ 'dynamic_refresh': True, 'per_profile': True, }, @@ -15276,7 +15430,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 1, 'caption': '''Configure the home page URL''', 'tags': [], -@@ -1319,7 +1319,7 @@ +@@ -1335,7 +1335,7 @@ }, { 'name': 'HomepageIsNewTabPage', @@ -15285,7 +15439,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:8-', 'chrome_os:11-'], -@@ -1350,7 +1350,7 @@ +@@ -1366,7 +1366,7 @@ }, { 'name': 'NewTabPageLocation', @@ -15294,7 +15448,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:58-', 'chrome_os:58-'], -@@ -1358,7 +1358,7 @@ +@@ -1374,7 +1374,7 @@ 'dynamic_refresh': True, 'per_profile': True, }, @@ -15303,7 +15457,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 360, 'caption': '''Configure the New Tab page URL''', 'tags': [], -@@ -1377,7 +1377,7 @@ +@@ -1393,7 +1393,7 @@ }, { 'name': 'DefaultBrowserSettingEnabled', @@ -15312,7 +15466,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.win7:11-', 'chrome.mac:11-', 'chrome.linux:11-'], -@@ -1403,12 +1403,12 @@ +@@ -1419,12 +1419,12 @@ Leaving the policy unset means $1Google Chrome lets users control whether it's the default and, if not, whether user notifications should appear. @@ -15327,7 +15481,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.win:8-'], -@@ -1431,7 +1431,7 @@ +@@ -1447,7 +1447,7 @@ }, { 'name': 'AlternateErrorPagesEnabled', @@ -15336,7 +15490,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ -@@ -1464,7 +1464,7 @@ +@@ -1480,7 +1480,7 @@ }, { 'name': 'SearchSuggestEnabled', @@ -15345,7 +15499,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ -@@ -1498,7 +1498,7 @@ +@@ -1514,7 +1514,7 @@ }, { 'name': 'NativeWindowOcclusionEnabled', @@ -15354,7 +15508,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ -@@ -1536,7 +1536,7 @@ +@@ -1552,7 +1552,7 @@ }, { 'name': 'WindowOcclusionEnabled', @@ -15363,7 +15517,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ -@@ -1572,7 +1572,7 @@ +@@ -1588,7 +1588,7 @@ }, { 'name': 'DnsPrefetchingEnabled', @@ -15372,7 +15526,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:8-53', 'chrome_os:11-53', 'android:30-53'], -@@ -1598,7 +1598,7 @@ +@@ -1614,7 +1614,7 @@ }, { 'name': 'NetworkPredictionOptions', @@ -15381,7 +15535,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -1638,7 +1638,7 @@ +@@ -1654,7 +1654,7 @@ }, { 'name': 'WPADQuickCheckEnabled', @@ -15390,7 +15544,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ 'chrome.*:35-', 'chrome_os:35-' ], -@@ -1669,7 +1669,7 @@ +@@ -1685,7 +1685,7 @@ }, { 'name': 'DisableSpdy', @@ -15399,7 +15553,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:8-53', 'chrome_os:11-53', 'android:30-53'], -@@ -1694,7 +1694,7 @@ +@@ -1710,7 +1710,7 @@ }, { 'name': 'DisabledSchemes', @@ -15408,7 +15562,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -1721,7 +1721,7 @@ +@@ -1737,7 +1737,7 @@ }, { 'name': 'GloballyScopeHTTPAuthCacheEnabled', @@ -15417,7 +15571,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:80-', 'chrome_os:80-'], -@@ -1755,7 +1755,7 @@ +@@ -1771,7 +1771,7 @@ }, { 'name': 'DNSInterceptionChecksEnabled', @@ -15426,7 +15580,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:80-', 'chrome_os:80-'], -@@ -1786,7 +1786,7 @@ +@@ -1802,7 +1802,7 @@ }, { 'name': 'IntranetRedirectBehavior', @@ -15435,7 +15589,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -1833,7 +1833,7 @@ +@@ -1849,7 +1849,7 @@ }, { 'name': 'Http09OnNonDefaultPortsEnabled', @@ -15444,7 +15598,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:54-77', 'chrome_os:54-77'], -@@ -1868,7 +1868,7 @@ +@@ -1884,7 +1884,7 @@ }, { 'name': 'JavascriptEnabled', @@ -15453,7 +15607,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:8-', 'chrome_os:11-', 'android:30-'], -@@ -1901,7 +1901,7 @@ +@@ -1917,7 +1917,7 @@ }, { 'name': 'IncognitoEnabled', @@ -15462,7 +15616,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:11-', 'chrome_os:11-', 'android:30-'], -@@ -1935,7 +1935,7 @@ +@@ -1951,7 +1951,7 @@ }, { 'name': 'IncognitoModeAvailability', @@ -15471,7 +15625,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -1988,7 +1988,7 @@ +@@ -2004,7 +2004,7 @@ }, { 'name': 'SavingBrowserHistoryDisabled', @@ -15480,7 +15634,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ -@@ -2021,7 +2021,7 @@ +@@ -2037,7 +2037,7 @@ }, { 'name': 'AllowDeletingBrowserHistory', @@ -15489,7 +15643,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:57-', 'chrome_os:57-'], -@@ -2049,7 +2049,7 @@ +@@ -2065,7 +2065,7 @@ + }, + { + 'name': 'HistoryClustersVisible', +- 'owners': ['file://components/history_clusters/OWNERS', 'mahmadi@chromium.org'], ++ 'owners': ['file://components/history_clusters/OWNERS', 'mahmadi@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:97-', 'chrome_os:97-'], +@@ -2104,7 +2104,7 @@ }, { 'name': 'AllowDinosaurEasterEgg', @@ -15498,7 +15661,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:48-', 'chrome.*:48-'], -@@ -2078,7 +2078,7 @@ +@@ -2133,7 +2133,7 @@ }, { 'name': 'ForceLegacyDefaultReferrerPolicy', @@ -15507,7 +15670,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:80-87', 'chrome_os:80-87'], -@@ -2111,7 +2111,7 @@ +@@ -2166,7 +2166,7 @@ }, { 'name': 'RemoteAccessClientFirewallTraversal', @@ -15516,7 +15679,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:14-16', 'chrome_os:14-16'], -@@ -2134,7 +2134,7 @@ +@@ -2189,7 +2189,7 @@ }, { 'name': 'RemoteAccessHostClientDomain', @@ -15525,7 +15688,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:22-', 'chrome_os:41-'], -@@ -2152,7 +2152,7 @@ +@@ -2207,7 +2207,7 @@ }, { 'name': 'RemoteAccessHostClientDomainList', @@ -15534,7 +15697,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -2178,7 +2178,7 @@ +@@ -2233,7 +2233,7 @@ }, { 'name': 'RemoteAccessHostFirewallTraversal', @@ -15543,7 +15706,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:14-', 'chrome_os:41-'], -@@ -2207,7 +2207,7 @@ +@@ -2262,7 +2262,7 @@ }, { 'name': 'RemoteAccessHostDomain', @@ -15552,7 +15715,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:22-', 'chrome_os:41-'], -@@ -2225,7 +2225,7 @@ +@@ -2280,7 +2280,7 @@ }, { 'name': 'RemoteAccessHostDomainList', @@ -15561,7 +15724,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -2251,7 +2251,7 @@ +@@ -2306,7 +2306,7 @@ }, { 'name': 'RemoteAccessHostRequireTwoFactor', @@ -15570,7 +15733,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:22-22'], -@@ -2274,7 +2274,7 @@ +@@ -2329,7 +2329,7 @@ }, { 'name': 'RemoteAccessHostTalkGadgetPrefix', @@ -15579,7 +15742,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:22-75', 'chrome_os:41-75'], -@@ -2290,17 +2290,17 @@ +@@ -2345,17 +2345,17 @@ 'tags': [], 'desc': '''Configures the TalkGadget prefix that will be used by remote access hosts and prevents users from changing it. @@ -15601,7 +15764,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:23-'], -@@ -2329,7 +2329,7 @@ +@@ -2384,7 +2384,7 @@ }, { 'name': 'RemoteAccessHostAllowClientPairing', @@ -15610,7 +15773,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:30-'], -@@ -2358,7 +2358,7 @@ +@@ -2413,7 +2413,7 @@ }, { 'name': 'RemoteAccessHostAllowGnubbyAuth', @@ -15619,7 +15782,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:35-'], -@@ -2390,7 +2390,7 @@ +@@ -2445,7 +2445,7 @@ }, { 'name': 'RemoteAccessHostAllowRelayedConnection', @@ -15628,7 +15791,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:36-', 'chrome_os:86-'], -@@ -2419,7 +2419,7 @@ +@@ -2474,7 +2474,7 @@ }, { 'name': 'RemoteAccessHostUdpPortRange', @@ -15637,7 +15800,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:36-', 'chrome_os:41-'], -@@ -2440,7 +2440,7 @@ +@@ -2495,7 +2495,7 @@ }, { 'name': 'RemoteAccessHostMatchUsername', @@ -15646,7 +15809,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.linux:25-', 'chrome.mac:25-'], -@@ -2469,7 +2469,7 @@ +@@ -2524,7 +2524,7 @@ }, { 'name': 'RemoteAccessHostTokenUrl', @@ -15655,7 +15818,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:28-'], -@@ -2491,7 +2491,7 @@ +@@ -2546,7 +2546,7 @@ }, { 'name': 'RemoteAccessHostTokenValidationUrl', @@ -15664,7 +15827,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:28-'], -@@ -2511,7 +2511,7 @@ +@@ -2566,7 +2566,7 @@ }, { 'name': 'RemoteAccessHostTokenValidationCertificateIssuer', @@ -15673,7 +15836,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:28-'], -@@ -2529,7 +2529,7 @@ +@@ -2584,7 +2584,7 @@ }, { 'name': 'RemoteAccessHostDebugOverridePolicies', @@ -15682,7 +15845,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:25-47','chrome_os:42-47'], -@@ -2549,7 +2549,7 @@ +@@ -2604,7 +2604,7 @@ }, { 'name': 'RemoteAccessHostAllowUiAccessForRemoteAssistance', @@ -15691,7 +15854,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.win:55-'], -@@ -2579,7 +2579,7 @@ +@@ -2634,7 +2634,7 @@ }, { 'name': 'RemoteAccessHostAllowFileTransfer', @@ -15700,7 +15863,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:74-'], -@@ -2609,7 +2609,7 @@ +@@ -2664,7 +2664,7 @@ }, { 'name': 'RemoteAccessHostEnableUserInterface', @@ -15709,7 +15872,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:88-'], -@@ -2640,7 +2640,7 @@ +@@ -2695,7 +2695,7 @@ }, { 'name': 'RemoteAccessHostAllowRemoteAccessConnections', @@ -15718,7 +15881,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:89-'], -@@ -2670,7 +2670,7 @@ +@@ -2725,7 +2725,7 @@ }, { 'name': 'RemoteAccessHostMaximumSessionDurationMinutes', @@ -15727,7 +15890,25 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', 'minimum': 30, 'maximum': 10080 }, 'supported_on': ['chrome.*:89-'], -@@ -2690,7 +2690,7 @@ +@@ -2745,7 +2745,7 @@ + }, + { + 'name': 'RemoteAccessHostClipboardSizeBytes', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org', 'joedow@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk', 'joedow@ch40m1um.qjz9zk'], + 'type': 'int', + 'schema': { 'type': 'integer', 'minimum': 0, 'maximum': 2147483647 }, + 'supported_on': ['chrome.*:97-', 'chrome_os:97-'], +@@ -2773,7 +2773,7 @@ + }, + { + 'name': 'RemoteAccessHostAllowRemoteSupportConnections', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org', 'joedow@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk', 'joedow@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:97-', 'chrome_os:97-'], +@@ -2807,7 +2807,7 @@ }, { 'name': 'DeviceAllowMGSToStoreDisplayProperties', @@ -15736,7 +15917,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type' : 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:90-'], -@@ -2717,7 +2717,7 @@ +@@ -2834,7 +2834,7 @@ }, { 'name': 'PrintingEnabled', @@ -15745,7 +15926,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ -@@ -2751,7 +2751,7 @@ +@@ -2868,7 +2868,7 @@ }, { 'name': 'CloudPrintProxyEnabled', @@ -15754,7 +15935,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:17-'], -@@ -2779,7 +2779,7 @@ +@@ -2896,7 +2896,7 @@ }, { 'name': 'PrintingAllowedColorModes', @@ -15763,7 +15944,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -2820,7 +2820,7 @@ +@@ -2937,7 +2937,7 @@ }, { 'name': 'PrintingAllowedDuplexModes', @@ -15772,7 +15953,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -2863,7 +2863,7 @@ +@@ -2980,7 +2980,7 @@ }, { 'name': 'PrintingAllowedPinModes', @@ -15781,7 +15962,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -2904,7 +2904,7 @@ +@@ -3021,7 +3021,7 @@ }, { 'name': 'PrintingAllowedBackgroundGraphicsModes', @@ -15790,7 +15971,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -2945,7 +2945,7 @@ +@@ -3062,7 +3062,7 @@ }, { 'name': 'PrintingColorDefault', @@ -15799,7 +15980,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -2980,7 +2980,7 @@ +@@ -3097,7 +3097,7 @@ }, { 'name': 'PrintingDuplexDefault', @@ -15808,7 +15989,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -3021,7 +3021,7 @@ +@@ -3138,7 +3138,7 @@ }, { 'name': 'PrintingPinDefault', @@ -15817,7 +15998,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -3056,7 +3056,7 @@ +@@ -3173,7 +3173,7 @@ }, { 'name': 'PrintingBackgroundGraphicsDefault', @@ -15826,7 +16007,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -3091,7 +3091,7 @@ +@@ -3208,7 +3208,7 @@ }, { 'name': 'PrintingPaperSizeDefault', @@ -15835,7 +16016,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'object', -@@ -3277,7 +3277,7 @@ +@@ -3394,7 +3394,7 @@ }, { 'name': 'PrintingSendUsernameAndFilenameEnabled', @@ -15844,7 +16025,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:72-'], -@@ -3306,7 +3306,7 @@ +@@ -3423,7 +3423,7 @@ }, { 'name': 'PrintingMaxSheetsAllowed', @@ -15853,7 +16034,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', 'minimum': 1 }, 'supported_on': ['chrome_os:84-'], -@@ -3324,7 +3324,7 @@ +@@ -3441,7 +3441,7 @@ }, { 'name': 'AppCacheForceEnabled', @@ -15861,8 +16042,8 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli + 'owners': ['enne@ch40m1um.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:84-', 'chrome_os:84-', 'android:84-', 'webview_android:84-'], -@@ -3352,7 +3352,7 @@ + 'supported_on': ['chrome.*:84-95', 'chrome_os:84-95', 'android:84-95', 'webview_android:84-95'], +@@ -3470,7 +3470,7 @@ }, { 'name': 'PrintJobHistoryExpirationPeriod', @@ -15871,7 +16052,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', 'minimum': -1 }, 'supported_on': ['chrome_os:79-'], -@@ -3374,7 +3374,7 @@ +@@ -3492,7 +3492,7 @@ }, { 'name': 'PrintingAPIExtensionsWhitelist', @@ -15880,7 +16061,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -3398,7 +3398,7 @@ +@@ -3516,7 +3516,7 @@ }, { 'name': 'PrintingAPIExtensionsAllowlist', @@ -15889,7 +16070,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -3419,7 +3419,7 @@ +@@ -3537,7 +3537,7 @@ }, { 'name': 'ForceSafeSearch', @@ -15898,7 +16079,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:25-', 'chrome_os:25-', 'android:30-'], -@@ -3453,7 +3453,7 @@ +@@ -3571,7 +3571,7 @@ }, { 'name': 'ForceGoogleSafeSearch', @@ -15907,7 +16088,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:41-', 'chrome_os:41-', 'android:41-'], -@@ -3482,7 +3482,7 @@ +@@ -3600,7 +3600,7 @@ }, { 'name': 'ForceYouTubeSafetyMode', @@ -15916,7 +16097,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:41-', 'chrome_os:41-', 'android:41-'], -@@ -3517,7 +3517,7 @@ +@@ -3635,7 +3635,7 @@ }, { 'name': 'ForceYouTubeRestrict', @@ -15925,7 +16106,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -3561,7 +3561,7 @@ +@@ -3679,7 +3679,7 @@ }, { 'name': 'SafeBrowsingEnabled', @@ -15934,7 +16115,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ -@@ -3596,7 +3596,7 @@ +@@ -3714,7 +3714,7 @@ If you set this policy, users can't change it or override the "Enable phishing and malware protection" setting in Chrome. If not set, "Enable phishing and malware protection" is set to True, but the user can change it. @@ -15943,7 +16124,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli If the policy SafeBrowsingProtectionLevel is set, the value of the policy SafeBrowsingEnabled is ignored. -@@ -3604,7 +3604,7 @@ +@@ -3722,7 +3722,7 @@ }, { 'name': 'SafeBrowsingProtectionLevel', @@ -15952,7 +16133,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -3654,12 +3654,12 @@ +@@ -3772,12 +3772,12 @@ If this policy is left not set, Safe Browsing will operate in Standard Protection mode but users can change this setting. @@ -15967,7 +16148,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ -@@ -3697,7 +3697,7 @@ +@@ -3815,7 +3815,7 @@ }, { 'name': 'PasswordManagerEnabled', @@ -15976,7 +16157,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ -@@ -3734,7 +3734,7 @@ +@@ -3852,7 +3852,7 @@ }, { 'name': 'PasswordManagerAllowShowPasswords', @@ -15985,7 +16166,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:8-50', 'chrome_os:11-50'], -@@ -3757,7 +3757,7 @@ +@@ -3875,7 +3875,7 @@ }, { 'name': 'PasswordLeakDetectionEnabled', @@ -15994,7 +16175,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ -@@ -3792,7 +3792,7 @@ +@@ -3910,7 +3910,7 @@ }, { 'name': 'AutoFillEnabled', @@ -16003,7 +16184,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ -@@ -3830,7 +3830,7 @@ +@@ -3948,7 +3948,7 @@ }, { 'name': 'AutofillAddressEnabled', @@ -16012,7 +16193,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ -@@ -3864,7 +3864,7 @@ +@@ -3982,7 +3982,7 @@ }, { 'name': 'AutofillCreditCardEnabled', @@ -16021,7 +16202,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ -@@ -3898,7 +3898,7 @@ +@@ -4016,7 +4016,7 @@ }, { 'name': 'DisabledPlugins', @@ -16030,7 +16211,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -3929,7 +3929,7 @@ +@@ -4047,7 +4047,7 @@ }, { 'name': 'EnabledPlugins', @@ -16039,7 +16220,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -3960,7 +3960,7 @@ +@@ -4078,7 +4078,7 @@ }, { 'name': 'DisabledPluginsExceptions', @@ -16048,7 +16229,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -3993,7 +3993,7 @@ +@@ -4111,7 +4111,7 @@ }, { 'name': 'AlwaysOpenPdfExternally', @@ -16057,7 +16238,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:55-'], -@@ -4024,7 +4024,7 @@ +@@ -4142,7 +4142,7 @@ }, { 'name': 'DisablePluginFinder', @@ -16066,7 +16247,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:11-64', 'chrome_os:11-64'], -@@ -4054,7 +4054,7 @@ +@@ -4172,7 +4172,7 @@ }, { 'name': 'SyncDisabled', @@ -16075,7 +16256,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:8-', 'chrome_os:11-', 'ios:96-'], -@@ -4087,7 +4087,7 @@ +@@ -4205,7 +4205,7 @@ }, { 'name': 'SyncTypesListDisabled', @@ -16084,7 +16265,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -4109,7 +4109,7 @@ +@@ -4226,7 +4226,7 @@ }, { 'name': 'RoamingProfileSupportEnabled', @@ -16093,7 +16274,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.win:57-', 'chrome.mac:88-', 'chrome.linux:88-'], -@@ -4138,7 +4138,7 @@ +@@ -4255,7 +4255,7 @@ }, { 'name': 'RoamingProfileLocation', @@ -16102,7 +16283,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.win:57-', 'chrome.mac:88-', 'chrome.linux:88-'], -@@ -4154,7 +4154,7 @@ +@@ -4271,7 +4271,7 @@ If you set this policy, $1Google Chrome will use the provided directory to store the roaming copy of the profiles if the RoamingProfileSupportEnabled policy has been enabled. If the RoamingProfileSupportEnabled policy is disabled or left unset the value stored in this policy is not used. @@ -16111,7 +16292,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli On non-Windows platforms, this policy must be set for roaming profiles to work. -@@ -4163,7 +4163,7 @@ +@@ -4280,7 +4280,7 @@ }, { 'name': 'SigninAllowed', @@ -16120,7 +16301,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:27-', 'android:38-'], -@@ -4194,7 +4194,7 @@ +@@ -4311,7 +4311,7 @@ }, { 'name': 'EnableDeprecatedWebBasedSignin', @@ -16129,7 +16310,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:35-42'], -@@ -4217,7 +4217,7 @@ +@@ -4334,7 +4334,7 @@ }, { 'name': 'UserDataDir', @@ -16138,7 +16319,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.win:11-', 'chrome.mac:11-'], -@@ -4236,14 +4236,14 @@ +@@ -4353,14 +4353,14 @@ If you set this policy, $1Google Chrome will use the provided directory regardless whether the user has specified the '--user-data-dir' flag or not. To avoid data loss or other unexpected errors this policy should not be set to a directory used for other purposes, because $1Google Chrome manages its contents. @@ -16155,7 +16336,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:13-'], -@@ -4259,12 +4259,12 @@ +@@ -4376,12 +4376,12 @@ If not set, $1Google Chrome uses the default cache directory, but users can change that setting with the --disk-cache-dir command line flag. @@ -16170,7 +16351,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer' }, 'supported_on': ['chrome.*:17-'], -@@ -4287,7 +4287,7 @@ +@@ -4404,7 +4404,7 @@ }, { 'name': 'MediaCacheSize', @@ -16179,7 +16360,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer' }, 'supported_on': ['chrome.*:17-71'], -@@ -4309,7 +4309,7 @@ +@@ -4426,7 +4426,7 @@ }, { 'name': 'DownloadRestrictions', @@ -16188,9 +16369,18 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -4366,12 +4366,12 @@ +@@ -4471,7 +4471,7 @@ + 'tags': ['local-data-access'], + 'desc': '''Setting the policy means users can't bypass download security decisions. - * No special restrictions means the downloads go through the usual security restrictions based on safety analysis results. +- There are many types of download warnings within Chrome, which roughly break down into these categories (learn more about Safe Browsing verdicts https://support.google.com/chrome/?p=ib_download_blocked): ++ There are many types of download warnings within Chrome, which roughly break down into these categories (learn more about Safe Browsing verdicts https://support.9oo91e.qjz9zk/chrome/?p=ib_download_blocked): + + * Malicious, as flagged by the Safe Browsing server + * Uncommon or unwanted, as flagged by the Safe Browsing server +@@ -4489,12 +4489,12 @@ + + 4: Blocks malicious files flagged by the Safe Browsing server, does not block dangerous file types. Recommended. - Note: These restrictions apply to downloads triggered from webpage content, as well as the Download link... menu option. They don't apply to the download of the currently displayed page or to saving as PDF from the printing options. Read more about Safe Browsing ( https://developers.google.com/safe-browsing ).''', + Note: These restrictions apply to downloads triggered from webpage content, as well as the Download link... menu option. They don't apply to the download of the currently displayed page or to saving as PDF from the printing options. Read more about Safe Browsing ( https://developers.9oo91e.qjz9zk/safe-browsing ).''', @@ -16203,7 +16393,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:11-', 'chrome_os:35-'], -@@ -4388,13 +4388,13 @@ +@@ -4511,13 +4511,13 @@ Leaving the policy unset means Chrome uses the default download directory, and users can change it. @@ -16219,7 +16409,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -4421,7 +4421,7 @@ +@@ -4544,7 +4544,7 @@ }, { 'name': 'AutoOpenAllowedForURLs', @@ -16228,7 +16418,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -4444,11 +4444,11 @@ +@@ -4567,11 +4567,11 @@ If this policy isn't set, all downloads where the file type is in AutoOpenFileTypes will automatically open. @@ -16242,7 +16432,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'array', -@@ -4481,13 +4481,13 @@ +@@ -4604,13 +4604,13 @@ If this policy is not set, no protocols can launch without a prompt by default. Users may opt out of prompts on a per-protocol/per-site basis unless the ExternalProtocolDialogShowAlwaysOpenCheckbox policy is set to Disabled. This policy has no impact on per-protocol/per-site prompt exemptions set by users. @@ -16258,7 +16448,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.win:61-'], -@@ -4522,7 +4522,7 @@ +@@ -4645,7 +4645,7 @@ }, { 'name': 'ClearSiteDataOnExit', @@ -16267,7 +16457,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:11-28', 'chrome_os:11-28'], -@@ -4541,7 +4541,7 @@ +@@ -4664,7 +4664,7 @@ }, { 'name': 'CaptivePortalAuthenticationIgnoresProxy', @@ -16276,7 +16466,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:41-'], -@@ -4571,7 +4571,7 @@ +@@ -4694,7 +4694,7 @@ }, { 'name': 'ProxyMode', @@ -16285,7 +16475,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -4639,11 +4639,11 @@ +@@ -4762,11 +4762,11 @@ Leaving the policy unset lets users choose the proxy settings. @@ -16299,7 +16489,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -4699,7 +4699,7 @@ +@@ -4822,7 +4822,7 @@ If you choose manual proxy settings, you can specify further options in 'Address or URL of proxy server', 'URL to a proxy .pac file' and 'Comma-separated list of proxy bypass rules'. Only the HTTP proxy server with the highest priority is available for ARC-apps. For detailed examples, visit: @@ -16308,7 +16498,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli If you enable this setting, $1Google Chrome ignores all proxy-related options specified from the command line. -@@ -4708,7 +4708,7 @@ +@@ -4831,7 +4831,7 @@ }, { 'name': 'ProxyServer', @@ -16317,7 +16507,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': [ -@@ -4731,12 +4731,12 @@ +@@ -4854,12 +4854,12 @@ Leave this policy unset if you selected any other mode for setting proxy policies. @@ -16332,7 +16522,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': [ -@@ -4759,12 +4759,12 @@ +@@ -4882,12 +4882,12 @@ Leave this policy unset if you selected any other mode for setting proxy policies. @@ -16347,7 +16537,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': [ -@@ -4787,13 +4787,13 @@ +@@ -4910,13 +4910,13 @@ Leave this policy unset if you selected any other mode for setting proxy policies. @@ -16363,7 +16553,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'object', -@@ -4842,12 +4842,12 @@ +@@ -4965,12 +4965,12 @@ * fixed_servers, the ProxyServer and ProxyBypassList fields are used. * pac_script, the ProxyPacUrl, ProxyPacMandatory and ProxyBypassList fields are used. @@ -16378,7 +16568,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:9-','android:46-','chrome_os:62-'], -@@ -4877,7 +4877,7 @@ +@@ -5000,7 +5000,7 @@ }, { 'name': 'DisableAuthNegotiateCnameLookup', @@ -16387,7 +16577,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:9-','android:46-','chrome_os:62-'], -@@ -4905,7 +4905,7 @@ +@@ -5028,7 +5028,7 @@ }, { 'name': 'EnableAuthNegotiatePort', @@ -16396,7 +16586,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:9-','chrome_os:62-'], -@@ -4933,7 +4933,7 @@ +@@ -5056,7 +5056,7 @@ }, { 'name': 'BasicAuthOverHttpEnabled', @@ -16405,7 +16595,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:88-','chrome_os:88-'], -@@ -4964,7 +4964,7 @@ +@@ -5087,7 +5087,7 @@ }, { 'name': 'AuthServerWhitelist', @@ -16414,7 +16604,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:9-','android:46-','webview_android:49-','chrome_os:62-'], -@@ -4987,7 +4987,7 @@ +@@ -5110,7 +5110,7 @@ }, { 'name': 'AuthServerAllowlist', @@ -16423,7 +16613,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:86-','android:86-','webview_android:86-','chrome_os:86-'], -@@ -5007,7 +5007,7 @@ +@@ -5130,7 +5130,7 @@ }, { 'name': 'AuthNegotiateDelegateWhitelist', @@ -16432,7 +16622,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:9-','android:46-','chrome_os:62-'], -@@ -5028,7 +5028,7 @@ +@@ -5151,7 +5151,7 @@ }, { 'name': 'AuthNegotiateDelegateAllowlist', @@ -16441,7 +16631,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:86-','android:86-','chrome_os:86-'], -@@ -5046,7 +5046,7 @@ +@@ -5169,7 +5169,7 @@ }, { 'name': 'AuthNegotiateDelegateByKdcPolicy', @@ -16450,7 +16640,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.linux:74-','chrome.mac:74-','chrome_os:74-'], -@@ -5076,7 +5076,7 @@ +@@ -5199,7 +5199,7 @@ }, { 'name': 'BrowserLabsEnabled', @@ -16459,7 +16649,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema' : {'type': 'boolean'}, 'supported_on': ['chrome.*:89-', 'chrome_os:93-'], -@@ -5107,7 +5107,7 @@ +@@ -5230,7 +5230,7 @@ }, { 'name': 'GSSAPILibraryName', @@ -16468,7 +16658,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.linux:9-'], -@@ -5125,7 +5125,7 @@ +@@ -5248,7 +5248,7 @@ }, { 'name': 'AuthAndroidNegotiateAccountType', @@ -16477,7 +16667,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['android:46-','webview_android:49-'], -@@ -5137,13 +5137,13 @@ +@@ -5260,13 +5260,13 @@ 'id': 305, 'caption': '''Account type for HTTP Negotiate authentication''', 'tags': [], @@ -16493,7 +16683,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:13-','chrome_os:62-'], -@@ -5173,7 +5173,7 @@ +@@ -5296,7 +5296,7 @@ }, { 'name': 'NtlmV2Enabled', @@ -16502,7 +16692,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.linux:63-','chrome.mac:63-','chrome_os:63-','android:63-','webview_android:63-'], -@@ -5204,7 +5204,7 @@ +@@ -5327,7 +5327,7 @@ }, { 'name': 'ExtensionInstallBlacklist', @@ -16511,7 +16701,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -5230,7 +5230,7 @@ +@@ -5353,7 +5353,7 @@ { 'name': 'ExtensionInstallBlocklist', @@ -16520,7 +16710,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -5254,7 +5254,7 @@ +@@ -5377,7 +5377,7 @@ }, { 'name': 'ExtensionInstallAllowlist', @@ -16529,7 +16719,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -5278,7 +5278,7 @@ +@@ -5401,7 +5401,7 @@ }, { 'name': 'ExtensionInstallWhitelist', @@ -16538,7 +16728,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -5301,7 +5301,7 @@ +@@ -5424,7 +5424,7 @@ }, { 'name': 'ExtensionInstallForcelist', @@ -16547,7 +16737,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -5312,7 +5312,7 @@ +@@ -5435,7 +5435,7 @@ 'dynamic_refresh': True, 'per_profile': True, }, @@ -16556,7 +16746,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 34, 'caption': '''Configure the list of force-installed apps and extensions''', 'tags': ['full-admin-access'], -@@ -5328,15 +5328,15 @@ +@@ -5451,15 +5451,15 @@ The source code of any extension may be altered by users through developer tools, potentially rendering the extension dysfunctional. If this is a concern, set the DeveloperToolsDisabled policy. @@ -16575,7 +16765,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -5354,14 +5354,14 @@ +@@ -5477,14 +5477,14 @@ 'tags': ['full-admin-access', 'system-security'], 'desc': '''Setting the policy specifies which URLs may install extensions, apps, and themes. Before $1Google Chrome 21, users could click on a link to a *.crx file, and $1Google Chrome would offer to install the file after a few warnings. Afterwards, such files must be downloaded and dragged to the $1Google Chrome settings page. This setting allows specific URLs to have the old, easier installation flow. @@ -16592,7 +16782,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'deprecated': True, 'schema': { 'type': 'boolean' }, -@@ -5392,7 +5392,7 @@ +@@ -5515,7 +5515,7 @@ }, { 'name': 'ExtensionAllowedTypes', @@ -16601,7 +16791,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -5445,7 +5445,7 @@ +@@ -5568,7 +5568,7 @@ }, { 'name': 'ExtensionSettings', @@ -16610,7 +16800,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'object', -@@ -5540,7 +5540,7 @@ +@@ -5663,7 +5663,7 @@ }, }, }, @@ -16619,7 +16809,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'supported_on': ['chrome.*:62-', 'chrome_os:62-'], 'features': { 'dynamic_refresh': True, -@@ -5597,13 +5597,13 @@ +@@ -5720,13 +5720,13 @@ 'tags': [], 'desc': '''Setting the policy controls extension management settings for $1Google Chrome, including any controlled by existing extension-related policies. The policy supersedes any legacy policies that might be set. @@ -16635,7 +16825,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:80-'], -@@ -5631,12 +5631,12 @@ +@@ -5754,12 +5754,12 @@ Disabling this setting or leaving it unset allows external extensions to be installed. @@ -16650,7 +16840,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:8-', 'chrome_os:11-'], -@@ -5665,7 +5665,7 @@ +@@ -5788,7 +5788,7 @@ }, { 'name': 'DeveloperToolsDisabled', @@ -16659,7 +16849,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:9-', 'chrome_os:11-'], -@@ -5701,7 +5701,7 @@ +@@ -5824,7 +5824,7 @@ }, { 'name': 'DeveloperToolsAvailability', @@ -16668,7 +16858,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -5804,7 +5804,7 @@ +@@ -5927,7 +5927,7 @@ }, { 'name': 'RestoreOnStartup', @@ -16677,7 +16867,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -5847,7 +5847,7 @@ +@@ -5970,7 +5970,7 @@ }, { 'name': 'RestoreOnStartupURLs', @@ -16686,7 +16876,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -5859,7 +5859,7 @@ +@@ -5982,7 +5982,7 @@ 'dynamic_refresh': True, 'per_profile': True, }, @@ -16695,7 +16885,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 38, 'caption': '''URLs to open on startup''', 'tags': [], -@@ -5871,7 +5871,7 @@ +@@ -5994,7 +5994,7 @@ }, { 'name': 'BlockThirdPartyCookies', @@ -16704,7 +16894,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:10-', 'chrome_os:11-', 'android:83-'], -@@ -5905,7 +5905,7 @@ +@@ -6028,7 +6028,7 @@ }, { 'name': 'DefaultSearchProviderEnabled', @@ -16713,7 +16903,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ -@@ -5946,7 +5946,7 @@ +@@ -6069,7 +6069,7 @@ }, { 'name': 'DefaultSearchProviderContextMenuAccessAllowed', @@ -16722,7 +16912,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:85-', 'chrome_os:85-'], -@@ -5979,7 +5979,7 @@ +@@ -6102,7 +6102,7 @@ }, { 'name': 'DefaultSearchProviderName', @@ -16731,7 +16921,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': [ -@@ -6003,7 +6003,7 @@ +@@ -6126,7 +6126,7 @@ }, { 'name': 'DefaultSearchProviderKeyword', @@ -16740,7 +16930,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': [ -@@ -6027,7 +6027,7 @@ +@@ -6150,7 +6150,7 @@ }, { 'name': 'DefaultSearchProviderSearchURL', @@ -16749,7 +16939,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': [ -@@ -6051,7 +6051,7 @@ +@@ -6174,7 +6174,7 @@ }, { 'name': 'DefaultSearchProviderSuggestURL', @@ -16758,7 +16948,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': [ -@@ -6075,7 +6075,7 @@ +@@ -6198,7 +6198,7 @@ }, { 'name': 'DefaultSearchProviderInstantURL', @@ -16767,7 +16957,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:10-63', 'chrome_os:11-63', 'android:30-63'], -@@ -6099,7 +6099,7 @@ +@@ -6222,7 +6222,7 @@ }, { 'name': 'DefaultSearchProviderIconURL', @@ -16776,7 +16966,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': [ -@@ -6123,7 +6123,7 @@ +@@ -6246,7 +6246,7 @@ }, { 'name': 'DefaultSearchProviderEncodings', @@ -16785,7 +16975,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -6150,7 +6150,7 @@ +@@ -6273,7 +6273,7 @@ }, { 'name': 'DefaultSearchProviderAlternateURLs', @@ -16794,7 +16984,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -6177,7 +6177,7 @@ +@@ -6300,7 +6300,7 @@ }, { 'name': 'DefaultSearchProviderSearchTermsReplacementKey', @@ -16803,7 +16993,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:25-63', 'chrome_os:25-63', 'android:30-63'], -@@ -6199,7 +6199,7 @@ +@@ -6322,7 +6322,7 @@ }, { 'name': 'DefaultSearchProviderImageURL', @@ -16812,7 +17002,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': [ -@@ -6223,7 +6223,7 @@ +@@ -6346,7 +6346,7 @@ }, { 'name': 'DefaultSearchProviderNewTabURL', @@ -16821,7 +17011,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': [ -@@ -6247,7 +6247,7 @@ +@@ -6370,7 +6370,7 @@ }, { 'name': 'DefaultSearchProviderSearchURLPostParams', @@ -16830,7 +17020,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': [ -@@ -6271,7 +6271,7 @@ +@@ -6394,7 +6394,7 @@ }, { 'name': 'DefaultSearchProviderSuggestURLPostParams', @@ -16839,7 +17029,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': [ -@@ -6295,7 +6295,7 @@ +@@ -6418,7 +6418,7 @@ }, { 'name': 'DefaultSearchProviderInstantURLPostParams', @@ -16848,7 +17038,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:29-63', 'chrome_os:29-63', 'android:30-63'], -@@ -6317,7 +6317,7 @@ +@@ -6440,7 +6440,7 @@ }, { 'name': 'DefaultSearchProviderImageURLPostParams', @@ -16857,7 +17047,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': [ -@@ -6341,7 +6341,7 @@ +@@ -6464,7 +6464,7 @@ }, { 'name': 'DefaultCookiesSetting', @@ -16866,7 +17056,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -6385,7 +6385,7 @@ +@@ -6508,7 +6508,7 @@ }, { 'name': 'DefaultImagesSetting', @@ -16875,7 +17065,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -6418,7 +6418,7 @@ +@@ -6541,7 +6541,7 @@ }, { 'name': 'DefaultJavaScriptSetting', @@ -16884,7 +17074,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -6451,7 +6451,7 @@ +@@ -6574,7 +6574,7 @@ }, { 'name': 'DefaultPluginsSetting', @@ -16893,7 +17083,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -6492,7 +6492,7 @@ +@@ -6615,7 +6615,7 @@ }, { 'name': 'DefaultPopupsSetting', @@ -16902,7 +17092,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -6530,7 +6530,7 @@ +@@ -6653,7 +6653,7 @@ }, { 'name': 'DefaultNotificationsSetting', @@ -16911,7 +17101,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -6568,7 +6568,7 @@ +@@ -6691,7 +6691,7 @@ }, { 'name': 'DefaultGeolocationSetting', @@ -16920,7 +17110,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -6607,7 +6607,7 @@ +@@ -6730,7 +6730,7 @@ }, { 'name': 'DefaultMediaStreamSetting', @@ -16929,7 +17119,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -6641,7 +6641,7 @@ +@@ -6764,7 +6764,7 @@ }, { 'name': 'DefaultWebBluetoothGuardSetting', @@ -16938,7 +17128,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -6675,7 +6675,7 @@ +@@ -6798,7 +6798,7 @@ }, { 'name': 'DefaultKeygenSetting', @@ -16947,7 +17137,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -6709,7 +6709,7 @@ +@@ -6832,7 +6832,7 @@ }, { 'name': 'DefaultSensorsSetting', @@ -16956,7 +17146,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -6743,7 +6743,7 @@ +@@ -6866,7 +6866,7 @@ }, { 'name': 'DefaultWebUsbGuardSetting', @@ -16965,7 +17155,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -6777,7 +6777,7 @@ +@@ -6900,7 +6900,7 @@ }, { 'name': 'WebUsbAllowDevicesForUrls', @@ -16974,7 +17164,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'array', -@@ -6809,7 +6809,7 @@ +@@ -6932,7 +6932,7 @@ }, 'example_value': [{ 'devices': [{'vendor_id': 1234, 'product_id': 5678}], @@ -16983,7 +17173,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli }], 'id': 486, 'caption': '''Automatically grant permission to these sites to connect to USB devices with the given vendor and product IDs.''', -@@ -6826,7 +6826,7 @@ +@@ -6949,7 +6949,7 @@ }, { 'name': 'DeviceLoginScreenWebUsbAllowDevicesForUrls', @@ -16992,7 +17182,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'array', -@@ -6859,7 +6859,7 @@ +@@ -6982,7 +6982,7 @@ }, 'example_value': [{ 'devices': [{'vendor_id': 1234, 'product_id': 5678}], @@ -17001,7 +17191,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli }], 'id': 603, 'caption': '''Automatically grant permission to these sites to connect to USB devices with the given vendor and product IDs on the login screen.''', -@@ -6874,7 +6874,7 @@ +@@ -6997,7 +6997,7 @@ }, { 'name': 'WebUsbAskForUrls', @@ -17010,7 +17200,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -6895,11 +6895,11 @@ +@@ -7018,11 +7018,11 @@ URL patterns must not conflict with WebUsbAskForUrls. Neither policy takes precedence if a URL matches with both. @@ -17024,7 +17214,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -6920,11 +6920,11 @@ +@@ -7043,11 +7043,11 @@ URL patterns can't conflict with WebUsbAskForUrls. Neither policy takes precedence if a URL matches with both. @@ -17038,7 +17228,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -6958,7 +6958,7 @@ +@@ -7081,7 +7081,7 @@ }, { 'name': 'SerialAskForUrls', @@ -17047,7 +17237,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -6981,11 +6981,11 @@ +@@ -7104,11 +7104,11 @@ URL patterns must not conflict with SerialBlockedForUrls. Neither policy takes precedence if a URL matches with both. @@ -17061,7 +17251,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -7008,11 +7008,11 @@ +@@ -7131,11 +7131,11 @@ URL patterns can't conflict with SerialAskForUrls. Neither policy takes precedence if a URL matches with both. @@ -17075,7 +17265,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -7037,7 +7037,7 @@ +@@ -7160,7 +7160,7 @@ }, { 'name': 'SerialAllowUsbDevicesForUrls', @@ -17084,7 +17274,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'array', -@@ -7093,7 +7093,7 @@ +@@ -7216,7 +7216,7 @@ }, { 'name': 'DefaultFileHandlingGuardSetting', @@ -17093,7 +17283,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -7127,7 +7127,7 @@ +@@ -7251,7 +7251,7 @@ }, { 'name': 'FileHandlingAllowedForUrls', @@ -17102,7 +17292,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -7150,11 +7150,11 @@ +@@ -7275,11 +7275,11 @@ URL patterns must not conflict with FileHandlingBlockedForUrls. Neither policy takes precedence if a URL matches with both. @@ -17116,7 +17306,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -7177,11 +7177,11 @@ +@@ -7303,11 +7303,11 @@ URL patterns must not conflict with FileHandlingAllowedForUrls. Neither policy takes precedence if a URL matches with both. @@ -17130,7 +17320,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -7215,7 +7215,7 @@ +@@ -7341,7 +7341,7 @@ }, { 'name': 'DefaultFileSystemWriteGuardSetting', @@ -17139,7 +17329,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -7249,7 +7249,7 @@ +@@ -7375,7 +7375,7 @@ }, { 'name': 'FileSystemReadAskForUrls', @@ -17148,7 +17338,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -7270,11 +7270,11 @@ +@@ -7396,11 +7396,11 @@ URL patterns must not conflict with FileSystemReadBlockedForUrls. Neither policy takes precedence if a URL matches with both. @@ -17162,7 +17352,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -7295,11 +7295,11 @@ +@@ -7421,11 +7421,11 @@ URL patterns can't conflict with FileSystemReadAskForUrls. Neither policy takes precedence if a URL matches with both. @@ -17176,7 +17366,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -7320,11 +7320,11 @@ +@@ -7446,11 +7446,11 @@ URL patterns must not conflict with FileSystemWriteBlockedForUrls. Neither policy takes precedence if a URL matches with both. @@ -17190,7 +17380,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -7345,11 +7345,11 @@ +@@ -7471,11 +7471,11 @@ URL patterns can't conflict with FileSystemWriteAskForUrls. Neither policy takes precedence if a URL matches with both. @@ -17204,7 +17394,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -7409,7 +7409,7 @@ +@@ -7535,7 +7535,7 @@ }, { 'name': 'DeviceLoginScreenAutoSelectCertificateForUrls', @@ -17213,7 +17403,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -7464,11 +7464,11 @@ +@@ -7590,11 +7590,11 @@ If this policy is left not set, no auto-selection will be done for any site. @@ -17227,7 +17417,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -7493,11 +7493,11 @@ +@@ -7619,11 +7619,11 @@ See also policies CookiesBlockedForUrls and CookiesSessionOnlyForUrls. Note that there must be no conflicting URL patterns between these three policies - it is unspecified which policy takes precedence. @@ -17241,7 +17431,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -7522,11 +7522,11 @@ +@@ -7648,11 +7648,11 @@ While no specific policy takes precedence, see CookiesAllowedForUrls and CookiesSessionOnlyForUrls. URL patterns among these 3 policies must not conflict. @@ -17255,7 +17445,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -7551,11 +7551,11 @@ +@@ -7677,11 +7677,11 @@ While no specific policy takes precedence, see CookiesBlockedForUrls and CookiesAllowedForUrls. URL patterns among these 3 policies must not conflict. @@ -17269,7 +17459,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -7574,13 +7574,13 @@ +@@ -7700,13 +7700,13 @@ Leaving the policy unset means DefaultImagesSetting applies for all sites, if it's set. If not, the user's personal setting applies. @@ -17285,7 +17475,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -7599,13 +7599,13 @@ +@@ -7725,13 +7725,13 @@ Leaving the policy unset means DefaultImagesSetting applies for all sites, if it's set. If not, the user's personal setting applies. @@ -17301,7 +17491,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -7624,11 +7624,11 @@ +@@ -7750,11 +7750,11 @@ Leaving the policy unset means DefaultJavaScriptSetting applies for all sites, if it's set. If not, the user's personal setting applies. @@ -17315,7 +17505,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -7647,11 +7647,11 @@ +@@ -7773,11 +7773,11 @@ Leaving the policy unset means DefaultJavaScriptSetting applies for all sites, if it's set. If not, the user's personal setting applies. @@ -17329,7 +17519,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -7671,11 +7671,11 @@ +@@ -7797,11 +7797,11 @@ If this policy is left not set the global default value will be used for all sites either from the 'DefaultKeygenSetting' policy if it is set, or the user's personal configuration otherwise. @@ -17343,7 +17533,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -7695,11 +7695,11 @@ +@@ -7821,11 +7821,11 @@ If this policy is left not set the global default value will be used for all sites either from the 'DefaultKeygenSetting' policy if it is set, or the user's personal configuration otherwise. @@ -17357,7 +17547,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -7731,13 +7731,13 @@ +@@ -7857,13 +7857,13 @@ 'caption': '''Default legacy SameSite cookie behavior setting''', 'tags': [], 'deprecated': True, @@ -17373,7 +17563,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -7756,17 +7756,17 @@ +@@ -7882,17 +7882,17 @@ 'id': 624, 'caption': '''Revert to legacy SameSite behavior for cookies on these sites''', 'tags': [], @@ -17394,7 +17584,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['android:91-'], -@@ -7793,7 +7793,7 @@ +@@ -7919,7 +7919,7 @@ }, { 'name': 'LensRegionSearchEnabled', @@ -17403,7 +17593,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:94-', 'chrome_os:94-'], -@@ -7820,7 +7820,7 @@ +@@ -7946,7 +7946,7 @@ }, { 'name': 'SideSearchEnabled', @@ -17412,7 +17602,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema' : {'type': 'boolean'}, 'supported_on': ['chrome_os:96-'], -@@ -7850,9 +7850,9 @@ +@@ -7976,9 +7976,9 @@ { 'name': 'InsecurePrivateNetworkRequestsAllowed', 'owners': [ @@ -17425,7 +17615,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli ], 'type': 'main', 'schema': { 'type': 'boolean' }, -@@ -7889,7 +7889,7 @@ +@@ -8015,7 +8015,7 @@ 2) Its IP address is private and the other is public. In the future, depending on spec evolution, this policy might apply to all cross-origin requests directed at private IPs or localhost. @@ -17434,7 +17624,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli When this policy is either not set or set to false, the default behavior for requests from insecure contexts to more-private network endpoints will depend on the user's personal configuration for the BlockInsecurePrivateNetworkRequests feature, which may be set by a field trial or on the command line. -@@ -7898,9 +7898,9 @@ +@@ -8024,9 +8024,9 @@ { 'name': 'InsecurePrivateNetworkRequestsAllowedForUrls', 'owners': [ @@ -17447,7 +17637,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli ], 'type': 'list', 'schema': { -@@ -7929,11 +7929,11 @@ +@@ -8055,11 +8055,11 @@ Note that this policy only affects insecure origins, so secure origins (e.g. https://example.com) included in this list will be ignored. @@ -17461,7 +17651,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -7953,11 +7953,11 @@ +@@ -8079,11 +8079,11 @@ Leaving the policy unset means DefaultPluginsSetting applies for all sites, if it's set. If not, the user's personal setting applies. @@ -17475,7 +17665,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -7977,11 +7977,11 @@ +@@ -8103,11 +8103,11 @@ Leaving the policy unset means DefaultPluginsSetting applies for all sites, if it's set. If not, the user's personal setting applies. @@ -17489,7 +17679,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -8005,11 +8005,11 @@ +@@ -8131,11 +8131,11 @@ Leaving the policy unset means DefaultPopupsSetting applies for all sites, if it's set. If not, the user's personal setting applies. @@ -17503,7 +17693,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'array', -@@ -8039,7 +8039,7 @@ +@@ -8165,7 +8165,7 @@ 'can_be_recommended': True, 'can_be_mandatory' : False, }, @@ -17512,7 +17702,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 268, 'caption': '''Register protocol handlers''', 'tags': [], -@@ -8050,7 +8050,7 @@ +@@ -8176,7 +8176,7 @@ }, { 'name': 'PopupsBlockedForUrls', @@ -17521,7 +17711,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -8074,11 +8074,11 @@ +@@ -8200,11 +8200,11 @@ Leaving the policy unset means DefaultPopupsSetting applies for all sites, if it's set. If not, the user's personal setting applies. @@ -17535,7 +17725,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -8097,11 +8097,11 @@ +@@ -8223,11 +8223,11 @@ Leaving the policy unset means DefaultNotificationsSetting applies for all sites, if it's set. If not, the user's personal setting applies. @@ -17549,7 +17739,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -8120,11 +8120,11 @@ +@@ -8246,11 +8246,11 @@ Leaving the policy unset means DefaultNotificationsSetting applies for all sites, if it's set. If not, the user's personal setting applies. @@ -17563,7 +17753,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -8145,7 +8145,7 @@ +@@ -8271,7 +8271,7 @@ If the same URL pattern exists in both this policy and the SensorsBlockedForUrls policy, the latter is prioritized and access to motion or light sensors will be blocked. @@ -17572,7 +17762,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli }, { 'name': 'SensorsBlockedForUrls', -@@ -8170,11 +8170,11 @@ +@@ -8296,11 +8296,11 @@ If the same URL pattern exists in both this policy and the SensorsAllowedForUrls policy, this policy is prioritized and access to motion or light sensors will be blocked. @@ -17586,7 +17776,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -8202,7 +8202,7 @@ +@@ -8328,7 +8328,7 @@ }, { 'name': 'NativeMessagingBlocklist', @@ -17595,7 +17785,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -8227,7 +8227,7 @@ +@@ -8353,7 +8353,7 @@ }, { 'name': 'NativeMessagingWhitelist', @@ -17604,7 +17794,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -8255,7 +8255,7 @@ +@@ -8381,7 +8381,7 @@ }, { 'name': 'NativeMessagingAllowlist', @@ -17613,7 +17803,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -8280,7 +8280,7 @@ +@@ -8406,7 +8406,7 @@ }, { 'name': 'NativeMessagingUserLevelHosts', @@ -17622,7 +17812,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:34-'], -@@ -8308,7 +8308,7 @@ +@@ -8434,7 +8434,7 @@ }, { 'name': 'Disable3DAPIs', @@ -17631,7 +17821,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:9-', 'chrome_os:11-'], -@@ -8336,7 +8336,7 @@ +@@ -8462,7 +8462,7 @@ }, { 'name': 'PolicyRefreshRate', @@ -17640,7 +17830,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', 'minimum': 1800000, 'maximum': 86400000 }, 'supported_on': ['chrome_os:11-', 'chrome.*:79-', 'ios:90-'], -@@ -8356,7 +8356,7 @@ +@@ -8482,7 +8482,7 @@ }, { 'name': 'MaxInvalidationFetchDelay', @@ -17649,7 +17839,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', 'minimum': 1000, 'maximum': 300000 }, 'supported_on': ['chrome.*:30-', 'chrome_os:30-'], -@@ -8375,7 +8375,7 @@ +@@ -8501,7 +8501,7 @@ }, { 'name': 'ChromeFrameRendererSettings', @@ -17658,7 +17848,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -8407,7 +8407,7 @@ +@@ -8533,7 +8533,7 @@ }, { 'name': 'RenderInChromeFrameList', @@ -17667,7 +17857,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -8426,11 +8426,11 @@ +@@ -8552,11 +8552,11 @@ If this policy is not set the default renderer will be used for all sites as specified by the 'ChromeFrameRendererSettings' policy. @@ -17681,7 +17871,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -8449,11 +8449,11 @@ +@@ -8575,11 +8575,11 @@ If this policy is not set the default renderer will be used for all sites as specified by the 'ChromeFrameRendererSettings' policy. @@ -17695,7 +17885,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome_frame:19-32'], -@@ -8471,7 +8471,7 @@ +@@ -8597,7 +8597,7 @@ }, { 'name': 'SkipMetadataCheck', @@ -17704,7 +17894,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_frame:31-32'], -@@ -8493,7 +8493,7 @@ +@@ -8619,7 +8619,7 @@ }, { 'name': 'ChromeFrameContentTypes', @@ -17713,7 +17903,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -8514,7 +8514,7 @@ +@@ -8640,7 +8640,7 @@ }, { 'name': 'ChromeOsLockOnIdleSuspend', @@ -17722,7 +17912,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:9-'], -@@ -8550,7 +8550,7 @@ +@@ -8676,7 +8676,7 @@ }, { 'name': 'ChromeOsMultiProfileUserBehavior', @@ -17731,7 +17921,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -8604,7 +8604,7 @@ +@@ -8730,7 +8730,7 @@ }, { 'name': 'SecondaryGoogleAccountSigninAllowed', @@ -17740,7 +17930,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:65-'], -@@ -8639,7 +8639,7 @@ +@@ -8766,7 +8766,7 @@ }, { 'name': 'ForceLogoutUnauthenticatedUserEnabled', @@ -17749,7 +17939,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:81-'], -@@ -8659,7 +8659,7 @@ +@@ -8786,7 +8786,7 @@ }, { 'name': 'SecurityTokenSessionBehavior', @@ -17758,7 +17948,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -8695,7 +8695,7 @@ +@@ -8822,7 +8822,7 @@ }, { 'name': 'SecurityTokenSessionNotificationSeconds', @@ -17767,7 +17957,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', 'minimum': 0, 'maximum': 9999 }, 'supported_on': ['chrome_os:90-'], -@@ -8711,7 +8711,7 @@ +@@ -8838,7 +8838,7 @@ }, { 'name': 'TargetBlankImpliesNoOpener', @@ -17776,7 +17966,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:88-', 'chrome_os:88-', 'android:88-'], -@@ -8740,11 +8740,11 @@ +@@ -8867,11 +8867,11 @@ This policy will be removed in $1Google Chrome version 95. @@ -17790,7 +17980,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:11-28', 'chrome_os:11-28'], -@@ -8772,7 +8772,7 @@ +@@ -8899,7 +8899,7 @@ }, { 'name': 'AppRecommendationZeroStateEnabled', @@ -17799,7 +17989,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:75-'], -@@ -8792,7 +8792,7 @@ +@@ -8919,7 +8919,7 @@ }, { 'name': 'TranslateEnabled', @@ -17808,7 +17998,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ -@@ -8816,7 +8816,7 @@ +@@ -8943,7 +8943,7 @@ }, { 'name': 'AllowOutdatedPlugins', @@ -17817,7 +18007,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:12-87', 'chrome_os:12-87'], -@@ -8835,7 +8835,7 @@ +@@ -8962,7 +8962,7 @@ }, { 'name': 'AlwaysAuthorizePlugins', @@ -17826,7 +18016,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:13-64', 'chrome_os:13-64'], -@@ -8854,7 +8854,7 @@ +@@ -8981,7 +8981,7 @@ }, { 'name': 'RunAllFlashInAllowMode', @@ -17835,7 +18025,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:63-88', 'chrome_os:63-88'], -@@ -8877,7 +8877,7 @@ +@@ -9004,7 +9004,7 @@ }, { 'name': 'BookmarkBarEnabled', @@ -17844,7 +18034,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:12-', 'chrome_os:12-'], -@@ -8896,7 +8896,7 @@ +@@ -9023,7 +9023,7 @@ }, { 'name': 'EditBookmarksEnabled', @@ -17853,7 +18043,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ -@@ -8919,7 +8919,7 @@ +@@ -9046,7 +9046,7 @@ }, { 'name': 'ShowAppsShortcutInBookmarkBar', @@ -17862,7 +18052,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:37-'], -@@ -8952,7 +8952,7 @@ +@@ -9079,7 +9079,7 @@ }, { 'name': 'AllowFileSelectionDialogs', @@ -17871,7 +18061,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:12-'], -@@ -8981,7 +8981,7 @@ +@@ -9108,7 +9108,7 @@ }, { 'name': 'SecurityKeyPermitAttestation', @@ -17880,7 +18070,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'tags': ['website-sharing'], 'type': 'list', 'schema': { -@@ -9002,7 +9002,7 @@ +@@ -9129,7 +9129,7 @@ }, { 'name': 'U2fSecurityKeyApiEnabled', @@ -17889,7 +18079,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'tags': [], 'type': 'main', 'schema': { 'type': 'boolean' }, -@@ -9033,11 +9033,11 @@ +@@ -9160,11 +9160,11 @@ This is a temporary opt-out mechanism. The U2F API will be removed from Chrome in Chrome 104, at which point this policy will cease to be supported. @@ -17903,7 +18093,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome_frame:12-32'], -@@ -9053,14 +9053,14 @@ +@@ -9180,14 +9180,14 @@ If you set this policy, $3Google Chrome Frame will use the provided directory. @@ -17920,7 +18110,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer' }, 'supported_on': ['chrome_os:11-'], -@@ -9081,7 +9081,7 @@ +@@ -9208,7 +9208,7 @@ }, { 'name': 'ImportBookmarks', @@ -17929,7 +18119,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:15-'], -@@ -9102,7 +9102,7 @@ +@@ -9229,7 +9229,7 @@ }, { 'name': 'ImportHistory', @@ -17938,7 +18128,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:15-'], -@@ -9123,7 +9123,7 @@ +@@ -9250,7 +9250,7 @@ }, { 'name': 'ImportHomepage', @@ -17947,7 +18137,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:15-'], -@@ -9142,7 +9142,7 @@ +@@ -9269,7 +9269,7 @@ }, { 'name': 'ImportSearchEngine', @@ -17956,7 +18146,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:15-'], -@@ -9162,7 +9162,7 @@ +@@ -9289,7 +9289,7 @@ }, { 'name': 'ImportSavedPasswords', @@ -17965,7 +18155,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:15-'], -@@ -9182,7 +9182,7 @@ +@@ -9309,7 +9309,7 @@ }, { 'name': 'ImportAutofillFormData', @@ -17974,7 +18164,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:39-'], -@@ -9202,7 +9202,7 @@ +@@ -9329,7 +9329,7 @@ }, { 'name': 'MaxConnectionsPerProxy', @@ -17983,7 +18173,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer' }, 'supported_on': ['chrome.*:14-'], -@@ -9221,7 +9221,7 @@ +@@ -9348,7 +9348,7 @@ }, { 'name': 'HideWebStorePromo', @@ -17992,7 +18182,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:15-21', 'chrome_os:15-21'], -@@ -9239,7 +9239,7 @@ +@@ -9366,7 +9366,7 @@ }, { 'name': 'URLBlacklist', @@ -18001,7 +18191,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -9262,7 +9262,7 @@ +@@ -9389,7 +9389,7 @@ 'tags': ['filtering'], 'desc': '''This policy is deprecated, please use the 'URLBlocklist' policy instead. @@ -18010,7 +18200,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli From $1Google Chrome version 73, you can block javascript://* URLs. However, it affects only JavaScript entered in the address bar (or, for example, bookmarklets). In-page JavaScript URLs with dynamically loaded data aren't subject to this policy. For example, if you block example.com/abc, then example.com can still load example.com/abc using XMLHTTPRequest. -@@ -9271,7 +9271,7 @@ +@@ -9398,7 +9398,7 @@ }, { 'name': 'URLWhitelist', @@ -18019,7 +18209,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -9294,7 +9294,7 @@ +@@ -9421,7 +9421,7 @@ 'tags': [], 'desc': '''This policy is deprecated, please use the 'URLAllowlist' policy instead. @@ -18028,7 +18218,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli This policy also allows enabling the automatic invocation by the browser of external application registered as protocol handlers for the listed protocols like "tel:" or "ssh:". -@@ -9305,7 +9305,7 @@ +@@ -9432,7 +9432,7 @@ }, { 'name': 'URLBlocklist', @@ -18037,7 +18227,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -9326,7 +9326,7 @@ +@@ -9453,7 +9453,7 @@ 'id': 736, 'caption': '''Block access to a list of URLs''', 'tags': ['filtering'], @@ -18046,7 +18236,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli From $1Google Chrome version 73, you can block javascript://* URLs. However, it affects only JavaScript entered in the address bar (or, for example, bookmarklets). In-page JavaScript URLs with dynamically loaded data aren't subject to this policy. For example, if you block example.com/abc, then example.com can still load example.com/abc using XMLHTTPRequest. -@@ -9337,7 +9337,7 @@ +@@ -9464,7 +9464,7 @@ }, { 'name': 'URLAllowlist', @@ -18055,7 +18245,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -9358,7 +9358,7 @@ +@@ -9485,7 +9485,7 @@ 'id': 737, 'caption': '''Allow access to a list of URLs''', 'tags': [], @@ -18064,7 +18254,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli This policy also allows enabling the automatic invocation by the browser of external application registered as protocol handlers for the listed protocols like "tel:" or "ssh:". -@@ -9371,7 +9371,7 @@ +@@ -9498,7 +9498,7 @@ }, { 'name': 'PolicyAtomicGroupsEnabled', @@ -18073,7 +18263,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:78-', 'chrome_os:78-'], -@@ -9391,7 +9391,7 @@ +@@ -9518,7 +9518,7 @@ }, { 'name': 'PolicyListMultipleSourceMergeList', @@ -18082,7 +18272,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -9421,7 +9421,7 @@ +@@ -9551,7 +9551,7 @@ }, { 'name': 'PolicyDictionaryMultipleSourceMergeList', @@ -18091,7 +18281,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum-list', 'schema': { 'type': 'array', -@@ -9490,7 +9490,7 @@ +@@ -9620,7 +9620,7 @@ }, { 'name': 'CloudUserPolicyMerge', @@ -18099,8 +18289,8 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli + 'owners': ['igorruvinov@9oo91e.qjz9zk', 'pastarmovj@9oo91e.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:92-'], -@@ -9524,7 +9524,7 @@ + 'supported_on': ['chrome.*:92-', 'android:97-'], +@@ -9654,7 +9654,7 @@ }, { 'name': 'EnableExperimentalPolicies', @@ -18109,7 +18299,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -9553,10 +9553,10 @@ +@@ -9683,10 +9683,10 @@ }, { 'name': 'OpenNetworkConfiguration', @@ -18122,7 +18312,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'supported_on': ['chrome_os:16-'], 'features': { 'dynamic_refresh': True, -@@ -9571,10 +9571,10 @@ +@@ -9701,10 +9701,10 @@ }, { 'name': 'DeviceOpenNetworkConfiguration', @@ -18135,7 +18325,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'supported_on': ['chrome_os:16-'], 'device_only': True, 'features': { -@@ -9589,7 +9589,7 @@ +@@ -9719,7 +9719,7 @@ }, { 'name': 'DeviceKerberosEncryptionTypes', @@ -18144,7 +18334,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -9636,7 +9636,7 @@ +@@ -9766,7 +9766,7 @@ }, { 'name': 'DeviceUserPolicyLoopbackProcessingMode', @@ -18153,7 +18343,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -9679,7 +9679,7 @@ +@@ -9809,7 +9809,7 @@ }, { 'name': 'DeviceMachinePasswordChangeRate', @@ -18162,7 +18352,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', 'minimum': 0, 'maximum': 9999 }, 'supported_on': ['chrome_os:66-'], -@@ -9702,7 +9702,7 @@ +@@ -9832,7 +9832,7 @@ }, { 'name': 'DeviceGpoCacheLifetime', @@ -18171,7 +18361,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', 'minimum': 0, 'maximum': 9999 }, 'supported_on': ['chrome_os:73-'], -@@ -9725,7 +9725,7 @@ +@@ -9855,7 +9855,7 @@ }, { 'name': 'DeviceAuthDataCacheLifetime', @@ -18180,7 +18370,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', 'minimum': 0, 'maximum': 9999 }, 'supported_on': ['chrome_os:73-'], -@@ -9748,7 +9748,7 @@ +@@ -9878,7 +9878,7 @@ }, { 'name': 'CloudPrintSubmitEnabled', @@ -18189,7 +18379,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:17-'], -@@ -9768,7 +9768,7 @@ +@@ -9898,7 +9898,7 @@ }, { 'name': 'EnterpriseWebStoreURL', @@ -18198,7 +18388,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:17-28', 'chrome_os:17-28'], -@@ -9785,7 +9785,7 @@ +@@ -9915,7 +9915,7 @@ }, { 'name': 'EnterpriseWebStoreName', @@ -18207,7 +18397,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:17-28', 'chrome_os:17-28'], -@@ -9802,7 +9802,7 @@ +@@ -9932,7 +9932,7 @@ }, { 'name': 'DisablePrintPreview', @@ -18216,7 +18406,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:18-'], -@@ -9820,7 +9820,7 @@ +@@ -9950,7 +9950,7 @@ }, { 'name': 'PrintHeaderFooter', @@ -18225,7 +18415,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:70-', 'chrome.*:70-'], -@@ -9839,7 +9839,7 @@ +@@ -9969,7 +9969,7 @@ }, { 'name': 'DefaultPrinterSelection', @@ -18234,7 +18424,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'validation_schema': { -@@ -9880,7 +9880,7 @@ +@@ -10010,7 +10010,7 @@ }, { 'name': 'DisableSSLRecordSplitting', @@ -18243,7 +18433,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:18-46', 'chrome_os:18-46'], -@@ -9899,7 +9899,7 @@ +@@ -10029,7 +10029,7 @@ }, { 'name': 'EnableOnlineRevocationChecks', @@ -18252,7 +18442,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:19-', 'chrome_os:19-'], -@@ -9919,7 +9919,7 @@ +@@ -10049,7 +10049,7 @@ }, { 'name': 'RequireOnlineRevocationChecksForLocalAnchors', @@ -18261,7 +18451,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:30-', 'chrome.linux:30-', 'chrome.win:30-'], -@@ -9948,7 +9948,7 @@ +@@ -10078,7 +10078,7 @@ }, { 'name': 'EnableSha1ForLocalAnchors', @@ -18270,7 +18460,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:54-71', 'chrome_os:54-71', 'android:54-71'], -@@ -9969,7 +9969,7 @@ +@@ -10099,7 +10099,7 @@ }, { 'name': 'EnableCommonNameFallbackForLocalAnchors', @@ -18279,7 +18469,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:58-65', 'chrome_os:58-65', 'android:58-65'], -@@ -9990,7 +9990,7 @@ +@@ -10120,7 +10120,7 @@ }, { 'name': 'EnableSymantecLegacyInfrastructure', @@ -18288,7 +18478,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:66-75', 'chrome_os:66-75', 'android:66-75'], -@@ -10013,7 +10013,7 @@ +@@ -10143,7 +10143,7 @@ }, { 'name': 'BuiltinCertificateVerifierEnabled', @@ -18297,7 +18487,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:77-83', 'chrome.linux:79-83', 'chrome.mac:83-'], -@@ -10038,7 +10038,7 @@ +@@ -10168,7 +10168,7 @@ }, { 'name': 'ForceEphemeralProfiles', @@ -18306,7 +18496,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:32-'], -@@ -10060,7 +10060,7 @@ +@@ -10190,7 +10190,7 @@ }, { 'name': 'GaiaOfflineSigninTimeLimitDays', @@ -18315,7 +18505,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', 'minimum': -1, 'maximum': 365 }, 'supported_on': ['chrome_os:90-'], -@@ -10085,7 +10085,7 @@ +@@ -10215,7 +10215,7 @@ }, { 'name': 'SAMLOfflineSigninTimeLimit', @@ -18324,7 +18514,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', 'minimum': -1 }, 'supported_on': ['chrome_os:34-'], -@@ -10109,7 +10109,7 @@ +@@ -10239,7 +10239,7 @@ }, { 'name': 'GaiaLockScreenOfflineSigninTimeLimitDays', @@ -18333,7 +18523,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -10142,7 +10142,7 @@ +@@ -10272,7 +10272,7 @@ }, { 'name': 'SamlLockScreenOfflineSigninTimeLimitDays', @@ -18342,7 +18532,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -10175,7 +10175,7 @@ +@@ -10305,7 +10305,7 @@ }, { 'name': 'AutoCleanUpStrategy', @@ -18351,7 +18541,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -10215,7 +10215,7 @@ +@@ -10345,7 +10345,7 @@ }, { 'name': 'EnableDeviceGranularReporting', @@ -18360,7 +18550,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:96-'], -@@ -10245,7 +10245,7 @@ +@@ -10375,7 +10375,7 @@ }, { 'name': 'ReportDeviceVersionInfo', @@ -18369,7 +18559,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:18-'], -@@ -10265,7 +10265,7 @@ +@@ -10395,7 +10395,7 @@ }, { 'name': 'ReportDeviceActivityTimes', @@ -18378,7 +18568,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:18-'], -@@ -10285,7 +10285,7 @@ +@@ -10415,7 +10415,7 @@ }, { 'name': 'ReportDeviceAudioStatus', @@ -18387,7 +18577,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'future_on': ['chrome_os'], -@@ -10316,7 +10316,7 @@ +@@ -10446,7 +10446,7 @@ }, { 'name': 'ReportDeviceBootMode', @@ -18396,7 +18586,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:18-'], -@@ -10336,7 +10336,7 @@ +@@ -10466,7 +10466,7 @@ }, { 'name': 'ReportDeviceLocation', @@ -18405,7 +18595,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'future_on': ['chrome_os'], -@@ -10356,7 +10356,7 @@ +@@ -10486,7 +10486,7 @@ }, { 'name': 'ReportDeviceNetworkConfiguration', @@ -18414,7 +18604,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:96-'], -@@ -10388,7 +10388,7 @@ +@@ -10518,7 +10518,7 @@ }, { 'name': 'ReportDeviceNetworkInterfaces', @@ -18423,7 +18613,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:29-'], -@@ -10408,7 +10408,7 @@ +@@ -10538,7 +10538,7 @@ }, { 'name': 'ReportDeviceNetworkStatus', @@ -18432,7 +18622,25 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:96-'], -@@ -10440,7 +10440,7 @@ +@@ -10570,7 +10570,7 @@ + }, + { + 'name': 'ReportDeviceNetworkTelemetryCollectionRateMs', +- 'owners': ['anasr@google.com', 'cros-reporting-team@google.com'], ++ 'owners': ['anasr@9oo91e.qjz9zk', 'cros-reporting-team@9oo91e.qjz9zk'], + 'type': 'int', + 'schema': { 'type': 'integer', 'minimum': 60000 }, + 'future_on': ['chrome_os'], +@@ -10591,7 +10591,7 @@ + }, + { + 'name': 'ReportDeviceNetworkTelemetryEventCheckingRateMs', +- 'owners': ['anasr@google.com', 'cros-reporting-team@google.com'], ++ 'owners': ['anasr@9oo91e.qjz9zk', 'cros-reporting-team@9oo91e.qjz9zk'], + 'type': 'int', + 'schema': { 'type': 'integer', 'minimum': 60000 }, + 'future_on': ['chrome_os'], +@@ -10612,7 +10612,7 @@ }, { 'name': 'ReportDeviceUsers', @@ -18441,7 +18649,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:32-'], -@@ -10460,7 +10460,7 @@ +@@ -10632,7 +10632,7 @@ }, { 'name': 'ReportDeviceHardwareStatus', @@ -18450,7 +18658,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:42-'], -@@ -10480,7 +10480,7 @@ +@@ -10652,7 +10652,7 @@ }, { 'name': 'ReportDeviceSessionStatus', @@ -18459,7 +18667,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:42-'], -@@ -10500,7 +10500,7 @@ +@@ -10672,7 +10672,7 @@ }, { 'name': 'ReportDeviceSecurityStatus', @@ -18468,7 +18676,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:96-'], -@@ -10531,7 +10531,7 @@ +@@ -10703,7 +10703,7 @@ }, { 'name': 'ReportDeviceGraphicsStatus', @@ -18477,7 +18685,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:81-'], -@@ -10554,7 +10554,7 @@ +@@ -10726,7 +10726,7 @@ }, { 'name': 'ReportDeviceCrashReportInfo', @@ -18486,7 +18694,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:83-'], -@@ -10577,7 +10577,7 @@ +@@ -10749,7 +10749,7 @@ }, { 'name': 'ReportDeviceOsUpdateStatus', @@ -18495,7 +18703,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -10599,7 +10599,7 @@ +@@ -10771,7 +10771,7 @@ }, { 'name': 'ReportDevicePowerStatus', @@ -18504,7 +18712,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:73-'], -@@ -10619,7 +10619,7 @@ +@@ -10791,7 +10791,7 @@ }, { 'name': 'ReportDeviceStorageStatus', @@ -18513,7 +18721,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:73-'], -@@ -10639,7 +10639,7 @@ +@@ -10811,7 +10811,7 @@ }, { 'name': 'ReportDeviceBoardStatus', @@ -18522,7 +18730,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:73-'], -@@ -10659,7 +10659,7 @@ +@@ -10831,7 +10831,7 @@ }, { 'name': 'ReportDeviceCpuInfo', @@ -18531,7 +18739,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:81-'], -@@ -10681,7 +10681,7 @@ +@@ -10853,7 +10853,7 @@ }, { 'name': 'ReportDeviceTimezoneInfo', @@ -18540,7 +18748,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:83-'], -@@ -10702,7 +10702,7 @@ +@@ -10874,7 +10874,7 @@ }, { 'name': 'ReportDeviceMemoryInfo', @@ -18549,7 +18757,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:83-'], -@@ -10723,7 +10723,7 @@ +@@ -10895,7 +10895,7 @@ }, { 'name': 'ReportDeviceBacklightInfo', @@ -18558,7 +18766,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:83-'], -@@ -10744,7 +10744,7 @@ +@@ -10916,7 +10916,7 @@ }, { 'name': 'ReportDeviceAppInfo', @@ -18567,7 +18775,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:85-'], -@@ -10765,7 +10765,7 @@ +@@ -10937,7 +10937,7 @@ }, { 'name': 'ReportDeviceBluetoothInfo', @@ -18576,7 +18784,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:85-'], -@@ -10786,7 +10786,7 @@ +@@ -10958,7 +10958,7 @@ }, { 'name': 'ReportDeviceFanInfo', @@ -18585,7 +18793,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:85-'], -@@ -10807,7 +10807,7 @@ +@@ -10979,7 +10979,7 @@ }, { 'name': 'ReportDeviceVpdInfo', @@ -18594,7 +18802,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:85-'], -@@ -10829,7 +10829,7 @@ +@@ -11001,7 +11001,7 @@ }, { 'name': 'ReportDeviceSystemInfo', @@ -18603,7 +18811,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:86-'], -@@ -10850,7 +10850,7 @@ +@@ -11022,7 +11022,7 @@ }, { 'name': 'ReportDevicePrintJobs', @@ -18612,7 +18820,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'future_on': ['chrome_os'], -@@ -10882,7 +10882,7 @@ +@@ -11054,7 +11054,7 @@ }, { 'name': 'ReportDeviceLoginLogout', @@ -18621,7 +18829,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:96-'], -@@ -10914,7 +10914,7 @@ +@@ -11086,7 +11086,7 @@ }, { 'name': 'ReportUploadFrequency', @@ -18630,7 +18838,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', 'minimum': 60000 }, 'supported_on': ['chrome_os:42-'], -@@ -10934,7 +10934,7 @@ +@@ -11106,7 +11106,7 @@ }, { 'name': 'ReportArcStatusEnabled', @@ -18639,7 +18847,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:55-'], -@@ -10953,7 +10953,7 @@ +@@ -11125,7 +11125,7 @@ }, { 'name': 'ReportCrostiniUsageEnabled', @@ -18648,7 +18856,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:70-'], -@@ -10972,7 +10972,7 @@ +@@ -11144,7 +11144,7 @@ }, { 'name': 'HeartbeatEnabled', @@ -18657,7 +18865,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:43-'], -@@ -10992,7 +10992,7 @@ +@@ -11164,7 +11164,7 @@ }, { 'name': 'HeartbeatFrequency', @@ -18666,7 +18874,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', 'minimum': 30000 }, 'supported_on': ['chrome_os:43-'], -@@ -11012,7 +11012,7 @@ +@@ -11184,7 +11184,7 @@ }, { 'name': 'LogUploadEnabled', @@ -18675,7 +18883,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:46-'], -@@ -11032,7 +11032,7 @@ +@@ -11204,7 +11204,7 @@ }, { 'name': 'DeviceUserWhitelist', @@ -18684,7 +18892,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -11045,11 +11045,11 @@ +@@ -11217,11 +11217,11 @@ 'dynamic_refresh': True, }, 'deprecated': True, @@ -18698,7 +18906,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli If this policy is not configured, there are no restrictions on which users are allowed to sign in. Note that creating new users still requires the DeviceAllowNewUsers policy to be configured appropriately. -@@ -11060,7 +11060,7 @@ +@@ -11232,7 +11232,7 @@ }, { 'name': 'DeviceUserAllowlist', @@ -18707,7 +18915,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -11072,11 +11072,11 @@ +@@ -11244,11 +11244,11 @@ 'features': { 'dynamic_refresh': True, }, @@ -18721,7 +18929,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli If this policy is not configured, there are no restrictions on which users are allowed to sign in. Note that creating new users still requires the DeviceAllowNewUsers policy to be configured appropriately. If DeviceFamilyLinkAccountsAllowed is enabled, Family Link users will be allowed additionally to the accounts defined in this policy.''', -@@ -11084,7 +11084,7 @@ +@@ -11256,7 +11256,7 @@ }, { 'name': 'DeviceAllowNewUsers', @@ -18730,7 +18938,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:12-'], -@@ -11103,7 +11103,7 @@ +@@ -11277,7 +11277,7 @@ }, { 'name': 'DeviceGuestModeEnabled', @@ -18739,7 +18947,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:12-'], -@@ -11121,7 +11121,7 @@ +@@ -11295,7 +11295,7 @@ }, { 'name': 'DeviceShowUserNamesOnSignin', @@ -18748,7 +18956,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:12-'], -@@ -11141,7 +11141,7 @@ +@@ -11315,7 +11315,7 @@ }, { 'name': 'DeviceDataRoamingEnabled', @@ -18757,7 +18965,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:12-'], -@@ -11159,7 +11159,7 @@ +@@ -11333,7 +11333,7 @@ }, { 'name': 'DeviceMetricsReportingEnabled', @@ -18766,7 +18974,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:14-'], -@@ -11181,7 +11181,7 @@ +@@ -11355,7 +11355,7 @@ }, { 'name': 'ChromeOsReleaseChannel', @@ -18775,7 +18983,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -11219,7 +11219,7 @@ +@@ -11393,7 +11393,7 @@ }, { 'name': 'ChromeOsReleaseChannelDelegated', @@ -18784,7 +18992,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:19-'], -@@ -11237,7 +11237,7 @@ +@@ -11411,7 +11411,7 @@ }, { 'name': 'DeviceReleaseLtsTag', @@ -18793,7 +19001,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome_os:86-'], -@@ -11253,7 +11253,7 @@ +@@ -11427,7 +11427,7 @@ }, { 'name': 'DeviceChannelDowngradeBehavior', @@ -18802,7 +19010,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -11298,7 +11298,7 @@ +@@ -11472,7 +11472,7 @@ }, { 'name': 'DeviceEphemeralUsersEnabled', @@ -18811,7 +19019,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:19-'], -@@ -11314,7 +11314,7 @@ +@@ -11488,7 +11488,7 @@ }, { 'name': 'DeviceStartUpUrls', @@ -18820,7 +19028,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -11326,7 +11326,7 @@ +@@ -11500,7 +11500,7 @@ 'dynamic_refresh': True, }, 'deprecated': True, @@ -18829,7 +19037,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 137, 'caption': '''Load specified urls on demo login''', 'tags': [], -@@ -11336,7 +11336,7 @@ +@@ -11510,7 +11510,7 @@ }, { 'name': 'DeviceIdleLogoutTimeout', @@ -18838,7 +19046,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer' }, 'supported_on': ['chrome_os:19-40'], -@@ -11357,7 +11357,7 @@ +@@ -11531,7 +11531,7 @@ }, { 'name': 'DeviceIdleLogoutWarningDuration', @@ -18847,7 +19055,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer' }, 'supported_on': ['chrome_os:19-40'], -@@ -11378,7 +11378,7 @@ +@@ -11552,7 +11552,7 @@ }, { 'name': 'DeviceLoginScreenSaverId', @@ -18856,7 +19064,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome_os:19-40'], -@@ -11397,7 +11397,7 @@ +@@ -11571,7 +11571,7 @@ }, { 'name': 'DeviceLoginScreenSaverTimeout', @@ -18865,7 +19073,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer' }, 'supported_on': ['chrome_os:19-40'], -@@ -11418,7 +11418,7 @@ +@@ -11592,7 +11592,7 @@ }, { 'name': 'DeviceAppPack', @@ -18874,7 +19082,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -11430,7 +11430,7 @@ +@@ -11604,7 +11604,7 @@ 'dynamic_refresh': True, }, 'deprecated': True, @@ -18883,7 +19091,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 135, 'caption': '''List of AppPack extensions''', 'tags': [], -@@ -11442,7 +11442,7 @@ +@@ -11616,7 +11616,7 @@ }, { 'name': 'DeviceAutoUpdateDisabled', @@ -18892,7 +19100,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:19-'], -@@ -11462,7 +11462,7 @@ +@@ -11636,7 +11636,7 @@ }, { 'name': 'DeviceAutoUpdateP2PEnabled', @@ -18901,7 +19109,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:31-'], -@@ -11483,7 +11483,7 @@ +@@ -11657,7 +11657,7 @@ }, { 'name': 'DeviceRollbackAllowedMilestones', @@ -18910,7 +19118,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -11511,7 +11511,7 @@ +@@ -11685,7 +11685,7 @@ }, { 'name': 'DeviceRollbackToTargetVersion', @@ -18919,7 +19127,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -11550,7 +11550,7 @@ +@@ -11724,7 +11724,7 @@ }, { 'name': 'DeviceTargetVersionPrefix', @@ -18928,7 +19136,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome_os:19-'], -@@ -11575,7 +11575,7 @@ +@@ -11749,7 +11749,7 @@ }, { 'name': 'DeviceTargetVersionSelector', @@ -18937,7 +19145,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome_os:95-'], -@@ -11604,7 +11604,7 @@ +@@ -11778,7 +11778,7 @@ }, { 'name': 'DeviceUpdateScatterFactor', @@ -18946,7 +19154,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer' }, 'supported_on': ['chrome_os:20-'], -@@ -11620,7 +11620,7 @@ +@@ -11794,7 +11794,7 @@ }, { 'name': 'DeviceUpdateAllowedConnectionTypes', @@ -18955,7 +19163,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -11641,7 +11641,7 @@ +@@ -11815,7 +11815,7 @@ }, { 'name': 'DeviceUpdateHttpDownloadsEnabled', @@ -18964,7 +19172,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean', -@@ -11661,7 +11661,7 @@ +@@ -11835,7 +11835,7 @@ }, { 'name': 'DeviceLocalAccounts', @@ -18973,7 +19181,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -11683,7 +11683,7 @@ +@@ -11857,7 +11857,7 @@ + }, + { + 'name': 'KioskCRXManifestUpdateURLIgnored', +- 'owners': ['file://chrome/browser/extensions/forced_extensions/OWNERS', 'burunduk@chromium.org'], ++ 'owners': ['file://chrome/browser/extensions/forced_extensions/OWNERS', 'burunduk@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { + 'type': 'boolean', +@@ -11888,7 +11888,7 @@ }, { 'name': 'DeviceLocalAccountAutoLoginId', @@ -18982,7 +19199,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome_os:26-'], -@@ -11702,7 +11702,7 @@ +@@ -11907,7 +11907,7 @@ }, { 'name': 'DeviceLocalAccountAutoLoginDelay', @@ -18991,7 +19208,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer' }, 'supported_on': ['chrome_os:26-'], -@@ -11723,7 +11723,7 @@ +@@ -11928,7 +11928,7 @@ }, { 'name': 'DeviceLocalAccountAutoLoginBailoutEnabled', @@ -19000,7 +19217,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:28-'], -@@ -11742,7 +11742,7 @@ +@@ -11947,7 +11947,7 @@ }, { 'name': 'DeviceLocalAccountPromptForNetworkWhenOffline', @@ -19009,7 +19226,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:33-'], -@@ -11761,7 +11761,7 @@ +@@ -11966,7 +11966,7 @@ }, { 'name': 'DeviceLocalAccountManagedSessionEnabled', @@ -19018,7 +19235,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:70-'], -@@ -11775,7 +11775,7 @@ +@@ -11980,7 +11980,7 @@ 'caption': '''Allow managed session on device''', 'tags': [], 'desc': '''Note that this policy is deprecated and will be removed in $2Google Chrome OS version 88. Public sessions are no longer supported. Please use DeviceLocalAccounts to configure managed-guest sessions instead. @@ -19027,7 +19244,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli If this policy is set to true or left unset, managed guest session will take on "Managed Session" behaviour which lifts many of the restrictions that are in place for regular "Public Sessions". -@@ -11783,7 +11783,7 @@ +@@ -11988,7 +11988,7 @@ }, { 'name': 'DeviceBlockDevmode', @@ -19036,7 +19253,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:37-'], -@@ -11802,7 +11802,7 @@ +@@ -12007,7 +12007,7 @@ 'arc_support': 'This policy controls $2Google Chrome OS developer mode only. If you want to prevent access to Android Developer Options, you need to set the DeveloperToolsDisabled policy.', }, { 'name': 'ManagedGuestSessionAutoLaunchNotificationReduced', @@ -19045,7 +19262,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:83-88'], -@@ -11826,7 +11826,7 @@ +@@ -12031,7 +12031,7 @@ }, { 'name': 'ManagedGuestSessionPrivacyWarningsEnabled', @@ -19054,7 +19271,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'device_only': True, 'type': 'main', 'schema': { 'type': 'boolean' }, -@@ -11850,7 +11850,7 @@ +@@ -12055,7 +12055,7 @@ }, { 'name': 'BackgroundModeEnabled', @@ -19063,7 +19280,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.win:19-', 'chrome.linux:19-'], -@@ -11871,7 +11871,7 @@ +@@ -12076,7 +12076,7 @@ }, { 'name': 'DriveDisabled', @@ -19072,7 +19289,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:19-'], -@@ -11890,7 +11890,7 @@ +@@ -12095,7 +12095,7 @@ }, { 'name': 'DriveDisabledOverCellular', @@ -19081,7 +19298,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:19-'], -@@ -11909,7 +11909,7 @@ +@@ -12114,7 +12114,7 @@ }, { 'name': 'PinnedLauncherApps', @@ -19090,7 +19307,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -11921,20 +11921,20 @@ +@@ -12126,20 +12126,20 @@ 'dynamic_refresh': True, 'per_profile': True, }, @@ -19114,7 +19331,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:21-'], -@@ -11954,7 +11954,7 @@ +@@ -12159,7 +12159,7 @@ }, { 'name': 'DisableSafeBrowsingProceedAnyway', @@ -19123,7 +19340,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ -@@ -11975,11 +11975,11 @@ +@@ -12180,11 +12180,11 @@ Setting the policy to Disabled or leaving it unset means users can choose to proceed to the flagged site after the warning appears. @@ -19137,7 +19354,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:44-84', 'chrome_os:44-84'], -@@ -11996,11 +11996,11 @@ +@@ -12201,11 +12201,11 @@ Setting this policy to false stops users from choosing to send some system information and page content to Google servers. If this setting is true or not configured, then users will be allowed to send some system information and page content to Safe Browsing to help detect dangerous apps and sites. @@ -19151,7 +19368,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:22-', 'chrome_os:22-'], -@@ -12036,7 +12036,7 @@ +@@ -12241,7 +12241,7 @@ }, { 'name': 'ExternalStorageDisabled', @@ -19160,7 +19377,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:22-'], -@@ -12054,7 +12054,7 @@ +@@ -12259,7 +12259,7 @@ }, { 'name': 'ExternalStorageReadOnly', @@ -19169,7 +19386,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 343, 'type': 'main', 'schema': { 'type': 'boolean' }, -@@ -12072,7 +12072,7 @@ +@@ -12277,7 +12277,7 @@ }, { 'name': 'AudioOutputAllowed', @@ -19178,7 +19395,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:23-'], -@@ -12092,7 +12092,7 @@ +@@ -12297,7 +12297,7 @@ }, { 'name': 'AudioCaptureAllowed', @@ -19187,7 +19404,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:25-', 'chrome_os:23-'], -@@ -12113,7 +12113,7 @@ +@@ -12318,7 +12318,7 @@ }, { 'name': 'AudioCaptureAllowedUrls', @@ -19196,7 +19413,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -12130,11 +12130,11 @@ +@@ -12335,11 +12335,11 @@ 'tags': ['website-sharing'], 'desc': '''Setting the policy means you specify the URL list whose patterns get matched to the security origin of the requesting URL. A match grants access to audio capture devices without prompt @@ -19210,7 +19427,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:25-', 'chrome_os:25-'], -@@ -12154,7 +12154,7 @@ +@@ -12359,7 +12359,7 @@ }, { 'name': 'VideoCaptureAllowedUrls', @@ -19219,7 +19436,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -12171,11 +12171,11 @@ +@@ -12376,11 +12376,11 @@ 'tags': ['website-sharing'], 'desc': '''Setting the policy means you specify the URL list whose patterns get matched to the security origin of the requesting URL. A match grants access to video capture devices without prompt @@ -19233,7 +19450,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:22-', 'chrome.*:22-'], -@@ -12191,7 +12191,7 @@ +@@ -12396,7 +12396,7 @@ }, { 'name': 'SystemTimezone', @@ -19242,7 +19459,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome_os:22-'], -@@ -12211,7 +12211,7 @@ +@@ -12416,7 +12416,7 @@ }, { 'name': 'SystemUse24HourClock', @@ -19251,7 +19468,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:30-'], -@@ -12233,7 +12233,7 @@ +@@ -12438,7 +12438,7 @@ }, { 'name': 'TouchVirtualKeyboardEnabled', @@ -19260,7 +19477,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:37-' ], -@@ -12255,7 +12255,7 @@ +@@ -12460,7 +12460,7 @@ }, { 'name': 'ShowLogoutButtonInTray', @@ -19269,7 +19486,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:25-'], -@@ -12273,7 +12273,7 @@ +@@ -12478,7 +12478,7 @@ }, { 'name': 'BuiltInDnsClientEnabled', @@ -19278,7 +19495,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ -@@ -12299,7 +12299,7 @@ +@@ -12504,7 +12504,7 @@ }, { 'name': 'DnsOverHttpsMode', @@ -19287,7 +19504,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -12354,7 +12354,7 @@ +@@ -12559,7 +12559,7 @@ }, { 'name': 'DnsOverHttpsTemplates', @@ -19296,7 +19513,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': [ -@@ -12382,7 +12382,7 @@ +@@ -12587,7 +12587,7 @@ }, { 'name': 'AdditionalDnsQueryTypesEnabled', @@ -19305,7 +19522,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ -@@ -12419,7 +12419,7 @@ +@@ -12624,7 +12624,7 @@ }, { 'name': 'ShelfAutoHideBehavior', @@ -19314,7 +19531,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -12456,7 +12456,7 @@ +@@ -12661,7 +12661,7 @@ }, { 'name': 'ShelfAlignment', @@ -19323,7 +19540,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', # In shelf_prefs.cc, there are 3 const char[] defining kShelfAlignmentLocal values: # ash::kShelfAlignmentBottom = "Bottom", ash::kShelfAlignmnetLeft = "Left", -@@ -12511,7 +12511,7 @@ +@@ -12716,7 +12716,7 @@ }, { 'name': 'SystemFeaturesDisableList', @@ -19332,7 +19549,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum-list', 'schema': { 'type': 'array', -@@ -12591,7 +12591,7 @@ +@@ -12796,7 +12796,7 @@ }, { 'name': 'SystemFeaturesDisableMode', @@ -19341,7 +19558,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -12633,7 +12633,7 @@ +@@ -12838,7 +12838,7 @@ }, { 'name': 'FloatingAccessibilityMenuEnabled', @@ -19350,7 +19567,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:84-'], -@@ -12653,7 +12653,7 @@ +@@ -12858,7 +12858,7 @@ }, { 'name': 'UserDisplayName', @@ -19359,7 +19576,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome_os:25-'], -@@ -12675,7 +12675,7 @@ +@@ -12880,7 +12880,7 @@ }, { 'name': 'SessionLengthLimit', @@ -19368,7 +19585,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer' }, 'supported_on': ['chrome_os:25-'], -@@ -12697,7 +12697,7 @@ +@@ -12902,7 +12902,7 @@ }, { 'name': 'FullscreenAllowed', @@ -19377,7 +19594,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.win:31-', 'chrome.linux:31-', 'chrome_os:31-'], -@@ -12718,7 +12718,7 @@ +@@ -12923,7 +12923,7 @@ 'id': 804, 'name': 'FullscreenAlertEnabled', 'caption': '''Enable fullscreen alert''', @@ -19386,7 +19603,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': {'type': 'boolean'}, 'supported_on': ['chrome_os:88-'], -@@ -12749,7 +12749,7 @@ +@@ -12954,7 +12954,7 @@ }, { 'name': 'ScreenDimDelayAC', @@ -19395,7 +19612,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -12780,7 +12780,7 @@ +@@ -12985,7 +12985,7 @@ }, { 'name': 'ScreenOffDelayAC', @@ -19404,7 +19621,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -12811,7 +12811,7 @@ +@@ -13016,7 +13016,7 @@ }, { 'name': 'ScreenLockDelayAC', @@ -19413,7 +19630,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -12844,7 +12844,7 @@ +@@ -13049,7 +13049,7 @@ }, { 'name': 'IdleWarningDelayAC', @@ -19422,7 +19639,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -12875,7 +12875,7 @@ +@@ -13080,7 +13080,7 @@ }, { 'name': 'IdleDelayAC', @@ -19431,7 +19648,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -12904,7 +12904,7 @@ +@@ -13109,7 +13109,7 @@ }, { 'name': 'ScreenDimDelayBattery', @@ -19440,7 +19657,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -12935,7 +12935,7 @@ +@@ -13140,7 +13140,7 @@ }, { 'name': 'ScreenOffDelayBattery', @@ -19449,7 +19666,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -12966,7 +12966,7 @@ +@@ -13171,7 +13171,7 @@ }, { 'name': 'ScreenLockDelayBattery', @@ -19458,7 +19675,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -12999,7 +12999,7 @@ +@@ -13204,7 +13204,7 @@ }, { 'name': 'IdleWarningDelayBattery', @@ -19467,7 +19684,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -13030,7 +13030,7 @@ +@@ -13235,7 +13235,7 @@ }, { 'name': 'IdleDelayBattery', @@ -19476,7 +19693,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -13059,7 +13059,7 @@ +@@ -13264,7 +13264,7 @@ }, { 'name': 'IdleAction', @@ -19485,7 +19702,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -13106,7 +13106,7 @@ +@@ -13311,7 +13311,7 @@ }, { 'name': 'IdleActionAC', @@ -19494,7 +19711,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -13155,7 +13155,7 @@ +@@ -13360,7 +13360,7 @@ }, { 'name': 'IdleActionBattery', @@ -19503,7 +19720,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -13204,7 +13204,7 @@ +@@ -13409,7 +13409,7 @@ }, { 'name': 'LidCloseAction', @@ -19512,7 +19729,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -13249,7 +13249,7 @@ +@@ -13454,7 +13454,7 @@ }, { 'name': 'PowerManagementUsesAudioActivity', @@ -19521,7 +19738,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:26-'], -@@ -13267,7 +13267,7 @@ +@@ -13472,7 +13472,7 @@ }, { 'name': 'PowerManagementUsesVideoActivity', @@ -19530,7 +19747,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:26-'], -@@ -13286,7 +13286,7 @@ +@@ -13491,7 +13491,7 @@ }, { 'name': 'PresentationIdleDelayScale', @@ -19539,7 +19756,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer' }, 'supported_on': ['chrome_os:26-28'], -@@ -13303,7 +13303,7 @@ +@@ -13508,7 +13508,7 @@ }, { 'name': 'PresentationScreenDimDelayScale', @@ -19548,7 +19765,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer' }, 'supported_on': ['chrome_os:29-'], -@@ -13323,7 +13323,7 @@ +@@ -13528,7 +13528,7 @@ }, { 'name': 'AllowWakeLocks', @@ -19557,7 +19774,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:71-'], -@@ -13352,7 +13352,7 @@ +@@ -13557,7 +13557,7 @@ }, { 'name': 'AllowScreenWakeLocks', @@ -19566,7 +19783,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:28-'], -@@ -13381,7 +13381,7 @@ +@@ -13586,7 +13586,7 @@ }, { 'name': 'UserActivityScreenDimDelayScale', @@ -19575,7 +19792,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer' }, 'supported_on': ['chrome_os:29-'], -@@ -13401,7 +13401,7 @@ +@@ -13606,7 +13606,7 @@ }, { 'name': 'WaitForInitialUserActivity', @@ -19584,7 +19801,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:32-'], -@@ -13419,7 +13419,7 @@ +@@ -13624,7 +13624,7 @@ }, { 'name': 'PowerManagementIdleSettings', @@ -19593,7 +19810,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'object', -@@ -13523,7 +13523,7 @@ +@@ -13728,7 +13728,7 @@ }, { 'name': 'ScreenLockDelays', @@ -19602,7 +19819,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'object', -@@ -13560,7 +13560,7 @@ +@@ -13765,7 +13765,7 @@ }, { 'name': 'DeviceLoginScreenPowerManagement', @@ -19611,7 +19828,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'object', -@@ -13648,7 +13648,7 @@ +@@ -13853,7 +13853,7 @@ }, { 'name': 'DeviceAllowRedeemChromeOsRegistrationOffers', @@ -19620,7 +19837,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:26-'], -@@ -13677,7 +13677,7 @@ +@@ -13882,7 +13882,7 @@ }, { 'name': 'TermsOfServiceURL', @@ -19629,7 +19846,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome_os:26-'], -@@ -13697,7 +13697,7 @@ +@@ -13902,7 +13902,7 @@ }, { 'name': 'ShowAccessibilityOptionsInSystemTrayMenu', @@ -19638,7 +19855,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:27-'], -@@ -13718,7 +13718,7 @@ +@@ -13923,7 +13923,7 @@ }, { 'name': 'DeviceLoginScreenShowOptionsInSystemTrayMenu', @@ -19647,7 +19864,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:80-'], -@@ -13739,7 +13739,7 @@ +@@ -13944,7 +13944,7 @@ }, { 'name': 'LargeCursorEnabled', @@ -19656,7 +19873,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:29-'], -@@ -13758,7 +13758,7 @@ +@@ -13963,7 +13963,7 @@ }, { 'name': 'SpokenFeedbackEnabled', @@ -19665,7 +19882,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:29-'], -@@ -13777,7 +13777,7 @@ +@@ -13982,7 +13982,7 @@ }, { 'name': 'HighContrastEnabled', @@ -19674,7 +19891,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:29-'], -@@ -13796,7 +13796,7 @@ +@@ -14001,7 +14001,7 @@ }, { 'name': 'DeviceLoginScreenAccessibilityShortcutsEnabled', @@ -19683,7 +19900,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:81-'], -@@ -13822,7 +13822,7 @@ +@@ -14027,7 +14027,7 @@ }, { 'name': 'AccessibilityShortcutsEnabled', @@ -19692,7 +19909,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:81-'], -@@ -13847,7 +13847,7 @@ +@@ -14052,7 +14052,7 @@ }, { 'name': 'VirtualKeyboardEnabled', @@ -19701,7 +19918,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:34-'], -@@ -13866,7 +13866,7 @@ +@@ -14071,7 +14071,7 @@ }, { 'name': 'VirtualKeyboardFeatures', @@ -19710,7 +19927,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'object', -@@ -13918,7 +13918,7 @@ +@@ -14123,7 +14123,7 @@ }, { 'name': 'StickyKeysEnabled', @@ -19719,7 +19936,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:76-'], -@@ -13937,7 +13937,7 @@ +@@ -14142,7 +14142,7 @@ }, { 'name': 'SelectToSpeakEnabled', @@ -19728,7 +19945,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:77-'], -@@ -13962,7 +13962,7 @@ +@@ -14167,7 +14167,7 @@ }, { 'name': 'DictationEnabled', @@ -19737,7 +19954,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:78-'], -@@ -13987,7 +13987,7 @@ +@@ -14192,7 +14192,7 @@ }, { 'name': 'KeyboardFocusHighlightEnabled', @@ -19746,7 +19963,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:78-'], -@@ -14014,7 +14014,7 @@ +@@ -14219,7 +14219,7 @@ }, { 'name': 'CursorHighlightEnabled', @@ -19755,7 +19972,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:78-'], -@@ -14041,7 +14041,7 @@ +@@ -14246,7 +14246,7 @@ }, { 'name': 'CaretHighlightEnabled', @@ -19764,7 +19981,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:78-'], -@@ -14068,7 +14068,7 @@ +@@ -14273,7 +14273,7 @@ }, { 'name': 'MonoAudioEnabled', @@ -19773,7 +19990,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:78-'], -@@ -14095,7 +14095,7 @@ +@@ -14300,7 +14300,7 @@ }, { 'name': 'AutoclickEnabled', @@ -19782,7 +19999,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:78-'], -@@ -14122,7 +14122,7 @@ +@@ -14327,7 +14327,7 @@ }, { 'name': 'KeyboardDefaultToFunctionKeys', @@ -19791,7 +20008,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:35-'], -@@ -14141,7 +14141,7 @@ +@@ -14346,7 +14346,7 @@ }, { 'name': 'ScreenMagnifierType', @@ -19800,7 +20017,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -14180,7 +14180,7 @@ +@@ -14385,7 +14385,7 @@ }, { 'name': 'DeviceLoginScreenDefaultLargeCursorEnabled', @@ -19809,7 +20026,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:29-'], -@@ -14202,7 +14202,7 @@ +@@ -14407,7 +14407,7 @@ }, { 'name': 'DeviceLoginScreenLargeCursorEnabled', @@ -19818,7 +20035,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:78-'], -@@ -14227,7 +14227,7 @@ +@@ -14432,7 +14432,7 @@ }, { 'name': 'DeviceLoginScreenDefaultSpokenFeedbackEnabled', @@ -19827,7 +20044,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:29-'], -@@ -14249,7 +14249,7 @@ +@@ -14454,7 +14454,7 @@ }, { 'name': 'DeviceLoginScreenSpokenFeedbackEnabled', @@ -19836,7 +20053,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -14274,7 +14274,7 @@ +@@ -14479,7 +14479,7 @@ }, { 'name': 'DeviceLoginScreenDefaultHighContrastEnabled', @@ -19845,7 +20062,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:29-'], -@@ -14296,7 +14296,7 @@ +@@ -14501,7 +14501,7 @@ }, { 'name': 'DeviceLoginScreenHighContrastEnabled', @@ -19854,7 +20071,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -14321,7 +14321,7 @@ +@@ -14526,7 +14526,7 @@ }, { 'name': 'DeviceLoginScreenDefaultVirtualKeyboardEnabled', @@ -19863,7 +20080,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:34-'], -@@ -14346,7 +14346,7 @@ +@@ -14551,7 +14551,7 @@ }, { 'name': 'DeviceLoginScreenVirtualKeyboardEnabled', @@ -19872,7 +20089,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -14371,7 +14371,7 @@ +@@ -14576,7 +14576,7 @@ }, { 'name': 'PrimaryMouseButtonSwitch', @@ -19881,7 +20098,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:81-'], -@@ -14396,7 +14396,7 @@ +@@ -14601,7 +14601,7 @@ }, { 'name': 'DeviceLoginScreenPrimaryMouseButtonSwitch', @@ -19890,7 +20107,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:81-'], -@@ -14421,7 +14421,7 @@ +@@ -14626,7 +14626,7 @@ }, { 'name': 'SharedClipboardEnabled', @@ -19899,7 +20116,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:79-', 'chrome_os:79-', 'android:79-'], -@@ -14447,7 +14447,7 @@ +@@ -14652,7 +14652,7 @@ }, { 'name': 'DeviceLoginScreenDefaultScreenMagnifierType', @@ -19908,7 +20125,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -14491,7 +14491,7 @@ +@@ -14696,7 +14696,7 @@ }, { 'name': 'DeviceLoginScreenScreenMagnifierType', @@ -19917,7 +20134,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -14538,7 +14538,7 @@ +@@ -14743,7 +14743,7 @@ }, { 'name': 'DeviceLoginScreenDictationEnabled', @@ -19926,7 +20143,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -14563,7 +14563,7 @@ +@@ -14768,7 +14768,7 @@ }, { 'name': 'DeviceLoginScreenSelectToSpeakEnabled', @@ -19935,7 +20152,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -14588,7 +14588,7 @@ +@@ -14793,7 +14793,7 @@ }, { 'name': 'DeviceLoginScreenCursorHighlightEnabled', @@ -19944,7 +20161,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -14613,7 +14613,7 @@ +@@ -14818,7 +14818,7 @@ }, { 'name': 'DeviceLoginScreenCaretHighlightEnabled', @@ -19953,7 +20170,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -14638,7 +14638,7 @@ +@@ -14843,7 +14843,7 @@ }, { 'name': 'DeviceLoginScreenMonoAudioEnabled', @@ -19962,7 +20179,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -14665,7 +14665,7 @@ +@@ -14870,7 +14870,7 @@ }, { 'name': 'DeviceLoginScreenAutoclickEnabled', @@ -19971,7 +20188,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -14692,7 +14692,7 @@ +@@ -14897,7 +14897,7 @@ }, { 'name': 'DeviceLoginScreenStickyKeysEnabled', @@ -19980,7 +20197,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -14717,7 +14717,7 @@ +@@ -14922,7 +14922,7 @@ }, { 'name': 'DeviceLoginScreenKeyboardFocusHighlightEnabled', @@ -19989,7 +20206,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -14744,7 +14744,7 @@ +@@ -14949,7 +14949,7 @@ }, { 'name': 'HideWebStoreIcon', @@ -19998,7 +20215,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:26-', 'chrome_os:68-'], -@@ -14764,7 +14764,7 @@ +@@ -14969,7 +14969,7 @@ }, { 'name': 'DeviceStartUpFlags', @@ -20007,7 +20224,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -14786,7 +14786,7 @@ +@@ -14991,7 +14991,7 @@ }, { 'name': 'UptimeLimit', @@ -20016,7 +20233,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer' }, 'supported_on': ['chrome_os:29-'], -@@ -14807,7 +14807,7 @@ +@@ -15012,7 +15012,7 @@ }, { 'name': 'RebootAfterUpdate', @@ -20025,7 +20242,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:29-'], -@@ -14831,7 +14831,7 @@ +@@ -15036,7 +15036,7 @@ }, { 'name': 'VariationsRestrictParameter', @@ -20034,7 +20251,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:27-', 'android:34-'], -@@ -14852,7 +14852,7 @@ +@@ -15057,7 +15057,7 @@ }, { 'name': 'DeviceVariationsRestrictParameter', @@ -20043,7 +20260,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome_os:28-'], -@@ -14873,7 +14873,7 @@ +@@ -15078,7 +15078,7 @@ }, { 'name': 'ChromeVariations', @@ -20052,7 +20269,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -14910,7 +14910,7 @@ +@@ -15115,7 +15115,7 @@ 'tags': [], 'desc': '''Configuring this policy allows to specify which variations are allowed to be applied in $1Google Chrome. @@ -20061,7 +20278,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli Setting the VariationsEnabled (value 0), or leaving the policy not set allows all variations to be applied to the browser. -@@ -14920,7 +14920,7 @@ +@@ -15125,7 +15125,7 @@ }, { 'name': 'DeviceChromeVariations', @@ -20070,7 +20287,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -14955,7 +14955,7 @@ +@@ -15160,7 +15160,7 @@ 'tags': [], 'desc': '''Configuring this policy allows to specify which variations are allowed to be applied on an enterprise-managed $2Google Chrome OS device. @@ -20079,7 +20296,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli Setting the VariationsEnabled (value 0), or leaving the policy not set allows all variations to be applied to $2Google Chrome OS. -@@ -14965,7 +14965,7 @@ +@@ -15170,7 +15170,7 @@ }, { 'name': 'AttestationEnabledForDevice', @@ -20088,7 +20305,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:28-'], -@@ -14984,7 +14984,7 @@ +@@ -15189,7 +15189,7 @@ }, { 'name': 'AttestationEnabledForUser', @@ -20097,7 +20314,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:28-'], -@@ -15002,7 +15002,7 @@ +@@ -15207,7 +15207,7 @@ }, { 'name': 'AttestationExtensionAllowlist', @@ -20106,7 +20323,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -15023,7 +15023,7 @@ +@@ -15228,7 +15228,7 @@ }, { 'name': 'AttestationExtensionWhitelist', @@ -20115,7 +20332,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -15047,7 +15047,7 @@ +@@ -15252,7 +15252,7 @@ }, { 'name': 'AttestationForContentProtectionEnabled', @@ -20124,7 +20341,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:31-'], -@@ -15066,7 +15066,7 @@ +@@ -15271,7 +15271,7 @@ }, { 'name': 'SuppressChromeFrameTurndownPrompt', @@ -20133,7 +20350,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'caption': '''Suppress the $3Google Chrome Frame turndown prompt''', 'tags': [], 'desc': '''Suppresses the turndown prompt that appears when a site is rendered by $3Google Chrome Frame.''', -@@ -15082,7 +15082,7 @@ +@@ -15287,7 +15287,7 @@ }, { 'name': 'SupervisedUsersEnabled', @@ -20142,7 +20359,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'deprecated': True, -@@ -15105,7 +15105,7 @@ +@@ -15310,7 +15310,7 @@ }, { 'name': 'SupervisedUserCreationEnabled', @@ -20151,7 +20368,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'deprecated': True, -@@ -15128,7 +15128,7 @@ +@@ -15333,7 +15333,7 @@ # It, however, needs to be here both because this is the source of the list of Chrome's App # Restrictions on Android, and to avoid possible future naming conflicts with policies. 'name': 'SupervisedUserContentProviderEnabled', @@ -20160,7 +20377,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'deprecated': True, -@@ -15147,7 +15147,7 @@ +@@ -15352,7 +15352,7 @@ }, { 'name': 'ManagedBookmarks', @@ -20169,7 +20386,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'array', -@@ -15180,20 +15180,20 @@ +@@ -15385,20 +15385,20 @@ "toplevel_name": "My managed bookmarks folder" }, { "name": "Google", @@ -20194,7 +20411,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli } ] } -@@ -15201,13 +15201,13 @@ +@@ -15406,13 +15406,13 @@ 'id': 227, 'caption': '''Managed Bookmarks''', 'tags': [], @@ -20210,7 +20427,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['android:31-'], -@@ -15225,7 +15225,7 @@ +@@ -15430,7 +15430,7 @@ }, { 'name': 'UserAvatarImage', @@ -20219,7 +20436,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'external', 'schema': { 'type': 'object', -@@ -15262,7 +15262,7 @@ +@@ -15467,7 +15467,7 @@ }, { 'name': 'WallpaperImage', @@ -20228,7 +20445,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'external', 'schema': { 'type': 'object', -@@ -15297,7 +15297,7 @@ +@@ -15502,7 +15502,7 @@ }, { 'name': 'EnableDeprecatedWebPlatformFeatures', @@ -20237,7 +20454,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum-list', 'schema': { 'type': 'array', -@@ -15336,7 +15336,7 @@ +@@ -15541,7 +15541,7 @@ }, { 'name': 'DeviceTransferSAMLCookies', @@ -20246,7 +20463,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:38-'], -@@ -15362,7 +15362,7 @@ +@@ -15567,7 +15567,7 @@ }, { 'name': 'EasyUnlockAllowed', @@ -20255,7 +20472,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:38-'], -@@ -15383,7 +15383,7 @@ +@@ -15588,7 +15588,7 @@ }, { 'name': 'SessionLocales', @@ -20264,7 +20481,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -15411,7 +15411,7 @@ +@@ -15616,7 +15616,7 @@ }, { 'name': 'BrowserGuestModeEnabled', @@ -20273,7 +20490,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:38-'], -@@ -15429,7 +15429,7 @@ +@@ -15634,7 +15634,7 @@ }, { 'name': 'BrowserGuestModeEnforced', @@ -20282,7 +20499,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:77-'], -@@ -15447,7 +15447,7 @@ +@@ -15652,7 +15652,7 @@ }, { 'name': 'BrowserAddPersonEnabled', @@ -20291,7 +20508,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:39-'], -@@ -15465,7 +15465,7 @@ +@@ -15670,7 +15670,7 @@ }, { 'name': 'ForceBrowserSignin', @@ -20300,7 +20517,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'deprecated': True, 'schema': { 'type': 'boolean' }, -@@ -15486,7 +15486,7 @@ +@@ -15691,7 +15691,7 @@ }, { 'name': 'BrowserSignin', @@ -20309,7 +20526,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -15525,13 +15525,13 @@ +@@ -15730,13 +15730,13 @@ If the policy is set to "Enable browser sign-in," then the user is allowed to sign in to the browser. On all platforms except iOS, the user is automatically signed in to the browser when signed in to Google web services like Gmail. Being signed in to the browser means the user's account information will be kept by the browser. However, it does not mean that $1Google Chrome Sync will be turned on by default; the user must separately opt-in to use this feature. Enabling this policy will prevent the user from turning off the setting that allows browser sign-in. To control the availability of $1Google Chrome Sync, use the SyncDisabled policy. @@ -20325,7 +20542,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -15591,7 +15591,7 @@ +@@ -15796,7 +15796,7 @@ }, { 'name': 'SSLVersionFallbackMin', @@ -20334,7 +20551,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -15636,7 +15636,7 @@ +@@ -15841,7 +15841,7 @@ }, { 'name': 'SSLVersionMax', @@ -20343,7 +20560,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -15714,7 +15714,7 @@ +@@ -15919,7 +15919,7 @@ }, { 'name': 'CertificateTransparencyEnforcementDisabledForUrls', @@ -20352,7 +20569,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -15737,11 +15737,11 @@ +@@ -15942,11 +15942,11 @@ Leaving the policy unset means that if certificates requiring disclosure through Certificate Transparency aren't disclosed, then $1Google Chrome doesn't trust those certificates. @@ -20366,7 +20583,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -15774,7 +15774,7 @@ +@@ -15979,7 +15979,7 @@ }, { 'name': 'CertificateTransparencyEnforcementDisabledForLegacyCas', @@ -20375,7 +20592,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -15801,7 +15801,7 @@ +@@ -16006,7 +16006,7 @@ }, { 'name': 'RC4Enabled', @@ -20384,7 +20601,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean', -@@ -15826,7 +15826,7 @@ +@@ -16031,7 +16031,7 @@ }, { 'name': 'DHEEnabled', @@ -20393,7 +20610,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean', -@@ -15853,7 +15853,7 @@ +@@ -16058,7 +16058,7 @@ }, { 'name': 'ContextualSearchEnabled', @@ -20402,7 +20619,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ -@@ -15884,7 +15884,7 @@ +@@ -16089,7 +16089,7 @@ }, { 'name': 'DeviceRebootOnShutdown', @@ -20411,7 +20628,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:41-'], -@@ -15902,7 +15902,7 @@ +@@ -16107,7 +16107,7 @@ }, { 'name': 'ExtensionCacheSize', @@ -20420,7 +20637,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer' }, 'supported_on': ['chrome_os:43-'], -@@ -15921,7 +15921,7 @@ +@@ -16126,7 +16126,7 @@ }, { 'name': 'DeviceLoginScreenDomainAutoComplete', @@ -20429,7 +20646,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': [ 'chrome_os:44-'], -@@ -15939,7 +15939,7 @@ +@@ -16144,7 +16144,7 @@ }, { 'name': 'ForceMaximizeOnFirstRun', @@ -20438,7 +20655,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:43-'], -@@ -15957,7 +15957,7 @@ +@@ -16162,7 +16162,7 @@ }, { 'name': 'SSLErrorOverrideAllowed', @@ -20447,7 +20664,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:44-', 'chrome_os:44-', 'android:44-'], -@@ -15975,7 +15975,7 @@ +@@ -16180,7 +16180,7 @@ }, { 'name': 'SSLErrorOverrideAllowedForOrigins', @@ -20456,7 +20673,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -15996,11 +15996,11 @@ +@@ -16201,11 +16201,11 @@ Leaving the policy unset means SSLErrorOverrideAllowed applies for all sites. @@ -20470,7 +20687,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -16011,7 +16011,7 @@ +@@ -16216,7 +16216,7 @@ 'dynamic_refresh': True, 'per_profile': True, }, @@ -20479,7 +20696,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 865, 'caption': '''Allow origins to query for device attributes''', 'tags': [], -@@ -16021,7 +16021,7 @@ +@@ -16226,7 +16226,7 @@ }, { 'name': 'QuicAllowed', @@ -20488,7 +20705,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:43-', 'chrome_os:43-'], -@@ -16039,7 +16039,7 @@ +@@ -16244,7 +16244,7 @@ }, { 'name': 'KeyPermissions', @@ -20497,7 +20714,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'object', -@@ -16082,7 +16082,7 @@ +@@ -16287,7 +16287,7 @@ }, { 'name': 'WelcomePageOnOSUpgradeEnabled', @@ -20506,7 +20723,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'supported_on': ['chrome.win:45-62'], 'type': 'main', 'schema': { 'type': 'boolean' }, -@@ -16101,7 +16101,7 @@ +@@ -16306,7 +16306,7 @@ }, { 'name': 'HardwareAccelerationModeEnabled', @@ -20515,7 +20732,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:46-'], -@@ -16119,7 +16119,7 @@ +@@ -16324,7 +16324,7 @@ }, { 'name': 'UnifiedDesktopEnabledByDefault', @@ -20524,7 +20741,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:47-'], -@@ -16138,7 +16138,7 @@ +@@ -16343,7 +16343,7 @@ }, { 'name': 'DisplayRotationDefault', @@ -20533,7 +20750,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -16183,7 +16183,7 @@ +@@ -16388,7 +16388,7 @@ }, { 'name': 'ArcEnabled', @@ -20542,7 +20759,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:50-'], -@@ -16201,7 +16201,7 @@ +@@ -16406,7 +16406,7 @@ }, { 'name': 'ArcPolicy', @@ -20551,7 +20768,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'description_schema': { -@@ -16261,7 +16261,7 @@ +@@ -16466,7 +16466,7 @@ }, { 'name': 'AllowKioskAppControlChromeVersion', @@ -20560,7 +20777,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:51-'], -@@ -16283,7 +16283,7 @@ +@@ -16488,7 +16488,7 @@ }, { 'name': 'LoginAuthenticationBehavior', @@ -20569,7 +20786,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -16319,7 +16319,7 @@ +@@ -16524,7 +16524,7 @@ }, { 'name': 'UsbDetachableWhitelist', @@ -20578,7 +20795,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -16360,7 +16360,7 @@ +@@ -16565,7 +16565,7 @@ }, { 'name': 'UsbDetachableAllowlist', @@ -20587,7 +20804,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -16397,7 +16397,7 @@ +@@ -16602,7 +16602,7 @@ }, { 'name': 'DeviceAllowBluetooth', @@ -20596,7 +20813,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:52-'], -@@ -16417,7 +16417,7 @@ +@@ -16622,7 +16622,7 @@ }, { 'name': 'SuppressUnsupportedOSWarning', @@ -20605,7 +20822,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'caption': '''Suppress the unsupported OS warning''', 'desc': '''Setting the policy to Enabled suppresses the warning that appears when $1Google Chrome is running on an unsupported computer or operating system. -@@ -16435,7 +16435,7 @@ +@@ -16640,7 +16640,7 @@ }, { 'name': 'DeviceQuirksDownloadEnabled', @@ -20614,7 +20831,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:51-'], -@@ -16469,7 +16469,7 @@ +@@ -16674,7 +16674,7 @@ }, { 'name': 'SystemTimezoneAutomaticDetection', @@ -20623,7 +20840,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -16523,7 +16523,7 @@ +@@ -16728,7 +16728,7 @@ }, { 'name': 'TaskManagerEndProcessEnabled', @@ -20632,7 +20849,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'caption': '''Enable ending processes in Task Manager''', 'desc': '''Setting the policy to Disabled prevents users from ending processes in the Task Manager. -@@ -16541,7 +16541,7 @@ +@@ -16746,7 +16746,7 @@ }, { 'name': 'DeviceShowLowDiskSpaceNotification', @@ -20641,7 +20858,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:86-'], -@@ -16579,7 +16579,7 @@ +@@ -16784,7 +16784,7 @@ }, { 'name': 'NetworkThrottlingEnabled', @@ -20650,7 +20867,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'device_only': True, 'caption': '''Enable throttling network bandwidth''', 'desc': '''Setting the policy turns network throttling on or off. This means that the system is throttled to achieve the provided upload and download rates (in kbits/s). It applies to all users and interfaces on the device.''', -@@ -16614,7 +16614,7 @@ +@@ -16819,7 +16819,7 @@ }, { 'name': 'DeviceWiFiFastTransitionEnabled', @@ -20659,7 +20876,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'device_only': True, 'caption': '''Enable 802.11r Fast Transition''', 'desc': '''Setting the policy to Enabled means that Fast Transition is used when the wireless access point supports it. It applies to all users and interfaces on the device. -@@ -16633,7 +16633,7 @@ +@@ -16838,7 +16838,7 @@ }, { 'name': 'DeviceWiFiAllowed', @@ -20668,7 +20885,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'device_only': True, 'caption': '''Enable WiFi''', 'desc': '''Setting the policy to Disabled means $2Google Chrome OS turns off Wi-Fi, and users can't change it. -@@ -16652,7 +16652,7 @@ +@@ -16857,7 +16857,7 @@ }, { 'name': 'DeviceDockMacAddressSource', @@ -20677,7 +20894,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'caption': '''Device MAC address source when docked''', 'desc': '''Setting the policy lets the administrator change the MAC (media access control) address when connecting a device to the dock. When a dock is connected to some device models, by default, the device's designated dock's MAC address helps identify the device on Ethernet. -@@ -16697,7 +16697,7 @@ +@@ -16902,7 +16902,7 @@ }, { 'name': 'LoginVideoCaptureAllowedUrls', @@ -20686,7 +20903,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -16721,7 +16721,7 @@ +@@ -16926,7 +16926,7 @@ }, { 'name': 'DeviceLoginScreenExtensions', @@ -20695,7 +20912,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -16732,7 +16732,7 @@ +@@ -16937,7 +16937,7 @@ 'features': { 'dynamic_refresh': True, }, @@ -20704,7 +20921,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 336, 'caption': '''Configure the list of installed apps and extensions on the login screen''', 'tags': ['full-admin-access'], -@@ -16745,13 +16745,13 @@ +@@ -16950,13 +16950,13 @@ If an app or extension that previously had been force-installed is removed from this list, it is automatically uninstalled by $1Google Chrome. @@ -20721,7 +20938,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'caption': '''Permit locking the screen''', 'desc': '''Setting the policy to Enabled or leaving it unset lets users who authenticate with a password lock the screen. -@@ -16769,7 +16769,7 @@ +@@ -16974,7 +16974,7 @@ }, { 'name': 'ArcCertificatesSyncMode', @@ -20730,7 +20947,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -16802,7 +16802,7 @@ +@@ -17007,7 +17007,7 @@ }, { 'name': 'AllowedDomainsForApps', @@ -20739,7 +20956,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:51-', 'chrome_os:51-', 'android:51-'], -@@ -16811,7 +16811,7 @@ +@@ -17016,7 +17016,7 @@ 'dynamic_refresh': True, 'per_profile': True, }, @@ -20748,7 +20965,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 331, 'caption': '''Define domains allowed to access Google Workspace''', 'tags': ['filtering'], -@@ -16821,11 +16821,11 @@ +@@ -17026,11 +17026,11 @@ Users cannot change or override this setting. @@ -20762,7 +20979,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ 'chrome.*:52-74', 'chrome_os:52-74' ], -@@ -16918,7 +16918,7 @@ +@@ -17123,7 +17123,7 @@ }, { 'name': 'ArcBackupRestoreEnabled', @@ -20771,7 +20988,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:53-67'], -@@ -16936,7 +16936,7 @@ +@@ -17141,7 +17141,7 @@ }, { 'name': 'ArcLocationServiceEnabled', @@ -20780,7 +20997,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:57-67'], -@@ -16954,7 +16954,7 @@ +@@ -17159,7 +17159,7 @@ }, { 'name': 'NTPContentSuggestionsEnabled', @@ -20789,7 +21006,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['android:54-','ios:93-'], -@@ -16985,7 +16985,7 @@ +@@ -17190,7 +17190,7 @@ }, { 'name': 'NTPCustomBackgroundEnabled', @@ -20798,7 +21015,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:80-', 'chrome_os:80-'], -@@ -17016,7 +17016,7 @@ +@@ -17221,7 +17221,7 @@ }, { 'name': 'NTPCardsVisible', @@ -20807,7 +21024,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:88-', 'chrome_os:88-'], -@@ -17055,7 +17055,7 @@ +@@ -17260,7 +17260,7 @@ }, { 'name': 'WebRtcUdpPortRange', @@ -20816,7 +21033,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:54-', 'chrome_os:54-', 'android:54-'], -@@ -17073,7 +17073,7 @@ +@@ -17278,7 +17278,7 @@ }, { 'name': 'WebRtcLocalIpsAllowedUrls', @@ -20825,7 +21042,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -17095,7 +17095,7 @@ +@@ -17300,7 +17300,7 @@ }, { 'name': 'WebRestrictionsAuthority', @@ -20834,7 +21051,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 341, 'type': 'string', 'schema' : { 'type': 'string' }, -@@ -17111,7 +17111,7 @@ +@@ -17316,7 +17316,7 @@ }, { 'name': 'ComponentUpdatesEnabled', @@ -20843,7 +21060,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:54-', 'chrome_os:54-'], -@@ -17127,12 +17127,12 @@ +@@ -17332,12 +17332,12 @@ If set to disabled, updates to components are disabled. However, some components are exempt from this policy: updates to any component that does not contain executable code, or does not significantly alter the behavior of the browser, or is critical for its security will not be disabled. Examples of such components include the certificate revocation lists and Safe Browsing data. @@ -20858,7 +21075,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -17156,7 +17156,7 @@ +@@ -17361,7 +17361,7 @@ 'properties': { 'effective_model': { 'type': 'string', @@ -20867,7 +21084,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli }, 'autoconf': { 'type': 'boolean', -@@ -17212,7 +17212,7 @@ +@@ -17417,7 +17417,7 @@ }, { 'name': 'Printers', @@ -20876,7 +21093,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -17236,7 +17236,7 @@ +@@ -17441,7 +17441,7 @@ 'properties': { 'effective_model': { 'type': 'string', @@ -20885,7 +21102,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli }, 'autoconf': { 'type': 'boolean', -@@ -17289,7 +17289,7 @@ +@@ -17494,7 +17494,7 @@ }, { 'name': 'NativePrintersBulkConfiguration', @@ -20894,7 +21111,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 382, 'type': 'external', 'schema': { -@@ -17322,7 +17322,7 @@ +@@ -17527,7 +17527,7 @@ }, { 'name': 'PrintersBulkConfiguration', @@ -20903,7 +21120,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 770, 'type': 'external', 'schema': { -@@ -17352,7 +17352,7 @@ +@@ -17557,7 +17557,7 @@ }, { 'name': 'NativePrintersBulkAccessMode', @@ -20912,7 +21129,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 383, 'supported_on': ['chrome_os:65-'], 'type': 'int-enum', -@@ -17400,7 +17400,7 @@ +@@ -17605,7 +17605,7 @@ }, { 'name': 'PrintersBulkAccessMode', @@ -20921,7 +21138,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 772, 'supported_on': ['chrome_os:86-'], 'type': 'int-enum', -@@ -17445,7 +17445,7 @@ +@@ -17650,7 +17650,7 @@ }, { 'name': 'NativePrintersBulkBlacklist', @@ -20930,7 +21147,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'supported_on': ['chrome_os:65-'], 'id': 384, 'type': 'list', -@@ -17467,7 +17467,7 @@ +@@ -17672,7 +17672,7 @@ }, { 'name': 'PrintersBulkBlocklist', @@ -20939,7 +21156,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'supported_on': ['chrome_os:86-'], 'id': 779, 'type': 'list', -@@ -17486,7 +17486,7 @@ +@@ -17691,7 +17691,7 @@ }, { 'name': 'NativePrintersBulkWhitelist', @@ -20948,7 +21165,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'supported_on': ['chrome_os:65-'], 'id': 385, 'type': 'list', -@@ -17508,7 +17508,7 @@ +@@ -17713,7 +17713,7 @@ }, { 'name': 'PrintersBulkAllowlist', @@ -20957,7 +21174,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'supported_on': ['chrome_os:86-'], 'id': 780, 'type': 'list', -@@ -17527,7 +17527,7 @@ +@@ -17732,7 +17732,7 @@ }, { 'name': 'DeviceNativePrinters', @@ -20966,7 +21183,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 386, 'device_only': True, 'type': 'external', -@@ -17565,7 +17565,7 @@ +@@ -17770,7 +17770,7 @@ }, { 'name': 'DeviceNativePrintersAccessMode', @@ -20975,7 +21192,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 387, 'device_only': True, 'supported_on': ['chrome_os:73-'], -@@ -17613,7 +17613,7 @@ +@@ -17818,7 +17818,7 @@ }, { 'name': 'DeviceNativePrintersBlacklist', @@ -20984,7 +21201,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'supported_on': ['chrome_os:73-'], 'device_only': True, 'id': 388, -@@ -17635,7 +17635,7 @@ +@@ -17840,7 +17840,7 @@ }, { 'name': 'DeviceNativePrintersWhitelist', @@ -20993,7 +21210,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'supported_on': ['chrome_os:73-'], 'device_only': True, 'id': 389, -@@ -17658,7 +17658,7 @@ +@@ -17863,7 +17863,7 @@ }, { 'name': 'DevicePrinters', @@ -21002,7 +21219,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 743, 'device_only': True, 'type': 'external', -@@ -17693,7 +17693,7 @@ +@@ -17898,7 +17898,7 @@ }, { 'name': 'DevicePrintersAccessMode', @@ -21011,7 +21228,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 733, 'device_only': True, 'supported_on': ['chrome_os:87-'], -@@ -17738,7 +17738,7 @@ +@@ -17943,7 +17943,7 @@ }, { 'name': 'DevicePrintersBlocklist', @@ -21020,7 +21237,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'supported_on': ['chrome_os:87-'], 'device_only': True, 'id': 734, -@@ -17757,7 +17757,7 @@ +@@ -17962,7 +17962,7 @@ }, { 'name': 'DevicePrintersAllowlist', @@ -21029,7 +21246,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'supported_on': ['chrome_os:87-'], 'device_only': True, 'id': 735, -@@ -17777,7 +17777,7 @@ +@@ -17982,7 +17982,7 @@ }, { 'name': 'TPMFirmwareUpdateSettings', @@ -21038,7 +21255,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'supported_on': ['chrome_os:63-'], 'device_only': True, 'id': 390, -@@ -17830,7 +17830,7 @@ +@@ -18035,7 +18035,7 @@ }, { 'name': 'MinimumRequiredChromeVersion', @@ -21047,7 +21264,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'supported_on': ['chrome_os:64-81'], 'device_only': True, 'type': 'string', -@@ -17856,7 +17856,7 @@ +@@ -18061,7 +18061,7 @@ }, { 'name': 'DeviceMinimumVersion', @@ -21056,7 +21273,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'supported_on': ['chrome_os:86-'], 'device_only': True, 'type': 'dict', -@@ -17940,7 +17940,7 @@ +@@ -18145,7 +18145,7 @@ }, { 'name': 'DeviceMinimumVersionAueMessage', @@ -21065,7 +21282,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'supported_on': ['chrome_os:86-'], 'device_only': True, 'type': 'string', -@@ -17964,7 +17964,7 @@ +@@ -18169,7 +18169,7 @@ }, { 'name': 'QuickUnlockModeAllowlist', @@ -21074,7 +21291,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -18002,7 +18002,7 @@ +@@ -18207,7 +18207,7 @@ }, { 'name': 'QuickUnlockModeWhitelist', @@ -21083,7 +21300,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -18043,7 +18043,7 @@ +@@ -18248,7 +18248,7 @@ }, { 'name': 'QuickUnlockTimeout', @@ -21092,7 +21309,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -18086,7 +18086,7 @@ +@@ -18291,7 +18291,7 @@ }, { 'name': 'PinUnlockMinimumLength', @@ -21101,7 +21318,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer' }, 'supported_on': ['chrome_os:57-'], -@@ -18104,7 +18104,7 @@ +@@ -18309,7 +18309,7 @@ }, { 'name': 'PinUnlockMaximumLength', @@ -21110,7 +21327,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer' }, 'supported_on': ['chrome_os:57-'], -@@ -18122,7 +18122,7 @@ +@@ -18327,7 +18327,7 @@ }, { 'name': 'PinUnlockWeakPinsAllowed', @@ -21119,7 +21336,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:57-'], -@@ -18140,7 +18140,7 @@ +@@ -18345,7 +18345,7 @@ }, { 'name': 'DeviceWallpaperImage', @@ -21128,7 +21345,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'external', 'schema': { 'type': 'object', -@@ -18173,7 +18173,7 @@ +@@ -18378,7 +18378,7 @@ }, { 'name': 'DeviceLoginScreenLocales', @@ -21137,7 +21354,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -18194,7 +18194,7 @@ +@@ -18399,7 +18399,7 @@ }, { 'name': 'DeviceLoginScreenInputMethods', @@ -21146,7 +21363,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -18215,7 +18215,7 @@ +@@ -18420,7 +18420,7 @@ }, { 'name': 'DeviceLoginScreenSystemInfoEnforced', @@ -21155,7 +21372,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -18238,7 +18238,7 @@ +@@ -18443,7 +18443,7 @@ }, { 'name': 'SmsMessagesAllowed', @@ -21164,7 +21381,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:70-'], -@@ -18259,7 +18259,7 @@ +@@ -18464,7 +18464,7 @@ }, { 'name': 'WifiSyncAndroidAllowed', @@ -21173,7 +21390,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:89-'], -@@ -18282,7 +18282,7 @@ +@@ -18487,7 +18487,7 @@ }, { 'name': 'SmartLockSigninAllowed', @@ -21182,7 +21399,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:71-'], -@@ -18303,7 +18303,7 @@ +@@ -18508,7 +18508,7 @@ }, { 'name': 'InstantTetheringAllowed', @@ -21191,7 +21408,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:60-'], -@@ -18324,7 +18324,7 @@ +@@ -18529,7 +18529,7 @@ }, { 'name': 'PhoneHubAllowed', @@ -21200,7 +21417,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:89-'], -@@ -18345,7 +18345,7 @@ +@@ -18550,7 +18550,7 @@ }, { 'name': 'PhoneHubNotificationsAllowed', @@ -21209,7 +21426,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:89-'], -@@ -18365,7 +18365,7 @@ +@@ -18570,7 +18570,7 @@ }, { 'name': 'PhoneHubTaskContinuationAllowed', @@ -21218,7 +21435,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:89-'], -@@ -18385,7 +18385,7 @@ +@@ -18590,7 +18590,7 @@ }, { 'name': 'NearbyShareAllowed', @@ -21227,7 +21444,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:91-'], -@@ -18406,7 +18406,7 @@ +@@ -18611,7 +18611,7 @@ }, { 'name': 'DevicePciPeripheralDataAccessEnabled', @@ -21236,7 +21453,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:90-'], -@@ -18437,7 +18437,7 @@ +@@ -18642,7 +18642,7 @@ }, { 'name': 'BrowserNetworkTimeQueriesEnabled', @@ -21245,7 +21462,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:60-'], -@@ -18466,7 +18466,7 @@ +@@ -18671,7 +18671,7 @@ }, { 'name': 'DeviceSecondFactorAuthentication', @@ -21254,7 +21471,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -18509,7 +18509,7 @@ +@@ -18714,7 +18714,7 @@ }, { 'name': 'PrintPreviewUseSystemDefaultPrinter', @@ -21263,7 +21480,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ -@@ -18541,7 +18541,7 @@ +@@ -18746,7 +18746,7 @@ }, { 'name': 'DeviceEcryptfsMigrationStrategy', @@ -21272,7 +21489,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -18587,7 +18587,7 @@ +@@ -18792,7 +18792,7 @@ }, { 'name': 'EcryptfsMigrationStrategy', @@ -21281,7 +21498,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -18643,7 +18643,7 @@ +@@ -18848,7 +18848,7 @@ }, { 'name': 'SchedulerConfiguration', @@ -21290,7 +21507,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -18680,7 +18680,7 @@ +@@ -18885,7 +18885,7 @@ }, { 'name': 'NoteTakingAppsLockScreenWhitelist', @@ -21299,7 +21516,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -18710,7 +18710,7 @@ +@@ -18915,7 +18915,7 @@ }, { 'name': 'NoteTakingAppsLockScreenAllowlist', @@ -21308,7 +21525,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -18737,7 +18737,7 @@ +@@ -18942,7 +18942,7 @@ }, { 'name': 'CastReceiverEnabled', @@ -21317,7 +21534,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'future_on': ['chrome_os'], -@@ -18757,7 +18757,7 @@ +@@ -18962,7 +18962,7 @@ }, { 'name': 'CastReceiverName', @@ -21326,7 +21543,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'future_on': ['chrome_os'], -@@ -18777,7 +18777,7 @@ +@@ -18982,7 +18982,7 @@ }, { 'name': 'DeviceOffHours', @@ -21335,7 +21552,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'object', -@@ -18860,7 +18860,7 @@ +@@ -19065,7 +19065,7 @@ }, { 'name': 'CloudPolicyOverridesPlatformPolicy', @@ -21344,7 +21561,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean'}, 'supported_on': [ -@@ -18884,7 +18884,7 @@ +@@ -19090,7 +19090,7 @@ }, { 'name': 'CloudUserPolicyOverridesCloudMachinePolicy', @@ -21352,8 +21569,8 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli + 'owners': ['igorruvinov@ch40m1um.qjz9zk', 'zmin@ch40m1um.qjz9zk', 'pastarmovj@ch40m1um.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:96-'], -@@ -18918,7 +18918,7 @@ + 'supported_on': ['chrome.*:96-', 'android:97-'], +@@ -19124,7 +19124,7 @@ }, { 'name': 'PromptForDownloadLocation', @@ -21362,7 +21579,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean'}, 'supported_on': ['chrome.*:64-', 'chrome_os:64-', 'android:92-'], -@@ -18936,7 +18936,7 @@ +@@ -19142,7 +19142,7 @@ }, { 'name': 'UnaffiliatedArcAllowed', @@ -21371,7 +21588,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:64-'], -@@ -18954,7 +18954,7 @@ +@@ -19160,7 +19160,7 @@ }, { 'name': 'DeviceArcDataSnapshotHours', @@ -21380,7 +21597,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'object', -@@ -19006,7 +19006,7 @@ +@@ -19212,7 +19212,7 @@ }, { 'name': 'IsolateOrigins', @@ -21389,7 +21606,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:63-', 'chrome_os:63-'], -@@ -19033,7 +19033,7 @@ +@@ -19239,7 +19239,7 @@ }, { 'name': 'SitePerProcess', @@ -21398,7 +21615,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:63-', 'chrome_os:63-'], -@@ -19056,7 +19056,7 @@ +@@ -19262,7 +19262,7 @@ }, { 'name': 'DeviceLoginScreenIsolateOrigins', @@ -21407,7 +21624,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome_os:66-76'], -@@ -19079,7 +19079,7 @@ +@@ -19285,7 +19285,7 @@ }, { 'name': 'DeviceLoginScreenSitePerProcess', @@ -21416,7 +21633,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:66-76'], -@@ -19100,7 +19100,7 @@ +@@ -19306,7 +19306,7 @@ }, { 'name': 'IsolateOriginsAndroid', @@ -21425,7 +21642,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['android:68-'], -@@ -19127,7 +19127,7 @@ +@@ -19333,7 +19333,7 @@ }, { 'name': 'SitePerProcessAndroid', @@ -21434,7 +21651,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['android:68-'], -@@ -19152,7 +19152,7 @@ +@@ -19358,7 +19358,7 @@ }, { 'name': 'SharedArrayBufferUnrestrictedAccessAllowed', @@ -21443,15 +21660,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:91-', 'chrome_os:91-'], -@@ -19181,14 +19181,14 @@ - isolated context. Chrome will require cross-origin isolation when using - SharedArrayBuffers from Chrome 91 onward (2021-05-25) for Web Compatibility - reasons. Additional details can be found on: -- https://developer.chrome.com/blog/enabling-shared-array-buffer/. -+ https://developer.ch40me.qjz9zk/blog/enabling-shared-array-buffer/. - When set to True, sites can use SharedArrayBuffer with no restrictions. - When set to False or not set, sites can only use SharedArrayBuffers when - cross-origin isolated.''', +@@ -19383,7 +19383,7 @@ + 'caption': '''Specifies whether SharedArrayBuffers can be used in a non cross-origin-isolated context''', + 'tags': ['system-security'], + 'desc': ''' +- Specifies whether SharedArrayBuffers can be used in a non cross-origin-isolated context. $1Google Chrome will require cross-origin isolation when using SharedArrayBuffers from $1Google Chrome 91 onward (2021-05-25) for Web Compatibility reasons. Additional details can be found on: https://developer.chrome.com/blog/enabling-shared-array-buffer/. ++ Specifies whether SharedArrayBuffers can be used in a non cross-origin-isolated context. $1Google Chrome will require cross-origin isolation when using SharedArrayBuffers from $1Google Chrome 91 onward (2021-05-25) for Web Compatibility reasons. Additional details can be found on: https://developer.ch40me.qjz9zk/blog/enabling-shared-array-buffer/. + + When set to Enabled, sites can use SharedArrayBuffer with no restrictions. + +@@ -19391,7 +19391,7 @@ }, { 'name': 'SandboxExternalProtocolBlocked', @@ -21460,7 +21678,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:96-', 'chrome_os:96-'], -@@ -19213,7 +19213,7 @@ +@@ -19416,7 +19416,7 @@ 'caption': 'Allow Chrome to block navigations toward external protocols in sandboxed iframes', 'tags': ['system-security'], 'desc': '''Chrome will block navigations toward external protocols inside @@ -21469,7 +21687,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli When True, this lets Chrome blocks those navigations. -@@ -19227,7 +19227,7 @@ +@@ -19429,7 +19429,7 @@ }, { 'name': 'CrossOriginWebAssemblyModuleSharingEnabled', @@ -21478,7 +21696,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:94-', 'chrome_os:94-'], -@@ -19267,7 +19267,7 @@ +@@ -19462,7 +19462,7 @@ }, { 'name': 'DisplayCapturePermissionsPolicyEnabled', @@ -21487,7 +21705,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:94-', 'chrome_os:94-'], -@@ -19315,7 +19315,7 @@ +@@ -19499,7 +19499,7 @@ }, { 'name': 'WebDriverOverridesIncompatiblePolicies', @@ -21496,7 +21714,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:65-79'], -@@ -19345,7 +19345,7 @@ +@@ -19527,7 +19527,7 @@ }, { 'name': 'UnsafelyTreatInsecureOriginAsSecure', @@ -21505,7 +21723,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -19392,7 +19392,7 @@ +@@ -19560,7 +19560,7 @@ }, { 'name': 'DefaultDownloadDirectory', @@ -21514,7 +21732,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:64-', 'chrome_os:64-'], -@@ -19410,11 +19410,11 @@ +@@ -19578,11 +19578,11 @@ Leaving the policy unset means Chrome uses its platform-specific default directory. @@ -21528,7 +21746,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome_os:65-'], -@@ -19433,7 +19433,7 @@ +@@ -19601,7 +19601,7 @@ }, { 'name': 'DeviceHostnameUserConfigurable', @@ -21537,7 +21755,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:97-'], -@@ -19466,7 +19466,7 @@ +@@ -19634,7 +19634,7 @@ }, { 'name': 'AbusiveExperienceInterventionEnforce', @@ -21546,7 +21764,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:65-', 'chrome_os:65-'], -@@ -19495,7 +19495,7 @@ +@@ -19663,7 +19663,7 @@ }, { 'name': 'SpellcheckLanguage', @@ -21555,7 +21773,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -19526,7 +19526,7 @@ +@@ -19694,7 +19694,7 @@ }, { 'name': 'SpellcheckLanguageBlacklist', @@ -21564,7 +21782,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -19560,7 +19560,7 @@ +@@ -19728,7 +19728,7 @@ }, { 'name': 'SpellcheckLanguageBlocklist', @@ -21573,7 +21791,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -19591,7 +19591,7 @@ +@@ -19759,7 +19759,7 @@ }, { 'name': 'ThirdPartyBlockingEnabled', @@ -21582,7 +21800,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.win:65-'], -@@ -19609,7 +19609,7 @@ +@@ -19777,7 +19777,7 @@ }, { 'name': 'SpellcheckEnabled', @@ -21591,7 +21809,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:65-', 'chrome_os:65-'], -@@ -19645,7 +19645,7 @@ +@@ -19813,7 +19813,7 @@ }, { 'name': 'AdsSettingForIntrusiveAdsSites', @@ -21600,7 +21818,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -19679,7 +19679,7 @@ +@@ -19847,7 +19847,7 @@ }, { 'name': 'RestrictAccountsToPatterns', @@ -21609,7 +21827,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -19691,7 +19691,7 @@ +@@ -19858,7 +19858,7 @@ 'dynamic_refresh': True, 'per_profile': False, }, @@ -21618,7 +21836,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 410, 'caption': '''Restrict accounts that are visible in $1Google Chrome''', 'tags': [], -@@ -19705,7 +19705,7 @@ +@@ -19872,7 +19872,7 @@ }, { 'name': 'PasswordProtectionWarningTrigger', @@ -21627,7 +21845,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -19754,7 +19754,7 @@ +@@ -19921,7 +19921,7 @@ { 'id': 419, 'name': 'RelaunchNotification', @@ -21636,7 +21854,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'tags': [], 'features': { 'dynamic_refresh': True, -@@ -19789,7 +19789,7 @@ +@@ -19956,7 +19956,7 @@ { 'id': 420, 'name': 'RelaunchNotificationPeriod', @@ -21645,7 +21863,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'tags': [], 'features': { 'dynamic_refresh': True, -@@ -19810,7 +19810,7 @@ +@@ -19977,7 +19977,7 @@ { 'id': 567, 'name': 'RelaunchHeadsUpPeriod', @@ -21654,7 +21872,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'tags': [], 'features': { 'dynamic_refresh': True, -@@ -19829,7 +19829,7 @@ +@@ -19996,7 +19996,7 @@ { 'id': 854, 'name': 'RelaunchWindow', @@ -21663,7 +21881,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'tags': [], 'features': { 'dynamic_refresh': True, -@@ -19899,7 +19899,7 @@ +@@ -20066,7 +20066,7 @@ }, { 'name': 'VirtualMachinesAllowed', @@ -21672,7 +21890,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:66-'], -@@ -19918,7 +19918,7 @@ +@@ -20085,7 +20085,7 @@ }, { 'name': 'CrostiniAllowed', @@ -21681,7 +21899,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:70-'], -@@ -19934,7 +19934,7 @@ +@@ -20101,7 +20101,7 @@ }, { 'name': 'DeviceUnaffiliatedCrostiniAllowed', @@ -21690,7 +21908,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:70-'], -@@ -19950,7 +19950,7 @@ +@@ -20117,7 +20117,7 @@ }, { 'name': 'CrostiniExportImportUIAllowed', @@ -21699,7 +21917,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:74-'], -@@ -19966,7 +19966,7 @@ +@@ -20133,7 +20133,7 @@ }, { 'name': 'CrostiniRootAccessAllowed', @@ -21708,7 +21926,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'future_on': ['chrome_os'], -@@ -19985,7 +19985,7 @@ +@@ -20152,7 +20152,7 @@ }, { 'name': 'CrostiniAnsiblePlaybook', @@ -21717,7 +21935,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'external', 'schema': { 'type': 'object', -@@ -20025,7 +20025,7 @@ +@@ -20192,7 +20192,7 @@ }, { 'name': 'CrostiniArcAdbSideloadingAllowed', @@ -21726,7 +21944,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -20063,7 +20063,7 @@ +@@ -20230,7 +20230,7 @@ }, { 'name': 'DeviceCrostiniArcAdbSideloadingAllowed', @@ -21735,7 +21953,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'device_only': True, 'type': 'int-enum', 'schema': { -@@ -20104,7 +20104,7 @@ +@@ -20271,7 +20271,7 @@ }, { 'name': 'CrostiniPortForwardingAllowed', @@ -21744,7 +21962,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:85-'], -@@ -20124,7 +20124,7 @@ +@@ -20291,7 +20291,7 @@ }, { 'name': 'SafeBrowsingWhitelistDomains', @@ -21753,7 +21971,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -20150,7 +20150,7 @@ +@@ -20317,7 +20317,7 @@ }, { 'name': 'SafeBrowsingAllowlistDomains', @@ -21762,7 +21980,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -20173,7 +20173,7 @@ +@@ -20340,7 +20340,7 @@ }, { 'name': 'PasswordProtectionLoginURLs', @@ -21771,7 +21989,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -20188,15 +20188,15 @@ +@@ -20355,15 +20355,15 @@ 'id': 423, 'caption': '''Configure the list of enterprise login URLs where password protection service should capture salted hashes of passwords.''', 'tags': [], @@ -21790,7 +22008,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:69-', 'chrome_os:69-'], -@@ -20208,15 +20208,15 @@ +@@ -20375,15 +20375,15 @@ 'id': 424, 'caption': '''Configure the change password URL.''', 'tags': [], @@ -21809,7 +22027,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:66-', 'chrome_os:66-', 'android: 87-'], -@@ -20234,12 +20234,12 @@ +@@ -20401,12 +20401,12 @@ If you set this policy, users can't change it. If not set, users can decide whether to send reports or not. @@ -21824,7 +22042,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:66-80'], -@@ -20259,7 +20259,7 @@ +@@ -20426,7 +20426,7 @@ }, { 'name': 'CloudManagementEnrollmentToken', @@ -21833,7 +22051,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': [ -@@ -20278,11 +20278,11 @@ +@@ -20445,11 +20445,11 @@ 'tags': [], 'desc': '''Setting the policy means $1Google Chrome tries to register itself with Chrome Browser Cloud Management. The value of this policy is an enrollment token you can retrieve from the Google Admin console. @@ -21847,7 +22065,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:72-'], -@@ -20299,11 +20299,11 @@ +@@ -20466,11 +20466,11 @@ Setting the policy to Disabled or leaving it unset renders Chrome Browser Cloud Management optional and doesn't block $1Google Chrome launch process if failed. @@ -21861,7 +22079,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.win:66-', 'chrome.linux:66-', 'chrome.mac:66-', 'chrome_os:66-'], -@@ -20323,7 +20323,7 @@ +@@ -20490,7 +20490,7 @@ }, { 'name': 'AutoplayWhitelist', @@ -21870,7 +22088,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -20343,11 +20343,11 @@ +@@ -20510,11 +20510,11 @@ Setting the policy lets videos play automatically (without user consent) with audio content in $1Google Chrome. If AutoplayAllowed policy is set to True, then this policy has no effect. If AutoplayAllowed is set to False, then any URL patterns set in this policy can still play. If this policy changes while $1Google Chrome is running, it only applies to newly opened tabs. @@ -21884,7 +22102,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -20364,11 +20364,11 @@ +@@ -20531,11 +20531,11 @@ 'tags': [], 'desc': '''Setting the policy lets videos play automatically (without user consent) with audio content in $1Google Chrome. If AutoplayAllowed policy is set to True, then this policy has no effect. If AutoplayAllowed is set to False, then any URL patterns set in this policy can still play. If this policy changes while $1Google Chrome is running, it only applies to newly opened tabs. @@ -21898,12 +22116,12 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:67-67', 'chrome_os:67-67'], -@@ -20383,13 +20383,13 @@ +@@ -20550,13 +20550,13 @@ 'tags': [], 'desc': '''Deprecated in M68. Use DefaultPopupsSetting instead. -- For a full explanation, see https://www.chromestatus.com/features/5675755719622656. -+ For a full explanation, see https://www.ch40mestatus.qjz9zk/features/5675755719622656. +- For a full explanation, see https://www.chromestatus.com/feature/5675755719622656. ++ For a full explanation, see https://www.ch40mestatus.qjz9zk/feature/5675755719622656. If this policy is enabled, sites will be allowed to simultaneously navigate and open new windows/tabs. If this policy is disabled or not set, sites will be disallowed from simultaneously navigating and opening a new window/tab.''', }, @@ -21914,7 +22132,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:67-'], -@@ -20413,7 +20413,7 @@ +@@ -20580,7 +20580,7 @@ }, { 'name': 'UserPrintersAllowed', @@ -21923,7 +22141,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:86-'], -@@ -20434,7 +20434,7 @@ +@@ -20601,7 +20601,7 @@ }, { 'name': 'DeviceSamlLoginAuthenticationType', @@ -21932,7 +22150,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -20471,7 +20471,7 @@ +@@ -20638,7 +20638,7 @@ }, { 'name': 'ChromeCleanupEnabled', @@ -21941,7 +22159,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.win:68-'], -@@ -20491,7 +20491,7 @@ +@@ -20658,7 +20658,7 @@ }, { 'name': 'ChromeCleanupReportingEnabled', @@ -21950,7 +22168,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.win:68-'], -@@ -20513,7 +20513,7 @@ +@@ -20680,7 +20680,7 @@ }, { 'name': 'AllowedLanguages', @@ -21959,7 +22177,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -20537,7 +20537,7 @@ +@@ -20704,7 +20704,7 @@ }, { 'name': 'AllowedInputMethods', @@ -21968,7 +22186,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -20561,7 +20561,7 @@ +@@ -20728,7 +20728,7 @@ }, { 'name': 'ArcAppInstallEventLoggingEnabled', @@ -21977,7 +22195,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:67-'], -@@ -20578,7 +20578,7 @@ +@@ -20745,7 +20745,7 @@ }, { 'name': 'ExtensionInstallEventLoggingEnabled', @@ -21986,7 +22204,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:85-'], -@@ -20596,7 +20596,7 @@ +@@ -20763,7 +20763,7 @@ }, { 'name': 'UsageTimeLimit', @@ -21995,7 +22213,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'object', -@@ -20749,7 +20749,7 @@ +@@ -20916,7 +20916,7 @@ }, { 'name': 'ArcBackupRestoreServiceEnabled', @@ -22004,7 +22222,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -20791,7 +20791,7 @@ +@@ -20958,7 +20958,7 @@ }, { 'name': 'ArcGoogleLocationServicesEnabled', @@ -22013,7 +22231,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -20833,7 +20833,7 @@ +@@ -21000,7 +21000,7 @@ }, { 'name': 'EnableSyncConsent', @@ -22022,7 +22240,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean'}, 'supported_on': ['chrome_os:66-'], -@@ -20851,7 +20851,7 @@ +@@ -21018,7 +21018,7 @@ }, { 'name': 'ContextualSuggestionsEnabled', @@ -22031,7 +22249,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['android:69-75'], -@@ -20872,7 +20872,7 @@ +@@ -21039,7 +21039,7 @@ }, { 'name': 'DeviceAutoUpdateTimeRestrictions', @@ -22040,7 +22258,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'array', -@@ -20959,7 +20959,7 @@ +@@ -21126,7 +21126,7 @@ { 'id': 454, 'name': 'PromotionalTabsEnabled', @@ -22049,7 +22267,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'tags': [], 'features': { 'dynamic_refresh': True, -@@ -20978,7 +20978,7 @@ +@@ -21145,7 +21145,7 @@ }, { 'name': 'SafeSitesFilterBehavior', @@ -22058,7 +22276,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -21016,7 +21016,7 @@ +@@ -21183,7 +21183,7 @@ }, { 'name': 'OverrideSecurityRestrictionsOnInsecureOrigin', @@ -22067,7 +22285,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -21040,7 +21040,7 @@ +@@ -21207,7 +21207,7 @@ }, { 'name': 'DeviceUpdateStagingSchedule', @@ -22076,7 +22294,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'array', -@@ -21085,7 +21085,7 @@ +@@ -21252,7 +21252,7 @@ }, { 'name': 'TabFreezingEnabled', @@ -22085,7 +22303,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:79-79', 'chrome_os:79-79'], -@@ -21100,13 +21100,13 @@ +@@ -21267,13 +21267,13 @@ 'tags': [], 'desc': '''Controls whether $1Google Chrome can freeze tabs that have been in the background for at least 5 minutes. @@ -22101,7 +22319,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:69-', 'chrome_os:69-', 'android:70-', 'ios:90-'], -@@ -21127,7 +21127,7 @@ +@@ -21294,7 +21294,7 @@ { 'id': 462, 'name': 'NetworkFileSharesAllowed', @@ -22110,7 +22328,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': {'type': 'boolean', }, 'tags': [], -@@ -21142,7 +21142,7 @@ +@@ -21309,7 +21309,7 @@ }, { 'name': 'WebRtcEventLogCollectionAllowed', @@ -22119,7 +22337,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:70-', 'chrome_os:70-'], -@@ -21162,7 +21162,7 @@ +@@ -21329,7 +21329,7 @@ }, { 'name': 'PowerSmartDimEnabled', @@ -22128,7 +22346,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:70-'], -@@ -21180,7 +21180,7 @@ +@@ -21347,7 +21347,7 @@ }, { 'name': 'CoalesceH2ConnectionsWithClientCertificatesForHosts', @@ -22137,7 +22355,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -21205,7 +21205,7 @@ +@@ -21372,7 +21372,7 @@ { 'id': 467, 'name': 'NetBiosShareDiscoveryEnabled', @@ -22146,7 +22364,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': {'type': 'boolean', }, 'tags': [], -@@ -21223,7 +21223,7 @@ +@@ -21390,7 +21390,7 @@ }, { 'name': 'ManagedConfigurationPerOrigin', @@ -22155,7 +22373,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'array', -@@ -21243,12 +21243,12 @@ +@@ -21410,12 +21410,12 @@ 'per_profile': True, }, 'example_value': [{ @@ -22171,7 +22389,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'managed_configuration_hash' : 'djio12easd89u12aws' }], 'id': 813, -@@ -21261,7 +21261,7 @@ +@@ -21428,7 +21428,7 @@ }, { 'name': 'WebAppInstallForceList', @@ -22180,7 +22398,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'array', -@@ -21298,18 +21298,18 @@ +@@ -21465,18 +21465,18 @@ }, 'max_size': 1048576, 'example_value': [{ @@ -22203,7 +22421,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'default_launch_container': 'window', 'custom_name': 'Spreadsheets' }, { -@@ -21363,7 +21363,7 @@ +@@ -21532,7 +21532,7 @@ { 'id': 470, 'name': 'ReportVersionData', @@ -22212,7 +22430,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': {'type': 'boolean' }, 'tags': ['admin-sharing'], -@@ -21388,7 +21388,7 @@ +@@ -21557,7 +21557,7 @@ { 'id': 471, 'name': 'ReportPolicyData', @@ -22221,7 +22439,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': {'type': 'boolean' }, 'tags': ['admin-sharing'], -@@ -21413,7 +21413,7 @@ +@@ -21582,7 +21582,7 @@ { 'id': 472, 'name': 'ReportMachineIDData', @@ -22230,7 +22448,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': {'type': 'boolean' }, 'tags': ['admin-sharing'], -@@ -21437,7 +21437,7 @@ +@@ -21606,7 +21606,7 @@ { 'id': 473, 'name': 'ReportUserIDData', @@ -22239,7 +22457,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': {'type': 'boolean' }, 'tags': ['admin-sharing'], -@@ -21462,7 +21462,7 @@ +@@ -21631,7 +21631,7 @@ { 'id': 499, 'name': 'ReportExtensionsAndPluginsData', @@ -22248,7 +22466,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': {'type': 'boolean' }, 'tags': ['admin-sharing'], -@@ -21487,7 +21487,7 @@ +@@ -21656,7 +21656,7 @@ { 'id': 500, 'name': 'ReportSafeBrowsingData', @@ -22257,7 +22475,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': {'type': 'boolean' }, 'tags': ['admin-sharing'], -@@ -21513,7 +21513,7 @@ +@@ -21682,7 +21682,7 @@ { 'id': 608, 'name': 'CloudExtensionRequestEnabled', @@ -22266,7 +22484,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': {'type': 'boolean' }, 'tags': ['admin-sharing', 'google-sharing'], -@@ -21539,7 +21539,7 @@ +@@ -21708,7 +21708,7 @@ { 'id': 493, 'name': 'CloudReportingEnabled', @@ -22275,7 +22493,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': {'type': 'boolean' }, 'tags': ['admin-sharing', 'google-sharing'], -@@ -21566,7 +21566,7 @@ +@@ -21735,7 +21735,7 @@ }, { 'name': 'EnterpriseHardwarePlatformAPIEnabled', @@ -22284,7 +22502,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:71-', 'chrome_os:71-', 'android:71-'], -@@ -21586,7 +21586,7 @@ +@@ -21755,7 +21755,7 @@ }, { 'name': 'VpnConfigAllowed', @@ -22293,7 +22511,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:71-'], -@@ -21605,7 +21605,7 @@ +@@ -21774,7 +21774,7 @@ { 'id': 489, 'name': 'NTLMShareAuthenticationEnabled', @@ -22302,7 +22520,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': {'type': 'boolean', }, 'tags': [], -@@ -21623,7 +21623,7 @@ +@@ -21792,7 +21792,7 @@ }, { 'name': 'NetworkFileSharesPreconfiguredShares', @@ -22311,7 +22529,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'array', -@@ -21668,7 +21668,7 @@ +@@ -21837,7 +21837,7 @@ }, { 'name': 'ScreenBrightnessPercent', @@ -22320,7 +22538,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'object', -@@ -21708,7 +21708,7 @@ +@@ -21877,7 +21877,7 @@ { 'id': 494, 'name': 'AlternativeBrowserPath', @@ -22329,7 +22547,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': {'type': 'string'}, 'features': { -@@ -21726,7 +21726,7 @@ +@@ -21895,7 +21895,7 @@ { 'id': 495, 'name': 'AlternativeBrowserParameters', @@ -22338,7 +22556,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -21757,7 +21757,7 @@ +@@ -21926,7 +21926,7 @@ { 'id': 530, 'name': 'BrowserSwitcherChromePath', @@ -22347,7 +22565,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': {'type': 'string'}, 'features': { -@@ -21777,7 +21777,7 @@ +@@ -21946,7 +21946,7 @@ { 'id': 531, 'name': 'BrowserSwitcherChromeParameters', @@ -22356,7 +22574,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -21804,7 +21804,7 @@ +@@ -21973,7 +21973,7 @@ { 'id': 496, 'name': 'BrowserSwitcherUrlList', @@ -22365,7 +22583,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -21831,7 +21831,7 @@ +@@ -22000,7 +22000,7 @@ { 'id': 497, 'name': 'BrowserSwitcherUrlGreylist', @@ -22374,7 +22592,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -21858,7 +21858,7 @@ +@@ -22027,7 +22027,7 @@ { 'id': 498, 'name': 'BrowserSwitcherUseIeSitelist', @@ -22383,7 +22601,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'example_value': True, -@@ -21875,12 +21875,12 @@ +@@ -22044,12 +22044,12 @@ When this policy is false or unset, $1Google Chrome does not use Internet Explorer®'s SiteList policy as a source of rules for switching browsers. @@ -22398,7 +22616,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'example_value': 'http://example.com/sitelist.xml', -@@ -21895,12 +21895,12 @@ +@@ -22064,12 +22064,12 @@ Leaving it unset (or set to a invalid URL) means $1Google Chrome doesn't use the policy as a source of rules for switching browsers. @@ -22413,7 +22631,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'example_value': 'http://example.com/greylist.xml', -@@ -21915,12 +21915,12 @@ +@@ -22084,12 +22084,12 @@ Leaving it unset (or set to a invalid URL) means $1Google Chrome doesn't use the policy as a source of rules for not switching browsers. @@ -22428,7 +22646,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer' }, 'example_value': 10000, -@@ -21938,7 +21938,7 @@ +@@ -22107,7 +22107,7 @@ { 'id': 517, 'name': 'BrowserSwitcherEnabled', @@ -22437,7 +22655,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'example_value': True, -@@ -21956,7 +21956,7 @@ +@@ -22125,7 +22125,7 @@ { 'id': 866, 'name': 'BrowserSwitcherParsingMode', @@ -22446,7 +22664,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -21999,7 +21999,7 @@ +@@ -22168,7 +22168,7 @@ { 'id': 519, 'name': 'BrowserSwitcherKeepLastChromeTab', @@ -22455,7 +22673,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'example_value': False, -@@ -22016,7 +22016,7 @@ +@@ -22185,7 +22185,7 @@ }, { 'name': 'DeviceDisplayResolution', @@ -22464,7 +22682,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'object', -@@ -22057,7 +22057,7 @@ +@@ -22226,7 +22226,7 @@ }, { 'name': 'PluginVmAllowed', @@ -22473,7 +22691,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:72-'], -@@ -22075,7 +22075,7 @@ +@@ -22244,7 +22244,7 @@ }, { 'name': 'UserPluginVmAllowed', @@ -22482,7 +22700,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:84-'], -@@ -22095,7 +22095,7 @@ +@@ -22264,7 +22264,7 @@ }, { 'name': 'PluginVmLicenseKey', @@ -22491,7 +22709,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'sensitiveValue': True, -@@ -22117,7 +22117,7 @@ +@@ -22286,7 +22286,7 @@ }, { 'name': 'PluginVmUserId', @@ -22500,7 +22718,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'sensitiveValue': True, -@@ -22136,7 +22136,7 @@ +@@ -22305,7 +22305,7 @@ }, { 'name': 'PluginVmImage', @@ -22509,7 +22727,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'object', -@@ -22167,7 +22167,7 @@ +@@ -22336,7 +22336,7 @@ }, { 'name': 'PluginVmDataCollectionAllowed', @@ -22518,7 +22736,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:85-'], -@@ -22186,7 +22186,7 @@ +@@ -22355,7 +22355,7 @@ }, { 'name': 'PluginVmRequiredFreeDiskSpace', @@ -22527,7 +22745,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -22209,7 +22209,7 @@ +@@ -22378,7 +22378,7 @@ }, { 'name': 'ParentAccessCodeConfig', @@ -22536,7 +22754,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'sensitiveValue': True, -@@ -22287,7 +22287,7 @@ +@@ -22456,7 +22456,7 @@ }, { 'name': 'ClientCertificateManagementAllowed', @@ -22545,7 +22763,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -22327,7 +22327,7 @@ +@@ -22496,7 +22496,7 @@ { 'id': 520, 'name': 'DeviceRebootOnUserSignout', @@ -22554,7 +22772,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -22374,7 +22374,7 @@ +@@ -22543,7 +22543,7 @@ }, { 'name': 'ForceNetworkInProcess', @@ -22563,7 +22781,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.win:72-83'], -@@ -22391,7 +22391,7 @@ +@@ -22560,7 +22560,7 @@ }, { 'name': 'AssistantOnboardingMode', @@ -22572,7 +22790,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -22431,7 +22431,7 @@ +@@ -22600,7 +22600,7 @@ }, { 'name': 'VoiceInteractionContextEnabled', @@ -22581,7 +22799,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:74-'], -@@ -22449,7 +22449,7 @@ +@@ -22618,7 +22618,7 @@ }, { 'name': 'VoiceInteractionHotwordEnabled', @@ -22590,7 +22808,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:74-'], -@@ -22467,7 +22467,7 @@ +@@ -22636,7 +22636,7 @@ }, { 'name': 'AssistantVoiceMatchEnabledDuringOobe', @@ -22599,7 +22817,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:93-'], -@@ -22496,7 +22496,7 @@ +@@ -22665,7 +22665,7 @@ }, { 'name': 'VoiceInteractionQuickAnswersEnabled', @@ -22608,7 +22826,43 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:84-88'], -@@ -22519,7 +22519,7 @@ +@@ -22688,7 +22688,7 @@ + }, + { + 'name': 'QuickAnswersEnabled', +- 'owners': ['updowndota@google.com'], ++ 'owners': ['updowndota@9oo91e.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:97-'], +@@ -22719,7 +22719,7 @@ + }, + { + 'name': 'QuickAnswersDefinitionEnabled', +- 'owners': ['updowndota@google.com'], ++ 'owners': ['updowndota@9oo91e.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:97-'], +@@ -22749,7 +22749,7 @@ + }, + { + 'name': 'QuickAnswersTranslationEnabled', +- 'owners': ['updowndota@google.com'], ++ 'owners': ['updowndota@9oo91e.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:97-'], +@@ -22779,7 +22779,7 @@ + }, + { + 'name': 'QuickAnswersUnitConverstionEnabled', +- 'owners': ['updowndota@google.com'], ++ 'owners': ['updowndota@9oo91e.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:97-'], +@@ -22809,7 +22809,7 @@ }, { 'name': 'DeviceWilcoDtcAllowed', @@ -22617,7 +22871,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:74-'], -@@ -22538,7 +22538,7 @@ +@@ -22828,7 +22828,7 @@ }, { 'name': 'AllowPopupsDuringPageUnload', @@ -22626,7 +22880,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'deprecated': True, -@@ -22558,11 +22558,11 @@ +@@ -22848,11 +22848,11 @@ This policy was removed in Chrome 88 and is ignored if set. @@ -22640,7 +22894,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'external', 'schema': { 'type': 'object', -@@ -22591,7 +22591,7 @@ +@@ -22881,7 +22881,7 @@ }, { 'name': 'DevicePowerPeakShiftEnabled', @@ -22649,7 +22903,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:75-'], -@@ -22612,7 +22612,7 @@ +@@ -22902,7 +22902,7 @@ }, { 'name': 'DevicePowerPeakShiftBatteryThreshold', @@ -22658,7 +22912,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -22635,7 +22635,7 @@ +@@ -22925,7 +22925,7 @@ }, { 'name': 'DevicePowerPeakShiftDayConfig', @@ -22667,7 +22921,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'object', -@@ -22714,7 +22714,7 @@ +@@ -23004,7 +23004,7 @@ }, { 'name': 'DeviceBootOnAcEnabled', @@ -22676,7 +22930,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:75-'], -@@ -22735,7 +22735,7 @@ +@@ -23025,7 +23025,7 @@ }, { 'name': 'DeviceUsbPowerShareEnabled', @@ -22685,7 +22939,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:75-'], -@@ -22760,7 +22760,7 @@ +@@ -23050,7 +23050,7 @@ }, { 'name': 'SignedHTTPExchangeEnabled', @@ -22694,7 +22948,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:75-', 'chrome_os:75-'], -@@ -22789,7 +22789,7 @@ +@@ -23079,7 +23079,7 @@ }, { 'name': 'ContextAwareAccessSignalsAllowlist', @@ -22703,7 +22957,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'supported_on': ['chrome.*:95-', 'chrome_os:95-'], 'type': 'list', 'schema': { -@@ -22817,11 +22817,11 @@ +@@ -23107,11 +23107,11 @@ For ChromeOS, this policy is related to remote attestation where a certificate is automatically generated and uploaded to the Device Management Server. @@ -22717,7 +22971,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string', -@@ -22844,7 +22844,7 @@ +@@ -23134,7 +23134,7 @@ }, { 'name': 'SamlInSessionPasswordChangeEnabled', @@ -22726,7 +22980,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:76-'], -@@ -22879,7 +22879,7 @@ +@@ -23169,7 +23169,7 @@ }, { 'name': 'LockScreenReauthenticationEnabled', @@ -22735,7 +22989,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:85-'], -@@ -22898,7 +22898,7 @@ +@@ -23188,7 +23188,7 @@ }, { 'name': 'UserFeedbackAllowed', @@ -22744,7 +22998,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean', -@@ -22929,7 +22929,7 @@ +@@ -23219,7 +23219,7 @@ }, { 'name': 'SamlPasswordExpirationAdvanceWarningDays', @@ -22753,7 +23007,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -22956,7 +22956,7 @@ +@@ -23246,7 +23246,7 @@ }, { 'name': 'DeviceAdvancedBatteryChargeModeEnabled', @@ -22762,7 +23016,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:75-'], -@@ -22977,7 +22977,7 @@ +@@ -23267,7 +23267,7 @@ }, { 'name': 'DeviceAdvancedBatteryChargeModeDayConfig', @@ -22771,7 +23025,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'object', -@@ -23044,7 +23044,7 @@ +@@ -23334,7 +23334,7 @@ }, { 'name': 'DeviceBatteryChargeMode', @@ -22780,7 +23034,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -23095,7 +23095,7 @@ +@@ -23385,7 +23385,7 @@ }, { 'name': 'DeviceBatteryChargeCustomStartCharging', @@ -22789,7 +23043,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -23118,7 +23118,7 @@ +@@ -23408,7 +23408,7 @@ }, { 'name': 'DeviceBatteryChargeCustomStopCharging', @@ -22798,7 +23052,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -23141,7 +23141,7 @@ +@@ -23431,7 +23431,7 @@ }, { 'name': 'DeviceScheduledUpdateCheck', @@ -22807,7 +23061,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'device_only': True, 'type': 'dict', 'schema': { -@@ -23187,7 +23187,7 @@ +@@ -23477,7 +23477,7 @@ }, { 'name': 'DeviceScheduledReboot', @@ -22816,7 +23070,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'device_only': True, 'type': 'dict', 'schema': { -@@ -23232,7 +23232,7 @@ +@@ -23522,7 +23522,7 @@ }, { 'name': 'KerberosEnabled', @@ -22825,7 +23079,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:87-'], -@@ -23253,7 +23253,7 @@ +@@ -23543,7 +23543,7 @@ }, { 'name': 'KerberosRememberPasswordEnabled', @@ -22834,7 +23088,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:87-'], -@@ -23274,7 +23274,7 @@ +@@ -23564,7 +23564,7 @@ }, { 'name': 'KerberosAddAccountsAllowed', @@ -22843,7 +23097,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:87-'], -@@ -23295,7 +23295,7 @@ +@@ -23585,7 +23585,7 @@ }, { 'name': 'KerberosAccounts', @@ -22852,7 +23106,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'array', -@@ -23372,7 +23372,7 @@ +@@ -23662,7 +23662,7 @@ }, { 'name': 'CommandLineFlagSecurityWarningsEnabled', @@ -22861,7 +23115,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:76-'], -@@ -23403,7 +23403,7 @@ +@@ -23693,7 +23693,7 @@ }, { 'name': 'StartupBrowserWindowLaunchSuppressed', @@ -22870,7 +23124,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:76-'], -@@ -23424,7 +23424,7 @@ +@@ -23714,7 +23714,7 @@ { 'id': 571, 'name': 'DevicePowerwashAllowed', @@ -22879,7 +23133,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean', -@@ -23444,7 +23444,7 @@ +@@ -23734,7 +23734,7 @@ }, { 'name': 'ExternalPrintServers', @@ -22888,7 +23142,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'external', 'schema': { 'type': 'object', -@@ -23489,7 +23489,7 @@ +@@ -23779,7 +23779,7 @@ }, { 'name': 'DeviceExternalPrintServers', @@ -22897,7 +23151,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'external', 'schema': { 'type': 'object', -@@ -23538,7 +23538,7 @@ +@@ -23828,7 +23828,7 @@ }, { 'name': 'VmManagementCliAllowed', @@ -22906,7 +23160,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:77-'], -@@ -23558,7 +23558,7 @@ +@@ -23848,7 +23848,7 @@ }, { 'name': 'CACertificateManagementAllowed', @@ -22915,7 +23169,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -23596,7 +23596,7 @@ +@@ -23886,7 +23886,7 @@ { 'id': 581, 'name': 'LockScreenMediaPlaybackEnabled', @@ -22924,7 +23178,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean', -@@ -23616,7 +23616,7 @@ +@@ -23906,7 +23906,7 @@ }, { 'name': 'OnFileDownloadedEnterpriseConnector', @@ -22933,7 +23187,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'array', -@@ -23751,7 +23751,7 @@ +@@ -24041,7 +24041,7 @@ }, { 'name': 'OnFileAttachedEnterpriseConnector', @@ -22942,7 +23196,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'array', -@@ -23886,7 +23886,7 @@ +@@ -24176,7 +24176,7 @@ }, { 'name': 'OnBulkDataEntryEnterpriseConnector', @@ -22951,7 +23205,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'array', -@@ -24017,7 +24017,7 @@ +@@ -24307,7 +24307,7 @@ }, { 'name': 'OnSecurityEventEnterpriseConnector', @@ -22960,7 +23214,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'array', -@@ -24054,7 +24054,7 @@ +@@ -24344,7 +24344,7 @@ }, { 'name': 'EnterpriseRealTimeUrlCheckMode', @@ -22969,7 +23223,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -24096,7 +24096,7 @@ +@@ -24386,7 +24386,7 @@ }, { 'name': 'RendererCodeIntegrityEnabled', @@ -22978,7 +23232,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.win:78-'], -@@ -24112,11 +24112,11 @@ +@@ -24402,11 +24402,11 @@ Setting the policy to Disabled has a detrimental effect on $1Google Chrome's security and stability as unknown and potentially hostile code can load inside $1Google Chrome's renderer processes. Only turn off the policy if there are compatibility issues with third-party software that must run inside $1Google Chrome's renderer processes. @@ -22992,7 +23246,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'items': [ -@@ -24143,11 +24143,11 @@ +@@ -24433,11 +24433,11 @@ Setting the policy to Disabled has a detrimental effect on $1Google Chrome's security and stability as unknown and potentially hostile code can load inside $1Google Chrome's browser process. Only turn off the policy if there are compatibility issues with third-party software that must run inside $1Google Chrome's browser process. @@ -23006,7 +23260,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -24173,7 +24173,7 @@ +@@ -24463,7 +24463,7 @@ }, { 'name': 'AllowSyncXHRInPageDismissal', @@ -23015,7 +23269,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:78-', 'chrome_os:78-', 'android:78-'], -@@ -24194,11 +24194,11 @@ +@@ -24484,11 +24484,11 @@ This policy will be removed in Chrome 93. @@ -23029,7 +23283,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -24224,7 +24224,7 @@ +@@ -24514,7 +24514,7 @@ { 'id': 626, 'name': 'TLS13HardeningForLocalAnchorsEnabled', @@ -23038,7 +23292,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean', -@@ -24249,7 +24249,7 @@ +@@ -24539,7 +24539,7 @@ }, { 'name': 'AudioSandboxEnabled', @@ -23047,7 +23301,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.win:79-', 'chrome.linux:79-', 'chrome.mac:79-'], -@@ -24270,7 +24270,7 @@ +@@ -24560,7 +24560,7 @@ }, { 'name': 'CorsMitigationList', @@ -23056,7 +23310,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -24288,19 +24288,19 @@ +@@ -24578,19 +24578,19 @@ 'tags': [], 'desc': '''Enable CORS check mitigations in the new CORS implementation, allowing Extensions to keep compatible behavior, and allowing $1Google Chrome to send specified headers without CORS checks. @@ -23079,7 +23333,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:79-83', 'chrome_os:79-83'], -@@ -24321,13 +24321,13 @@ +@@ -24611,13 +24611,13 @@ This policy will be removed after a couple of milestones. @@ -23095,7 +23349,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'supported_on': ['chrome_os:79-'], 'id': 631, 'features': { -@@ -24355,7 +24355,7 @@ +@@ -24645,7 +24645,7 @@ }, { 'name': 'ExternalPrintServersAllowlist', @@ -23104,7 +23358,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'supported_on': ['chrome_os:86-'], 'id': 750, 'features': { -@@ -24380,7 +24380,7 @@ +@@ -24670,7 +24670,7 @@ }, { 'name': 'DeviceExternalPrintServersAllowlist', @@ -23113,7 +23367,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'future_on': ['chrome_os'], # TODO(https://crbug.com/1100777): Remove |future|. 'id': 731, -@@ -24407,7 +24407,7 @@ +@@ -24697,7 +24697,7 @@ }, { 'name': 'ExternalProtocolDialogShowAlwaysOpenCheckbox', @@ -23122,7 +23376,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean', -@@ -24440,7 +24440,7 @@ +@@ -24730,7 +24730,7 @@ }, { 'name': 'DefaultInsecureContentSetting', @@ -23131,7 +23385,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -24475,7 +24475,7 @@ +@@ -24765,7 +24765,7 @@ }, { 'name': 'InsecureContentAllowedForUrls', @@ -23140,7 +23394,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -24494,11 +24494,11 @@ +@@ -24784,11 +24784,11 @@ If this policy is left not set blockable mixed content will be blocked and optionally blockable mixed content will be upgraded, and users will be allowed to set exceptions to allow it for specific sites. @@ -23154,7 +23408,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -24517,11 +24517,11 @@ +@@ -24807,11 +24807,11 @@ If this policy is left not set blockable mixed content will be blocked and optionally blockable mixed content will be upgraded, but users will be allowed to set exceptions to allow it for specific sites. @@ -23168,7 +23422,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'device_only': True, 'type': 'list', 'schema': { -@@ -24545,11 +24545,11 @@ +@@ -24835,11 +24835,11 @@ URLs must have HTTPS scheme, e.g. "https://example.com". @@ -23182,7 +23436,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type' : 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:80-'], -@@ -24567,7 +24567,7 @@ +@@ -24857,7 +24857,7 @@ }, { 'name': 'PerAppTimeLimits', @@ -23191,7 +23445,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'object', -@@ -24694,7 +24694,7 @@ +@@ -24984,7 +24984,7 @@ }, { 'name': 'WebComponentsV0Enabled', @@ -23200,7 +23454,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'example_value': True, -@@ -24717,7 +24717,7 @@ +@@ -25007,7 +25007,7 @@ }, { 'name': 'UseLegacyFormControls', @@ -23209,7 +23463,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'example_value': True, -@@ -24740,7 +24740,7 @@ +@@ -25030,7 +25030,7 @@ }, { 'name': 'ClickToCallEnabled', @@ -23218,7 +23472,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:79-', 'chrome_os:79-'], -@@ -24752,7 +24752,7 @@ +@@ -25042,7 +25042,7 @@ 'id': 645, 'caption': '''Enable the Click to Call Feature''', 'tags': [], @@ -23227,7 +23481,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli If this policy is set to enabled, the capability of sending phone numbers to Android devices will be enabled for the Chrome user. -@@ -24764,7 +24764,7 @@ +@@ -25054,7 +25054,7 @@ }, { 'name': 'UserDataSnapshotRetentionLimit', @@ -23236,7 +23490,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', 'minimum': 0 }, 'supported_on': ['chrome.*:83-'], -@@ -24785,7 +24785,7 @@ +@@ -25075,7 +25075,7 @@ }, { 'name': 'PrinterTypeDenyList', @@ -23245,7 +23499,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum-list', 'schema': { 'type': 'array', -@@ -24850,7 +24850,7 @@ +@@ -25140,7 +25140,7 @@ }, { 'name': 'PrintPostScriptMode', @@ -23254,7 +23508,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -24890,7 +24890,7 @@ +@@ -25180,7 +25180,7 @@ }, { 'name': 'PrintRasterizationMode', @@ -23263,7 +23517,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -24930,7 +24930,7 @@ +@@ -25220,7 +25220,7 @@ }, { 'name': 'PrintPdfAsImageAvailability', @@ -23272,7 +23526,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'items': [ -@@ -24963,7 +24963,7 @@ +@@ -25253,7 +25253,7 @@ }, { 'name': 'PrintRasterizePdfDpi', @@ -23281,7 +23535,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -24989,7 +24989,7 @@ +@@ -25279,7 +25279,7 @@ }, { 'name': 'PrintPdfAsImageDefault', @@ -23290,7 +23544,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'items': [ -@@ -25024,7 +25024,7 @@ +@@ -25314,7 +25314,7 @@ }, { 'name': 'DeletePrintJobHistoryAllowed', @@ -23299,7 +23553,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:85-'], -@@ -25047,7 +25047,7 @@ +@@ -25337,7 +25337,7 @@ }, { 'name': 'AmbientAuthenticationInPrivateModesEnabled', @@ -23308,7 +23562,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -25102,7 +25102,7 @@ +@@ -25392,7 +25392,7 @@ }, { 'name': 'PaymentMethodQueryEnabled', @@ -23317,7 +23571,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:80-', 'chrome_os:80-', 'android:80-'], -@@ -25122,7 +25122,7 @@ +@@ -25412,7 +25412,7 @@ }, { 'name': 'StricterMixedContentTreatmentEnabled', @@ -23326,7 +23580,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:80-', 'chrome_os:80-'], -@@ -25144,7 +25144,7 @@ +@@ -25434,7 +25434,7 @@ }, { 'name': 'PerAppTimeLimitsWhitelist', @@ -23335,7 +23589,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 658, 'features': { 'dynamic_refresh': True, -@@ -25188,8 +25188,8 @@ +@@ -25478,8 +25478,8 @@ 'url_list': [ "chrome://*", "file://*", @@ -23346,7 +23600,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli ], 'app_list': [ { -@@ -25218,7 +25218,7 @@ +@@ -25508,7 +25508,7 @@ }, { 'name': 'PerAppTimeLimitsAllowlist', @@ -23355,7 +23609,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 762, 'features': { 'dynamic_refresh': True, -@@ -25261,8 +25261,8 @@ +@@ -25551,8 +25551,8 @@ 'url_list': [ "chrome://*", "file://*", @@ -23366,7 +23620,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli ], 'app_list': [ { -@@ -25289,7 +25289,7 @@ +@@ -25579,7 +25579,7 @@ }, { 'name': 'LocalDiscoveryEnabled', @@ -23375,7 +23629,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:81-87', 'chrome_os:81-87'], -@@ -25322,7 +25322,7 @@ +@@ -25612,7 +25612,7 @@ }, { 'name': 'ScreenCaptureAllowed', @@ -23384,7 +23638,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:81-', 'chrome_os:81-'], -@@ -25351,7 +25351,7 @@ +@@ -25641,7 +25641,7 @@ }, { 'name': 'ScreenCaptureAllowedByOrigins', @@ -23393,7 +23647,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -25374,11 +25374,11 @@ +@@ -25664,11 +25664,11 @@ If a site matches a URL pattern in this policy, the ScreenCaptureAllowed will not be considered. @@ -23407,7 +23661,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -25401,11 +25401,11 @@ +@@ -25691,11 +25691,11 @@ If a site matches a URL pattern in this policy, the following policies will not be considered: ScreenCaptureAllowedByOrigins, ScreenCaptureAllowed. @@ -23421,7 +23675,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -25430,11 +25430,11 @@ +@@ -25720,11 +25720,11 @@ If a site matches a URL pattern in this policy, the following policies will not be considered: WindowCaptureAllowedByOrigins, ScreenCaptureAllowedByOrigins, ScreenCaptureAllowed. @@ -23435,7 +23689,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -25457,11 +25457,11 @@ +@@ -25747,11 +25747,11 @@ If a site matches a URL pattern in this policy, the following policies will not be considered: TabCaptureAllowedByOrigins, WindowCaptureAllowedByOrigins, ScreenCaptureAllowedByOrigins, ScreenCaptureAllowed. @@ -23449,7 +23703,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:81-81'], -@@ -25480,7 +25480,7 @@ +@@ -25770,7 +25770,7 @@ }, { 'name': 'SystemProxySettings', @@ -23458,7 +23712,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'supported_on': ['chrome_os:87-'], 'device_only': True, 'id': 672, -@@ -25536,7 +25536,7 @@ +@@ -25826,7 +25826,7 @@ }, { 'name': 'DeviceLoginScreenPrivacyScreenEnabled', @@ -23467,7 +23721,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'device_only': True, 'type': 'main', 'schema': { 'type': 'boolean' }, -@@ -25564,7 +25564,7 @@ If this policy is left unset, the privacy screen is disabled initially, but rema +@@ -25854,7 +25854,7 @@ If this policy is left unset, the privacy screen is disabled initially, but rema }, { 'name': 'PrivacyScreenEnabled', @@ -23476,7 +23730,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:83-'], -@@ -25591,7 +25591,7 @@ If this policy is left unset, privacy screen is disabled initially but can be co +@@ -25881,7 +25881,7 @@ If this policy is left unset, privacy screen is disabled initially but can be co }, { 'name': 'AllowNativeNotifications', @@ -23485,7 +23739,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.linux:83-'], -@@ -25646,7 +25646,7 @@ If set to False, $1Google Chrome will not +@@ -25936,7 +25936,7 @@ If set to False, $1Google Chrome will not }, { 'name': 'RequiredClientCertificateForUser', @@ -23494,7 +23748,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'array', -@@ -25698,7 +25698,7 @@ If set to False, $1Google Chrome will not +@@ -25988,7 +25988,7 @@ If set to False, $1Google Chrome will not }, { 'name': 'RequiredClientCertificateForDevice', @@ -23503,7 +23757,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'array', -@@ -25750,7 +25750,7 @@ If set to False, $1Google Chrome will not +@@ -26040,7 +26040,7 @@ If set to False, $1Google Chrome will not }, { 'name': 'AdvancedProtectionAllowed', @@ -23512,7 +23766,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:83-', 'chrome_os:83-'], -@@ -25767,7 +25767,7 @@ If set to False, $1Google Chrome will not +@@ -26057,7 +26057,7 @@ If set to False, $1Google Chrome will not }, { 'name': 'ScrollToTextFragmentEnabled', @@ -23521,7 +23775,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:83-', 'chrome_os:83-', 'android:83-'], -@@ -25788,7 +25788,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26078,7 +26078,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'LoginDisplayPasswordButtonEnabled', @@ -23530,7 +23784,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:86-'], -@@ -25807,7 +25807,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26097,7 +26097,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'AccessibilityImageLabelsEnabled', @@ -23539,7 +23793,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:84-', 'chrome.*:84-'], -@@ -25858,7 +25858,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26148,7 +26148,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'IntensiveWakeUpThrottlingEnabled', @@ -23548,7 +23802,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:85-', 'chrome.*:85-', 'android:85-'], -@@ -25896,7 +25896,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26186,7 +26186,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'BackForwardCacheEnabled', @@ -23557,7 +23811,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['android:86-'], -@@ -25931,7 +25931,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26221,7 +26221,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'PinUnlockAutosubmitEnabled', @@ -23566,7 +23820,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:86-'], -@@ -25957,7 +25957,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26247,7 +26247,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'EmojiSuggestionEnabled', @@ -23575,7 +23829,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:86-'], -@@ -25976,7 +25976,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26266,7 +26266,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'UserAgentClientHintsEnabled', @@ -23584,7 +23838,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:84-93', 'chrome.*:84-93', 'android:84-93'], -@@ -25998,7 +25998,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26288,7 +26288,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR + }, + { + 'name': 'UserAgentClientHintsGREASEUpdateEnabled', +- 'owners': ['miketaylr@google.com', 'mreichhoff@chromium.org', 'file://components/client_hints/OWNERS'], ++ 'owners': ['miketaylr@9oo91e.qjz9zk', 'mreichhoff@ch40m1um.qjz9zk', 'file://components/client_hints/OWNERS'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'future_on': ['chrome_os', 'chrome.*', 'android'], +@@ -26317,7 +26317,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'SuggestedContentEnabled', @@ -23593,7 +23856,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:85-'], -@@ -26020,7 +26020,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26339,7 +26339,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'ShowFullUrlsInAddressBar', @@ -23602,7 +23865,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:86-', 'chrome.*:86-'], -@@ -26043,7 +26043,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26362,7 +26362,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'InsecureFormsWarningsEnabled', @@ -23611,7 +23874,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:86-', 'chrome_os:86-', 'android:86-'], -@@ -26062,7 +26062,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26381,7 +26381,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'LookalikeWarningAllowlistDomains', @@ -23620,7 +23883,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -26088,7 +26088,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26407,7 +26407,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'CCTToSDialogEnabled', @@ -23629,7 +23892,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['android:86-86'], -@@ -26118,7 +26118,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26437,7 +26437,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'TosDialogBehavior', @@ -23638,7 +23901,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -26161,7 +26161,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26480,7 +26480,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'CloudPrintWarningsSuppressed', @@ -23647,7 +23910,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:86-87', 'chrome_os:86-87'], -@@ -26191,7 +26191,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26510,7 +26510,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'EnableDeprecatedPrivetPrinting', @@ -23656,7 +23919,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:89-93', 'chrome_os:89-93'], -@@ -26221,7 +26221,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26540,7 +26540,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'DataLeakPreventionClipboardCheckSizeLimit', @@ -23665,7 +23928,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer' , 'minimum' : 0 }, 'supported_on': ['chrome_os:93-'], -@@ -26240,7 +26240,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26559,7 +26559,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'DataLeakPreventionReportingEnabled', @@ -23674,7 +23937,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:92-'], -@@ -26272,7 +26272,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26591,7 +26591,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'DataLeakPreventionRulesList', @@ -23683,7 +23946,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'array', -@@ -26358,18 +26358,18 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26677,18 +26677,18 @@ If you disable this policy, web page scrolling to specific text fragments via UR 'sources': { 'urls': [ 'salesforce.com', @@ -23708,7 +23971,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'company.com' ] }, -@@ -26402,8 +26402,8 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26721,8 +26721,8 @@ If you disable this policy, web page scrolling to specific text fragments via UR 'sources': { 'urls': [ 'salesforce.com', @@ -23719,7 +23982,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'company.com' ] }, -@@ -26449,13 +26449,13 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26768,13 +26768,13 @@ If you disable this policy, web page scrolling to specific text fragments via UR Notes: - PRIVACY_SCREEN restriction doesn't block the ability to turn on privacy screen, but enforces it when the restriction class is set to BLOCK. - Destinations cannot be empty in case one of the restrictions is CLIPBOARD, but they don't make any difference for the remaining restrictions. @@ -23735,7 +23998,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:87-', 'chrome_os:87-'], -@@ -26488,7 +26488,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26807,7 +26807,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'MediaRecommendationsEnabled', @@ -23744,7 +24007,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:87-', 'chrome_os:87-'], -@@ -26515,7 +26515,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26834,7 +26834,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'DeviceFamilyLinkAccountsAllowed', @@ -23753,7 +24016,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:87-'], -@@ -26539,7 +26539,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26858,7 +26858,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'EduCoexistenceToSVersion', @@ -23762,7 +24025,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string', -@@ -26564,7 +26564,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26883,7 +26883,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'BrowsingDataLifetime', @@ -23771,7 +24034,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'array', -@@ -26619,7 +26619,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26938,7 +26938,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'LacrosAllowed', @@ -23780,7 +24043,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:88-95'], -@@ -26652,7 +26652,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -26971,7 +26971,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'LacrosSecondaryProfilesAllowed', @@ -23789,7 +24052,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.linux:91-92', 'chrome_os:91-'], -@@ -26686,7 +26686,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -27005,7 +27005,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'LacrosAvailability', @@ -23798,7 +24061,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -26752,7 +26752,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -27071,7 +27071,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'IntegratedWebAuthenticationAllowed', @@ -23807,7 +24070,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:89-93'], -@@ -26780,7 +26780,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -27099,7 +27099,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'ClearBrowsingDataOnExitList', @@ -23816,7 +24079,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum-list', 'schema': { 'type': 'array', -@@ -26866,7 +26866,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -27185,7 +27185,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'ProfilePickerOnStartupAvailability', @@ -23825,7 +24088,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -26913,7 +26913,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -27232,7 +27232,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'SigninInterceptionEnabled', @@ -23834,7 +24097,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:89-'], -@@ -26948,7 +26948,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -27267,7 +27267,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'WebXRImmersiveArEnabled', @@ -23843,7 +24106,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['android:90-'], -@@ -26981,7 +26981,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -27300,7 +27300,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'SendDownloadToCloudEnterpriseConnector', @@ -23852,7 +24115,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'array', -@@ -27068,7 +27068,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -27387,7 +27387,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'DeviceSystemWideTracingEnabled', @@ -23861,7 +24124,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:90-'], -@@ -27102,7 +27102,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -27421,7 +27421,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'WebAppSettings', @@ -23870,7 +24133,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'object', -@@ -27160,7 +27160,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -27479,7 +27479,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'FetchKeepaliveDurationSecondsOnShutdown', @@ -23879,7 +24142,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', 'minimum': 0, 'maximum': 5 }, 'default': 0, -@@ -27183,7 +27183,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -27502,7 +27502,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'SuppressDifferentOriginSubframeDialogs', @@ -23888,7 +24151,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:91-', 'chrome_os:91-', 'android:91-'], -@@ -27206,7 +27206,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -27525,7 +27525,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR 'id': 829, 'caption': '''Suppress JavaScript Dialogs triggered from different origin subframes''', 'tags': [], @@ -23897,7 +24160,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli This policy allows overriding that change. If the policy is set to enabled or unset, JavaScript dialogs triggered from a different origin subframe will be blocked. If the policy is set to disabled, JavaScript dialogs triggered from a different origin subframe will not be blocked. -@@ -27215,7 +27215,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -27534,7 +27534,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'DeviceBorealisAllowed', @@ -23906,7 +24169,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:91-'], -@@ -27244,7 +27244,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -27563,7 +27563,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'UserBorealisAllowed', @@ -23915,7 +24178,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:91-'], -@@ -27273,7 +27273,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -27592,7 +27592,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'AudioProcessHighPriorityEnabled', @@ -23924,7 +24187,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.win:90-'], -@@ -27310,7 +27310,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -27629,7 +27629,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'ForcedLanguages', @@ -23933,7 +24196,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -27334,7 +27334,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -27653,7 +27653,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'BrowserThemeColor', @@ -23942,7 +24205,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string', -@@ -27358,7 +27358,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -27677,7 +27677,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'WebRtcIPHandling', @@ -23951,7 +24214,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -27400,7 +27400,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -27719,7 +27719,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'PdfAnnotationsEnabled', @@ -23960,7 +24223,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:91-'], -@@ -27431,7 +27431,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -27750,7 +27750,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, { 'name': 'DeviceAllowedBluetoothServices', @@ -23969,7 +24232,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -27455,7 +27455,7 @@ When this policy is set, $2Google Chrome OS< +@@ -27774,7 +27774,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'ExplicitlyAllowedNetworkPorts', @@ -23978,7 +24241,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum-list', # this would be 'int-enum-list' if it was supported. 'schema': { 'type': 'array', -@@ -27550,7 +27550,7 @@ When this policy is set, $2Google Chrome OS< +@@ -27869,7 +27869,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'DeviceDebugPacketCaptureAllowed', @@ -23987,7 +24250,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:92-'], -@@ -27583,7 +27583,7 @@ When this policy is set, $2Google Chrome OS< +@@ -27902,7 +27902,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'SuggestLogoutAfterClosingLastWindow', @@ -23996,7 +24259,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:92-'], -@@ -27612,7 +27612,7 @@ When this policy is set, $2Google Chrome OS< +@@ -27931,7 +27931,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'TripleDESEnabled', @@ -24005,7 +24268,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean', -@@ -27652,7 +27652,7 @@ When this policy is set, $2Google Chrome OS< +@@ -27972,7 +27972,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'ManagedAccountsSigninRestriction', @@ -24014,7 +24277,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -27707,7 +27707,7 @@ When this policy is set, $2Google Chrome OS< +@@ -28027,7 +28027,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'LockIconInAddressBarEnabled', @@ -24023,7 +24286,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'items': [ -@@ -27737,7 +27737,7 @@ When this policy is set, $2Google Chrome OS< +@@ -28057,7 +28057,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'DefaultJavaScriptJitSetting', @@ -24032,7 +24295,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -27775,7 +27775,7 @@ When this policy is set, $2Google Chrome OS< +@@ -28095,7 +28095,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'JavaScriptJitAllowedForSites', @@ -24041,7 +24304,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -27792,7 +27792,7 @@ When this policy is set, $2Google Chrome OS< +@@ -28112,7 +28112,7 @@ When this policy is set, $2Google Chrome OS< 'tags': [], 'desc': '''Allows you to set a list of site url patterns that specify sites which are allowed to run JavaScript with JIT (Just In Time) compiler enabled. @@ -24050,7 +24313,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli JavaScript JIT policy exceptions will only be enforced at a site granularity (eTLD+1). A policy set for only subdomain.site.com will not correctly apply to site.com or subdomain.site.com since they both resolve to the same eTLD+1 (site.com) for which there is no policy. In this case, policy must be set on site.com to apply correctly for both site.com and subdomain.site.com. -@@ -27802,7 +27802,7 @@ When this policy is set, $2Google Chrome OS< +@@ -28122,7 +28122,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'JavaScriptJitBlockedForSites', @@ -24059,7 +24322,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -27821,7 +27821,7 @@ When this policy is set, $2Google Chrome OS< +@@ -28141,7 +28141,7 @@ When this policy is set, $2Google Chrome OS< Disabling the JavaScript JIT will mean that $1Google Chrome may render web content more slowly, and may also disable parts of JavaScript including WebAssembly. Disabling the JavaScript JIT may allow $1Google Chrome to render web content in a more secure configuration. @@ -24068,7 +24331,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli JavaScript JIT policy exceptions will only be enforced at a site granularity (eTLD+1). A policy set for only subdomain.site.com will not correctly apply to site.com or subdomain.site.com since they both resolve to the same eTLD+1 (site.com) for which there is no policy. In this case, policy must be set on site.com to apply correctly for both site.com and subdomain.site.com. -@@ -27831,7 +27831,7 @@ When this policy is set, $2Google Chrome OS< +@@ -28151,7 +28151,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'HttpsOnlyMode', @@ -24077,7 +24340,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -27875,7 +27875,7 @@ When this policy is set, $2Google Chrome OS< +@@ -28195,7 +28195,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'DesktopSharingHubEnabled', @@ -24086,7 +24349,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'items': [ -@@ -27904,7 +27904,7 @@ When this policy is set, $2Google Chrome OS< +@@ -28224,7 +28224,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'DeviceRestrictedManagedGuestSessionEnabled', @@ -24095,7 +24358,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:96-'], -@@ -27934,7 +27934,7 @@ When this policy is set, $2Google Chrome OS< +@@ -28254,7 +28254,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'RestrictedManagedGuestSessionExtensionCleanupExemptList', @@ -24104,7 +24367,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -27958,7 +27958,7 @@ When this policy is set, $2Google Chrome OS< +@@ -28278,7 +28278,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'ArcAppToWebAppSharingEnabled', @@ -24113,7 +24376,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:94-'], -@@ -28019,7 +28019,7 @@ When this policy is set, $2Google Chrome OS< +@@ -28339,7 +28339,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'ChromeAppsEnabled', @@ -24122,7 +24385,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'future_on': ['chrome.win', 'chrome.mac', 'chrome.linux'], -@@ -28049,7 +28049,7 @@ When this policy is set, $2Google Chrome OS< +@@ -28369,7 +28369,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'FullRestoreEnabled', @@ -24131,7 +24394,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:96-'], -@@ -28078,7 +28078,7 @@ When this policy is set, $2Google Chrome OS< +@@ -28398,7 +28398,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'GhostWindowEnabled', @@ -24140,7 +24403,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:96-'], -@@ -28107,7 +28107,7 @@ When this policy is set, $2Google Chrome OS< +@@ -28427,7 +28427,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'WebSQLInThirdPartyContextEnabled', @@ -24148,8 +24411,8 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli + 'owners': ['arichiv@ch40m1um.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['android:96-101', 'chrome.*:96-101', 'chrome_os:96-101'], -@@ -28136,7 +28136,7 @@ When this policy is set, $2Google Chrome OS< + 'supported_on': ['android:96-100', 'chrome.*:96-100', 'chrome_os:96-100'], +@@ -28456,7 +28456,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'DeviceLoginScreenPromptOnMultipleMatchingCertificates', @@ -24158,7 +24421,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'device_only': True, -@@ -28167,7 +28167,7 @@ When this policy is set, $2Google Chrome OS< +@@ -28487,7 +28487,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'PromptOnMultipleMatchingCertificates', @@ -24167,7 +24430,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:96-', 'chrome.*:96-'], -@@ -28196,7 +28196,7 @@ When this policy is set, $2Google Chrome OS< +@@ -28516,7 +28516,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'AccessCodeCastEnabled', @@ -24176,7 +24439,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'future_on': ['chrome.*', 'chrome_os'], -@@ -28226,7 +28226,7 @@ When this policy is set, $2Google Chrome OS< +@@ -28546,7 +28546,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'AccessCodeCastDeviceDuration', @@ -24185,7 +24448,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', 'minimum': 0 }, 'future_on': ['chrome.*', 'chrome_os'], -@@ -28249,7 +28249,7 @@ When this policy is set, $2Google Chrome OS< +@@ -28569,7 +28569,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'NetworkServiceSandboxEnabled', @@ -24194,7 +24457,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.win:96-'], -@@ -28280,7 +28280,7 @@ When this policy is set, $2Google Chrome OS< +@@ -28600,7 +28600,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'DeskTemplatesEnabled', @@ -24203,7 +24466,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'future_on': ['chrome_os'], -@@ -28307,7 +28307,7 @@ When this policy is set, $2Google Chrome OS< +@@ -28627,7 +28627,7 @@ When this policy is set, $2Google Chrome OS< }, { 'name': 'PreconfiguredDeskTemplates', @@ -24212,7 +24475,25 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'external', 'schema': { 'type': 'object', -@@ -28455,7 +28455,7 @@ When this policy is set, $2Google Chrome OS< +@@ -28688,7 +28688,7 @@ When this policy is set, $2Google Chrome OS< + }, + { + 'name': 'CORSNonWildcardRequestHeadersSupport', +- 'owners': ['yhirano@chromium.org'], ++ 'owners': ['yhirano@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'default': True, +@@ -28723,7 +28723,7 @@ When this policy is set, $2Google Chrome OS< + }, + { + 'name': 'DeviceI18nShortcutsEnabled', +- 'owners': ['jimmyxgong@chromium.org', 'zentaro@chromium.org', 'cros-peripheral@google.com'], ++ 'owners': ['jimmyxgong@ch40m1um.qjz9zk', 'zentaro@ch40m1um.qjz9zk', 'cros-peripheral@9oo91e.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:97-'], +@@ -28845,7 +28845,7 @@ When this policy is set, $2Google Chrome OS< }, 'doc_banner': { 'desc': '''A banner shown at the top of the policy documentation''', @@ -24221,7 +24502,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli }, 'doc_intro': { 'desc': '''Introduction text for the generated policy documentation''', -@@ -28463,13 +28463,13 @@ When this policy is set, $2Google Chrome OS< +@@ -28853,13 +28853,13 @@ When this policy is set, $2Google Chrome OS< These policies are strictly intended to be used to configure instances of $1Google Chrome internal to your organization. Use of these policies outside of your organization (for example, in a publicly distributed program) is considered malware and will likely be labeled as malware by Google and anti-virus vendors. @@ -24237,7 +24518,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli }, 'doc_policy_in_atomic_group': { 'desc': '''Label notifying that a policy is part of an atomic policy group''', -@@ -28545,11 +28545,11 @@ The recommended way to configure policy on Windows is via GPO, although provisio +@@ -28935,11 +28935,11 @@ The recommended way to configure policy on Windows is via GPO, although provisio }, 'doc_complex_policies_on_windows': { 'desc': '''Text pointing the user to a help article for complex policies on Windows''', @@ -24251,7 +24532,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli }, 'doc_legacy_single_line_label': { 'desc': '''A label for the legacy single-line textbox for a policy also has a more user-friendly multi-line textbox. See http://crbug/829328''', -@@ -28569,7 +28569,7 @@ The recommended way to configure policy on Windows is via GPO, although provisio +@@ -28959,7 +28959,7 @@ The recommended way to configure policy on Windows is via GPO, although provisio }, 'doc_schema_description_link': { 'desc': '''Text pointing the user to the expanded documentation page for this policy, containing the information about schema and formatting.''', @@ -24260,7 +24541,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli }, 'deprecated_policy_group_caption': { 'desc': '''Localized name for the deprecated policies folder, for Microsoft's Group Policy Editor.''', -@@ -28581,7 +28581,7 @@ The recommended way to configure policy on Windows is via GPO, although provisio +@@ -28971,7 +28971,7 @@ The recommended way to configure policy on Windows is via GPO, although provisio }, 'deprecated_policy_desc': { 'desc': '''Description shared by all deprecated policies, in Microsoft Windows' Group Policy Editor.''', @@ -24269,7 +24550,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli }, 'removed_policy_group_caption': { 'desc': '''Localized name for the removed policies folder, for Microsoft's Group Policy Editor.''', -@@ -28593,7 +28593,7 @@ The recommended way to configure policy on Windows is via GPO, although provisio +@@ -28983,7 +28983,7 @@ The recommended way to configure policy on Windows is via GPO, although provisio }, 'removed_policy_desc': { 'desc': '''Description shared by all removed policies, in Microsoft Windows' Group Policy Editor.''', @@ -24278,7 +24559,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli }, }, # Legacy device policies that don't have a 1:1 mapping between template and -@@ -28908,7 +28908,7 @@ The recommended way to configure policy on Windows is via GPO, although provisio +@@ -29304,7 +29304,7 @@ The recommended way to configure policy on Windows is via GPO, although provisio { 'id': 6, 'name': 'RestoreOnStartup', @@ -25415,7 +25696,7 @@ diff --git a/components/safe_browsing/core/browser/password_protection/password_ diff --git a/components/safe_browsing/core/browser/realtime/url_lookup_service.cc b/components/safe_browsing/core/browser/realtime/url_lookup_service.cc --- a/components/safe_browsing/core/browser/realtime/url_lookup_service.cc +++ b/components/safe_browsing/core/browser/realtime/url_lookup_service.cc -@@ -168,7 +168,7 @@ void RealTimeUrlLookupService::Shutdown() { +@@ -164,7 +164,7 @@ void RealTimeUrlLookupService::Shutdown() { GURL RealTimeUrlLookupService::GetRealTimeLookupUrl() const { return GURL( @@ -25424,6 +25705,31 @@ diff --git a/components/safe_browsing/core/browser/realtime/url_lookup_service.c } net::NetworkTrafficAnnotationTag +diff --git a/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service.cc b/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service.cc +--- a/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service.cc ++++ b/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service.cc +@@ -39,10 +39,10 @@ namespace { + const int kRepeatingCheckTailoredSecurityBitDelayInMinutes = 5; + + constexpr char kAPIScope[] = +- "https://www.googleapis.com/auth/chrome-safe-browsing"; ++ "https://www.9oo91eapis.qjz9zk/auth/chrome-safe-browsing"; + + const char kQueryTailoredSecurityServiceUrl[] = +- "https://history.google.com/history/api/lookup?client=aesb"; ++ "https://history.9oo91e.qjz9zk/history/api/lookup?client=aesb"; + + // The maximum number of retries for the SimpleURLLoader requests. + const size_t kMaxRetries = 1; +@@ -271,7 +271,7 @@ void TailoredSecurityService::QueryTailoredSecurityBit() { + R"( + semantics { + description: +- "Queries history.google.com to find out if user has Account level" ++ "Queries history.9oo91e.qjz9zk to find out if user has Account level" + "Enhanced Safe Browsing enabled." + trigger: + "This request is sent every 5 minutes as long as the user does not" diff --git a/components/safe_search_api/safe_search/safe_search_url_checker_client.cc b/components/safe_search_api/safe_search/safe_search_url_checker_client.cc --- a/components/safe_search_api/safe_search/safe_search_url_checker_client.cc +++ b/components/safe_search_api/safe_search/safe_search_url_checker_client.cc @@ -25576,7 +25882,7 @@ diff --git a/components/shared_highlighting/core/common/disabled_sites.cc b/comp diff --git a/components/signin/core/browser/chrome_connected_header_helper.cc b/components/signin/core/browser/chrome_connected_header_helper.cc --- a/components/signin/core/browser/chrome_connected_header_helper.cc +++ b/components/signin/core/browser/chrome_connected_header_helper.cc -@@ -150,8 +150,8 @@ bool ChromeConnectedHeaderHelper::IsDriveOrigin(const GURL& url) { +@@ -151,8 +151,8 @@ bool ChromeConnectedHeaderHelper::IsDriveOrigin(const GURL& url) { if (!url.SchemeIsCryptographic()) return false; @@ -25590,7 +25896,7 @@ diff --git a/components/signin/core/browser/chrome_connected_header_helper.cc b/ diff --git a/components/signin/ios/browser/account_consistency_service.mm b/components/signin/ios/browser/account_consistency_service.mm --- a/components/signin/ios/browser/account_consistency_service.mm +++ b/components/signin/ios/browser/account_consistency_service.mm -@@ -47,9 +47,9 @@ namespace { +@@ -46,9 +46,9 @@ namespace { // that may remove or invalidate Gaia cookies on the Google domain. constexpr base::TimeDelta kDelayThresholdToUpdateGaiaCookie = base::Hours(1); @@ -25603,9 +25909,9 @@ diff --git a/components/signin/ios/browser/account_consistency_service.mm b/comp // Returns the registered, organization-identifying host, but no subdomains, // from the given GURL. Returns an empty string if the GURL is invalid. -@@ -172,8 +172,8 @@ void AccountConsistencyService::AccountConsistencyHandler::ShouldAllowRequest( - if (base::FeatureList::IsEnabled(signin::kRestoreGaiaCookiesOnUserAction) && - signin::IsUrlEligibleForMirrorCookie(url) && +@@ -170,8 +170,8 @@ void AccountConsistencyService::AccountConsistencyHandler::ShouldAllowRequest( + GURL url = net::GURLWithNSURL(request.URL); + if (signin::IsUrlEligibleForMirrorCookie(url) && identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSignin)) { - // CHROME_CONNECTED cookies are added asynchronously on google.com and - // youtube.com domains when Chrome detects that the user is signed-in. By @@ -25614,7 +25920,7 @@ diff --git a/components/signin/ios/browser/account_consistency_service.mm b/comp // continuing to fulfill the navigation once the cookie request is sent, // Chrome adopts a best-effort strategy for signing the user into the web if // necessary. -@@ -527,7 +527,7 @@ void AccountConsistencyService::OnChromeConnectedCookieFinished( +@@ -521,7 +521,7 @@ void AccountConsistencyService::OnChromeConnectedCookieFinished( void AccountConsistencyService::AddChromeConnectedCookies() { DCHECK(!browser_state_->IsOffTheRecord()); // These cookie requests are preventive. Chrome cannot be sure that @@ -25839,7 +26145,7 @@ diff --git a/components/translate/core/browser/translate_script.cc b/components/ diff --git a/components/translate/core/common/translate_util.cc b/components/translate/core/common/translate_util.cc --- a/components/translate/core/common/translate_util.cc +++ b/components/translate/core/common/translate_util.cc -@@ -20,7 +20,7 @@ const char kDetectLanguageInSubFrames[] = "detect_language_in_sub_frames"; +@@ -21,7 +21,7 @@ const char kDetectLanguageInSubFrames[] = "detect_language_in_sub_frames"; } // namespace @@ -25973,7 +26279,7 @@ diff --git a/content/app/resources/README.txt b/content/app/resources/README.txt diff --git a/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm b/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm --- a/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm +++ b/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm -@@ -748,7 +748,7 @@ void ExtractUnderlines(NSAttributedString* string, +@@ -749,7 +749,7 @@ void ExtractUnderlines(NSAttributedString* string, // TODO(suzhe): We should send mouse events to the input method first if it // wants to handle them. But it won't work without implementing method // - (NSUInteger)characterIndexForPoint:. @@ -26042,7 +26348,7 @@ diff --git a/content/browser/portal/portal_navigation_throttle.cc b/content/brow diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc --- a/content/browser/renderer_host/navigation_request.cc +++ b/content/browser/renderer_host/navigation_request.cc -@@ -4814,7 +4814,7 @@ NavigationRequest::CheckCredentialedSubresource() const { +@@ -4886,7 +4886,7 @@ NavigationRequest::CheckCredentialedSubresource() const { const char* console_message = "Subresource requests whose URLs contain embedded credentials (e.g. " "`https://user:pass@host/`) are blocked. See " @@ -26051,7 +26357,7 @@ diff --git a/content/browser/renderer_host/navigation_request.cc b/content/brows "details."; parent->AddMessageToConsole(blink::mojom::ConsoleMessageLevel::kWarning, console_message); -@@ -4842,7 +4842,7 @@ NavigationRequest::CheckLegacyProtocolInSubresource() const { +@@ -4914,7 +4914,7 @@ NavigationRequest::CheckLegacyProtocolInSubresource() const { const char* console_message = "Subresource requests using legacy protocols (like `ftp:`) are blocked. " "Please deliver web-accessible resources over modern protocols like " @@ -26060,7 +26366,7 @@ diff --git a/content/browser/renderer_host/navigation_request.cc b/content/brows "details."; parent->AddMessageToConsole(blink::mojom::ConsoleMessageLevel::kWarning, console_message); -@@ -5058,7 +5058,7 @@ void NavigationRequest::RecordDownloadUseCountersPrePolicyCheck( +@@ -5130,7 +5130,7 @@ void NavigationRequest::RecordDownloadUseCountersPrePolicyCheck( base::StringPrintf( "Navigating a cross-origin opener to a download (%s) is " "deprecated, see " @@ -26072,7 +26378,7 @@ diff --git a/content/browser/renderer_host/navigation_request.cc b/content/brows diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc --- a/content/browser/renderer_host/render_frame_host_impl.cc +++ b/content/browser/renderer_host/render_frame_host_impl.cc -@@ -353,7 +353,7 @@ int g_next_accessibility_reset_token = 1; +@@ -354,7 +354,7 @@ int g_next_accessibility_reset_token = 1; // WebView, WebLayer, Fuchsia web.ContextProvider and CastOS content shell. bool g_allow_injecting_javascript = false; @@ -26132,7 +26438,7 @@ diff --git a/content/browser/speech/tts_mac.mm b/content/browser/speech/tts_mac. diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc -@@ -6696,7 +6696,7 @@ void WebContentsImpl::RunJavaScriptDialog( +@@ -6770,7 +6770,7 @@ void WebContentsImpl::RunJavaScriptDialog( base::StringPrintf( "A different origin subframe tried to create a JavaScript " "dialog. This is no longer allowed and was blocked. See " @@ -26239,7 +26545,7 @@ diff --git a/content/renderer/pepper/pepper_media_device_manager.cc b/content/re diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc --- a/content/renderer/render_thread_impl.cc +++ b/content/renderer/render_thread_impl.cc -@@ -421,17 +421,17 @@ void RenderThreadImpl::HistogramCustomizer::SetCommonHost( +@@ -439,17 +439,17 @@ void RenderThreadImpl::HistogramCustomizer::SetCommonHost( std::string RenderThreadImpl::HistogramCustomizer::HostToCustomHistogramSuffix( const std::string& host) { @@ -26263,7 +26569,7 @@ diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_th return ".youtube"; if (IsAlexaTop10NonGoogleSite(host)) return ".top10"; -@@ -450,7 +450,7 @@ bool RenderThreadImpl::HistogramCustomizer::IsAlexaTop10NonGoogleSite( +@@ -468,7 +468,7 @@ bool RenderThreadImpl::HistogramCustomizer::IsAlexaTop10NonGoogleSite( net::registry_controlled_domains::GetDomainAndRegistry( host, net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES); @@ -26275,7 +26581,7 @@ diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_th diff --git a/content/shell/browser/shell_browser_main_parts.cc b/content/shell/browser/shell_browser_main_parts.cc --- a/content/shell/browser/shell_browser_main_parts.cc +++ b/content/shell/browser/shell_browser_main_parts.cc -@@ -96,7 +96,7 @@ GURL GetStartupURL() { +@@ -84,7 +84,7 @@ GURL GetStartupURL() { #else const base::CommandLine::StringVector& args = command_line->GetArgs(); if (args.empty()) @@ -26420,7 +26726,7 @@ diff --git a/extensions/browser/PRESUBMIT.py b/extensions/browser/PRESUBMIT.py diff --git a/extensions/browser/api/web_request/web_request_permissions.cc b/extensions/browser/api/web_request/web_request_permissions.cc --- a/extensions/browser/api/web_request/web_request_permissions.cc +++ b/extensions/browser/api/web_request/web_request_permissions.cc -@@ -196,7 +196,7 @@ bool IsSensitiveGoogleClientUrl(const extensions::WebRequestInfo& request) { +@@ -198,7 +198,7 @@ bool IsSensitiveGoogleClientUrl(const extensions::WebRequestInfo& request) { // TODO(battre) Merge this, CanExtensionAccessURL and // PermissionsData::CanAccessPage into one function. @@ -26429,7 +26735,7 @@ diff --git a/extensions/browser/api/web_request/web_request_permissions.cc b/ext static constexpr char kClient[] = "clients"; constexpr size_t kGoogleComLength = base::size(kGoogleCom) - 1; constexpr size_t kClientLength = base::size(kClient) - 1; -@@ -337,7 +337,7 @@ bool WebRequestPermissions::HideRequest( +@@ -339,7 +339,7 @@ bool WebRequestPermissions::HideRequest( extension_urls::IsBlacklistUpdateUrl(url) || extension_urls::IsSafeBrowsingUrl(url::Origin::Create(url), url.path_piece()) || @@ -26632,7 +26938,7 @@ diff --git a/google_apis/drive/drive_api_url_generator.cc b/google_apis/drive/dr diff --git a/google_apis/gaia/gaia_auth_fetcher.cc b/google_apis/gaia/gaia_auth_fetcher.cc --- a/google_apis/gaia/gaia_auth_fetcher.cc +++ b/google_apis/gaia/gaia_auth_fetcher.cc -@@ -626,7 +626,7 @@ void GaiaAuthFetcher::StartMergeSession(const std::string& uber_token, +@@ -627,7 +627,7 @@ void GaiaAuthFetcher::StartMergeSession(const std::string& uber_token, // know what sessions already exist in the browser. The fetcher needs to be // created such that it sends the cookies with the request, which is // different from all other requests the fetcher can make. @@ -26641,7 +26947,7 @@ diff --git a/google_apis/gaia/gaia_auth_fetcher.cc b/google_apis/gaia/gaia_auth_ std::string query = MakeMergeSessionQuery(uber_token, external_cc_result, continue_url, source_); net::NetworkTrafficAnnotationTag traffic_annotation = -@@ -778,7 +778,7 @@ void GaiaAuthFetcher::StartListAccounts() { +@@ -779,7 +779,7 @@ void GaiaAuthFetcher::StartListAccounts() { })"); CreateAndStartGaiaFetcher( " ", // To force an HTTP POST. @@ -26669,7 +26975,7 @@ diff --git a/google_apis/gaia/gaia_auth_util.cc b/google_apis/gaia/gaia_auth_uti diff --git a/google_apis/gaia/gaia_constants.cc b/google_apis/gaia/gaia_constants.cc --- a/google_apis/gaia/gaia_constants.cc +++ b/google_apis/gaia/gaia_constants.cc -@@ -25,141 +25,141 @@ const char kSyncService[] = "chromiumsync"; +@@ -25,149 +25,149 @@ const char kSyncService[] = "chromiumsync"; const char kRemotingService[] = "chromoting"; // OAuth scopes. @@ -26722,11 +27028,21 @@ diff --git a/google_apis/gaia/gaia_constants.cc b/google_apis/gaia/gaia_constant - "https://www.googleapis.com/auth/userinfo.profile"; + "https://www.9oo91eapis.qjz9zk/auth/userinfo.profile"; + // OAuth2 scope for access to the parent approval widget. + const char kParentApprovalOAuth2Scope[] = +- "https://www.googleapis.com/auth/kids.parentapproval"; ++ "https://www.9oo91eapis.qjz9zk/auth/kids.parentapproval"; + // OAuth2 scope for access to the people API (read-only). const char kPeopleApiReadOnlyOAuth2Scope[] = - "https://www.googleapis.com/auth/peopleapi.readonly"; + "https://www.9oo91eapis.qjz9zk/auth/peopleapi.readonly"; + // OAuth2 scope for access to the programmatic challenge API (read-only). + const char kProgrammaticChallengeOAuth2Scope[] = +- "https://www.googleapis.com/auth/accounts.programmaticchallenge"; ++ "https://www.9oo91eapis.qjz9zk/auth/accounts.programmaticchallenge"; + // OAuth2 scope for access to the Reauth flow. const char kAccountsReauthOAuth2Scope[] = - "https://www.googleapis.com/auth/accounts.reauth"; @@ -27130,7 +27446,7 @@ diff --git a/infra/config/PRESUBMIT.py b/infra/config/PRESUBMIT.py for more details on the presubmit API built into depot_tools. """ -@@ -134,7 +134,7 @@ def CheckOutagesConfigOnCommit(input_api, output_api): +@@ -172,7 +172,7 @@ def CheckOutagesConfigOnCommit(input_api, output_api): 'but you still wish to land it, please add the footer ' '{} with a reason.').format(_IGNORE_OUTAGE_FOOTER), ('For more information on outages configuration, ' @@ -27225,7 +27541,7 @@ diff --git a/ios/build/bots/scripts/test_result_util.py b/ios/build/bots/scripts ABORT is reported as "TIMEOUT" in standard JSON. The rest are the same. """ -@@ -317,7 +317,7 @@ class ResultCollection(object): +@@ -319,7 +319,7 @@ class ResultCollection(object): """Returns a dict object confirming to Chromium standard format. Format defined at: @@ -27377,7 +27693,7 @@ diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios All Time -@@ -1037,7 +1037,7 @@ See your search engine’s instructions for deleting your search history, if app +@@ -1042,7 +1042,7 @@ See your search engine’s instructions for deleting your search history, if app You'll find your history here @@ -27386,7 +27702,7 @@ diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios Password -@@ -1191,7 +1191,7 @@ See your search engine’s instructions for deleting your search history, if app +@@ -1190,7 +1190,7 @@ See your search engine’s instructions for deleting your search history, if app Manage Sync @@ -27395,7 +27711,7 @@ diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios Remove -@@ -1412,7 +1412,7 @@ Handoff must also be enabled in the General section of Settings, and your device +@@ -1411,7 +1411,7 @@ Handoff must also be enabled in the General section of Settings, and your device Continue @@ -27404,7 +27720,7 @@ diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios Add existing data to $1john@doe.com. -@@ -1624,7 +1624,7 @@ While in Incognito, sites can't use cookies to see your browsing activity across +@@ -1623,7 +1623,7 @@ While in Incognito, sites can't use cookies to see your browsing activity across Google Privacy Policy @@ -27413,7 +27729,7 @@ diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios Page load progress bar, $120% loaded. -@@ -1675,7 +1675,7 @@ While in Incognito, sites can't use cookies to see your browsing activity across +@@ -1674,7 +1674,7 @@ While in Incognito, sites can't use cookies to see your browsing activity across Added to Reading List @@ -27422,7 +27738,7 @@ diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios Available offline -@@ -1965,7 +1965,7 @@ Follow the steps below: +@@ -1992,7 +1992,7 @@ Follow the steps below: 3. Select Chrome @@ -27431,7 +27747,7 @@ diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios Check Passwords -@@ -2246,7 +2246,7 @@ Try to use a unique password for every site. +@@ -2273,7 +2273,7 @@ Try to use a unique password for every site. Active $12 Days Ago @@ -27440,7 +27756,7 @@ diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios Message sent. -@@ -2455,12 +2455,12 @@ To change this setting, BEGIN_LINKreset syncBEGIN_LINKreset sync @@ -27455,7 +27771,7 @@ diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios Your data was encrypted with your sync passphrase on $2Sept 1, 2012. Enter it to start sync. -@@ -2744,7 +2744,7 @@ Your data was encrypted with your sync passphrase on $2Sept +@@ -2780,7 +2780,7 @@ Your data was encrypted with your sync passphrase on $2Sept Help @@ -27584,25 +27900,10 @@ diff --git a/ios/chrome/browser/chrome_url_constants.cc b/ios/chrome/browser/chr const char kManagementLearnMoreURL[] = - "https://support.google.com/chrome/?p=is_chrome_managed"; + "https://support.9oo91e.qjz9zk/chrome/?p=is_chrome_managed"; -diff --git a/ios/chrome/browser/crash_report/breadcrumbs/breadcrumb_manager_tab_helper.mm b/ios/chrome/browser/crash_report/breadcrumbs/breadcrumb_manager_tab_helper.mm ---- a/ios/chrome/browser/crash_report/breadcrumbs/breadcrumb_manager_tab_helper.mm -+++ b/ios/chrome/browser/crash_report/breadcrumbs/breadcrumb_manager_tab_helper.mm -@@ -34,9 +34,9 @@ bool IsNptUrl(const GURL& url) { - (url.SchemeIs(url::kAboutScheme) && - (url.path() == "//newtab" || url.path() == "//newtab/")); - } --// Returns true if navigation URL host is google.com or www.google.com. -+// Returns true if navigation URL host is 9oo91e.qjz9zk or www.9oo91e.qjz9zk. - bool IsGoogleUrl(const GURL& url) { -- return url.host() == "google.com" || url.host() == "www.google.com"; -+ return url.host() == "9oo91e.qjz9zk" || url.host() == "www.9oo91e.qjz9zk"; - } - - // Returns true if event that was sequentially emitted |count| times should be diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm --- a/ios/chrome/browser/flags/about_flags.mm +++ b/ios/chrome/browser/flags/about_flags.mm -@@ -368,7 +368,7 @@ const flags_ui::FeatureEntry kFeatureEntries[] = { +@@ -367,7 +367,7 @@ const flags_ui::FeatureEntry kFeatureEntries[] = { flag_descriptions::kSyncSandboxDescription, flags_ui::kOsIos, SINGLE_VALUE_TYPE_AND_VALUE( switches::kSyncServiceURL, @@ -27611,7 +27912,7 @@ diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/ {"wallet-service-use-sandbox", flag_descriptions::kWalletServiceUseSandboxName, flag_descriptions::kWalletServiceUseSandboxDescription, flags_ui::kOsIos, -@@ -855,7 +855,7 @@ NSMutableDictionary* CreateExperimentalTestingPolicies( +@@ -856,7 +856,7 @@ NSMutableDictionary* CreateExperimentalTestingPolicies() { base::SysUTF8ToNSString(policy::key::kDefaultSearchProviderEnabled) : @YES, base::SysUTF8ToNSString(policy::key::kDefaultSearchProviderSearchURL) : @@ -27635,7 +27936,7 @@ diff --git a/ios/chrome/browser/omaha/omaha_service.mm b/ios/chrome/browser/omah diff --git a/ios/chrome/browser/search_engines/search_engine_tab_helper.mm b/ios/chrome/browser/search_engines/search_engine_tab_helper.mm --- a/ios/chrome/browser/search_engines/search_engine_tab_helper.mm +++ b/ios/chrome/browser/search_engines/search_engine_tab_helper.mm -@@ -39,7 +39,7 @@ bool IsFormSubmit(const web::NavigationItem* item) { +@@ -32,7 +32,7 @@ bool IsFormSubmit(const web::NavigationItem* item) { } // Generates a keyword from |item|. This code is based on: @@ -27644,7 +27945,7 @@ diff --git a/ios/chrome/browser/search_engines/search_engine_tab_helper.mm b/ios std::u16string GenerateKeywordFromNavigationItem( const web::NavigationItem* item) { // Don't autogenerate keywords for pages that are the result of form -@@ -155,7 +155,7 @@ void SearchEngineTabHelper::OnJsMessage(const base::Value& message, +@@ -119,7 +119,7 @@ void SearchEngineTabHelper::SetSearchableUrl(GURL searchable_url) { // Creates a new TemplateURL by OSDD. The TemplateURL will be added to // TemplateURLService by TemplateURLFecther. This code is based on: @@ -27653,7 +27954,7 @@ diff --git a/ios/chrome/browser/search_engines/search_engine_tab_helper.mm b/ios void SearchEngineTabHelper::AddTemplateURLByOSDD(const GURL& page_url, const GURL& osdd_url) { // Checks to see if we should generate a keyword based on the OSDD, and if -@@ -198,7 +198,7 @@ void SearchEngineTabHelper::AddTemplateURLByOSDD(const GURL& page_url, +@@ -162,7 +162,7 @@ void SearchEngineTabHelper::AddTemplateURLByOSDD(const GURL& page_url, // new keyword will be created when done. For |render_frame_id| arg, it's used // by network::ResourceRequest::render_frame_id, we don't use Blink so leave // it to be the default value defined here: @@ -27662,7 +27963,7 @@ diff --git a/ios/chrome/browser/search_engines/search_engine_tab_helper.mm b/ios ios::TemplateURLFetcherFactory::GetForBrowserState(browser_state) ->ScheduleDownload(keyword, osdd_url, item->GetFavicon().url, url::Origin::Create(web_state_->GetLastCommittedURL()), -@@ -209,7 +209,7 @@ void SearchEngineTabHelper::AddTemplateURLByOSDD(const GURL& page_url, +@@ -173,7 +173,7 @@ void SearchEngineTabHelper::AddTemplateURLByOSDD(const GURL& page_url, // Creates a TemplateURL by |searchable_url| and adds it to TemplateURLService. // This code is based on: @@ -27727,7 +28028,7 @@ diff --git a/ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_earl_grey.mm b/ios/chrome/browser/ui/bookmarks/bookmark_earl_grey.mm --- a/ios/chrome/browser/ui/bookmarks/bookmark_earl_grey.mm +++ b/ios/chrome/browser/ui/bookmarks/bookmark_earl_grey.mm -@@ -62,7 +62,7 @@ const GURL GetFrenchUrl() { +@@ -54,7 +54,7 @@ const GURL GetFrenchUrl() { - (void)setupBookmarksWhichExceedsScreenHeight { EG_TEST_HELPER_ASSERT_NO_ERROR([BookmarkEarlGreyAppInterface @@ -27760,7 +28061,7 @@ diff --git a/ios/chrome/browser/ui/content_suggestions/new_tab_page_app_interfac diff --git a/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.mm b/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.mm --- a/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.mm +++ b/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.mm -@@ -73,12 +73,12 @@ +@@ -74,12 +74,12 @@ namespace { // URL for 'Manage Activity' item in the Discover feed menu. const char kFeedManageActivityURL[] = @@ -28017,7 +28318,7 @@ diff --git a/ios/showcase/alert/sc_alert_coordinator.mm b/ios/showcase/alert/sc_ --- a/ios/showcase/alert/sc_alert_coordinator.mm +++ b/ios/showcase/alert/sc_alert_coordinator.mm @@ -128,7 +128,7 @@ - handler:^(AlertAction* action) { + handler:^(AlertAction* theAction) { [weakSelf.presenter dismissAnimated:YES]; }]; - [self presentAlertWithTitle:@"chromium.org says" @@ -28025,7 +28326,7 @@ diff --git a/ios/showcase/alert/sc_alert_coordinator.mm b/ios/showcase/alert/sc_ message:@"This is an alert message from a website." actions:@[ action ] textFieldConfigurations:nil]; -@@ -153,7 +153,7 @@ +@@ -154,7 +154,7 @@ handler:^(AlertAction* action) { [weakSelf.presenter dismissAnimated:YES]; }]; @@ -28034,7 +28335,7 @@ diff --git a/ios/showcase/alert/sc_alert_coordinator.mm b/ios/showcase/alert/sc_ message:@"This is a promp message from a website." actions:@[ OKAction, cancelAction ] textFieldConfigurations:@[ fieldConfiguration ]]; -@@ -173,7 +173,7 @@ +@@ -174,7 +174,7 @@ handler:^(AlertAction* action) { [weakSelf.presenter dismissAnimated:YES]; }]; @@ -28043,7 +28344,7 @@ diff --git a/ios/showcase/alert/sc_alert_coordinator.mm b/ios/showcase/alert/sc_ message:@"This is a confirm message from a website." actions:@[ OKAction, cancelAction ] textFieldConfigurations:nil]; -@@ -205,7 +205,7 @@ +@@ -208,7 +208,7 @@ [weakSelf.presenter dismissAnimated:YES]; }]; [self presentAlertWithTitle:@"Sign In" @@ -28124,7 +28425,7 @@ diff --git a/ios/testing/data/http_server_files/window_open.html b/ios/testing/d diff --git a/ios/web/navigation/navigation_manager_impl.mm b/ios/web/navigation/navigation_manager_impl.mm --- a/ios/web/navigation/navigation_manager_impl.mm +++ b/ios/web/navigation/navigation_manager_impl.mm -@@ -861,10 +861,10 @@ void NavigationManagerImpl::Reload(ReloadType reload_type, +@@ -854,10 +854,10 @@ void NavigationManagerImpl::Reload(ReloadType reload_type, // Reload with ORIGINAL_REQUEST_URL type should reload with the original // request url of the pending item, or last committed item if the pending item // doesn't exist. The reason is that a server side redirect may change the @@ -28177,7 +28478,7 @@ diff --git a/ios/web_view/internal/cwv_flags.mm b/ios/web_view/internal/cwv_flag diff --git a/ios/web_view/internal/cwv_web_view.mm b/ios/web_view/internal/cwv_web_view.mm --- a/ios/web_view/internal/cwv_web_view.mm +++ b/ios/web_view/internal/cwv_web_view.mm -@@ -770,7 +770,7 @@ BOOL gChromeContextMenuEnabled = NO; +@@ -744,7 +744,7 @@ BOOL gChromeContextMenuEnabled = NO; // e.g., triggered by JavaScript "window.open()" function. In that case, if // |self| is not created by the WKWebViewConfiguration provided by WebKit's // delegate method @@ -28240,7 +28541,7 @@ diff --git a/media/PRESUBMIT.py b/media/PRESUBMIT.py diff --git a/media/base/win/mf_initializer.cc b/media/base/win/mf_initializer.cc --- a/media/base/win/mf_initializer.cc +++ b/media/base/win/mf_initializer.cc -@@ -44,7 +44,7 @@ class MediaFoundationSession { +@@ -53,7 +53,7 @@ class MediaFoundationSession { LOG_IF(ERROR, !has_media_foundation_) << "Failed to start Media Foundation, accelerated media functionality " "may be disabled. If you're using Windows N, see " @@ -28249,6 +28550,81 @@ diff --git a/media/base/win/mf_initializer.cc b/media/base/win/mf_initializer.cc "media-feature-pack-for-windows-10-n-may-2020-ebbdf559-b84c-0fc2-" "bd51-e23c9f6a4439 for information on how to install the Media " "Feature Pack. Error: " +diff --git a/media/mojo/mojom/stable/stable_video_decoder_types_mojom_traits.cc b/media/mojo/mojom/stable/stable_video_decoder_types_mojom_traits.cc +--- a/media/mojo/mojom/stable/stable_video_decoder_types_mojom_traits.cc ++++ b/media/mojo/mojom/stable/stable_video_decoder_types_mojom_traits.cc +@@ -24,7 +24,7 @@ StructTraits::value, + "Unexpected type for gfx::ColorSpace::primaries_. If you need to " +- "change this assertion, please contact chromeos-gfx-video@google.com."); ++ "change this assertion, please contact chromeos-gfx-video@9oo91e.qjz9zk."); + return input.primaries_; + } + +@@ -36,7 +36,7 @@ StructTraits::value, + "Unexpected type for gfx::ColorSpace::transfer_. If you need to " +- "change this assertion, please contact chromeos-gfx-video@google.com."); ++ "change this assertion, please contact chromeos-gfx-video@9oo91e.qjz9zk."); + return input.transfer_; + } + +@@ -48,7 +48,7 @@ StructTraits::matrix( + std::is_same::value, + "Unexpected type for gfx::ColorSpace::matrix_. If you need to " +- "change this assertion, please contact chromeos-gfx-video@google.com."); ++ "change this assertion, please contact chromeos-gfx-video@9oo91e.qjz9zk."); + return input.matrix_; + } + +@@ -60,7 +60,7 @@ StructTraits::range( + std::is_same::value, + "Unexpected type for gfx::ColorSpace::range_. If you need to " +- "change this assertion, please contact chromeos-gfx-video@google.com."); ++ "change this assertion, please contact chromeos-gfx-video@9oo91e.qjz9zk."); + return input.range_; + } + +@@ -73,7 +73,7 @@ base::span StructTraits< + float[9]>::value, + "Unexpected type for gfx::ColorSpace::custom_primary_matrix_. If you " + "need to change this assertion, please contact " +- "chromeos-gfx-video@google.com."); ++ "chromeos-gfx-video@9oo91e.qjz9zk."); + return input.custom_primary_matrix_; + } + +@@ -85,7 +85,7 @@ StructTraits::value, + "Unexpected type for gfx::ColorSpace::transfer_params_. If you need to " +- "change this assertion, please contact chromeos-gfx-video@google.com."); ++ "change this assertion, please contact chromeos-gfx-video@9oo91e.qjz9zk."); + return input.transfer_params_; + } + +@@ -123,7 +123,7 @@ uint32_t StructTraits< + decltype(::media::SubsampleEntry::clear_bytes), + decltype(media::stable::mojom::SubsampleEntry::clear_bytes)>::value, + "Unexpected type for media::SubsampleEntry::clear_bytes. If you need to " +- "change this assertion, please contact chromeos-gfx-video@google.com."); ++ "change this assertion, please contact chromeos-gfx-video@9oo91e.qjz9zk."); + + return input.clear_bytes; + } +@@ -137,7 +137,7 @@ uint32_t StructTraits< + decltype(::media::SubsampleEntry::cypher_bytes), + decltype(media::stable::mojom::SubsampleEntry::cypher_bytes)>::value, + "Unexpected type for media::SubsampleEntry::cypher_bytes. If you need to " +- "change this assertion, please contact chromeos-gfx-video@google.com."); ++ "change this assertion, please contact chromeos-gfx-video@9oo91e.qjz9zk."); + + return input.cypher_bytes; + } diff --git a/mojo/PRESUBMIT.py b/mojo/PRESUBMIT.py --- a/mojo/PRESUBMIT.py +++ b/mojo/PRESUBMIT.py @@ -28688,8 +29064,8 @@ diff --git a/native_client_sdk/src/doc/migration/public.html b/native_client_sdk GAP fetch() upload streaming -- https://www.chromestatus.com/features/5274139738767360 -+ https://www.ch40mestatus.qjz9zk/features/5274139738767360 +- https://www.chromestatus.com/feature/5274139738767360 ++ https://www.ch40mestatus.qjz9zk/feature/5274139738767360 @@ -29261,7 +29637,7 @@ diff --git a/net/quic/crypto/proof_verifier_chromium.cc b/net/quic/crypto/proof_ diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc --- a/net/quic/quic_stream_factory.cc +++ b/net/quic/quic_stream_factory.cc -@@ -2179,10 +2179,10 @@ QuicStreamFactory::CreateCryptoConfigHandle( +@@ -2178,10 +2178,10 @@ QuicStreamFactory::CreateCryptoConfigHandle( quic::QuicCryptoClientConfig* crypto_config = crypto_config_owner->config(); crypto_config->set_user_agent_id(params_.user_agent_id); @@ -29279,7 +29655,7 @@ diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc --- a/net/spdy/spdy_session.cc +++ b/net/spdy/spdy_session.cc -@@ -3021,7 +3021,7 @@ void SpdySession::RecordProtocolErrorHistogram( +@@ -3011,7 +3011,7 @@ void SpdySession::RecordProtocolErrorHistogram( SpdyProtocolErrorDetails details) { UMA_HISTOGRAM_ENUMERATION("Net.SpdySessionErrorDetails2", details, NUM_SPDY_PROTOCOL_ERROR_DETAILS); @@ -29675,7 +30051,7 @@ diff --git a/remoting/host/linux/remoting_user_session.cc b/remoting/host/linux/ diff --git a/remoting/host/remoting_me2me_host.cc b/remoting/host/remoting_me2me_host.cc --- a/remoting/host/remoting_me2me_host.cc +++ b/remoting/host/remoting_me2me_host.cc -@@ -199,7 +199,7 @@ const char kHostOfflineReasonZombieStateDetected[] = "ZOMBIE_STATE_DETECTED"; +@@ -204,7 +204,7 @@ const char kHostOfflineReasonZombieStateDetected[] = "ZOMBIE_STATE_DETECTED"; // The default email domain for Googlers. Used to determine whether the host's // email address is Google-internal or not. @@ -29945,7 +30321,7 @@ diff --git a/sandbox/linux/suid/sandbox.c b/sandbox/linux/suid/sandbox.c diff --git a/sandbox/policy/win/sandbox_win.cc b/sandbox/policy/win/sandbox_win.cc --- a/sandbox/policy/win/sandbox_win.cc +++ b/sandbox/policy/win/sandbox_win.cc -@@ -491,7 +491,7 @@ NtQueryObject g_QueryObject = NULL; +@@ -494,7 +494,7 @@ NtQueryObject g_QueryObject = NULL; static const char* kDuplicateHandleWarning = "You are attempting to duplicate a privileged handle into a sandboxed" @@ -30126,7 +30502,7 @@ diff --git a/testing/scripts/run_finch_smoke_tests_android.py b/testing/scripts/ diff --git a/testing/scripts/run_variations_smoke_tests.py b/testing/scripts/run_variations_smoke_tests.py --- a/testing/scripts/run_variations_smoke_tests.py +++ b/testing/scripts/run_variations_smoke_tests.py -@@ -48,7 +48,7 @@ _TEST_CASES = [ +@@ -44,7 +44,7 @@ _TEST_CASES = [ { # TODO(crbug.com/1234165): Make tests hermetic by using a test http # server or WPR. @@ -30138,7 +30514,7 @@ diff --git a/testing/scripts/run_variations_smoke_tests.py b/testing/scripts/run diff --git a/testing/test_env.py b/testing/test_env.py --- a/testing/test_env.py +++ b/testing/test_env.py -@@ -178,7 +178,7 @@ def run_command_with_output(argv, stdoutfile, env=None, cwd=None): +@@ -190,7 +190,7 @@ def run_command_with_output(argv, stdoutfile, env=None, cwd=None): """Run command and stream its stdout/stderr to the console & |stdoutfile|. Also forward_signals to obey @@ -30147,7 +30523,7 @@ diff --git a/testing/test_env.py b/testing/test_env.py Returns: integer returncode of the subprocess. -@@ -205,7 +205,7 @@ def run_command(argv, env=None, cwd=None, log=True): +@@ -217,7 +217,7 @@ def run_command(argv, env=None, cwd=None, log=True): """Run command and stream its stdout/stderr both to stdout. Also forward_signals to obey @@ -30156,7 +30532,7 @@ diff --git a/testing/test_env.py b/testing/test_env.py Returns: integer returncode of the subprocess. -@@ -221,7 +221,7 @@ def run_command_output_to_handle(argv, file_handle, env=None, cwd=None): +@@ -235,7 +235,7 @@ def run_command_output_to_handle(argv, file_handle, env=None, cwd=None): """Run command and stream its stdout/stderr both to |file_handle|. Also forward_signals to obey @@ -30165,7 +30541,7 @@ diff --git a/testing/test_env.py b/testing/test_env.py Returns: integer returncode of the subprocess. -@@ -261,7 +261,7 @@ def forward_signals(procs): +@@ -275,7 +275,7 @@ def forward_signals(procs): """Forwards unix's SIGTERM or win's CTRL_BREAK_EVENT to the given processes. This plays nicely with swarming's timeout handling. See also @@ -30220,7 +30596,7 @@ diff --git a/testing/trigger_scripts/base_test_triggerer.py b/testing/trigger_sc diff --git a/testing/unexpected_passes_common/data_types.py b/testing/unexpected_passes_common/data_types.py --- a/testing/unexpected_passes_common/data_types.py +++ b/testing/unexpected_passes_common/data_types.py -@@ -151,7 +151,7 @@ class BuildStats(object): +@@ -226,7 +226,7 @@ class BaseBuildStats(object): def BuildLinkFromBuildId(build_id): @@ -30244,7 +30620,7 @@ diff --git a/testing/variations/PRESUBMIT.py b/testing/variations/PRESUBMIT.py diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json -@@ -922,7 +922,7 @@ +@@ -1002,7 +1002,7 @@ { "name": "Enabled_20210611", "params": { @@ -30253,7 +30629,7 @@ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variati }, "enable_features": [ "AutofillAssistantInCctTriggering", -@@ -3056,7 +3056,7 @@ +@@ -3256,7 +3256,7 @@ "params": { "DnsHttpssvcControlDomainWildcard": "true", "DnsHttpssvcEnableQueryOverInsecure": "true", @@ -30262,7 +30638,7 @@ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variati "DnsHttpssvcExtraTimeMs": "50", "DnsHttpssvcExtraTimePercent": "20", "DnsHttpssvcUseHttpssvc": "true", -@@ -4370,7 +4370,7 @@ +@@ -4605,7 +4605,7 @@ { "name": "Enabled", "params": { @@ -30271,7 +30647,7 @@ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variati }, "enable_features": [ "IncompatibleApplicationsWarning" -@@ -6080,12 +6080,12 @@ +@@ -6269,12 +6269,12 @@ { "name": "Enabled_Prefetch_Prefetch1_NSP6_Small_20210301", "params": { @@ -30286,7 +30662,7 @@ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variati }, "enable_features": [ "IsolatePrerenders", -@@ -6229,7 +6229,7 @@ +@@ -6418,7 +6418,7 @@ { "name": "EnabledExploreAndTrendingSegmentation2", "params": { @@ -30295,7 +30671,7 @@ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variati "experiment_tag": "{maxLevels : 1, enableTrending : true, maxTrendingQueries : 8}", "image_prefetch_mode": "top", "is_unmetered_network_required": "false", -@@ -6254,7 +6254,7 @@ +@@ -6443,7 +6443,7 @@ { "name": "EnabledExploreSegmentation2", "params": { @@ -30304,16 +30680,16 @@ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variati "experiment_tag": "{maxLevels : 1}", "image_prefetch_mode": "top", "is_unmetered_network_required": "false", -@@ -6279,7 +6279,7 @@ +@@ -6468,7 +6468,7 @@ { "name": "EnabledExploreAndServerRankingSegmentation2", "params": { - "base_url": "https://chromeupboarding-pa.googleapis.com", + "base_url": "https://chromeupboarding-pa.9oo91eapis.qjz9zk", "experiment_tag": "{maxLevels : 1, rankTiles : true}", - "expire_duration": "86400", "image_prefetch_mode": "top", -@@ -7651,7 +7651,7 @@ + "is_unmetered_network_required": "false", +@@ -7935,7 +7935,7 @@ { "name": "launch_20180628_model_20170329_with_blacklist_override_default", "params": { @@ -30322,7 +30698,7 @@ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variati }, "enable_features": [ "TranslateRankerAutoBlacklistOverride", -@@ -7670,7 +7670,7 @@ +@@ -7954,7 +7954,7 @@ { "name": "20180123_launch", "params": { @@ -30331,7 +30707,7 @@ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variati }, "enable_features": [ "TranslateRankerAutoBlacklistOverride", -@@ -7691,7 +7691,7 @@ +@@ -7975,7 +7975,7 @@ { "name": "Enforcement20170918", "params": { @@ -30340,7 +30716,7 @@ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variati }, "enable_features": [ "TranslateRankerEnforcement", -@@ -8353,7 +8353,7 @@ +@@ -8687,7 +8687,7 @@ { "name": "Enabled", "params": { @@ -31455,10 +31831,10 @@ diff --git a/third_party/android_deps/libs/com_google_android_material_material/ import json import os --_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/material/material/1.5.0-alpha02/material-1.5.0-alpha02.aar' -+_FILE_URL = 'https://dl.9oo91e.qjz9zk/dl/android/maven2/com/google/android/material/material/1.5.0-alpha02/material-1.5.0-alpha02.aar' - _FILE_NAME = 'material-1.5.0-alpha02.aar' - _FILE_VERSION = '1.5.0-alpha02' +-_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/material/material/1.5.0-alpha05/material-1.5.0-alpha05.aar' ++_FILE_URL = 'https://dl.9oo91e.qjz9zk/dl/android/maven2/com/google/android/material/material/1.5.0-alpha05/material-1.5.0-alpha05.aar' + _FILE_NAME = 'material-1.5.0-alpha05.aar' + _FILE_VERSION = '1.5.0-alpha05' diff --git a/third_party/android_deps/libs/com_google_android_play_core/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_play_core/3pp/fetch.py --- a/third_party/android_deps/libs/com_google_android_play_core/3pp/fetch.py @@ -31736,7 +32112,7 @@ diff --git a/third_party/blink/public/strings/blink_strings.grd b/third_party/bl for more details. Note that all output references are relative to the output directory which is specified at build time. --> -@@ -1147,14 +1147,14 @@ below: +@@ -1381,14 +1381,14 @@ below: # The contents of this file are subject to the Mozilla Public License Version # 1.1 (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at @@ -31753,7 +32129,7 @@ diff --git a/third_party/blink/public/strings/blink_strings.grd b/third_party/bl # # The Initial Developer of the Original Code is # Netscape Communications Corporation. -@@ -1163,7 +1163,7 @@ below: +@@ -1397,7 +1397,7 @@ below: # # Contributor(s): # Mitch (original author) @@ -31843,6 +32219,18 @@ diff --git a/third_party/blink/renderer/core/css/remote_font_face_source.cc b/th "details. Fallback font will be used while loading: " + font->Url().ElidedString())); +diff --git a/third_party/blink/renderer/core/css/svg.css b/third_party/blink/renderer/core/css/svg.css +--- a/third_party/blink/renderer/core/css/svg.css ++++ b/third_party/blink/renderer/core/css/svg.css +@@ -92,7 +92,7 @@ tspan, textPath { + @media ua-forced-colors { + svg { + /* +- TODO(sartang@microsoft.com): Remove forced-color-adjust: none once ++ TODO(sartang@m1cr050ft.qjz9zk): Remove forced-color-adjust: none once + forced-color-adjust: preserve-parent-color is enabled by default. + */ + forced-color-adjust: none; diff --git a/third_party/blink/renderer/core/dom/events/event_target.cc b/third_party/blink/renderer/core/dom/events/event_target.cc --- a/third_party/blink/renderer/core/dom/events/event_target.cc +++ b/third_party/blink/renderer/core/dom/events/event_target.cc @@ -31871,8 +32259,8 @@ diff --git a/third_party/blink/renderer/core/events/touch_event.cc b/third_party message = "Unable to preventDefault inside passive event listener due to " "target being treated as passive. See " -- "https://www.chromestatus.com/features/5093566007214080"; -+ "https://www.ch40mestatus.qjz9zk/features/5093566007214080"; +- "https://www.chromestatus.com/feature/5093566007214080"; ++ "https://www.ch40mestatus.qjz9zk/feature/5093566007214080"; } break; default: @@ -31883,235 +32271,99 @@ diff --git a/third_party/blink/renderer/core/events/wheel_event.cc b/third_party String message = "Unable to preventDefault inside passive event listener due to " "target being treated as passive. See " -- "https://www.chromestatus.com/features/6662647093133312"; -+ "https://www.ch40mestatus.qjz9zk/features/6662647093133312"; +- "https://www.chromestatus.com/feature/6662647093133312"; ++ "https://www.ch40mestatus.qjz9zk/feature/6662647093133312"; auto* local_dom_window = DynamicTo(view()); if (local_dom_window && local_dom_window->GetFrame()) { Intervention::GenerateReport(local_dom_window->GetFrame(), id, message); diff --git a/third_party/blink/renderer/core/frame/deprecation.cc b/third_party/blink/renderer/core/frame/deprecation.cc --- a/third_party/blink/renderer/core/frame/deprecation.cc +++ b/third_party/blink/renderer/core/frame/deprecation.cc -@@ -32,16 +32,16 @@ namespace { - const char kChromeLoadTimesNavigationTiming[] = - "chrome.loadTimes() is deprecated, instead use standardized API: " - "Navigation Timing 2. " -- "https://www.chromestatus.com/features/5637885046816768."; -+ "https://www.ch40mestatus.qjz9zk/features/5637885046816768."; - const char kChromeLoadTimesNextHopProtocol[] = - "chrome.loadTimes() is deprecated, instead use standardized API: " - "nextHopProtocol in Navigation Timing 2. " -- "https://www.chromestatus.com/features/5637885046816768."; -+ "https://www.ch40mestatus.qjz9zk/features/5637885046816768."; +@@ -180,7 +180,7 @@ class DeprecationInfo final { + return DeprecationInfo( + id, milestone, String(), String(), details, chrome_status_id, + String::Format( +- "%s See https://www.chromestatus.com/feature/%s for more details.", ++ "%s See https://www.ch40mestatus.qjz9zk/feature/%s for more details.", + details.Ascii().c_str(), chrome_status_id.Ascii().c_str())); + } - const char kChromeLoadTimesPaintTiming[] = - "chrome.loadTimes() is deprecated, instead use standardized API: " - "Paint Timing. " -- "https://www.chromestatus.com/features/5637885046816768."; -+ "https://www.ch40mestatus.qjz9zk/features/5637885046816768."; - - enum Milestone { - kUnknown, -@@ -187,7 +187,7 @@ String WillBeRemoved(const char* feature, - const char* details) { - return String::Format( - "%s is deprecated and will be removed in %s. See " -- "https://www.chromestatus.com/features/%s for more details.", -+ "https://www.ch40mestatus.qjz9zk/features/%s for more details.", - feature, MilestoneString(milestone).Ascii().c_str(), details); - } - -@@ -197,7 +197,7 @@ String ReplacedWillBeRemoved(const char* feature, - const char* details) { - return String::Format( - "%s is deprecated and will be removed in %s. Please use %s instead. See " -- "https://www.chromestatus.com/features/%s for more details.", -+ "https://www.ch40mestatus.qjz9zk/features/%s for more details.", - feature, MilestoneString(milestone).Ascii().c_str(), replacement, - details); - } -@@ -277,14 +277,14 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { - "Subresource requests using legacy protocols (like `ftp:`) " - "are blocked. Please deliver web-accessible resources over " - "modern protocols like HTTPS. See " -- "https://www.chromestatus.com/feature/5709390967472128 for " -+ "https://www.ch40mestatus.qjz9zk/feature/5709390967472128 for " - "details."}; - - case WebFeature::kRequestedSubresourceWithEmbeddedCredentials: - return {"RequestedSubresourceWithEmbeddedCredentials", kUnknown, - "Subresource requests whose URLs contain embedded credentials " - "(e.g. `https://user:pass@host/`) are blocked. See " -- "https://www.chromestatus.com/feature/5669008342777856 for more " -+ "https://www.ch40mestatus.qjz9zk/feature/5669008342777856 for more " - "details."}; - - // Powerful features on insecure origins (https://goo.gl/rStTGz) -@@ -294,7 +294,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { - "getCurrentPosition() and watchPosition() no longer work on " - "insecure origins. To use this feature, you should consider " - "switching your application to a secure origin, such as HTTPS. " -- "See https://goo.gl/rStTGz for more details."}; -+ "See https://goo.gl.qjz9zk/rStTGz for more details."}; +@@ -207,7 +207,7 @@ class DeprecationInfo final { + id, milestone, feature, String(), String(), chrome_status_id, + String::Format( + "%s is deprecated and will be removed in %s. See " +- "https://www.chromestatus.com/feature/%s for more details.", ++ "https://www.ch40mestatus.qjz9zk/feature/%s for more details.", + feature.Ascii().c_str(), MilestoneString(milestone).Ascii().c_str(), + chrome_status_id.Ascii().c_str())); + } +@@ -224,7 +224,7 @@ class DeprecationInfo final { + id, milestone, feature, replacement, String(), chrome_status_id, + String::Format( + "%s is deprecated and will be removed in %s. Please use %s " +- "instead. See https://www.chromestatus.com/feature/%s for more " ++ "instead. See https://www.ch40mestatus.qjz9zk/feature/%s for more " + "details.", + feature.Ascii().c_str(), MilestoneString(milestone).Ascii().c_str(), + replacement.Ascii().c_str(), chrome_status_id.Ascii().c_str())); +@@ -361,7 +361,7 @@ const DeprecationInfo GetDeprecationInfo(const WebFeature feature) { + "getCurrentPosition() and watchPosition() no longer work on insecure " + "origins. To use this feature, you should consider switching your " + "application to a secure origin, such as HTTPS. See " +- "https://goo.gl/rStTGz for more details."); ++ "https://goo.gl.qjz9zk/rStTGz for more details."); case WebFeature::kGeolocationInsecureOriginDeprecatedNotRemoved: case WebFeature::kGeolocationInsecureOriginIframeDeprecatedNotRemoved: -@@ -302,7 +302,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { - "getCurrentPosition() and watchPosition() are deprecated on " - "insecure origins. To use this feature, you should consider " - "switching your application to a secure origin, such as HTTPS. " -- "See https://goo.gl/rStTGz for more details."}; -+ "See https://goo.gl.qjz9zk/rStTGz for more details."}; +@@ -370,7 +370,7 @@ const DeprecationInfo GetDeprecationInfo(const WebFeature feature) { + "getCurrentPosition() and watchPosition() are deprecated on insecure " + "origins. To use this feature, you should consider switching your " + "application to a secure origin, such as HTTPS. See " +- "https://goo.gl/rStTGz for more details."); ++ "https://goo.gl.qjz9zk/rStTGz for more details."); case WebFeature::kGetUserMediaInsecureOrigin: case WebFeature::kGetUserMediaInsecureOriginIframe: -@@ -310,7 +310,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { +@@ -378,7 +378,7 @@ const DeprecationInfo GetDeprecationInfo(const WebFeature feature) { "GetUserMediaInsecureOrigin", kUnknown, "getUserMedia() no longer works on insecure origins. To use this " - "feature, you should consider switching your application to a " -- "secure origin, such as HTTPS. See https://goo.gl/rStTGz for more " -+ "secure origin, such as HTTPS. See https://goo.gl.qjz9zk/rStTGz for more " - "details."}; + "feature, you should consider switching your application to a secure " +- "origin, such as HTTPS. See https://goo.gl/rStTGz for more details."); ++ "origin, such as HTTPS. See https://goo.gl.qjz9zk/rStTGz for more details."); case WebFeature::kMediaSourceAbortRemove: -@@ -321,7 +321,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { - "will be removed in the future. You should instead await " - "'updateend'. abort() is intended to only abort an asynchronous " - "media append or reset parser state. See " -- "https://www.chromestatus.com/features/6107495151960064 for more " -+ "https://www.ch40mestatus.qjz9zk/features/6107495151960064 for more " - "details."}; - - case WebFeature::kMediaSourceDurationTruncatingBuffered: -@@ -333,7 +333,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { - "buffered media will be removed in the future. You should instead " - "perform explicit remove(newDuration, oldDuration) on all " - "sourceBuffers, where newDuration < oldDuration. See " -- "https://www.chromestatus.com/features/6107495151960064 for more " -+ "https://www.ch40mestatus.qjz9zk/features/6107495151960064 for more " - "details."}; - - case WebFeature::kApplicationCacheAPIInsecureOrigin: -@@ -362,7 +362,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { - "origins. " - "You should consider switching your application to a secure " - "origin, " -- "such as HTTPS. See https://goo.gl/rStTGz for more details."}; -+ "such as HTTPS. See https://goo.gl.qjz9zk/rStTGz for more details."}; + return DeprecationInfo::WithDetailsAndChromeStatusID( +@@ -427,7 +427,7 @@ const DeprecationInfo GetDeprecationInfo(const WebFeature feature) { + "NotificationInsecureOrigin", kUnknown, + "The Notification API may no longer be used from insecure origins. " + "You should consider switching your application to a secure origin, " +- "such as HTTPS. See https://goo.gl/rStTGz for more details."); ++ "such as HTTPS. See https://goo.gl.qjz9zk/rStTGz for more details."); case WebFeature::kNotificationPermissionRequestedIframe: - return {"NotificationPermissionRequestedIframe", kUnknown, -@@ -371,7 +371,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { - "a cross-origin iframe. You should consider requesting " - "permission " - "from a top-level frame or opening a new window instead. See " -- "https://www.chromestatus.com/feature/6451284559265792 for more " -+ "https://www.ch40mestatus.qjz9zk/feature/6451284559265792 for more " - "details."}; + return DeprecationInfo::WithDetailsAndChromeStatusID( +@@ -583,7 +583,7 @@ const DeprecationInfo GetDeprecationInfo(const WebFeature feature) { + "SharedArrayBufferConstructedWithoutIsolation", kM92, + String::Format("SharedArrayBuffer will require cross-origin " + "isolation as of %s. See " +- "https://developer.chrome.com/blog/" ++ "https://developer.ch40me.qjz9zk/blog/" + "enabling-shared-array-buffer/ for more details.", + MilestoneString(kM92).Ascii().c_str())); - case WebFeature::kCSSSelectorInternalMediaControlsOverlayCastButton: -@@ -379,7 +379,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { - "The disableRemotePlayback attribute should be used in order to " - "disable the default Cast integration instead of using " - "-internal-media-controls-overlay-cast-button selector. See " -- "https://www.chromestatus.com/feature/5714245488476160 for more " -+ "https://www.ch40mestatus.qjz9zk/feature/5714245488476160 for more " - "details."}; - - case WebFeature::kSelectionAddRangeIntersect: -@@ -387,7 +387,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { - "SelectionAddRangeIntersect", kUnknown, - "The behavior that Selection.addRange() merges existing Range and " - "the specified Range was removed. See " -- "https://www.chromestatus.com/features/6680566019653632 for more " -+ "https://www.ch40mestatus.qjz9zk/features/6680566019653632 for more " - "details."}; - - case WebFeature::kRtcpMuxPolicyNegotiate: -@@ -396,7 +396,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { - "removal and may be removed no earlier than %s. " - "If you depend on it, " - "please see " -- "https://www.chromestatus.com/features/" -+ "https://www.ch40mestatus.qjz9zk/features/" - "5654810086866944 " - "for more details.", - MilestoneString(kM62).Ascii().c_str())}; -@@ -409,7 +409,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { - "are blocked. Please remove newlines and encode less-than " - "characters from places like element attribute values in order to " - "load these resources. See " -- "https://www.chromestatus.com/feature/5735596811091968 for more " -+ "https://www.ch40mestatus.qjz9zk/feature/5735596811091968 for more " - "details."}; - - case WebFeature::kLocalCSSFileExtensionRejected: -@@ -463,7 +463,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { - "TextToSpeech_DisallowedByAutoplay", kM71, - String::Format("speechSynthesis.speak() without user activation is " - "no longer allowed since %s. See " -- "https://www.chromestatus.com/feature/" -+ "https://www.ch40mestatus.qjz9zk/feature/" - "5687444770914304 for more details", - MilestoneString(kM71).Ascii().c_str())}; - -@@ -485,7 +485,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { - String::Format( - "Web MIDI will ask a permission to use even if the sysex is " - "not specified in the MIDIOptions since around %s. See " -- "https://www.chromestatus.com/feature/5138066234671104 for " -+ "https://www.ch40mestatus.qjz9zk/feature/5138066234671104 for " - "more details.", - MilestoneString(kM82).Ascii().c_str())}; - -@@ -518,7 +518,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { - "Support for calls to CSSStyleSheet.replace() with stylesheet " - "text that includes @import has been deprecated, and will be " - "removed in %s. See " -- "https://chromestatus.com/feature/4735925877735424 for more " -+ "https://ch40mestatus.qjz9zk/feature/4735925877735424 for more " - "details.", - MilestoneString(kM84).Ascii().c_str())}; - -@@ -528,7 +528,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { - String::Format( - "SharedArrayBuffer will require cross-origin isolation as of " - "%s. See " -- "https://developer.chrome.com/blog/enabling-shared-array-buffer/" -+ "https://developer.ch40me.qjz9zk/blog/enabling-shared-array-buffer/" - " for more details.", - MilestoneString(kM92).Ascii().c_str())}; - -@@ -548,7 +548,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { - "compatibility issues on modern browsers. The standardized SDP " - "format, \"unified-plan\", has been used by default since M72 " - "(January, 2019). Dropping support for Plan B is targeted for " -- "M93. See https://www.chromestatus.com/feature/5823036655665152 " -+ "M93. See https://www.ch40mestatus.qjz9zk/feature/5823036655665152 " - "for more details, including the possibility of registering for " - "a Deprecation Trial in order to extend the Plan B deprecation " - "deadline for a limited amount of time."}; -@@ -579,7 +579,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { - "leakage. To mitigate these risks, Chrome deprecates requests to " - "non-public subresources when initiated from non-secure " - "contexts, and will start blocking them in Chrome 92 (July " -- "2021). See https://chromestatus.com/feature/5436853517811712 " -+ "2021). See https://ch40mestatus.qjz9zk/feature/5436853517811712 " - "for more details."}; - case WebFeature::kXHRJSONEncodingDetection: - return {"XHRJSONEncodingDetection", kM93, -@@ -615,7 +615,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { - return {"V8SharedArrayBufferConstructedInExtensionWithoutIsolation", kM96, - "Extensions should opt into cross-origin isolation to continue " - "using SharedArrayBuffer. See " -- "https://developer.chrome.com/docs/extensions/mv3/" -+ "https://developer.ch40me.qjz9zk/docs/extensions/mv3/" - "cross-origin-isolation/."}; +@@ -674,7 +674,7 @@ const DeprecationInfo GetDeprecationInfo(const WebFeature feature) { + "V8SharedArrayBufferConstructedInExtensionWithoutIsolation", kM96, + "Extensions should opt into cross-origin isolation to continue using " + "SharedArrayBuffer. See " +- "https://developer.chrome.com/docs/extensions/mv3/" ++ "https://developer.ch40me.qjz9zk/docs/extensions/mv3/" + "cross-origin-isolation/."); case WebFeature::kCrossOriginWindowAlert: diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc --- a/third_party/blink/renderer/core/frame/local_frame.cc +++ b/third_party/blink/renderer/core/frame/local_frame.cc -@@ -1701,7 +1701,7 @@ static bool CanNavigateHelper(LocalFrame& initiating_frame, +@@ -1722,7 +1722,7 @@ static bool CanNavigateHelper(LocalFrame& initiating_frame, "The frame attempting navigation of the top-level window is " "sandboxed with the 'allow-top-navigation-by-user-activation' " "flag, but has no user activation (aka gesture). See " @@ -32120,12 +32372,12 @@ diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/ } return false; } -@@ -1802,7 +1802,7 @@ static bool CanNavigateHelper(LocalFrame& initiating_frame, +@@ -1823,7 +1823,7 @@ static bool CanNavigateHelper(LocalFrame& initiating_frame, "The frame attempting navigation is targeting its top-level window, " "but is neither same-origin with its target nor has it received a " "user gesture. See " -- "https://www.chromestatus.com/features/5851021045661696."); -+ "https://www.ch40mestatus.qjz9zk/features/5851021045661696."); +- "https://www.chromestatus.com/feature/5851021045661696."); ++ "https://www.ch40mestatus.qjz9zk/feature/5851021045661696."); initiating_frame.GetLocalFrameHostRemote().DidBlockNavigation( destination_url, initiating_frame.GetDocument()->Url(), mojom::NavigationBlockedReason::kRedirectWithNoUserGesture); @@ -32160,7 +32412,7 @@ diff --git a/third_party/blink/renderer/core/html/media/autoplay_policy.cc b/thi diff --git a/third_party/blink/renderer/core/html/media/html_media_element.cc b/third_party/blink/renderer/core/html/media/html_media_element.cc --- a/third_party/blink/renderer/core/html/media/html_media_element.cc +++ b/third_party/blink/renderer/core/html/media/html_media_element.cc -@@ -1031,7 +1031,7 @@ void HTMLMediaElement::InvokeLoadAlgorithm() { +@@ -1064,7 +1064,7 @@ void HTMLMediaElement::InvokeLoadAlgorithm() { RecordPlayPromiseRejected(PlayPromiseRejectReason::kInterruptedByLoad); RejectPlayPromises(DOMExceptionCode::kAbortError, "The play() request was interrupted by a new load " @@ -32169,7 +32421,7 @@ diff --git a/third_party/blink/renderer/core/html/media/html_media_element.cc b/ } // 4.7 - If seeking is true, set it to false. -@@ -4381,7 +4381,7 @@ void HTMLMediaElement::RejectScheduledPlayPromises() { +@@ -4447,7 +4447,7 @@ void HTMLMediaElement::RejectScheduledPlayPromises() { RecordPlayPromiseRejected(PlayPromiseRejectReason::kInterruptedByPause); RejectPlayPromisesInternal(DOMExceptionCode::kAbortError, "The play() request was interrupted by a call " @@ -32202,7 +32454,7 @@ diff --git a/third_party/blink/renderer/core/html/portal/html_portal_element.cc diff --git a/third_party/blink/renderer/core/loader/frame_loader.cc b/third_party/blink/renderer/core/loader/frame_loader.cc --- a/third_party/blink/renderer/core/loader/frame_loader.cc +++ b/third_party/blink/renderer/core/loader/frame_loader.cc -@@ -1651,7 +1651,7 @@ void FrameLoader::ReportLegacyTLSVersion(const KURL& url, +@@ -1693,7 +1693,7 @@ void FrameLoader::ReportLegacyTLSVersion(const KURL& url, "1.1, which are deprecated and will be disabled in the future. Once " "disabled, users will be prevented from loading these resources. " "Servers should enable TLS 1.2 or later. See " @@ -32211,7 +32463,7 @@ diff --git a/third_party/blink/renderer/core/loader/frame_loader.cc b/third_part "information."; } else { console_message = -@@ -1660,7 +1660,7 @@ void FrameLoader::ReportLegacyTLSVersion(const KURL& url, +@@ -1702,7 +1702,7 @@ void FrameLoader::ReportLegacyTLSVersion(const KURL& url, "1.1, which are deprecated and will be disabled in the future. Once " "disabled, users will be prevented from loading these resources. The " "server should enable TLS 1.2 or later. See " @@ -32349,7 +32601,7 @@ diff --git a/third_party/blink/renderer/modules/clipboard/clipboard_promise.cc b diff --git a/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc b/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc --- a/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc +++ b/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc -@@ -959,7 +959,7 @@ ScriptPromise CredentialsContainer::get( +@@ -960,7 +960,7 @@ ScriptPromise CredentialsContainer::get( "'preferred', which is probably not what you want. If in doubt, " "set " "to 'discouraged'. See " @@ -32358,7 +32610,7 @@ diff --git a/third_party/blink/renderer/modules/credentialmanager/credentials_co "browser/webauth/uv_preferred.md for details.")); } -@@ -1276,13 +1276,13 @@ ScriptPromise CredentialsContainer::create( +@@ -1277,13 +1277,13 @@ ScriptPromise CredentialsContainer::create( options->publicKey()->rp()->id() ? options->publicKey()->rp()->id() : resolver->GetExecutionContext()->GetSecurityOrigin()->Domain(); @@ -32374,7 +32626,7 @@ diff --git a/third_party/blink/renderer/modules/credentialmanager/credentials_co } } if (options->publicKey()->extensions()->hasPayment() && -@@ -1313,7 +1313,7 @@ ScriptPromise CredentialsContainer::create( +@@ -1314,7 +1314,7 @@ ScriptPromise CredentialsContainer::create( "call. This defaults to 'preferred', which is probably not what " "you " "want. If in doubt, set to 'discouraged'. See " @@ -32386,7 +32638,7 @@ diff --git a/third_party/blink/renderer/modules/credentialmanager/credentials_co diff --git a/third_party/blink/renderer/modules/encryptedmedia/encrypted_media_utils.h b/third_party/blink/renderer/modules/encryptedmedia/encrypted_media_utils.h --- a/third_party/blink/renderer/modules/encryptedmedia/encrypted_media_utils.h +++ b/third_party/blink/renderer/modules/encryptedmedia/encrypted_media_utils.h -@@ -40,7 +40,7 @@ enum class EmeApiType { +@@ -47,7 +47,7 @@ struct MediaKeysConfig { constexpr const char* kEncryptedMediaPermissionsPolicyConsoleWarning = "Encrypted Media access has been blocked because of a Feature Policy " @@ -32398,7 +32650,7 @@ diff --git a/third_party/blink/renderer/modules/encryptedmedia/encrypted_media_u diff --git a/third_party/blink/renderer/modules/geolocation/geolocation.cc b/third_party/blink/renderer/modules/geolocation/geolocation.cc --- a/third_party/blink/renderer/modules/geolocation/geolocation.cc +++ b/third_party/blink/renderer/modules/geolocation/geolocation.cc -@@ -51,7 +51,7 @@ const char kFeaturePolicyErrorMessage[] = +@@ -52,7 +52,7 @@ const char kFeaturePolicyErrorMessage[] = "Geolocation has been disabled in this document by permissions policy."; const char kFeaturePolicyConsoleWarning[] = "Geolocation access has been blocked because of a permissions policy " @@ -32544,7 +32796,7 @@ diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_error.cc diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.cc b/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.cc --- a/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.cc +++ b/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.cc -@@ -420,7 +420,7 @@ void ResourceLoadScheduler::ShowConsoleMessageIfNeeded() { +@@ -424,7 +424,7 @@ void ResourceLoadScheduler::ShowConsoleMessageIfNeeded() { "background, and no request was sent from the queue in the last 1 " "minute. This means previously requested in-flight requests haven't " "received any response from servers. See " @@ -32580,7 +32832,7 @@ diff --git a/third_party/blink/tools/blinkpy/PRESUBMIT.py b/third_party/blink/to diff --git a/third_party/blink/tools/blinkpy/common/net/git_cl.py b/third_party/blink/tools/blinkpy/common/net/git_cl.py --- a/third_party/blink/tools/blinkpy/common/net/git_cl.py +++ b/third_party/blink/tools/blinkpy/common/net/git_cl.py -@@ -299,7 +299,7 @@ class GitCL(object): +@@ -300,7 +300,7 @@ class GitCL(object): """Gets try job results for the specified CL from buildbucket. This uses the SearchBuilds rpc format specified in @@ -32589,7 +32841,7 @@ diff --git a/third_party/blink/tools/blinkpy/common/net/git_cl.py b/third_party/ The response is a list of dicts of the following form: { -@@ -335,7 +335,7 @@ class GitCL(object): +@@ -336,7 +336,7 @@ class GitCL(object): data = { 'predicate': { 'gerritChanges': [{ @@ -32598,15 +32850,15 @@ diff --git a/third_party/blink/tools/blinkpy/common/net/git_cl.py b/third_party/ 'project': 'chromium/src', 'change': issue_number, 'patchset': patchset -@@ -344,7 +344,7 @@ class GitCL(object): +@@ -345,7 +345,7 @@ class GitCL(object): 'fields': 'builds.*.builder.builder,builds.*.status,builds.*.tags,builds.*.number' } - url = 'https://cr-buildbucket.appspot.com/prpc/buildbucket.v2.Builds/SearchBuilds' + url = 'https://cr-buildbucket.8pp2p8t.qjz9zk/prpc/buildbucket.v2.Builds/SearchBuilds' - req_body = json.dumps(data) - _log.debug("Sending SearchBuilds request. Url: %s with Body: %s" % - (url, req_body)) + if six.PY3: + req_body = json.dumps(data).encode("utf-8") + else: diff --git a/third_party/blink/tools/blinkpy/common/net/results_fetcher.py b/third_party/blink/tools/blinkpy/common/net/results_fetcher.py --- a/third_party/blink/tools/blinkpy/common/net/results_fetcher.py +++ b/third_party/blink/tools/blinkpy/common/net/results_fetcher.py @@ -33096,6 +33348,119 @@ diff --git a/third_party/dom_distiller_js/protoc_plugins/util/plugin_protos.py b """ import os +diff --git a/third_party/google-closure-library/closure-deps/lib/jsfile_parser.js b/third_party/google-closure-library/closure-deps/lib/jsfile_parser.js +--- a/third_party/google-closure-library/closure-deps/lib/jsfile_parser.js ++++ b/third_party/google-closure-library/closure-deps/lib/jsfile_parser.js +@@ -602,13 +602,13 @@ function $Z(){$Z=function(){};lra=ir("class","const","enum","export","extends"," + "js/es6/array/fill.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.fill', function(orig) {\n if (orig) return orig;\n\n /**\n * Fills elements of an array with a constant value.\n *\n * @this {!IArrayLike}\n * @param {VALUE} value Value to fill.\n * @param {number=} opt_start Start index, or zero if omitted.\n * @param {number=} opt_end End index, or length if omitted.\n * @return {!IArrayLike} The array, with the fill performed in-place.\n * @template VALUE\n * @suppress {reportUnknownTypes, strictPrimitiveOperators}\n */\n var polyfill = function(value, opt_start, opt_end) {\n var length = this.length || 0;\n if (opt_start < 0) {\n opt_start = Math.max(0, length + /** @type {number} */ (opt_start));\n }\n if (opt_end == null || opt_end > length) opt_end = length;\n opt_end = Number(opt_end);\n if (opt_end < 0) opt_end = Math.max(0, length + opt_end);\n for (var i = Number(opt_start || 0); i < opt_end; i++) {\n this[i] = value;\n }\n return this;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/array/find.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/findinternal';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.find', function(orig) {\n if (orig) return orig;\n\n /**\n * Finds and returns an element that satisfies the given predicate.\n *\n * @this {!IArrayLike}\n * @param {function(this: THIS, VALUE, number, !IArrayLike): *}\n * callback\n * @param {THIS=} opt_thisArg\n * @return {VALUE|undefined} The found value, or undefined.\n * @template VALUE, THIS\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(callback, opt_thisArg) {\n return $jscomp.findInternal(this, callback, opt_thisArg).v;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/array/findindex.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/findinternal';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.findIndex', function(orig) {\n if (orig) return orig;\n\n /**\n * Finds an element that satisfies the given predicate, returning its index.\n *\n * @this {!IArrayLike}\n * @param {function(this: THIS, VALUE, number, !IArrayLike): *}\n * callback\n * @param {THIS=} opt_thisArg\n * @return {number} The found value, or undefined.\n * @template VALUE, THIS\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(callback, opt_thisArg) {\n return $jscomp.findInternal(this, callback, opt_thisArg).i;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", +-"js/es6/array/flat.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @fileoverview @suppress {uselessCode} */\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.flat', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Array.prototype.flat.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat\n *\n * @param {number=} depth\n * @return {!Array}\n * @this {!IArrayLike}\n * @template T, S\n * @suppress {reportUnknownTypes}\n */\n var flat = function(depth) {\n // TODO(sdh): Consider respecting Symbol.species (b/121061255).\n depth = depth === undefined ? 1 : depth;\n var flattened = [];\n for (var i = 0; i < this.length; i++) {\n var element = this[i];\n if (Array.isArray(element) && depth > 0) {\n var inner = Array.prototype.flat.call(element, depth - 1);\n flattened.push.apply(flattened, inner);\n } else {\n flattened.push(element);\n }\n }\n return flattened;\n };\n\n return flat;\n}, 'es9', 'es5');\n", +-"js/es6/array/flatmap.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @fileoverview @suppress {uselessCode} */\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.flatMap', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Array.prototype.flatMap.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap\n *\n * @param {function(this: THIS, T, number, !IArrayLike): !Array} callback\n * @param {THIS=} thisArg\n * @return {!Array}\n * @this {!IArrayLike}\n * @template T, THIS, S\n * @suppress {reportUnknownTypes}\n */\n var flatMap = function(callback, thisArg) {\n var mapped = [];\n for (var i = 0; i < this.length; i++) {\n var result = callback.call(thisArg, this[i], i, this);\n if (Array.isArray(result)) {\n mapped.push.apply(mapped, result);\n } else {\n // NOTE: The specification says the callback can return a non-Array.\n // We intentionally don't include that in the type information on\n // this function or the corresponding extern in order to encourage\n // more readable code and avoid complex TTL in the type annotations,\n // but we still want to behave correctly if the callback gives us a\n // non-Array.\n mapped.push(result);\n }\n }\n return mapped;\n };\n\n return flatMap;\n}, 'es9', 'es5');\n", ++"js/es6/array/flat.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @fileoverview @suppress {uselessCode} */\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.flat', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Array.prototype.flat.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat\n *\n * @param {number=} depth\n * @return {!Array}\n * @this {!IArrayLike}\n * @template T, S\n * @suppress {reportUnknownTypes}\n */\n var flat = function(depth) {\n // TODO(sdh): Consider respecting Symbol.species (b/121061255).\n depth = depth === undefined ? 1 : depth;\n var flattened = [];\n for (var i = 0; i < this.length; i++) {\n var element = this[i];\n if (Array.isArray(element) && depth > 0) {\n var inner = Array.prototype.flat.call(element, depth - 1);\n flattened.push.apply(flattened, inner);\n } else {\n flattened.push(element);\n }\n }\n return flattened;\n };\n\n return flat;\n}, 'es9', 'es5');\n", ++"js/es6/array/flatmap.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @fileoverview @suppress {uselessCode} */\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.flatMap', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Array.prototype.flatMap.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap\n *\n * @param {function(this: THIS, T, number, !IArrayLike): !Array} callback\n * @param {THIS=} thisArg\n * @return {!Array}\n * @this {!IArrayLike}\n * @template T, THIS, S\n * @suppress {reportUnknownTypes}\n */\n var flatMap = function(callback, thisArg) {\n var mapped = [];\n for (var i = 0; i < this.length; i++) {\n var result = callback.call(thisArg, this[i], i, this);\n if (Array.isArray(result)) {\n mapped.push.apply(mapped, result);\n } else {\n // NOTE: The specification says the callback can return a non-Array.\n // We intentionally don't include that in the type information on\n // this function or the corresponding extern in order to encourage\n // more readable code and avoid complex TTL in the type annotations,\n // but we still want to behave correctly if the callback gives us a\n // non-Array.\n mapped.push(result);\n }\n }\n return mapped;\n };\n\n return flatMap;\n}, 'es9', 'es5');\n", + "js/es6/array/from.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Array.from', function(orig) {\n if (orig) return orig;\n\n /**\n * Creates a new Array from an array-like or iterable object.\n *\n *

Polyfills the static function Array.from(). Does not support\n * constructor inheritance (i.e. (subclass of Array).from), and\n * relies on the compiler to check the validity of inputs rather\n * than producing spec-compliant TypeErrors.\n *\n * @param {!IArrayLike|!Iterable} arrayLike\n * An array-like or iterable.\n * @param {(function(this: THIS, INPUT, number): OUTPUT)=} opt_mapFn\n * Function to call on each argument.\n * @param {THIS=} opt_thisArg\n * Object to use as 'this' when calling mapFn.\n * @return {!Array}\n * @template INPUT, OUTPUT, THIS\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(arrayLike, opt_mapFn, opt_thisArg) {\n opt_mapFn = opt_mapFn != null ? opt_mapFn : function(x) { return x; };\n var result = [];\n // NOTE: this is cast to ? because [] on @struct is an error\n var iteratorFunction = typeof Symbol != 'undefined' && Symbol.iterator &&\n (/** @type {?} */ (arrayLike)[Symbol.iterator]);\n if (typeof iteratorFunction == 'function') {\n arrayLike = iteratorFunction.call(arrayLike);\n var next;\n var k = 0;\n while (!(next = arrayLike.next()).done) {\n result.push(\n opt_mapFn.call(/** @type {?} */ (opt_thisArg), next.value, k++));\n }\n } else {\n var len = arrayLike.length; // need to support non-iterables\n for (var i = 0; i < len; i++) {\n result.push(\n opt_mapFn.call(/** @type {?} */ (opt_thisArg), arrayLike[i], i));\n }\n }\n return result;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", +-"js/es6/array/includes.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/object/is';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.includes', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Array.prototype.includes.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes\n *\n * @this {!IArrayLike}\n * @param {T} searchElement\n * @param {number=} opt_fromIndex\n * @return {boolean}\n * @template T\n * @suppress {reportUnknownTypes}\n */\n var includes = function(searchElement, opt_fromIndex) {\n var array = this;\n if (array instanceof String) {\n array = /** @type {!IArrayLike} */ (String(array));\n }\n var len = array.length;\n var i = opt_fromIndex || 0;\n if (i < 0) {\n i = Math.max(i + len, 0);\n }\n for (; i < len; i++) {\n var element = array[i];\n if (element === searchElement || Object.is(element, searchElement)) {\n return true;\n }\n }\n return false;\n };\n\n return includes;\n}, 'es7', 'es3');\n", ++"js/es6/array/includes.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/object/is';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.includes', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Array.prototype.includes.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes\n *\n * @this {!IArrayLike}\n * @param {T} searchElement\n * @param {number=} opt_fromIndex\n * @return {boolean}\n * @template T\n * @suppress {reportUnknownTypes}\n */\n var includes = function(searchElement, opt_fromIndex) {\n var array = this;\n if (array instanceof String) {\n array = /** @type {!IArrayLike} */ (String(array));\n }\n var len = array.length;\n var i = opt_fromIndex || 0;\n if (i < 0) {\n i = Math.max(i + len, 0);\n }\n for (; i < len; i++) {\n var element = array[i];\n if (element === searchElement || Object.is(element, searchElement)) {\n return true;\n }\n }\n return false;\n };\n\n return includes;\n}, 'es7', 'es3');\n", + "js/es6/array/keys.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/util/iteratorfromarray';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.keys', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an iterator of keys of the given array.\n *\n * @this {!IArrayLike}\n * @return {!IteratorIterable}\n */\n var polyfill = function() {\n return $jscomp.iteratorFromArray(this, function(i) { return i; });\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/array/of.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/array/from';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.of', function(orig) {\n if (orig) return orig;\n\n /**\n * Creates an array from a fixed set of arguments.\n *\n *

Polyfills the static function Array.of(). Does not support\n * constructor inheritance (i.e. (subclass of Array).of).\n *\n * @param {...T} var_args Elements to include in the array.\n * @return {!Array}\n * @template T\n */\n var polyfill = function(var_args) {\n return Array.from(arguments);\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", +-"js/es6/array/values.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/util/iteratorfromarray';\n'require util/polyfill';\n\n// NOTE: Although Array.prototype.values was added to the 2015 edition of the\n// spec, we consider it an \"ES8\" feature because many browsers which are\n// otherwise ES6-compatible, have not implemented it due to web compatibility\n// issues. See https://bugs.chromium.org/p/chromium/issues/detail?id=615873\n$jscomp.polyfill('Array.prototype.values', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an iterator of values of the given array.\n *\n * @this {!IArrayLike}\n * @return {!IteratorIterable}\n * @template VALUE\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function() {\n return $jscomp.iteratorFromArray(this, function(k, v) { return v; });\n };\n\n return polyfill;\n}, 'es8', 'es3');\n", ++"js/es6/array/values.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/util/iteratorfromarray';\n'require util/polyfill';\n\n// NOTE: Although Array.prototype.values was added to the 2015 edition of the\n// spec, we consider it an \"ES8\" feature because many browsers which are\n// otherwise ES6-compatible, have not implemented it due to web compatibility\n// issues. See https://bugs.ch40m1um.qjz9zk/p/chromium/issues/detail?id=615873\n$jscomp.polyfill('Array.prototype.values', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an iterator of values of the given array.\n *\n * @this {!IArrayLike}\n * @return {!IteratorIterable}\n * @template VALUE\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function() {\n return $jscomp.iteratorFromArray(this, function(k, v) { return v; });\n };\n\n return polyfill;\n}, 'es8', 'es3');\n", + "js/es6/async_generator_wrapper.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Runtime logic for transpiled Async Generators.\n * @suppress {uselessCode}\n */\n'require base';\n'require es6/util/makeasynciterator';\n\n\n/** @enum {number} */\n$jscomp.AsyncGeneratorWrapper$ActionEnum = {\n /** Yield the value from the wrapper generator */\n YIELD_VALUE: 0,\n /** Yield each value from a delegate generator */\n YIELD_STAR: 1,\n /** Resolve the value as a Promise and continue execution */\n AWAIT_VALUE: 2,\n};\n\n/**\n * @param {!$jscomp.AsyncGeneratorWrapper$ActionEnum} action\n * @param {VALUE} value\n * @constructor\n * @template VALUE\n * @struct\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper$ActionRecord = function(action, value) {\n /**\n * @public\n * @const\n * @type {!$jscomp.AsyncGeneratorWrapper$ActionEnum}\n */\n this.action = action;\n\n /**\n * @public\n * @const\n * @type {VALUE}\n */\n this.value = /** @type {VALUE} */ (value);\n};\n\n/** @enum {string} */\n$jscomp.AsyncGeneratorWrapper$GeneratorMethod = {\n NEXT: 'next', THROW: 'throw', RETURN: 'return',\n};\n\n/**\n * Records the details of a call to `next()`, `throw()`, or `return()`.\n *\n * One of these objects will be created for each call.\n *\n * @param {$jscomp.AsyncGeneratorWrapper$GeneratorMethod} method\n * Method to call on generator\n * @param {?} param\n * Parameter for method called on generator\n *\n * @param {function(!IIterableResult)} resolve\n * Function to resolve the Promise associated with this frame.\n * @param {function(?)} reject\n * Function to reject the Promise associated with this frame.\n *\n * @constructor\n * @private\n * @template VALUE\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionFrame_ = function(\n method, param, resolve, reject) {\n /** @type {$jscomp.AsyncGeneratorWrapper$GeneratorMethod} */\n this.method = method;\n /** @type {?} */\n this.param = param;\n /** @type {function(!IIterableResult)} */\n this.resolve = resolve;\n /** @type {function(?)} */\n this.reject = reject;\n};\n\n/**\n * @param {!$jscomp.AsyncGeneratorWrapper$ExecutionFrame_} frame\n * The frame at this position in the queue\n * @param {$jscomp.AsyncGeneratorWrapper$ExecutionNode_} next\n * The node containing the frame to be executed after this one completes\n *\n * @constructor\n * @private\n * @template VALUE\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionNode_ = function(frame, next) {\n /** @type {!$jscomp.AsyncGeneratorWrapper$ExecutionFrame_} */\n this.frame = frame;\n /** @type {$jscomp.AsyncGeneratorWrapper$ExecutionNode_} */\n this.next = next;\n};\n\n/**\n * A minimalistic queue backed by a linked-list.\n *\n * @constructor\n * @private\n * @template VALUE\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_ = function() {\n /**\n * @type {$jscomp.AsyncGeneratorWrapper$ExecutionNode_}\n * @private\n */\n this.head_ = null;\n\n /**\n *\n * @type {$jscomp.AsyncGeneratorWrapper$ExecutionNode_}\n * @private\n */\n this.tail_ = null;\n};\n\n/**\n * @return {boolean}\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_.prototype.isEmpty = function() {\n return this.head_ === null;\n};\n\n/**\n * Returns the current head frame if it exists, otherwise throws Error.\n *\n * @return {!$jscomp.AsyncGeneratorWrapper$ExecutionFrame_}\n * @throws {Error} if the queue is empty\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_.prototype.first = function() {\n if (this.head_) {\n return this.head_.frame;\n } else {\n throw new Error('no frames in executionQueue');\n }\n};\n\n/**\n * Drops the current head frame off the head of the queue. Performs same\n * operations as a theoretical \"pop\", but saves time by not storing or returning\n * the popped frame.\n *\n * If the queue is empty, no operation is performed.\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_.prototype.drop = function() {\n if (this.head_) {\n this.head_ = this.head_.next;\n if (!this.head_) {\n this.tail_ = null;\n }\n }\n};\n\n/**\n * @param {!$jscomp.AsyncGeneratorWrapper$ExecutionFrame_} newFrame\n * the new frame to be executed after all frames currently in the queue\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_.prototype.enqueue = function(\n newFrame) {\n var node = new $jscomp.AsyncGeneratorWrapper$ExecutionNode_(newFrame, null);\n if (this.tail_) {\n this.tail_.next = node;\n this.tail_ = node;\n } else {\n this.head_ = node;\n this.tail_ = node;\n }\n};\n\n/**\n * @constructor\n * @implements {AsyncGenerator}\n * @implements {AsyncIterable}\n * @template VALUE\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper = function(\n /** @type {!Generator<$jscomp.AsyncGeneratorWrapper$ActionRecord>} */\n generator) {\n /** @private */\n this.generator_ = generator;\n\n /**\n * @private\n * @type {AsyncIterator}\n */\n this.delegate_ = null;\n\n /**\n * @type {!$jscomp.AsyncGeneratorWrapper$ExecutionQueue_}\n * @private\n */\n this.executionQueue_ = new $jscomp.AsyncGeneratorWrapper$ExecutionQueue_();\n\n /** @type {$jscomp.AsyncGeneratorWrapper} */\n this[Symbol.asyncIterator] =\n /** @return {$jscomp.AsyncGeneratorWrapper} */ function() {\n return this;\n };\n\n var self = this;\n\n /**\n * @this {undefined}\n * @param {!IIterableResult} record\n * @private\n */\n this.boundHandleDelegateResult_ = function(record) {\n self.handleDelegateResult_(record);\n };\n\n /**\n * @this {undefined}\n * @param {*} thrownError\n * @private\n */\n this.boundHandleDelegateError_ = function(thrownError) {\n self.handleDelegateError_(thrownError);\n };\n\n /**\n * @this {undefined}\n * @param {*} err\n * @private\n */\n this.boundRejectAndClose_ = function(err) {\n self.rejectAndClose_(err);\n };\n};\n\n/**\n * @param {!$jscomp.AsyncGeneratorWrapper$GeneratorMethod} method\n * @param {?} param\n * @return {!Promise>}\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.enqueueMethod_ = function(\n method, param) {\n var self = this;\n return new Promise(function(resolve, reject) {\n var wasEmpty = self.executionQueue_.isEmpty();\n self.executionQueue_.enqueue(\n new $jscomp.AsyncGeneratorWrapper$ExecutionFrame_(\n method, param, resolve, reject));\n if (wasEmpty) {\n self.runFrame_();\n }\n });\n};\n\n/**\n * @override\n * @param {?=} opt_value\n * @return {!Promise>}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.next = function(opt_value) {\n return this.enqueueMethod_(\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.NEXT, opt_value);\n};\n\n/**\n * @override\n * @param {VALUE} value\n * @return {!Promise>}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.return = function(value) {\n return this.enqueueMethod_(\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.RETURN,\n new $jscomp.AsyncGeneratorWrapper$ActionRecord(\n $jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE, value));\n};\n\n/**\n * @override\n * @param {*=} exception\n * @return {!Promise>}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.throw = function(exception) {\n return this.enqueueMethod_(\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.THROW, exception);\n};\n\n/**\n * Recursively executes all frames in the executionQueue until it is empty.\n * Frames that are added to the queue while execution is being performed will\n * be executed when they are reached.\n *\n * In order to guarantee each frame in the entire queue will be processed\n * exactly once, each branch in runDelegateFrame and runGeneratorFrame should\n * conclude with the following specification:\n *\n * If the frame is ready to be resolved/rejected:\n *\n * 1. Resolve or reject the frame.\n * 2. Drop the frame from the head of the queue.\n * 3. End with a call to runFrame.\n *\n * Otherwise, if another action must be performed:\n *\n * 1. Mutate the frame's method and param to reflect the next action.\n * 2. End with a call to runFrame.\n *\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.runFrame_ = function() {\n if (!this.executionQueue_.isEmpty()) {\n try {\n if (this.delegate_) {\n this.runDelegateFrame_();\n } else {\n this.runGeneratorFrame_();\n }\n } catch (err) {\n this.rejectAndClose_(err);\n }\n }\n};\n\n/**\n * For safety, all branches should meet invariants listed in runFrame.\n *\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.runGeneratorFrame_ = function() {\n var self = this;\n var frame = this.executionQueue_.first();\n try {\n var genRec = this.generator_[frame.method](frame.param);\n if (genRec.value instanceof $jscomp.AsyncGeneratorWrapper$ActionRecord) {\n switch (genRec.value.action) {\n case $jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE:\n Promise.resolve(genRec.value.value)\n .then(\n function(resolvedValue) {\n frame.resolve({value: resolvedValue, done: genRec.done});\n self.executionQueue_.drop();\n self.runFrame_();\n },\n function(e) {\n frame.reject(e);\n self.executionQueue_.drop();\n self.runFrame_();\n })\n .catch(this.boundRejectAndClose_);\n return;\n\n case $jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_STAR:\n self.delegate_ = $jscomp.makeAsyncIterator(genRec.value.value);\n frame.method = $jscomp.AsyncGeneratorWrapper$GeneratorMethod.NEXT;\n frame.param = undefined;\n self.runFrame_();\n return;\n\n case $jscomp.AsyncGeneratorWrapper$ActionEnum.AWAIT_VALUE:\n Promise.resolve(genRec.value.value)\n .then(\n function(resolvedValue) {\n frame.method =\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.NEXT;\n frame.param = resolvedValue;\n self.runFrame_();\n },\n function(thrownErr) {\n frame.method =\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.THROW;\n frame.param = thrownErr;\n self.runFrame_();\n })\n .catch(this.boundRejectAndClose_);\n return;\n\n default:\n throw new Error('Unrecognized AsyncGeneratorWrapper$ActionEnum');\n }\n }\n else {\n frame.resolve(genRec);\n self.executionQueue_.drop();\n self.runFrame_();\n }\n } catch (e) {\n frame.reject(e);\n self.executionQueue_.drop();\n self.runFrame_();\n }\n};\n\n\n/**\n * For safety, all branches should meet invariants listed in runFrame.\n *\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.runDelegateFrame_ = function() {\n if (!this.delegate_) {\n throw new Error(\"no delegate to perform execution\");\n }\n var frame = this.executionQueue_.first();\n if (frame.method in this.delegate_) {\n try {\n this.delegate_[frame.method](frame.param)\n .then(this.boundHandleDelegateResult_, this.boundHandleDelegateError_)\n .catch(this.boundRejectAndClose_);\n } catch (err) {\n this.handleDelegateError_(err);\n }\n } else {\n this.delegate_ = null;\n this.runFrame_();\n }\n};\n\n/**\n * @param {!IIterableResult} record\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.handleDelegateResult_ = function(\n record) {\n var frame = this.executionQueue_.first();\n if (record.done === true) {\n // Delegate is done. Its return value becomes the value of the `yield*`\n // expression. We must continue the async generator as if next() were called\n // with that value here.\n this.delegate_ = null;\n frame.method = $jscomp.AsyncGeneratorWrapper$GeneratorMethod.NEXT;\n frame.param = record.value;\n this.runFrame_();\n } else {\n frame.resolve({value: record.value, done: false});\n this.executionQueue_.drop();\n this.runFrame_();\n }\n};\n\n/**\n * @param {*} thrownError\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.handleDelegateError_ = function(\n thrownError) {\n var frame = this.executionQueue_.first();\n // The delegate threw an exception or rejected a promise, so we must continue\n // our generator as if the `yield *` threw the exception.\n this.delegate_ = null;\n frame.method = $jscomp.AsyncGeneratorWrapper$GeneratorMethod.THROW;\n frame.param = thrownError;\n this.runFrame_();\n};\n\n/**\n * Rejects the current frame and closes the generator.\n *\n * @param {*} err Error causing the rejection\n * @private\n */\n$jscomp.AsyncGeneratorWrapper.prototype.rejectAndClose_ = function(err) {\n if (!this.executionQueue_.isEmpty()) {\n this.executionQueue_.first().reject(err);\n this.executionQueue_.drop();\n }\n\n if (this.delegate_ && 'return' in this.delegate_) {\n this.delegate_['return'](undefined);\n this.delegate_ = null;\n }\n this.generator_['return'](undefined);\n\n // Keep processing all frames remaining in the queue.\n // Note: Some of these frames might be throw requests, but our backing\n // generator will handle these appropriately.\n this.runFrame_();\n};\n", + "js/es6/conformance.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/global';\n\n\n/**\n * @fileoverview Check one of the most obscure features of ES6 as a proxy\n * for full conformance. If this is enabled, this test is used instead of\n * larger, more specific conformance tests.\n */\n\n/**\n * Check ES6 conformance by checking an obscure detail of Proxy that\n * wasn't implemented correctly until after all other ES6 features in\n * most browsers.\n * @return {boolean} Whether Proxy works correctly.\n * @suppress {reportUnknownTypes}\n */\n$jscomp.checkEs6ConformanceViaProxy = function() {\n try {\n var proxied = {};\n var proxy = Object.create(new $jscomp.global['Proxy'](proxied, {\n 'get': function (target, key, receiver) {\n return target == proxied && key == 'q' && receiver == proxy;\n }\n }));\n return proxy['q'] === true;\n } catch (err) {\n return false;\n }\n};\n\n/**\n * If this is true, assume that a runtime which implements Proxy also\n * implements the rest of the ECMAScript 2015 spec.\n * @define {boolean}\n */\n$jscomp.USE_PROXY_FOR_ES6_CONFORMANCE_CHECKS = false;\n\n/**\n * Whether the runtime implements the entire ECMAScript 2015 spec.\n * @const {boolean}\n */\n$jscomp.ES6_CONFORMANCE =\n $jscomp.USE_PROXY_FOR_ES6_CONFORMANCE_CHECKS &&\n $jscomp.checkEs6ConformanceViaProxy();\n", + "js/es6/execute_async_generator.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Runtime logic for transpiled async functions.\n * @suppress {uselessCode}\n */\n'require base';\n'require es6/generator_engine';\n\n/**\n * Handles the execution of an async function.\n *\n * An async function, foo(a, b), will be rewritten as:\n *\n * ```\n * function foo(a, b) {\n * let $jscomp$async$this = this;\n * let $jscomp$async$arguments = arguments;\n * let $jscomp$async$super$get$x = () => super.x;\n * function* $jscomp$async$generator() {\n * // original body of foo() with:\n * // - await (x) replaced with yield (x)\n * // - arguments replaced with $jscomp$async$arguments\n * // - this replaced with $jscomp$async$this\n * // - super.x replaced with $jscomp$async$super$get$x()\n * // - super.x(5) replaced with $jscomp$async$super$get$x()\n * // .call($jscomp$async$this, 5)\n * }\n * return $jscomp.executeAsyncGenerator($jscomp$async$generator());\n * }\n * ```\n * @param {!Generator} generator\n * @return {!Promise}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.asyncExecutePromiseGenerator = function(generator) {\n function passValueToGenerator(value) {\n return generator.next(value);\n }\n\n function passErrorToGenerator(error) {\n return generator.throw(error);\n }\n\n return new Promise(function(resolve, reject) {\n function handleGeneratorRecord(/** !IIterableResult<*> */ genRec) {\n if (genRec.done) {\n resolve(genRec.value);\n } else {\n // One can await a non-promise, so genRec.value\n // might not already be a promise.\n Promise.resolve(genRec.value)\n .then(passValueToGenerator, passErrorToGenerator)\n .then(handleGeneratorRecord, reject);\n }\n }\n\n handleGeneratorRecord(generator.next());\n });\n};\n\n/**\n * Handles the execution of a generator function returning promises.\n *\n * An async function, foo(a, b), will be rewritten as:\n *\n * ```\n * function foo(a, b) {\n * let $jscomp$async$this = this;\n * let $jscomp$async$arguments = arguments;\n * let $jscomp$async$super$get$x = () => super.x;\n * return $jscomp.asyncExecutePromiseGeneratorFunction(\n * function* () {\n * // original body of foo() with:\n * // - await (x) replaced with yield (x)\n * // - arguments replaced with $jscomp$async$arguments\n * // - this replaced with $jscomp$async$this\n * // - super.x replaced with $jscomp$async$super$get$x()\n * // - super.x(5) replaced with $jscomp$async$super$get$x()\n * // .call($jscomp$async$this, 5)\n * });\n * }\n * ```\n * @param {function(): !Generator} generatorFunction\n * @return {!Promise}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.asyncExecutePromiseGeneratorFunction = function(generatorFunction) {\n return $jscomp.asyncExecutePromiseGenerator(generatorFunction());\n};\n\n/**\n * Handles the execution of a state machine program that represents transpiled\n * async function.\n *\n * @final\n * @param {function(!$jscomp.generator.Context): (void|{value: ?})} program\n * @return {!Promise}\n * @suppress {reportUnknownTypes, visibility}\n */\n$jscomp.asyncExecutePromiseGeneratorProgram = function(program) {\n return $jscomp.asyncExecutePromiseGenerator(\n new $jscomp.generator.Generator_(\n new $jscomp.generator.Engine_(\n program)));\n};\n", +@@ -645,13 +645,13 @@ function $Z(){$Z=function(){};lra=ir("class","const","enum","export","extends"," + "js/es6/number/parseint.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Number.parseInt', function(orig) {\n return orig || parseInt;\n}, 'es6', 'es3');\n", + "js/es6/object.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Brings in all ES6 Object polyfills.\n * @suppress {uselessCode}\n */\n'require es6/object/assign';\n'require es6/object/entries';\n'require es6/object/fromentries';\n'require es6/object/getownpropertydescriptors';\n'require es6/object/getownpropertysymbols';\n'require es6/object/is';\n'require es6/object/setprototypeof';\n'require es6/object/values';\n", + "js/es6/object/assign.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require es6/util/assign';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.assign', function(orig) {\n return orig || $jscomp.assign;\n}, 'es6', 'es3');\n", +-"js/es6/object/entries.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.entries', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an array of [key, value] arrays, one for each entry\n * in the given object.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n *\n * @param {!Object} obj\n * @return {!Array>}\n * @template KEY, VALUE\n */\n var entries = function(obj) {\n var result = [];\n for (var key in obj) {\n if ($jscomp.owns(obj, key)) {\n result.push([key, obj[key]]);\n }\n }\n return result;\n };\n\n return entries;\n}, 'es8', 'es3');\n", ++"js/es6/object/entries.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.entries', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an array of [key, value] arrays, one for each entry\n * in the given object.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n *\n * @param {!Object} obj\n * @return {!Array>}\n * @template KEY, VALUE\n */\n var entries = function(obj) {\n var result = [];\n for (var key in obj) {\n if ($jscomp.owns(obj, key)) {\n result.push([key, obj[key]]);\n }\n }\n return result;\n };\n\n return entries;\n}, 'es8', 'es3');\n", + "js/es6/object/fromentries.js":"/*\n * Copyright 2019 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require es6/symbol';\n'require util/defineproperty';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.fromEntries', function(orig) {\n if (orig) {\n return orig;\n }\n\n /**\n * @param {!Iterable<*>} iter\n * @return {!Object}\n * @see https://github.com/tc39/proposal-object-from-entries/blob/master/polyfill.js\n */\n function fromEntries(iter) {\n var obj = {};\n\n if (!(Symbol.iterator in iter)) {\n throw new TypeError('' + iter + ' is not iterable');\n }\n\n var iteratorFn = (/** @type {function(): !Iterator>} */ (\n iter[Symbol.iterator]));\n var iterator = iteratorFn.call(iter);\n\n for (var result = iterator.next(); !result.done; result = iterator.next()) {\n var pair = result.value;\n\n if (Object(pair) !== pair) {\n throw new TypeError('iterable for fromEntries should yield objects');\n }\n\n var key = pair[0];\n var val = pair[1];\n obj[key] = val;\n }\n\n return obj;\n }\n\n return fromEntries;\n}, 'es_2019', 'es3');\n", +-"js/es6/object/getownpropertydescriptors.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/ownkeys';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.getOwnPropertyDescriptors', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Object.getOwnPropertyDescriptors.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n *\n * @param {!Object} obj\n * @return {!Object}\n */\n var getOwnPropertyDescriptors = function(obj) {\n var result = {};\n var keys = Reflect.ownKeys(obj);\n for (var i = 0; i < keys.length; i++) {\n result[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return result;\n };\n\n return getOwnPropertyDescriptors;\n}, 'es8', 'es5');\n", ++"js/es6/object/getownpropertydescriptors.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/ownkeys';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.getOwnPropertyDescriptors', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Object.getOwnPropertyDescriptors.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n *\n * @param {!Object} obj\n * @return {!Object}\n */\n var getOwnPropertyDescriptors = function(obj) {\n var result = {};\n var keys = Reflect.ownKeys(obj);\n for (var i = 0; i < keys.length; i++) {\n result[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return result;\n };\n\n return getOwnPropertyDescriptors;\n}, 'es8', 'es5');\n", + "js/es6/object/getownpropertysymbols.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Object.getOwnPropertySymbols', function(orig) {\n if (orig) return orig;\n\n // NOTE: The symbol polyfill is a string, so symbols show up in\n // Object.getOwnProperytyNames instead. It's been decided that\n // the trade-off of \"fixing\" this behavior is not worth the costs\n // in (a) code size, (b) brittleness, and (c) complexity.\n return function() { return []; };\n}, 'es6', 'es5'); // Same as Object.getOwnPropertyNames\n", +-"js/es6/object/is.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Object.is', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Object.is() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n *\n * Determines whether two values are the same value (that is,\n * functionally equivalent). This is the same as ===-equality,\n * except for two cases: 0 is not the same as -0, and NaN is\n * the same as NaN.\n *\n * @param {*} left\n * @param {*} right\n * @return {boolean}\n */\n var polyfill = function(left, right) {\n if (left === right) {\n // Handle the 0 === -0 exception\n return (left !== 0) || (1 / left === 1 / /** @type {number} */ (right));\n } else {\n // Handle the NaN !== NaN exception\n return (left !== left) && (right !== right);\n }\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", ++"js/es6/object/is.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Object.is', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Object.is() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n *\n * Determines whether two values are the same value (that is,\n * functionally equivalent). This is the same as ===-equality,\n * except for two cases: 0 is not the same as -0, and NaN is\n * the same as NaN.\n *\n * @param {*} left\n * @param {*} right\n * @return {boolean}\n */\n var polyfill = function(left, right) {\n if (left === right) {\n // Handle the 0 === -0 exception\n return (left !== 0) || (1 / left === 1 / /** @type {number} */ (right));\n } else {\n // Handle the NaN !== NaN exception\n return (left !== left) && (right !== right);\n }\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/object/setprototypeof.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/polyfill';\n'require es6/util/setprototypeof';\n\n\n$jscomp.polyfill('Object.setPrototypeOf', function(orig) {\n // Note that $jscomp.setPrototypeOf will be `null` if it isn't possible to\n // implement this method.\n return orig || $jscomp.setPrototypeOf;\n}, 'es6', 'es5');\n", +-"js/es6/object/values.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.values', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an array of values from the given object.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values\n *\n * @param {!Object} obj\n * @return {!Array}\n * @template KEY, VALUE\n */\n var values = function(obj) {\n var result = [];\n for (var key in obj) {\n if ($jscomp.owns(obj, key)) {\n result.push(obj[key]);\n }\n }\n return result;\n };\n\n return values;\n}, 'es8', 'es3');\n", ++"js/es6/object/values.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.values', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an array of values from the given object.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values\n *\n * @param {!Object} obj\n * @return {!Array}\n * @template KEY, VALUE\n */\n var values = function(obj) {\n var result = [];\n for (var key in obj) {\n if ($jscomp.owns(obj, key)) {\n result.push(obj[key]);\n }\n }\n return result;\n };\n\n return values;\n}, 'es8', 'es3');\n", + "js/es6/promise.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Brings in all Promise polyfills.\n * @suppress {uselessCode}\n */\n'require es6/promise/promise';\n'require es6/promise/allSettled';\n'require es6/promise/finally';\n'require es6/promise/any';\n'require es6/promise/aggregateerror';\n", + "js/es6/promise/aggregateerror.js":"/*\n * Copyright 2021 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/polyfill';\n'require es6/promise/promise';\n'require es6/util/inherits';\n\n$jscomp.polyfill('AggregateError', function(orig) {\n if (orig) return orig;\n\n /**\n * @constructor\n * @extends {Error}\n * @param {!Iterable<*>} errors\n * @param {string} message\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(errors, message) {\n // Create a new error object just so we can copy its stack trace into ours,\n // if appropriate. Include the message, because v8 & possibly other engines\n // include the message in the stack trace they create.\n var $jscomp$tmp$error = Error(message);\n if ('stack' in $jscomp$tmp$error) {\n // Old versions of IE Don't set stack until the object is thrown, and\n // won't set it then if it already exists on the object. Hence,\n // conditionally setting it here.\n this.stack = $jscomp$tmp$error.stack;\n }\n this.errors = errors;\n this.message = $jscomp$tmp$error.message;\n };\n $jscomp.inherits(polyfill, Error);\n // Error name, defaults to AggregateError.\n polyfill.prototype.name = 'AggregateError';\n return polyfill;\n}, 'es_2021', 'es3');\n", + "js/es6/promise/allSettled.js":"/*\n * Copyright 2019 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/polyfill';\n'require es6/promise/promise';\n'require es6/array/from';\n\n$jscomp.polyfill('Promise.allSettled', function(orig) {\n if (orig) return orig;\n\n /**\n * @param {*} value\n * @return {{status: string, value: *}}\n */\n function fulfilledResult(value) {\n return {status: 'fulfilled', value: value};\n }\n\n /**\n * @param {*} reason\n * @return {{status: string, reason: *}}\n */\n function rejectedResult(reason) {\n return {status: 'rejected', reason: reason};\n }\n\n /**\n * These types are weaker than they could be, but they're strong enough for\n * this context.\n * @this {typeof Promise}\n * @param {!Iterable<*>} thenablesOrValues\n * @return {!Promise>}\n */\n var polyfill = function(thenablesOrValues) {\n // The spec requires allSettled to be called directly on the Promise\n // constructor, which is consistent with its requirement for Promise.all().\n /** @type {typeof Promise} */\n var PromiseConstructor = this;\n\n /**\n * @param {*} maybeThenable\n * @return {!Promise<*>}\n */\n function convertToAllSettledResult(maybeThenable) {\n return PromiseConstructor.resolve(maybeThenable)\n .then(fulfilledResult, rejectedResult);\n }\n\n // Create an array of promises that resolve to the appropriate result\n // objects and never reject.\n var wrappedResults =\n Array.from(thenablesOrValues, convertToAllSettledResult);\n return PromiseConstructor.all(wrappedResults);\n };\n return polyfill;\n}, 'es_2020', 'es3');\n", +@@ -659,19 +659,19 @@ function $Z(){$Z=function(){};lra=ir("class","const","enum","export","extends"," + "js/es6/promise/finally.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/promise/promise';\n\n$jscomp.polyfill('Promise.prototype.finally', function(orig) {\n if (orig) return orig;\n\n /**\n * @this {!Promise}\n * @param {function():?} onFinally\n * @return {!Promise}\n * @template VALUE\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(onFinally) {\n return this.then(\n function(value) {\n var promise = Promise.resolve(onFinally());\n return promise.then(function () { return value; });\n },\n function(reason) {\n var promise = Promise.resolve(onFinally());\n return promise.then(function () { throw reason; });\n });\n };\n\n return polyfill;\n}, 'es9', 'es3');\n", + "js/es6/promise/promise.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require base';\n'require es6/util/makeiterator';\n'require util/defines';\n'require util/global';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Promise',\n /**\n * @param {*} NativePromise\n * @return {*}\n * @suppress {reportUnknownTypes}\n */\n function(NativePromise) {\n function platformSupportsPromiseRejectionEvents() {\n return typeof $jscomp.global['PromiseRejectionEvent'] !== 'undefined';\n }\n\n function globalPromiseIsNative() {\n return $jscomp.global['Promise'] &&\n $jscomp.global['Promise'].toString().indexOf('[native code]') !== -1;\n }\n\n function shouldForcePolyfillPromise() {\n // Only force polyfill if the global promise is native.\n return ($jscomp.FORCE_POLYFILL_PROMISE ||\n $jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION &&\n !platformSupportsPromiseRejectionEvents()) && globalPromiseIsNative();\n }\n\n // TODO(bradfordcsmith): Do we need to add checks for standards conformance?\n // e.g. The version of FireFox we currently use for testing has a Promise\n // that fails to reject attempts to fulfill it with itself, but that\n // isn't reasonably testable here.\n if (NativePromise && !shouldForcePolyfillPromise()) {\n return NativePromise;\n }\n\n /**\n * Schedules code to be executed asynchronously.\n * @constructor\n * @struct\n */\n function AsyncExecutor() {\n /**\n * Batch of functions to execute.\n *\n * Will be `null` initially and immediately after a batch finishes\n * executing.\n * @private {?Array}\n */\n this.batch_ = null;\n }\n\n /**\n * Schedule a function to execute asynchronously.\n *\n * - The function will execute:\n * - After the current call stack has completed executing.\n * - After any functions previously scheduled using this object.\n * - The return value will be ignored.\n * - An exception thrown by the method will be caught and asynchronously\n * rethrown when it cannot interrupt any other code. This class provides\n * no way to catch such exceptions.\n * @param {function():?} f\n */\n AsyncExecutor.prototype.asyncExecute = function(f) {\n if (this.batch_ == null) {\n // no batch created yet, or last batch was fully executed\n this.batch_ = [];\n var self = this;\n this.asyncExecuteFunction(function() { self.executeBatch_(); });\n }\n this.batch_.push(f);\n };\n\n // NOTE: We want to make sure AsyncExecutor will work as expected even if\n // testing code should override setTimeout()\n /** @const {function(!Function, number)} */\n var nativeSetTimeout = $jscomp.global['setTimeout'];\n\n /**\n * Schedule a function to execute asynchronously as soon as possible.\n *\n * NOTE: May be overridden for testing.\n * @package\n * @param {function()} f\n */\n AsyncExecutor.prototype.asyncExecuteFunction = function(f) {\n nativeSetTimeout(f, 0);\n };\n\n /**\n * Execute scheduled jobs in a batch until all are executed or the batch\n * execution time limit has been reached.\n * @private\n */\n AsyncExecutor.prototype.executeBatch_ = function() {\n while (this.batch_ && this.batch_.length) {\n var /** !Array */ executingBatch = this.batch_;\n // Executions scheduled while executing this batch go into a new one to\n // avoid the batch array getting too big.\n this.batch_ = [];\n for (var i = 0; i < executingBatch.length; ++i) {\n var f = /** @type {function()} */ (executingBatch[i]);\n executingBatch[i] = null; // free memory\n try {\n f();\n } catch (error) {\n this.asyncThrow_(error);\n }\n }\n }\n // All jobs finished executing, so force scheduling a new batch next\n // time asyncExecute() is called.\n this.batch_ = null;\n };\n\n /**\n * @private\n * @param {*} exception\n */\n AsyncExecutor.prototype.asyncThrow_ = function(exception) {\n this.asyncExecuteFunction(function() { throw exception; });\n };\n\n /**\n * @enum {number}\n */\n var PromiseState = {\n /** The Promise is waiting for resolution. */\n PENDING: 0,\n\n /** The Promise has been resolved with a fulfillment value. */\n FULFILLED: 1,\n\n /** The Promise has been resolved with a rejection reason. */\n REJECTED: 2\n };\n\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {function(\n * function((TYPE|IThenable|Thenable|null)=),\n * function(*=))} executor\n * @constructor\n * @extends {Promise}\n * @template TYPE\n */\n var PolyfillPromise = function(executor) {\n /** @private {PromiseState} */\n this.state_ = PromiseState.PENDING;\n\n /**\n * The settled result of the Promise. Immutable once set with either a\n * fulfillment value or rejection reason.\n * @private {*}\n */\n this.result_ = undefined;\n\n /**\n * These functions must be asynchronously executed when this promise\n * settles.\n * @private {?Array}\n */\n this.onSettledCallbacks_ = [];\n\n /**\n * Whether the rejection has any handler when the promise is rejected.\n * @private {boolean}\n */\n this.isRejectionHandled_ = false;\n\n var resolveAndReject = this.createResolveAndReject_();\n try {\n executor(resolveAndReject.resolve, resolveAndReject.reject);\n } catch (e) {\n resolveAndReject.reject(e);\n }\n };\n\n\n /**\n * Create a pair of functions for resolving or rejecting this Promise.\n *\n *

After the resolve or reject function has been called once, later calls\n * do nothing.\n * @private\n * @return {{\n * resolve: function((TYPE|IThenable|Thenable|null)=),\n * reject: function(*=)\n * }}\n */\n PolyfillPromise.prototype.createResolveAndReject_ = function() {\n var thisPromise = this;\n var alreadyCalled = false;\n /**\n * @param {function(this:PolyfillPromise, T=)} method\n * @return {function(T=)}\n * @template T\n */\n function firstCallWins(method) {\n return function(/** T= */ x) {\n if (!alreadyCalled) {\n alreadyCalled = true;\n method.call(thisPromise, x);\n }\n };\n }\n return {\n resolve: firstCallWins(this.resolveTo_),\n reject: firstCallWins(this.reject_)\n };\n };\n\n\n /**\n * @private\n * @param {*=} value\n */\n PolyfillPromise.prototype.resolveTo_ = function(value) {\n if (value === this) {\n this.reject_(new TypeError('A Promise cannot resolve to itself'));\n } else if (value instanceof PolyfillPromise) {\n this.settleSameAsPromise_(/** @type {!PolyfillPromise} */ (value));\n } else if (isObject(value)) {\n this.resolveToNonPromiseObj_(/** @type {!Object} */ (value));\n } else {\n this.fulfill_(value);\n }\n };\n\n\n /**\n * @private\n * @param {!Object} obj\n * @suppress {strictMissingProperties} obj.then\n */\n PolyfillPromise.prototype.resolveToNonPromiseObj_ = function(obj) {\n var thenMethod = undefined;\n\n try {\n thenMethod = obj.then;\n } catch (error) {\n this.reject_(error);\n return;\n }\n if (typeof thenMethod == 'function') {\n this.settleSameAsThenable_(thenMethod, /** @type {!Thenable} */ (obj));\n } else {\n this.fulfill_(obj);\n }\n };\n\n\n /**\n * @param {*} value anything\n * @return {boolean}\n */\n function isObject(value) {\n switch (typeof value) {\n case 'object':\n return value != null;\n case 'function':\n return true;\n default:\n return false;\n }\n }\n\n /**\n * Reject this promise for the given reason.\n * @private\n * @param {*=} reason\n * @throws {!Error} if this promise is already fulfilled or rejected.\n */\n PolyfillPromise.prototype.reject_ = function(reason) {\n this.settle_(PromiseState.REJECTED, reason);\n };\n\n /**\n * Fulfill this promise with the given value.\n * @private\n * @param {!TYPE} value\n * @throws {!Error} when this promise is already fulfilled or rejected.\n */\n PolyfillPromise.prototype.fulfill_ = function(value) {\n this.settle_(PromiseState.FULFILLED, value);\n };\n\n /**\n * Fulfill or reject this promise with the given value/reason.\n * @private\n * @param {!PromiseState} settledState (FULFILLED or REJECTED)\n * @param {*} valueOrReason\n * @throws {!Error} when this promise is already fulfilled or rejected.\n */\n PolyfillPromise.prototype.settle_ = function(settledState, valueOrReason) {\n if (this.state_ != PromiseState.PENDING) {\n throw new Error(\n 'Cannot settle(' + settledState + ', ' + valueOrReason +\n '): Promise already settled in state' + this.state_);\n }\n this.state_ = settledState;\n this.result_ = valueOrReason;\n if (this.state_ === PromiseState.REJECTED) {\n this.scheduleUnhandledRejectionCheck_();\n }\n this.executeOnSettledCallbacks_();\n };\n\n PolyfillPromise.prototype.scheduleUnhandledRejectionCheck_ = function() {\n var self = this;\n nativeSetTimeout(function() {\n if (self.notifyUnhandledRejection_()) {\n // console may not exist on IE 9.\n var nativeConsole = $jscomp.global['console'];\n if (typeof nativeConsole !== 'undefined') {\n nativeConsole.error(self.result_);\n }\n }\n }, 1);\n };\n\n /**\n * Dispatches `unhandledrejection` event if the rejection is unhandled.\n * @return {boolean} False means the fallback handler does not need to run. It\n * is either because rejection handlers are detected or one of the\n * `unhandledjrection` event handlers call `preventDefault()`.\n * True otherwise.\n * @private\n * @suppress {missingProperties}\n */\n PolyfillPromise.prototype.notifyUnhandledRejection_ = function() {\n if (this.isRejectionHandled_) {\n return false;\n }\n var NativeCustomEvent = $jscomp.global['CustomEvent'];\n var NativeEvent = $jscomp.global['Event'];\n var nativeDispatchEvent = $jscomp.global['dispatchEvent'];\n if (typeof nativeDispatchEvent === 'undefined') {\n return true;\n }\n\n var event;\n if (typeof NativeCustomEvent === 'function') {\n event =\n new NativeCustomEvent('unhandledrejection', {cancelable: true});\n } else if (typeof NativeEvent === 'function') {\n // CustomEvent is not available in FireFox < 48 in workers.\n // https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent\n event = new NativeEvent('unhandledrejection', {cancelable: true});\n } else {\n // IE does not support CustomEvent constructor.\n event = $jscomp.global['document'].createEvent('CustomEvent');\n event.initCustomEvent(\n 'unhandledrejection', /** canBubbleArg */ false,\n /** cancelableArg */ true, event);\n }\n event.promise = this;\n event.reason = this.result_;\n\n return nativeDispatchEvent(event);\n };\n\n PolyfillPromise.prototype.executeOnSettledCallbacks_ = function() {\n if (this.onSettledCallbacks_ != null) {\n for (var i = 0; i < this.onSettledCallbacks_.length; ++i) {\n asyncExecutor.asyncExecute(this.onSettledCallbacks_[i]);\n }\n this.onSettledCallbacks_ = null; // free memory\n }\n };\n\n /**\n * All promise async execution is managed by a single executor for the\n * sake of efficiency.\n * @const {!AsyncExecutor}\n */\n var asyncExecutor = new AsyncExecutor();\n\n /**\n * Arrange to settle this promise in the same way as the given thenable.\n * @private\n * @param {!PolyfillPromise} promise\n */\n PolyfillPromise.prototype.settleSameAsPromise_ = function(promise) {\n var methods = this.createResolveAndReject_();\n\n // Calling then() would create an unnecessary extra promise.\n promise.callWhenSettled_(methods.resolve, methods.reject);\n };\n\n /**\n * Arrange to settle this promise in the same way as the given thenable.\n * @private\n * @param {function(\n * function((TYPE|IThenable|Thenable|null)=),\n * function(*=))\n * } thenMethod\n * @param {!Thenable} thenable\n */\n PolyfillPromise.prototype.settleSameAsThenable_ = function(\n thenMethod, thenable) {\n var methods = this.createResolveAndReject_();\n\n // Don't trust an unknown thenable implementation not to throw exceptions.\n try {\n thenMethod.call(thenable, methods.resolve, methods.reject);\n } catch (error) {\n methods.reject(error);\n }\n };\n\n /** @override */\n PolyfillPromise.prototype.then = function(onFulfilled, onRejected) {\n var resolveChild;\n var rejectChild;\n var childPromise = new PolyfillPromise(function(resolve, reject) {\n resolveChild = resolve;\n rejectChild = reject;\n });\n function createCallback(paramF, defaultF) {\n // The spec says to ignore non-function values for onFulfilled and\n // onRejected\n if (typeof paramF == 'function') {\n return function(x) {\n try {\n resolveChild(paramF(x));\n } catch (error) {\n rejectChild(error);\n }\n };\n } else {\n return defaultF;\n }\n }\n\n this.callWhenSettled_(\n createCallback(onFulfilled, resolveChild),\n createCallback(onRejected, rejectChild));\n return childPromise;\n };\n\n /** @override */\n PolyfillPromise.prototype.catch = function(onRejected) {\n return this.then(undefined, onRejected);\n };\n\n\n PolyfillPromise.prototype.callWhenSettled_ = function(\n onFulfilled, onRejected) {\n var /** !PolyfillPromise */ thisPromise = this;\n function callback() {\n switch (thisPromise.state_) {\n case PromiseState.FULFILLED:\n onFulfilled(thisPromise.result_);\n break;\n case PromiseState.REJECTED:\n onRejected(thisPromise.result_);\n break;\n default:\n throw new Error('Unexpected state: ' + thisPromise.state_);\n }\n }\n if (this.onSettledCallbacks_ == null) {\n // we've already settled\n asyncExecutor.asyncExecute(callback);\n } else {\n this.onSettledCallbacks_.push(callback);\n }\n this.isRejectionHandled_ = true;\n };\n\n // called locally, so give it a name\n function resolvingPromise(opt_value) {\n if (opt_value instanceof PolyfillPromise) {\n return opt_value;\n } else {\n return new PolyfillPromise(function(resolve, reject) {\n resolve(opt_value);\n });\n }\n }\n PolyfillPromise['resolve'] = resolvingPromise;\n\n\n PolyfillPromise['reject'] = function(opt_reason) {\n return new PolyfillPromise(function(resolve, reject) {\n reject(opt_reason);\n });\n };\n\n\n PolyfillPromise['race'] = function(thenablesOrValues) {\n return new PolyfillPromise(function(resolve, reject) {\n var /** !Iterator<*> */ iterator =\n $jscomp.makeIterator(thenablesOrValues);\n for (var /** !IIterableResult<*> */ iterRec = iterator.next();\n !iterRec.done;\n iterRec = iterator.next()) {\n // Using resolvingPromise() allows us to treat all elements the same\n // way.\n // NOTE: resolvingPromise(promise) always returns the argument\n // unchanged.\n // Using .callWhenSettled_() instead of .then() avoids creating an\n // unnecessary extra promise.\n resolvingPromise(iterRec.value).callWhenSettled_(resolve, reject);\n }\n });\n };\n\n\n PolyfillPromise['all'] = function(thenablesOrValues) {\n var /** !Iterator<*> */ iterator = $jscomp.makeIterator(thenablesOrValues);\n var /** !IIterableResult<*> */ iterRec = iterator.next();\n\n if (iterRec.done) {\n return resolvingPromise([]);\n } else {\n return new PolyfillPromise(function(resolveAll, rejectAll) {\n var resultsArray = [];\n var unresolvedCount = 0;\n\n function onFulfilled(i) {\n return function(ithResult) {\n resultsArray[i] = ithResult;\n unresolvedCount--;\n if (unresolvedCount == 0) {\n resolveAll(resultsArray);\n }\n };\n }\n\n do {\n resultsArray.push(undefined);\n unresolvedCount++;\n // Using resolvingPromise() allows us to treat all elements the same\n // way.\n // NOTE: resolvingPromise(promise) always returns the argument\n // unchanged. Using .callWhenSettled_() instead of .then() avoids\n // creating an unnecessary extra promise.\n resolvingPromise(iterRec.value)\n .callWhenSettled_(\n onFulfilled(resultsArray.length - 1), rejectAll);\n iterRec = iterator.next();\n } while (!iterRec.done);\n });\n }\n };\n\n return PolyfillPromise;\n}, 'es6', 'es3');\n", + "js/es6/reflect.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Rolls together all ES6 Reflect polyfills.\n */\n'require es6/reflect/apply';\n'require es6/reflect/construct';\n'require es6/reflect/defineproperty';\n'require es6/reflect/deleteproperty';\n'require es6/reflect/get';\n'require es6/reflect/getownpropertydescriptor';\n'require es6/reflect/getprototypeof';\n'require es6/reflect/has';\n'require es6/reflect/isextensible';\n'require es6/reflect/ownkeys';\n'require es6/reflect/preventextensions';\n'require es6/reflect/set';\n'require es6/reflect/setprototypeof';\n", +-"js/es6/reflect/apply.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.apply', function(orig) {\n if (orig) return orig;\n var apply = Function.prototype.apply;\n\n /**\n * Polyfill for Reflect.apply() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/apply\n *\n * Calls a target function with arguments as specified, just\n * as Function.prototype.apply.\n *\n * @param {function(this: THIS, ...*): RESULT} target The function to call.\n * @param {THIS} thisArg The 'this' argument.\n * @param {!Array} argList The arguments as a list.\n * @return {RESULT} The result of the function call.\n * @template THIS, RESULT\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(target, thisArg, argList) {\n return apply.call(target, thisArg, argList);\n };\n return polyfill;\n}, 'es6', 'es3');\n", ++"js/es6/reflect/apply.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.apply', function(orig) {\n if (orig) return orig;\n var apply = Function.prototype.apply;\n\n /**\n * Polyfill for Reflect.apply() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/apply\n *\n * Calls a target function with arguments as specified, just\n * as Function.prototype.apply.\n *\n * @param {function(this: THIS, ...*): RESULT} target The function to call.\n * @param {THIS} thisArg The 'this' argument.\n * @param {!Array} argList The arguments as a list.\n * @return {RESULT} The result of the function call.\n * @template THIS, RESULT\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(target, thisArg, argList) {\n return apply.call(target, thisArg, argList);\n };\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/reflect/construct.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n\n'require es6/util/construct';\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n$jscomp.polyfill('Reflect.construct', function(orig) {\n // NOTE: This is just Reflect.construct if it's present and functional.\n return $jscomp.construct;\n}, 'es6', 'es3');\n", +-"js/es6/reflect/defineproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.defineProperty', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.defineProperty() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty\n *\n * Version of Object.defineProperty that returns a boolean.\n *\n * @param {!Object} target Target on which to define the property.\n * @param {string} propertyKey Name of the property to define.\n * @param {!ObjectPropertyDescriptor} attributes Property attributes.\n * @return {boolean} Whether the property was defined.\n */\n var polyfill = function(target, propertyKey, attributes) {\n try {\n Object.defineProperty(target, propertyKey, attributes);\n var desc = Object.getOwnPropertyDescriptor(target, propertyKey);\n if (!desc) return false;\n return desc.configurable === (attributes.configurable || false) &&\n desc.enumerable === (attributes.enumerable || false) &&\n ('value' in desc ?\n desc.value === attributes.value &&\n desc.writable === (attributes.writable || false) :\n desc.get === attributes.get &&\n desc.set === attributes.set);\n } catch (err) {\n return false;\n }\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: Requires Object.defineProperty\n", +-"js/es6/reflect/deleteproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.deleteProperty', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.deleteProperty() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty\n *\n * Applies the 'delete' operator as a function.\n *\n * @param {!Object} target Target on which to delete the property.\n * @param {string} propertyKey Name of the property to delete.\n * @return {boolean} Whether the property was deleted.\n */\n var polyfill = function(target, propertyKey) {\n if (!$jscomp.owns(target, propertyKey)) {\n return true;\n }\n try {\n return delete target[propertyKey];\n } catch (err) {\n return false;\n }\n };\n return polyfill;\n}, 'es6', 'es3');\n", +-"js/es6/reflect/get.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/finddescriptor';\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.get', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.get() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get\n *\n * Applies the 'getprop' operator as a function.\n *\n * @param {!Object} target Target on which to get the property.\n * @param {string} propertyKey Name of the property to get.\n * @param {!Object=} opt_receiver An optional 'this' to use for a getter.\n * @return {*} The value of the property.\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(target, propertyKey, opt_receiver) {\n if (arguments.length <= 2) {\n return target[propertyKey];\n }\n var property = $jscomp.findDescriptor(target, propertyKey);\n if (property) {\n return property.get ? property.get.call(opt_receiver) : property.value;\n }\n return undefined;\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: findDescriptor requires getPrototypeOf\n", ++"js/es6/reflect/defineproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.defineProperty', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.defineProperty() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty\n *\n * Version of Object.defineProperty that returns a boolean.\n *\n * @param {!Object} target Target on which to define the property.\n * @param {string} propertyKey Name of the property to define.\n * @param {!ObjectPropertyDescriptor} attributes Property attributes.\n * @return {boolean} Whether the property was defined.\n */\n var polyfill = function(target, propertyKey, attributes) {\n try {\n Object.defineProperty(target, propertyKey, attributes);\n var desc = Object.getOwnPropertyDescriptor(target, propertyKey);\n if (!desc) return false;\n return desc.configurable === (attributes.configurable || false) &&\n desc.enumerable === (attributes.enumerable || false) &&\n ('value' in desc ?\n desc.value === attributes.value &&\n desc.writable === (attributes.writable || false) :\n desc.get === attributes.get &&\n desc.set === attributes.set);\n } catch (err) {\n return false;\n }\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: Requires Object.defineProperty\n", ++"js/es6/reflect/deleteproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.deleteProperty', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.deleteProperty() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty\n *\n * Applies the 'delete' operator as a function.\n *\n * @param {!Object} target Target on which to delete the property.\n * @param {string} propertyKey Name of the property to delete.\n * @return {boolean} Whether the property was deleted.\n */\n var polyfill = function(target, propertyKey) {\n if (!$jscomp.owns(target, propertyKey)) {\n return true;\n }\n try {\n return delete target[propertyKey];\n } catch (err) {\n return false;\n }\n };\n return polyfill;\n}, 'es6', 'es3');\n", ++"js/es6/reflect/get.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/finddescriptor';\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.get', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.get() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get\n *\n * Applies the 'getprop' operator as a function.\n *\n * @param {!Object} target Target on which to get the property.\n * @param {string} propertyKey Name of the property to get.\n * @param {!Object=} opt_receiver An optional 'this' to use for a getter.\n * @return {*} The value of the property.\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(target, propertyKey, opt_receiver) {\n if (arguments.length <= 2) {\n return target[propertyKey];\n }\n var property = $jscomp.findDescriptor(target, propertyKey);\n if (property) {\n return property.get ? property.get.call(opt_receiver) : property.value;\n }\n return undefined;\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: findDescriptor requires getPrototypeOf\n", + "js/es6/reflect/getownpropertydescriptor.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.getOwnPropertyDescriptor', function(orig) {\n // NOTE: We don't make guarantees about correct throwing behavior.\n // Non-object arguments should be prevented by the type checker.\n return orig || Object.getOwnPropertyDescriptor;\n}, 'es6', 'es5'); // ES5: Requires Object.getOwnPropertyDescriptor\n", + "js/es6/reflect/getprototypeof.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.getPrototypeOf', function(orig) {\n // NOTE: We don't make guarantees about correct throwing behavior.\n // Non-object arguments should be prevented by the type checker.\n return orig || Object.getPrototypeOf;\n}, 'es6', 'es5'); // ES5: Requires Object.getPrototypeOf\n", +-"js/es6/reflect/has.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.has', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.has() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/has\n *\n * Applies the 'in' operator as a function.\n *\n * @param {!Object} target\n * @param {*} propertyKey\n * @return {boolean}\n */\n var polyfill = function(target, propertyKey) {\n return propertyKey in target;\n };\n return polyfill;\n}, 'es6', 'es3');\n", ++"js/es6/reflect/has.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.has', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.has() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/has\n *\n * Applies the 'in' operator as a function.\n *\n * @param {!Object} target\n * @param {*} propertyKey\n * @return {boolean}\n */\n var polyfill = function(target, propertyKey) {\n return propertyKey in target;\n };\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/reflect/isextensible.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/defines';\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.isExtensible', function(orig) {\n if (orig) return orig;\n if ($jscomp.ASSUME_ES5 || typeof Object.isExtensible == 'function') {\n return Object.isExtensible;\n }\n return function() { return true; };\n}, 'es6', 'es3');\n", +-"js/es6/reflect/ownkeys.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/reflect/reflect';\n'require es6/object/getownpropertysymbols';\n\n\n$jscomp.polyfill('Reflect.ownKeys',\n /**\n * @param {*} orig\n * @return {*}\n * @suppress {reportUnknownTypes}\n */\n function(orig) {\n if (orig) return orig;\n\n var symbolPrefix = 'jscomp_symbol_';\n function isSymbol(key) {\n return key.substring(0, symbolPrefix.length) == symbolPrefix;\n }\n\n /**\n * Polyfill for Reflect.ownKeys() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys\n *\n * Returns an array of the object's own property keys.\n *\n * @param {!Object} target\n * @return {!Array<(string|symbol)>}\n */\n var polyfill = function(target) {\n var keys = [];\n var names = Object.getOwnPropertyNames(target);\n var symbols = Object.getOwnPropertySymbols(target);\n for (var i = 0; i < names.length; i++) {\n (isSymbol(names[i]) ? symbols : keys).push(names[i]);\n }\n return keys.concat(symbols);\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: Requires Object.getOwnPropertyNames\n", +-"js/es6/reflect/preventextensions.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/defines';\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.preventExtensions', function(orig) {\n if (orig) return orig;\n\n if (!($jscomp.ASSUME_ES5 || typeof Object.preventExtensions == 'function')) {\n return function() { return false; };\n }\n\n /**\n * Polyfill for Reflect.preventExtensions() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions\n *\n * Same function as Object.preventExtensions (the spec says\n * to throw if the input is not an object, but jscompiler will\n * fail to typecheck, so there's no reason to distinguish here).\n *\n * @param {!Object} target\n * @return {boolean}\n */\n var polyfill = function(target) {\n Object.preventExtensions(target);\n return !Object.isExtensible(target);\n };\n return polyfill;\n}, 'es6', 'es3');\n", ++"js/es6/reflect/ownkeys.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/reflect/reflect';\n'require es6/object/getownpropertysymbols';\n\n\n$jscomp.polyfill('Reflect.ownKeys',\n /**\n * @param {*} orig\n * @return {*}\n * @suppress {reportUnknownTypes}\n */\n function(orig) {\n if (orig) return orig;\n\n var symbolPrefix = 'jscomp_symbol_';\n function isSymbol(key) {\n return key.substring(0, symbolPrefix.length) == symbolPrefix;\n }\n\n /**\n * Polyfill for Reflect.ownKeys() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys\n *\n * Returns an array of the object's own property keys.\n *\n * @param {!Object} target\n * @return {!Array<(string|symbol)>}\n */\n var polyfill = function(target) {\n var keys = [];\n var names = Object.getOwnPropertyNames(target);\n var symbols = Object.getOwnPropertySymbols(target);\n for (var i = 0; i < names.length; i++) {\n (isSymbol(names[i]) ? symbols : keys).push(names[i]);\n }\n return keys.concat(symbols);\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: Requires Object.getOwnPropertyNames\n", ++"js/es6/reflect/preventextensions.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/defines';\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.preventExtensions', function(orig) {\n if (orig) return orig;\n\n if (!($jscomp.ASSUME_ES5 || typeof Object.preventExtensions == 'function')) {\n return function() { return false; };\n }\n\n /**\n * Polyfill for Reflect.preventExtensions() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions\n *\n * Same function as Object.preventExtensions (the spec says\n * to throw if the input is not an object, but jscompiler will\n * fail to typecheck, so there's no reason to distinguish here).\n *\n * @param {!Object} target\n * @return {boolean}\n */\n var polyfill = function(target) {\n Object.preventExtensions(target);\n return !Object.isExtensible(target);\n };\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/reflect/reflect.js":"/*\n * Copyright 2020 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n// This must execute before any Reflect.* static method polyfills.\n$jscomp.polyfill('Reflect', function(orig) {\n if (orig) return orig;\n return {};\n}, 'es6', 'es3');\n", +-"js/es6/reflect/set.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/isextensible';\n'require es6/reflect/reflect';\n'require util/finddescriptor';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.set', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.set() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set\n *\n * Applies the 'setprop' operator as a function.\n *\n * @param {!Object} target Target on which to get the property.\n * @param {string} propertyKey Name of the property to get.\n * @param {*} value Value to set.\n * @param {!Object=} opt_receiver An optional 'this' to use for a setter.\n * @return {boolean} Whether setting was successful.\n */\n var polyfill = function(target, propertyKey, value, opt_receiver) {\n var property = $jscomp.findDescriptor(target, propertyKey);\n if (!property) {\n if (Reflect.isExtensible(target)) {\n target[propertyKey] = value;\n return true;\n }\n return false;\n }\n if (property.set) {\n property.set.call(arguments.length > 3 ? opt_receiver : target, value);\n return true;\n } else if (property.writable && !Object.isFrozen(target)) {\n target[propertyKey] = value;\n return true;\n }\n return false;\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: findDescriptor requires getPrototypeOf\n", ++"js/es6/reflect/set.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/isextensible';\n'require es6/reflect/reflect';\n'require util/finddescriptor';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.set', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.set() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set\n *\n * Applies the 'setprop' operator as a function.\n *\n * @param {!Object} target Target on which to get the property.\n * @param {string} propertyKey Name of the property to get.\n * @param {*} value Value to set.\n * @param {!Object=} opt_receiver An optional 'this' to use for a setter.\n * @return {boolean} Whether setting was successful.\n */\n var polyfill = function(target, propertyKey, value, opt_receiver) {\n var property = $jscomp.findDescriptor(target, propertyKey);\n if (!property) {\n if (Reflect.isExtensible(target)) {\n target[propertyKey] = value;\n return true;\n }\n return false;\n }\n if (property.set) {\n property.set.call(arguments.length > 3 ? opt_receiver : target, value);\n return true;\n } else if (property.writable && !Object.isFrozen(target)) {\n target[propertyKey] = value;\n return true;\n }\n return false;\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: findDescriptor requires getPrototypeOf\n", + "js/es6/reflect/setprototypeof.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/polyfill';\n'require es6/reflect/reflect';\n'require es6/util/setprototypeof';\n\n\n$jscomp.polyfill(\n 'Reflect.setPrototypeOf',\n /**\n * These annotations are intended to match the signature of\n * $jscomp.polyfill(). Being more specific makes the compiler unhappy.\n * @suppress {reportUnknownTypes}\n * @param {?*} orig\n * @return {*}\n */\n function(orig) {\n if (orig) {\n return orig;\n } else if ($jscomp.setPrototypeOf) {\n /** @const {!function(!Object,?Object):!Object} */\n var setPrototypeOf = $jscomp.setPrototypeOf;\n /**\n * @param {!Object} target\n * @param {?Object} proto\n * @return {boolean}\n */\n var polyfill = function(target, proto) {\n try {\n setPrototypeOf(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n };\n return polyfill;\n } else {\n // it isn't possible to implement this method\n return null;\n }\n },\n 'es6', 'es5');\n", + "js/es6/set.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/conformance';\n'require es6/map';\n'require es6/symbol';\n'require util/defines';\n'require util/polyfill';\n\n$jscomp.polyfill('Set',\n /**\n * @param {*} NativeSet\n * @return {*}\n * @suppress {reportUnknownTypes}\n */\n function(NativeSet) {\n\n /**\n * Checks conformance of the existing Set.\n * @return {boolean} True if the browser's implementation conforms.\n * @suppress {missingProperties} \"entries\" unknown prototype\n */\n function isConformant() {\n if ($jscomp.ASSUME_NO_NATIVE_SET ||\n !NativeSet ||\n typeof NativeSet != \"function\" ||\n !NativeSet.prototype.entries ||\n typeof Object.seal != 'function') {\n return false;\n }\n // Some implementations don't support constructor arguments.\n try {\n NativeSet = /** @type {function(new: Set, !Iterator=)} */ (NativeSet);\n var value = Object.seal({x: 4});\n var set = new NativeSet($jscomp.makeIterator([value]));\n if (!set.has(value) || set.size != 1 || set.add(value) != set ||\n set.size != 1 || set.add({x: 4}) != set || set.size != 2) {\n return false;\n }\n var iter = set.entries();\n var item = iter.next();\n if (item.done || item.value[0] != value || item.value[1] != value) {\n return false;\n }\n item = iter.next();\n if (item.done || item.value[0] == value || item.value[0].x != 4 ||\n item.value[1] != item.value[0]) {\n return false;\n }\n return iter.next().done;\n } catch (err) { // This should hopefully never happen, but let's be safe.\n return false;\n }\n }\n\n if ($jscomp.USE_PROXY_FOR_ES6_CONFORMANCE_CHECKS) {\n if (NativeSet && $jscomp.ES6_CONFORMANCE) return NativeSet;\n } else {\n if (isConformant()) return NativeSet;\n }\n\n /**\n * Polyfill for the global Map data type.\n * @constructor\n * @struct\n * @extends {Set}\n * @implements {Iterable}\n * @template KEY, VALUE\n * @param {!Iterable|!Array|null=} opt_iterable\n * Optional data to populate the set.\n */\n // TODO(sdh): fix param type if heterogeneous arrays ever supported.\n var PolyfillSet = function(opt_iterable) {\n /** @private @const {!Map} */\n this.map_ = new Map();\n if (opt_iterable) {\n var iter = $jscomp.makeIterator(opt_iterable);\n var entry;\n while (!(entry = iter.next()).done) {\n var item = /** @type {!IIterableResult} */ (entry).value;\n this.add(item);\n }\n }\n // Note: this property should not be changed. If we're willing to give up\n // ES3 support, we could define it as a property directly. It should be\n // marked readonly if such an annotation ever comes into existence.\n this.size = this.map_.size;\n };\n\n\n /** @override */\n PolyfillSet.prototype.add = function(value) {\n // normalize -0/+0 to +0\n value = value === 0 ? 0 : value;\n this.map_.set(value, value);\n this.size = this.map_.size;\n return this;\n };\n\n\n /** @override */\n PolyfillSet.prototype.delete = function(value) {\n var result = this.map_.delete(value);\n this.size = this.map_.size;\n return result;\n };\n\n\n /** @override */\n PolyfillSet.prototype.clear = function() {\n this.map_.clear();\n this.size = 0;\n };\n\n\n /** @override */\n PolyfillSet.prototype.has = function(value) {\n return this.map_.has(value);\n };\n\n\n /** @override */\n PolyfillSet.prototype.entries = function() {\n return this.map_.entries();\n };\n\n\n /** @override */\n PolyfillSet.prototype.values = function() {\n return this.map_.values();\n };\n\n\n /** @override */\n PolyfillSet.prototype.keys = PolyfillSet.prototype.values;\n\n\n /** @type {?} */ (PolyfillSet.prototype)[Symbol.iterator] =\n PolyfillSet.prototype.values;\n\n\n /** @override */\n PolyfillSet.prototype.forEach = function(callback, opt_thisArg) {\n var set = this;\n this.map_.forEach(function(value) {\n return callback.call(/** @type {?} */ (opt_thisArg), value, value, set);\n });\n };\n\n\n return PolyfillSet;\n}, 'es6', 'es3');\n", + "js/es6/string.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Brings in all ES6 String polyfills.\n * @suppress {uselessCode}\n */\n'require es6/string/codepointat';\n'require es6/string/endswith';\n'require es6/string/fromcodepoint';\n'require es6/string/includes';\n'require es6/string/matchall';\n'require es6/string/padend';\n'require es6/string/padstart';\n'require es6/string/raw';\n'require es6/string/repeat';\n'require es6/string/replaceall';\n'require es6/string/startswith';\n'require es6/string/trimend';\n'require es6/string/trimstart';\n", +@@ -680,9 +680,9 @@ function $Z(){$Z=function(){};lra=ir("class","const","enum","export","extends"," + "js/es6/string/fromcodepoint.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('String.fromCodePoint', function(orig) {\n if (orig) return orig;\n\n /**\n * Creates a new string from the given codepoints.\n *\n *

Polyfills the static function String.fromCodePoint().\n *\n * @param {...number} var_args\n * @return {string}\n */\n var polyfill = function(var_args) {\n // Note: this is taken from v8's harmony-string.js StringFromCodePoint.\n var result = '';\n for (var i = 0; i < arguments.length; i++) {\n var code = Number(arguments[i]);\n if (code < 0 || code > 0x10FFFF || code !== Math.floor(code)) {\n throw new RangeError('invalid_code_point ' + code);\n }\n if (code <= 0xFFFF) {\n result += String.fromCharCode(code);\n } else {\n code -= 0x10000;\n result += String.fromCharCode((code >>> 10) & 0x3FF | 0xD800);\n result += String.fromCharCode(code & 0x3FF | 0xDC00);\n }\n }\n return result;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/string/includes.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.includes', function(orig) {\n if (orig) return orig;\n\n /**\n * Searches for a substring, starting at the given position.\n *\n *

Polyfills the instance method String.prototype.includes().\n *\n * @this {string}\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n */\n var polyfill = function(searchString, opt_position) {\n 'use strict';\n var string = $jscomp.checkStringArgs(this, searchString, 'includes');\n return string.indexOf(searchString, opt_position || 0) !== -1;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/string/matchall.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require es6/symbol';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.matchAll', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an iterator of all results matching a string against a\n * regular expression, including capturing groups.\n *\n * Polyfills the instance method String.prototype.matchAll().\n *\n * The spec calls for any non-RegExp object to be automatically converted,\n * so we accept anything here, even though our externs only allow\n * RegExp|string.\n *\n * @this {string}\n * @param {*} regexp\n * A regular expression object. If a non-RegExp object obj is passed,\n * it is implicitly converted to a RegExp with a global tag by using\n * new RegExp(obj).\n * @return {!IteratorIterable}\n */\n var polyfill = function(regexp) {\n if (regexp instanceof RegExp && !regexp.global) {\n throw new TypeError('RegExp passed into String.prototype.matchAll() must have global tag.');\n }\n var /** !RegExp */ regexCopy =\n new RegExp(regexp, regexp instanceof RegExp ? undefined : 'g');\n var matchString = this;\n var /** boolean */ finished = false;\n var matchAllIterator = {\n next: function() {\n if (finished) {\n return {value: undefined, done: true};\n }\n\n var match = regexCopy.exec(matchString);\n if (!match) {\n finished = true;\n return {value: undefined, done: true};\n }\n if (match[0] === '') {\n /**\n * See https://262.ecma-international.org/10.0/#sec-advancestringindex\n * and\n * https://github.com/ljharb/String.prototype.matchAll/blob/5e1a234e65d03e5312ea1d3cb617444f4ffa6e23/helpers/RegExpStringIterator.js#L71\n *\n * matchAll() is not allowed to get \"stuck\" returning an empty\n * string match infinitely, so we must make sure lastIndex always\n * increases.\n *\n * Also assume that `fullUnicode === false`. Any browser that supports\n * unicode regexes should not need this polyfill.\n */\n regexCopy.lastIndex += 1;\n }\n\n return {value: match, done: false};\n }\n };\n matchAllIterator[Symbol.iterator] = function() { return matchAllIterator; };\n return /**@type {!IteratorIterable}> */ (matchAllIterator);\n };\n return polyfill;\n}, 'es_2020', 'es3');\n", +-"js/es6/string/padend.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/stringpadding';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.padEnd', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills String.prototype.padEnd.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd\n *\n * @this {string}\n * @param {number} targetLength\n * @param {string=} opt_padString\n * @return {string}\n */\n var padEnd = function(targetLength, opt_padString) {\n var string = $jscomp.checkStringArgs(this, null, 'padStart');\n var padLength = targetLength - string.length;\n return string + $jscomp.stringPadding(opt_padString, padLength);\n };\n\n return padEnd;\n}, 'es8', 'es3');\n", +-"js/es6/string/padstart.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n'require util/stringpadding';\n\n$jscomp.polyfill('String.prototype.padStart', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills String.prototype.padStart.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart\n *\n * @this {string}\n * @param {number} targetLength\n * @param {string=} opt_padString\n * @return {string}\n */\n var padStart = function(targetLength, opt_padString) {\n var string = $jscomp.checkStringArgs(this, null, 'padStart');\n var padLength = targetLength - string.length;\n return $jscomp.stringPadding(opt_padString, padLength) + string;\n };\n\n return padStart;\n}, 'es8', 'es3');\n", +-"js/es6/string/raw.js":"/*\n * Copyright 2021 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview String.raw polyfill.\n * @suppress {uselessCode}\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('String.raw', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills String.raw.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw\n *\n * @param {!ITemplateArray} strings List of string fragments to concatenate.\n * @param {...*} var_args Values to go between string fragments.\n * @return {string}\n */\n const stringRaw = function(strings, var_args) {\n if (strings == null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n const raw = strings.raw;\n const rawlen = raw.length;\n let result = \"\";\n for (let i = 0; i < rawlen; ++i) {\n result += raw[i];\n if ((i + 1) < rawlen && (i + 1) < arguments.length) {\n result += String(arguments[i+1]);\n }\n }\n return result;\n };\n\n return stringRaw;\n}, 'es6', 'es3');\n", ++"js/es6/string/padend.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/stringpadding';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.padEnd', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills String.prototype.padEnd.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd\n *\n * @this {string}\n * @param {number} targetLength\n * @param {string=} opt_padString\n * @return {string}\n */\n var padEnd = function(targetLength, opt_padString) {\n var string = $jscomp.checkStringArgs(this, null, 'padStart');\n var padLength = targetLength - string.length;\n return string + $jscomp.stringPadding(opt_padString, padLength);\n };\n\n return padEnd;\n}, 'es8', 'es3');\n", ++"js/es6/string/padstart.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n'require util/stringpadding';\n\n$jscomp.polyfill('String.prototype.padStart', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills String.prototype.padStart.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart\n *\n * @this {string}\n * @param {number} targetLength\n * @param {string=} opt_padString\n * @return {string}\n */\n var padStart = function(targetLength, opt_padString) {\n var string = $jscomp.checkStringArgs(this, null, 'padStart');\n var padLength = targetLength - string.length;\n return $jscomp.stringPadding(opt_padString, padLength) + string;\n };\n\n return padStart;\n}, 'es8', 'es3');\n", ++"js/es6/string/raw.js":"/*\n * Copyright 2021 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview String.raw polyfill.\n * @suppress {uselessCode}\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('String.raw', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills String.raw.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw\n *\n * @param {!ITemplateArray} strings List of string fragments to concatenate.\n * @param {...*} var_args Values to go between string fragments.\n * @return {string}\n */\n const stringRaw = function(strings, var_args) {\n if (strings == null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n const raw = strings.raw;\n const rawlen = raw.length;\n let result = \"\";\n for (let i = 0; i < rawlen; ++i) {\n result += raw[i];\n if ((i + 1) < rawlen && (i + 1) < arguments.length) {\n result += String(arguments[i+1]);\n }\n }\n return result;\n };\n\n return stringRaw;\n}, 'es6', 'es3');\n", + "js/es6/string/repeat.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.repeat', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns a new string repeated the given number of times.\n *\n *

Polyfills the instance method String.prototype.repeat().\n *\n * @this {string}\n * @param {number} copies\n * @return {string}\n */\n var polyfill = function(copies) {\n 'use strict';\n var string = $jscomp.checkStringArgs(this, null, 'repeat');\n if (copies < 0 || copies > 0x4FFFFFFF) { // impose a 1GB limit\n throw new RangeError('Invalid count value');\n }\n copies = copies | 0; // cast to a signed integer.\n var result = '';\n while (copies) {\n if (copies & 1) result += string;\n if ((copies >>>= 1)) string += string;\n }\n return result;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/string/replaceall.js":"/*\n * Copyright 2021 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Creates polyfill for `String.prototype.replaceAll` being\n * added with ES2021. https://tc39.es/ecma262/#sec-string.prototype.replaceall\n * @suppress {uselessCode}\n */\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.replaceAll', function(orig) {\n if (orig) return orig;\n\n /**\n * Escapes characters in the string that are not safe to use in a RegExp.\n * @param {string|null} s\n * @return {string}\n */\n function regExpEscape(s) {\n return String(s)\n .replace(/([-()\\[\\]{}+?*.$\\^|,:#Polyfills the instance method String.prototype.startsWith().\n *\n * @this {string}\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n */\n var polyfill = function(searchString, opt_position) {\n 'use strict';\n var string = $jscomp.checkStringArgs(this, searchString, 'startsWith');\n searchString = searchString + '';\n var strLen = string.length;\n var searchLen = searchString.length;\n var i = Math.max(\n 0,\n Math.min(/** @type {number} */ (opt_position) | 0, string.length));\n var j = 0;\n while (j < searchLen && i < strLen) {\n if (string[i++] != searchString[j++]) return false;\n }\n return j >= searchLen;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", +@@ -695,7 +695,7 @@ function $Z(){$Z=function(){};lra=ir("class","const","enum","export","extends"," + "js/es6/util/arrayfromiterable.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Polyfill for array destructuring.\n */\n'require es6/util/makeiterator';\n'require es6/util/arrayfromiterator';\n\n\n/**\n * Copies the values from an Iterable into an Array.\n * @param {string|!Array|!Iterable|!Arguments} iterable\n * @return {!Array}\n * @template T\n */\n$jscomp.arrayFromIterable = function(iterable) {\n if (iterable instanceof Array) {\n return iterable;\n } else {\n return $jscomp.arrayFromIterator($jscomp.makeIterator(iterable));\n }\n};\n", + "js/es6/util/arrayfromiterator.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Polyfill for array destructuring.\n */\n'require base';\n\n\n/**\n * Copies the values from an Iterator into an Array. The important difference\n * between this and $jscomp.arrayFromIterable is that if the iterator's\n * next() method has already been called one or more times, this method returns\n * only the values that haven't been yielded yet.\n * @param {!Iterator} iterator\n * @return {!Array}\n * @template T\n * @suppress {reportUnknownTypes}\n */\n$jscomp.arrayFromIterator = function(iterator) {\n var i;\n var arr = [];\n while (!(i = iterator.next()).done) {\n arr.push(i.value);\n }\n return arr;\n};\n", + "js/es6/util/arrayiterator.js":'/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Utility method for creating an iterator for Arrays.\n */\n\'require base\';\n\n/**\n * Returns an internal iterator from the given array.\n * @param {!IArrayLike} array\n * @return {function():!IIterableResult}\n * @template T\n */\n$jscomp.arrayIteratorImpl = function(array) {\n var index = 0;\n return function() {\n if (index < array.length) {\n return {\n done: false,\n value: array[index++],\n };\n } else {\n return {done: true};\n }\n };\n};\n\n/**\n * Returns an internal iterator from the given array.\n * @param {!Array} array\n * @return {!Iterator}\n * @template T\n */\n$jscomp.arrayIterator = function(array) {\n return /** @type {!Iterator} */ ({next: $jscomp.arrayIteratorImpl(array)});\n};\n\n', +-"js/es6/util/assign.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/owns';\n'require util/polyfill';\n'require util/shouldpolyfill';\n\n/**\n * Equivalent to the Object.assign() method, but guaranteed to be available for use in code\n * generated by the compiler.\n *\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n *\n * Copies values of all enumerable own properties from one or more\n * sources to the given target object, and returns the target.\n *\n * @final\n * @param {!Object} target The target object onto which to copy.\n * @param {...?Object} var_args The source objects.\n * @return {!Object} The target object is returned.\n */\n$jscomp.assign =\n ($jscomp.TRUST_ES6_POLYFILLS && typeof Object.assign == 'function') ?\n Object.assign :\n /**\n * @param {!Object} target\n * @param {...?Object} var_args\n * @return {!Object}\n * @suppress {reportUnknownTypes}\n */\n function(target, var_args) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n if (!source) continue;\n for (var key in source) {\n if ($jscomp.owns(source, key)) target[key] = source[key];\n }\n }\n return target;\n };\n", ++"js/es6/util/assign.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/owns';\n'require util/polyfill';\n'require util/shouldpolyfill';\n\n/**\n * Equivalent to the Object.assign() method, but guaranteed to be available for use in code\n * generated by the compiler.\n *\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n *\n * Copies values of all enumerable own properties from one or more\n * sources to the given target object, and returns the target.\n *\n * @final\n * @param {!Object} target The target object onto which to copy.\n * @param {...?Object} var_args The source objects.\n * @return {!Object} The target object is returned.\n */\n$jscomp.assign =\n ($jscomp.TRUST_ES6_POLYFILLS && typeof Object.assign == 'function') ?\n Object.assign :\n /**\n * @param {!Object} target\n * @param {...?Object} var_args\n * @return {!Object}\n * @suppress {reportUnknownTypes}\n */\n function(target, var_args) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n if (!source) continue;\n for (var key in source) {\n if ($jscomp.owns(source, key)) target[key] = source[key];\n }\n }\n return target;\n };\n", + "js/es6/util/construct.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n\n'require util/objectcreate';\n'require util/polyfill';\n'require util/shouldpolyfill';\n\n/**\n * Find or create a method that implements the behavior of `Reflect.construct`.\n *\n * @return {!Function}\n */\n$jscomp.getConstructImplementation = function() {\n // Check for https://github.com/Microsoft/ChakraCore/issues/3217\n /** @return {boolean} */\n function reflectConstructWorks() {\n /** @constructor */ function Base() {}\n /** @constructor */ function Derived() {}\n new Base();\n Reflect.construct(Base, [], Derived);\n return new Base() instanceof Base;\n }\n\n if ($jscomp.TRUST_ES6_POLYFILLS && typeof Reflect != 'undefined' &&\n Reflect.construct) {\n if (reflectConstructWorks()) return Reflect.construct;\n var brokenConstruct = Reflect.construct;\n /**\n * @param {function(new: ?, ...?)} target The constructor to call.\n * @param {!Array} argList The arguments as a list.\n * @param {function(new: TARGET, ...?)=} opt_newTarget The constructor to\n * instantiate.\n * @return {TARGET} The result of the function call.\n * @template TARGET\n * @suppress {reportUnknownTypes}\n */\n var patchedConstruct = function(target, argList, opt_newTarget) {\n var out = brokenConstruct(target, argList);\n if (opt_newTarget) Reflect.setPrototypeOf(out, opt_newTarget.prototype);\n return out;\n };\n return patchedConstruct;\n }\n\n /**\n * @param {function(new: ?, ...?)} target The constructor to call.\n * @param {!Array} argList The arguments as a list.\n * @param {function(new: TARGET, ...?)=} opt_newTarget The constructor to\n * instantiate.\n * @return {TARGET} The result of the function call.\n * @template TARGET\n * @suppress {reportUnknownTypes}\n */\n function construct(target, argList, opt_newTarget) {\n if (opt_newTarget === undefined) opt_newTarget = target;\n var proto = opt_newTarget.prototype || Object.prototype;\n var obj = $jscomp.objectCreate(proto);\n var apply = Function.prototype.apply;\n var out = apply.call(target, obj, argList);\n return out || obj;\n }\n return construct;\n};\n\n/**\n * Polyfill for Reflect.construct() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/construct\n *\n * The call to `$jscomp.getConstructImplementation()` is wrapped up as an object\n * literal `valueOf()` call in order to hide the (meaningless) side-effects\n * it contains that would otherwise prevent its definition from being removed,\n * even when nothing refers to `$jscomp.construct`.\n * @const\n */\n$jscomp.construct =\n /** @type {typeof Reflect.construct} */ (\n {valueOf: $jscomp.getConstructImplementation}.valueOf());\n", + "js/es6/util/createtemplatetagfirstarg.js":'/*\n * Copyright 2020 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Polyfill for a tagged template\'s argument\n * @suppress {uselessCode}\n */\n\'require base\';\n\n/**\n * Simply accepts an ITemplateArray and returns it after setting its raw\n * property\n * @param {!ITemplateArray} arrayStrings\n * @return {!ITemplateArray}\n * @noinline\n */\n$jscomp.createTemplateTagFirstArg = function(arrayStrings) {\n arrayStrings.raw = arrayStrings;\n return /** @type {!ITemplateArray} */ (arrayStrings);\n};\n\n/**\n * Simply accepts an ITemplateArray and returns it after setting its raw\n * property\n * @param {!ITemplateArray} arrayStrings\n * @param {!ITemplateArray} rawArrayStrings raw string values of arrayString\n * @return {!ITemplateArray}\n * @noinline\n */\n$jscomp.createTemplateTagFirstArgWithRaw = function(\n arrayStrings, rawArrayStrings) {\n arrayStrings.raw = rawArrayStrings;\n return /** @type {!ITemplateArray} */ (arrayStrings);\n};\n', + "js/es6/util/inherits.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Polyfill for ES6 extends keyword.\n * @suppress {uselessCode}\n */\n'require base';\n'require util/objectcreate';\n'require es6/util/setprototypeof';\n\n\n/**\n * Inherit the prototype methods and static methods from one constructor\n * into another.\n *\n * This wires up the prototype chain (like goog.inherits) and copies static\n * properties, for ES6-to-ES{3,5} transpilation.\n *\n * Usage:\n *

\n *   function ParentClass() {}\n *\n *   // Regular method.\n *   ParentClass.prototype.foo = function(a) {};\n *\n *   // Static method.\n *   ParentClass.bar = function() {};\n *\n *   function ChildClass() {\n *     ParentClass.call(this);\n *   }\n *   $jscomp.inherits(ChildClass, ParentClass);\n *\n *   var child = new ChildClass();\n *   child.foo();\n *   ChildClass.bar();  // Static inheritance.\n * 
\n *\n * @param {!Function} childCtor Child class.\n * @param {!Function} parentCtor Parent class.\n * @suppress {strictMissingProperties} 'superClass_' is not defined on Function\n */\n$jscomp.inherits = function(childCtor, parentCtor) {\n childCtor.prototype = $jscomp.objectCreate(parentCtor.prototype);\n /** @override */ childCtor.prototype.constructor = childCtor;\n if ($jscomp.setPrototypeOf) {\n // avoid null dereference warning\n /** @const {!Function} */\n var setPrototypeOf = $jscomp.setPrototypeOf;\n setPrototypeOf(childCtor, parentCtor);\n } else {\n // setPrototypeOf is not available so we need to copy the static\n // methods to the child\n for (var p in parentCtor) {\n if (p == 'prototype') {\n // Don't copy parentCtor.prototype to childCtor.\n continue;\n }\n if (Object.defineProperties) {\n var descriptor = Object.getOwnPropertyDescriptor(parentCtor, p);\n if (descriptor) {\n Object.defineProperty(childCtor, p, descriptor);\n }\n } else {\n // Pre-ES5 browser. Just copy with an assignment.\n childCtor[p] = parentCtor[p];\n }\n }\n }\n\n childCtor.superClass_ = parentCtor.prototype;\n};\n", +@@ -710,12 +710,12 @@ function $Z(){$Z=function(){};lra=ir("class","const","enum","export","extends"," + "js/modules.js":'/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n\n\'require es6/modules/runtime\';\n', + "js/runtime_type_check.js":"/*\n * Copyright 2010 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @fileoverview Provides the boilerplate code for run-time type checking.\n *\n *\n * @suppress {uselessCode} The require statements below are not useless.\n */\n'require base';\n\n/** @const */\n$jscomp.typecheck = {};\n\n/**\n * A state variable to suspend checking, to avoid infinite calls\n * caused by calling checked code from the checking functions.\n *\n * @type {boolean}\n */\n$jscomp.typecheck.suspendChecking = false;\n\n\n/**\n * Log and possibly format the run-time type check warning. This\n * function is customized at compile-time.\n *\n * @param {string} warning the warning to log.\n * @param {*} expr the faulty expression.\n */\n$jscomp.typecheck.log = function(warning, expr) {};\n\n/**\n * Checks that the given expression matches one of the given checkers,\n * logging if not, and returning the expression regardless.\n *\n * @param {*} expr the expression to check.\n * @param {!Array} checkers the checkers to\n * use in checking, one of these has to match for checking to succeed.\n * @return {*} the given expression back.\n */\n$jscomp.typecheck.checkType = function(expr, checkers) {\n if ($jscomp.typecheck.suspendChecking) {\n return expr;\n }\n $jscomp.typecheck.suspendChecking = true;\n\n for (var i = 0; i < checkers.length; i++) {\n var checker = checkers[i];\n var ok = checker.check(expr);\n if (ok) {\n $jscomp.typecheck.suspendChecking = false;\n return expr;\n }\n }\n\n var warning = $jscomp.typecheck.prettify_(expr) + ' not in ' +\n checkers.join(' ');\n\n $jscomp.typecheck.log(warning, expr);\n\n $jscomp.typecheck.suspendChecking = false;\n return expr;\n};\n\n\n/**\n * Prettify the given expression for printing.\n *\n * @param {*} expr the expression.\n * @return {string} a string representation of the given expression.\n * @private\n */\n$jscomp.typecheck.prettify_ = function(expr) {\n var className = $jscomp.typecheck.getClassName_(expr);\n if (className) {\n return className;\n }\n try {\n return String(expr);\n }\n catch (e) {}\n return '';\n};\n\n/**\n * Gets the class name if the given expression is an object.\n *\n * @param {*} expr the expression.\n * @return {string|undefined} the class name or undefined if the\n * expression is not an object.\n * @private\n * @suppress {strictMissingProperties}\n */\n$jscomp.typecheck.getClassName_ = function(expr) {\n var className = void 0;\n if (typeof expr == 'object' && expr && expr.constructor) {\n className = expr.constructor.name;\n if (!className) {\n var funNameRe = /function (.{1,})\\(/;\n var m = (funNameRe).exec(expr.constructor.toString());\n className = m && m.length > 1 ? m[1] : void 0;\n }\n }\n return className;\n};\n\n/**\n * Interface for all checkers.\n *\n * @interface\n */\n$jscomp.typecheck.Checker = function() {};\n\n\n/**\n * Checks the given expression.\n *\n * @param {*} expr the expression to check.\n * @return {boolean} whether the given expression matches this checker.\n */\n$jscomp.typecheck.Checker.prototype.check = function(expr) {};\n\n\n\n/**\n * A class for all value checkers, except the null checker.\n *\n * @param {string} type the value type (e.g. 'number') of this checker.\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.ValueChecker_ = function(type) {\n /**\n * The value type of this checker.\n * @type {string}\n * @private\n */\n this.type_ = type;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ValueChecker_.prototype.check = function(expr) {\n return typeof(expr) == this.type_;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ValueChecker_.prototype.toString = function() {\n return 'value(' + this.type_ + ')';\n};\n\n\n\n/**\n * A checker class for null values.\n *\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.NullChecker_ = function() {};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.NullChecker_.prototype.check = function(expr) {\n return expr === null;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.NullChecker_.prototype.toString = function() {\n return 'value(null)';\n};\n\n\n/**\n * A checker class for a class defined in externs, including built-in\n * JS types.\n *\n *

If the class type is undefined, then checking is suspended to\n * avoid spurious warnings. This is necessary because some externs\n * types are not defined in all browsers. For example, Window is not\n * defined Chrome, as window has the type DOMWindow.\n *\n *

Another subtlety is that a built-in type may be referenced in a\n * different frame than the one in which it was created. This causes\n * instanceOf to return false even though the object is of the correct\n * type. We work around this by checking as many windows as possible,\n * redefining open on top and window to keep track of them.\n *\n * @param {string} className the name of the extern class to check.\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.ExternClassChecker_ = function(className) {\n /**\n * The name of the extern class to check.\n * @type {string}\n * @private\n */\n this.className_ = className;\n};\n\n\n/**\n * A list of (hopefully all) open windows.\n *\n * @type {!Array}\n */\n$jscomp.typecheck.ExternClassChecker_.windows = [];\n\n\n/**\n * A list of the original open methods that have been redefined.\n *\n * @type {!Array}\n */\n$jscomp.typecheck.ExternClassChecker_.oldOpenFuns = [];\n\n\n/**\n * Redefines the open method on the given window, adding tracking.\n *\n * @param {!Window} win the window to track.\n * @suppress {uselessCode}\n */\n$jscomp.typecheck.ExternClassChecker_.trackOpenOnWindow = function(win) {\n // Declare the property we add to the window object.\n // NOTE: we add a declaration in a \"if (false) ...\" to ensure we\n // don't reference \"Window\" on platforms that don't have a global\n // Window object (node, service workers, etc).\n if (false) {\n /** @type {boolean} */\n Window.prototype.tracked;\n }\n\n if (win.tracked) {\n return;\n }\n\n win.tracked = true;\n\n var key = $jscomp.typecheck.ExternClassChecker_.oldOpenFuns.length;\n\n $jscomp.typecheck.ExternClassChecker_.oldOpenFuns.push(win.open);\n $jscomp.typecheck.ExternClassChecker_.windows.push(win);\n\n win.open = function() {\n var w = $jscomp.typecheck.ExternClassChecker_.oldOpenFuns[key].apply(\n this, arguments);\n $jscomp.typecheck.ExternClassChecker_.trackOpenOnWindow(w);\n return w;\n };\n};\n\n\n/**\n * Returns the global 'this' object. This will normally be the same as 'window'\n * but when running in a worker thread, the DOM is not available.\n *\n * This does not work when strict mode is enabled.\n *\n * @return {!Window}\n * @private\n */\n$jscomp.typecheck.ExternClassChecker_.getGlobalThis_ = function() {\n return (function() { return this; }).call(null);\n};\n\n\n// Install listeners on the global 'this' object.\n(function() {\n var globalThis = $jscomp.typecheck.ExternClassChecker_.getGlobalThis_();\n $jscomp.typecheck.ExternClassChecker_.trackOpenOnWindow(globalThis);\n\n var theTop = globalThis['top'];\n if (theTop) {\n $jscomp.typecheck.ExternClassChecker_.trackOpenOnWindow(theTop);\n }\n})();\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ExternClassChecker_.prototype.check = function(expr) {\n var classTypeDefined = [ false ];\n for (var i = 0; i < $jscomp.typecheck.ExternClassChecker_.windows.length;\n i++) {\n var w = $jscomp.typecheck.ExternClassChecker_.windows[i];\n if (this.checkWindow_(w, expr, classTypeDefined)) {\n return true;\n }\n }\n return !classTypeDefined[0];\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ExternClassChecker_.prototype.toString = function() {\n return 'ext_class(' + this.className_ + ')';\n};\n\n\n/**\n * Checks whether the given expression is an instance of this extern\n * class in this window or any of its frames and subframes.\n *\n * @param {!Window} w the window to start checking from.\n * @param {*} expr the expression to check.\n * @param {!Array} classTypeDefined a wrapped boolean\n * updated to indicate whether the class type was seen in any frame.\n * @return {boolean} true if the given expression is an instance of this class.\n * @private\n */\n$jscomp.typecheck.ExternClassChecker_.prototype.checkWindow_ =\n function(w, expr, classTypeDefined) {\n var classType = /** @type {function(new: ?)} */ (w[this.className_]);\n classTypeDefined[0] = classTypeDefined[0] || !!classType;\n if (classType && expr instanceof classType) {\n return true;\n }\n for (var i = 0; i < w.length; i++) {\n if (this.checkWindow_(w.frames[i], expr, classTypeDefined)) {\n return true;\n }\n }\n return false;\n};\n\n\n\n/**\n * A class for all checkers of user-defined classes.\n *\n * @param {string} className name of the class to check.\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.ClassChecker_ = function(className) {\n\n /**\n * The name of the class to check.\n * @type {string}\n * @private\n */\n this.className_ = className;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ClassChecker_.prototype.check = function(expr) {\n return !!(expr && expr['instance_of__' + this.className_]);\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ClassChecker_.prototype.toString = function() {\n return 'class(' + this.className_ + ')';\n};\n\n\n\n/**\n * A class for all checkers of user-defined interfaces.\n *\n * @param {string} interfaceName name of the interface to check.\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.InterfaceChecker_ = function(interfaceName) {\n\n /**\n * The name of the interface to check.\n * @type {string}\n * @private\n */\n this.interfaceName_ = interfaceName;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.InterfaceChecker_.prototype.check = function(expr) {\n return !!(expr && expr['implements__' + this.interfaceName_]);\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.InterfaceChecker_.prototype.toString = function() {\n return 'interface(' + this.interfaceName_ + ')';\n};\n\n\n\n/**\n * A checker for object types (possibly with non-standard prototype: might not\n * inherit from Object).\n *\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.ObjectChecker_ = function() {};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ObjectChecker_.prototype.check = function(expr) {\n return (typeof(expr) == 'object' || typeof(expr) == 'function') && !!expr;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ObjectChecker_.prototype.toString = function() {\n return 'value(object)';\n};\n\n\n\n/**\n * A checker for null values.\n *\n * @type {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.nullChecker = new $jscomp.typecheck.NullChecker_();\n\n\n/**\n * Creates a checker for the given value type (excluding the null type).\n *\n * @param {string} type the value type.\n * @return {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.valueChecker = function(type) {\n return new $jscomp.typecheck.ValueChecker_(type);\n};\n\n\n/**\n * Creates a checker for the given extern class name.\n *\n * @param {string} className the class name.\n * @return {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.externClassChecker = function(className) {\n return new $jscomp.typecheck.ExternClassChecker_(className);\n};\n\n\n/**\n * Creates a checker for the given user-defined class.\n *\n * @param {string} className the class name.\n * @return {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.classChecker = function(className) {\n return new $jscomp.typecheck.ClassChecker_(className);\n};\n\n\n/**\n * Creates a checker for the given user-defined interface.\n *\n * @param {string} interfaceName the interface name.\n * @return {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.interfaceChecker = function(interfaceName) {\n return new $jscomp.typecheck.InterfaceChecker_(interfaceName);\n};\n\n\n/**\n * A checker for objects.\n *\n * @type {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.objectChecker = new $jscomp.typecheck.ObjectChecker_();\n", + "js/util/checkstringargs.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require base';\n\n\n/**\n * Throws if the argument is a RegExp, or if thisArg is undefined.\n * @param {?} thisArg The 'this' arg, which must be defined.\n * @param {*} arg The first argument of the function, which mustn't be a RegExp.\n * @param {string} func Name of the function, for reporting.\n * @return {string} The thisArg, coerced to a string.\n * @suppress {reportUnknownTypes}\n */\n$jscomp.checkStringArgs = function(thisArg, arg, func) {\n if (thisArg == null) {\n throw new TypeError(\n \"The 'this' value for String.prototype.\" + func +\n ' must not be null or undefined');\n }\n if (arg instanceof RegExp) {\n throw new TypeError(\n 'First argument to String.prototype.' + func +\n ' must not be a regular expression');\n }\n return thisArg + '';\n};\n", +-"js/util/defineproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides methods to polyfill native objects.\n * @suppress {reportUnknownTypes}\n */\n'require util/defines';\n\n\n/**\n * Polyfill for Object.defineProperty() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty\n *\n * Refuses to define properties on Array.prototype and Object.prototype,\n * since we can't make them non-enumerable and this messes up peoples' for\n * loops. Beyond this, we simply assign values and not worry\n * about enumerability or writeability.\n *\n * @type {(typeof Object.defineProperty)}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.defineProperty =\n $jscomp.ASSUME_ES5 || typeof Object.defineProperties == 'function' ?\n Object.defineProperty :\n function(target, property, descriptor) {\n if (target == Array.prototype ||\n // b/155133192\n /** @type {?} */ (target) == Object.prototype) {\n return target;\n }\n\n /**\n * NOTE: This is currently never called with a descriptor outside\n * the control of the compiler. If we ever decide to polyfill either\n * Object.defineProperty or Reflect.defineProperty for ES3, we should\n * explicitly check for `get` or `set` on the descriptor and throw a\n * TypeError, since it's impossible to properly polyfill it.\n */\n target[property] = descriptor.value;\n return target;\n };\n", ++"js/util/defineproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides methods to polyfill native objects.\n * @suppress {reportUnknownTypes}\n */\n'require util/defines';\n\n\n/**\n * Polyfill for Object.defineProperty() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty\n *\n * Refuses to define properties on Array.prototype and Object.prototype,\n * since we can't make them non-enumerable and this messes up peoples' for\n * loops. Beyond this, we simply assign values and not worry\n * about enumerability or writeability.\n *\n * @type {(typeof Object.defineProperty)}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.defineProperty =\n $jscomp.ASSUME_ES5 || typeof Object.defineProperties == 'function' ?\n Object.defineProperty :\n function(target, property, descriptor) {\n if (target == Array.prototype ||\n // b/155133192\n /** @type {?} */ (target) == Object.prototype) {\n return target;\n }\n\n /**\n * NOTE: This is currently never called with a descriptor outside\n * the control of the compiler. If we ever decide to polyfill either\n * Object.defineProperty or Reflect.defineProperty for ES3, we should\n * explicitly check for `get` or `set` on the descriptor and throw a\n * TypeError, since it's impossible to properly polyfill it.\n */\n target[property] = descriptor.value;\n return target;\n };\n", + "js/util/defines.js":'/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\'require base\';\n\n\n/**\n * Whether to assume ES5 is available. This enables removing several\n * internal polyfills, which must otherwise be detected at runtime.\n * @define {boolean}\n */\n$jscomp.ASSUME_ES5 = false;\n\n/**\n * Whether to skip the conformance check and simply use the polyfill always.\n * @define {boolean}\n */\n$jscomp.ASSUME_NO_NATIVE_MAP = false;\n\n/**\n * Whether to skip the conformance check and simply use the polyfill always.\n * @define {boolean}\n */\n$jscomp.ASSUME_NO_NATIVE_SET = false;\n\n/**\n * Whether to provide an incorrect but tiny Math.fround polyfill that just\n * returns the number given. This is usually okay to do, particularly if\n * `Math.fround` is only used to allow the JavaScript engine to use faster\n * 32-bit float operations, but could cause problems if program logic is\n * dependent on floats being truncated consistently.\n * @define {boolean}\n */\n$jscomp.SIMPLE_FROUND_POLYFILL = false;\n\n/**\n * Whether to isolate all injected polyfills from global state. This is not\n * on by default, as it bloats code size, but is useful when code needs to\n * operate on untrusted third_party sites. It relies on a compiler pass to\n * rewrite potential polyfill accesses.\n * @define {boolean}\n */\n$jscomp.ISOLATE_POLYFILLS = false;\n\n/**\n * Should we unconditionally override a native Promise implementation with our\n * own?\n * @define {boolean}\n */\n$jscomp.FORCE_POLYFILL_PROMISE = false;\n\n/**\n * Override the native Promise implementation if unhandledrejection event is not\n * supported.\n * @define {boolean}\n */\n$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION = false;\n', + "js/util/finddescriptor.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/getownpropertydescriptor';\n'require es6/reflect/getprototypeof';\n\n\n/**\n * Helper function to find a descriptor.\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {!ObjectPropertyDescriptor|undefined}\n */\n$jscomp.findDescriptor = function(target, propertyKey) {\n var /** ?Object */ obj = target;\n while (obj) {\n var property = Reflect.getOwnPropertyDescriptor(obj, propertyKey);\n if (property) {\n return property;\n }\n obj = Reflect.getPrototypeOf(obj);\n }\n return undefined;\n};\n", + "js/util/findinternal.js":'/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Utility for Array methods that find elements.\n */\n\'require base\';\n\n// TODO(sdh): would be nice to template on the ARRAY type as well,\n// so that the third arg type of callback can be refined to be\n// exactly the same as the array type, but then there\'s no way to\n// enforce that it must, in fact, be an array.\n/**\n * Internal implementation of find.\n * @param {!IArrayLike} array\n * @param {function(this: THIS, VALUE, number, !IArrayLike): *} callback\n * @param {THIS} thisArg\n * @return {{i: number, v: (VALUE|undefined)}}\n * @template THIS, VALUE\n * @suppress {reportUnknownTypes}\n */\n$jscomp.findInternal = function(array, callback, thisArg) {\n if (array instanceof String) {\n array = /** @type {!IArrayLike} */ (String(array));\n }\n var len = array.length;\n for (var i = 0; i < len; i++) {\n var value = array[i];\n if (callback.call(thisArg, value, i, array)) return {i: i, v: value};\n }\n return {i: -1, v: void 0};\n};\n', + "js/util/global.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Runtime code to store the global object.\n * @suppress {uselessCode}\n */\n'require base';\n\n/**\n * Locate and return a reference to the global object.\n *\n * NOTE: This method is marked with `noinline`, because `RemoveUnusedCode` has\n * trouble removing the loop it contains if it gets inlined into the global\n * scope.\n * @param {?Object} passedInThis\n * @return {!Global} The global object.\n * @suppress {undefinedVars|reportUnknownTypes}\n * @noinline\n */\n$jscomp.getGlobal = function(passedInThis) {\n var possibleGlobals = [\n // Web Audio Worklets do not have any way to refer to their global object\n // other than `globalThis`.\n // This use of `globalThis` does not prevent removal of the `globalThis`\n // polyfill, because the usage is guarded by a typeof check.\n 'object' == typeof globalThis && globalThis,\n // Rhino (used by older Google Docs Script projects) has no `window` or\n // `self`, but `this` from the global scope is the global object. Also,\n // some GWT tests running on Rhino do have a `window` and `self` but, for\n // unknown reasons, see runtime exceptions when we return `window` instead\n // of `passedInThis`.\n // NOTE: If the compiler's output is wrapped in a strict-mode function,\n // this file's code won't actually be executing in global scope, so this\n // value will be undefined.\n passedInThis,\n // Browser windows always have `window`\n 'object' == typeof window && window,\n // WebWorkers have `self`\n 'object' == typeof self && self,\n // NodeJS has `global`\n 'object' == typeof global && global,\n ];\n for (var i = 0; i < possibleGlobals.length; ++i) {\n var maybeGlobal = possibleGlobals[i];\n // It can happen that an environment has, for example, both `global` and\n // `window` defined in the global scope, but one of them isn't actually\n // the global object, so check that it really seems to be the global object.\n // We use `Math` to check for this because it's only 4 characters long,\n // exists in all possible JS environments, and doesn't have the problematic\n // equality behavior of `NaN`.\n if (maybeGlobal && maybeGlobal['Math'] == Math) {\n return /** @type {!Global} */ (maybeGlobal);\n }\n }\n // Throw an exception if we cannot find the global object.\n // We have to be sneaky about it, otherwise the compiler will think this code\n // has a side effect (throwing an exception) that prevents it from being\n // removed, even when all usages of `$jscomp.global` get removed.\n // Casting through unknown is necessary to keep the compiler from rejecting\n // this code.\n return /** @type {!Global} */ (\n /** @type {?} */ ({\n valueOf: function() {\n throw new Error('Cannot find global object');\n }\n }.valueOf()));\n};\n\n\n/**\n * The global object.\n * @const {!Global}\n */\n$jscomp.global = $jscomp.getGlobal(this);\n", +-"js/util/objectcreate.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides a partial internal polyfill for Object.create.\n */\n'require util/defines';\n\n\n/**\n * Polyfill for Object.create() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create\n *\n * Does not implement the second argument.\n * @param {!Object} prototype\n * @return {!Object}\n */\n$jscomp.objectCreate =\n ($jscomp.ASSUME_ES5 || typeof Object.create == 'function') ?\n Object.create :\n function(prototype) {\n /** @constructor */\n var ctor = function() {};\n ctor.prototype = prototype;\n return new ctor();\n };\n", ++"js/util/objectcreate.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides a partial internal polyfill for Object.create.\n */\n'require util/defines';\n\n\n/**\n * Polyfill for Object.create() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create\n *\n * Does not implement the second argument.\n * @param {!Object} prototype\n * @return {!Object}\n */\n$jscomp.objectCreate =\n ($jscomp.ASSUME_ES5 || typeof Object.create == 'function') ?\n Object.create :\n function(prototype) {\n /** @constructor */\n var ctor = function() {};\n ctor.prototype = prototype;\n return new ctor();\n };\n", + "js/util/owns.js":'/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\'require base\';\n\n/**\n * Synonym for Object.prototype.hasOwnProperty.call(obj, prop).\n * @param {!Object} obj\n * @param {string} prop\n * @return {boolean}\n */\n$jscomp.owns = function(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n};\n', + "js/util/polyfill.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides methods to polyfill native objects.\n * @suppress {uselessCode}\n */\n'require util/defineproperty';\n'require util/defines';\n'require util/global';\n'require util/shouldpolyfill';\n\n/** @const {!Object} map from classes (Map) to polyfills */\n$jscomp.polyfills = {};\n\n/**\n * Maps a property to an obfuscated look-up string for that property. Only used\n * when `$jscomp.ISOLATE_POLYFILLS is enabled.\n *\n * When compiling with polyfill isolation enabled, to polyfill an\n * `owner.prototype.method` the `$jscomp.polyfill` library function:\n *

    \n *
  1. creates an obfuscated string for `method`\n *
  2. adds the obfuscated string as a new property on the `owner` object\n *
  3. assigns the polyfill implementation of `method` to this new obfuscated\n * property on the `owner` object.
  4. \n *
\n *\n * This maps the original property name `method` to the new obfuscated property\n * name.\n * @const {!Object}\n */\n$jscomp.propertyToPolyfillSymbol = {};\n\n/** @const {string} */\n$jscomp.POLYFILL_PREFIX = '$jscp$';\n\n/**\n * Returns the polyfill function of the given property if present, otherwise\n * returns the actual property.\n *\n * This is a variable instead of a $jscomp.* property to make it simpler for\n * the compiler to avoid prematurely deleting it during optimizations.\n *\n * @param {*} target the receiver for the property access, e.g. `my.str` in\n * `my.str.includes`\n * @param {string} property the name of the property, e.g. `includes` in\n * `my.str.includes`\n * @return {?} if an obfuscated symbol for the property was added onto the\n * target, then this function returns the polyfill for the property.\n * Otherwise simply looks up the property on the target and returns it as\n * `target[key]`.\n * @noinline prevent inlining so IsolatePolyfills can find this declaration.\n * @suppress {reportUnknownTypes}\n */\nvar $jscomp$lookupPolyfilledValue = function(target, property) {\n /** @const */\n var obfuscatedName = $jscomp.propertyToPolyfillSymbol[property];\n if (obfuscatedName == null) {\n return target[property];\n }\n\n // NOTE: this will throw if `target` is null or undefined.\n /** @const */\n var polyfill = target[obfuscatedName];\n\n // Checking `polyfill !== undefined` is sufficient because $jscomp.polyfill\n // never installs nullish polyfills. Otherwise we'd have to check something\n // like `key in target`.\n return polyfill !== undefined ? polyfill : target[property];\n};\n\n/**\n * @param {string} target Qualified name of the class or method to polyfill,\n * e.g. 'Array.prototype.includes' or 'Map'.\n * @param {?function(*): *} polyfill A function that takes the current browser\n * implementation of the target and returns an optional new polyfill\n * implementation. If null is returned, then no polyfill will be added. A\n * null argument for this parameter indicates that the function will not be\n * polyfilled, and is only useful for `build_polyfill_table.js` bookkeeping.\n * @param {string} fromLang The language level in which the target is expected\n * to already be present in the browser. The compiler requires that\n * `languageOut < fromLang` before injecting a polyfill (i.e. if the\n * specified output language already includes the feature then there's no\n * need to polyfill it).\n * @param {string} toLang The language level required by the polyfill\n * implementation. The compiler will issue an error if a polyfill is\n * required, but `languageOut < toLang`. Additionally, the\n * `build_polyfill_table.js` script audits the polyfill dependency tree to\n * ensure that no polyfill with a lower `toLang` depends on one with a\n * higher `toLang`.\n * @noinline\n * NOTE: We prevent inlining so RemoveUnusedPolyfills can always recognize this\n * call.\n */\n$jscomp.polyfill = function(target, polyfill, fromLang, toLang) {\n if (!polyfill) return;\n if ($jscomp.ISOLATE_POLYFILLS) {\n $jscomp.polyfillIsolated(target, polyfill, fromLang, toLang);\n } else {\n $jscomp.polyfillUnisolated(target, polyfill, fromLang, toLang);\n }\n};\n\n/**\n * @param {string} target Qualified name of the class or method to polyfill,\n * @param {function(*): *} polyfill A function that takes the current browser\n * implementation of the target and returns an optional new polyfill\n * implementation.\n * @param {string} fromLang The language level in which the target is expected\n * to already be present in the browser.\n * @param {string} toLang The language level required by the polyfill\n * implementation.\n * @suppress {reportUnknownTypes}\n * @see $jscomp.polyfill for more documentation\n */\n$jscomp.polyfillUnisolated = function(target, polyfill, fromLang, toLang) {\n var obj = $jscomp.global;\n var split = target.split('.');\n for (var i = 0; i < split.length - 1; i++) {\n var key = split[i];\n if (!(key in obj)) return;\n obj = obj[key];\n }\n var property = split[split.length - 1];\n var orig = obj[property];\n var impl = polyfill(orig);\n if (impl == orig || impl == null) return;\n $jscomp.defineProperty(\n obj, property, {configurable: true, writable: true, value: impl});\n};\n\n/**\n * Defines a polyfill for the given class or method under an obfuscated name.\n *\n * The main differences between this method and $jscomp.polyfillUnisolated are:\n * - classes are defined on $jscomp.polyfills, not window.\n * - methods (Array.prototype.includes) are defined on Array.prototype under\n * an obfuscated name Array.prototype.$jscp$907312$includes or a Symbol, if\n * native.\n * - this method installs our polyfill even when an existing implementation is\n * found, as it might be an untrusted polyfill. The exception is that if\n * Symbol is detected to be native, we assume any implementations of ES6\n * classes/methods are also native and not polyfills.\n *\n * @param {string} target Qualified name of the class or method to polyfill,\n * @param {function(*): *} polyfill A function that takes the current browser\n * implementation of the target and returns an optional new polyfill\n * implementation.\n * @param {string} fromLang The language level in which the target is expected\n * to already be present in the browser.\n * @param {string} toLang The language level required by the polyfill\n * implementation.\n * @suppress {reportUnknownTypes}\n * @see $jscomp.polyfill for more parameter documentation\n */\n$jscomp.polyfillIsolated = function(target, polyfill, fromLang, toLang) {\n var split = target.split('.');\n var isSimpleName = split.length === 1;\n var root = split[0];\n\n // Look up the parent object. For classes this is just $jscomp.global.\n // For methods/properties this may be a polyfill (Promise) or may a native\n // object (Array.prototype).\n var ownerObject;\n if (!isSimpleName && root in $jscomp.polyfills) {\n // Handle Symbol.asyncIterator and Promise.prototype.finally\n ownerObject = $jscomp.polyfills;\n } else {\n // Handle Promise, Array.of, and String.prototype.startsWith\n ownerObject = $jscomp.global;\n }\n\n for (var i = 0; i < split.length - 1; i++) {\n var key = split[i];\n if (!(key in ownerObject)) return;\n ownerObject = ownerObject[key];\n }\n\n var property = split[split.length - 1];\n // If Symbol is native and the target is in the ES6 spec, use the native imp.\n // We assume the method/class was not polyfilled since polyfills typically\n // back off in the presence of an existing implementation.\n var nativeImpl = $jscomp.IS_SYMBOL_NATIVE && fromLang === 'es6' ?\n ownerObject[property] :\n null;\n var impl = polyfill(nativeImpl);\n\n if (impl == null) {\n return;\n }\n\n if (isSimpleName) {\n // Note: `impl` may be the actual native class instead of a\n // polyfill. Add it to $jscomp.polyfills anyway. The IsolatePolyfills pass\n // unconditionally replaces `Symbol` with `$jscomp.polyfills['Symbol']`.\n\n // Use $jscomp.polyfills instead of ownerObject. For simple names like\n // Promise and Symbol, ownerObject is the global object, and we want to\n // avoid adding new global variables.\n $jscomp.defineProperty(\n $jscomp.polyfills, property,\n {configurable: true, writable: true, value: impl});\n } else if (impl !== nativeImpl) {\n // Skip installing an obfuscated property if we have found a native version\n // of the method we're polyfilling. $jscomp$lookupPolyfilledValue will fall\n // back to the native version anyway.\n if ($jscomp.propertyToPolyfillSymbol[property] === undefined) {\n var BIN_ID = (Math.random() * 1e9) >>> 0;\n $jscomp.propertyToPolyfillSymbol[property] = $jscomp.IS_SYMBOL_NATIVE ?\n // use bracket access to avoid injecting the Symbol polyfill\n $jscomp.global['Symbol'](property) :\n $jscomp.POLYFILL_PREFIX + BIN_ID + '$' + property;\n }\n\n /** @const {symbol} */\n var obfuscatedName = $jscomp.propertyToPolyfillSymbol[property];\n\n // Define the polyfilled method on its owner but under an obfuscated\n // name to avoid collisions. The owner will be a native class like `Promise`\n // or a native class's prototype like `Array.prototype`.\n $jscomp.defineProperty(\n ownerObject, obfuscatedName,\n {configurable: true, writable: true, value: impl});\n }\n};\n", + "js/util/reflectobject.js":'/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\'require base\';\n\n/**\n * Definition for object reflection.\n *\n * Internal compiler version of closure library goog.reflect.object.\n *\n * Use this if you have an object literal whose keys need to have the same names\n * as the properties of some class even after they are renamed by the compiler.\n *\n * @param {?Object} type class, interface, or record\n * @param {T} object Object literal whose properties must be renamed\n * consistently with type\n * @return {T} The object literal.\n * @template T\n */\n$jscomp.reflectObject = function(type, object) {\n return object;\n};\n\n/**\n * Definition for object property reflection.\n *\n * Internal compiler version of closure library goog.reflect.objectProperty.\n *\n * Use this if you have a string that needs renamed as if it were an unquoted\n * property of a class.\n *\n * @param {string} propName\n * @param {?Object} type class, interface, or record\n * @return {string}\n */\n$jscomp.reflectProperty = function(propName, type) {\n return propName;\n};\n', +@@ -1250,7 +1250,7 @@ HGa=GS("JSC_PREFER_BACKTICKS_TO_AT_SIGN_CODE","Use `some_code` instead of '{'@co + function iGa(){iGa=function(){};jGa=GS("JSC_NESTED_NAME_IN_GOOG_MODULE","A nested {0} is created on the name `{1}`. A nested class, enum, typedef or interface slows down TS migration - go/typescript/migration/troubleshooting?polyglot=default#inner-classes-enums-or-interfaces. Fix this linter finding by converting the module-level static property assignment on `{1}` into a module-level flat name (i.e. change `{1}.prop = ...` into `{1}_prop = ...`. You can (if required) export this flat name using named exports (`exports.{1}_prop = {1}_prop`). See go/js-nested-names-lint-faq.");Maa()} + ;var LFa;function KFa(){KFa=function(){};LFa=Q("JSC_MUTATED_EXPORT",'The name "{0}" is exported and should not be mutated outside of module initialization. Mutable exports are generally difficult to reason about. You can work around this by exporting getter/setter functions, or an object with mutable properties instead.')};var NFa,OFa,PFa; + function MFa(){MFa=function(){};NFa=GS("JSC_MISSING_NULLABILITY_MODIFIER_JSDOC","{0} is a reference type with no nullability modifier, which is disallowed by the style guide.\nPlease add a '!' to make it explicitly non-nullable, or a '?' to make it explicitly nullable.");OFa=GS("JSC_NULL_MISSING_NULLABILITY_MODIFIER_JSDOC","{0} is a reference type with no nullability modifier that is explicitly set to null.\nAdd a '?' to make it explicitly nullable.");PFa=GS("JSC_REDUNDANT_NULLABILITY_MODIFIER_JSDOC","{0} is a non-reference type which is already non-nullable.\nPlease remove the redundant '!', which is disallowed by the style guide."); +-ir("boolean","number","bigint","string","symbol","undefined",B(["void","null"],Ie,Wh,1))};var SFa,RFa;function QFa(){QFa=function(){};RFa=Q("JSC_PRIMITIVE_OBJECT","Explicit creation of a {0} object.");SFa=Q("JSC_PRIMITIVE_OBJECT_DECLARATION","Declaration of {0} object instead of primitive type.");er("Boolean","Number","String")};var UFa;function TFa(){TFa=function(){};UFa=GS("JSC_ILLEGAL_PROTOTYPE_MEMBER","Prototype property {0} should be a primitive, not an Array or Object.")};var WFa;function VFa(){VFa=function(){};WFa=Q("JSC_PROVIDES_NOT_SORTED","goog.provide() statements are not sorted. (Fix with go/fixjs) The correct order is:\n\n{0}\n")};var YFa;function XFa(){XFa=function(){};YFa=Q("JSC_REQUIRES_NOT_SORTED","goog.require() and goog.requireType() statements are not in recommended format. (Fix with go/fixjs) The correct order is:\n\n{0}\n")};var $Fa;function ZFa(){ZFa=function(){};$Fa=GS("JSC_UNUSED_LABEL","Unused label {0}.")};var bGa;function aGa(){aGa=function(){};bGa=GS("JSC_UNUSED_PRIVATE_PROPERTY","Private property {0} is never read")};var dGa;function cGa(){cGa=function(){};dGa=GS("JSC_USELESS_BLOCK","Useless block.")};var fGa;function eGa(){eGa=function(){};fGa=GS("JSC_VAR","Using `var` (prefer `const` or `let`).\n See style guide rule at go/js-style#features-use-const-and-let. You can use the existing var-to-const-let tool to fix this in your code - https://pegboard.corp.google.com/tools/2081")};var m9,wEa,n9;function vEa(){vEa=function(){};m9=P("JSC_MISSING_NAMESPACE_IMPORT",'Imported Closure namespace "{0}" never defined.');wEa=P("JSC_DOES_NOT_HAVE_EXPORT",'Requested module does not have an export "{0}".');n9=P("JSC_DOES_NOT_HAVE_EXPORT_WITH_DETAILS",'Requested module does not have an export "{0}".{1}')};var CEa,DEa,zEa,yEa,BEa,AEa,GEa,EEa,IEa,w9,x9,JEa,KEa,FEa,HEa; ++ir("boolean","number","bigint","string","symbol","undefined",B(["void","null"],Ie,Wh,1))};var SFa,RFa;function QFa(){QFa=function(){};RFa=Q("JSC_PRIMITIVE_OBJECT","Explicit creation of a {0} object.");SFa=Q("JSC_PRIMITIVE_OBJECT_DECLARATION","Declaration of {0} object instead of primitive type.");er("Boolean","Number","String")};var UFa;function TFa(){TFa=function(){};UFa=GS("JSC_ILLEGAL_PROTOTYPE_MEMBER","Prototype property {0} should be a primitive, not an Array or Object.")};var WFa;function VFa(){VFa=function(){};WFa=Q("JSC_PROVIDES_NOT_SORTED","goog.provide() statements are not sorted. (Fix with go/fixjs) The correct order is:\n\n{0}\n")};var YFa;function XFa(){XFa=function(){};YFa=Q("JSC_REQUIRES_NOT_SORTED","goog.require() and goog.requireType() statements are not in recommended format. (Fix with go/fixjs) The correct order is:\n\n{0}\n")};var $Fa;function ZFa(){ZFa=function(){};$Fa=GS("JSC_UNUSED_LABEL","Unused label {0}.")};var bGa;function aGa(){aGa=function(){};bGa=GS("JSC_UNUSED_PRIVATE_PROPERTY","Private property {0} is never read")};var dGa;function cGa(){cGa=function(){};dGa=GS("JSC_USELESS_BLOCK","Useless block.")};var fGa;function eGa(){eGa=function(){};fGa=GS("JSC_VAR","Using `var` (prefer `const` or `let`).\n See style guide rule at go/js-style#features-use-const-and-let. You can use the existing var-to-const-let tool to fix this in your code - https://pegboard.corp.9oo91e.qjz9zk/tools/2081")};var m9,wEa,n9;function vEa(){vEa=function(){};m9=P("JSC_MISSING_NAMESPACE_IMPORT",'Imported Closure namespace "{0}" never defined.');wEa=P("JSC_DOES_NOT_HAVE_EXPORT",'Requested module does not have an export "{0}".');n9=P("JSC_DOES_NOT_HAVE_EXPORT_WITH_DETAILS",'Requested module does not have an export "{0}".{1}')};var CEa,DEa,zEa,yEa,BEa,AEa,GEa,EEa,IEa,w9,x9,JEa,KEa,FEa,HEa; + function xEa(){xEa=function(){};yEa=GS("JSC_DEPRECATED_VAR","Variable {0} has been deprecated.");zEa=GS("JSC_DEPRECATED_VAR_REASON","Variable {0} has been deprecated: {1}");AEa=GS("JSC_DEPRECATED_PROP","Property {0} of type {1} has been deprecated.");BEa=GS("JSC_DEPRECATED_PROP_REASON","Property {0} of type {1} has been deprecated: {2}");CEa=GS("JSC_DEPRECATED_CLASS","Class {0} has been deprecated.");DEa=GS("JSC_DEPRECATED_CLASS_REASON","Class {0} has been deprecated: {1}");GEa=P("JSC_BAD_PACKAGE_PROPERTY_ACCESS", + "Access to package-private property {0} of {1} not allowed here.");EEa=P("JSC_BAD_PRIVATE_GLOBAL_ACCESS","Access to private variable {0} not allowed outside file {1}.");FEa=Q("JSC_BAD_PRIVATE_PROPERTY_ACCESS","Access to private property {0} of {1} not allowed here.");HEa=Q("JSC_BAD_PROTECTED_PROPERTY_ACCESS","Access to protected property {0} of {1} not allowed here.");P("JSC_BAD_PROPERTY_OVERRIDE_IN_FILE_WITH_FILEOVERVIEW_VISIBILITY","Overridden property {0} in file with fileoverview visibility {1} must explicitly redeclare superclass visibility"); + JEa=Q("JSC_PRIVATE_OVERRIDE","Overriding private property of {0}.");IEa=P("JSC_EXTEND_FINAL_CLASS","{0} is not allowed to extend final class {1}.");KEa=Q("JSC_VISIBILITY_MISMATCH","Overriding {0} property of {1} with {2} property.");x9=Q("JSC_CONSTANT_PROPERTY_REASSIGNED_VALUE",vba());w9=Q("JSC_CONSTANT_PROPERTY_DELETED","constant property {0} cannot be deleted")};var lGa;function kGa(){kGa=function(){};Q("JSC_INVALID_GETELEM_INDEX_ERROR","Array index not integer: {0}");lGa=Q("JSC_FRACTIONAL_BITWISE_OPERAND","Fractional bitwise operand: {0}")};function I9(){this.g=!1}f(I9,g);function TGa(){var a=new I9;a.g=!1;return a}I9.prototype.h=function(){this.g=!0};function UGa(){this.g=Ob(0)}f(UGa,g);var uEa;function tEa(){tEa=function(){};uEa=P("JSC_FEATURES_NOT_SUPPORTED_BY_PASS",'Attempted to run pass "{0}" on input with features it does not support. {1}\nUnsupported features: {2}');tq();Mq(Nq("inlineFunctions inlineVariables deadAssignmentsElimination collapseObjectLiterals removeUnusedCode peepholeOptimizations removeUnreachableCode".split(" ")));Lq("peepholeOptimizations","removeUnreachableCode")};function J9(){}f(J9,g);J9.prototype.hb=function(a,b){return!$M(b)||!jva(b)}; diff --git a/third_party/google-closure-library/closure/bin/build/closurebuilder.py b/third_party/google-closure-library/closure/bin/build/closurebuilder.py --- a/third_party/google-closure-library/closure/bin/build/closurebuilder.py +++ b/third_party/google-closure-library/closure/bin/build/closurebuilder.py @@ -33123,7 +33488,7 @@ diff --git a/third_party/google-closure-library/closure/bin/build/depstree.py b/ diff --git a/third_party/google-closure-library/closure/bin/build/depswriter.py b/third_party/google-closure-library/closure/bin/build/depswriter.py --- a/third_party/google-closure-library/closure/bin/build/depswriter.py +++ b/third_party/google-closure-library/closure/bin/build/depswriter.py -@@ -35,7 +35,7 @@ import source +@@ -39,7 +39,7 @@ import source import treescan @@ -33201,7 +33566,7 @@ diff --git a/third_party/google-closure-library/closure/css/inlay/g-ratio.css b/ diff --git a/third_party/google-closure-library/closure/goog/css/bubble.css b/third_party/google-closure-library/closure/goog/css/bubble.css --- a/third_party/google-closure-library/closure/goog/css/bubble.css +++ b/third_party/google-closure-library/closure/goog/css/bubble.css -@@ -11,7 +11,7 @@ +@@ -13,7 +13,7 @@ } .goog-bubble-close-button { @@ -33210,7 +33575,7 @@ diff --git a/third_party/google-closure-library/closure/goog/css/bubble.css b/th background-color: white; background-position: top right; background-repeat: no-repeat; -@@ -20,21 +20,21 @@ +@@ -22,21 +22,21 @@ } .goog-bubble-left { @@ -33235,7 +33600,7 @@ diff --git a/third_party/google-closure-library/closure/goog/css/bubble.css b/th background-position: center; background-repeat: no-repeat; width: 147px; -@@ -42,7 +42,7 @@ +@@ -44,7 +44,7 @@ } .goog-bubble-top-left-anchor { @@ -33244,7 +33609,7 @@ diff --git a/third_party/google-closure-library/closure/goog/css/bubble.css b/th background-position: center; background-repeat: no-repeat; width: 147px; -@@ -50,7 +50,7 @@ +@@ -52,7 +52,7 @@ } .goog-bubble-top-no-anchor { @@ -33253,7 +33618,7 @@ diff --git a/third_party/google-closure-library/closure/goog/css/bubble.css b/th background-position: center; background-repeat: no-repeat; width: 147px; -@@ -58,7 +58,7 @@ +@@ -60,7 +60,7 @@ } .goog-bubble-bottom-right-anchor { @@ -33262,7 +33627,7 @@ diff --git a/third_party/google-closure-library/closure/goog/css/bubble.css b/th background-position: center; background-repeat: no-repeat; width: 147px; -@@ -66,7 +66,7 @@ +@@ -68,7 +68,7 @@ } .goog-bubble-bottom-left-anchor { @@ -33271,7 +33636,7 @@ diff --git a/third_party/google-closure-library/closure/goog/css/bubble.css b/th background-position: center; background-repeat: no-repeat; width: 147px; -@@ -74,7 +74,7 @@ +@@ -76,7 +76,7 @@ } .goog-bubble-bottom-no-anchor { @@ -33280,32 +33645,9 @@ diff --git a/third_party/google-closure-library/closure/goog/css/bubble.css b/th background-position: center; background-repeat: no-repeat; width: 147px; -diff --git a/third_party/google-closure-library/closure/goog/css/charpicker.css b/third_party/google-closure-library/closure/goog/css/charpicker.css ---- a/third_party/google-closure-library/closure/goog/css/charpicker.css -+++ b/third_party/google-closure-library/closure/goog/css/charpicker.css -@@ -5,8 +5,8 @@ - * See the COPYING file for details. - */ - --/* Author: pupius@google.com (Daniel Pupius) */ --/* Author: cibu@google.com (Cibu Johny) */ -+/* Author: pupius@9oo91e.qjz9zk (Daniel Pupius) */ -+/* Author: cibu@9oo91e.qjz9zk (Cibu Johny) */ - - .goog-char-picker { - background-color: #ddd; diff --git a/third_party/google-closure-library/closure/goog/css/checkbox.css b/third_party/google-closure-library/closure/goog/css/checkbox.css --- a/third_party/google-closure-library/closure/goog/css/checkbox.css +++ b/third_party/google-closure-library/closure/goog/css/checkbox.css -@@ -5,7 +5,7 @@ - * See the COPYING file for details. - */ - --/* Author: pallosp@google.com (Peter Pallos) */ -+/* Author: pallosp@9oo91e.qjz9zk (Peter Pallos) */ - - /* Sample 3-state checkbox styles. */ - @@ -21,11 +21,11 @@ } @@ -33323,7 +33665,7 @@ diff --git a/third_party/google-closure-library/closure/goog/css/checkbox.css b/ diff --git a/third_party/google-closure-library/closure/goog/css/colorpalette.css b/third_party/google-closure-library/closure/goog/css/colorpalette.css --- a/third_party/google-closure-library/closure/goog/css/colorpalette.css +++ b/third_party/google-closure-library/closure/goog/css/colorpalette.css -@@ -27,7 +27,7 @@ +@@ -29,7 +29,7 @@ .goog-palette-cell-selected .goog-palette-colorswatch { /* Client apps may override the URL at which they serve the sprite. */ @@ -33347,8 +33689,8 @@ diff --git a/third_party/google-closure-library/closure/goog/css/colorpicker-sim diff --git a/third_party/google-closure-library/closure/goog/css/combobox.css b/third_party/google-closure-library/closure/goog/css/combobox.css --- a/third_party/google-closure-library/closure/goog/css/combobox.css +++ b/third_party/google-closure-library/closure/goog/css/combobox.css -@@ -12,7 +12,7 @@ - */ +@@ -15,7 +15,7 @@ + @require './menuseparator'; .goog-combobox { - background: #ddd url(//ssl.gstatic.com/closure/button-bg.gif) repeat-x scroll left top; @@ -33356,24 +33698,10 @@ diff --git a/third_party/google-closure-library/closure/goog/css/combobox.css b/ border: 1px solid #b5b6b5; font: normal small arial, sans-serif; } -diff --git a/third_party/google-closure-library/closure/goog/css/css3button.css b/third_party/google-closure-library/closure/goog/css/css3button.css ---- a/third_party/google-closure-library/closure/goog/css/css3button.css -+++ b/third_party/google-closure-library/closure/goog/css/css3button.css -@@ -5,8 +5,8 @@ - * See the COPYING file for details. - */ - --/* Author: slightlyoff@google.com (Alex Russell) */ --/* Author: eae@google.com (Emil A Eklund) */ -+/* Author: slightlyoff@9oo91e.qjz9zk (Alex Russell) */ -+/* Author: eae@9oo91e.qjz9zk (Emil A Eklund) */ - - /* Imageless button styles. */ - .goog-css3-button { diff --git a/third_party/google-closure-library/closure/goog/css/css3menubutton.css b/third_party/google-closure-library/closure/goog/css/css3menubutton.css --- a/third_party/google-closure-library/closure/goog/css/css3menubutton.css +++ b/third_party/google-closure-library/closure/goog/css/css3menubutton.css -@@ -14,7 +14,7 @@ +@@ -16,7 +16,7 @@ height: 16px; width: 7px; /* Client apps may override the URL at which they serve the sprite. */ @@ -33385,7 +33713,7 @@ diff --git a/third_party/google-closure-library/closure/goog/css/css3menubutton. diff --git a/third_party/google-closure-library/closure/goog/css/custombutton.css b/third_party/google-closure-library/closure/goog/css/custombutton.css --- a/third_party/google-closure-library/closure/goog/css/custombutton.css +++ b/third_party/google-closure-library/closure/goog/css/custombutton.css -@@ -16,7 +16,7 @@ +@@ -20,7 +20,7 @@ font-family: Arial, sans-serif; color: #000; /* Client apps may override the URL at which they serve the image. */ @@ -33397,7 +33725,7 @@ diff --git a/third_party/google-closure-library/closure/goog/css/custombutton.cs diff --git a/third_party/google-closure-library/closure/goog/css/dialog.css b/third_party/google-closure-library/closure/goog/css/dialog.css --- a/third_party/google-closure-library/closure/goog/css/dialog.css +++ b/third_party/google-closure-library/closure/goog/css/dialog.css -@@ -50,7 +50,7 @@ +@@ -49,7 +49,7 @@ .modal-dialog-title-close { /* Client apps may override the URL at which they serve the sprite. */ @@ -33406,20 +33734,6 @@ diff --git a/third_party/google-closure-library/closure/goog/css/dialog.css b/th cursor: default; height: 15px; position: absolute; -diff --git a/third_party/google-closure-library/closure/goog/css/dimensionpicker.css b/third_party/google-closure-library/closure/goog/css/dimensionpicker.css ---- a/third_party/google-closure-library/closure/goog/css/dimensionpicker.css -+++ b/third_party/google-closure-library/closure/goog/css/dimensionpicker.css -@@ -8,8 +8,8 @@ - /* - * Styling for dimension pickers rendered by goog.ui.DimensionPickerRenderer. - * -- * Author: robbyw@google.com (Robby Walker) -- * Author: abefettig@google.com (Abe Fettig) -+ * Author: robbyw@9oo91e.qjz9zk (Robby Walker) -+ * Author: abefettig@9oo91e.qjz9zk (Abe Fettig) - */ - - .goog-dimension-picker { diff --git a/third_party/google-closure-library/closure/goog/css/dragdropdetector.css b/third_party/google-closure-library/closure/goog/css/dragdropdetector.css --- a/third_party/google-closure-library/closure/goog/css/dragdropdetector.css +++ b/third_party/google-closure-library/closure/goog/css/dragdropdetector.css @@ -33433,11 +33747,11 @@ diff --git a/third_party/google-closure-library/closure/goog/css/dragdropdetecto + * Author: wcrosby@9oo91e.qjz9zk (Wayne Crosby) */ - .goog-dragdrop-w3c-editable-iframe { + @provide 'goog.css.dragdropdetector'; diff --git a/third_party/google-closure-library/closure/goog/css/editor/bubble.css b/third_party/google-closure-library/closure/goog/css/editor/bubble.css --- a/third_party/google-closure-library/closure/goog/css/editor/bubble.css +++ b/third_party/google-closure-library/closure/goog/css/editor/bubble.css -@@ -40,7 +40,7 @@ div.tr_bubble { +@@ -41,7 +41,7 @@ div.tr_bubble { .tr_bubble_closebox { position: absolute; cursor: default; @@ -33449,18 +33763,7 @@ diff --git a/third_party/google-closure-library/closure/goog/css/editor/bubble.c diff --git a/third_party/google-closure-library/closure/goog/css/editor/equationeditor.css b/third_party/google-closure-library/closure/goog/css/editor/equationeditor.css --- a/third_party/google-closure-library/closure/goog/css/editor/equationeditor.css +++ b/third_party/google-closure-library/closure/goog/css/editor/equationeditor.css -@@ -8,8 +8,8 @@ - /* - * The CSS definition for everything inside equation editor dialog. - * -- * Author: yoah@google.com (Yoah Bar-David) -- * Author: kfk@google.com (Ming Zhang) -+ * Author: yoah@9oo91e.qjz9zk (Yoah Bar-David) -+ * Author: kfk@9oo91e.qjz9zk (Ming Zhang) - */ - - .ee-modal-dialog { -@@ -108,6 +108,6 @@ +@@ -107,6 +107,6 @@ .ee-palette-item, .ee-menu-palette-item { @@ -33480,34 +33783,10 @@ diff --git a/third_party/google-closure-library/closure/goog/css/editortoolbar.c vertical-align: middle; } -diff --git a/third_party/google-closure-library/closure/goog/css/filteredmenu.css b/third_party/google-closure-library/closure/goog/css/filteredmenu.css ---- a/third_party/google-closure-library/closure/goog/css/filteredmenu.css -+++ b/third_party/google-closure-library/closure/goog/css/filteredmenu.css -@@ -5,7 +5,7 @@ - * See the COPYING file for details. - */ - --/* Author: pupius@google.com (Daniel Pupius) */ -+/* Author: pupius@9oo91e.qjz9zk (Daniel Pupius) */ - - /* goog.ui.FilteredMenu */ - -diff --git a/third_party/google-closure-library/closure/goog/css/filterobservingmenuitem.css b/third_party/google-closure-library/closure/goog/css/filterobservingmenuitem.css ---- a/third_party/google-closure-library/closure/goog/css/filterobservingmenuitem.css -+++ b/third_party/google-closure-library/closure/goog/css/filterobservingmenuitem.css -@@ -5,7 +5,7 @@ - * See the COPYING file for details. - */ - --/* Author: pupius@google.com (Daniel Pupius) */ -+/* Author: pupius@9oo91e.qjz9zk (Daniel Pupius) */ - - /* goog.ui.FilterObservingMenuItem */ - diff --git a/third_party/google-closure-library/closure/goog/css/flatmenubutton.css b/third_party/google-closure-library/closure/goog/css/flatmenubutton.css --- a/third_party/google-closure-library/closure/goog/css/flatmenubutton.css +++ b/third_party/google-closure-library/closure/goog/css/flatmenubutton.css -@@ -52,7 +52,7 @@ +@@ -54,7 +54,7 @@ .goog-flat-menu-button-dropdown { /* Client apps may override the URL at which they serve the sprite. */ @@ -33516,22 +33795,10 @@ diff --git a/third_party/google-closure-library/closure/goog/css/flatmenubutton. position: absolute; right: 2px; top: 0; -diff --git a/third_party/google-closure-library/closure/goog/css/hovercard.css b/third_party/google-closure-library/closure/goog/css/hovercard.css ---- a/third_party/google-closure-library/closure/goog/css/hovercard.css -+++ b/third_party/google-closure-library/closure/goog/css/hovercard.css -@@ -5,7 +5,7 @@ - * See the COPYING file for details. - */ - --/* Author: larrypo@google.com (Larry Powelson) */ -+/* Author: larrypo@9oo91e.qjz9zk (Larry Powelson) */ - - .goog-hovercard div { - border: solid 5px #69748C; diff --git a/third_party/google-closure-library/closure/goog/css/hsvapalette.css b/third_party/google-closure-library/closure/goog/css/hsvapalette.css --- a/third_party/google-closure-library/closure/goog/css/hsvapalette.css +++ b/third_party/google-closure-library/closure/goog/css/hsvapalette.css -@@ -59,7 +59,7 @@ +@@ -61,7 +61,7 @@ .goog-hsva-palette-v-handle, .goog-hsva-palette-a-handle, .goog-hsva-palette-swatch-backdrop { @@ -33540,7 +33807,7 @@ diff --git a/third_party/google-closure-library/closure/goog/css/hsvapalette.css } .goog-hsva-palette-noalpha .goog-hsva-palette-hs-image, -@@ -69,7 +69,7 @@ +@@ -71,7 +71,7 @@ .goog-hsva-palette-noalpha .goog-hsva-palette-v-handle, .goog-hsva-palette-noalpha .goog-hsva-palette-a-handle, .goog-hsva-palette-noalpha .goog-hsva-palette-swatch-backdrop { @@ -33549,7 +33816,7 @@ diff --git a/third_party/google-closure-library/closure/goog/css/hsvapalette.css } .goog-hsva-palette-sm-hs-image, -@@ -79,7 +79,7 @@ +@@ -81,7 +81,7 @@ .goog-hsva-palette-sm-v-handle, .goog-hsva-palette-sm-a-handle, .goog-hsva-palette-sm-swatch-backdrop { @@ -33558,7 +33825,7 @@ diff --git a/third_party/google-closure-library/closure/goog/css/hsvapalette.css } .goog-hsva-palette-noalpha .goog-hsva-palette-sm-hs-image, -@@ -89,7 +89,7 @@ +@@ -91,7 +91,7 @@ .goog-hsva-palette-noalpha .goog-hsva-palette-sm-v-handle, .goog-hsva-palette-noalpha .goog-hsva-palette-sm-a-handle, .goog-hsva-palette-noalpha .goog-hsva-palette-swatch-backdrop { @@ -33570,7 +33837,7 @@ diff --git a/third_party/google-closure-library/closure/goog/css/hsvapalette.css diff --git a/third_party/google-closure-library/closure/goog/css/hsvpalette.css b/third_party/google-closure-library/closure/goog/css/hsvpalette.css --- a/third_party/google-closure-library/closure/goog/css/hsvpalette.css +++ b/third_party/google-closure-library/closure/goog/css/hsvpalette.css -@@ -56,28 +56,28 @@ +@@ -58,28 +58,28 @@ .goog-hsv-palette-v-image, .goog-hsv-palette-hs-handle, .goog-hsv-palette-v-handle { @@ -33606,7 +33873,7 @@ diff --git a/third_party/google-closure-library/closure/goog/css/hsvpalette.css diff --git a/third_party/google-closure-library/closure/goog/css/imagelessmenubutton.css b/third_party/google-closure-library/closure/goog/css/imagelessmenubutton.css --- a/third_party/google-closure-library/closure/goog/css/imagelessmenubutton.css +++ b/third_party/google-closure-library/closure/goog/css/imagelessmenubutton.css -@@ -15,7 +15,7 @@ +@@ -16,7 +16,7 @@ height: 16px; width: 7px; /* Client apps may override the URL at which they serve the sprite. */ @@ -33615,22 +33882,10 @@ diff --git a/third_party/google-closure-library/closure/goog/css/imagelessmenubu vertical-align: top; margin-right: 2px; } -diff --git a/third_party/google-closure-library/closure/goog/css/inputdatepicker.css b/third_party/google-closure-library/closure/goog/css/inputdatepicker.css ---- a/third_party/google-closure-library/closure/goog/css/inputdatepicker.css -+++ b/third_party/google-closure-library/closure/goog/css/inputdatepicker.css -@@ -5,7 +5,7 @@ - * See the COPYING file for details. - */ - --/* Author: arv@google.com (Erik Arvidsson) */ -+/* Author: arv@9oo91e.qjz9zk (Erik Arvidsson) */ - - /* goog.ui.InputDatePicker */ - diff --git a/third_party/google-closure-library/closure/goog/css/menubutton.css b/third_party/google-closure-library/closure/goog/css/menubutton.css --- a/third_party/google-closure-library/closure/goog/css/menubutton.css +++ b/third_party/google-closure-library/closure/goog/css/menubutton.css -@@ -14,7 +14,7 @@ +@@ -16,7 +16,7 @@ /* State: resting. */ .goog-menu-button { /* Client apps may override the URL at which they serve the image. */ @@ -33639,7 +33894,7 @@ diff --git a/third_party/google-closure-library/closure/goog/css/menubutton.css border: 0; color: #000; cursor: pointer; -@@ -140,7 +140,7 @@ +@@ -142,7 +142,7 @@ height: 15px; width: 7px; /* Client apps may override the URL at which they serve the sprite. */ @@ -33660,46 +33915,10 @@ diff --git a/third_party/google-closure-library/closure/goog/css/menuitem.css b/ } /* Keyboard shortcut ("accelerator") style. */ -diff --git a/third_party/google-closure-library/closure/goog/css/multitestrunner.css b/third_party/google-closure-library/closure/goog/css/multitestrunner.css ---- a/third_party/google-closure-library/closure/goog/css/multitestrunner.css -+++ b/third_party/google-closure-library/closure/goog/css/multitestrunner.css -@@ -5,7 +5,7 @@ - * See the COPYING file for details. - */ - --/* Author: pupius@google.com (Daniel Pupius) */ -+/* Author: pupius@9oo91e.qjz9zk (Daniel Pupius) */ - - .goog-testrunner { - background-color: #EEE; -diff --git a/third_party/google-closure-library/closure/goog/css/roundedtab.css b/third_party/google-closure-library/closure/goog/css/roundedtab.css ---- a/third_party/google-closure-library/closure/goog/css/roundedtab.css -+++ b/third_party/google-closure-library/closure/goog/css/roundedtab.css -@@ -5,7 +5,7 @@ - * See the COPYING file for details. - */ - --/* Author: attila@google.com (Attila Bodis) */ -+/* Author: attila@9oo91e.qjz9zk (Attila Bodis) */ - - - /* -diff --git a/third_party/google-closure-library/closure/goog/css/tablesorter.css b/third_party/google-closure-library/closure/goog/css/tablesorter.css ---- a/third_party/google-closure-library/closure/goog/css/tablesorter.css -+++ b/third_party/google-closure-library/closure/goog/css/tablesorter.css -@@ -5,7 +5,7 @@ - * See the COPYING file for details. - */ - --/* Author: robbyw@google.com (Robby Walker) */ -+/* Author: robbyw@9oo91e.qjz9zk (Robby Walker) */ - - /* Styles for goog.ui.TableSorter. */ - diff --git a/third_party/google-closure-library/closure/goog/css/toolbar.css b/third_party/google-closure-library/closure/goog/css/toolbar.css --- a/third_party/google-closure-library/closure/goog/css/toolbar.css +++ b/third_party/google-closure-library/closure/goog/css/toolbar.css -@@ -17,7 +17,7 @@ +@@ -19,7 +19,7 @@ .goog-toolbar { /* Client apps may override the URL at which they serve the image. */ @@ -33708,7 +33927,7 @@ diff --git a/third_party/google-closure-library/closure/goog/css/toolbar.css b/t border-bottom: 1px solid #d5d5d5; cursor: default; font: normal 12px Arial, sans-serif; -@@ -352,7 +352,7 @@ +@@ -354,7 +354,7 @@ .goog-toolbar-menu-button-dropdown { width: 7px; /* Client apps may override the URL at which they serve the sprite. */ @@ -33720,20 +33939,7 @@ diff --git a/third_party/google-closure-library/closure/goog/css/toolbar.css b/t diff --git a/third_party/google-closure-library/closure/goog/css/tree.css b/third_party/google-closure-library/closure/goog/css/tree.css --- a/third_party/google-closure-library/closure/goog/css/tree.css +++ b/third_party/google-closure-library/closure/goog/css/tree.css -@@ -5,9 +5,9 @@ - * See the COPYING file for details. - */ - --/* Author: arv@google.com (Erik Arvidsson) */ --/* Author: eae@google.com (Emil A Eklund) */ --/* Author: jonp@google.com (Jon Perlow) */ -+/* Author: arv@9oo91e.qjz9zk (Erik Arvidsson) */ -+/* Author: eae@9oo91e.qjz9zk (Emil A Eklund) */ -+/* Author: jonp@9oo91e.qjz9zk (Jon Perlow) */ - - /* - TODO(arv): Currently the sprite image has the height 16px. We should make the -@@ -33,7 +33,7 @@ +@@ -31,7 +31,7 @@ .goog-tree-children { background-repeat: repeat-y; @@ -33742,7 +33948,7 @@ diff --git a/third_party/google-closure-library/closure/goog/css/tree.css b/thir background-position-y: 1px !important; /* IE only */ font: icon; } -@@ -43,7 +43,7 @@ +@@ -41,7 +41,7 @@ } .goog-tree-icon { @@ -33754,15 +33960,6 @@ diff --git a/third_party/google-closure-library/closure/goog/css/tree.css b/thir diff --git a/third_party/google-closure-library/closure/goog/css/tristatemenuitem.css b/third_party/google-closure-library/closure/goog/css/tristatemenuitem.css --- a/third_party/google-closure-library/closure/goog/css/tristatemenuitem.css +++ b/third_party/google-closure-library/closure/goog/css/tristatemenuitem.css -@@ -5,7 +5,7 @@ - * See the COPYING file for details. - */ - --/* Author: pupius@google.com (Daniel Pupius) */ -+/* Author: pupius@9oo91e.qjz9zk (Daniel Pupius) */ - - /* goog.ui.TriStateMenuItem */ - @@ -31,13 +31,13 @@ } @@ -33812,6 +34009,59 @@ diff --git a/third_party/google-closure-library/closure/goog/demos/autocompleter + url: 'http://www.9oo91e.qjz9zk/images?q=blackberry+fruit' } ]] +diff --git a/third_party/google-closure-library/closure/goog/demos/autocompleterichremotedata.json b/third_party/google-closure-library/closure/goog/demos/autocompleterichremotedata.json +--- a/third_party/google-closure-library/closure/goog/demos/autocompleterichremotedata.json ++++ b/third_party/google-closure-library/closure/goog/demos/autocompleterichremotedata.json +@@ -3,41 +3,41 @@ + "apple", + { + "name": "Fuji", +- "url": "http://www.google.com/images?q=fuji+apple" ++ "url": "http://www.9oo91e.qjz9zk/images?q=fuji+apple" + }, + { + "name": "Gala", +- "url": "http://www.google.com/images?q=gala+apple" ++ "url": "http://www.9oo91e.qjz9zk/images?q=gala+apple" + }, + { + "name": "Golden Delicious", +- "url": "http://www.google.com/images?q=golden delicious+apple" ++ "url": "http://www.9oo91e.qjz9zk/images?q=golden delicious+apple" + } + ], + [ + "citrus", + { + "name": "Lemon", +- "url": "http://www.google.com/images?q=lemon+fruit" ++ "url": "http://www.9oo91e.qjz9zk/images?q=lemon+fruit" + }, + { + "name": "Orange", +- "url": "http://www.google.com/images?q=orange+fruit" ++ "url": "http://www.9oo91e.qjz9zk/images?q=orange+fruit" + } + ], + [ + "berry", + { + "name": "Strawberry", +- "url": "http://www.google.com/images?q=strawberry+fruit" ++ "url": "http://www.9oo91e.qjz9zk/images?q=strawberry+fruit" + }, + { + "name": "Blueberry", +- "url": "http://www.google.com/images?q=blueberry+fruit" ++ "url": "http://www.9oo91e.qjz9zk/images?q=blueberry+fruit" + }, + { + "name": "Blackberry", +- "url": "http://www.google.com/images?q=blackberry+fruit" ++ "url": "http://www.9oo91e.qjz9zk/images?q=blackberry+fruit" + } + ] + ] diff --git a/third_party/google-closure-library/closure/goog/demos/css/demo.css b/third_party/google-closure-library/closure/goog/demos/css/demo.css --- a/third_party/google-closure-library/closure/goog/demos/css/demo.css +++ b/third_party/google-closure-library/closure/goog/demos/css/demo.css @@ -33937,7 +34187,7 @@ diff --git a/third_party/google-closure-library/closure/goog/demos/history3.html diff --git a/third_party/google-closure-library/closure/goog/demos/hovercard.html b/third_party/google-closure-library/closure/goog/demos/hovercard.html --- a/third_party/google-closure-library/closure/goog/demos/hovercard.html +++ b/third_party/google-closure-library/closure/goog/demos/hovercard.html -@@ -37,21 +37,21 @@ See the COPYING file for details. +@@ -36,21 +36,21 @@ See the COPYING file for details.

goog.ui.HoverCard

Show by mouse position:


@@ -33983,16 +34233,16 @@ diff --git a/third_party/google-closure-library/closure/goog/demos/splitpane.htm diff --git a/third_party/google-closure-library/closure/goog/html/safeurl_test_vectors.js b/third_party/google-closure-library/closure/goog/html/safeurl_test_vectors.js --- a/third_party/google-closure-library/closure/goog/html/safeurl_test_vectors.js +++ b/third_party/google-closure-library/closure/goog/html/safeurl_test_vectors.js -@@ -70,7 +70,7 @@ goog.html.safeUrlTestVectors.BASE_VECTORS = [ +@@ -47,7 +47,7 @@ goog.html.safeUrlTestVectors.BASE_VECTORS = [ {input: 'geo:37.7,42.0', expected: 'about:invalid#zClosurez', safe: false}, - {input: 'skype:chat?jid=foo', expected: 'about:invalid#zClosurez', safe: false}, - {input: 'whatsapp://send?text=Hello', expected: 'about:invalid#zClosurez', safe: false}, + {input: 'skype:chat?jid\u003Dfoo', expected: 'about:invalid#zClosurez', safe: false}, + {input: 'whatsapp://send?text\u003DHello', expected: 'about:invalid#zClosurez', safe: false}, - {input: 'ssh://cloud.google.com', expected: 'about:invalid#zClosurez', safe: false}, + {input: 'ssh://cloud.9oo91e.qjz9zk', expected: 'about:invalid#zClosurez', safe: false}, {input: ':', expected: 'about:invalid#zClosurez', safe: false}, {input: '\\:', expected: 'about:invalid#zClosurez', safe: false}, {input: ':/:', expected: 'about:invalid#zClosurez', safe: false}, -@@ -113,10 +113,10 @@ goog.html.safeUrlTestVectors.SMS_VECTORS = [ +@@ -91,10 +91,10 @@ goog.html.safeUrlTestVectors.SMS_VECTORS = [ ]; goog.html.safeUrlTestVectors.SSH_VECTORS = [ @@ -34009,7 +34259,7 @@ diff --git a/third_party/google-closure-library/closure/goog/html/safeurl_test_v diff --git a/third_party/google-closure-library/closure/goog/html/sanitizer/html_test_vectors.js b/third_party/google-closure-library/closure/goog/html/sanitizer/html_test_vectors.js --- a/third_party/google-closure-library/closure/goog/html/sanitizer/html_test_vectors.js +++ b/third_party/google-closure-library/closure/goog/html/sanitizer/html_test_vectors.js -@@ -238,7 +238,7 @@ goog.html.htmlTestVectors.HTML_TEST_VECTORS = [ +@@ -269,7 +269,7 @@ goog.html.htmlTestVectors.HTML_TEST_VECTORS = [ "", ], name: "script_title"}, @@ -34018,11 +34268,23 @@ diff --git a/third_party/google-closure-library/closure/goog/html/sanitizer/html acceptable: [ "", ], +diff --git a/third_party/google-closure-library/closure/goog/labs/net/webchannel/environment.js b/third_party/google-closure-library/closure/goog/labs/net/webchannel/environment.js +--- a/third_party/google-closure-library/closure/goog/labs/net/webchannel/environment.js ++++ b/third_party/google-closure-library/closure/goog/labs/net/webchannel/environment.js +@@ -141,7 +141,7 @@ function isUrlGoogle(url) { + return false; + } + const origin = match[1]; +- return origin.endsWith("google.com"); ++ return origin.endsWith("9oo91e.qjz9zk"); + } + + /** diff --git a/third_party/google-closure-library/closure/goog/labs/net/webchannel/netutils.js b/third_party/google-closure-library/closure/goog/labs/net/webchannel/netutils.js --- a/third_party/google-closure-library/closure/goog/labs/net/webchannel/netutils.js +++ b/third_party/google-closure-library/closure/goog/labs/net/webchannel/netutils.js -@@ -50,7 +50,7 @@ netUtils.testNetwork = function(callback, opt_imageUri) { - var uri = opt_imageUri; +@@ -45,7 +45,7 @@ netUtils.testNetwork = function(callback, opt_imageUri) { + let uri = opt_imageUri; if (!uri) { // default google.com image - uri = new goog.Uri('//www.google.com/images/cleardot.gif'); @@ -34033,9 +34295,9 @@ diff --git a/third_party/google-closure-library/closure/goog/labs/net/webchannel diff --git a/third_party/google-closure-library/closure/goog/labs/net/webchannel/webchannelbase.js b/third_party/google-closure-library/closure/goog/labs/net/webchannel/webchannelbase.js --- a/third_party/google-closure-library/closure/goog/labs/net/webchannel/webchannelbase.js +++ b/third_party/google-closure-library/closure/goog/labs/net/webchannel/webchannelbase.js -@@ -2155,10 +2155,10 @@ WebChannelBase.prototype.signalError_ = function(error) { - */ +@@ -2345,10 +2345,10 @@ WebChannelBase.prototype.signalError_ = function(error) { WebChannelBase.prototype.testNetworkCallback_ = function(networkUp) { + 'use strict'; if (networkUp) { - this.channelDebug_.info('Successfully pinged google.com'); + this.channelDebug_.info('Successfully pinged 9oo91e.qjz9zk'); @@ -34049,24 +34311,24 @@ diff --git a/third_party/google-closure-library/closure/goog/labs/net/webchannel diff --git a/third_party/google-closure-library/closure/goog/net/browserchannel.js b/third_party/google-closure-library/closure/goog/net/browserchannel.js --- a/third_party/google-closure-library/closure/goog/net/browserchannel.js +++ b/third_party/google-closure-library/closure/goog/net/browserchannel.js -@@ -2210,11 +2210,11 @@ goog.net.BrowserChannel.prototype.signalError_ = function(error) { - */ +@@ -2125,11 +2125,11 @@ goog.net.BrowserChannel.prototype.signalError_ = function(error) { goog.net.BrowserChannel.prototype.testGoogleComCallback_ = function(networkUp) { + 'use strict'; if (networkUp) { - this.channelDebug_.info('Successfully pinged google.com'); + this.channelDebug_.info('Successfully pinged 9oo91e.qjz9zk'); - goog.net.BrowserChannel.notifyStatEvent( - goog.net.BrowserChannel.Stat.ERROR_OTHER); + goog.net.browserchannelinternal.stats.notifyStatEvent( + goog.net.browserchannelinternal.stats.Stat.ERROR_OTHER); } else { - this.channelDebug_.info('Failed to ping google.com'); + this.channelDebug_.info('Failed to ping 9oo91e.qjz9zk'); - goog.net.BrowserChannel.notifyStatEvent( - goog.net.BrowserChannel.Stat.ERROR_NETWORK); + goog.net.browserchannelinternal.stats.notifyStatEvent( + goog.net.browserchannelinternal.stats.Stat.ERROR_NETWORK); // We call onError_ here instead of signalError_ because the latter just diff --git a/third_party/google-closure-library/closure/goog/net/networktester.js b/third_party/google-closure-library/closure/goog/net/networktester.js --- a/third_party/google-closure-library/closure/goog/net/networktester.js +++ b/third_party/google-closure-library/closure/goog/net/networktester.js -@@ -58,7 +58,7 @@ goog.net.NetworkTester = function(callback, opt_handler, opt_uri) { +@@ -51,7 +51,7 @@ goog.net.NetworkTester = function(callback, opt_handler, opt_uri) { // We need to add a 'rand' to make sure the response is not fulfilled // by browser cache. Use protocol-relative URLs to avoid insecure content // warnings in IE. @@ -34078,7 +34340,7 @@ diff --git a/third_party/google-closure-library/closure/goog/net/networktester.j diff --git a/third_party/google-closure-library/closure/goog/net/tmpnetwork.js b/third_party/google-closure-library/closure/goog/net/tmpnetwork.js --- a/third_party/google-closure-library/closure/goog/net/tmpnetwork.js +++ b/third_party/google-closure-library/closure/goog/net/tmpnetwork.js -@@ -40,7 +40,7 @@ goog.net.tmpnetwork.GOOGLECOM_TIMEOUT = 10000; +@@ -32,7 +32,7 @@ goog.net.tmpnetwork.GOOGLECOM_TIMEOUT = 10000; * Use protocol-relative URLs to avoid insecure content warnings in IE. */ goog.net.tmpnetwork.TEST_URL = goog.define( @@ -34090,8 +34352,8 @@ diff --git a/third_party/google-closure-library/closure/goog/net/tmpnetwork.js b diff --git a/third_party/google-closure-library/closure/goog/soy/soy_testhelper.js b/third_party/google-closure-library/closure/goog/soy/soy_testhelper.js --- a/third_party/google-closure-library/closure/goog/soy/soy_testhelper.js +++ b/third_party/google-closure-library/closure/goog/soy/soy_testhelper.js -@@ -236,7 +236,7 @@ example.sanitizedSmsUrlTemplate = function(data, opt_sb, opt_injectedData) { - example.sanitizedHttpUrlTemplate = function(data, opt_sb, opt_injectedData) { +@@ -225,7 +225,7 @@ example.sanitizedHttpUrlTemplate = function(data, opt_injectedData) { + 'use strict'; // Test the SanitizedContent constructor. const sanitized = makeSanitizedContent( - 'https://google.com/foo?n=917', goog.soy.data.SanitizedContentKind.URI); @@ -34099,10 +34361,10 @@ diff --git a/third_party/google-closure-library/closure/goog/soy/soy_testhelper. return sanitized; }; -@@ -249,7 +249,7 @@ example.sanitizedHttpUrlTemplate = function(data, opt_sb, opt_injectedData) { +@@ -237,7 +237,7 @@ example.sanitizedHttpUrlTemplate = function(data, opt_injectedData) { */ - example.sanitizedTrustedResourceUriTemplate = function( - data, opt_sb, opt_injectedData) { + example.sanitizedTrustedResourceUriTemplate = function(data, opt_injectedData) { + 'use strict'; - return new SanitizedTrustedResourceUriSubclass('https://google.com/a.js'); + return new SanitizedTrustedResourceUriSubclass('https://9oo91e.qjz9zk/a.js'); }; @@ -34122,159 +34384,22 @@ diff --git a/third_party/google-closure-library/closure/goog/testing/performance table.test-results { font: 12px "Courier New", Courier, monospace; +diff --git a/third_party/google-closure-library/closure/goog/testing/testcase.js b/third_party/google-closure-library/closure/goog/testing/testcase.js +--- a/third_party/google-closure-library/closure/goog/testing/testcase.js ++++ b/third_party/google-closure-library/closure/goog/testing/testcase.js +@@ -2298,7 +2298,7 @@ goog.testing.TestCase.parseRunTests_ = function(href) { + // Use a "fake" origin because tests may load using protocols that goog.url + // doesn't support + const searchParams = goog.url.getSearchParams( +- goog.url.resolveUrl('https://google.com' + nonOriginParts)); ++ goog.url.resolveUrl('https://9oo91e.qjz9zk' + nonOriginParts)); + + let runTestsString = null; + for (const [key, value] of searchParams) { diff --git a/third_party/google-closure-library/closure/goog/transpile.js b/third_party/google-closure-library/closure/goog/transpile.js --- a/third_party/google-closure-library/closure/goog/transpile.js +++ b/third_party/google-closure-library/closure/goog/transpile.js -@@ -777,92 +777,92 @@ function gy(){}l(gy,n);function hy(a){var b=0,c=Kj();do{var d=li(a,46,b);c.Y(ne( - function fra(a,b){var c=new hra;c.b=a;c.a=b;return c}g=hra.prototype;g.Wg=function(){return 1}\n * @suppress {externsValidation}\n */\nIterable.prototype[Symbol.iterator] = function() {};\n\n\n\n/**\n * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for\n * anything. https://github.com/google/closure-compiler/issues/3489\n * @interface\n * @template VALUE, UNUSED_RETURN_T, UNUSED_NEXT_T\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/The_Iterator_protocol\n */\nfunction Iterator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!IIterableResult}\n */\nIterator.prototype.next = function(opt_value) {};\n\n\n/**\n * Use this to indicate a type is both an Iterator and an Iterable.\n * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for\n * anything. https://github.com/google/closure-compiler/issues/3489\n * @interface\n * @extends {Iterator}\n * @extends {Iterable}\n * @template T, UNUSED_RETURN_T, UNUSED_NEXT_T\n */\nfunction IteratorIterable() {}\n\n// END ES6 RETROFIT CODE\n\n\n/**\n * @interface\n * @template KEY1, VALUE1\n */\nfunction IObject() {}\n\n/**\n * @record\n * @extends {IObject}\n * @template VALUE2\n */\nfunction IArrayLike() {}\n\n/** @type {number} */\nIArrayLike.prototype.length;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments\n */\nfunction Arguments() {}\n\n/**\n * @type {Function}\n * @see http://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments/callee\n */\nArguments.prototype.callee;\n\n/**\n * Use the non-standard {@see Function.prototype.caller} property of a function\n * object instead.\n * @type {Function}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments/caller\n * @deprecated\n */\nArguments.prototype.caller;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments/length\n */\nArguments.prototype.length;\n\n/**\n * Not actually a global variable, when running in a browser environment. But\n * we need it in order for the type checker to typecheck the "arguments"\n * variable in a function correctly.\n *\n * TODO(tbreisacher): There should be a separate \'arguments\' variable of type\n * `Array`, in the d8 externs.\n *\n * @type {!Arguments}\n * @see http://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments\n */\nvar arguments;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity\n * @const\n */\nvar Infinity;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN\n * @const\n */\nvar NaN;\n\n/**\n * @type {undefined}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined\n * @const\n */\nvar undefined;\n\n/**\n * @param {string} uri\n * @return {string}\n * @throws {URIError} when used wrongly.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURI\n */\nfunction decodeURI(uri) {}\n\n/**\n * @param {string} uri\n * @return {string}\n * @throws {URIError} when used wrongly.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent\n */\nfunction decodeURIComponent(uri) {}\n\n/**\n * @param {string} uri\n * @return {string}\n * @throws {URIError} if one attempts to encode a surrogate which is not part of\n * a high-low pair.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI\n */\nfunction encodeURI(uri) {}\n\n/**\n * @param {string} uri\n * @return {string}\n * @throws {URIError} if one attempts to encode a surrogate which is not part of\n * a high-low pair.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent\n */\nfunction encodeURIComponent(uri) {}\n\n/**\n * Should only be used in browsers where encode/decodeURIComponent\n * are not present, as the latter handle fancy Unicode characters.\n * @param {string} str\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Predefined_Functions/escape_and_unescape_Functions\n */\nfunction escape(str) {}\n\n/**\n * Should only be used in browsers where encode/decodeURIComponent\n * are not present, as the latter handle fancy Unicode characters.\n * @param {string} str\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Predefined_Functions/escape_and_unescape_Functions\n */\nfunction unescape(str) {}\n\n/**\n * @param {*} num\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isFinite\n */\nfunction isFinite(num) {}\n\n/**\n * @param {*} num\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN\n */\nfunction isNaN(num) {}\n\n/**\n * @param {*} num\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat\n */\nfunction parseFloat(num) {}\n\n/**\n * Parse an integer. Use of `parseInt` without `base` is strictly\n * banned in Google. If you really want to parse octal or hex based on the\n * leader, then pass `undefined` as the base.\n *\n * @param {*} num\n * @param {number|undefined} base\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt\n */\nfunction parseInt(num, base) {}\n\n/**\n * @param {string} code\n * @return {*}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval\n */\nfunction eval(code) {}\n\n\n\n/**\n * @constructor\n * @param {*=} opt_value\n * @return {!Object}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object\n */\nfunction Object(opt_value) {}\n\n/**\n * The constructor of the current object.\n * @type {Function}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n */\nObject.prototype.constructor = function() {};\n\n/**\n * Binds an object\'s property to a function to be called when that property is\n * looked up.\n * Mozilla-only.\n *\n * @param {string} sprop\n * @param {Function} fun\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineGetter\n * @return {undefined}\n * @deprecated\n */\nObject.prototype.__defineGetter__ = function(sprop, fun) {};\n\n/**\n * Binds an object\'s property to a function to be called when an attempt is made\n * to set that property.\n * Mozilla-only.\n *\n * @param {string} sprop\n * @param {Function} fun\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineSetter\n * @return {undefined}\n * @deprecated\n */\nObject.prototype.__defineSetter__ = function(sprop, fun) {};\n\n/**\n * Returns whether the object has a property with the specified name.\n *\n * @param {*} propertyName Implicitly cast to a string.\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty\n */\nObject.prototype.hasOwnProperty = function(propertyName) {};\n\n/**\n * Returns whether an object exists in another object\'s prototype chain.\n *\n * @param {Object} other\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf\n */\nObject.prototype.isPrototypeOf = function(other) {};\n\n/**\n * Return the function bound as a getter to the specified property.\n * Mozilla-only.\n *\n * @param {string} sprop a string containing the name of the property whose\n * getter should be returned\n * @return {Function}\n * @nosideeffects\n * @deprecated\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/lookupGetter\n */\nObject.prototype.__lookupGetter__ = function(sprop) {};\n\n/**\n * Return the function bound as a setter to the specified property.\n * Mozilla-only.\n *\n * @param {string} sprop a string containing the name of the property whose\n * setter should be returned.\n * @return {Function}\n * @nosideeffects\n * @deprecated\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/lookupSetter\n */\nObject.prototype.__lookupSetter__ = function(sprop) {};\n\n/**\n * Executes a function when a non-existent method is called on an object.\n * Mozilla-only.\n *\n * @param {Function} fun\n * @return {*}\n * @deprecated\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/noSuchMethod\n */\nObject.prototype.__noSuchMethod__ = function(fun) {};\n\n/**\n * Points to an object\'s context. For top-level objects, this is the e.g. window.\n * Mozilla-only.\n *\n * @type {Object}\n * @deprecated\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/parent\n */\nObject.prototype.__parent__;\n\n/**\n * Points to the object which was used as prototype when the object was instantiated.\n * Mozilla-only.\n *\n * Will be null on Object.prototype.\n *\n * @type {Object}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto\n */\nObject.prototype.__proto__;\n\n/**\n * Determine whether the specified property in an object can be enumerated by a\n * for..in loop, with the exception of properties inherited through the\n * prototype chain.\n *\n * @param {string|symbol} propertyName\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable\n */\nObject.prototype.propertyIsEnumerable = function(propertyName) {};\n\n/**\n * Returns a localized string representing the object.\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toLocaleString\n */\nObject.prototype.toLocaleString = function() {};\n\n/**\n * Returns a string representing the source code of the object.\n * Mozilla-only.\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toSource\n */\nObject.prototype.toSource = function() {};\n\n/**\n * Returns a string representing the object.\n * @this {*}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString\n */\nObject.prototype.toString = function() {};\n\n/**\n * Returns the object\'s `this` value.\n * @return {*}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf\n */\nObject.prototype.valueOf = function() {};\n\n/**\n * @constructor\n * @param {...*} var_args\n * @throws {Error}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function\n */\nfunction Function(var_args) {}\n\n/**\n * @param {...*} var_args\n * @return {*}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call\n */\nFunction.prototype.call = function(var_args) {};\n\n/**\n * @param {...*} var_args\n * @return {*}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply\n */\nFunction.prototype.apply = function(var_args) {};\n\nFunction.prototype.arguments;\n\n/**\n * @type {number}\n * @deprecated\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/arity\n */\nFunction.prototype.arity;\n\n/**\n * Nonstandard; Mozilla and JScript only.\n * @type {Function}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/caller\n */\nFunction.prototype.caller;\n\n/**\n * Nonstandard.\n * @type {?}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/displayName\n */\nFunction.prototype.displayName;\n\n/**\n * Expected number of arguments.\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/length\n */\nFunction.prototype.length;\n\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name\n */\nFunction.prototype.name;\n\n/**\n * @this {Function}\n * @return {string}\n * @nosideeffects\n * @override\n */\nFunction.prototype.toString = function() {};\n\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @param {...*} var_args\n * @return {!Array}\n * @nosideeffects\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array\n */\nfunction Array(var_args) {}\n\n/**\n * @return {Iterator}\n * @suppress {externsValidation}\n */\nArray.prototype[Symbol.iterator] = function() {};\n\n// Functions:\n\n/**\n * Returns a new array comprised of this array joined with other array(s)\n * and/or value(s).\n *\n * @param {...*} var_args\n * @return {!Array}\n * @this {*}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat\n */\nArray.prototype.concat = function(var_args) {};\n\n/**\n * Joins all elements of an array into a string.\n *\n * @param {*=} opt_separator Specifies a string to separate each element of the\n * array. The separator is converted to a string if necessary. If omitted,\n * the array elements are separated with a comma.\n * @return {string}\n * @this {IArrayLike|string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join\n */\nArray.prototype.join = function(opt_separator) {};\n\n/**\n * Removes the last element from an array and returns that element.\n *\n * @return {T}\n * @this {IArrayLike}\n * @modifies {this}\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop\n */\nArray.prototype.pop = function() {};\n\n// TODO(bradfordcsmith): remove "undefined" from the var_args of push\n/**\n * Mutates an array by appending the given elements and returning the new\n * length of the array.\n *\n * @param {...(T|undefined)} var_args\n * @return {number} The new length of the array.\n * @this {IArrayLike}\n * @template T\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push\n */\nArray.prototype.push = function(var_args) {};\n\n/**\n * Transposes the elements of an array in place: the first array element becomes the\n * last and the last becomes the first. The mutated array is also returned.\n *\n * @return {THIS} A reference to the original modified array.\n * @this {THIS}\n * @template THIS\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse\n */\nArray.prototype.reverse = function() {};\n\n/**\n * Removes the first element from an array and returns that element. This\n * method changes the length of the array.\n *\n * @this {IArrayLike}\n * @modifies {this}\n * @return {T}\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift\n */\nArray.prototype.shift = function() {};\n\n/**\n * Extracts a section of an array and returns a new array.\n *\n * @param {?number=} begin Zero-based index at which to begin extraction.\n * @param {?number=} end Zero-based index at which to end extraction. slice\n * extracts up to but not including end.\n * @return {!Array}\n * @this {IArrayLike|string}\n * @template T\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice\n */\nArray.prototype.slice = function(begin, end) {};\n\n/**\n * Sorts the elements of an array in place.\n *\n * @param {function(T,T):number=} opt_compareFn Specifies a function that\n * defines the sort order.\n * @this {IArrayLike}\n * @template T\n * @modifies {this}\n * @return {!Array}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort\n */\nArray.prototype.sort = function(opt_compareFn) {};\n\n/**\n * Changes the content of an array, adding new elements while removing old\n * elements.\n *\n * @param {?number=} index Index at which to start changing the array. If\n * negative, will begin that many elements from the end.\n * @param {?number=} howMany An integer indicating the number of old array\n * elements to remove.\n * @param {...T} var_args\n * @return {!Array}\n * @this {IArrayLike}\n * @modifies {this}\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice\n */\nArray.prototype.splice = function(index, howMany, var_args) {};\n\n/**\n * @return {string}\n * @this {Object}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toSource\n */\nArray.prototype.toSource;\n\n/**\n * @this {Array}\n * @return {string}\n * @nosideeffects\n * @override\n */\nArray.prototype.toString = function() {};\n\n/**\n * Adds one or more elements to the beginning of an array and returns the new\n * length of the array.\n *\n * @param {...*} var_args\n * @return {number} The new length of the array\n * @this {IArrayLike}\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift\n */\nArray.prototype.unshift = function(var_args) {};\n\n/**\n * Apply a function simultaneously against two values of the array (from\n * left-to-right) as to reduce it to a single value.\n *\n * @param {?function(?, T, number, !Array) : R} callback\n * @param {*=} opt_initialValue\n * @return {R}\n * @this {IArrayLike|string}\n * @template T,R\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce\n */\nArray.prototype.reduce = function(callback, opt_initialValue) {};\n\n/**\n * Apply a function simultaneously against two values of the array (from\n * right-to-left) as to reduce it to a single value.\n *\n * @param {?function(?, T, number, !Array) : R} callback\n * @param {*=} opt_initialValue\n * @return {R}\n * @this {IArrayLike|string}\n * @template T,R\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduceRight\n */\nArray.prototype.reduceRight = function(callback, opt_initialValue) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @return {boolean}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every\n */\nArray.prototype.every = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @return {!Array}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\n */\nArray.prototype.filter = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\n * @return {undefined}\n */\nArray.prototype.forEach = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @this {IArrayLike|string}\n * @nosideeffects\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf\n */\nArray.prototype.indexOf = function(obj, opt_fromIndex) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @this {IArrayLike|string}\n * @nosideeffects\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf\n */\nArray.prototype.lastIndexOf = function(obj, opt_fromIndex) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): R} callback\n * @param {S=} opt_thisobj\n * @return {!Array}\n * @this {IArrayLike|string}\n * @template T,S,R\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\n */\nArray.prototype.map = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @return {boolean}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some\n */\nArray.prototype.some = function(callback, opt_thisobj) {};\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/index\n */\nArray.prototype.index;\n\n/**\n * @type {?string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/input\n */\nArray.prototype.input;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/length\n */\nArray.prototype.length;\n\n/**\n * Introduced in 1.8.5.\n * @param {*} arr\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray\n */\nArray.isArray = function(arr) {};\n\n/**\n * @constructor\n * @param {*=} opt_value\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean\n */\nfunction Boolean(opt_value) {}\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean/toSource\n * @override\n */\nBoolean.prototype.toSource = function() {};\n\n/**\n * @this {boolean|Boolean}\n * @return {string}\n * @nosideeffects\n * @override\n */\nBoolean.prototype.toString = function() {};\n\n/**\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean/valueOf\n * @override\n */\nBoolean.prototype.valueOf = function() {};\n\n/**\n * @constructor\n * @param {*=} opt_value\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number\n */\nfunction Number(opt_value) {}\n\n/**\n * @this {Number|number}\n * @param {number=} opt_fractionDigits\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toExponential\n */\nNumber.prototype.toExponential = function(opt_fractionDigits) {};\n\n/**\n * @this {Number|number}\n * @param {*=} opt_digits\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed\n */\nNumber.prototype.toFixed = function(opt_digits) {};\n\n/**\n * @this {Number|number}\n * @param {number=} opt_precision\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toPrecision\n */\nNumber.prototype.toPrecision = function(opt_precision) {};\n\n/**\n * Returns a string representing the number.\n * @this {Number|number}\n * @param {(number|Number)=} opt_radix An optional radix.\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toString\n * @override\n */\nNumber.prototype.toString = function(opt_radix) {};\n\n// Properties.\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE\n */\nNumber.MAX_VALUE;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_VALUE\n */\nNumber.MIN_VALUE;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/NaN\n */\nNumber.NaN;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY\n */\nNumber.NEGATIVE_INFINITY;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY\n */\nNumber.POSITIVE_INFINITY;\n\n\n/**\n * @const\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math\n */\nvar Math = {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/abs\n */\nMath.abs = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/acos\n */\nMath.acos = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/asin\n */\nMath.asin = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan\n */\nMath.atan = function(x) {};\n\n/**\n * @param {?} y\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan2\n */\nMath.atan2 = function(y, x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/ceil\n */\nMath.ceil = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cos\n */\nMath.cos = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/exp\n */\nMath.exp = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor\n */\nMath.floor = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log\n */\nMath.log = function(x) {};\n\n/**\n * @param {...?} var_args\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max\n */\nMath.max = function(var_args) {};\n\n/**\n * @param {...?} var_args\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/min\n */\nMath.min = function(var_args) {};\n\n/**\n * @param {?} x\n * @param {?} y\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/pow\n */\nMath.pow = function(x, y) {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random\n */\nMath.random = function() {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round\n */\nMath.round = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sin\n */\nMath.sin = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sqrt\n */\nMath.sqrt = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/tan\n */\nMath.tan = function(x) {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/toSource\n */\nMath.toSource = function() {};\n\n// Properties:\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/E\n */\nMath.E;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LN2\n */\nMath.LN2;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LN10\n */\nMath.LN10;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LOG2E\n */\nMath.LOG2E;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LOG10E\n */\nMath.LOG10E;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/PI\n */\nMath.PI;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/SQRT1_2\n */\nMath.SQRT1_2;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/SQRT2\n */\nMath.SQRT2;\n\n\n/**\n * @param {?=} opt_yr_num\n * @param {?=} opt_mo_num\n * @param {?=} opt_day_num\n * @param {?=} opt_hr_num\n * @param {?=} opt_min_num\n * @param {?=} opt_sec_num\n * @param {?=} opt_ms_num\n * @constructor\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date\n */\nfunction Date(opt_yr_num, opt_mo_num, opt_day_num, opt_hr_num, opt_min_num,\n opt_sec_num, opt_ms_num) {}\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now\n */\nDate.now = function() {};\n\n/**\n * Parses a string representation of a date, and returns the number\n * of milliseconds since January 1, 1970, 00:00:00, local time.\n * @param {*} date\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse\n */\nDate.parse = function(date) {};\n\n/**\n * @param {number} year\n * @param {number} month\n * @param {number=} opt_date\n * @param {number=} opt_hours\n * @param {number=} opt_minute\n * @param {number=} opt_second\n * @param {number=} opt_ms\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC\n */\nDate.UTC = function(year, month,\n opt_date, opt_hours, opt_minute, opt_second, opt_ms) {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDate\n */\nDate.prototype.getDate = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDay\n */\nDate.prototype.getDay = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMonth\n */\nDate.prototype.getMonth = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getFullYear\n */\nDate.prototype.getFullYear = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getYear\n */\nDate.prototype.getYear = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getHours\n */\nDate.prototype.getHours = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMinutes\n */\nDate.prototype.getMinutes = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getSeconds\n */\nDate.prototype.getSeconds = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMilliseconds\n */\nDate.prototype.getMilliseconds = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime\n */\nDate.prototype.getTime = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset\n */\nDate.prototype.getTimezoneOffset = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDate\n */\nDate.prototype.getUTCDate = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDay\n */\nDate.prototype.getUTCDay = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMonth\n */\nDate.prototype.getUTCMonth = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear\n */\nDate.prototype.getUTCFullYear = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCHours\n */\nDate.prototype.getUTCHours = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMinutes\n */\nDate.prototype.getUTCMinutes = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCSeconds\n */\nDate.prototype.getUTCSeconds = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMilliseconds\n */\nDate.prototype.getUTCMilliseconds = function() {};\n\n/**\n * Sets the day of the month for a specified date according to local time.\n *\n * @param {number} dayValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setDate\n * @return {number}\n */\nDate.prototype.setDate = function(dayValue) {};\n\n/**\n * Set the month for a specified date according to local time.\n *\n * @param {number} monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMonth\n * @return {number}\n */\nDate.prototype.setMonth = function(monthValue, opt_dayValue) {};\n\n/**\n * Sets the full year for a specified date according to local time.\n *\n * @param {number} yearValue\n * @param {number=} opt_monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setFullYear\n * @return {number}\n */\nDate.prototype.setFullYear =\n function(yearValue, opt_monthValue, opt_dayValue) {};\n\n/**\n * Sets the year for a specified date according to local time.\n *\n * @param {number} yearValue\n * @deprecated\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setYear\n * @return {number}\n */\nDate.prototype.setYear = function(yearValue) {};\n\n/**\n * Sets the hours for a specified date according to local time.\n *\n * @param {number} hoursValue\n * @param {number=} opt_minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setHours\n * @return {number}\n */\nDate.prototype.setHours = function(hoursValue, opt_minutesValue,\n opt_secondsValue, opt_msValue) {};\n\n/**\n * Sets the minutes for a specified date according to local time.\n *\n * @param {number} minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMinutes\n * @return {number}\n */\nDate.prototype.setMinutes =\n function(minutesValue, opt_secondsValue, opt_msValue) {};\n\n/**\n * Sets the seconds for a specified date according to local time.\n *\n * @param {number} secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setSeconds\n * @return {number}\n */\nDate.prototype.setSeconds = function(secondsValue, opt_msValue) {};\n\n/**\n * Sets the milliseconds for a specified date according to local time.\n *\n * @param {number} millisecondsValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMilliseconds\n * @return {number}\n */\nDate.prototype.setMilliseconds = function(millisecondsValue) {};\n\n/**\n * Sets the Date object to the time represented by a number of milliseconds\n * since January 1, 1970, 00:00:00 UTC.\n *\n * @param {number} timeValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setTime\n * @return {number}\n */\nDate.prototype.setTime = function(timeValue) {};\n\n/**\n * Sets the day of the month for a specified date according to universal time.\n *\n * @param {number} dayValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCDate\n * @return {number}\n */\nDate.prototype.setUTCDate = function(dayValue) {};\n\n/**\n * Sets the month for a specified date according to universal time.\n *\n * @param {number} monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMonth\n * @return {number}\n */\nDate.prototype.setUTCMonth = function(monthValue, opt_dayValue) {};\n\n/**\n * Sets the full year for a specified date according to universal time.\n *\n * @param {number} yearValue\n * @param {number=} opt_monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear\n * @return {number}\n */\nDate.prototype.setUTCFullYear = function(yearValue, opt_monthValue,\n opt_dayValue) {};\n\n/**\n * Sets the hour for a specified date according to universal time.\n *\n * @param {number} hoursValue\n * @param {number=} opt_minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCHours\n * @return {number}\n */\nDate.prototype.setUTCHours = function(hoursValue, opt_minutesValue,\n opt_secondsValue, opt_msValue) {};\n\n/**\n * Sets the minutes for a specified date according to universal time.\n *\n * @param {number} minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMinutes\n * @return {number}\n */\nDate.prototype.setUTCMinutes = function(minutesValue, opt_secondsValue,\n opt_msValue) {};\n\n\n/**\n * Sets the seconds for a specified date according to universal time.\n *\n * @param {number} secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds\n * @return {number}\n */\nDate.prototype.setUTCSeconds = function(secondsValue, opt_msValue) {};\n\n/**\n * Sets the milliseconds for a specified date according to universal time.\n *\n * @param {number} millisecondsValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMilliseconds\n * @return {number}\n */\nDate.prototype.setUTCMilliseconds = function(millisecondsValue) {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toSource\n * @override\n */\nDate.prototype.toSource = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toDateString\n */\nDate.prototype.toDateString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toGMTString\n */\nDate.prototype.toGMTString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toTimeString\n */\nDate.prototype.toTimeString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toUTCString\n */\nDate.prototype.toUTCString = function() {};\n\n/**\n * @param {(string|Array)=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString\n */\nDate.prototype.toLocaleDateString = function(opt_locales, opt_options) {};\n\n/**\n * @param {string} formatString\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleFormat\n */\nDate.prototype.toLocaleFormat = function(formatString) {};\n\n/**\n * @param {string|Array=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString\n * @see http://www.ecma-international.org/ecma-402/1.0/#sec-13.3.1\n * @override\n */\nDate.prototype.toLocaleString = function(opt_locales, opt_options) {};\n\n/**\n * @param {(string|Array)=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString\n */\nDate.prototype.toLocaleTimeString = function(opt_locales, opt_options) {};\n\n/**\n * @this {Date}\n * @return {string}\n * @nosideeffects\n * @override\n */\nDate.prototype.toString = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/valueOf\n */\nDate.prototype.valueOf;\n\n/**\n * @constructor\n * @implements {Iterable}\n * @param {*=} opt_str\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String\n */\nfunction String(opt_str) {}\n\n/**\n * @param {...number} var_args\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode\n */\nString.fromCharCode = function(var_args) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/anchor\n */\nString.prototype.anchor = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/big\n */\nString.prototype.big = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/blink\n */\nString.prototype.blink = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/bold\n */\nString.prototype.bold = function() {};\n\n/**\n * Returns the specified character from a string.\n *\n * @this {String|string}\n * @param {number} index\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charAt\n */\nString.prototype.charAt = function(index) {};\n\n/**\n * Returns a number indicating the Unicode value of the character at the given\n * index.\n *\n * @this {String|string}\n * @param {number=} opt_index\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt\n */\nString.prototype.charCodeAt = function(opt_index) {};\n\n/**\n * Combines the text of two or more strings and returns a new string.\n *\n * @this {String|string}\n * @param {...*} var_args\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/concat\n */\nString.prototype.concat = function(var_args) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fixed\n */\nString.prototype.fixed = function() {};\n\n/**\n * @this {String|string}\n * @param {string} color\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fontcolor\n */\nString.prototype.fontcolor = function(color) {};\n\n/**\n * @this {String|string}\n * @param {number} size\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fontsize\n */\nString.prototype.fontsize = function(size) {};\n\n/**\n * Returns the index within the calling String object of the first occurrence\n * of the specified value, starting the search at fromIndex, returns -1 if the\n * value is not found.\n *\n * @this {String|string}\n * @param {string|null} searchValue\n * @param {(number|null)=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf\n */\nString.prototype.indexOf = function(searchValue, opt_fromIndex) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/italics\n */\nString.prototype.italics = function() {};\n\n/**\n * Returns the index within the calling String object of the last occurrence of\n * the specified value, or -1 if not found. The calling string is searched\n * backward, starting at fromIndex.\n *\n * @this {String|string}\n * @param {string|null} searchValue\n * @param {(number|null)=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf\n */\nString.prototype.lastIndexOf = function(searchValue, opt_fromIndex) {};\n\n/**\n * @this {String|string}\n * @param {string} hrefAttribute\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/link\n */\nString.prototype.link = function(hrefAttribute) {};\n\n/**\n * Returns a number indicating whether a reference string comes before or after\n * or is the same as the given string in sort order.\n *\n * @this {*}\n * @param {?string} compareString\n * @param {string|Array=} locales\n * @param {Object=} options\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/String/localeCompare\n * @see http://www.ecma-international.org/ecma-402/1.0/#sec-13.1.1\n */\nString.prototype.localeCompare = function(compareString, locales, options) {};\n\n/**\n * Used to retrieve the matches when matching a string against a regular\n * expression.\n *\n * @this {String|string}\n * @param {*} regexp\n * @return {Array} This should really return an Array with a few\n * special properties, but we do not have a good way to model this in\n * our type system. Also see Regexp.prototype.exec.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match\n */\nString.prototype.match = function(regexp) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/quote\n */\nString.prototype.quote = function() {};\n\n/**\n * Finds a match between a regular expression and a string, and replaces the\n * matched substring with a new substring.\n *\n * This may have side-effects if the replacement function has side-effects.\n *\n * @this {String|string}\n * @param {RegExp|string} pattern\n * @param {?string|function(string, ...?):*} replacement\n * @return {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace\n */\nString.prototype.replace = function(pattern, replacement) {};\n\n/**\n * Executes the search for a match between a regular expression and this String\n * object.\n *\n * @this {String|string}\n * @param {RegExp|string} pattern\n * @return {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/search\n */\nString.prototype.search = function(pattern) {};\n\n/**\n * @this {String|string}\n * @param {number} begin\n * @param {number=} opt_end\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice\n */\nString.prototype.slice = function(begin, opt_end) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/small\n */\nString.prototype.small = function() {};\n\n/**\n * @this {String|string}\n * @param {*=} opt_separator\n * @param {number=} opt_limit\n * @return {!Array}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split\n */\nString.prototype.split = function(opt_separator, opt_limit) {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/strike\n */\nString.prototype.strike = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/sub\n */\nString.prototype.sub = function() {};\n\n/**\n * @this {String|string}\n * @param {number} start\n * @param {number=} opt_length\n * @return {string} The specified substring.\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr\n */\nString.prototype.substr = function(start, opt_length) {};\n\n/**\n * @this {String|string}\n * @param {number} start\n * @param {number=} opt_end\n * @return {string} The specified substring.\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring\n */\nString.prototype.substring = function(start, opt_end) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/sup\n */\nString.prototype.sup = function() {};\n\n/**\n * @this {String|string}\n * @param {(string|Array)=} opt_locales\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase\n */\nString.prototype.toLocaleUpperCase = function(opt_locales) {};\n\n/**\n * @this {String|string}\n * @param {(string|Array)=} opt_locales\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase\n */\nString.prototype.toLocaleLowerCase = function(opt_locales) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase\n */\nString.prototype.toLowerCase = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase\n */\nString.prototype.toUpperCase = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toSource\n * @override\n */\nString.prototype.toSource = function() {};\n\n/**\n * @this {string|String}\n * @return {string}\n * @nosideeffects\n * @override\n */\nString.prototype.toString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/valueOf\n */\nString.prototype.valueOf;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length\n */\nString.prototype.length;\n\n/**\n * @constructor\n * @param {*=} opt_pattern\n * @param {*=} opt_flags\n * @return {!RegExp}\n * @throws {SyntaxError} if opt_pattern is an invalid pattern.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nfunction RegExp(opt_pattern, opt_flags) {}\n\n/**\n * @param {*} pattern\n * @param {*=} opt_flags\n * @return {void}\n * @modifies {this}\n * @deprecated\n * @see http://msdn.microsoft.com/en-us/library/x9cswe0z(v=VS.85).aspx\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/compile\n */\nRegExp.prototype.compile = function(pattern, opt_flags) {};\n\n/**\n * @param {*} str The string to search.\n * @return {?RegExpResult}\n * @see http://msdn.microsoft.com/en-us/library/z908hy33(VS.85).aspx\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec\n */\nRegExp.prototype.exec = function(str) {};\n\n/**\n * @param {*} str The string to search.\n * @return {boolean} Whether the string was matched.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test\n */\nRegExp.prototype.test = function(str) {};\n\n/**\n * @this {RegExp}\n * @return {string}\n * @nosideeffects\n * @override\n */\nRegExp.prototype.toString = function() {};\n\n/**\n * @constructor\n * @extends {Array}\n */\nvar RegExpResult = function() {};\n\n\n/** @type {number} */\nRegExpResult.prototype.index;\n\n\n/** @type {string} */\nRegExpResult.prototype.input;\n\n\n/** @type {number} */\nRegExpResult.prototype.length;\n\n\n/**\n * Not actually part of ES3; was added in 2018.\n * https://github.com/tc39/proposal-regexp-named-groups\n *\n * @type {!Object}\n */\nRegExpResult.prototype.groups;\n\n\n// Constructor properties:\n\n/**\n * The string against which the last regexp was matched.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_input.html\n */\nRegExp.input;\n\n/**\n * The last matched characters.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_lastMatch.html\n */\nRegExp.lastMatch;\n\n/**\n * The last matched parenthesized substring, if any.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_lastParen.html\n */\nRegExp.lastParen;\n\n/**\n * The substring of the input up to the characters most recently matched.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_leftContext.html\n */\nRegExp.leftContext;\n\n/**\n * The substring of the input after the characters most recently matched.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_rightContext.html\n */\nRegExp.rightContext;\n\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$1;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$2;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$3;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$4;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$5;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$6;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$7;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$8;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$9;\n\n// Prototype properties:\n\n/**\n * Whether to test the regular expression against all possible matches\n * in a string, or only against the first.\n * @type {boolean}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/global\n */\nRegExp.prototype.global;\n\n/**\n * Whether to ignore case while attempting a match in a string.\n * @type {boolean}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/ignoreCase\n */\nRegExp.prototype.ignoreCase;\n\n/**\n * The index at which to start the next match.\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex\n */\nRegExp.prototype.lastIndex;\n\n/**\n * Whether or not the regular expression uses lastIndex.\n * @type {boolean}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/sticky\n */\nRegExp.prototype.sticky;\n\n/**\n * Whether or not to search in strings across multiple lines.\n * @type {boolean}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/multiline\n */\nRegExp.prototype.multiline;\n\n/**\n * The text of the pattern.\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/source\n */\nRegExp.prototype.source;\n\n/**\n * The flags the regex was created with.\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/flags\n */\nRegExp.prototype.flags;\n\n/**\n * @constructor\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!Error}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error\n */\nfunction Error(opt_message, opt_file, opt_line) {}\n\n\n/**\n * Chrome/v8 specific, altering the maximum depth of the stack trace\n * (10 by default).\n * @type {number}\n * @see http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi\n */\nError.stackTraceLimit;\n\n\n/**\n * Chrome/v8 specific, adds a stack trace to the error object. The optional\n * constructorOpt parameter allows you to pass in a function value. When\n * collecting the stack trace all frames above the topmost call to this\n * function, including that call, will be left out of the stack trace.\n * @param {Object} error The object to add the stack trace to.\n * @param {Function=} opt_constructor A function in the stack trace\n * @see http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi\n * @return {undefined}\n */\nError.captureStackTrace = function(error, opt_constructor){};\n\n\n/**\n * IE-only.\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/2w6a45b5.aspx\n */\nError.prototype.description;\n\n\n/**\n * Mozilla-only.\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/lineNumber\n */\nError.prototype.lineNumber;\n\n/**\n * Mozilla-only\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/fileName\n */\nError.prototype.fileName;\n\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/name\n */\nError.prototype.name;\n\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/message\n */\nError.prototype.message;\n\n/**\n * Doesn\'t seem to exist, but closure/debug.js references it.\n */\nError.prototype.sourceURL;\n\n/** @type {string} */\nError.prototype.stack;\n\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!EvalError}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/EvalError\n */\nfunction EvalError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!RangeError}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RangeError\n */\nfunction RangeError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!ReferenceError}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError\n */\nfunction ReferenceError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!SyntaxError}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError\n */\nfunction SyntaxError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!TypeError}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError\n */\nfunction TypeError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!URIError}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/URIError\n */\nfunction URIError(opt_message, opt_file, opt_line) {}\n\n\n// JScript extensions.\n// @see http://msdn.microsoft.com/en-us/library/894hfyb4(VS.80).aspx\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/7sw4ddf8.aspx\n * @type {function(new:?, string, string=)}\n * @deprecated\n */\nfunction ActiveXObject(progId, opt_location) {}\n',"externs/es5.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 5.\n * @see https://es5.github.io/\n * @externs\n * @author djlee@google.com (DJ Lee)\n */\n\n\n/**\n * @param {?Object|undefined} selfObj Specifies the object to which |this|\n * should point when the function is run. If the value is null or undefined,\n * it will default to the global object.\n * @param {...*} var_args Additional arguments that are partially\n * applied to fn.\n * @return {!Function} A partially-applied form of the Function on which\n * bind() was invoked as a method.\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind\n */\nFunction.prototype.bind = function(selfObj, var_args) {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/Trim\n */\nString.prototype.trim = function() {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/TrimLeft\n */\nString.prototype.trimLeft = function() {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/TrimRight\n */\nString.prototype.trimRight = function() {};\n\n\n/**\n * A object property descriptor used by Object.create, Object.defineProperty,\n * Object.defineProperties, Object.getOwnPropertyDescriptor.\n *\n * @record\n * @template THIS\n */\nfunction ObjectPropertyDescriptor() {}\n\n/** @type {(*|undefined)} */\nObjectPropertyDescriptor.prototype.value;\n\n/** @type {(function(this: THIS):?)|undefined} */\nObjectPropertyDescriptor.prototype.get;\n\n/** @type {(function(this: THIS, ?):void)|undefined} */\nObjectPropertyDescriptor.prototype.set;\n\n/** @type {boolean|undefined} */\nObjectPropertyDescriptor.prototype.writable;\n\n/** @type {boolean|undefined} */\nObjectPropertyDescriptor.prototype.enumerable;\n\n/** @type {boolean|undefined} */\nObjectPropertyDescriptor.prototype.configurable;\n\n\n/**\n * @param {?Object} proto\n * @param {?Object=} opt_properties A map of ObjectPropertyDescriptors.\n * @return {!Object}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/create\n */\nObject.create = function(proto, opt_properties) {};\n\n\n/**\n * @param {!Object} obj\n * @param {string|symbol} prop\n * @param {!Object} descriptor A ObjectPropertyDescriptor.\n * @return {!Object}\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty\n */\nObject.defineProperty = function(obj, prop, descriptor) {};\n\n\n/**\n * @param {!Object} obj\n * @param {!Object} props A map of ObjectPropertyDescriptors.\n * @return {!Object}\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperties\n */\nObject.defineProperties = function(obj, props) {};\n\n\n/**\n * @param {T} obj\n * @param {string|symbol} prop\n * @return {!ObjectPropertyDescriptor|undefined}\n * @nosideeffects\n * @template T\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor\n */\nObject.getOwnPropertyDescriptor = function(obj, prop) {};\n\n\n/**\n * @param {!Object} obj\n * @return {!Array}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys\n */\nObject.keys = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {!Array}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames\n */\nObject.getOwnPropertyNames = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {Object}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/GetPrototypeOf\n */\nObject.getPrototypeOf = function(obj) {};\n\n\n/**\n * @param {T} obj\n * @return {T}\n * @template T\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/preventExtensions\n */\nObject.preventExtensions = function(obj) {};\n\n\n/**\n * @param {T} obj\n * @return {T}\n * @template T\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/seal\n */\nObject.seal = function(obj) {};\n\n\n/**\n * @param {T} obj\n * @return {T}\n * @template T\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/freeze\n */\nObject.freeze = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/isExtensible\n */\nObject.isExtensible = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/isSealed\n */\nObject.isSealed = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/isFrozen\n */\nObject.isFrozen = function(obj) {};\n\n\n/**\n * We acknowledge that this function does not exist on the `Object.prototype`\n * and is declared in this file for other reasons.\n *\n * When `toJSON` is defined as a property on an object it can be used in\n * conjunction with the JSON.stringify() function.\n *\n * It is defined here to:\n * (1) Prevent the compiler from renaming the property on internal classes.\n * (2) Enforce that the signature is correct for users defining it.\n *\n * @param {string=} opt_key The JSON key for this object.\n * @return {*} The serializable representation of this object. Note that this\n * need not be a string. See http://goo.gl/PEUvs.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON()_behavior\n */\nObject.prototype.toJSON = function(opt_key) {};\n\n\n/**\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toISOString\n * @return {string}\n */\nDate.prototype.toISOString = function() {};\n\n\n/**\n * @param {*=} opt_ignoredKey\n * @return {string}\n * @override\n */\nDate.prototype.toJSON = function(opt_ignoredKey) {};\n\n\n/**\n * A fake type to model the JSON object.\n * @constructor\n */\nfunction JSONType() {}\n\n\n/**\n * @param {string} jsonStr The string to parse.\n * @param {(function(this:?, string, *) : *)=} opt_reviver\n * @return {*} The JSON object.\n * @throws {Error}\n */\nJSONType.prototype.parse = function(jsonStr, opt_reviver) {};\n\n\n/**\n * @param {*} jsonObj Input object.\n * @param {(Array|(function(this:?, string, *) : *)|null)=} opt_replacer\n * @param {(number|string)=} opt_space\n * @return {string} JSON string which represents jsonObj.\n * @throws {Error}\n */\nJSONType.prototype.stringify = function(jsonObj, opt_replacer, opt_space) {};\n\n\n/**\n * @type {!JSONType}\n * @suppress {duplicate}\n */\nvar JSON;\n', --"externs/es6.js":"/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 6 and later.\n * @see https://tc39.github.io/ecma262/\n * @see https://www.khronos.org/registry/typedarray/specs/latest/\n * @externs\n */\n\n/**\n * Some es6 definitions:\n * Symbol, IIterableResult, Iterable, IteratorIterable, Iterator,\n * IteratorIterable moved to es3 file, because some base type requires them, and\n * we want to keep them together. If you add new externs related to those types\n * define them together in the es3 file.\n */\n\n/**\n * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for\n * anything. https://github.com/google/closure-compiler/issues/3489\n * @interface\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator\n * @extends {IteratorIterable}\n * @template VALUE, UNUSED_RETURN_T, UNUSED_NEXT_T\n */\nfunction Generator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!IIterableResult}\n * @override\n */\nGenerator.prototype.next = function(opt_value) {};\n\n/**\n * @param {VALUE} value\n * @return {!IIterableResult}\n */\nGenerator.prototype.return = function(value) {};\n\n/**\n * @param {?} exception\n * @return {!IIterableResult}\n */\nGenerator.prototype.throw = function(exception) {};\n\n\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.log10 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.log2 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.log1p = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.expm1 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.cosh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.sinh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.tanh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.acosh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.asinh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.atanh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.trunc = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.sign = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.cbrt = function(value) {};\n\n/**\n * @param {...number} var_args\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/hypot\n */\nMath.hypot = function(var_args) {};\n\n/**\n * @param {number} value1\n * @param {number} value2\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul\n */\nMath.imul = function(value1, value2) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32\n */\nMath.clz32 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround\n */\nMath.fround = function(value) {};\n\n\n/**\n * @param {*} a\n * @param {*} b\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nObject.is;\n\n\n/**\n * Returns a language-sensitive string representation of this number.\n * @param {(string|!Array)=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString\n * @see http://www.ecma-international.org/ecma-402/1.0/#sec-13.2.1\n * @override\n */\nNumber.prototype.toLocaleString = function(opt_locales, opt_options) {};\n\n/**\n * Returns the wrapped primitive value of this Number object.\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/valueOf\n * @override\n */\nNumber.prototype.valueOf = function() {};\n\n\n/**\n * Pads the end of the string so that it reaches the given length.\n * NOTE: this is an ES2017 (ES8) extern.\n *\n * @param {number} targetLength The target length.\n * @param {string=} opt_padString The string to pad with.\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd\n */\nString.prototype.padEnd = function(targetLength, opt_padString) {};\n\n/**\n * Pads the start of the string so that it reaches the given length.\n * NOTE: this is an ES2017 (ES8) extern.\n *\n * @param {number} targetLength The target length.\n * @param {string=} opt_padString The string to pad with.\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart\n */\nString.prototype.padStart = function(targetLength, opt_padString) {};\n\n/**\n * Repeats the string the given number of times.\n *\n * @param {number} count The number of times the string is repeated.\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\n */\nString.prototype.repeat = function(count) {};\n\n/**\n * @constructor\n * @extends {Array}\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-gettemplateobject\n */\nvar ITemplateArray = function() {};\n\n/**\n * @type {!Array}\n */\nITemplateArray.prototype.raw;\n\n/**\n * @param {!ITemplateArray} template\n * @param {...*} var_args Substitution values.\n * @return {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw\n */\nString.raw = function(template, var_args) {};\n\n\n/**\n * @param {number} codePoint\n * @param {...number} var_args Additional codepoints\n * @return {string}\n */\nString.fromCodePoint = function(codePoint, var_args) {};\n\n\n/**\n * @param {number} index\n * @return {number}\n * @nosideeffects\n */\nString.prototype.codePointAt = function(index) {};\n\n\n/**\n * @param {string=} opt_form\n * @return {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize\n */\nString.prototype.normalize = function(opt_form) {};\n\n\n/**\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n */\nString.prototype.startsWith = function(searchString, opt_position) {};\n\n/**\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n */\nString.prototype.endsWith = function(searchString, opt_position) {};\n\n/**\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n */\nString.prototype.includes = function(searchString, opt_position) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trimStart\n */\nString.prototype.trimStart = function() {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trimEnd\n */\nString.prototype.trimEnd = function() {};\n\n\n/**\n * @see http://dev.w3.org/html5/postmsg/\n * @interface\n */\nfunction Transferable() {}\n\n/**\n * @param {number} length The length in bytes\n * @constructor\n * @throws {Error}\n * @implements {Transferable}\n */\nfunction ArrayBuffer(length) {}\n\n/** @type {number} */\nArrayBuffer.prototype.byteLength;\n\n/**\n * @param {number} begin\n * @param {number=} opt_end\n * @return {!ArrayBuffer}\n * @nosideeffects\n */\nArrayBuffer.prototype.slice = function(begin, opt_end) {};\n\n/**\n * @param {*} arg\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView\n */\nArrayBuffer.isView = function(arg) {};\n\n\n/**\n * @constructor\n */\nfunction ArrayBufferView() {}\n\n/** @type {!ArrayBuffer} */\nArrayBufferView.prototype.buffer;\n\n/** @type {number} */\nArrayBufferView.prototype.byteOffset;\n\n/** @type {number} */\nArrayBufferView.prototype.byteLength;\n\n\n/**\n * @param {number} length The length in bytes\n * @constructor\n * @throws {Error}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer\n */\nfunction SharedArrayBuffer(length) {}\n\n/** @type {number} */\nSharedArrayBuffer.prototype.byteLength;\n\n/**\n * @param {number} begin\n * @param {number=} opt_end\n * @return {!SharedArrayBuffer}\n * @nosideeffects\n */\nSharedArrayBuffer.prototype.slice = function(begin, opt_end) {};\n\n\n/**\n * @typedef {!ArrayBuffer|!ArrayBufferView}\n */\nvar BufferSource;\n\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @extends {ArrayBufferView}\n */\nfunction TypedArray() {};\n\n/** @const {number} */\nTypedArray.prototype.BYTES_PER_ELEMENT;\n\n/**\n * @param {number} target\n * @param {number} start\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/copyWithin\n */\nTypedArray.prototype.copyWithin = function(target, start, opt_end) {};\n\n/**\n * @return {!IteratorIterable>}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/entries\n */\nTypedArray.prototype.entries = function() {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : ?} callback\n * @param {S=} opt_thisArg\n * @return {boolean}\n * @template S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/every\n */\nTypedArray.prototype.every = function(callback, opt_thisArg) {};\n\n/**\n * @param {number} value\n * @param {number=} opt_begin\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/fill\n */\nTypedArray.prototype.fill = function(value, opt_begin, opt_end) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {THIS}\n * @this {THIS}\n * @template THIS,S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/filter\n */\nTypedArray.prototype.filter = function(callback, opt_thisArg) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {(number|undefined)}\n * @template S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/find\n */\nTypedArray.prototype.find = function(callback, opt_thisArg) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {number}\n * @template S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/findIndex\n */\nTypedArray.prototype.findIndex = function(callback, opt_thisArg) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : ?} callback\n * @param {S=} opt_thisArg\n * @return {undefined}\n * @template S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/forEach\n */\nTypedArray.prototype.forEach = function(callback, opt_thisArg) {};\n\n/**\n * NOTE: this is an ES2016 (ES7) extern.\n * @param {number} searchElement\n * @param {number=} opt_fromIndex\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/includes\n */\nTypedArray.prototype.includes = function(searchElement, opt_fromIndex) {};\n\n/**\n * @param {number} searchElement\n * @param {number=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/indexOf\n */\nTypedArray.prototype.indexOf = function(searchElement, opt_fromIndex) {};\n\n/**\n * @param {string=} opt_separator\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/join\n */\nTypedArray.prototype.join = function(opt_separator) {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/keys\n */\nTypedArray.prototype.keys = function() {};\n\n/**\n * @param {number} searchElement\n * @param {number=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/lastIndexOf\n */\nTypedArray.prototype.lastIndexOf = function(searchElement, opt_fromIndex) {};\n\n/** @type {number} */\nTypedArray.prototype.length;\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : number} callback\n * @param {S=} opt_thisArg\n * @return {THIS}\n * @this {THIS}\n * @template THIS,S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/map\n */\nTypedArray.prototype.map = function(callback, opt_thisArg) {};\n\n/**\n * @param {function((number|INIT|RET), number, number, !TypedArray) : RET} callback\n * @param {INIT=} opt_initialValue\n * @return {RET}\n * @template INIT,RET\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reduce\n */\nTypedArray.prototype.reduce = function(callback, opt_initialValue) {};\n\n/**\n * @param {function((number|INIT|RET), number, number, !TypedArray) : RET} callback\n * @param {INIT=} opt_initialValue\n * @return {RET}\n * @template INIT,RET\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reduceRight\n */\nTypedArray.prototype.reduceRight = function(callback, opt_initialValue) {};\n\n/**\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reverse\n */\nTypedArray.prototype.reverse = function() {};\n\n/**\n * @param {!ArrayBufferView|!Array} array\n * @param {number=} opt_offset\n * @return {undefined}\n * @throws {!RangeError}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set\n */\nTypedArray.prototype.set = function(array, opt_offset) {};\n\n/**\n * @param {number=} opt_begin\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/slice\n */\nTypedArray.prototype.slice = function(opt_begin, opt_end) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {boolean}\n * @template S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/some\n */\nTypedArray.prototype.some = function(callback, opt_thisArg) {};\n\n/**\n * @param {(function(number, number) : number)=} opt_compareFunction\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/sort\n */\nTypedArray.prototype.sort = function(opt_compareFunction) {};\n\n/**\n * @param {number} begin\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray\n */\nTypedArray.prototype.subarray = function(begin, opt_end) {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/values\n */\nTypedArray.prototype.values = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/toLocaleString\n * @override\n */\nTypedArray.prototype.toLocaleString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/toString\n * @override\n */\nTypedArray.prototype.toString = function() {};\n\n/** @override */\nTypedArray.prototype[Symbol.iterator] = function() {};\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments} If the user passes a backing array, then indexed\n * accesses will modify the backing array. JSCompiler does not model\n * this well. In other words, if you have:\n * \n * var x = new ArrayBuffer(1);\n * var y = new Int8Array(x);\n * y[0] = 2;\n * \n * JSCompiler will not recognize that the last assignment modifies x.\n * We workaround this by marking all these arrays as @modifies {arguments},\n * to introduce the possibility that x aliases y.\n */\nfunction Int8Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nInt8Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Int8Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nInt8Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Int8Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nInt8Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint8Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint8Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint8Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint8Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint8Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint8Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint8ClampedArray(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint8ClampedArray.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint8ClampedArray}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint8ClampedArray.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint8ClampedArray}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint8ClampedArray.of = function(var_args) {};\n\n\n/**\n * @typedef {Uint8ClampedArray}\n * @deprecated CanvasPixelArray has been replaced by Uint8ClampedArray\n * in the latest spec.\n * @see http://www.w3.org/TR/2dcontext/#imagedata\n */\nvar CanvasPixelArray;\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Int16Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nInt16Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Int16Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nInt16Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Int16Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nInt16Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint16Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint16Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint16Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint16Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint16Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint16Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Int32Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nInt32Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Int32Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nInt32Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Int32Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nInt32Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint32Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint32Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint32Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint32Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint32Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint32Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Float32Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nFloat32Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Float32Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nFloat32Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Float32Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nFloat32Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Float64Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nFloat64Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Float64Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nFloat64Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Float64Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nFloat64Array.of = function(var_args) {};\n\n\n/**\n * @param {ArrayBuffer|SharedArrayBuffer} buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_byteLength\n * @constructor\n * @extends {ArrayBufferView}\n * @throws {Error}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays/DataView\n */\nfunction DataView(buffer, opt_byteOffset, opt_byteLength) {}\n\n/**\n * @param {number} byteOffset\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getInt8 = function(byteOffset) {};\n\n/**\n * @param {number} byteOffset\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getUint8 = function(byteOffset) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getInt16 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getUint16 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getInt32 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getUint32 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getFloat32 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getFloat64 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setInt8 = function(byteOffset, value) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setUint8 = function(byteOffset, value) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setInt16 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setUint16 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setInt32 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setUint32 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setFloat32 = function(\n byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setFloat64 = function(\n byteOffset, value, opt_littleEndian) {};\n\n\n/**\n * @see https://github.com/promises-aplus/promises-spec\n * @typedef {{then: ?}}\n */\nvar Thenable;\n\n\n/**\n * This is not an official DOM interface. It is used to add generic typing\n * and respective type inference where available.\n * {@see goog.Thenable} inherits from this making all promises\n * interoperate.\n * @interface\n * @struct\n * @template TYPE\n */\nfunction IThenable() {}\n\n\n/**\n * @param {?(function(TYPE):VALUE)=} opt_onFulfilled\n * @param {?(function(*): *)=} opt_onRejected\n * @return {RESULT}\n * @template VALUE\n *\n * When a `Thenable` is fulfilled or rejected with another `Thenable`, the\n * payload of the second is used as the payload of the first.\n *\n * @template RESULT := type('IThenable',\n * cond(isUnknown(VALUE), unknown(),\n * mapunion(VALUE, (V) =>\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'),\n * unknown(),\n * V)))))\n * =:\n */\nIThenable.prototype.then = function(opt_onFulfilled, opt_onRejected) {};\n\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {function(\n * function((TYPE|IThenable|Thenable|null)=),\n * function(*=))} resolver\n * @constructor\n * @implements {IThenable}\n * @template TYPE\n */\nfunction Promise(resolver) {}\n\n\n/**\n * @param {VALUE=} opt_value\n * @return {RESULT}\n * @template VALUE\n * @template RESULT := type('Promise',\n * cond(isUnknown(VALUE), unknown(),\n * mapunion(VALUE, (V) =>\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'),\n * unknown(),\n * V)))))\n * =:\n */\nPromise.resolve = function(opt_value) {};\n\n\n/**\n * @param {*=} opt_error\n * @return {!Promise}\n */\nPromise.reject = function(opt_error) {};\n\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {!Iterable} iterable\n * @return {!Promise>}\n * @template VALUE\n * @template RESULT := mapunion(VALUE, (V) =>\n * cond(isUnknown(V),\n * unknown(),\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'), unknown(), V))))\n * =:\n */\nPromise.all = function(iterable) {};\n\n/**\n * Record type representing a single element of the array value one gets from\n * Promise.allSettled.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled\n * @record\n * @template VALUE\n */\nPromise.AllSettledResultElement = function() {};\n\n/**\n * 'fulfilled' or 'rejected' to indicate the final state of the corresponding\n * Promise.\n * @type {string}\n */\nPromise.AllSettledResultElement.prototype.status;\n\n/**\n * Exists only if the status field is 'fulfilled'\n * @type {VALUE|undefined}\n */\nPromise.AllSettledResultElement.prototype.value;\n\n/**\n * Exists only if the status field is 'rejected'\n * @type {*|undefined}\n */\nPromise.AllSettledResultElement.prototype.reason;\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled\n * @param {!Iterable} iterable\n * @return {!Promise>>}\n * @template VALUE\n * @template RESULT := mapunion(VALUE, (V) =>\n * cond(isUnknown(V),\n * unknown(),\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'), unknown(), V))))\n * =:\n */\nPromise.allSettled = function(iterable) {};\n\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {!Iterable} iterable\n * @return {!Promise}\n * @template VALUE\n * @template RESULT := mapunion(VALUE, (V) =>\n * cond(isUnknown(V),\n * unknown(),\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'), unknown(), V))))\n * =:\n */\nPromise.race = function(iterable) {};\n\n\n/**\n * @param {?(function(this:void, TYPE):VALUE)=} opt_onFulfilled\n * @param {?(function(this:void, *): *)=} opt_onRejected\n * @return {RESULT}\n * @template VALUE\n *\n * When a `Thenable` is fulfilled or rejected with another `Thenable`, the\n * payload of the second is used as the payload of the first.\n *\n * @template RESULT := type('Promise',\n * cond(isUnknown(VALUE), unknown(),\n * mapunion(VALUE, (V) =>\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'),\n * unknown(),\n * V)))))\n * =:\n * @override\n */\nPromise.prototype.then = function(opt_onFulfilled, opt_onRejected) {};\n\n\n/**\n * @param {function(*):VALUE} onRejected\n * @return {!Promise} A Promise of the original type or a possibly\n * a different type depending on whether the parent promise was rejected.\n *\n * @template VALUE\n *\n * When a `Thenable` is rejected with another `Thenable`, the payload of the\n * second is used as the payload of the first.\n *\n * @template RESULT := cond(\n * isUnknown(VALUE),\n * unknown(),\n * mapunion(VALUE, (V) =>\n * cond(\n * isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(\n * sub(V, 'Thenable'),\n * unknown(),\n * V))))\n * =:\n */\nPromise.prototype.catch = function(onRejected) {};\n\n\n/**\n * @param {function()} callback\n * @return {!Promise}\n */\nPromise.prototype.finally = function(callback) {};\n\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/of\n * @param {...T} var_args\n * @return {!Array}\n * @template T\n */\nArray.of = function(var_args) {};\n\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from\n * @param {string|!IArrayLike|!Iterable} arrayLike\n * @param {function(this:S, (string|T), number): R=} opt_mapFn\n * @param {S=} opt_this\n * @return {!Array}\n * @template T,S,R\n */\nArray.from = function(arrayLike, opt_mapFn, opt_this) {};\n\n\n/** @return {!IteratorIterable} */\nArray.prototype.keys;\n\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/values\n */\nArray.prototype.values;\n\n\n/**\n * @return {!IteratorIterable>} Iterator of [key, value] pairs.\n */\nArray.prototype.entries;\n\n\n/**\n * @param {function(this:S, T, number, !Array): boolean} predicateFn\n * @param {S=} opt_this\n * @return {T|undefined}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.find\n */\nArray.prototype.find = function(predicateFn, opt_this) {};\n\n\n/**\n * @param {function(this:S, T, number, !Array): boolean} predicateFn\n * @param {S=} opt_this\n * @return {number}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.findindex\n */\nArray.prototype.findIndex = function(predicateFn, opt_this) {};\n\n\n/**\n * @param {T} value\n * @param {number=} opt_begin\n * @param {number=} opt_end\n * @return {!Array}\n * @this {!IArrayLike|string}\n * @template T\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.fill\n */\nArray.prototype.fill = function(value, opt_begin, opt_end) {};\n\n\n/**\n * @param {number} target\n * @param {number} start\n * @param {number=} opt_end\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.copywithin\n * @this {!IArrayLike|string}\n * @template T\n * @return {!Array}\n */\nArray.prototype.copyWithin = function(target, start, opt_end) {};\n\n\n/**\n * NOTE: this is an ES2016 (ES7) extern.\n * @param {T} searchElement\n * @param {number=} opt_fromIndex\n * @return {boolean}\n * @this {!IArrayLike|string}\n * @template T\n * @nosideeffects\n * @see https://tc39.github.io/ecma262/#sec-array.prototype.includes\n */\nArray.prototype.includes = function(searchElement, opt_fromIndex) {};\n\n/**\n * Generates an array by passing every element of this array to a callback that\n * returns an array of zero or more elements to be added to the result.\n *\n * NOTE: The specified behavior of the method is that the callback can return\n * either an Array, which will be flattened into the result, or a non-array,\n * which will simply be included.\n *\n * However, while defining that in the type information here is possible it's\n * very hard to understand both for humans and automated tools other than\n * closure-compiler that process these files. Also, we think it's best to\n * encourage writing callbacks that just always return an Array for the sake\n * of readability.\n *\n * The polyfill for this method provided by closure-compiler does behave as\n * defined in the specification, though.\n *\n * @param {function(this: THIS, T, number, !IArrayLike): !Array}\n * callback\n * @param {THIS=} thisArg\n * @return {!Array}\n * @this {!IArrayLike}\n * @template T, THIS, S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap\n */\nArray.prototype.flatMap = function(callback, thisArg) {};\n\n/**\n * @param {number=} depth\n * @return {!Array}\n * @this {!IArrayLike}\n * @template T, S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat\n */\nArray.prototype.flat = function(depth) {};\n\n/**\n * @param {!Object} obj\n * @return {!Array}\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-object.getownpropertysymbols\n */\nObject.getOwnPropertySymbols = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @param {?} proto\n * @return {!Object}\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-object.setprototypeof\n */\nObject.setPrototypeOf = function(obj, proto) {};\n\n\n/**\n * @const {number}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/EPSILON\n */\nNumber.EPSILON;\n\n/**\n * @const {number}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER\n */\nNumber.MIN_SAFE_INTEGER;\n\n/**\n * @const {number}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER\n */\nNumber.MAX_SAFE_INTEGER;\n\n\n\n/**\n * Parse an integer. Use of `parseInt` without `base` is strictly\n * banned in Google. If you really want to parse octal or hex based on the\n * leader, then pass `undefined` as the base.\n *\n * @param {string} string\n * @param {number|undefined} radix\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseInt\n */\nNumber.parseInt = function(string, radix) {};\n\n/**\n * @param {string} string\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseFloat\n */\nNumber.parseFloat = function(string) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN\n */\nNumber.isNaN = function(value) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite\n */\nNumber.isFinite = function(value) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger\n */\nNumber.isInteger = function(value) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger\n */\nNumber.isSafeInteger = function(value) {};\n\n\n\n/**\n * @param {!Object} target\n * @param {...(Object|null|undefined)} var_args\n * @return {!Object}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n */\nObject.assign = function(target, var_args) {};\n\n/**\n * TODO(dbeam): find a better place for ES2017 externs like this one.\n * NOTE: this is an ES2017 (ES8) extern.\n * @param {!Object} obj\n * @return {!Array} values\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values\n * @throws {Error}\n * @template T\n */\nObject.values = function(obj) {};\n\n/**\n * NOTE: this is an ES2017 (ES8) extern.\n * @param {!Object} obj\n * @return {!Array>} entries\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n * @throws {Error}\n * @template T\n */\nObject.entries = function(obj) {};\n\n/**\n * @param {!Iterable<*>} iter\n * @return {!Object}\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries\n */\nObject.fromEntries = function(iter) {};\n\n/**\n * NOTE: this is an ES2017 (ES8) extern.\n * @param {!Object} obj\n * @return {!Object} descriptors\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors\n * @throws {Error}\n * @template T\n */\nObject.getOwnPropertyDescriptors = function(obj) {};\n\n\n\n/**\n * @const\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect\n */\nvar Reflect = {};\n\n/**\n * @param {function(this: THIS, ...?): RESULT} targetFn\n * @param {THIS} thisArg\n * @param {!Array} argList\n * @return {RESULT}\n * @template THIS, RESULT\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/apply\n */\nReflect.apply = function(targetFn, thisArg, argList) {};\n\n/**\n * @param {function(new: ?, ...?)} targetConstructorFn\n * @param {!Array} argList\n * @param {function(new: TARGET, ...?)=} opt_newTargetConstructorFn\n * @return {TARGET}\n * @template TARGET\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/construct\n */\nReflect.construct = function(targetConstructorFn, argList, opt_newTargetConstructorFn) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @param {!ObjectPropertyDescriptor} attributes\n * @return {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty\n */\nReflect.defineProperty = function(target, propertyKey, attributes) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty\n */\nReflect.deleteProperty = function(target, propertyKey) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @param {!Object=} opt_receiver\n * @return {*}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get\n */\nReflect.get = function(target, propertyKey, opt_receiver) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {?ObjectPropertyDescriptor}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/getOwnPropertyDescriptor\n */\nReflect.getOwnPropertyDescriptor = function(target, propertyKey) {};\n\n/**\n * @param {!Object} target\n * @return {?Object}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/getPrototypeOf\n */\nReflect.getPrototypeOf = function(target) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/has\n */\nReflect.has = function(target, propertyKey) {};\n\n/**\n * @param {!Object} target\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/isExtensible\n */\nReflect.isExtensible = function(target) {};\n\n/**\n * @param {!Object} target\n * @return {!Array<(string|symbol)>}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys\n */\nReflect.ownKeys = function(target) {};\n\n/**\n * @param {!Object} target\n * @return {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions\n */\nReflect.preventExtensions = function(target) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @param {*} value\n * @param {!Object=} opt_receiver\n * @return {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set\n */\nReflect.set = function(target, propertyKey, value, opt_receiver) {};\n\n/**\n * @param {!Object} target\n * @param {?Object} proto\n * @return {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/setPrototypeOf\n */\nReflect.setPrototypeOf = function(target, proto) {};\n\n\n/**\n * @const\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics\n */\nvar Atomics = {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.add = function(typedArray, index, value) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.and = function(typedArray, index, value) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} expectedValue\n * @param {number} replacementValue\n * @return {number}\n */\nAtomics.compareExchange = function(\n typedArray, index, expectedValue, replacementValue) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.exchange = function(typedArray, index, value) {};\n\n/**\n * @param {number} size\n * @return {boolean}\n */\nAtomics.isLockFree = function(size) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @return {number}\n */\nAtomics.load = function(typedArray, index) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.or = function(typedArray, index, value) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.store = function(typedArray, index, value) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.sub = function(typedArray, index, value) {};\n\n/**\n * @param {!Int32Array} typedArray\n * @param {number} index\n * @param {number} value\n * @param {number=} timeout\n * @return {String}\n */\nAtomics.wait = function(typedArray, index, value, timeout) {};\n\n/**\n * @param {!Int32Array} typedArray\n * @param {number} index\n * @param {number} count\n * @return {number}\n */\nAtomics.wake = function(typedArray, index, count) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.xor = function(typedArray, index, value) {};\n\n\n/**\n * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for\n * anything.\n * https://github.com/google/closure-compiler/issues/3489\n * @interface\n * @template VALUE, UNUSED_RETURN_T, UNUSED_NEXT_T\n * @see https://tc39.github.io/proposal-async-iteration/\n */\nfunction AsyncIterator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!Promise>}\n */\nAsyncIterator.prototype.next;\n\n\n/**\n * @interface\n * @template VALUE\n */\nfunction AsyncIterable() {}\n\n\n/**\n * @return {!AsyncIterator}\n */\nAsyncIterable.prototype[Symbol.asyncIterator] = function() {};\n\n\n/**\n * @interface\n * @extends {AsyncIterator}\n * @extends {AsyncIterable}\n * @template VALUE\n * @see https://tc39.github.io/proposal-async-iteration/\n */\nfunction AsyncIteratorIterable() {}\n\n/**\n * @interface\n * @see https://tc39.github.io/proposal-async-iteration/\n * @extends {AsyncIteratorIterable}\n * @template VALUE\n */\nfunction AsyncGenerator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!Promise>}\n * @override\n */\nAsyncGenerator.prototype.next = function(opt_value) {};\n\n/**\n * @param {VALUE} value\n * @return {!Promise>}\n */\nAsyncGenerator.prototype.return = function(value) {};\n\n/**\n * @param {?} exception\n * @return {!Promise>}\n */\nAsyncGenerator.prototype.throw = function(exception) {};\n", --"externs/es6_collections.js":'/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 6.\n * @see http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts\n * @externs\n */\n\n// TODO(johnlenz): Use Tuples for the Map and Set iterators where appropriate.\n\n/**\n * @constructor @struct\n * @param {Iterable>|!Array>=} opt_iterable\n * @implements {Iterable>}\n * @template KEY, VALUE\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map\n */\nfunction Map(opt_iterable) {}\n\n/** @return {void} */\nMap.prototype.clear = function() {};\n\n/**\n * @param {KEY} key\n * @return {boolean}\n */\nMap.prototype.delete = function(key) {};\n\n/**\n * @return {!IteratorIterable>}\n * @nosideeffects\n */\nMap.prototype.entries = function() {};\n\n/**\n * @param {function(this:THIS, VALUE, KEY, MAP)} callback\n * @param {THIS=} opt_thisArg\n * @this {MAP}\n * @template MAP,THIS\n */\nMap.prototype.forEach = function(callback, opt_thisArg) {};\n\n/**\n * @param {KEY} key\n * @return {VALUE}\n * @nosideeffects\n */\nMap.prototype.get = function(key) {};\n\n/**\n * @param {KEY} key\n * @return {boolean}\n * @nosideeffects\n */\nMap.prototype.has = function(key) {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nMap.prototype.keys = function() {};\n\n/**\n * @param {KEY} key\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nMap.prototype.set = function(key, value) {};\n\n/**\n * @type {number}\n * (readonly)\n */\nMap.prototype.size;\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nMap.prototype.values = function() {};\n\n/**\n * @return {!Iterator>}\n */\nMap.prototype[Symbol.iterator] = function() {};\n\n\n/**\n * @constructor @struct\n * @param {Iterable>|!Array>=} opt_iterable\n * @template KEY, VALUE\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap\n */\nfunction WeakMap(opt_iterable) {}\n\n/** @return {void} */\nWeakMap.prototype.clear = function() {};\n\n/**\n * @param {KEY} key\n * @return {boolean}\n */\nWeakMap.prototype.delete = function(key) {};\n\n/**\n * @param {KEY} key\n * @return {VALUE}\n * @nosideeffects\n */\nWeakMap.prototype.get = function(key) {};\n\n/**\n * @param {KEY} key\n * @return {boolean}\n * @nosideeffects\n */\nWeakMap.prototype.has = function(key) {};\n\n/**\n * @param {KEY} key\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nWeakMap.prototype.set = function(key, value) {};\n\n/**\n * @constructor @struct\n * @param {Iterable|Array=} opt_iterable\n * @implements {Iterable}\n * @template VALUE\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set\n */\nfunction Set(opt_iterable) {}\n\n/**\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nSet.prototype.add = function(value) {};\n\n/**\n * @return {void}\n */\nSet.prototype.clear = function() {};\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n */\nSet.prototype.delete = function(value) {};\n\n/**\n * @return {!IteratorIterable>} Where each array has two entries:\n * [value, value]\n * @nosideeffects\n */\nSet.prototype.entries = function() {};\n\n/**\n * @param {function(this: THIS, VALUE, VALUE, SET)} callback\n * @param {THIS=} opt_thisArg\n * @this {SET}\n * @template SET,THIS\n */\nSet.prototype.forEach = function(callback, opt_thisArg) {};\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n * @nosideeffects\n */\nSet.prototype.has = function(value) {};\n\n/**\n * @type {number} (readonly)\n */\nSet.prototype.size;\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nSet.prototype.keys = function() {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nSet.prototype.values = function() {};\n\n/**\n * @return {!Iterator}\n */\nSet.prototype[Symbol.iterator] = function() {};\n\n\n\n/**\n * @constructor @struct\n * @param {Iterable|Array=} opt_iterable\n * @template VALUE\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set\n */\nfunction WeakSet(opt_iterable) {}\n\n/**\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nWeakSet.prototype.add = function(value) {};\n\n/**\n * @return {void}\n */\nWeakSet.prototype.clear = function() {};\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n */\nWeakSet.prototype.delete = function(value) {};\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n * @nosideeffects\n */\nWeakSet.prototype.has = function(value) {};\n', --"externs/intl.js":'/*\n * Copyright 2013 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for the JS Internationalization API as defined in\n * http://www.ecma-international.org/ecma-402/1.0/\n *\n * @externs\n */\n\n/** @const */\nvar Intl = {};\n\n/**\n * NOTE: this API is not from ecma402 and is subject to change.\n * @param {string|Array=} opt_locales\n * @param {{type: (string|undefined)}=}\n * opt_options\n * @constructor\n */\nIntl.v8BreakIterator = function(opt_locales, opt_options) {};\n\n/**\n * @param {string} text\n * @return {undefined}\n */\nIntl.v8BreakIterator.prototype.adoptText = function(text) {};\n\n/**\n * @return {string}\n */\nIntl.v8BreakIterator.prototype.breakType = function() {};\n\n/**\n * @return {number}\n */\nIntl.v8BreakIterator.prototype.current = function() {};\n\n/**\n * @return {number}\n */\nIntl.v8BreakIterator.prototype.first = function() {};\n\n/**\n * @return {number}\n */\nIntl.v8BreakIterator.prototype.next = function() {};\n\n/**\n * @constructor\n * @param {string|Array=} opt_locales\n * @param {{usage: (string|undefined), localeMatcher: (string|undefined),\n * sensitivity: (string|undefined), ignorePunctuation: (boolean|undefined),\n * numeric: (boolean|undefined), caseFirst: (string|undefined)}=}\n * opt_options\n */\nIntl.Collator = function(opt_locales, opt_options) {};\n\n/**\n * @param {Array} locales\n * @param {{localeMatcher: (string|undefined)}=} opt_options\n * @return {Array}\n */\nIntl.Collator.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @param {string} arg1\n * @param {string} arg2\n * @return {number}\n */\nIntl.Collator.prototype.compare = function(arg1, arg2) {};\n\n/**\n * @return {{locale: string, usage: string, sensitivity: string,\n * ignorePunctuation: boolean, collation: string, numeric: boolean,\n * caseFirst: string}}\n */\nIntl.Collator.prototype.resolvedOptions = function() {};\n\n/**\n * @constructor\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined), useGrouping: (boolean|undefined),\n * numberingSystem: (string|undefined), style: (string|undefined),\n * currency: (string|undefined), currencyDisplay: (string|undefined),\n * minimumIntegerDigits: (number|undefined),\n * minimumFractionDigits: (number|undefined),\n * maximumFractionDigits: (number|undefined),\n * minimumSignificantDigits: (number|undefined),\n * maximumSignificantDigits: (number|undefined)}=}\n * opt_options\n */\nIntl.NumberFormat = function(opt_locales, opt_options) {};\n\n/**\n * @param {Array} locales\n * @param {{localeMatcher: (string|undefined)}=} opt_options\n * @return {Array}\n */\nIntl.NumberFormat.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @param {number} num\n * @return {string}\n */\nIntl.NumberFormat.prototype.format = function(num) {};\n\n/**\n * @return {{locale: string, numberingSystem: string, style: string,\n * currency: (string|undefined), currencyDisplay: (string|undefined),\n * minimumIntegerDigits: number, minimumFractionDigits: number,\n * maximumFractionDigits: number, minimumSignificantDigits: number,\n * maximumSignificantDigits: number, useGrouping: boolean}}\n */\nIntl.NumberFormat.prototype.resolvedOptions = function() {};\n\n/**\n * @constructor\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined),\n * formatMatcher: (string|undefined), calendar: (string|undefined),\n * numberingSystem: (string|undefined), tz: (string|undefined),\n * weekday: (string|undefined), era: (string|undefined),\n * year: (string|undefined), month: (string|undefined),\n * day: (string|undefined), hour: (string|undefined),\n * minute: (string|undefined), second: (string|undefined),\n * timeZoneName: (string|undefined), hour12: (boolean|undefined)}=}\n * opt_options\n */\nIntl.DateTimeFormat = function(opt_locales, opt_options) {};\n\n/**\n * @param {Array} locales\n * @param {{localeMatcher: string}=} opt_options\n * @return {Array}\n */\nIntl.DateTimeFormat.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @param {(!Date|number)=} date\n * @return {string}\n */\nIntl.DateTimeFormat.prototype.format = function(date) {};\n\n/**\n * @param {(!Date|number)=} date\n * @return {Array<{type: string, value: string}>}\n */\nIntl.DateTimeFormat.prototype.formatToParts = function(date) {};\n\n/**\n * @return {{locale: string, calendar: string, numberingSystem: string,\n * timeZone: (string|undefined), weekday: (string|undefined),\n * era: (string|undefined), year: (string|undefined),\n * month: (string|undefined), day: (string|undefined),\n * hour: (string|undefined), minute: (string|undefined),\n * second: (string|undefined), timeZoneName: (string|undefined),\n * hour12: (boolean|undefined)}}\n */\nIntl.DateTimeFormat.prototype.resolvedOptions = function() {};\n\n/**\n * @constructor\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules#Syntax\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined), type: (string|undefined)}=}\n * opt_options\n */\nIntl.PluralRules = function(opt_locales, opt_options) {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules/supportedLocalesOf#Syntax\n * @param {Array} locales\n * @param {{localeMatcher: string}=} opt_options\n * @return {Array}\n */\nIntl.PluralRules.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules/resolvedOptions#Syntax\n * @return {{locale: string, pluralCategories: Array, type: string}}\n */\nIntl.PluralRules.prototype.resolvedOptions = function() {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules/select#Syntax\n * @param {number} number\n * @return {string}\n */\nIntl.PluralRules.prototype.select = function(number) {};\n\n/**\n * @constructor\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat#Syntax\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined),\n * numeric: (string|undefined),\n * style: (string|undefined)}=}\n * opt_options\n */\nIntl.RelativeTimeFormat = function(opt_locales, opt_options) {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/supportedLocalesOf#Syntax\n * @param {Array} locales\n * @param {{localeMatcher: string}=} opt_options\n * @return {Array}\n */\nIntl.RelativeTimeFormat.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/format#Syntax\n * @param {number} value\n * @param {string} unit\n * @return {string}\n */\nIntl.RelativeTimeFormat.prototype.format = function(value, unit) {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/formatToParts#Syntax\n * @param {number} value\n * @param {string} unit\n * @return {Array}\n */\nIntl.RelativeTimeFormat.prototype.formatToParts = function(value, unit) {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/resolvedOptions#Syntax\n * @return {{locale: string, pluralCategories: Array, type: string}}\n */\nIntl.RelativeTimeFormat.prototype.resolvedOptions = function() {};\n', --"externs/w3c_event.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s event specification.\n * The whole file has been fully type annotated.\n * Created from\n * http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n */\n\n\n/**\n * @interface\n * @see https://dom.spec.whatwg.org/#interface-eventtarget\n */\nfunction EventTarget() {}\n\n/**\n * @param {string} type\n * @param {EventListener|function(!Event):*} listener\n * @param {(boolean|!AddEventListenerOptions)=} opt_options\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener\n */\nEventTarget.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/**\n * @param {string} type\n * @param {EventListener|function(!Event):*} listener\n * @param {(boolean|!EventListenerOptions)=} opt_options\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener\n */\nEventTarget.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/**\n * @param {!Event} evt\n * @return {boolean}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent\n */\nEventTarget.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @interface\n */\nfunction EventListener() {}\n\n/**\n * @param {!Event} evt\n * @return {undefined}\n */\nEventListener.prototype.handleEvent = function(evt) {};\n\n// The EventInit interface and the parameters to the Event constructor are part\n// of DOM Level 3 (suggested) and the DOM "Living Standard" (mandated). They are\n// included here as externs cannot be redefined. The same applies to other\n// *EventInit interfaces and *Event constructors throughout this file. See:\n// http://www.w3.org/TR/DOM-Level-3-Events/#event-initializers\n// http://dom.spec.whatwg.org/#constructing-events\n// https://dvcs.w3.org/hg/d4e/raw-file/tip/source_respec.htm#event-constructors\n\n/**\n * @record\n * @see https://dom.spec.whatwg.org/#dictdef-eventinit\n */\nfunction EventInit() {}\n\n/** @type {(undefined|boolean)} */\nEventInit.prototype.bubbles;\n\n/** @type {(undefined|boolean)} */\nEventInit.prototype.cancelable;\n\n/** @type {(undefined|boolean)} */\nEventInit.prototype.composed;\n\n\n/**\n * @constructor\n * @param {string} type\n * @param {EventInit=} opt_eventInitDict\n */\nfunction Event(type, opt_eventInitDict) {}\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n */\nEvent.CAPTURING_PHASE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n */\nEvent.AT_TARGET;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n */\nEvent.BUBBLING_PHASE;\n\n/** @type {string} */\nEvent.prototype.type;\n\n/** @type {EventTarget} */\nEvent.prototype.target;\n\n/** @type {EventTarget} */\nEvent.prototype.currentTarget;\n\n/** @type {number} */\nEvent.prototype.eventPhase;\n\n/** @type {boolean} */\nEvent.prototype.bubbles;\n\n/** @type {boolean} */\nEvent.prototype.cancelable;\n\n/** @type {number} */\nEvent.prototype.timeStamp;\n\n/**\n * Present for events spawned in browsers that support shadow dom.\n * @type {Array|undefined}\n */\nEvent.prototype.path;\n\n/**\n * Present for events spawned in browsers that support shadow dom.\n * @type {function():Array|undefined}\n * @see https://www.w3.org/TR/shadow-dom/#widl-Event-deepPath\n */\nEvent.prototype.deepPath;\n\n/**\n * @return {undefined}\n */\nEvent.prototype.stopPropagation = function() {};\n\n/**\n * @return {undefined}\n */\nEvent.prototype.preventDefault = function() {};\n\n/**\n * @param {string} eventTypeArg\n * @param {boolean=} canBubbleArg\n * @param {boolean=} cancelableArg\n * @return {undefined}\n */\nEvent.prototype.initEvent = function(eventTypeArg, canBubbleArg, cancelableArg) {};\n\n/**\n * @record\n * @extends {EventInit}\n * @template T\n * @see https://dom.spec.whatwg.org/#dictdef-customeventinit\n */\nfunction CustomEventInit() {}\n\n/** @type {(T|undefined)} */\nCustomEventInit.prototype.detail;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {CustomEventInit=} opt_eventInitDict\n * @template T\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#interface-CustomEvent\n */\nfunction CustomEvent(type, opt_eventInitDict) {}\n\n/**\n * @param {string} eventType\n * @param {boolean} bubbles\n * @param {boolean} cancelable\n * @param {T} detail\n * @return {undefined}\n */\nCustomEvent.prototype.initCustomEvent = function(\n eventType, bubbles, cancelable, detail) {};\n\n/**\n * @type {T}\n */\nCustomEvent.prototype.detail;\n\n/**\n * @interface\n */\nfunction DocumentEvent() {}\n\n/**\n * @param {string} eventType\n * @return {!Event}\n */\nDocumentEvent.prototype.createEvent = function(eventType) {};\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://w3c.github.io/uievents/#idl-uieventinit\n */\nfunction UIEventInit() {}\n\n/** @type {undefined|?Window} */\nUIEventInit.prototype.view;\n\n/** @type {undefined|number} */\nUIEventInit.prototype.detail;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {UIEventInit=} opt_eventInitDict\n */\nfunction UIEvent(type, opt_eventInitDict) {}\n\n/** @type {number} */\nUIEvent.prototype.detail;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {number} detailArg\n * @return {undefined}\n */\nUIEvent.prototype.initUIEvent = function(typeArg, canBubbleArg, cancelableArg,\n viewArg, detailArg) {};\n\n/**\n * @record\n * @extends {UIEventInit}\n * @see https://w3c.github.io/uievents/#dictdef-eventmodifierinit\n */\nfunction EventModifierInit() {}\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.ctrlKey;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.shiftKey;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.altKey;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.metaKey;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierAltGraph;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierCapsLock;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierFn;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierFnLock;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierHyper;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierNumLock;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierScrollLock;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierSuper;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierSymbol;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierSymbolLock;\n\n/**\n * @record\n * @extends {EventModifierInit}\n * @see https://w3c.github.io/uievents/#idl-mouseeventinit\n */\nfunction MouseEventInit() {}\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.screenX;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.screenY;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.clientX;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.clientY;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.button;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.buttons;\n\n/** @type {undefined|?EventTarget} */\nMouseEventInit.prototype.relatedTarget;\n\n/**\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {MouseEventInit=} opt_eventInitDict\n */\nfunction MouseEvent(type, opt_eventInitDict) {}\n\n/** @type {number} */\nMouseEvent.prototype.screenX;\n\n/** @type {number} */\nMouseEvent.prototype.screenY;\n\n/** @type {number} */\nMouseEvent.prototype.clientX;\n\n/** @type {number} */\nMouseEvent.prototype.clientY;\n\n/** @type {boolean} */\nMouseEvent.prototype.ctrlKey;\n\n/** @type {boolean} */\nMouseEvent.prototype.shiftKey;\n\n/** @type {boolean} */\nMouseEvent.prototype.altKey;\n\n/** @type {boolean} */\nMouseEvent.prototype.metaKey;\n\n/** @type {number} */\nMouseEvent.prototype.button;\n\n/** @type {EventTarget} */\nMouseEvent.prototype.relatedTarget;\n\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction MutationEvent() {}\n\n/** @type {Node} */\nMutationEvent.prototype.relatedNode;\n\n/** @type {string} */\nMutationEvent.prototype.prevValue;\n\n/** @type {string} */\nMutationEvent.prototype.newValue;\n\n/** @type {string} */\nMutationEvent.prototype.attrName;\n\n/** @type {number} */\nMutationEvent.prototype.attrChange;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Node} relatedNodeArg\n * @param {string} prevValueArg\n * @param {string} newValueArg\n * @param {string} attrNameArg\n * @param {number} attrChangeArg\n * @return {undefined}\n */\nMutationEvent.prototype.initMutationEvent = function(typeArg, canBubbleArg, cancelableArg, relatedNodeArg, prevValueArg, newValueArg, attrNameArg, attrChangeArg) {};\n\n\n// DOM3\n/**\n * @record\n * @extends {EventModifierInit}\n * @see https://w3c.github.io/uievents/#idl-keyboardeventinit\n */\nfunction KeyboardEventInit() {}\n\n/** @type {undefined|string} */\nKeyboardEventInit.prototype.key;\n\n/** @type {undefined|string} */\nKeyboardEventInit.prototype.code;\n\n/** @type {undefined|number} */\nKeyboardEventInit.prototype.location;\n\n/** @type {undefined|boolean} */\nKeyboardEventInit.prototype.repeat;\n\n/** @type {undefined|boolean} */\nKeyboardEventInit.prototype.isComposing;\n\n/** @type {undefined|string} */\nKeyboardEventInit.prototype.char;\n\n/** @type {undefined|string} */\nKeyboardEventInit.prototype.locale;\n\n/**\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {KeyboardEventInit=} opt_eventInitDict\n */\nfunction KeyboardEvent(type, opt_eventInitDict) {}\n\n/** @type {string} */\nKeyboardEvent.prototype.keyIdentifier;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.ctrlKey;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.shiftKey;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.altKey;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.metaKey;\n\n/**\n * @param {string} keyIdentifierArg\n * @return {boolean}\n */\nKeyboardEvent.prototype.getModifierState = function(keyIdentifierArg) {};\n\n/**\n * @record\n * @extends {UIEventInit}\n * @see https://w3c.github.io/uievents/#idl-focuseventinit\n */\nfunction FocusEventInit() {}\n\n/** @type {undefined|?EventTarget} */\nFocusEventInit.prototype.relatedTarget;\n\n\n/**\n * The FocusEvent interface provides specific contextual information associated\n * with Focus events.\n * http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent\n *\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {FocusEventInit=} opt_eventInitDict\n */\nfunction FocusEvent(type, opt_eventInitDict) {}\n\n/** @type {EventTarget} */\nFocusEvent.prototype.relatedTarget;\n\n\n/**\n * See https://dom.spec.whatwg.org/#dictdef-eventlisteneroptions\n * @record\n */\nvar EventListenerOptions = function() {};\n\n/** @type {boolean|undefined} */\nEventListenerOptions.prototype.capture;\n\n/**\n * See https://dom.spec.whatwg.org/#dictdef-addeventlisteneroptions\n * @record\n * @extends {EventListenerOptions}\n */\nvar AddEventListenerOptions = function() {};\n\n/** @type {boolean|undefined} */\nAddEventListenerOptions.prototype.passive;\n\n/** @type {boolean|undefined} */\nAddEventListenerOptions.prototype.once;\n\n/**\n * @record\n * @extends {UIEventInit}\n * @see https://w3c.github.io/uievents/#idl-inputeventinit\n * @see https://w3c.github.io/input-events/#interface-InputEvent\n */\nfunction InputEventInit() {}\n\n/** @type {undefined|?string} */\nInputEventInit.prototype.data;\n\n/** @type {undefined|boolean} */\nInputEventInit.prototype.isComposing;\n\n/** @type {undefined|string} */\nInputEventInit.prototype.inputType;\n\n/** @type {undefined|?DataTransfer} */\nInputEventInit.prototype.dataTransfer;\n\n\n// TODO(charleyroy): Add getTargetRanges() once a consensus has been made\n// regarding how to structure these values. See\n// https://github.com/w3c/input-events/issues/38.\n/**\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {InputEventInit=} opt_eventInitDict\n * @see https://www.w3.org/TR/uievents/#interface-inputevent\n * @see https://w3c.github.io/input-events/#interface-InputEvent\n */\nfunction InputEvent(type, opt_eventInitDict) {}\n\n/** @type {string} */\nInputEvent.prototype.data;\n\n/** @type {boolean} */\nInputEvent.prototype.isComposed;\n\n/** @type {string} */\nInputEvent.prototype.inputType;\n\n/** @type {?DataTransfer} */\nInputEvent.prototype.dataTransfer;\n', --"externs/w3c_event3.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s event Level 3 specification.\n * This file depends on w3c_event.js.\n * The whole file has been partially type annotated.\n * Created from\n * http://www.w3.org/TR/DOM-Level-3-Events/#ecma-script-binding-ecma-binding\n *\n * @externs\n * @author ericdingle@google.com (Eric Dingle)\n */\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {string} keyIdentifierArg\n * @param {number} keyLocationArg\n * @param {string} modifiersList\n * @return {undefined}\n */\nKeyboardEvent.prototype.initKeyboardEvent = function(typeArg, canBubbleArg, cancelableArg, viewArg, keyIdentifierArg, keyLocationArg, modifiersList) {};\n\n/** @type {string} */\nKeyboardEvent.prototype.char;\n\n/** @type {string} */\nKeyboardEvent.prototype.code;\n\n/** @type {string} */\nKeyboardEvent.prototype.key;\n\n/** @type {number} */\nKeyboardEvent.prototype.location;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.repeat;\n\n/** @type {string} */\nKeyboardEvent.prototype.locale;\n\n/** @type {number} */\nMouseEvent.prototype.buttons;\n\n/**\n * @param {string} keyIdentifierArg\n * @return {boolean}\n */\nMouseEvent.prototype.getModifierState = function(keyIdentifierArg) {};\n\n/** @type {boolean} */\nEvent.prototype.defaultPrevented;\n\n/** @type {string} */\nEvent.prototype.namespaceURI;\n\n/** @return {undefined} */\nEvent.prototype.stopImmediatePropagation = function() {};\n', --"externs/gecko_event.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over\n * W3C\'s event specification by Gecko. This file depends on\n * w3c_event.js.\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n */\n\n// TODO: Almost all of it has not been annotated with types.\n\n/** @const {number} */ Event.prototype.HORIZONTAL_AXIS;\n/** @const {number} */ Event.prototype.VERTICAL_AXIS;\n/** @type {boolean} */ Event.prototype.altKey;\n/** @type {number} */ Event.prototype.axis;\n/** @type {number} */ Event.prototype.button;\n/** @type {boolean} */ Event.prototype.cancelBubble;\n/** @type {number} */ Event.prototype.charCode;\n/** @type {number} */ Event.prototype.clientX;\n/** @type {number} */ Event.prototype.clientY;\n/** @type {boolean} */ Event.prototype.ctrlKey;\n/** @type {EventTarget} */ Event.prototype.explicitOriginalTarget;\n/** @type {boolean} */ Event.prototype.isChar;\n/** @type {boolean} */ Event.prototype.isTrusted;\n/** @type {number} */ Event.prototype.keyCode;\n/** @type {number} */ Event.prototype.layerX;\n/** @type {number} */ Event.prototype.layerY;\n/** @type {boolean} */ Event.prototype.metaKey;\n/** @type {EventTarget} */ Event.prototype.originalTarget;\n/** @type {number} */ Event.prototype.pageX;\n/** @type {number} */ Event.prototype.pageY;\n/** @type {EventTarget|undefined} */ Event.prototype.relatedTarget;\n/** @type {number} */ Event.prototype.screenX;\n/** @type {number} */ Event.prototype.screenY;\n/** @type {boolean} */ Event.prototype.shiftKey;\n/** @type {Window} */ Event.prototype.view;\n/** @type {number} */ Event.prototype.which;\n\n/** @constructor */ function nsIDOMPageTransitionEvent() {}\n/** @type {boolean} */ nsIDOMPageTransitionEvent.prototype.persisted;\n\n//Methods\nEvent.prototype.initKeyEvent;\n/**\n * @param {string} typeArg\n * @param {boolean=} canBubbleArg\n * @param {boolean=} cancelableArg\n * @param {?Window=} viewArg\n * @param {?number=} detailArg\n * @param {number=} screenXArg\n * @param {number=} screenYArg\n * @param {number=} clientXArg\n * @param {number=} clientYArg\n * @param {boolean=} ctrlKeyArg\n * @param {boolean=} altKeyArg\n * @param {boolean=} shiftKeyArg\n * @param {boolean=} metaKeyArg\n * @param {?number=} buttonArg\n * @param {?EventTarget=} relatedTargetArg\n */\nEvent.prototype.initMouseEvent = function(typeArg, canBubbleArg, cancelableArg, viewArg, detailArg, screenXArg, screenYArg, clientXArg, clientYArg, ctrlKeyArg, altKeyArg, shiftKeyArg, metaKeyArg, buttonArg, relatedTargetArg) {};\nEvent.prototype.initUIEvent;\nEvent.prototype.initMessageEvent;\nEvent.prototype.preventBubble;\nEvent.prototype.preventCapture;\n', --"externs/ie_event.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over the\n * W3C\'s event specification by IE in JScript. This file depends on\n * w3c_event.js.\n *\n * @see http://msdn.microsoft.com/en-us/library/ms535863.aspx\n * @externs\n * @author acleung@google.com (Alan Leung)\n */\n\n/** @type {string} */\nEvent.prototype.Abstract;\n\n/** @type {boolean} */\nEvent.prototype.altLeft;\n\n/** @type {string} */\nEvent.prototype.Banner;\n\n/**\n * A ClipboardData on IE, but a DataTransfer on WebKit.\n * @see http://msdn.microsoft.com/en-us/library/ms535220.aspx\n * @type {(ClipboardData|undefined)}\n */\nEvent.prototype.clipboardData;\n\n/** @type {boolean} */\nEvent.prototype.contentOverflow;\n\n/** @type {boolean} */\nEvent.prototype.ctrlLeft;\n\n/** @type {string} */\nEvent.prototype.dataFld;\n\nEvent.prototype.domain;\n\n/** @type {Element} */\nEvent.prototype.fromElement;\n\n/** @type {string} */\nEvent.prototype.MoreInfo;\n\n/** @type {string} */\nEvent.prototype.nextPage;\n\n/** @type {number} */\nEvent.prototype.offsetX;\n\n/** @type {number} */\nEvent.prototype.offsetY;\n\n/** @type {string} */\nEvent.prototype.propertyName;\n\n/** @type {string} */\nEvent.prototype.qualifier;\n\n/** @type {number} */\nEvent.prototype.reason;\n\n/** @type {Object<*>} */\nEvent.prototype.recordset;\n\n/** @type {boolean} */\nEvent.prototype.repeat;\n\n/** @type {(boolean|string|undefined)} */\nEvent.prototype.returnValue;\n\n/** @type {string} */\nEvent.prototype.saveType;\n\nEvent.prototype.scheme;\n\n/** @type {boolean} */\nEvent.prototype.shiftLeft;\n\n/** @type {Window} */\nEvent.prototype.source;\n\n/** @type {Element} */\nEvent.prototype.srcElement;\n\nEvent.prototype.srcFilter;\n\n/** @type {string} */\nEvent.prototype.srcUrn;\n\n/** @type {Element} */\nEvent.prototype.toElement;\n\nEvent.prototype.userName;\n\n/** @type {number} */\nEvent.prototype.wheelDelta;\n\n/** @type {number} */\nEvent.prototype.x;\n\n/** @type {number} */\nEvent.prototype.y;\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/windows/apps/hh441257.aspx\n */\nfunction MSPointerPoint() {}\n\n/** @type {number} */\nMSPointerPoint.prototype.pointerId;\n\n/** @type {number} */\nMSPointerPoint.prototype.pointerType;\n\n/**\n * @constructor\n * @extends {Event}\n * @see http://msdn.microsoft.com/en-us/library/windows/apps/hh441233.aspx\n */\nfunction MSPointerEvent() {}\n\n/** @const {number} */\nMSPointerEvent.MSPOINTER_TYPE_MOUSE;\n\n/** @const {number} */\nMSPointerEvent.MSPOINTER_TYPE_PEN;\n\n/** @const {number} */\nMSPointerEvent.MSPOINTER_TYPE_TOUCH;\n\n/** @type {number} */\nMSPointerEvent.prototype.height;\n\n/** @type {number} */\nMSPointerEvent.prototype.hwTimestamp;\n\n/** @type {boolean} */\nMSPointerEvent.prototype.isPrimary;\n\n/** @type {number} */\nMSPointerEvent.prototype.pointerId;\n\n/** @type {number} */\nMSPointerEvent.prototype.pointerType;\n\n/** @type {number} */\nMSPointerEvent.prototype.pressure;\n\n/** @type {number} */\nMSPointerEvent.prototype.rotation;\n\n/** @type {number} */\nMSPointerEvent.prototype.tiltX;\n\n/** @type {number} */\nMSPointerEvent.prototype.tiltY;\n\n/** @type {number} */\nMSPointerEvent.prototype.timeStamp;\n\n/** @type {number} */\nMSPointerEvent.prototype.width;\n\n/**\n * @param {number} pointerId\n * @return {undefined}\n */\nMSPointerEvent.prototype.msReleasePointerCapture;\n\n/**\n * @param {number} pointerId\n * @return {undefined}\n */\nMSPointerEvent.prototype.msSetPointerCapture;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {number} detailArg\n * @param {number} screenXArg\n * @param {number} screenYArg\n * @param {number} clientXArg\n * @param {number} clientYArg\n * @param {boolean} ctrlKeyArg\n * @param {boolean} altKeyArg\n * @param {boolean} shiftKeyArg\n * @param {boolean} metaKeyArg\n * @param {number} buttonArg\n * @param {Element} relatedTargetArg\n * @param {number} offsetXArg\n * @param {number} offsetYArg\n * @param {number} widthArg\n * @param {number} heightArg\n * @param {number} pressure\n * @param {number} rotation\n * @param {number} tiltX\n * @param {number} tiltY\n * @param {number} pointerIdArg\n * @param {number} pointerType\n * @param {number} hwTimestampArg\n * @param {boolean} isPrimary\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/windows/apps/hh441246.aspx\n */\nMSPointerEvent.prototype.initPointerEvent;\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/ie/hh968249(v=vs.85).aspx\n */\nfunction MSGesture() {}\n\n/**\n * @type {Element}\n */\nMSGesture.prototype.target;\n\n/**\n * @param {number} pointerId\n * @return {undefined}\n */\nMSGesture.prototype.addPointer = function(pointerId) {};\n\nMSGesture.prototype.stop = function() {};\n\n/**\n * @constructor\n * @extends {Event}\n * @see http://msdn.microsoft.com/en-us/library/ie/hh772076(v=vs.85).aspx\n */\nfunction MSGestureEvent() {}\n\n/** @type {number} */\nMSGestureEvent.prototype.expansion;\n\n/** @type {!MSGesture} */\nMSGestureEvent.prototype.gestureObject;\n\n/** @type {number} */\nMSGestureEvent.prototype.hwTimestamp;\n\n/** @type {number} */\nMSGestureEvent.prototype.rotation;\n\n/** @type {number} */\nMSGestureEvent.prototype.scale;\n\n/** @type {number} */\nMSGestureEvent.prototype.translationX;\n\n/** @type {number} */\nMSGestureEvent.prototype.translationY;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityAngular;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityExpansion;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityX;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityY;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {number} detailArg\n * @param {number} screenXArg\n * @param {number} screenYArg\n * @param {number} clientXArg\n * @param {number} clientYArg\n * @param {number} offsetXArg\n * @param {number} offsetYArg\n * @param {number} translationXArg\n * @param {number} translationYArg\n * @param {number} scaleArg\n * @param {number} expansionArg\n * @param {number} rotationArg\n * @param {number} velocityXArg\n * @param {number} velocityYArg\n * @param {number} velocityExpansionArg\n * @param {number} velocityAngularArg\n * @param {number} hwTimestampArg\n * @param {EventTarget} relatedTargetArg\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/windows/apps/hh441187.aspx\n */\nMSGestureEvent.prototype.initGestureEvent;\n', --"externs/webkit_event.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over W3C\'s\n * event specification by WebKit. This file depends on w3c_event.js.\n * All the provided definitions have been type annotated\n *\n * @externs\n * @author djlee@google.com (DJ Lee)\n */\n\n/** @type {number} */\nEvent.prototype.wheelDeltaX;\n\n/** @type {number} */\nEvent.prototype.wheelDeltaY;\n\n/**\n * @constructor\n * @extends {Event}\n * @see http://developer.apple.com/library/safari/documentation/AudioVideo/Reference/WebKitAnimationEventClassReference/WebKitAnimationEvent/WebKitAnimationEvent.html\n */\nfunction WebKitAnimationEvent() {}\n\n/**\n * @const {string}\n */\nWebKitAnimationEvent.prototype.animationName;\n\n/**\n * @const {number}\n */\nWebKitAnimationEvent.prototype.elapsedTime;\n', --"externs/w3c_device_sensor_event.js":'/*\n * Copyright 2013 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s device orientation and device motion\n * events specification.\n * This file depends on w3c_event.js.\n * The whole file has been partially type annotated.\n * Created from http://dev.w3.org/geo/api/spec-source-orientation.\n *\n * @externs\n * @author lukaszbk@google.com (Lukasz Bieniasz-Krzywiec)\n */\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://w3c.github.io/deviceorientation/spec-source-orientation.html#deviceorientation\n */\nfunction DeviceOrientationEventInit() {}\n\n/** @type {number|undefined} */\nDeviceOrientationEventInit.prototype.alpha;\n\n/** @type {number|undefined} */\nDeviceOrientationEventInit.prototype.beta;\n\n/** @type {number|undefined} */\nDeviceOrientationEventInit.prototype.gamma;\n\n/** @type {boolean|undefined} */\nDeviceOrientationEventInit.prototype.absolute;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {!DeviceOrientationEventInit=} opt_eventInitDict\n */\nfunction DeviceOrientationEvent(type, opt_eventInitDict) {}\n\n/** @type {?number} */\nDeviceOrientationEvent.prototype.alpha;\n\n/** @type {?number} */\nDeviceOrientationEvent.prototype.beta;\n\n/** @type {?number} */\nDeviceOrientationEvent.prototype.gamma;\n\n/** @type {boolean} */\nDeviceOrientationEvent.prototype.absolute;\n\n/**\n * @type {?number}\n * @see https://developer.apple.com/library/safari/documentation/SafariDOMAdditions/Reference/DeviceOrientationEventClassRef/DeviceOrientationEvent/DeviceOrientationEvent.html#//apple_ref/javascript/instp/DeviceOrientationEvent/webkitCompassAccuracy\n */\nDeviceOrientationEvent.prototype.webkitCompassAccuracy;\n\n/**\n * @type {?number}\n * @see https://developer.apple.com/library/safari/documentation/SafariDOMAdditions/Reference/DeviceOrientationEventClassRef/DeviceOrientationEvent/DeviceOrientationEvent.html#//apple_ref/javascript/instp/DeviceOrientationEvent/webkitCompassHeading\n */\nDeviceOrientationEvent.prototype.webkitCompassHeading;\n\n/**\n * @constructor\n */\nfunction DeviceAcceleration() {}\n\n/** @type {?number} */\nDeviceAcceleration.prototype.x;\n\n/** @type {?number} */\nDeviceAcceleration.prototype.y;\n\n/** @type {?number} */\nDeviceAcceleration.prototype.z;\n\n/**\n * @constructor\n */\nfunction DeviceRotationRate() {}\n\n/** @type {?number} */\nDeviceRotationRate.prototype.alpha;\n\n/** @type {?number} */\nDeviceRotationRate.prototype.beta;\n\n/** @type {?number} */\nDeviceRotationRate.prototype.gamma;\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction DeviceMotionEvent() {}\n\n/** @type {?DeviceAcceleration} */\nDeviceMotionEvent.prototype.acceleration;\n\n/** @type {?DeviceAcceleration} */\nDeviceMotionEvent.prototype.accelerationIncludingGravity;\n\n/** @type {?DeviceRotationRate} */\nDeviceMotionEvent.prototype.rotationRate;\n\n/** @type {?number} */\nDeviceMotionEvent.prototype.interval;\n', -+var pra={"externs/es3.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview ECMAScript 3 Built-Ins. This include common extensions so this\n * is actually ES3+Reality.\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n * @author stevey@9oo91e.qjz9zk (Steve Yegge)\n * @author nicksantos@9oo91e.qjz9zk (Nick Santos)\n * @author arv@9oo91e.qjz9zk (Erik Arvidsson)\n * @author johnlenz@9oo91e.qjz9zk (John Lenz)\n */\n\n\n// START ES6 RETROFIT CODE\n// symbol, Symbol and Symbol.iterator are actually ES6 types but some\n// base types require them to be part of their definition (such as Array).\n\n\n/**\n * @constructor\n * @param {*=} opt_description\n * @return {symbol}\n */\nfunction Symbol(opt_description) {}\n\n\n/**\n * @const {string|undefined}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/description\n */\nSymbol.prototype.description;\n\n\n/**\n * @param {string} sym\n * @return {symbol}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/for\n */\nSymbol.for = function(sym) {};\n\n\n/**\n * @param {symbol} sym\n * @return {string|undefined}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/keyFor\n */\nSymbol.keyFor = function(sym) {};\n\n\n// Well known symbols\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator\n * @const {symbol}\n */\nSymbol.asyncIterator;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance\n * @const {symbol}\n */\nSymbol.hasInstance;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable\n * @const {symbol}\n */\nSymbol.isConcatSpreadable;\n\n/**\n * @const {symbol}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/iterator\n */\nSymbol.iterator;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/match\n * @const {symbol}\n */\nSymbol.match;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/matchAll\n * @const {symbol}\n */\nSymbol.matchAll;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/replace\n * @const {symbol}\n */\nSymbol.replace;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/search\n * @const {symbol}\n */\nSymbol.search;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/species\n * @const {symbol}\n */\nSymbol.species;\n\n// /**\n// * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/split\n// * @const {symbol}\n// */\n// Symbol.split;\n\n/**\n * @const {symbol}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive\n */\nSymbol.toPrimitive;\n\n/**\n * @const {symbol}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag\n */\nSymbol.toStringTag;\n\n/**\n * @const {symbol}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/unscopables\n */\nSymbol.unscopables;\n\n\n/**\n * @record\n * @template VALUE\n */\nfunction IIterableResult() {};\n\n/** @type {boolean} */\nIIterableResult.prototype.done;\n\n/** @type {VALUE} */\nIIterableResult.prototype.value;\n\n\n\n/**\n * @interface\n * @template VALUE\n */\nfunction Iterable() {}\n\n// TODO(johnlenz): remove the suppression when the compiler understands\n// "symbol" natively\n/**\n * @return {!Iterator}\n * @suppress {externsValidation}\n */\nIterable.prototype[Symbol.iterator] = function() {};\n\n\n\n/**\n * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for\n * anything. https://github.com/google/closure-compiler/issues/3489\n * @interface\n * @template VALUE, UNUSED_RETURN_T, UNUSED_NEXT_T\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Guide/The_Iterator_protocol\n */\nfunction Iterator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!IIterableResult}\n */\nIterator.prototype.next = function(opt_value) {};\n\n\n/**\n * Use this to indicate a type is both an Iterator and an Iterable.\n * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for\n * anything. https://github.com/google/closure-compiler/issues/3489\n * @interface\n * @extends {Iterator}\n * @extends {Iterable}\n * @template T, UNUSED_RETURN_T, UNUSED_NEXT_T\n */\nfunction IteratorIterable() {}\n\n// END ES6 RETROFIT CODE\n\n\n/**\n * @interface\n * @template KEY1, VALUE1\n */\nfunction IObject() {}\n\n/**\n * @record\n * @extends {IObject}\n * @template VALUE2\n */\nfunction IArrayLike() {}\n\n/** @type {number} */\nIArrayLike.prototype.length;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments\n */\nfunction Arguments() {}\n\n/**\n * @type {Function}\n * @see http://developer.m0z111a.qjz9zk/En/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments/callee\n */\nArguments.prototype.callee;\n\n/**\n * Use the non-standard {@see Function.prototype.caller} property of a function\n * object instead.\n * @type {Function}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Functions/arguments/caller\n * @deprecated\n */\nArguments.prototype.caller;\n\n/**\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/En/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments/length\n */\nArguments.prototype.length;\n\n/**\n * Not actually a global variable, when running in a browser environment. But\n * we need it in order for the type checker to typecheck the "arguments"\n * variable in a function correctly.\n *\n * TODO(tbreisacher): There should be a separate \'arguments\' variable of type\n * `Array`, in the d8 externs.\n *\n * @type {!Arguments}\n * @see http://developer.m0z111a.qjz9zk/en/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments\n */\nvar arguments;\n\n/**\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity\n * @const\n */\nvar Infinity;\n\n/**\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN\n * @const\n */\nvar NaN;\n\n/**\n * @type {undefined}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined\n * @const\n */\nvar undefined;\n\n/**\n * @param {string} uri\n * @return {string}\n * @throws {URIError} when used wrongly.\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURI\n */\nfunction decodeURI(uri) {}\n\n/**\n * @param {string} uri\n * @return {string}\n * @throws {URIError} when used wrongly.\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent\n */\nfunction decodeURIComponent(uri) {}\n\n/**\n * @param {string} uri\n * @return {string}\n * @throws {URIError} if one attempts to encode a surrogate which is not part of\n * a high-low pair.\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI\n */\nfunction encodeURI(uri) {}\n\n/**\n * @param {string} uri\n * @return {string}\n * @throws {URIError} if one attempts to encode a surrogate which is not part of\n * a high-low pair.\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent\n */\nfunction encodeURIComponent(uri) {}\n\n/**\n * Should only be used in browsers where encode/decodeURIComponent\n * are not present, as the latter handle fancy Unicode characters.\n * @param {string} str\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/Core_JavaScript_1.5_Guide/Predefined_Functions/escape_and_unescape_Functions\n */\nfunction escape(str) {}\n\n/**\n * Should only be used in browsers where encode/decodeURIComponent\n * are not present, as the latter handle fancy Unicode characters.\n * @param {string} str\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/Core_JavaScript_1.5_Guide/Predefined_Functions/escape_and_unescape_Functions\n */\nfunction unescape(str) {}\n\n/**\n * @param {*} num\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/isFinite\n */\nfunction isFinite(num) {}\n\n/**\n * @param {*} num\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN\n */\nfunction isNaN(num) {}\n\n/**\n * @param {*} num\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat\n */\nfunction parseFloat(num) {}\n\n/**\n * Parse an integer. Use of `parseInt` without `base` is strictly\n * banned in Google. If you really want to parse octal or hex based on the\n * leader, then pass `undefined` as the base.\n *\n * @param {*} num\n * @param {number|undefined} base\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt\n */\nfunction parseInt(num, base) {}\n\n/**\n * @param {string} code\n * @return {*}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval\n */\nfunction eval(code) {}\n\n\n\n/**\n * @constructor\n * @param {*=} opt_value\n * @return {!Object}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object\n */\nfunction Object(opt_value) {}\n\n/**\n * The constructor of the current object.\n * @type {Function}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n */\nObject.prototype.constructor = function() {};\n\n/**\n * Binds an object\'s property to a function to be called when that property is\n * looked up.\n * Mozilla-only.\n *\n * @param {string} sprop\n * @param {Function} fun\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineGetter\n * @return {undefined}\n * @deprecated\n */\nObject.prototype.__defineGetter__ = function(sprop, fun) {};\n\n/**\n * Binds an object\'s property to a function to be called when an attempt is made\n * to set that property.\n * Mozilla-only.\n *\n * @param {string} sprop\n * @param {Function} fun\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineSetter\n * @return {undefined}\n * @deprecated\n */\nObject.prototype.__defineSetter__ = function(sprop, fun) {};\n\n/**\n * Returns whether the object has a property with the specified name.\n *\n * @param {*} propertyName Implicitly cast to a string.\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty\n */\nObject.prototype.hasOwnProperty = function(propertyName) {};\n\n/**\n * Returns whether an object exists in another object\'s prototype chain.\n *\n * @param {Object} other\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf\n */\nObject.prototype.isPrototypeOf = function(other) {};\n\n/**\n * Return the function bound as a getter to the specified property.\n * Mozilla-only.\n *\n * @param {string} sprop a string containing the name of the property whose\n * getter should be returned\n * @return {Function}\n * @nosideeffects\n * @deprecated\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/lookupGetter\n */\nObject.prototype.__lookupGetter__ = function(sprop) {};\n\n/**\n * Return the function bound as a setter to the specified property.\n * Mozilla-only.\n *\n * @param {string} sprop a string containing the name of the property whose\n * setter should be returned.\n * @return {Function}\n * @nosideeffects\n * @deprecated\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/lookupSetter\n */\nObject.prototype.__lookupSetter__ = function(sprop) {};\n\n/**\n * Executes a function when a non-existent method is called on an object.\n * Mozilla-only.\n *\n * @param {Function} fun\n * @return {*}\n * @deprecated\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/noSuchMethod\n */\nObject.prototype.__noSuchMethod__ = function(fun) {};\n\n/**\n * Points to an object\'s context. For top-level objects, this is the e.g. window.\n * Mozilla-only.\n *\n * @type {Object}\n * @deprecated\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/parent\n */\nObject.prototype.__parent__;\n\n/**\n * Points to the object which was used as prototype when the object was instantiated.\n * Mozilla-only.\n *\n * Will be null on Object.prototype.\n *\n * @type {Object}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto\n */\nObject.prototype.__proto__;\n\n/**\n * Determine whether the specified property in an object can be enumerated by a\n * for..in loop, with the exception of properties inherited through the\n * prototype chain.\n *\n * @param {string|symbol} propertyName\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable\n */\nObject.prototype.propertyIsEnumerable = function(propertyName) {};\n\n/**\n * Returns a localized string representing the object.\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toLocaleString\n */\nObject.prototype.toLocaleString = function() {};\n\n/**\n * Returns a string representing the source code of the object.\n * Mozilla-only.\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toSource\n */\nObject.prototype.toSource = function() {};\n\n/**\n * Returns a string representing the object.\n * @this {*}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString\n */\nObject.prototype.toString = function() {};\n\n/**\n * Returns the object\'s `this` value.\n * @return {*}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf\n */\nObject.prototype.valueOf = function() {};\n\n/**\n * @constructor\n * @param {...*} var_args\n * @throws {Error}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function\n */\nfunction Function(var_args) {}\n\n/**\n * @param {...*} var_args\n * @return {*}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call\n */\nFunction.prototype.call = function(var_args) {};\n\n/**\n * @param {...*} var_args\n * @return {*}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply\n */\nFunction.prototype.apply = function(var_args) {};\n\nFunction.prototype.arguments;\n\n/**\n * @type {number}\n * @deprecated\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/arity\n */\nFunction.prototype.arity;\n\n/**\n * Nonstandard; Mozilla and JScript only.\n * @type {Function}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/caller\n */\nFunction.prototype.caller;\n\n/**\n * Nonstandard.\n * @type {?}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/displayName\n */\nFunction.prototype.displayName;\n\n/**\n * Expected number of arguments.\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/length\n */\nFunction.prototype.length;\n\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name\n */\nFunction.prototype.name;\n\n/**\n * @this {Function}\n * @return {string}\n * @nosideeffects\n * @override\n */\nFunction.prototype.toString = function() {};\n\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @param {...*} var_args\n * @return {!Array}\n * @nosideeffects\n * @template T\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array\n */\nfunction Array(var_args) {}\n\n/**\n * @return {Iterator}\n * @suppress {externsValidation}\n */\nArray.prototype[Symbol.iterator] = function() {};\n\n// Functions:\n\n/**\n * Returns a new array comprised of this array joined with other array(s)\n * and/or value(s).\n *\n * @param {...*} var_args\n * @return {!Array}\n * @this {*}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat\n */\nArray.prototype.concat = function(var_args) {};\n\n/**\n * Joins all elements of an array into a string.\n *\n * @param {*=} opt_separator Specifies a string to separate each element of the\n * array. The separator is converted to a string if necessary. If omitted,\n * the array elements are separated with a comma.\n * @return {string}\n * @this {IArrayLike|string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join\n */\nArray.prototype.join = function(opt_separator) {};\n\n/**\n * Removes the last element from an array and returns that element.\n *\n * @return {T}\n * @this {IArrayLike}\n * @modifies {this}\n * @template T\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop\n */\nArray.prototype.pop = function() {};\n\n// TODO(bradfordcsmith): remove "undefined" from the var_args of push\n/**\n * Mutates an array by appending the given elements and returning the new\n * length of the array.\n *\n * @param {...(T|undefined)} var_args\n * @return {number} The new length of the array.\n * @this {IArrayLike}\n * @template T\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push\n */\nArray.prototype.push = function(var_args) {};\n\n/**\n * Transposes the elements of an array in place: the first array element becomes the\n * last and the last becomes the first. The mutated array is also returned.\n *\n * @return {THIS} A reference to the original modified array.\n * @this {THIS}\n * @template THIS\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse\n */\nArray.prototype.reverse = function() {};\n\n/**\n * Removes the first element from an array and returns that element. This\n * method changes the length of the array.\n *\n * @this {IArrayLike}\n * @modifies {this}\n * @return {T}\n * @template T\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift\n */\nArray.prototype.shift = function() {};\n\n/**\n * Extracts a section of an array and returns a new array.\n *\n * @param {?number=} begin Zero-based index at which to begin extraction.\n * @param {?number=} end Zero-based index at which to end extraction. slice\n * extracts up to but not including end.\n * @return {!Array}\n * @this {IArrayLike|string}\n * @template T\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice\n */\nArray.prototype.slice = function(begin, end) {};\n\n/**\n * Sorts the elements of an array in place.\n *\n * @param {function(T,T):number=} opt_compareFn Specifies a function that\n * defines the sort order.\n * @this {IArrayLike}\n * @template T\n * @modifies {this}\n * @return {!Array}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort\n */\nArray.prototype.sort = function(opt_compareFn) {};\n\n/**\n * Changes the content of an array, adding new elements while removing old\n * elements.\n *\n * @param {?number=} index Index at which to start changing the array. If\n * negative, will begin that many elements from the end.\n * @param {?number=} howMany An integer indicating the number of old array\n * elements to remove.\n * @param {...T} var_args\n * @return {!Array}\n * @this {IArrayLike}\n * @modifies {this}\n * @template T\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice\n */\nArray.prototype.splice = function(index, howMany, var_args) {};\n\n/**\n * @return {string}\n * @this {Object}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toSource\n */\nArray.prototype.toSource;\n\n/**\n * @this {Array}\n * @return {string}\n * @nosideeffects\n * @override\n */\nArray.prototype.toString = function() {};\n\n/**\n * Adds one or more elements to the beginning of an array and returns the new\n * length of the array.\n *\n * @param {...*} var_args\n * @return {number} The new length of the array\n * @this {IArrayLike}\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift\n */\nArray.prototype.unshift = function(var_args) {};\n\n/**\n * Apply a function simultaneously against two values of the array (from\n * left-to-right) as to reduce it to a single value.\n *\n * @param {?function(?, T, number, !Array) : R} callback\n * @param {*=} opt_initialValue\n * @return {R}\n * @this {IArrayLike|string}\n * @template T,R\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce\n */\nArray.prototype.reduce = function(callback, opt_initialValue) {};\n\n/**\n * Apply a function simultaneously against two values of the array (from\n * right-to-left) as to reduce it to a single value.\n *\n * @param {?function(?, T, number, !Array) : R} callback\n * @param {*=} opt_initialValue\n * @return {R}\n * @this {IArrayLike|string}\n * @template T,R\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduceRight\n */\nArray.prototype.reduceRight = function(callback, opt_initialValue) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @return {boolean}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every\n */\nArray.prototype.every = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @return {!Array}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\n */\nArray.prototype.filter = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\n * @return {undefined}\n */\nArray.prototype.forEach = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @this {IArrayLike|string}\n * @nosideeffects\n * @template T\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf\n */\nArray.prototype.indexOf = function(obj, opt_fromIndex) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @this {IArrayLike|string}\n * @nosideeffects\n * @template T\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf\n */\nArray.prototype.lastIndexOf = function(obj, opt_fromIndex) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): R} callback\n * @param {S=} opt_thisobj\n * @return {!Array}\n * @this {IArrayLike|string}\n * @template T,S,R\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\n */\nArray.prototype.map = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @return {boolean}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some\n */\nArray.prototype.some = function(callback, opt_thisobj) {};\n\n/**\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/index\n */\nArray.prototype.index;\n\n/**\n * @type {?string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/input\n */\nArray.prototype.input;\n\n/**\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/length\n */\nArray.prototype.length;\n\n/**\n * Introduced in 1.8.5.\n * @param {*} arr\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Array/isArray\n */\nArray.isArray = function(arr) {};\n\n/**\n * @constructor\n * @param {*=} opt_value\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean\n */\nfunction Boolean(opt_value) {}\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean/toSource\n * @override\n */\nBoolean.prototype.toSource = function() {};\n\n/**\n * @this {boolean|Boolean}\n * @return {string}\n * @nosideeffects\n * @override\n */\nBoolean.prototype.toString = function() {};\n\n/**\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean/valueOf\n * @override\n */\nBoolean.prototype.valueOf = function() {};\n\n/**\n * @constructor\n * @param {*=} opt_value\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number\n */\nfunction Number(opt_value) {}\n\n/**\n * @this {Number|number}\n * @param {number=} opt_fractionDigits\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toExponential\n */\nNumber.prototype.toExponential = function(opt_fractionDigits) {};\n\n/**\n * @this {Number|number}\n * @param {*=} opt_digits\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed\n */\nNumber.prototype.toFixed = function(opt_digits) {};\n\n/**\n * @this {Number|number}\n * @param {number=} opt_precision\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toPrecision\n */\nNumber.prototype.toPrecision = function(opt_precision) {};\n\n/**\n * Returns a string representing the number.\n * @this {Number|number}\n * @param {(number|Number)=} opt_radix An optional radix.\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toString\n * @override\n */\nNumber.prototype.toString = function(opt_radix) {};\n\n// Properties.\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE\n */\nNumber.MAX_VALUE;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_VALUE\n */\nNumber.MIN_VALUE;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/NaN\n */\nNumber.NaN;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY\n */\nNumber.NEGATIVE_INFINITY;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY\n */\nNumber.POSITIVE_INFINITY;\n\n\n/**\n * @const\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math\n */\nvar Math = {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/abs\n */\nMath.abs = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/acos\n */\nMath.acos = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/asin\n */\nMath.asin = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan\n */\nMath.atan = function(x) {};\n\n/**\n * @param {?} y\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan2\n */\nMath.atan2 = function(y, x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/ceil\n */\nMath.ceil = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cos\n */\nMath.cos = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/exp\n */\nMath.exp = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor\n */\nMath.floor = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log\n */\nMath.log = function(x) {};\n\n/**\n * @param {...?} var_args\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max\n */\nMath.max = function(var_args) {};\n\n/**\n * @param {...?} var_args\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/min\n */\nMath.min = function(var_args) {};\n\n/**\n * @param {?} x\n * @param {?} y\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/pow\n */\nMath.pow = function(x, y) {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random\n */\nMath.random = function() {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round\n */\nMath.round = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sin\n */\nMath.sin = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sqrt\n */\nMath.sqrt = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/tan\n */\nMath.tan = function(x) {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/toSource\n */\nMath.toSource = function() {};\n\n// Properties:\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/E\n */\nMath.E;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LN2\n */\nMath.LN2;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LN10\n */\nMath.LN10;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LOG2E\n */\nMath.LOG2E;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LOG10E\n */\nMath.LOG10E;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/PI\n */\nMath.PI;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/SQRT1_2\n */\nMath.SQRT1_2;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/SQRT2\n */\nMath.SQRT2;\n\n\n/**\n * @param {?=} opt_yr_num\n * @param {?=} opt_mo_num\n * @param {?=} opt_day_num\n * @param {?=} opt_hr_num\n * @param {?=} opt_min_num\n * @param {?=} opt_sec_num\n * @param {?=} opt_ms_num\n * @constructor\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date\n */\nfunction Date(opt_yr_num, opt_mo_num, opt_day_num, opt_hr_num, opt_min_num,\n opt_sec_num, opt_ms_num) {}\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now\n */\nDate.now = function() {};\n\n/**\n * Parses a string representation of a date, and returns the number\n * of milliseconds since January 1, 1970, 00:00:00, local time.\n * @param {*} date\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse\n */\nDate.parse = function(date) {};\n\n/**\n * @param {number} year\n * @param {number} month\n * @param {number=} opt_date\n * @param {number=} opt_hours\n * @param {number=} opt_minute\n * @param {number=} opt_second\n * @param {number=} opt_ms\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC\n */\nDate.UTC = function(year, month,\n opt_date, opt_hours, opt_minute, opt_second, opt_ms) {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDate\n */\nDate.prototype.getDate = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDay\n */\nDate.prototype.getDay = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMonth\n */\nDate.prototype.getMonth = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getFullYear\n */\nDate.prototype.getFullYear = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getYear\n */\nDate.prototype.getYear = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getHours\n */\nDate.prototype.getHours = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMinutes\n */\nDate.prototype.getMinutes = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getSeconds\n */\nDate.prototype.getSeconds = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMilliseconds\n */\nDate.prototype.getMilliseconds = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime\n */\nDate.prototype.getTime = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset\n */\nDate.prototype.getTimezoneOffset = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDate\n */\nDate.prototype.getUTCDate = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDay\n */\nDate.prototype.getUTCDay = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMonth\n */\nDate.prototype.getUTCMonth = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear\n */\nDate.prototype.getUTCFullYear = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCHours\n */\nDate.prototype.getUTCHours = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMinutes\n */\nDate.prototype.getUTCMinutes = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCSeconds\n */\nDate.prototype.getUTCSeconds = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMilliseconds\n */\nDate.prototype.getUTCMilliseconds = function() {};\n\n/**\n * Sets the day of the month for a specified date according to local time.\n *\n * @param {number} dayValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setDate\n * @return {number}\n */\nDate.prototype.setDate = function(dayValue) {};\n\n/**\n * Set the month for a specified date according to local time.\n *\n * @param {number} monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMonth\n * @return {number}\n */\nDate.prototype.setMonth = function(monthValue, opt_dayValue) {};\n\n/**\n * Sets the full year for a specified date according to local time.\n *\n * @param {number} yearValue\n * @param {number=} opt_monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setFullYear\n * @return {number}\n */\nDate.prototype.setFullYear =\n function(yearValue, opt_monthValue, opt_dayValue) {};\n\n/**\n * Sets the year for a specified date according to local time.\n *\n * @param {number} yearValue\n * @deprecated\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setYear\n * @return {number}\n */\nDate.prototype.setYear = function(yearValue) {};\n\n/**\n * Sets the hours for a specified date according to local time.\n *\n * @param {number} hoursValue\n * @param {number=} opt_minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setHours\n * @return {number}\n */\nDate.prototype.setHours = function(hoursValue, opt_minutesValue,\n opt_secondsValue, opt_msValue) {};\n\n/**\n * Sets the minutes for a specified date according to local time.\n *\n * @param {number} minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMinutes\n * @return {number}\n */\nDate.prototype.setMinutes =\n function(minutesValue, opt_secondsValue, opt_msValue) {};\n\n/**\n * Sets the seconds for a specified date according to local time.\n *\n * @param {number} secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setSeconds\n * @return {number}\n */\nDate.prototype.setSeconds = function(secondsValue, opt_msValue) {};\n\n/**\n * Sets the milliseconds for a specified date according to local time.\n *\n * @param {number} millisecondsValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMilliseconds\n * @return {number}\n */\nDate.prototype.setMilliseconds = function(millisecondsValue) {};\n\n/**\n * Sets the Date object to the time represented by a number of milliseconds\n * since January 1, 1970, 00:00:00 UTC.\n *\n * @param {number} timeValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setTime\n * @return {number}\n */\nDate.prototype.setTime = function(timeValue) {};\n\n/**\n * Sets the day of the month for a specified date according to universal time.\n *\n * @param {number} dayValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCDate\n * @return {number}\n */\nDate.prototype.setUTCDate = function(dayValue) {};\n\n/**\n * Sets the month for a specified date according to universal time.\n *\n * @param {number} monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMonth\n * @return {number}\n */\nDate.prototype.setUTCMonth = function(monthValue, opt_dayValue) {};\n\n/**\n * Sets the full year for a specified date according to universal time.\n *\n * @param {number} yearValue\n * @param {number=} opt_monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear\n * @return {number}\n */\nDate.prototype.setUTCFullYear = function(yearValue, opt_monthValue,\n opt_dayValue) {};\n\n/**\n * Sets the hour for a specified date according to universal time.\n *\n * @param {number} hoursValue\n * @param {number=} opt_minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCHours\n * @return {number}\n */\nDate.prototype.setUTCHours = function(hoursValue, opt_minutesValue,\n opt_secondsValue, opt_msValue) {};\n\n/**\n * Sets the minutes for a specified date according to universal time.\n *\n * @param {number} minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMinutes\n * @return {number}\n */\nDate.prototype.setUTCMinutes = function(minutesValue, opt_secondsValue,\n opt_msValue) {};\n\n\n/**\n * Sets the seconds for a specified date according to universal time.\n *\n * @param {number} secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds\n * @return {number}\n */\nDate.prototype.setUTCSeconds = function(secondsValue, opt_msValue) {};\n\n/**\n * Sets the milliseconds for a specified date according to universal time.\n *\n * @param {number} millisecondsValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMilliseconds\n * @return {number}\n */\nDate.prototype.setUTCMilliseconds = function(millisecondsValue) {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toSource\n * @override\n */\nDate.prototype.toSource = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Date/toDateString\n */\nDate.prototype.toDateString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toGMTString\n */\nDate.prototype.toGMTString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toTimeString\n */\nDate.prototype.toTimeString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toUTCString\n */\nDate.prototype.toUTCString = function() {};\n\n/**\n * @param {(string|Array)=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString\n */\nDate.prototype.toLocaleDateString = function(opt_locales, opt_options) {};\n\n/**\n * @param {string} formatString\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleFormat\n */\nDate.prototype.toLocaleFormat = function(formatString) {};\n\n/**\n * @param {string|Array=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString\n * @see http://www.ecma-international.org/ecma-402/1.0/#sec-13.3.1\n * @override\n */\nDate.prototype.toLocaleString = function(opt_locales, opt_options) {};\n\n/**\n * @param {(string|Array)=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString\n */\nDate.prototype.toLocaleTimeString = function(opt_locales, opt_options) {};\n\n/**\n * @this {Date}\n * @return {string}\n * @nosideeffects\n * @override\n */\nDate.prototype.toString = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/valueOf\n */\nDate.prototype.valueOf;\n\n/**\n * @constructor\n * @implements {Iterable}\n * @param {*=} opt_str\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String\n */\nfunction String(opt_str) {}\n\n/**\n * @param {...number} var_args\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode\n */\nString.fromCharCode = function(var_args) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/anchor\n */\nString.prototype.anchor = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/big\n */\nString.prototype.big = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/blink\n */\nString.prototype.blink = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/bold\n */\nString.prototype.bold = function() {};\n\n/**\n * Returns the specified character from a string.\n *\n * @this {String|string}\n * @param {number} index\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charAt\n */\nString.prototype.charAt = function(index) {};\n\n/**\n * Returns a number indicating the Unicode value of the character at the given\n * index.\n *\n * @this {String|string}\n * @param {number=} opt_index\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt\n */\nString.prototype.charCodeAt = function(opt_index) {};\n\n/**\n * Combines the text of two or more strings and returns a new string.\n *\n * @this {String|string}\n * @param {...*} var_args\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/concat\n */\nString.prototype.concat = function(var_args) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fixed\n */\nString.prototype.fixed = function() {};\n\n/**\n * @this {String|string}\n * @param {string} color\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fontcolor\n */\nString.prototype.fontcolor = function(color) {};\n\n/**\n * @this {String|string}\n * @param {number} size\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fontsize\n */\nString.prototype.fontsize = function(size) {};\n\n/**\n * Returns the index within the calling String object of the first occurrence\n * of the specified value, starting the search at fromIndex, returns -1 if the\n * value is not found.\n *\n * @this {String|string}\n * @param {string|null} searchValue\n * @param {(number|null)=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf\n */\nString.prototype.indexOf = function(searchValue, opt_fromIndex) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/italics\n */\nString.prototype.italics = function() {};\n\n/**\n * Returns the index within the calling String object of the last occurrence of\n * the specified value, or -1 if not found. The calling string is searched\n * backward, starting at fromIndex.\n *\n * @this {String|string}\n * @param {string|null} searchValue\n * @param {(number|null)=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf\n */\nString.prototype.lastIndexOf = function(searchValue, opt_fromIndex) {};\n\n/**\n * @this {String|string}\n * @param {string} hrefAttribute\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/link\n */\nString.prototype.link = function(hrefAttribute) {};\n\n/**\n * Returns a number indicating whether a reference string comes before or after\n * or is the same as the given string in sort order.\n *\n * @this {*}\n * @param {?string} compareString\n * @param {string|Array=} locales\n * @param {Object=} options\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/En/Core_JavaScript_1.5_Reference/Objects/String/localeCompare\n * @see http://www.ecma-international.org/ecma-402/1.0/#sec-13.1.1\n */\nString.prototype.localeCompare = function(compareString, locales, options) {};\n\n/**\n * Used to retrieve the matches when matching a string against a regular\n * expression.\n *\n * @this {String|string}\n * @param {*} regexp\n * @return {Array} This should really return an Array with a few\n * special properties, but we do not have a good way to model this in\n * our type system. Also see Regexp.prototype.exec.\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match\n */\nString.prototype.match = function(regexp) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/quote\n */\nString.prototype.quote = function() {};\n\n/**\n * Finds a match between a regular expression and a string, and replaces the\n * matched substring with a new substring.\n *\n * This may have side-effects if the replacement function has side-effects.\n *\n * @this {String|string}\n * @param {RegExp|string} pattern\n * @param {?string|function(string, ...?):*} replacement\n * @return {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace\n */\nString.prototype.replace = function(pattern, replacement) {};\n\n/**\n * Executes the search for a match between a regular expression and this String\n * object.\n *\n * @this {String|string}\n * @param {RegExp|string} pattern\n * @return {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/search\n */\nString.prototype.search = function(pattern) {};\n\n/**\n * @this {String|string}\n * @param {number} begin\n * @param {number=} opt_end\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice\n */\nString.prototype.slice = function(begin, opt_end) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/small\n */\nString.prototype.small = function() {};\n\n/**\n * @this {String|string}\n * @param {*=} opt_separator\n * @param {number=} opt_limit\n * @return {!Array}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split\n */\nString.prototype.split = function(opt_separator, opt_limit) {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/strike\n */\nString.prototype.strike = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/sub\n */\nString.prototype.sub = function() {};\n\n/**\n * @this {String|string}\n * @param {number} start\n * @param {number=} opt_length\n * @return {string} The specified substring.\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr\n */\nString.prototype.substr = function(start, opt_length) {};\n\n/**\n * @this {String|string}\n * @param {number} start\n * @param {number=} opt_end\n * @return {string} The specified substring.\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring\n */\nString.prototype.substring = function(start, opt_end) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/sup\n */\nString.prototype.sup = function() {};\n\n/**\n * @this {String|string}\n * @param {(string|Array)=} opt_locales\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase\n */\nString.prototype.toLocaleUpperCase = function(opt_locales) {};\n\n/**\n * @this {String|string}\n * @param {(string|Array)=} opt_locales\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase\n */\nString.prototype.toLocaleLowerCase = function(opt_locales) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase\n */\nString.prototype.toLowerCase = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase\n */\nString.prototype.toUpperCase = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toSource\n * @override\n */\nString.prototype.toSource = function() {};\n\n/**\n * @this {string|String}\n * @return {string}\n * @nosideeffects\n * @override\n */\nString.prototype.toString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/valueOf\n */\nString.prototype.valueOf;\n\n/**\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length\n */\nString.prototype.length;\n\n/**\n * @constructor\n * @param {*=} opt_pattern\n * @param {*=} opt_flags\n * @return {!RegExp}\n * @throws {SyntaxError} if opt_pattern is an invalid pattern.\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nfunction RegExp(opt_pattern, opt_flags) {}\n\n/**\n * @param {*} pattern\n * @param {*=} opt_flags\n * @return {void}\n * @modifies {this}\n * @deprecated\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/x9cswe0z(v=VS.85).aspx\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/compile\n */\nRegExp.prototype.compile = function(pattern, opt_flags) {};\n\n/**\n * @param {*} str The string to search.\n * @return {?RegExpResult}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/z908hy33(VS.85).aspx\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec\n */\nRegExp.prototype.exec = function(str) {};\n\n/**\n * @param {*} str The string to search.\n * @return {boolean} Whether the string was matched.\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test\n */\nRegExp.prototype.test = function(str) {};\n\n/**\n * @this {RegExp}\n * @return {string}\n * @nosideeffects\n * @override\n */\nRegExp.prototype.toString = function() {};\n\n/**\n * @constructor\n * @extends {Array}\n */\nvar RegExpResult = function() {};\n\n\n/** @type {number} */\nRegExpResult.prototype.index;\n\n\n/** @type {string} */\nRegExpResult.prototype.input;\n\n\n/** @type {number} */\nRegExpResult.prototype.length;\n\n\n/**\n * Not actually part of ES3; was added in 2018.\n * https://github.com/tc39/proposal-regexp-named-groups\n *\n * @type {!Object}\n */\nRegExpResult.prototype.groups;\n\n\n// Constructor properties:\n\n/**\n * The string against which the last regexp was matched.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_input.html\n */\nRegExp.input;\n\n/**\n * The last matched characters.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_lastMatch.html\n */\nRegExp.lastMatch;\n\n/**\n * The last matched parenthesized substring, if any.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_lastParen.html\n */\nRegExp.lastParen;\n\n/**\n * The substring of the input up to the characters most recently matched.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_leftContext.html\n */\nRegExp.leftContext;\n\n/**\n * The substring of the input after the characters most recently matched.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_rightContext.html\n */\nRegExp.rightContext;\n\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$1;\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$2;\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$3;\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$4;\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$5;\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$6;\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$7;\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$8;\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$9;\n\n// Prototype properties:\n\n/**\n * Whether to test the regular expression against all possible matches\n * in a string, or only against the first.\n * @type {boolean}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/global\n */\nRegExp.prototype.global;\n\n/**\n * Whether to ignore case while attempting a match in a string.\n * @type {boolean}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/ignoreCase\n */\nRegExp.prototype.ignoreCase;\n\n/**\n * The index at which to start the next match.\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex\n */\nRegExp.prototype.lastIndex;\n\n/**\n * Whether or not the regular expression uses lastIndex.\n * @type {boolean}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/sticky\n */\nRegExp.prototype.sticky;\n\n/**\n * Whether or not to search in strings across multiple lines.\n * @type {boolean}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/multiline\n */\nRegExp.prototype.multiline;\n\n/**\n * The text of the pattern.\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/source\n */\nRegExp.prototype.source;\n\n/**\n * The flags the regex was created with.\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/flags\n */\nRegExp.prototype.flags;\n\n/**\n * @constructor\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!Error}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error\n */\nfunction Error(opt_message, opt_file, opt_line) {}\n\n\n/**\n * Chrome/v8 specific, altering the maximum depth of the stack trace\n * (10 by default).\n * @type {number}\n * @see http://code.9oo91e.qjz9zk/p/v8/wiki/JavaScriptStackTraceApi\n */\nError.stackTraceLimit;\n\n\n/**\n * Chrome/v8 specific, adds a stack trace to the error object. The optional\n * constructorOpt parameter allows you to pass in a function value. When\n * collecting the stack trace all frames above the topmost call to this\n * function, including that call, will be left out of the stack trace.\n * @param {Object} error The object to add the stack trace to.\n * @param {Function=} opt_constructor A function in the stack trace\n * @see http://code.9oo91e.qjz9zk/p/v8/wiki/JavaScriptStackTraceApi\n * @return {undefined}\n */\nError.captureStackTrace = function(error, opt_constructor){};\n\n\n/**\n * IE-only.\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/2w6a45b5.aspx\n */\nError.prototype.description;\n\n\n/**\n * Mozilla-only.\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/lineNumber\n */\nError.prototype.lineNumber;\n\n/**\n * Mozilla-only\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/fileName\n */\nError.prototype.fileName;\n\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/name\n */\nError.prototype.name;\n\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/message\n */\nError.prototype.message;\n\n/**\n * Doesn\'t seem to exist, but closure/debug.js references it.\n */\nError.prototype.sourceURL;\n\n/** @type {string} */\nError.prototype.stack;\n\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!EvalError}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/EvalError\n */\nfunction EvalError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!RangeError}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RangeError\n */\nfunction RangeError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!ReferenceError}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError\n */\nfunction ReferenceError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!SyntaxError}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError\n */\nfunction SyntaxError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!TypeError}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError\n */\nfunction TypeError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!URIError}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/URIError\n */\nfunction URIError(opt_message, opt_file, opt_line) {}\n\n\n// JScript extensions.\n// @see http://msdn.m1cr050ft.qjz9zk/en-us/library/894hfyb4(VS.80).aspx\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/7sw4ddf8.aspx\n * @type {function(new:?, string, string=)}\n * @deprecated\n */\nfunction ActiveXObject(progId, opt_location) {}\n',"externs/es5.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 5.\n * @see https://es5.github.io/\n * @externs\n * @author djlee@9oo91e.qjz9zk (DJ Lee)\n */\n\n\n/**\n * @param {?Object|undefined} selfObj Specifies the object to which |this|\n * should point when the function is run. If the value is null or undefined,\n * it will default to the global object.\n * @param {...*} var_args Additional arguments that are partially\n * applied to fn.\n * @return {!Function} A partially-applied form of the Function on which\n * bind() was invoked as a method.\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Function/bind\n */\nFunction.prototype.bind = function(selfObj, var_args) {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/String/Trim\n */\nString.prototype.trim = function() {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/String/TrimLeft\n */\nString.prototype.trimLeft = function() {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/String/TrimRight\n */\nString.prototype.trimRight = function() {};\n\n\n/**\n * A object property descriptor used by Object.create, Object.defineProperty,\n * Object.defineProperties, Object.getOwnPropertyDescriptor.\n *\n * @record\n * @template THIS\n */\nfunction ObjectPropertyDescriptor() {}\n\n/** @type {(*|undefined)} */\nObjectPropertyDescriptor.prototype.value;\n\n/** @type {(function(this: THIS):?)|undefined} */\nObjectPropertyDescriptor.prototype.get;\n\n/** @type {(function(this: THIS, ?):void)|undefined} */\nObjectPropertyDescriptor.prototype.set;\n\n/** @type {boolean|undefined} */\nObjectPropertyDescriptor.prototype.writable;\n\n/** @type {boolean|undefined} */\nObjectPropertyDescriptor.prototype.enumerable;\n\n/** @type {boolean|undefined} */\nObjectPropertyDescriptor.prototype.configurable;\n\n\n/**\n * @param {?Object} proto\n * @param {?Object=} opt_properties A map of ObjectPropertyDescriptors.\n * @return {!Object}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/create\n */\nObject.create = function(proto, opt_properties) {};\n\n\n/**\n * @param {!Object} obj\n * @param {string|symbol} prop\n * @param {!Object} descriptor A ObjectPropertyDescriptor.\n * @return {!Object}\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/defineProperty\n */\nObject.defineProperty = function(obj, prop, descriptor) {};\n\n\n/**\n * @param {!Object} obj\n * @param {!Object} props A map of ObjectPropertyDescriptors.\n * @return {!Object}\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/defineProperties\n */\nObject.defineProperties = function(obj, props) {};\n\n\n/**\n * @param {T} obj\n * @param {string|symbol} prop\n * @return {!ObjectPropertyDescriptor|undefined}\n * @nosideeffects\n * @template T\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor\n */\nObject.getOwnPropertyDescriptor = function(obj, prop) {};\n\n\n/**\n * @param {!Object} obj\n * @return {!Array}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/keys\n */\nObject.keys = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {!Array}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames\n */\nObject.getOwnPropertyNames = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {Object}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/GetPrototypeOf\n */\nObject.getPrototypeOf = function(obj) {};\n\n\n/**\n * @param {T} obj\n * @return {T}\n * @template T\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/preventExtensions\n */\nObject.preventExtensions = function(obj) {};\n\n\n/**\n * @param {T} obj\n * @return {T}\n * @template T\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/seal\n */\nObject.seal = function(obj) {};\n\n\n/**\n * @param {T} obj\n * @return {T}\n * @template T\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/freeze\n */\nObject.freeze = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/isExtensible\n */\nObject.isExtensible = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/isSealed\n */\nObject.isSealed = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/isFrozen\n */\nObject.isFrozen = function(obj) {};\n\n\n/**\n * We acknowledge that this function does not exist on the `Object.prototype`\n * and is declared in this file for other reasons.\n *\n * When `toJSON` is defined as a property on an object it can be used in\n * conjunction with the JSON.stringify() function.\n *\n * It is defined here to:\n * (1) Prevent the compiler from renaming the property on internal classes.\n * (2) Enforce that the signature is correct for users defining it.\n *\n * @param {string=} opt_key The JSON key for this object.\n * @return {*} The serializable representation of this object. Note that this\n * need not be a string. See http://goo.gl.qjz9zk/PEUvs.\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON()_behavior\n */\nObject.prototype.toJSON = function(opt_key) {};\n\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Date/toISOString\n * @return {string}\n */\nDate.prototype.toISOString = function() {};\n\n\n/**\n * @param {*=} opt_ignoredKey\n * @return {string}\n * @override\n */\nDate.prototype.toJSON = function(opt_ignoredKey) {};\n\n\n/**\n * A fake type to model the JSON object.\n * @constructor\n */\nfunction JSONType() {}\n\n\n/**\n * @param {string} jsonStr The string to parse.\n * @param {(function(this:?, string, *) : *)=} opt_reviver\n * @return {*} The JSON object.\n * @throws {Error}\n */\nJSONType.prototype.parse = function(jsonStr, opt_reviver) {};\n\n\n/**\n * @param {*} jsonObj Input object.\n * @param {(Array|(function(this:?, string, *) : *)|null)=} opt_replacer\n * @param {(number|string)=} opt_space\n * @return {string} JSON string which represents jsonObj.\n * @throws {Error}\n */\nJSONType.prototype.stringify = function(jsonObj, opt_replacer, opt_space) {};\n\n\n/**\n * @type {!JSONType}\n * @suppress {duplicate}\n */\nvar JSON;\n', -+"externs/es6.js":"/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 6 and later.\n * @see https://tc39.github.io/ecma262/\n * @see https://www.khronos.org/registry/typedarray/specs/latest/\n * @externs\n */\n\n/**\n * Some es6 definitions:\n * Symbol, IIterableResult, Iterable, IteratorIterable, Iterator,\n * IteratorIterable moved to es3 file, because some base type requires them, and\n * we want to keep them together. If you add new externs related to those types\n * define them together in the es3 file.\n */\n\n/**\n * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for\n * anything. https://github.com/google/closure-compiler/issues/3489\n * @interface\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator\n * @extends {IteratorIterable}\n * @template VALUE, UNUSED_RETURN_T, UNUSED_NEXT_T\n */\nfunction Generator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!IIterableResult}\n * @override\n */\nGenerator.prototype.next = function(opt_value) {};\n\n/**\n * @param {VALUE} value\n * @return {!IIterableResult}\n */\nGenerator.prototype.return = function(value) {};\n\n/**\n * @param {?} exception\n * @return {!IIterableResult}\n */\nGenerator.prototype.throw = function(exception) {};\n\n\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.log10 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.log2 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.log1p = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.expm1 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.cosh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.sinh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.tanh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.acosh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.asinh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.atanh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.trunc = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.sign = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.cbrt = function(value) {};\n\n/**\n * @param {...number} var_args\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/hypot\n */\nMath.hypot = function(var_args) {};\n\n/**\n * @param {number} value1\n * @param {number} value2\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul\n */\nMath.imul = function(value1, value2) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32\n */\nMath.clz32 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround\n */\nMath.fround = function(value) {};\n\n\n/**\n * @param {*} a\n * @param {*} b\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nObject.is;\n\n\n/**\n * Returns a language-sensitive string representation of this number.\n * @param {(string|!Array)=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString\n * @see http://www.ecma-international.org/ecma-402/1.0/#sec-13.2.1\n * @override\n */\nNumber.prototype.toLocaleString = function(opt_locales, opt_options) {};\n\n/**\n * Returns the wrapped primitive value of this Number object.\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/valueOf\n * @override\n */\nNumber.prototype.valueOf = function() {};\n\n\n/**\n * Pads the end of the string so that it reaches the given length.\n * NOTE: this is an ES2017 (ES8) extern.\n *\n * @param {number} targetLength The target length.\n * @param {string=} opt_padString The string to pad with.\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd\n */\nString.prototype.padEnd = function(targetLength, opt_padString) {};\n\n/**\n * Pads the start of the string so that it reaches the given length.\n * NOTE: this is an ES2017 (ES8) extern.\n *\n * @param {number} targetLength The target length.\n * @param {string=} opt_padString The string to pad with.\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart\n */\nString.prototype.padStart = function(targetLength, opt_padString) {};\n\n/**\n * Repeats the string the given number of times.\n *\n * @param {number} count The number of times the string is repeated.\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\n */\nString.prototype.repeat = function(count) {};\n\n/**\n * @constructor\n * @extends {Array}\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-gettemplateobject\n */\nvar ITemplateArray = function() {};\n\n/**\n * @type {!Array}\n */\nITemplateArray.prototype.raw;\n\n/**\n * @param {!ITemplateArray} template\n * @param {...*} var_args Substitution values.\n * @return {string}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw\n */\nString.raw = function(template, var_args) {};\n\n\n/**\n * @param {number} codePoint\n * @param {...number} var_args Additional codepoints\n * @return {string}\n */\nString.fromCodePoint = function(codePoint, var_args) {};\n\n\n/**\n * @param {number} index\n * @return {number}\n * @nosideeffects\n */\nString.prototype.codePointAt = function(index) {};\n\n\n/**\n * @param {string=} opt_form\n * @return {string}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize\n */\nString.prototype.normalize = function(opt_form) {};\n\n\n/**\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n */\nString.prototype.startsWith = function(searchString, opt_position) {};\n\n/**\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n */\nString.prototype.endsWith = function(searchString, opt_position) {};\n\n/**\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n */\nString.prototype.includes = function(searchString, opt_position) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trimStart\n */\nString.prototype.trimStart = function() {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trimEnd\n */\nString.prototype.trimEnd = function() {};\n\n\n/**\n * @see http://dev.w3.org/html5/postmsg/\n * @interface\n */\nfunction Transferable() {}\n\n/**\n * @param {number} length The length in bytes\n * @constructor\n * @throws {Error}\n * @implements {Transferable}\n */\nfunction ArrayBuffer(length) {}\n\n/** @type {number} */\nArrayBuffer.prototype.byteLength;\n\n/**\n * @param {number} begin\n * @param {number=} opt_end\n * @return {!ArrayBuffer}\n * @nosideeffects\n */\nArrayBuffer.prototype.slice = function(begin, opt_end) {};\n\n/**\n * @param {*} arg\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView\n */\nArrayBuffer.isView = function(arg) {};\n\n\n/**\n * @constructor\n */\nfunction ArrayBufferView() {}\n\n/** @type {!ArrayBuffer} */\nArrayBufferView.prototype.buffer;\n\n/** @type {number} */\nArrayBufferView.prototype.byteOffset;\n\n/** @type {number} */\nArrayBufferView.prototype.byteLength;\n\n\n/**\n * @param {number} length The length in bytes\n * @constructor\n * @throws {Error}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer\n */\nfunction SharedArrayBuffer(length) {}\n\n/** @type {number} */\nSharedArrayBuffer.prototype.byteLength;\n\n/**\n * @param {number} begin\n * @param {number=} opt_end\n * @return {!SharedArrayBuffer}\n * @nosideeffects\n */\nSharedArrayBuffer.prototype.slice = function(begin, opt_end) {};\n\n\n/**\n * @typedef {!ArrayBuffer|!ArrayBufferView}\n */\nvar BufferSource;\n\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @extends {ArrayBufferView}\n */\nfunction TypedArray() {};\n\n/** @const {number} */\nTypedArray.prototype.BYTES_PER_ELEMENT;\n\n/**\n * @param {number} target\n * @param {number} start\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/copyWithin\n */\nTypedArray.prototype.copyWithin = function(target, start, opt_end) {};\n\n/**\n * @return {!IteratorIterable>}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/entries\n */\nTypedArray.prototype.entries = function() {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : ?} callback\n * @param {S=} opt_thisArg\n * @return {boolean}\n * @template S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/every\n */\nTypedArray.prototype.every = function(callback, opt_thisArg) {};\n\n/**\n * @param {number} value\n * @param {number=} opt_begin\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/fill\n */\nTypedArray.prototype.fill = function(value, opt_begin, opt_end) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {THIS}\n * @this {THIS}\n * @template THIS,S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/filter\n */\nTypedArray.prototype.filter = function(callback, opt_thisArg) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {(number|undefined)}\n * @template S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/find\n */\nTypedArray.prototype.find = function(callback, opt_thisArg) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {number}\n * @template S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/findIndex\n */\nTypedArray.prototype.findIndex = function(callback, opt_thisArg) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : ?} callback\n * @param {S=} opt_thisArg\n * @return {undefined}\n * @template S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/forEach\n */\nTypedArray.prototype.forEach = function(callback, opt_thisArg) {};\n\n/**\n * NOTE: this is an ES2016 (ES7) extern.\n * @param {number} searchElement\n * @param {number=} opt_fromIndex\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/includes\n */\nTypedArray.prototype.includes = function(searchElement, opt_fromIndex) {};\n\n/**\n * @param {number} searchElement\n * @param {number=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/indexOf\n */\nTypedArray.prototype.indexOf = function(searchElement, opt_fromIndex) {};\n\n/**\n * @param {string=} opt_separator\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/join\n */\nTypedArray.prototype.join = function(opt_separator) {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/keys\n */\nTypedArray.prototype.keys = function() {};\n\n/**\n * @param {number} searchElement\n * @param {number=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/lastIndexOf\n */\nTypedArray.prototype.lastIndexOf = function(searchElement, opt_fromIndex) {};\n\n/** @type {number} */\nTypedArray.prototype.length;\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : number} callback\n * @param {S=} opt_thisArg\n * @return {THIS}\n * @this {THIS}\n * @template THIS,S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/map\n */\nTypedArray.prototype.map = function(callback, opt_thisArg) {};\n\n/**\n * @param {function((number|INIT|RET), number, number, !TypedArray) : RET} callback\n * @param {INIT=} opt_initialValue\n * @return {RET}\n * @template INIT,RET\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reduce\n */\nTypedArray.prototype.reduce = function(callback, opt_initialValue) {};\n\n/**\n * @param {function((number|INIT|RET), number, number, !TypedArray) : RET} callback\n * @param {INIT=} opt_initialValue\n * @return {RET}\n * @template INIT,RET\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reduceRight\n */\nTypedArray.prototype.reduceRight = function(callback, opt_initialValue) {};\n\n/**\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reverse\n */\nTypedArray.prototype.reverse = function() {};\n\n/**\n * @param {!ArrayBufferView|!Array} array\n * @param {number=} opt_offset\n * @return {undefined}\n * @throws {!RangeError}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set\n */\nTypedArray.prototype.set = function(array, opt_offset) {};\n\n/**\n * @param {number=} opt_begin\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/slice\n */\nTypedArray.prototype.slice = function(opt_begin, opt_end) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {boolean}\n * @template S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/some\n */\nTypedArray.prototype.some = function(callback, opt_thisArg) {};\n\n/**\n * @param {(function(number, number) : number)=} opt_compareFunction\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/sort\n */\nTypedArray.prototype.sort = function(opt_compareFunction) {};\n\n/**\n * @param {number} begin\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray\n */\nTypedArray.prototype.subarray = function(begin, opt_end) {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/values\n */\nTypedArray.prototype.values = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/toLocaleString\n * @override\n */\nTypedArray.prototype.toLocaleString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/toString\n * @override\n */\nTypedArray.prototype.toString = function() {};\n\n/** @override */\nTypedArray.prototype[Symbol.iterator] = function() {};\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments} If the user passes a backing array, then indexed\n * accesses will modify the backing array. JSCompiler does not model\n * this well. In other words, if you have:\n * \n * var x = new ArrayBuffer(1);\n * var y = new Int8Array(x);\n * y[0] = 2;\n * \n * JSCompiler will not recognize that the last assignment modifies x.\n * We workaround this by marking all these arrays as @modifies {arguments},\n * to introduce the possibility that x aliases y.\n */\nfunction Int8Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nInt8Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Int8Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nInt8Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Int8Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nInt8Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint8Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint8Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint8Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint8Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint8Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint8Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint8ClampedArray(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint8ClampedArray.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint8ClampedArray}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint8ClampedArray.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint8ClampedArray}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint8ClampedArray.of = function(var_args) {};\n\n\n/**\n * @typedef {Uint8ClampedArray}\n * @deprecated CanvasPixelArray has been replaced by Uint8ClampedArray\n * in the latest spec.\n * @see http://www.w3.org/TR/2dcontext/#imagedata\n */\nvar CanvasPixelArray;\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Int16Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nInt16Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Int16Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nInt16Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Int16Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nInt16Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint16Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint16Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint16Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint16Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint16Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint16Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Int32Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nInt32Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Int32Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nInt32Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Int32Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nInt32Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint32Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint32Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint32Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint32Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint32Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint32Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Float32Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nFloat32Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Float32Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nFloat32Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Float32Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nFloat32Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Float64Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nFloat64Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Float64Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nFloat64Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Float64Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nFloat64Array.of = function(var_args) {};\n\n\n/**\n * @param {ArrayBuffer|SharedArrayBuffer} buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_byteLength\n * @constructor\n * @extends {ArrayBufferView}\n * @throws {Error}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Typed_arrays/DataView\n */\nfunction DataView(buffer, opt_byteOffset, opt_byteLength) {}\n\n/**\n * @param {number} byteOffset\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getInt8 = function(byteOffset) {};\n\n/**\n * @param {number} byteOffset\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getUint8 = function(byteOffset) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getInt16 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getUint16 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getInt32 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getUint32 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getFloat32 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getFloat64 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setInt8 = function(byteOffset, value) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setUint8 = function(byteOffset, value) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setInt16 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setUint16 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setInt32 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setUint32 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setFloat32 = function(\n byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setFloat64 = function(\n byteOffset, value, opt_littleEndian) {};\n\n\n/**\n * @see https://github.com/promises-aplus/promises-spec\n * @typedef {{then: ?}}\n */\nvar Thenable;\n\n\n/**\n * This is not an official DOM interface. It is used to add generic typing\n * and respective type inference where available.\n * {@see goog.Thenable} inherits from this making all promises\n * interoperate.\n * @interface\n * @struct\n * @template TYPE\n */\nfunction IThenable() {}\n\n\n/**\n * @param {?(function(TYPE):VALUE)=} opt_onFulfilled\n * @param {?(function(*): *)=} opt_onRejected\n * @return {RESULT}\n * @template VALUE\n *\n * When a `Thenable` is fulfilled or rejected with another `Thenable`, the\n * payload of the second is used as the payload of the first.\n *\n * @template RESULT := type('IThenable',\n * cond(isUnknown(VALUE), unknown(),\n * mapunion(VALUE, (V) =>\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'),\n * unknown(),\n * V)))))\n * =:\n */\nIThenable.prototype.then = function(opt_onFulfilled, opt_onRejected) {};\n\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {function(\n * function((TYPE|IThenable|Thenable|null)=),\n * function(*=))} resolver\n * @constructor\n * @implements {IThenable}\n * @template TYPE\n */\nfunction Promise(resolver) {}\n\n\n/**\n * @param {VALUE=} opt_value\n * @return {RESULT}\n * @template VALUE\n * @template RESULT := type('Promise',\n * cond(isUnknown(VALUE), unknown(),\n * mapunion(VALUE, (V) =>\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'),\n * unknown(),\n * V)))))\n * =:\n */\nPromise.resolve = function(opt_value) {};\n\n\n/**\n * @param {*=} opt_error\n * @return {!Promise}\n */\nPromise.reject = function(opt_error) {};\n\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {!Iterable} iterable\n * @return {!Promise>}\n * @template VALUE\n * @template RESULT := mapunion(VALUE, (V) =>\n * cond(isUnknown(V),\n * unknown(),\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'), unknown(), V))))\n * =:\n */\nPromise.all = function(iterable) {};\n\n/**\n * Record type representing a single element of the array value one gets from\n * Promise.allSettled.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled\n * @record\n * @template VALUE\n */\nPromise.AllSettledResultElement = function() {};\n\n/**\n * 'fulfilled' or 'rejected' to indicate the final state of the corresponding\n * Promise.\n * @type {string}\n */\nPromise.AllSettledResultElement.prototype.status;\n\n/**\n * Exists only if the status field is 'fulfilled'\n * @type {VALUE|undefined}\n */\nPromise.AllSettledResultElement.prototype.value;\n\n/**\n * Exists only if the status field is 'rejected'\n * @type {*|undefined}\n */\nPromise.AllSettledResultElement.prototype.reason;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled\n * @param {!Iterable} iterable\n * @return {!Promise>>}\n * @template VALUE\n * @template RESULT := mapunion(VALUE, (V) =>\n * cond(isUnknown(V),\n * unknown(),\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'), unknown(), V))))\n * =:\n */\nPromise.allSettled = function(iterable) {};\n\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {!Iterable} iterable\n * @return {!Promise}\n * @template VALUE\n * @template RESULT := mapunion(VALUE, (V) =>\n * cond(isUnknown(V),\n * unknown(),\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'), unknown(), V))))\n * =:\n */\nPromise.race = function(iterable) {};\n\n\n/**\n * @param {?(function(this:void, TYPE):VALUE)=} opt_onFulfilled\n * @param {?(function(this:void, *): *)=} opt_onRejected\n * @return {RESULT}\n * @template VALUE\n *\n * When a `Thenable` is fulfilled or rejected with another `Thenable`, the\n * payload of the second is used as the payload of the first.\n *\n * @template RESULT := type('Promise',\n * cond(isUnknown(VALUE), unknown(),\n * mapunion(VALUE, (V) =>\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'),\n * unknown(),\n * V)))))\n * =:\n * @override\n */\nPromise.prototype.then = function(opt_onFulfilled, opt_onRejected) {};\n\n\n/**\n * @param {function(*):VALUE} onRejected\n * @return {!Promise} A Promise of the original type or a possibly\n * a different type depending on whether the parent promise was rejected.\n *\n * @template VALUE\n *\n * When a `Thenable` is rejected with another `Thenable`, the payload of the\n * second is used as the payload of the first.\n *\n * @template RESULT := cond(\n * isUnknown(VALUE),\n * unknown(),\n * mapunion(VALUE, (V) =>\n * cond(\n * isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(\n * sub(V, 'Thenable'),\n * unknown(),\n * V))))\n * =:\n */\nPromise.prototype.catch = function(onRejected) {};\n\n\n/**\n * @param {function()} callback\n * @return {!Promise}\n */\nPromise.prototype.finally = function(callback) {};\n\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/of\n * @param {...T} var_args\n * @return {!Array}\n * @template T\n */\nArray.of = function(var_args) {};\n\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from\n * @param {string|!IArrayLike|!Iterable} arrayLike\n * @param {function(this:S, (string|T), number): R=} opt_mapFn\n * @param {S=} opt_this\n * @return {!Array}\n * @template T,S,R\n */\nArray.from = function(arrayLike, opt_mapFn, opt_this) {};\n\n\n/** @return {!IteratorIterable} */\nArray.prototype.keys;\n\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/values\n */\nArray.prototype.values;\n\n\n/**\n * @return {!IteratorIterable>} Iterator of [key, value] pairs.\n */\nArray.prototype.entries;\n\n\n/**\n * @param {function(this:S, T, number, !Array): boolean} predicateFn\n * @param {S=} opt_this\n * @return {T|undefined}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.find\n */\nArray.prototype.find = function(predicateFn, opt_this) {};\n\n\n/**\n * @param {function(this:S, T, number, !Array): boolean} predicateFn\n * @param {S=} opt_this\n * @return {number}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.findindex\n */\nArray.prototype.findIndex = function(predicateFn, opt_this) {};\n\n\n/**\n * @param {T} value\n * @param {number=} opt_begin\n * @param {number=} opt_end\n * @return {!Array}\n * @this {!IArrayLike|string}\n * @template T\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.fill\n */\nArray.prototype.fill = function(value, opt_begin, opt_end) {};\n\n\n/**\n * @param {number} target\n * @param {number} start\n * @param {number=} opt_end\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.copywithin\n * @this {!IArrayLike|string}\n * @template T\n * @return {!Array}\n */\nArray.prototype.copyWithin = function(target, start, opt_end) {};\n\n\n/**\n * NOTE: this is an ES2016 (ES7) extern.\n * @param {T} searchElement\n * @param {number=} opt_fromIndex\n * @return {boolean}\n * @this {!IArrayLike|string}\n * @template T\n * @nosideeffects\n * @see https://tc39.github.io/ecma262/#sec-array.prototype.includes\n */\nArray.prototype.includes = function(searchElement, opt_fromIndex) {};\n\n/**\n * Generates an array by passing every element of this array to a callback that\n * returns an array of zero or more elements to be added to the result.\n *\n * NOTE: The specified behavior of the method is that the callback can return\n * either an Array, which will be flattened into the result, or a non-array,\n * which will simply be included.\n *\n * However, while defining that in the type information here is possible it's\n * very hard to understand both for humans and automated tools other than\n * closure-compiler that process these files. Also, we think it's best to\n * encourage writing callbacks that just always return an Array for the sake\n * of readability.\n *\n * The polyfill for this method provided by closure-compiler does behave as\n * defined in the specification, though.\n *\n * @param {function(this: THIS, T, number, !IArrayLike): !Array}\n * callback\n * @param {THIS=} thisArg\n * @return {!Array}\n * @this {!IArrayLike}\n * @template T, THIS, S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap\n */\nArray.prototype.flatMap = function(callback, thisArg) {};\n\n/**\n * @param {number=} depth\n * @return {!Array}\n * @this {!IArrayLike}\n * @template T, S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat\n */\nArray.prototype.flat = function(depth) {};\n\n/**\n * @param {!Object} obj\n * @return {!Array}\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-object.getownpropertysymbols\n */\nObject.getOwnPropertySymbols = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @param {?} proto\n * @return {!Object}\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-object.setprototypeof\n */\nObject.setPrototypeOf = function(obj, proto) {};\n\n\n/**\n * @const {number}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/EPSILON\n */\nNumber.EPSILON;\n\n/**\n * @const {number}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER\n */\nNumber.MIN_SAFE_INTEGER;\n\n/**\n * @const {number}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER\n */\nNumber.MAX_SAFE_INTEGER;\n\n\n\n/**\n * Parse an integer. Use of `parseInt` without `base` is strictly\n * banned in Google. If you really want to parse octal or hex based on the\n * leader, then pass `undefined` as the base.\n *\n * @param {string} string\n * @param {number|undefined} radix\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseInt\n */\nNumber.parseInt = function(string, radix) {};\n\n/**\n * @param {string} string\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseFloat\n */\nNumber.parseFloat = function(string) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN\n */\nNumber.isNaN = function(value) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite\n */\nNumber.isFinite = function(value) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger\n */\nNumber.isInteger = function(value) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger\n */\nNumber.isSafeInteger = function(value) {};\n\n\n\n/**\n * @param {!Object} target\n * @param {...(Object|null|undefined)} var_args\n * @return {!Object}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n */\nObject.assign = function(target, var_args) {};\n\n/**\n * TODO(dbeam): find a better place for ES2017 externs like this one.\n * NOTE: this is an ES2017 (ES8) extern.\n * @param {!Object} obj\n * @return {!Array} values\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values\n * @throws {Error}\n * @template T\n */\nObject.values = function(obj) {};\n\n/**\n * NOTE: this is an ES2017 (ES8) extern.\n * @param {!Object} obj\n * @return {!Array>} entries\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n * @throws {Error}\n * @template T\n */\nObject.entries = function(obj) {};\n\n/**\n * @param {!Iterable<*>} iter\n * @return {!Object}\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries\n */\nObject.fromEntries = function(iter) {};\n\n/**\n * NOTE: this is an ES2017 (ES8) extern.\n * @param {!Object} obj\n * @return {!Object} descriptors\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors\n * @throws {Error}\n * @template T\n */\nObject.getOwnPropertyDescriptors = function(obj) {};\n\n\n\n/**\n * @const\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect\n */\nvar Reflect = {};\n\n/**\n * @param {function(this: THIS, ...?): RESULT} targetFn\n * @param {THIS} thisArg\n * @param {!Array} argList\n * @return {RESULT}\n * @template THIS, RESULT\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/apply\n */\nReflect.apply = function(targetFn, thisArg, argList) {};\n\n/**\n * @param {function(new: ?, ...?)} targetConstructorFn\n * @param {!Array} argList\n * @param {function(new: TARGET, ...?)=} opt_newTargetConstructorFn\n * @return {TARGET}\n * @template TARGET\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/construct\n */\nReflect.construct = function(targetConstructorFn, argList, opt_newTargetConstructorFn) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @param {!ObjectPropertyDescriptor} attributes\n * @return {boolean}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty\n */\nReflect.defineProperty = function(target, propertyKey, attributes) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {boolean}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty\n */\nReflect.deleteProperty = function(target, propertyKey) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @param {!Object=} opt_receiver\n * @return {*}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get\n */\nReflect.get = function(target, propertyKey, opt_receiver) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {?ObjectPropertyDescriptor}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/getOwnPropertyDescriptor\n */\nReflect.getOwnPropertyDescriptor = function(target, propertyKey) {};\n\n/**\n * @param {!Object} target\n * @return {?Object}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/getPrototypeOf\n */\nReflect.getPrototypeOf = function(target) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/has\n */\nReflect.has = function(target, propertyKey) {};\n\n/**\n * @param {!Object} target\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/isExtensible\n */\nReflect.isExtensible = function(target) {};\n\n/**\n * @param {!Object} target\n * @return {!Array<(string|symbol)>}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys\n */\nReflect.ownKeys = function(target) {};\n\n/**\n * @param {!Object} target\n * @return {boolean}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions\n */\nReflect.preventExtensions = function(target) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @param {*} value\n * @param {!Object=} opt_receiver\n * @return {boolean}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set\n */\nReflect.set = function(target, propertyKey, value, opt_receiver) {};\n\n/**\n * @param {!Object} target\n * @param {?Object} proto\n * @return {boolean}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/setPrototypeOf\n */\nReflect.setPrototypeOf = function(target, proto) {};\n\n\n/**\n * @const\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics\n */\nvar Atomics = {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.add = function(typedArray, index, value) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.and = function(typedArray, index, value) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} expectedValue\n * @param {number} replacementValue\n * @return {number}\n */\nAtomics.compareExchange = function(\n typedArray, index, expectedValue, replacementValue) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.exchange = function(typedArray, index, value) {};\n\n/**\n * @param {number} size\n * @return {boolean}\n */\nAtomics.isLockFree = function(size) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @return {number}\n */\nAtomics.load = function(typedArray, index) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.or = function(typedArray, index, value) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.store = function(typedArray, index, value) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.sub = function(typedArray, index, value) {};\n\n/**\n * @param {!Int32Array} typedArray\n * @param {number} index\n * @param {number} value\n * @param {number=} timeout\n * @return {String}\n */\nAtomics.wait = function(typedArray, index, value, timeout) {};\n\n/**\n * @param {!Int32Array} typedArray\n * @param {number} index\n * @param {number} count\n * @return {number}\n */\nAtomics.wake = function(typedArray, index, count) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.xor = function(typedArray, index, value) {};\n\n\n/**\n * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for\n * anything.\n * https://github.com/google/closure-compiler/issues/3489\n * @interface\n * @template VALUE, UNUSED_RETURN_T, UNUSED_NEXT_T\n * @see https://tc39.github.io/proposal-async-iteration/\n */\nfunction AsyncIterator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!Promise>}\n */\nAsyncIterator.prototype.next;\n\n\n/**\n * @interface\n * @template VALUE\n */\nfunction AsyncIterable() {}\n\n\n/**\n * @return {!AsyncIterator}\n */\nAsyncIterable.prototype[Symbol.asyncIterator] = function() {};\n\n\n/**\n * @interface\n * @extends {AsyncIterator}\n * @extends {AsyncIterable}\n * @template VALUE\n * @see https://tc39.github.io/proposal-async-iteration/\n */\nfunction AsyncIteratorIterable() {}\n\n/**\n * @interface\n * @see https://tc39.github.io/proposal-async-iteration/\n * @extends {AsyncIteratorIterable}\n * @template VALUE\n */\nfunction AsyncGenerator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!Promise>}\n * @override\n */\nAsyncGenerator.prototype.next = function(opt_value) {};\n\n/**\n * @param {VALUE} value\n * @return {!Promise>}\n */\nAsyncGenerator.prototype.return = function(value) {};\n\n/**\n * @param {?} exception\n * @return {!Promise>}\n */\nAsyncGenerator.prototype.throw = function(exception) {};\n", -+"externs/es6_collections.js":'/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 6.\n * @see http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts\n * @externs\n */\n\n// TODO(johnlenz): Use Tuples for the Map and Set iterators where appropriate.\n\n/**\n * @constructor @struct\n * @param {Iterable>|!Array>=} opt_iterable\n * @implements {Iterable>}\n * @template KEY, VALUE\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map\n */\nfunction Map(opt_iterable) {}\n\n/** @return {void} */\nMap.prototype.clear = function() {};\n\n/**\n * @param {KEY} key\n * @return {boolean}\n */\nMap.prototype.delete = function(key) {};\n\n/**\n * @return {!IteratorIterable>}\n * @nosideeffects\n */\nMap.prototype.entries = function() {};\n\n/**\n * @param {function(this:THIS, VALUE, KEY, MAP)} callback\n * @param {THIS=} opt_thisArg\n * @this {MAP}\n * @template MAP,THIS\n */\nMap.prototype.forEach = function(callback, opt_thisArg) {};\n\n/**\n * @param {KEY} key\n * @return {VALUE}\n * @nosideeffects\n */\nMap.prototype.get = function(key) {};\n\n/**\n * @param {KEY} key\n * @return {boolean}\n * @nosideeffects\n */\nMap.prototype.has = function(key) {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nMap.prototype.keys = function() {};\n\n/**\n * @param {KEY} key\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nMap.prototype.set = function(key, value) {};\n\n/**\n * @type {number}\n * (readonly)\n */\nMap.prototype.size;\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nMap.prototype.values = function() {};\n\n/**\n * @return {!Iterator>}\n */\nMap.prototype[Symbol.iterator] = function() {};\n\n\n/**\n * @constructor @struct\n * @param {Iterable>|!Array>=} opt_iterable\n * @template KEY, VALUE\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap\n */\nfunction WeakMap(opt_iterable) {}\n\n/** @return {void} */\nWeakMap.prototype.clear = function() {};\n\n/**\n * @param {KEY} key\n * @return {boolean}\n */\nWeakMap.prototype.delete = function(key) {};\n\n/**\n * @param {KEY} key\n * @return {VALUE}\n * @nosideeffects\n */\nWeakMap.prototype.get = function(key) {};\n\n/**\n * @param {KEY} key\n * @return {boolean}\n * @nosideeffects\n */\nWeakMap.prototype.has = function(key) {};\n\n/**\n * @param {KEY} key\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nWeakMap.prototype.set = function(key, value) {};\n\n/**\n * @constructor @struct\n * @param {Iterable|Array=} opt_iterable\n * @implements {Iterable}\n * @template VALUE\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set\n */\nfunction Set(opt_iterable) {}\n\n/**\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nSet.prototype.add = function(value) {};\n\n/**\n * @return {void}\n */\nSet.prototype.clear = function() {};\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n */\nSet.prototype.delete = function(value) {};\n\n/**\n * @return {!IteratorIterable>} Where each array has two entries:\n * [value, value]\n * @nosideeffects\n */\nSet.prototype.entries = function() {};\n\n/**\n * @param {function(this: THIS, VALUE, VALUE, SET)} callback\n * @param {THIS=} opt_thisArg\n * @this {SET}\n * @template SET,THIS\n */\nSet.prototype.forEach = function(callback, opt_thisArg) {};\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n * @nosideeffects\n */\nSet.prototype.has = function(value) {};\n\n/**\n * @type {number} (readonly)\n */\nSet.prototype.size;\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nSet.prototype.keys = function() {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nSet.prototype.values = function() {};\n\n/**\n * @return {!Iterator}\n */\nSet.prototype[Symbol.iterator] = function() {};\n\n\n\n/**\n * @constructor @struct\n * @param {Iterable|Array=} opt_iterable\n * @template VALUE\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set\n */\nfunction WeakSet(opt_iterable) {}\n\n/**\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nWeakSet.prototype.add = function(value) {};\n\n/**\n * @return {void}\n */\nWeakSet.prototype.clear = function() {};\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n */\nWeakSet.prototype.delete = function(value) {};\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n * @nosideeffects\n */\nWeakSet.prototype.has = function(value) {};\n', -+"externs/intl.js":'/*\n * Copyright 2013 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for the JS Internationalization API as defined in\n * http://www.ecma-international.org/ecma-402/1.0/\n *\n * @externs\n */\n\n/** @const */\nvar Intl = {};\n\n/**\n * NOTE: this API is not from ecma402 and is subject to change.\n * @param {string|Array=} opt_locales\n * @param {{type: (string|undefined)}=}\n * opt_options\n * @constructor\n */\nIntl.v8BreakIterator = function(opt_locales, opt_options) {};\n\n/**\n * @param {string} text\n * @return {undefined}\n */\nIntl.v8BreakIterator.prototype.adoptText = function(text) {};\n\n/**\n * @return {string}\n */\nIntl.v8BreakIterator.prototype.breakType = function() {};\n\n/**\n * @return {number}\n */\nIntl.v8BreakIterator.prototype.current = function() {};\n\n/**\n * @return {number}\n */\nIntl.v8BreakIterator.prototype.first = function() {};\n\n/**\n * @return {number}\n */\nIntl.v8BreakIterator.prototype.next = function() {};\n\n/**\n * @constructor\n * @param {string|Array=} opt_locales\n * @param {{usage: (string|undefined), localeMatcher: (string|undefined),\n * sensitivity: (string|undefined), ignorePunctuation: (boolean|undefined),\n * numeric: (boolean|undefined), caseFirst: (string|undefined)}=}\n * opt_options\n */\nIntl.Collator = function(opt_locales, opt_options) {};\n\n/**\n * @param {Array} locales\n * @param {{localeMatcher: (string|undefined)}=} opt_options\n * @return {Array}\n */\nIntl.Collator.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @param {string} arg1\n * @param {string} arg2\n * @return {number}\n */\nIntl.Collator.prototype.compare = function(arg1, arg2) {};\n\n/**\n * @return {{locale: string, usage: string, sensitivity: string,\n * ignorePunctuation: boolean, collation: string, numeric: boolean,\n * caseFirst: string}}\n */\nIntl.Collator.prototype.resolvedOptions = function() {};\n\n/**\n * @constructor\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined), useGrouping: (boolean|undefined),\n * numberingSystem: (string|undefined), style: (string|undefined),\n * currency: (string|undefined), currencyDisplay: (string|undefined),\n * minimumIntegerDigits: (number|undefined),\n * minimumFractionDigits: (number|undefined),\n * maximumFractionDigits: (number|undefined),\n * minimumSignificantDigits: (number|undefined),\n * maximumSignificantDigits: (number|undefined)}=}\n * opt_options\n */\nIntl.NumberFormat = function(opt_locales, opt_options) {};\n\n/**\n * @param {Array} locales\n * @param {{localeMatcher: (string|undefined)}=} opt_options\n * @return {Array}\n */\nIntl.NumberFormat.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @param {number} num\n * @return {string}\n */\nIntl.NumberFormat.prototype.format = function(num) {};\n\n/**\n * @return {{locale: string, numberingSystem: string, style: string,\n * currency: (string|undefined), currencyDisplay: (string|undefined),\n * minimumIntegerDigits: number, minimumFractionDigits: number,\n * maximumFractionDigits: number, minimumSignificantDigits: number,\n * maximumSignificantDigits: number, useGrouping: boolean}}\n */\nIntl.NumberFormat.prototype.resolvedOptions = function() {};\n\n/**\n * @constructor\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined),\n * formatMatcher: (string|undefined), calendar: (string|undefined),\n * numberingSystem: (string|undefined), tz: (string|undefined),\n * weekday: (string|undefined), era: (string|undefined),\n * year: (string|undefined), month: (string|undefined),\n * day: (string|undefined), hour: (string|undefined),\n * minute: (string|undefined), second: (string|undefined),\n * timeZoneName: (string|undefined), hour12: (boolean|undefined)}=}\n * opt_options\n */\nIntl.DateTimeFormat = function(opt_locales, opt_options) {};\n\n/**\n * @param {Array} locales\n * @param {{localeMatcher: string}=} opt_options\n * @return {Array}\n */\nIntl.DateTimeFormat.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @param {(!Date|number)=} date\n * @return {string}\n */\nIntl.DateTimeFormat.prototype.format = function(date) {};\n\n/**\n * @param {(!Date|number)=} date\n * @return {Array<{type: string, value: string}>}\n */\nIntl.DateTimeFormat.prototype.formatToParts = function(date) {};\n\n/**\n * @return {{locale: string, calendar: string, numberingSystem: string,\n * timeZone: (string|undefined), weekday: (string|undefined),\n * era: (string|undefined), year: (string|undefined),\n * month: (string|undefined), day: (string|undefined),\n * hour: (string|undefined), minute: (string|undefined),\n * second: (string|undefined), timeZoneName: (string|undefined),\n * hour12: (boolean|undefined)}}\n */\nIntl.DateTimeFormat.prototype.resolvedOptions = function() {};\n\n/**\n * @constructor\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules#Syntax\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined), type: (string|undefined)}=}\n * opt_options\n */\nIntl.PluralRules = function(opt_locales, opt_options) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules/supportedLocalesOf#Syntax\n * @param {Array} locales\n * @param {{localeMatcher: string}=} opt_options\n * @return {Array}\n */\nIntl.PluralRules.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules/resolvedOptions#Syntax\n * @return {{locale: string, pluralCategories: Array, type: string}}\n */\nIntl.PluralRules.prototype.resolvedOptions = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules/select#Syntax\n * @param {number} number\n * @return {string}\n */\nIntl.PluralRules.prototype.select = function(number) {};\n\n/**\n * @constructor\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat#Syntax\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined),\n * numeric: (string|undefined),\n * style: (string|undefined)}=}\n * opt_options\n */\nIntl.RelativeTimeFormat = function(opt_locales, opt_options) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/supportedLocalesOf#Syntax\n * @param {Array} locales\n * @param {{localeMatcher: string}=} opt_options\n * @return {Array}\n */\nIntl.RelativeTimeFormat.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/format#Syntax\n * @param {number} value\n * @param {string} unit\n * @return {string}\n */\nIntl.RelativeTimeFormat.prototype.format = function(value, unit) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/formatToParts#Syntax\n * @param {number} value\n * @param {string} unit\n * @return {Array}\n */\nIntl.RelativeTimeFormat.prototype.formatToParts = function(value, unit) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/resolvedOptions#Syntax\n * @return {{locale: string, pluralCategories: Array, type: string}}\n */\nIntl.RelativeTimeFormat.prototype.resolvedOptions = function() {};\n', -+"externs/w3c_event.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s event specification.\n * The whole file has been fully type annotated.\n * Created from\n * http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n */\n\n\n/**\n * @interface\n * @see https://dom.spec.whatwg.org/#interface-eventtarget\n */\nfunction EventTarget() {}\n\n/**\n * @param {string} type\n * @param {EventListener|function(!Event):*} listener\n * @param {(boolean|!AddEventListenerOptions)=} opt_options\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener\n */\nEventTarget.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/**\n * @param {string} type\n * @param {EventListener|function(!Event):*} listener\n * @param {(boolean|!EventListenerOptions)=} opt_options\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener\n */\nEventTarget.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/**\n * @param {!Event} evt\n * @return {boolean}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent\n */\nEventTarget.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @interface\n */\nfunction EventListener() {}\n\n/**\n * @param {!Event} evt\n * @return {undefined}\n */\nEventListener.prototype.handleEvent = function(evt) {};\n\n// The EventInit interface and the parameters to the Event constructor are part\n// of DOM Level 3 (suggested) and the DOM "Living Standard" (mandated). They are\n// included here as externs cannot be redefined. The same applies to other\n// *EventInit interfaces and *Event constructors throughout this file. See:\n// http://www.w3.org/TR/DOM-Level-3-Events/#event-initializers\n// http://dom.spec.whatwg.org/#constructing-events\n// https://dvcs.w3.org/hg/d4e/raw-file/tip/source_respec.htm#event-constructors\n\n/**\n * @record\n * @see https://dom.spec.whatwg.org/#dictdef-eventinit\n */\nfunction EventInit() {}\n\n/** @type {(undefined|boolean)} */\nEventInit.prototype.bubbles;\n\n/** @type {(undefined|boolean)} */\nEventInit.prototype.cancelable;\n\n/** @type {(undefined|boolean)} */\nEventInit.prototype.composed;\n\n\n/**\n * @constructor\n * @param {string} type\n * @param {EventInit=} opt_eventInitDict\n */\nfunction Event(type, opt_eventInitDict) {}\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n */\nEvent.CAPTURING_PHASE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n */\nEvent.AT_TARGET;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n */\nEvent.BUBBLING_PHASE;\n\n/** @type {string} */\nEvent.prototype.type;\n\n/** @type {EventTarget} */\nEvent.prototype.target;\n\n/** @type {EventTarget} */\nEvent.prototype.currentTarget;\n\n/** @type {number} */\nEvent.prototype.eventPhase;\n\n/** @type {boolean} */\nEvent.prototype.bubbles;\n\n/** @type {boolean} */\nEvent.prototype.cancelable;\n\n/** @type {number} */\nEvent.prototype.timeStamp;\n\n/**\n * Present for events spawned in browsers that support shadow dom.\n * @type {Array|undefined}\n */\nEvent.prototype.path;\n\n/**\n * Present for events spawned in browsers that support shadow dom.\n * @type {function():Array|undefined}\n * @see https://www.w3.org/TR/shadow-dom/#widl-Event-deepPath\n */\nEvent.prototype.deepPath;\n\n/**\n * @return {undefined}\n */\nEvent.prototype.stopPropagation = function() {};\n\n/**\n * @return {undefined}\n */\nEvent.prototype.preventDefault = function() {};\n\n/**\n * @param {string} eventTypeArg\n * @param {boolean=} canBubbleArg\n * @param {boolean=} cancelableArg\n * @return {undefined}\n */\nEvent.prototype.initEvent = function(eventTypeArg, canBubbleArg, cancelableArg) {};\n\n/**\n * @record\n * @extends {EventInit}\n * @template T\n * @see https://dom.spec.whatwg.org/#dictdef-customeventinit\n */\nfunction CustomEventInit() {}\n\n/** @type {(T|undefined)} */\nCustomEventInit.prototype.detail;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {CustomEventInit=} opt_eventInitDict\n * @template T\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#interface-CustomEvent\n */\nfunction CustomEvent(type, opt_eventInitDict) {}\n\n/**\n * @param {string} eventType\n * @param {boolean} bubbles\n * @param {boolean} cancelable\n * @param {T} detail\n * @return {undefined}\n */\nCustomEvent.prototype.initCustomEvent = function(\n eventType, bubbles, cancelable, detail) {};\n\n/**\n * @type {T}\n */\nCustomEvent.prototype.detail;\n\n/**\n * @interface\n */\nfunction DocumentEvent() {}\n\n/**\n * @param {string} eventType\n * @return {!Event}\n */\nDocumentEvent.prototype.createEvent = function(eventType) {};\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://w3c.github.io/uievents/#idl-uieventinit\n */\nfunction UIEventInit() {}\n\n/** @type {undefined|?Window} */\nUIEventInit.prototype.view;\n\n/** @type {undefined|number} */\nUIEventInit.prototype.detail;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {UIEventInit=} opt_eventInitDict\n */\nfunction UIEvent(type, opt_eventInitDict) {}\n\n/** @type {number} */\nUIEvent.prototype.detail;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {number} detailArg\n * @return {undefined}\n */\nUIEvent.prototype.initUIEvent = function(typeArg, canBubbleArg, cancelableArg,\n viewArg, detailArg) {};\n\n/**\n * @record\n * @extends {UIEventInit}\n * @see https://w3c.github.io/uievents/#dictdef-eventmodifierinit\n */\nfunction EventModifierInit() {}\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.ctrlKey;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.shiftKey;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.altKey;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.metaKey;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierAltGraph;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierCapsLock;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierFn;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierFnLock;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierHyper;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierNumLock;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierScrollLock;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierSuper;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierSymbol;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierSymbolLock;\n\n/**\n * @record\n * @extends {EventModifierInit}\n * @see https://w3c.github.io/uievents/#idl-mouseeventinit\n */\nfunction MouseEventInit() {}\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.screenX;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.screenY;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.clientX;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.clientY;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.button;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.buttons;\n\n/** @type {undefined|?EventTarget} */\nMouseEventInit.prototype.relatedTarget;\n\n/**\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {MouseEventInit=} opt_eventInitDict\n */\nfunction MouseEvent(type, opt_eventInitDict) {}\n\n/** @type {number} */\nMouseEvent.prototype.screenX;\n\n/** @type {number} */\nMouseEvent.prototype.screenY;\n\n/** @type {number} */\nMouseEvent.prototype.clientX;\n\n/** @type {number} */\nMouseEvent.prototype.clientY;\n\n/** @type {boolean} */\nMouseEvent.prototype.ctrlKey;\n\n/** @type {boolean} */\nMouseEvent.prototype.shiftKey;\n\n/** @type {boolean} */\nMouseEvent.prototype.altKey;\n\n/** @type {boolean} */\nMouseEvent.prototype.metaKey;\n\n/** @type {number} */\nMouseEvent.prototype.button;\n\n/** @type {EventTarget} */\nMouseEvent.prototype.relatedTarget;\n\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction MutationEvent() {}\n\n/** @type {Node} */\nMutationEvent.prototype.relatedNode;\n\n/** @type {string} */\nMutationEvent.prototype.prevValue;\n\n/** @type {string} */\nMutationEvent.prototype.newValue;\n\n/** @type {string} */\nMutationEvent.prototype.attrName;\n\n/** @type {number} */\nMutationEvent.prototype.attrChange;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Node} relatedNodeArg\n * @param {string} prevValueArg\n * @param {string} newValueArg\n * @param {string} attrNameArg\n * @param {number} attrChangeArg\n * @return {undefined}\n */\nMutationEvent.prototype.initMutationEvent = function(typeArg, canBubbleArg, cancelableArg, relatedNodeArg, prevValueArg, newValueArg, attrNameArg, attrChangeArg) {};\n\n\n// DOM3\n/**\n * @record\n * @extends {EventModifierInit}\n * @see https://w3c.github.io/uievents/#idl-keyboardeventinit\n */\nfunction KeyboardEventInit() {}\n\n/** @type {undefined|string} */\nKeyboardEventInit.prototype.key;\n\n/** @type {undefined|string} */\nKeyboardEventInit.prototype.code;\n\n/** @type {undefined|number} */\nKeyboardEventInit.prototype.location;\n\n/** @type {undefined|boolean} */\nKeyboardEventInit.prototype.repeat;\n\n/** @type {undefined|boolean} */\nKeyboardEventInit.prototype.isComposing;\n\n/** @type {undefined|string} */\nKeyboardEventInit.prototype.char;\n\n/** @type {undefined|string} */\nKeyboardEventInit.prototype.locale;\n\n/**\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {KeyboardEventInit=} opt_eventInitDict\n */\nfunction KeyboardEvent(type, opt_eventInitDict) {}\n\n/** @type {string} */\nKeyboardEvent.prototype.keyIdentifier;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.ctrlKey;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.shiftKey;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.altKey;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.metaKey;\n\n/**\n * @param {string} keyIdentifierArg\n * @return {boolean}\n */\nKeyboardEvent.prototype.getModifierState = function(keyIdentifierArg) {};\n\n/**\n * @record\n * @extends {UIEventInit}\n * @see https://w3c.github.io/uievents/#idl-focuseventinit\n */\nfunction FocusEventInit() {}\n\n/** @type {undefined|?EventTarget} */\nFocusEventInit.prototype.relatedTarget;\n\n\n/**\n * The FocusEvent interface provides specific contextual information associated\n * with Focus events.\n * http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent\n *\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {FocusEventInit=} opt_eventInitDict\n */\nfunction FocusEvent(type, opt_eventInitDict) {}\n\n/** @type {EventTarget} */\nFocusEvent.prototype.relatedTarget;\n\n\n/**\n * See https://dom.spec.whatwg.org/#dictdef-eventlisteneroptions\n * @record\n */\nvar EventListenerOptions = function() {};\n\n/** @type {boolean|undefined} */\nEventListenerOptions.prototype.capture;\n\n/**\n * See https://dom.spec.whatwg.org/#dictdef-addeventlisteneroptions\n * @record\n * @extends {EventListenerOptions}\n */\nvar AddEventListenerOptions = function() {};\n\n/** @type {boolean|undefined} */\nAddEventListenerOptions.prototype.passive;\n\n/** @type {boolean|undefined} */\nAddEventListenerOptions.prototype.once;\n\n/**\n * @record\n * @extends {UIEventInit}\n * @see https://w3c.github.io/uievents/#idl-inputeventinit\n * @see https://w3c.github.io/input-events/#interface-InputEvent\n */\nfunction InputEventInit() {}\n\n/** @type {undefined|?string} */\nInputEventInit.prototype.data;\n\n/** @type {undefined|boolean} */\nInputEventInit.prototype.isComposing;\n\n/** @type {undefined|string} */\nInputEventInit.prototype.inputType;\n\n/** @type {undefined|?DataTransfer} */\nInputEventInit.prototype.dataTransfer;\n\n\n// TODO(charleyroy): Add getTargetRanges() once a consensus has been made\n// regarding how to structure these values. See\n// https://github.com/w3c/input-events/issues/38.\n/**\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {InputEventInit=} opt_eventInitDict\n * @see https://www.w3.org/TR/uievents/#interface-inputevent\n * @see https://w3c.github.io/input-events/#interface-InputEvent\n */\nfunction InputEvent(type, opt_eventInitDict) {}\n\n/** @type {string} */\nInputEvent.prototype.data;\n\n/** @type {boolean} */\nInputEvent.prototype.isComposed;\n\n/** @type {string} */\nInputEvent.prototype.inputType;\n\n/** @type {?DataTransfer} */\nInputEvent.prototype.dataTransfer;\n', -+"externs/w3c_event3.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s event Level 3 specification.\n * This file depends on w3c_event.js.\n * The whole file has been partially type annotated.\n * Created from\n * http://www.w3.org/TR/DOM-Level-3-Events/#ecma-script-binding-ecma-binding\n *\n * @externs\n * @author ericdingle@9oo91e.qjz9zk (Eric Dingle)\n */\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {string} keyIdentifierArg\n * @param {number} keyLocationArg\n * @param {string} modifiersList\n * @return {undefined}\n */\nKeyboardEvent.prototype.initKeyboardEvent = function(typeArg, canBubbleArg, cancelableArg, viewArg, keyIdentifierArg, keyLocationArg, modifiersList) {};\n\n/** @type {string} */\nKeyboardEvent.prototype.char;\n\n/** @type {string} */\nKeyboardEvent.prototype.code;\n\n/** @type {string} */\nKeyboardEvent.prototype.key;\n\n/** @type {number} */\nKeyboardEvent.prototype.location;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.repeat;\n\n/** @type {string} */\nKeyboardEvent.prototype.locale;\n\n/** @type {number} */\nMouseEvent.prototype.buttons;\n\n/**\n * @param {string} keyIdentifierArg\n * @return {boolean}\n */\nMouseEvent.prototype.getModifierState = function(keyIdentifierArg) {};\n\n/** @type {boolean} */\nEvent.prototype.defaultPrevented;\n\n/** @type {string} */\nEvent.prototype.namespaceURI;\n\n/** @return {undefined} */\nEvent.prototype.stopImmediatePropagation = function() {};\n', -+"externs/gecko_event.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over\n * W3C\'s event specification by Gecko. This file depends on\n * w3c_event.js.\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n */\n\n// TODO: Almost all of it has not been annotated with types.\n\n/** @const {number} */ Event.prototype.HORIZONTAL_AXIS;\n/** @const {number} */ Event.prototype.VERTICAL_AXIS;\n/** @type {boolean} */ Event.prototype.altKey;\n/** @type {number} */ Event.prototype.axis;\n/** @type {number} */ Event.prototype.button;\n/** @type {boolean} */ Event.prototype.cancelBubble;\n/** @type {number} */ Event.prototype.charCode;\n/** @type {number} */ Event.prototype.clientX;\n/** @type {number} */ Event.prototype.clientY;\n/** @type {boolean} */ Event.prototype.ctrlKey;\n/** @type {EventTarget} */ Event.prototype.explicitOriginalTarget;\n/** @type {boolean} */ Event.prototype.isChar;\n/** @type {boolean} */ Event.prototype.isTrusted;\n/** @type {number} */ Event.prototype.keyCode;\n/** @type {number} */ Event.prototype.layerX;\n/** @type {number} */ Event.prototype.layerY;\n/** @type {boolean} */ Event.prototype.metaKey;\n/** @type {EventTarget} */ Event.prototype.originalTarget;\n/** @type {number} */ Event.prototype.pageX;\n/** @type {number} */ Event.prototype.pageY;\n/** @type {EventTarget|undefined} */ Event.prototype.relatedTarget;\n/** @type {number} */ Event.prototype.screenX;\n/** @type {number} */ Event.prototype.screenY;\n/** @type {boolean} */ Event.prototype.shiftKey;\n/** @type {Window} */ Event.prototype.view;\n/** @type {number} */ Event.prototype.which;\n\n/** @constructor */ function nsIDOMPageTransitionEvent() {}\n/** @type {boolean} */ nsIDOMPageTransitionEvent.prototype.persisted;\n\n//Methods\nEvent.prototype.initKeyEvent;\n/**\n * @param {string} typeArg\n * @param {boolean=} canBubbleArg\n * @param {boolean=} cancelableArg\n * @param {?Window=} viewArg\n * @param {?number=} detailArg\n * @param {number=} screenXArg\n * @param {number=} screenYArg\n * @param {number=} clientXArg\n * @param {number=} clientYArg\n * @param {boolean=} ctrlKeyArg\n * @param {boolean=} altKeyArg\n * @param {boolean=} shiftKeyArg\n * @param {boolean=} metaKeyArg\n * @param {?number=} buttonArg\n * @param {?EventTarget=} relatedTargetArg\n */\nEvent.prototype.initMouseEvent = function(typeArg, canBubbleArg, cancelableArg, viewArg, detailArg, screenXArg, screenYArg, clientXArg, clientYArg, ctrlKeyArg, altKeyArg, shiftKeyArg, metaKeyArg, buttonArg, relatedTargetArg) {};\nEvent.prototype.initUIEvent;\nEvent.prototype.initMessageEvent;\nEvent.prototype.preventBubble;\nEvent.prototype.preventCapture;\n', -+"externs/ie_event.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over the\n * W3C\'s event specification by IE in JScript. This file depends on\n * w3c_event.js.\n *\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535863.aspx\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n */\n\n/** @type {string} */\nEvent.prototype.Abstract;\n\n/** @type {boolean} */\nEvent.prototype.altLeft;\n\n/** @type {string} */\nEvent.prototype.Banner;\n\n/**\n * A ClipboardData on IE, but a DataTransfer on WebKit.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535220.aspx\n * @type {(ClipboardData|undefined)}\n */\nEvent.prototype.clipboardData;\n\n/** @type {boolean} */\nEvent.prototype.contentOverflow;\n\n/** @type {boolean} */\nEvent.prototype.ctrlLeft;\n\n/** @type {string} */\nEvent.prototype.dataFld;\n\nEvent.prototype.domain;\n\n/** @type {Element} */\nEvent.prototype.fromElement;\n\n/** @type {string} */\nEvent.prototype.MoreInfo;\n\n/** @type {string} */\nEvent.prototype.nextPage;\n\n/** @type {number} */\nEvent.prototype.offsetX;\n\n/** @type {number} */\nEvent.prototype.offsetY;\n\n/** @type {string} */\nEvent.prototype.propertyName;\n\n/** @type {string} */\nEvent.prototype.qualifier;\n\n/** @type {number} */\nEvent.prototype.reason;\n\n/** @type {Object<*>} */\nEvent.prototype.recordset;\n\n/** @type {boolean} */\nEvent.prototype.repeat;\n\n/** @type {(boolean|string|undefined)} */\nEvent.prototype.returnValue;\n\n/** @type {string} */\nEvent.prototype.saveType;\n\nEvent.prototype.scheme;\n\n/** @type {boolean} */\nEvent.prototype.shiftLeft;\n\n/** @type {Window} */\nEvent.prototype.source;\n\n/** @type {Element} */\nEvent.prototype.srcElement;\n\nEvent.prototype.srcFilter;\n\n/** @type {string} */\nEvent.prototype.srcUrn;\n\n/** @type {Element} */\nEvent.prototype.toElement;\n\nEvent.prototype.userName;\n\n/** @type {number} */\nEvent.prototype.wheelDelta;\n\n/** @type {number} */\nEvent.prototype.x;\n\n/** @type {number} */\nEvent.prototype.y;\n\n/**\n * @constructor\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/windows/apps/hh441257.aspx\n */\nfunction MSPointerPoint() {}\n\n/** @type {number} */\nMSPointerPoint.prototype.pointerId;\n\n/** @type {number} */\nMSPointerPoint.prototype.pointerType;\n\n/**\n * @constructor\n * @extends {Event}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/windows/apps/hh441233.aspx\n */\nfunction MSPointerEvent() {}\n\n/** @const {number} */\nMSPointerEvent.MSPOINTER_TYPE_MOUSE;\n\n/** @const {number} */\nMSPointerEvent.MSPOINTER_TYPE_PEN;\n\n/** @const {number} */\nMSPointerEvent.MSPOINTER_TYPE_TOUCH;\n\n/** @type {number} */\nMSPointerEvent.prototype.height;\n\n/** @type {number} */\nMSPointerEvent.prototype.hwTimestamp;\n\n/** @type {boolean} */\nMSPointerEvent.prototype.isPrimary;\n\n/** @type {number} */\nMSPointerEvent.prototype.pointerId;\n\n/** @type {number} */\nMSPointerEvent.prototype.pointerType;\n\n/** @type {number} */\nMSPointerEvent.prototype.pressure;\n\n/** @type {number} */\nMSPointerEvent.prototype.rotation;\n\n/** @type {number} */\nMSPointerEvent.prototype.tiltX;\n\n/** @type {number} */\nMSPointerEvent.prototype.tiltY;\n\n/** @type {number} */\nMSPointerEvent.prototype.timeStamp;\n\n/** @type {number} */\nMSPointerEvent.prototype.width;\n\n/**\n * @param {number} pointerId\n * @return {undefined}\n */\nMSPointerEvent.prototype.msReleasePointerCapture;\n\n/**\n * @param {number} pointerId\n * @return {undefined}\n */\nMSPointerEvent.prototype.msSetPointerCapture;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {number} detailArg\n * @param {number} screenXArg\n * @param {number} screenYArg\n * @param {number} clientXArg\n * @param {number} clientYArg\n * @param {boolean} ctrlKeyArg\n * @param {boolean} altKeyArg\n * @param {boolean} shiftKeyArg\n * @param {boolean} metaKeyArg\n * @param {number} buttonArg\n * @param {Element} relatedTargetArg\n * @param {number} offsetXArg\n * @param {number} offsetYArg\n * @param {number} widthArg\n * @param {number} heightArg\n * @param {number} pressure\n * @param {number} rotation\n * @param {number} tiltX\n * @param {number} tiltY\n * @param {number} pointerIdArg\n * @param {number} pointerType\n * @param {number} hwTimestampArg\n * @param {boolean} isPrimary\n * @return {undefined}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/windows/apps/hh441246.aspx\n */\nMSPointerEvent.prototype.initPointerEvent;\n\n/**\n * @constructor\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/hh968249(v=vs.85).aspx\n */\nfunction MSGesture() {}\n\n/**\n * @type {Element}\n */\nMSGesture.prototype.target;\n\n/**\n * @param {number} pointerId\n * @return {undefined}\n */\nMSGesture.prototype.addPointer = function(pointerId) {};\n\nMSGesture.prototype.stop = function() {};\n\n/**\n * @constructor\n * @extends {Event}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/hh772076(v=vs.85).aspx\n */\nfunction MSGestureEvent() {}\n\n/** @type {number} */\nMSGestureEvent.prototype.expansion;\n\n/** @type {!MSGesture} */\nMSGestureEvent.prototype.gestureObject;\n\n/** @type {number} */\nMSGestureEvent.prototype.hwTimestamp;\n\n/** @type {number} */\nMSGestureEvent.prototype.rotation;\n\n/** @type {number} */\nMSGestureEvent.prototype.scale;\n\n/** @type {number} */\nMSGestureEvent.prototype.translationX;\n\n/** @type {number} */\nMSGestureEvent.prototype.translationY;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityAngular;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityExpansion;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityX;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityY;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {number} detailArg\n * @param {number} screenXArg\n * @param {number} screenYArg\n * @param {number} clientXArg\n * @param {number} clientYArg\n * @param {number} offsetXArg\n * @param {number} offsetYArg\n * @param {number} translationXArg\n * @param {number} translationYArg\n * @param {number} scaleArg\n * @param {number} expansionArg\n * @param {number} rotationArg\n * @param {number} velocityXArg\n * @param {number} velocityYArg\n * @param {number} velocityExpansionArg\n * @param {number} velocityAngularArg\n * @param {number} hwTimestampArg\n * @param {EventTarget} relatedTargetArg\n * @return {undefined}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/windows/apps/hh441187.aspx\n */\nMSGestureEvent.prototype.initGestureEvent;\n', -+"externs/webkit_event.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over W3C\'s\n * event specification by WebKit. This file depends on w3c_event.js.\n * All the provided definitions have been type annotated\n *\n * @externs\n * @author djlee@9oo91e.qjz9zk (DJ Lee)\n */\n\n/** @type {number} */\nEvent.prototype.wheelDeltaX;\n\n/** @type {number} */\nEvent.prototype.wheelDeltaY;\n\n/**\n * @constructor\n * @extends {Event}\n * @see http://developer.apple.com/library/safari/documentation/AudioVideo/Reference/WebKitAnimationEventClassReference/WebKitAnimationEvent/WebKitAnimationEvent.html\n */\nfunction WebKitAnimationEvent() {}\n\n/**\n * @const {string}\n */\nWebKitAnimationEvent.prototype.animationName;\n\n/**\n * @const {number}\n */\nWebKitAnimationEvent.prototype.elapsedTime;\n', -+"externs/w3c_device_sensor_event.js":'/*\n * Copyright 2013 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s device orientation and device motion\n * events specification.\n * This file depends on w3c_event.js.\n * The whole file has been partially type annotated.\n * Created from http://dev.w3.org/geo/api/spec-source-orientation.\n *\n * @externs\n * @author lukaszbk@9oo91e.qjz9zk (Lukasz Bieniasz-Krzywiec)\n */\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://w3c.github.io/deviceorientation/spec-source-orientation.html#deviceorientation\n */\nfunction DeviceOrientationEventInit() {}\n\n/** @type {number|undefined} */\nDeviceOrientationEventInit.prototype.alpha;\n\n/** @type {number|undefined} */\nDeviceOrientationEventInit.prototype.beta;\n\n/** @type {number|undefined} */\nDeviceOrientationEventInit.prototype.gamma;\n\n/** @type {boolean|undefined} */\nDeviceOrientationEventInit.prototype.absolute;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {!DeviceOrientationEventInit=} opt_eventInitDict\n */\nfunction DeviceOrientationEvent(type, opt_eventInitDict) {}\n\n/** @type {?number} */\nDeviceOrientationEvent.prototype.alpha;\n\n/** @type {?number} */\nDeviceOrientationEvent.prototype.beta;\n\n/** @type {?number} */\nDeviceOrientationEvent.prototype.gamma;\n\n/** @type {boolean} */\nDeviceOrientationEvent.prototype.absolute;\n\n/**\n * @type {?number}\n * @see https://developer.apple.com/library/safari/documentation/SafariDOMAdditions/Reference/DeviceOrientationEventClassRef/DeviceOrientationEvent/DeviceOrientationEvent.html#//apple_ref/javascript/instp/DeviceOrientationEvent/webkitCompassAccuracy\n */\nDeviceOrientationEvent.prototype.webkitCompassAccuracy;\n\n/**\n * @type {?number}\n * @see https://developer.apple.com/library/safari/documentation/SafariDOMAdditions/Reference/DeviceOrientationEventClassRef/DeviceOrientationEvent/DeviceOrientationEvent.html#//apple_ref/javascript/instp/DeviceOrientationEvent/webkitCompassHeading\n */\nDeviceOrientationEvent.prototype.webkitCompassHeading;\n\n/**\n * @constructor\n */\nfunction DeviceAcceleration() {}\n\n/** @type {?number} */\nDeviceAcceleration.prototype.x;\n\n/** @type {?number} */\nDeviceAcceleration.prototype.y;\n\n/** @type {?number} */\nDeviceAcceleration.prototype.z;\n\n/**\n * @constructor\n */\nfunction DeviceRotationRate() {}\n\n/** @type {?number} */\nDeviceRotationRate.prototype.alpha;\n\n/** @type {?number} */\nDeviceRotationRate.prototype.beta;\n\n/** @type {?number} */\nDeviceRotationRate.prototype.gamma;\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction DeviceMotionEvent() {}\n\n/** @type {?DeviceAcceleration} */\nDeviceMotionEvent.prototype.acceleration;\n\n/** @type {?DeviceAcceleration} */\nDeviceMotionEvent.prototype.accelerationIncludingGravity;\n\n/** @type {?DeviceRotationRate} */\nDeviceMotionEvent.prototype.rotationRate;\n\n/** @type {?number} */\nDeviceMotionEvent.prototype.interval;\n', - "externs/web_app_manifest.js":"/*\n * Copyright 2017 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Externs for web app manifest APIs.\n *\n * @see https://www.w3.org/TR/appmanifest/\n * @externs\n */\n\n/**\n * @see https://www.w3.org/TR/appmanifest/#beforeinstallpromptevent-interface\n * @constructor\n * @extends {Event}\n */\nfunction BeforeInstallPromptEvent() {}\n\n/** @type {!Promise<{outcome: !AppBannerPromptOutcome}>} */\nBeforeInstallPromptEvent.prototype.userChoice;\n\n/** @return {!Promise} */\nBeforeInstallPromptEvent.prototype.prompt = function() {};\n\n/**\n * @typedef {string}\n * @see https://www.w3.org/TR/appmanifest/#appbannerpromptoutcome-enum\n * Possible values: 'accepted', 'dismissed'\n */\nvar AppBannerPromptOutcome;\n\n/** @typedef {{userChoice: !AppBannerPromptOutcome}} */\nvar PromptResponseObject;\n\n/** @type {?function(!BeforeInstallPromptEvent)} */\nWindow.prototype.onbeforeinstallprompt;\n\n/** @type {?function(!Event)} */\nWindow.prototype.onappinstalled;\n", - "externs/w3c_selection.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Selection API.\n *\n * @see https://w3c.github.io/selection-api/\n *\n * @externs\n */\n\n/**\n * @constructor\n * @see http://w3c.github.io/selection-api/#selection-interface\n */\nfunction Selection() {}\n\n/**\n * @type {?Node}\n * @see https://w3c.github.io/selection-api/#dom-selection-anchornode\n */\nSelection.prototype.anchorNode;\n\n/**\n * @type {number}\n * @see https://w3c.github.io/selection-api/#dom-selection-anchoroffset\n */\nSelection.prototype.anchorOffset;\n\n/**\n * @type {?Node}\n * @see https://w3c.github.io/selection-api/#dom-selection-focusnode\n */\nSelection.prototype.focusNode;\n\n/**\n * @type {number}\n * @see https://w3c.github.io/selection-api/#dom-selection-focusoffset\n */\nSelection.prototype.focusOffset;\n\n/**\n * @type {boolean}\n * @see https://w3c.github.io/selection-api/#dom-selection-iscollapsed\n */\nSelection.prototype.isCollapsed;\n\n/**\n * @type {number}\n * @see https://w3c.github.io/selection-api/#dom-selection-rangecount\n */\nSelection.prototype.rangeCount;\n\n/**\n * @type {string}\n * @see https://w3c.github.io/selection-api/#dom-selection-type\n */\nSelection.prototype.type;\n\n/**\n * @param {number} index\n * @return {!Range}\n * @nosideeffects\n * @see https://w3c.github.io/selection-api/#dom-selection-getrangeat\n */\nSelection.prototype.getRangeAt = function(index) {};\n\n/**\n * TODO(tjgq): Clean up internal usages and make the `range` parameter a\n * `!Range` per the spec.\n * @param {?Range} range\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-addrange\n */\nSelection.prototype.addRange = function(range) {};\n\n/**\n * @param {!Range} range\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-removerange\n */\nSelection.prototype.removeRange = function(range) {};\n\n/**\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-removeallranges\n */\nSelection.prototype.removeAllRanges = function() {};\n\n/**\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-empty\n */\nSelection.prototype.empty = function() {};\n\n/**\n * @param {?Node} node\n * @param {number=} offset\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-collapse\n */\nSelection.prototype.collapse = function(node, offset) {};\n\n/**\n * @param {?Node} node\n * @param {number=} offset\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-setposition\n */\nSelection.prototype.setPosition = function(node, offset) {};\n\n/**\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-collapsetostart\n */\nSelection.prototype.collapseToStart = function() {};\n\n/**\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-collapsetoend\n */\nSelection.prototype.collapseToEnd = function() {};\n\n/**\n * TODO(tjgq): Clean up internal usages and make the `node` parameter a `!Node`\n * per the spec.\n * @param {?Node} node\n * @param {number=} offset\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-extend\n */\nSelection.prototype.extend = function(node, offset) {};\n\n/**\n * TODO(tjgq): Clean up internal usages and make the `anchorNode` and\n * `focusNode` parameters `!Node` per the spec.\n * @param {?Node} anchorNode\n * @param {number} anchorOffset\n * @param {?Node} focusNode\n * @param {number} focusOffset\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-setbaseandextent\n */\nSelection.prototype.setBaseAndExtent = function(anchorNode, anchorOffset, focusNode, focusOffset) {};\n\n/**\n * TODO(tjgq): Clean up internal usages and make the `node` parameter a `!Node`\n * per the spec.\n * @param {?Node} node\n * @return {undefined}\n * @see http://w3c.github.io/selection-api/#dom-selection-selectallchildren\n */\nSelection.prototype.selectAllChildren = function(node) {};\n\n/**\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-deletefromdocument\n */\nSelection.prototype.deleteFromDocument = function() {};\n\n/**\n * @param {!Node} node\n * @param {boolean=} allowPartialContainment\n * @return {boolean}\n * @nosideeffects\n * @see https://w3c.github.io/selection-api/#dom-selection-containsnode\n */\nSelection.prototype.containsNode = function(node, allowPartialContainment) {};\n\n/**\n * @return {?Selection}\n * @nosideeffects\n * @see https://w3c.github.io/selection-api/#dom-window-getselection\n */\nWindow.prototype.getSelection = function() {};\n\n/**\n * @return {?Selection}\n * @nosideeffects\n * @see https://w3c.github.io/selection-api/#dom-document-getselection\n */\nDocument.prototype.getSelection = function() {};\n\n/**\n * TODO(tjgq): Clean up internal usages and make this `?function(!Event): void`\n * per the spec.\n * @type {?function(?Event)}\n * @see https://w3c.github.io/selection-api/#dom-globaleventhandlers-onselectstart\n */\nElement.prototype.onselectstart;\n\n/**\n * @type {?function(!Event): void}\n * @see https://w3c.github.io/selection-api/#dom-globaleventhandlers-onselectionchange\n */\nElement.prototype.onselectionchange;\n', --"externs/nonstandard_selection.js":'/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Nonstandard enhancements to W3C\'s Selection API.\n *\n * @externs\n */\n\n// The following were sources from the webkit externs.\n\n/** @type {?Node} */\nSelection.prototype.baseNode;\n\n/** @type {number} */\nSelection.prototype.baseOffset;\n\n/** @type {?Node} */\nSelection.prototype.extentNode;\n\n/** @type {number} */\nSelection.prototype.extentOffset;\n\n/**\n * @param {string} alter\n * @param {string} direction\n * @param {string} granularity\n * @return {undefined}\n */\nSelection.prototype.modify = function(alter, direction, granularity) {};\n\n\n// The following were sources from the gecko externs.\n\n\n/**\n * @see https://developer.mozilla.org/en/DOM/Selection/selectionLanguageChange\n */\nSelection.prototype.selectionLanguageChange;\n\n\n// The following were sources from the ie externs.\n\n\n/**\n * @type {?Selection}\n * @see http://msdn.microsoft.com/en-us/library/ms535869(VS.85).aspx\n */\nDocument.prototype.selection;\n\n/**\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/ms536418(VS.85).aspx\n */\nSelection.prototype.clear = function() {};\n\n/**\n * @return {?TextRange|?ControlRange}\n * @see http://msdn.microsoft.com/en-us/library/ms536394(VS.85).aspx\n */\nSelection.prototype.createRange = function() {};\n\n/**\n * @return {?Array}\n * @see http://msdn.microsoft.com/en-us/library/ms536396(VS.85).aspx\n */\nSelection.prototype.createRangeCollection = function() {};\n', -+"externs/nonstandard_selection.js":'/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Nonstandard enhancements to W3C\'s Selection API.\n *\n * @externs\n */\n\n// The following were sources from the webkit externs.\n\n/** @type {?Node} */\nSelection.prototype.baseNode;\n\n/** @type {number} */\nSelection.prototype.baseOffset;\n\n/** @type {?Node} */\nSelection.prototype.extentNode;\n\n/** @type {number} */\nSelection.prototype.extentOffset;\n\n/**\n * @param {string} alter\n * @param {string} direction\n * @param {string} granularity\n * @return {undefined}\n */\nSelection.prototype.modify = function(alter, direction, granularity) {};\n\n\n// The following were sources from the gecko externs.\n\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/Selection/selectionLanguageChange\n */\nSelection.prototype.selectionLanguageChange;\n\n\n// The following were sources from the ie externs.\n\n\n/**\n * @type {?Selection}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535869(VS.85).aspx\n */\nDocument.prototype.selection;\n\n/**\n * @return {undefined}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536418(VS.85).aspx\n */\nSelection.prototype.clear = function() {};\n\n/**\n * @return {?TextRange|?ControlRange}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536394(VS.85).aspx\n */\nSelection.prototype.createRange = function() {};\n\n/**\n * @return {?Array}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536396(VS.85).aspx\n */\nSelection.prototype.createRangeCollection = function() {};\n', - "externs/w3c_trusted_types.js":'/*\n * Copyright 2018 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Trusted Types specification.\n * @see https://github.com/WICG/trusted-types\n * @externs\n */\n\n\n/** @constructor */\nfunction TrustedHTML() {}\n\n/** @constructor */\nfunction TrustedScript() {}\n\n/** @constructor */\nfunction TrustedScriptURL() {}\n\n/** @constructor */\nfunction TrustedURL() {}\n\n\n/** @constructor */\nfunction TrustedTypePolicy() {}\n\n/**\n * @param {string} s\n * @return {!TrustedHTML}\n */\nTrustedTypePolicy.prototype.createHTML = function(s) {};\n\n/**\n * @param {string} s\n * @return {!TrustedScript}\n */\nTrustedTypePolicy.prototype.createScript = function(s) {};\n\n/**\n * @param {string} s\n * @return {!TrustedScriptURL}\n */\nTrustedTypePolicy.prototype.createScriptURL = function(s) {};\n\n/**\n * @param {string} s\n * @return {!TrustedURL}\n */\nTrustedTypePolicy.prototype.createURL = function(s) {};\n\n\n/** @constructor */\nfunction TrustedTypePolicyFactory() {}\n\n/** @record @private */\nfunction TrustedTypePolicyOptions() {};\n\n/**\n * @type {(function(string, ...*): string)|undefined},\n */\nTrustedTypePolicyOptions.prototype.createHTML;\n\n/**\n * @type {(function(string, ...*): string)|undefined},\n */\nTrustedTypePolicyOptions.prototype.createScript;\n\n/**\n * @type {(function(string, ...*): string)|undefined},\n */\nTrustedTypePolicyOptions.prototype.createScriptURL;\n\n/**\n * @type {(function(string, ...*): string)|undefined},\n */\nTrustedTypePolicyOptions.prototype.createURL;\n\n/**\n * @param {string} name\n * @param {!TrustedTypePolicyOptions} policy\n * @param {boolean=} opt_expose\n * @return {!TrustedTypePolicy}\n */\nTrustedTypePolicyFactory.prototype.createPolicy = function(\n name, policy, opt_expose) {};\n\n/**\n * @param {string} name\n * @return {!TrustedTypePolicy}\n * @deprecated\n */\nTrustedTypePolicyFactory.prototype.getExposedPolicy = function(name) {};\n\n/** @return {!Array} */\nTrustedTypePolicyFactory.prototype.getPolicyNames = function() {};\n\n/**\n * @param {*} obj\n * @return {boolean}\n */\nTrustedTypePolicyFactory.prototype.isHTML = function(obj) {};\n\n/**\n * @param {*} obj\n * @return {boolean}\n */\nTrustedTypePolicyFactory.prototype.isScript = function(obj) {};\n\n/**\n * @param {*} obj\n * @return {boolean}\n */\nTrustedTypePolicyFactory.prototype.isScriptURL = function(obj) {};\n\n/**\n * @param {*} obj\n * @return {boolean}\n * @deprecated\n */\nTrustedTypePolicyFactory.prototype.isURL = function(obj) {};\n\n/** @type {!TrustedHTML} */\nTrustedTypePolicyFactory.prototype.emptyHTML;\n\n/**\n * @type {!TrustedTypePolicyFactory}\n * @deprecated\n */\nvar TrustedTypes;\n\n/** @type {!TrustedTypePolicyFactory} */\nvar trustedTypes;\n', --"externs/w3c_dom1.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's DOM Level 1 specification.\n * The whole file has been fully type annotated. Created from\n * http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n * @author stevey@google.com (Steve Yegge)\n */\n\n/**\n * @constructor\n * @param {string=} message\n * @param {string=} name\n * @see https://heycam.github.io/webidl/#idl-DOMException\n */\nfunction DOMException(message, name) {}\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.INDEX_SIZE_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.DOMSTRING_SIZE_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.HIERARCHY_REQUEST_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.WRONG_DOCUMENT_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.INVALID_CHARACTER_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NO_DATA_ALLOWED_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NO_MODIFICATION_ALLOWED_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NOT_FOUND_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NOT_SUPPORTED_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.INUSE_ATTRIBUTE_ERR;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nfunction ExceptionCode() {}\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-102161490\n */\nfunction DOMImplementation() {}\n\n/**\n * @param {string} feature\n * @param {string} version\n * @return {boolean}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-5CED94D7\n * @nosideeffects\n */\nDOMImplementation.prototype.hasFeature = function(feature, version) {};\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nfunction Node() {}\n\n/** @override */\nNode.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nNode.prototype.removeEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nNode.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {NamedNodeMap}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-attributes\n */\nNode.prototype.attributes;\n\n/**\n * @type {!NodeList}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-childNodes\n */\nNode.prototype.childNodes;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-firstChild\n */\nNode.prototype.firstChild;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-lastChild\n */\nNode.prototype.lastChild;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nextSibling\n */\nNode.prototype.nextSibling;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nodeName\n */\nNode.prototype.nodeName;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nodeValue\n */\nNode.prototype.nodeValue;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nodeType\n */\nNode.prototype.nodeType;\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-ownerDocument\n */\nNode.prototype.ownerDocument;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-parentNode\n */\nNode.prototype.parentNode;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-previousSibling\n */\nNode.prototype.previousSibling;\n\n/**\n * @param {Node} newChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-appendChild\n */\nNode.prototype.appendChild = function(newChild) {};\n\n/**\n * @param {boolean} deep\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-cloneNode\n * @nosideeffects\n */\nNode.prototype.cloneNode = function(deep) {};\n\n/**\n * @return {boolean}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-hasChildNodes\n * @nosideeffects\n */\nNode.prototype.hasChildNodes = function() {};\n\n/**\n * @param {Node} newChild\n * @param {Node} refChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-insertBefore\n */\nNode.prototype.insertBefore = function(newChild, refChild) {};\n\n/**\n * @param {Node} oldChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-removeChild\n */\nNode.prototype.removeChild = function(oldChild) {};\n\n/**\n * @param {Node} newChild\n * @param {Node} oldChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-replaceChild\n */\nNode.prototype.replaceChild = function(newChild, oldChild) {};\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ATTRIBUTE_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.CDATA_SECTION_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.COMMENT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.DOCUMENT_FRAGMENT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.DOCUMENT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.DOCUMENT_TYPE_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ELEMENT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ENTITY_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ENTITY_REFERENCE_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.PROCESSING_INSTRUCTION_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.TEXT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.NOTATION_NODE;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-B63ED1A3\n */\nfunction DocumentFragment() {}\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#i-Document\n */\nfunction Document() {}\n\n/**\n * @type {DocumentType}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-doctype\n */\nDocument.prototype.doctype;\n\n/**\n * @type {!HTMLHtmlElement}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-documentElement\n */\nDocument.prototype.documentElement;\n\n/**\n * @type {DOMImplementation}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-implementation\n */\nDocument.prototype.implementation;\n\n/**\n * @param {string} name\n * @return {!Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createAttribute\n * @nosideeffects\n */\nDocument.prototype.createAttribute = function(name) {};\n\n/**\n * @param {string} data\n * @return {!Comment}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createComment\n * @nosideeffects\n */\nDocument.prototype.createComment = function(data) {};\n\n/**\n * @param {string} data\n * @return {!CDATASection}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createCDATASection\n * @nosideeffects\n */\nDocument.prototype.createCDATASection = function(data) {};\n\n/**\n * @return {!DocumentFragment}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createDocumentFragment\n * @nosideeffects\n */\nDocument.prototype.createDocumentFragment = function() {};\n\n/**\n * Create a DOM element.\n *\n * Web components introduced the second parameter as a way of extending existing\n * tags (e.g. document.createElement('button', 'fancy-button')).\n *\n * @param {string} tagName\n * @param {string=} opt_typeExtension\n * @return {!Element}\n * @nosideeffects\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createElement\n * @see http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-instantiate\n */\nDocument.prototype.createElement = function(tagName, opt_typeExtension) {};\n\n/**\n * @param {string} target\n * @param {string} data\n * @return {!ProcessingInstruction}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createProcessingInstruction\n * @nosideeffects\n */\nDocument.prototype.createProcessingInstruction = function(target, data) {};\n\n/**\n * @param {number|string} data\n * @return {!Text}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createTextNode\n * @nosideeffects\n */\nDocument.prototype.createTextNode = function(data) {};\n\n/**\n * @param {string} tagname\n * @return {!NodeList}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-A6C9094\n * @nosideeffects\n */\nDocument.prototype.getElementsByTagName = function(tagname) {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/open\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-open\n */\nDocument.prototype.open;\n\n/**\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-close\n */\nDocument.prototype.close = function() {};\n\n/**\n * @param {!TrustedHTML|string} text\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-write\n */\nDocument.prototype.write = function(text) {};\n\n/**\n * @param {!TrustedHTML|string} text\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-writeln\n */\nDocument.prototype.writeln = function(text) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @template T\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-536297177\n */\nfunction NodeList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-203510337\n */\nNodeList.prototype.length;\n\n/**\n * @param {number} index\n * @return {T|null}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-844377136\n */\nNodeList.prototype.item = function(index) {};\n\n/**\n * @param {?function(this:S, T, number, !NodeList): ?} callback\n * @param {S=} opt_thisobj\n * @template S\n * @return {undefined}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/NodeList/forEach\n */\nNodeList.prototype.forEach = function(callback, opt_thisobj) {};\n\n/**\n * @constructor\n * @implements {IObject<(string|number), T>}\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @template T\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1780488922\n */\nfunction NamedNodeMap() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-6D0FB19E\n */\nNamedNodeMap.prototype.length;\n\n/**\n * @param {string} name\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1074577549\n * @nosideeffects\n */\nNamedNodeMap.prototype.getNamedItem = function(name) {};\n\n/**\n * @param {number} index\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-349467F9\n * @nosideeffects\n */\nNamedNodeMap.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-D58B193\n */\nNamedNodeMap.prototype.removeNamedItem = function(name) {};\n\n/**\n * @param {Node} arg\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1025163788\n */\nNamedNodeMap.prototype.setNamedItem = function(arg) {};\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-FF21A306\n */\nfunction CharacterData() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-72AB8359\n */\nCharacterData.prototype.data;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-7D61178C\n */\nCharacterData.prototype.length;\n\n/**\n * @param {string} arg\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-32791A2F\n */\nCharacterData.prototype.appendData = function(arg) {};\n\n/**\n * @param {number} offset\n * @param {number} count\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-7C603781\n */\nCharacterData.prototype.deleteData = function(offset, count) {};\n\n/**\n * @param {number} offset\n * @param {string} arg\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-3EDB695F\n */\nCharacterData.prototype.insertData = function(offset, arg) {};\n\n/**\n * @param {number} offset\n * @param {number} count\n * @param {string} arg\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-E5CBA7FB\n */\nCharacterData.prototype.replaceData = function(offset, count, arg) {};\n\n/**\n * @param {number} offset\n * @param {number} count\n * @return {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-6531BCCF\n * @nosideeffects\n */\nCharacterData.prototype.substringData = function(offset, count) {};\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-637646024\n */\nfunction Attr() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1112119403\n */\nAttr.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-862529273\n */\nAttr.prototype.specified;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-221662474\n */\nAttr.prototype.value;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-745549614\n */\nfunction Element() {}\n\n/**\n * @type {string}\n * @implicitCast\n * @see https://dom.spec.whatwg.org/index.html#dom-element-id\n */\nElement.prototype.id;\n\n/**\n * An Element always contains a non-null NamedNodeMap containing the attributes\n * of this node.\n * @type {!NamedNodeMap}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-attributes\n */\nElement.prototype.attributes;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-tagName\n */\nElement.prototype.tagName;\n\n/**\n * @implicitCast\n * @type {?}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/className\n * We type it as ? even though it is a string, because some SVG elements have\n * className that is an object, which isn't a subtype of string.\n * Alternative: TypeScript types this as string and types className on\n * SVGElement as ?.\n */\nElement.prototype.className;\n\n/**\n * @param {string} name\n * @param {?number=} flags\n * @return {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-getAttribute\n * @see http://msdn.microsoft.com/en-us/library/ms536429(VS.85).aspx\n * @nosideeffects\n */\nElement.prototype.getAttribute = function(name, flags) {};\n\n/**\n * @param {string} name\n * @return {Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-getAttributeNode\n * @nosideeffects\n */\nElement.prototype.getAttributeNode = function(name) {};\n\n/**\n * @param {string} tagname\n * @return {!NodeList}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1938918D\n * @nosideeffects\n */\nElement.prototype.getElementsByTagName = function(tagname) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-removeAttribute\n */\nElement.prototype.removeAttribute = function(name) {};\n\n/**\n * @param {Attr} oldAttr\n * @return {?Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-removeAttributeNode\n */\nElement.prototype.removeAttributeNode = function(oldAttr) {};\n\n/**\n * @param {string} name\n * @param {string|number|boolean|!TrustedHTML|!TrustedScriptURL|!TrustedURL}\n * value Values are converted to strings with ToString, so we accept number\n * and boolean since both convert easily to strings.\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-setAttribute\n */\nElement.prototype.setAttribute = function(name, value) {};\n\n/**\n * @param {Attr} newAttr\n * @return {?Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-setAttributeNode\n */\nElement.prototype.setAttributeNode = function(newAttr) {};\n\n// Event handlers\n// The DOM level 3 spec has a good index of these\n// http://www.w3.org/TR/DOM-Level-3-Events/#event-types\n\n/** @type {?function (Event)} */ Element.prototype.onabort;\n/** @type {?function (Event)} */ Element.prototype.onbeforeinput;\n/** @type {?function (Event)} */ Element.prototype.onbeforeunload;\n/** @type {?function (Event)} */ Element.prototype.onblur;\n/** @type {?function (Event)} */ Element.prototype.onchange;\n/** @type {?function (Event)} */ Element.prototype.onclick;\n/** @type {?function (Event)} */ Element.prototype.oncompositionstart;\n/** @type {?function (Event)} */ Element.prototype.oncompositionupdate;\n/** @type {?function (Event)} */ Element.prototype.oncompositionend;\n/** @type {?function (Event)} */ Element.prototype.oncontextmenu;\n/** @type {?function (Event)} */ Element.prototype.oncopy;\n/** @type {?function (Event)} */ Element.prototype.oncut;\n/** @type {?function (Event)} */ Element.prototype.ondblclick;\n/** @type {?function (Event)} */ Element.prototype.onerror;\n/** @type {?function (Event)} */ Element.prototype.onfocus;\n/** @type {?function (Event)} */ Element.prototype.onfocusin;\n/** @type {?function (Event)} */ Element.prototype.onfocusout;\n/** @type {?function (Event)} */ Element.prototype.oninput;\n/** @type {?function (Event)} */ Element.prototype.onkeydown;\n/** @type {?function (Event)} */ Element.prototype.onkeypress;\n/** @type {?function (Event)} */ Element.prototype.onkeyup;\n/** @type {?function (Event): void} */ Element.prototype.onload;\n/** @type {?function (Event): void} */ Element.prototype.onunload;\n/** @type {?function (Event)} */ Element.prototype.onmousedown;\n/** @type {?function (Event)} */ Element.prototype.onmousemove;\n/** @type {?function (Event)} */ Element.prototype.onmouseout;\n/** @type {?function (Event)} */ Element.prototype.onmouseover;\n/** @type {?function (Event)} */ Element.prototype.onmouseup;\n/** @type {?function (Event)} */ Element.prototype.onmousewheel;\n/** @type {?function (Event)} */ Element.prototype.onpaste;\n/** @type {?function (Event)} */ Element.prototype.onreset;\n/** @type {?function (Event)} */ Element.prototype.onresize;\n/** @type {?function (Event)} */ Element.prototype.onscroll;\n/** @type {?function (Event)} */ Element.prototype.onselect;\n/** @type {?function (Event=)} */ Element.prototype.onsubmit;\n/** @type {?function (Event)} */ Element.prototype.ontextinput;\n/** @type {?function (Event)} */ Element.prototype.onwheel;\n\n/**\n * @constructor\n * @extends {CharacterData}\n * @param {string=} contents Optional textual content.\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1312295772\n */\nfunction Text(contents) {}\n\n/**\n * @param {number} offset\n * @return {Text}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-38853C1D\n */\nText.prototype.splitText = function(offset) {};\n\n/**\n * @constructor\n * @extends {CharacterData}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1728279322\n */\nfunction Comment() {}\n\n/**\n * @constructor\n * @extends {Text}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-667469212\n */\nfunction CDATASection() {}\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-412266927\n */\nfunction DocumentType() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1844763134\n */\nDocumentType.prototype.name;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1004215813\n */\nfunction ProcessingInstruction() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-837822393\n */\nProcessingInstruction.prototype.data;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1478689192\n */\nProcessingInstruction.prototype.target;\n\n\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction Window() {}\nWindow.prototype.Window;\n\n/** @override */\nWindow.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWindow.prototype.removeEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWindow.prototype.dispatchEvent = function(evt) {};\n\n/** @type {?function (Event)} */ Window.prototype.onabort;\n/** @type {?function (Event)} */ Window.prototype.onbeforeunload;\n/** @type {?function (Event)} */ Window.prototype.onblur;\n/** @type {?function (Event)} */ Window.prototype.onchange;\n/** @type {?function (Event)} */ Window.prototype.onclick;\n/** @type {?function (Event)} */ Window.prototype.onclose;\n/** @type {?function (Event)} */ Window.prototype.oncontextmenu;\n/** @type {?function (Event)} */ Window.prototype.ondblclick;\n/** @type {?function (Event)} */ Window.prototype.ondragdrop;\n// onerror has a special signature.\n// See\n// https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror\n/**\n * @type {?function (string, string, number, number, !Error):?}\n */\nWindow.prototype.onerror;\n/** @type {?function (Event)} */ Window.prototype.onfocus;\n/** @type {?function (Event)} */ Window.prototype.onhashchange;\n/** @type {?function (Event)} */ Window.prototype.onkeydown;\n/** @type {?function (Event)} */ Window.prototype.onkeypress;\n/** @type {?function (Event)} */ Window.prototype.onkeyup;\n/** @type {?function (Event)} */ Window.prototype.onload;\n/** @type {?function (Event)} */ Window.prototype.onmousedown;\n/** @type {?function (Event)} */ Window.prototype.onmousemove;\n/** @type {?function (Event)} */ Window.prototype.onmouseout;\n/** @type {?function (Event)} */ Window.prototype.onmouseover;\n/** @type {?function (Event)} */ Window.prototype.onmouseup;\n/** @type {?function (Event)} */ Window.prototype.onmousewheel;\n/** @type {?function (Event)} */ Window.prototype.onpaint;\n/** @type {?function (Event)} */ Window.prototype.onpopstate;\n/** @type {?function (Event)} */ Window.prototype.onreset;\n/** @type {?function (Event)} */ Window.prototype.onresize;\n/** @type {?function (Event)} */ Window.prototype.onscroll;\n/** @type {?function (Event)} */ Window.prototype.onselect;\n/** @type {?function (Event=)} */ Window.prototype.onsubmit;\n/** @type {?function (Event)} */ Window.prototype.onunhandledrejection;\n/** @type {?function (Event)} */ Window.prototype.onunload;\n/** @type {?function (Event)} */ Window.prototype.onwheel;\n", --"externs/w3c_dom2.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s DOM Level 2 specification.\n * This file depends on w3c_dom1.js.\n * The whole file has been fully type annotated.\n * Created from\n * http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n *\n * @externs\n */\n\n/**\n * @param {string} s id.\n * @return {Element}\n * @nosideeffects\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-getElBId\n */\nDocument.prototype.getElementById = function(s) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} qualifiedName\n * @param {string=} opt_typeExtension\n * @return {!Element}\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-DocCrElNS\n */\nDocument.prototype.createElementNS =\n function(namespaceURI, qualifiedName, opt_typeExtension) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} qualifiedName\n * @return {!Attr}\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-DocCrElNS\n */\nDocument.prototype.createAttributeNS =\n function(namespaceURI, qualifiedName) {};\n\n/**\n * @param {Node} root\n * @param {number=} whatToShow\n * @param {NodeFilter=} filter\n * @param {boolean=} entityReferenceExpansion\n * @return {!NodeIterator}\n * @see https://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/traversal.html#Traversal-Document\n * @see https://dom.spec.whatwg.org/#interface-document\n * @nosideeffects\n */\nDocument.prototype.createNodeIterator = function(\n root, whatToShow, filter, entityReferenceExpansion) {};\n\n/**\n * @param {Node} root\n * @param {number=} whatToShow\n * @param {NodeFilter=} filter\n * @param {boolean=} entityReferenceExpansion\n * @return {!TreeWalker}\n * @see https://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/traversal.html#Traversal-Document\n * @see https://dom.spec.whatwg.org/#interface-document\n * @nosideeffects\n */\nDocument.prototype.createTreeWalker = function(\n root, whatToShow, filter, entityReferenceExpansion) {};\n\n/**\n * @param {string} namespace\n * @param {string} name\n * @return {!NodeList}\n * @nosideeffects\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-getElBTNNS\n */\nDocument.prototype.getElementsByTagNameNS = function(namespace, name) {};\n\n/**\n * @param {!Node} externalNode\n * @param {boolean=} deep\n * @return {!Node}\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#Core-Document-importNode\n */\nDocument.prototype.importNode = function(externalNode, deep) {};\n\n/**\n * @constructor\n * @implements {IObject<(string|number),T>}\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @template T\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75708506\n */\nfunction HTMLCollection() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40057551\n */\nHTMLCollection.prototype.length;\n\n/**\n * @param {number} index\n * @return {T|null}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33262535\n * @nosideeffects\n */\nHTMLCollection.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @return {T|null}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-21069976\n * @nosideeffects\n */\nHTMLCollection.prototype.namedItem = function(name) {};\n\n/**\n * @constructor\n * @extends {HTMLCollection}\n * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#htmloptionscollection\n */\nfunction HTMLOptionsCollection() {}\n\n/**\n * @type {number}\n * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#dom-htmloptionscollection-length\n * @nosideeffects\n */\nHTMLOptionsCollection.prototype.length;\n\n/**\n * @param {HTMLOptionElement|HTMLOptGroupElement} element\n * @param {HTMLElement|number=} before\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#dom-htmloptionscollection-add\n */\nHTMLOptionsCollection.prototype.add = function(element, before) {};\n\n/**\n * NOTE(tjgq): The HTMLOptionsCollection#item method is inherited from\n * HTMLCollection, but it must be declared explicitly to work around an error\n * when building a jsinterop library for GWT.\n * @param {number} index\n * @return {HTMLOptionElement}\n * @override\n * @nosideeffects\n */\nHTMLOptionsCollection.prototype.item = function(index) {};\n\n/**\n * @param {number} index\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#dom-htmloptionscollection-remove\n */\nHTMLOptionsCollection.prototype.remove = function(index) {};\n\n/**\n * @constructor\n * @extends {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26809268\n */\nfunction HTMLDocument() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18446827\n */\nHTMLDocument.prototype.title;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95229140\n */\nHTMLDocument.prototype.referrer;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-2250147\n */\nHTMLDocument.prototype.domain;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46183437\n */\nHTMLDocument.prototype.URL;\n\n/**\n * @type {!HTMLBodyElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-56360201\n */\nHTMLDocument.prototype.body;\n\n/**\n * @type {!HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90379117\n */\nHTMLDocument.prototype.images;\n\n/**\n * @type {!HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85113862\n */\nHTMLDocument.prototype.applets;\n\n/**\n * @type {!HTMLCollection<(!HTMLAnchorElement|!HTMLAreaElement)>}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7068919\n */\nHTMLDocument.prototype.links;\n\n/**\n * @type {!HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-1689064\n */\nHTMLDocument.prototype.forms;\n\n/**\n * @type {!HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7577272\n */\nHTMLDocument.prototype.anchors;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8747038\n */\nHTMLDocument.prototype.cookie;\n\n/**\n * @param {string=} opt_mimeType\n * @param {string=} opt_replace\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-72161170\n * Even though official spec says "no parameters" some old browsers might take\n * optional parameters: https://msdn.microsoft.com/en-us/library/ms536652(v=vs.85).aspx\n * @override\n */\nHTMLDocument.prototype.open = function(opt_mimeType, opt_replace) {};\n\n/**\n * @param {string} elementName\n * @return {!NodeList}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71555259\n * @nosideeffects\n */\nHTMLDocument.prototype.getElementsByName = function(elementName) {};\n\n\n/** @typedef {{\n createNodeIterator: function(Node, number=, NodeFilter=, boolean=) : NodeIterator,\n createTreeWalker: function(Node, number=, NodeFilter=, boolean=) : TreeWalker\n}} */\nvar TraversalDocument;\n\n/**\n * @record\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeFilter\n*/\nfunction NodeFilter() {}\n\n/* Constants for whatToShow */\n/** @const {number} */ NodeFilter.SHOW_ALL;\n/** @const {number} */ NodeFilter.SHOW_ATTRIBUTE;\n/** @const {number} */ NodeFilter.SHOW_CDATA_SECTION;\n/** @const {number} */ NodeFilter.SHOW_COMMENT;\n/** @const {number} */ NodeFilter.SHOW_DOCUMENT;\n/** @const {number} */ NodeFilter.SHOW_DOCUMENT_FRAGMENT;\n/** @const {number} */ NodeFilter.SHOW_DOCUMENT_TYPE;\n/** @const {number} */ NodeFilter.SHOW_ELEMENT;\n/** @const {number} */ NodeFilter.SHOW_ENTITY;\n/** @const {number} */ NodeFilter.SHOW_ENTITY_REFERENCE;\n/** @const {number} */ NodeFilter.SHOW_NOTATION;\n/** @const {number} */ NodeFilter.SHOW_PROCESSING_INSTRUCTION;\n/** @const {number} */ NodeFilter.SHOW_TEXT;\n\n/* Consants for acceptNode */\n/** @const {number} */ NodeFilter.FILTER_ACCEPT;\n/** @const {number} */ NodeFilter.FILTER_REJECT;\n/** @const {number} */ NodeFilter.FILTER_SKIP;\n\n/**\n * @param {Node} n\n * @return {number} Any of NodeFilter.FILTER_* constants.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeFilter-acceptNode\n*/\nNodeFilter.prototype.acceptNode = function(n) {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator\n*/\nfunction NodeIterator() {}\n\n/**\n * Detach and invalidate the NodeIterator.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator-detach\n * @return {undefined}\n */\nNodeIterator.prototype.detach = function() {};\n\n/**\n * @return {Node} Next node in the set.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator-nextNode\n */\nNodeIterator.prototype.nextNode = function() {};\n\n/**\n * @return {Node} Previous node in the set.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator-previousNode\n */\nNodeIterator.prototype.previousNode = function() {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker\n*/\nfunction TreeWalker() {}\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-firstChild\n */\nTreeWalker.prototype.firstChild = function() {};\n\n/**\n * @return {?Node} The new Node or null..\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-lastChild\n */\nTreeWalker.prototype.lastChild = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-nextNode\n */\nTreeWalker.prototype.nextNode = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-nextSibling\n */\nTreeWalker.prototype.nextSibling = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-parentNode\n */\nTreeWalker.prototype.parentNode = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-previousNode\n */\nTreeWalker.prototype.previousNode = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-previousSibling\n */\nTreeWalker.prototype.previousSibling = function() {};\n\n/**\n * @type {Node}\n */\nTreeWalker.prototype.root;\n\n/**\n * @type {number}\n */\nTreeWalker.prototype.whatToShow;\n\n/**\n * @type {NodeFilter}\n */\nTreeWalker.prototype.filter;\n\n/**\n * @type {boolean}\n */\nTreeWalker.prototype.expandEntityReference;\n\n/**\n * @type {Node}\n */\nTreeWalker.prototype.currentNode;\n\n/**\n * @constructor\n * @extends {Element}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58190037\n */\nfunction HTMLElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78276800\n */\nHTMLElement.prototype.title;\n\n/**\n * @type {!CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ElementCSSInlineStyle\n */\nHTMLElement.prototype.style;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59132807\n */\nHTMLElement.prototype.lang;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52460740\n */\nHTMLElement.prototype.dir;\n\n/**\n * @implicitCast\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95362176\n */\nHTMLElement.prototype.className;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40676705\n */\nHTMLElement.prototype.tabIndex;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33759296\n */\nfunction HTMLHtmlElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9383775\n */\nHTMLHtmlElement.prototype.version;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77253168\n */\nfunction HTMLHeadElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96921909\n */\nHTMLHeadElement.prototype.profile;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @implements {LinkStyle}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35143001\n */\nfunction HTMLLinkElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87355129\n */\nHTMLLinkElement.prototype.disabled;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63954491\n */\nHTMLLinkElement.prototype.charset;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33532588\n */\nHTMLLinkElement.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85145682\n */\nHTMLLinkElement.prototype.hreflang;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75813125\n */\nHTMLLinkElement.prototype.media;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-41369587\n */\nHTMLLinkElement.prototype.rel;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40715461\n */\nHTMLLinkElement.prototype.rev;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84183095\n */\nHTMLLinkElement.prototype.target;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32498296\n */\nHTMLLinkElement.prototype.type;\n\n/** @type {StyleSheet} */\nHTMLLinkElement.prototype.sheet;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79243169\n */\nfunction HTMLTitleElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77500413\n */\nHTMLTitleElement.prototype.text;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-37041454\n */\nfunction HTMLMetaElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87670826\n */\nHTMLMetaElement.prototype.content;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77289449\n */\nHTMLMetaElement.prototype.httpEquiv;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-31037081\n */\nHTMLMetaElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35993789\n */\nHTMLMetaElement.prototype.scheme;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73629039\n */\nfunction HTMLBaseElement() {}\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-65382887\n */\nHTMLBaseElement.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73844298\n */\nHTMLBaseElement.prototype.target;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85283003\n */\nfunction HTMLIsIndexElement() {}\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87069980\n */\nHTMLIsIndexElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33589862\n */\nHTMLIsIndexElement.prototype.prompt;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @implements {LinkStyle}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16428977\n */\nfunction HTMLStyleElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-51162010\n */\nHTMLStyleElement.prototype.disabled;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76412738\n */\nHTMLStyleElement.prototype.media;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22472002\n */\nHTMLStyleElement.prototype.type;\n\n/** @type {StyleSheet} */\nHTMLStyleElement.prototype.sheet;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62018039\n */\nfunction HTMLBodyElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59424581\n */\nHTMLBodyElement.prototype.aLink;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-37574810\n */\nHTMLBodyElement.prototype.background;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-24940084\n */\nHTMLBodyElement.prototype.bgColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7662206\n */\nHTMLBodyElement.prototype.link;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73714763\n */\nHTMLBodyElement.prototype.text;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83224305\n */\nHTMLBodyElement.prototype.vLink;\n\n/**\n * @constructor\n * @extends {HTMLCollection}\n * @implements {IObject)>}\n * @implements {IArrayLike}\n * @template T\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#the-htmlformcontrolscollection-interface\n */\nfunction HTMLFormControlsCollection() {}\n\n/**\n * @param {string} name\n * @return {T|RadioNodeList|null}\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#dom-htmlformcontrolscollection-nameditem\n * @nosideeffects\n * @override\n */\nHTMLFormControlsCollection.prototype.namedItem = function(name) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40002357\n */\nfunction HTMLFormElement() {}\n\n/**\n * @type {!HTMLFormControlsCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76728479\n */\nHTMLFormElement.prototype.elements;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#HTML-HTMLFormElement-length\n */\nHTMLFormElement.prototype.length;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22051454\n */\nHTMLFormElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-19661795\n */\nHTMLFormElement.prototype.acceptCharset;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74049184\n */\nHTMLFormElement.prototype.action;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84227810\n */\nHTMLFormElement.prototype.enctype;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82545539\n */\nHTMLFormElement.prototype.method;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6512890\n */\nHTMLFormElement.prototype.target;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76767676\n */\nHTMLFormElement.prototype.submit = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76767677\n */\nHTMLFormElement.prototype.reset = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-94282980\n */\nfunction HTMLSelectElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58783172\n */\nHTMLSelectElement.prototype.type;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85676760\n */\nHTMLSelectElement.prototype.selectedIndex;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59351919\n */\nHTMLSelectElement.prototype.value;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-5933486\n */\nHTMLSelectElement.prototype.length;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20489458\n */\nHTMLSelectElement.prototype.form;\n\n/**\n * @type {!HTMLOptionsCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30606413\n */\nHTMLSelectElement.prototype.options;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79102918\n */\nHTMLSelectElement.prototype.disabled;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13246613\n */\nHTMLSelectElement.prototype.multiple;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-41636323\n */\nHTMLSelectElement.prototype.name;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18293826\n */\nHTMLSelectElement.prototype.size;\n\n/**\n * @param {HTMLElement} element\n * @param {HTMLElement=} opt_before\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14493106\n */\nHTMLSelectElement.prototype.add = function(element, opt_before) {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-28216144\n * @override\n */\nHTMLSelectElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32130014\n * @override\n */\nHTMLSelectElement.prototype.focus = function() {};\n\n/**\n * @param {number=} opt_index\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33404570\n * @override\n */\nHTMLSelectElement.prototype.remove = function(opt_index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38450247\n */\nfunction HTMLOptGroupElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-15518803\n */\nHTMLOptGroupElement.prototype.disabled;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95806054\n */\nHTMLOptGroupElement.prototype.label;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70901257\n */\nfunction HTMLOptionElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-37770574\n */\nHTMLOptionElement.prototype.defaultSelected;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-23482473\n */\nHTMLOptionElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-17116503\n */\nHTMLOptionElement.prototype.form;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14038413\n */\nHTMLOptionElement.prototype.index;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40736115\n */\nHTMLOptionElement.prototype.label;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70874476\n */\nHTMLOptionElement.prototype.selected;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48154426\n */\nHTMLOptionElement.prototype.text;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6185554\n */\nHTMLOptionElement.prototype.value;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6043025\n */\nfunction HTMLInputElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-15328520\n */\nHTMLInputElement.prototype.accept;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59914154\n */\nHTMLInputElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96991182\n */\nHTMLInputElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-92701314\n */\nHTMLInputElement.prototype.alt;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30233917\n */\nHTMLInputElement.prototype.checked;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20509171\n */\nHTMLInputElement.prototype.defaultChecked;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26091157\n */\nHTMLInputElement.prototype.defaultValue;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-50886781\n */\nHTMLInputElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63239895\n */\nHTMLInputElement.prototype.form;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-54719353\n */\nHTMLInputElement.prototype.maxLength;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-89658498\n */\nHTMLInputElement.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88461592\n */\nHTMLInputElement.prototype.readOnly;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79659438\n */\nHTMLInputElement.prototype.size;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-97320704\n */\nHTMLInputElement.prototype.src;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62176355\n */\nHTMLInputElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62883744\n */\nHTMLInputElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32463706\n */\nHTMLInputElement.prototype.useMap;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-49531485\n */\nHTMLInputElement.prototype.value;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26838235\n * @override\n */\nHTMLInputElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-2651361\n * @override\n */\nHTMLInputElement.prototype.click = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-65996295\n * @override\n */\nHTMLInputElement.prototype.focus = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-34677168\n */\nHTMLInputElement.prototype.select = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-24874179\n */\nfunction HTMLTextAreaElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-93102991\n */\nHTMLTextAreaElement.prototype.accessKey;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-51387225\n */\nHTMLTextAreaElement.prototype.cols;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-36152213\n */\nHTMLTextAreaElement.prototype.defaultValue;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-98725443\n */\nHTMLTextAreaElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18911464\n */\nHTMLTextAreaElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70715578\n */\nHTMLTextAreaElement.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39131423\n */\nHTMLTextAreaElement.prototype.readOnly;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46975887\n */\nHTMLTextAreaElement.prototype.rows;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-60363303\n */\nHTMLTextAreaElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#HTML-HTMLTextAreaElement-type\n */\nHTMLTextAreaElement.prototype.type;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70715579\n */\nHTMLTextAreaElement.prototype.value;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6750689\n * @override\n */\nHTMLTextAreaElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39055426\n * @override\n */\nHTMLTextAreaElement.prototype.focus = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48880622\n */\nHTMLTextAreaElement.prototype.select = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-34812697\n */\nfunction HTMLButtonElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73169431\n */\nHTMLButtonElement.prototype.accessKey;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-92757155\n */\nHTMLButtonElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71254493\n */\nHTMLButtonElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11029910\n */\nHTMLButtonElement.prototype.name;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39190908\n */\nHTMLButtonElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-27430092\n */\nHTMLButtonElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-72856782\n */\nHTMLButtonElement.prototype.value;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13691394\n */\nfunction HTMLLabelElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43589892\n */\nHTMLLabelElement.prototype.accessKey;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32480901\n */\nHTMLLabelElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96509813\n */\nHTMLLabelElement.prototype.htmlFor;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7365882\n */\nfunction HTMLFieldSetElement() {}\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75392630\n */\nHTMLFieldSetElement.prototype.form;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#attr-fieldset-disabled\n */\nHTMLFieldSetElement.prototype.disabled;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-21482039\n */\nfunction HTMLLegendElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11297832\n */\nHTMLLegendElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79538067\n */\nHTMLLegendElement.prototype.align;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-29594519\n */\nHTMLLegendElement.prototype.form;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-86834457\n */\nfunction HTMLUListElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39864178\n */\nHTMLUListElement.prototype.compact;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96874670\n */\nHTMLUListElement.prototype.type;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58056027\n */\nfunction HTMLOListElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76448506\n */\nHTMLOListElement.prototype.compact;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14793325\n */\nHTMLOListElement.prototype.start;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40971103\n */\nHTMLOListElement.prototype.type;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52368974\n */\nfunction HTMLDListElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-21738539\n */\nHTMLDListElement.prototype.compact;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71600284\n */\nfunction HTMLDirectoryElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75317739\n */\nHTMLDirectoryElement.prototype.compact;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-72509186\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-menu-element\n */\nfunction HTMLMenuElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68436464\n */\nHTMLMenuElement.prototype.compact;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74680021\n */\nfunction HTMLLIElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52387668\n */\nHTMLLIElement.prototype.type;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-45496263\n */\nHTMLLIElement.prototype.value;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22445964\n */\nfunction HTMLDivElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70908791\n */\nHTMLDivElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84675076\n */\nfunction HTMLParagraphElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53465507\n */\nHTMLParagraphElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43345119\n */\nfunction HTMLHeadingElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6796462\n */\nHTMLHeadingElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70319763\n */\nfunction HTMLQuoteElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53895598\n */\nHTMLQuoteElement.prototype.cite;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11383425\n */\nfunction HTMLPreElement() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13894083\n */\nHTMLPreElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-56836063\n */\nfunction HTMLBRElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82703081\n */\nHTMLBRElement.prototype.clear;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32774408\n */\nfunction HTMLBaseFontElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87502302\n */\nHTMLBaseFontElement.prototype.color;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88128969\n */\nHTMLBaseFontElement.prototype.face;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38930424\n */\nHTMLBaseFontElement.prototype.size;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43943847\n */\nfunction HTMLFontElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53532975\n */\nHTMLFontElement.prototype.color;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-55715655\n */\nHTMLFontElement.prototype.face;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90127284\n */\nHTMLFontElement.prototype.size;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68228811\n */\nfunction HTMLHRElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-15235012\n */\nHTMLHRElement.prototype.align;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79813978\n */\nHTMLHRElement.prototype.noShade;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77612587\n */\nHTMLHRElement.prototype.size;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87744198\n */\nHTMLHRElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79359609\n */\nfunction HTMLModElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75101708\n */\nHTMLModElement.prototype.cite;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88432678\n */\nHTMLModElement.prototype.dateTime;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48250443\n */\nfunction HTMLAnchorElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-89647724\n */\nHTMLAnchorElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67619266\n */\nHTMLAnchorElement.prototype.charset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-92079539\n */\nHTMLAnchorElement.prototype.coords;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88517319\n */\nHTMLAnchorElement.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87358513\n */\nHTMLAnchorElement.prototype.hreflang;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32783304\n */\nHTMLAnchorElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-3815891\n */\nHTMLAnchorElement.prototype.rel;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58259771\n */\nHTMLAnchorElement.prototype.rev;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-49899808\n */\nHTMLAnchorElement.prototype.shape;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-41586466\n */\nHTMLAnchorElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6414197\n */\nHTMLAnchorElement.prototype.target;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63938221\n */\nHTMLAnchorElement.prototype.type;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-65068939\n * @override\n */\nHTMLAnchorElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-47150313\n * @override\n */\nHTMLAnchorElement.prototype.focus = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-17701901\n */\nfunction HTMLImageElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-3211094\n */\nHTMLImageElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95636861\n */\nHTMLImageElement.prototype.alt;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-136671\n */\nHTMLImageElement.prototype.border;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91561496\n */\nHTMLImageElement.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53675471\n */\nHTMLImageElement.prototype.hspace;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58983880\n */\nHTMLImageElement.prototype.isMap;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77376969\n */\nHTMLImageElement.prototype.longDesc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91256910\n */\nHTMLImageElement.prototype.lowSrc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-47534097\n */\nHTMLImageElement.prototype.name;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87762984\n */\nHTMLImageElement.prototype.src;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35981181\n */\nHTMLImageElement.prototype.useMap;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85374897\n */\nHTMLImageElement.prototype.vspace;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13839076\n */\nHTMLImageElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9893177\n */\nfunction HTMLObjectElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16962097\n */\nHTMLObjectElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-47783837\n */\nHTMLObjectElement.prototype.archive;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82818419\n */\nHTMLObjectElement.prototype.border;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75241146\n */\nHTMLObjectElement.prototype.code;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-25709136\n */\nHTMLObjectElement.prototype.codeBase;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-19945008\n */\nHTMLObjectElement.prototype.codeType;\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38538621\n */\nHTMLObjectElement.prototype.contentDocument;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-81766986\n */\nHTMLObjectElement.prototype.data;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-942770\n */\nHTMLObjectElement.prototype.declare;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46094773\n */\nHTMLObjectElement.prototype.form;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88925838\n */\nHTMLObjectElement.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-17085376\n */\nHTMLObjectElement.prototype.hspace;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20110362\n */\nHTMLObjectElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-25039673\n */\nHTMLObjectElement.prototype.standby;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-27083787\n */\nHTMLObjectElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91665621\n */\nHTMLObjectElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6649772\n */\nHTMLObjectElement.prototype.useMap;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8682483\n */\nHTMLObjectElement.prototype.vspace;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38538620\n */\nHTMLObjectElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64077273\n */\nfunction HTMLParamElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59871447\n */\nHTMLParamElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18179888\n */\nHTMLParamElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77971357\n */\nHTMLParamElement.prototype.value;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-23931872\n */\nHTMLParamElement.prototype.valueType;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-31006348\n */\nfunction HTMLAppletElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8049912\n */\nHTMLAppletElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58610064\n */\nHTMLAppletElement.prototype.alt;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14476360\n */\nHTMLAppletElement.prototype.archive;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-61509645\n */\nHTMLAppletElement.prototype.code;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6581160\n */\nHTMLAppletElement.prototype.codeBase;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90184867\n */\nHTMLAppletElement.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-1567197\n */\nHTMLAppletElement.prototype.hspace;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39843695\n */\nHTMLAppletElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-93681523\n */\nHTMLAppletElement.prototype.object;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22637173\n */\nHTMLAppletElement.prototype.vspace;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16526327\n */\nHTMLAppletElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-94109203\n */\nfunction HTMLMapElement() {}\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71838730\n */\nHTMLMapElement.prototype.areas;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52696514\n */\nHTMLMapElement.prototype.name;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26019118\n */\nfunction HTMLAreaElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-57944457\n */\nHTMLAreaElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39775416\n */\nHTMLAreaElement.prototype.alt;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-66021476\n */\nHTMLAreaElement.prototype.coords;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-34672936\n */\nHTMLAreaElement.prototype.href;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-61826871\n */\nHTMLAreaElement.prototype.noHref;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85683271\n */\nHTMLAreaElement.prototype.shape;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8722121\n */\nHTMLAreaElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46054682\n */\nHTMLAreaElement.prototype.target;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-81598695\n */\nfunction HTMLScriptElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35305677\n */\nHTMLScriptElement.prototype.charset;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-93788534\n */\nHTMLScriptElement.prototype.defer;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-56700403\n */\nHTMLScriptElement.prototype.event;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-66979266\n */\nHTMLScriptElement.prototype.htmlFor;\n\n/**\n * @type {?function(!Event)}\n */\nHTMLScriptElement.prototype.onreadystatechange;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75147231\n */\nHTMLScriptElement.prototype.src;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46872999\n */\nHTMLScriptElement.prototype.text;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30534818\n */\nHTMLScriptElement.prototype.type;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64060425\n */\nfunction HTMLTableElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-23180977\n */\nHTMLTableElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83532985\n */\nHTMLTableElement.prototype.bgColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-50969400\n */\nHTMLTableElement.prototype.border;\n\n/**\n * @type {HTMLTableCaptionElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14594520\n */\nHTMLTableElement.prototype.caption;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59162158\n */\nHTMLTableElement.prototype.cellPadding;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68907883\n */\nHTMLTableElement.prototype.cellSpacing;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64808476\n */\nHTMLTableElement.prototype.frame;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6156016\n */\nHTMLTableElement.prototype.rows;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26347553\n */\nHTMLTableElement.prototype.rules;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-44998528\n */\nHTMLTableElement.prototype.summary;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63206416\n */\nHTMLTableElement.prototype.tBodies;\n\n/**\n * @type {HTMLTableSectionElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64197097\n */\nHTMLTableElement.prototype.tFoot;\n\n/**\n * @type {HTMLTableSectionElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9530944\n */\nHTMLTableElement.prototype.tHead;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77447361\n */\nHTMLTableElement.prototype.width;\n\n/**\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96920263\n */\nHTMLTableElement.prototype.createCaption = function() {};\n\n/**\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8453710\n */\nHTMLTableElement.prototype.createTFoot = function() {};\n\n/**\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70313345\n */\nHTMLTableElement.prototype.createTHead = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22930071\n */\nHTMLTableElement.prototype.deleteCaption = function() {};\n\n/**\n * @param {number} index\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13114938\n */\nHTMLTableElement.prototype.deleteRow = function(index) {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78363258\n */\nHTMLTableElement.prototype.deleteTFoot = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38310198\n */\nHTMLTableElement.prototype.deleteTHead = function() {};\n\n/**\n * @param {number=} opt_index\n * @return {HTMLElement}\n * @see https://www.w3.org/TR/html5/tabular-data.html#htmltableelement\n */\nHTMLTableElement.prototype.insertRow = function(opt_index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-12035137\n */\nfunction HTMLTableCaptionElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79875068\n */\nHTMLTableCaptionElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84150186\n */\nfunction HTMLTableColElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-31128447\n */\nHTMLTableColElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9447412\n */\nHTMLTableColElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-57779225\n */\nHTMLTableColElement.prototype.chOff;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96511335\n */\nHTMLTableColElement.prototype.span;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83291710\n */\nHTMLTableColElement.prototype.vAlign;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-25196799\n */\nHTMLTableColElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67417573\n */\nfunction HTMLTableSectionElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40530119\n */\nHTMLTableSectionElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83470012\n */\nHTMLTableSectionElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53459732\n */\nHTMLTableSectionElement.prototype.chOff;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52092650\n */\nHTMLTableSectionElement.prototype.rows;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-4379116\n */\nHTMLTableSectionElement.prototype.vAlign;\n\n/**\n * @param {number} index\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-5625626\n */\nHTMLTableSectionElement.prototype.deleteRow = function(index) {};\n\n/**\n * @param {number=} opt_index\n * @return {HTMLElement}\n * @see https://www.w3.org/TR/html5/tabular-data.html#htmltablesectionelement\n */\nHTMLTableSectionElement.prototype.insertRow = function(opt_index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6986576\n */\nfunction HTMLTableRowElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74098257\n */\nHTMLTableRowElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18161327\n */\nHTMLTableRowElement.prototype.bgColor;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67349879\n */\nHTMLTableRowElement.prototype.cells;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16230502\n */\nHTMLTableRowElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68207461\n */\nHTMLTableRowElement.prototype.chOff;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67347567\n */\nHTMLTableRowElement.prototype.rowIndex;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79105901\n */\nHTMLTableRowElement.prototype.sectionRowIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90000058\n */\nHTMLTableRowElement.prototype.vAlign;\n\n/**\n * @param {number} index\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11738598\n */\nHTMLTableRowElement.prototype.deleteCell = function(index) {};\n\n/**\n * @param {number} index\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68927016\n */\nHTMLTableRowElement.prototype.insertCell = function(index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82915075\n */\nfunction HTMLTableCellElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74444037\n */\nHTMLTableCellElement.prototype.abbr;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-98433879\n */\nHTMLTableCellElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76554418\n */\nHTMLTableCellElement.prototype.axis;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88135431\n */\nHTMLTableCellElement.prototype.bgColor;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-80748363\n */\nHTMLTableCellElement.prototype.cellIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30914780\n */\nHTMLTableCellElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20144310\n */\nHTMLTableCellElement.prototype.chOff;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84645244\n */\nHTMLTableCellElement.prototype.colSpan;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-89104817\n */\nHTMLTableCellElement.prototype.headers;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83679212\n */\nHTMLTableCellElement.prototype.height;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62922045\n */\nHTMLTableCellElement.prototype.noWrap;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48237625\n */\nHTMLTableCellElement.prototype.rowSpan;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-36139952\n */\nHTMLTableCellElement.prototype.scope;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58284221\n */\nHTMLTableCellElement.prototype.vAlign;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-27480795\n */\nHTMLTableCellElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43829095\n */\nfunction HTMLFrameSetElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-98869594\n */\nHTMLFrameSetElement.prototype.cols;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-19739247\n */\nHTMLFrameSetElement.prototype.rows;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-97790553\n */\nfunction HTMLFrameElement() {}\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78799536\n */\nHTMLFrameElement.prototype.contentDocument;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11858633\n */\nHTMLFrameElement.prototype.frameBorder;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7836998\n */\nHTMLFrameElement.prototype.longDesc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-55569778\n */\nHTMLFrameElement.prototype.marginHeight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8369969\n */\nHTMLFrameElement.prototype.marginWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91128709\n */\nHTMLFrameElement.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-80766578\n */\nHTMLFrameElement.prototype.noResize;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-45411424\n */\nHTMLFrameElement.prototype.scrolling;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78799535\n */\nHTMLFrameElement.prototype.src;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-50708718\n */\nfunction HTMLIFrameElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11309947\n */\nHTMLIFrameElement.prototype.align;\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67133006\n */\nHTMLIFrameElement.prototype.contentDocument;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22463410\n */\nHTMLIFrameElement.prototype.frameBorder;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-1678118\n */\nHTMLIFrameElement.prototype.height;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70472105\n */\nHTMLIFrameElement.prototype.longDesc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91371294\n */\nHTMLIFrameElement.prototype.marginHeight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-66486595\n */\nHTMLIFrameElement.prototype.marginWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96819659\n */\nHTMLIFrameElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-36369822\n */\nHTMLIFrameElement.prototype.scrolling;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43933957\n */\nHTMLIFrameElement.prototype.src;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67133005\n */\nHTMLIFrameElement.prototype.width;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.INVALID_STATE_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.SYNTAX_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.INVALID_MODIFICATION_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.NAMESPACE_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.INVALID_ACCESS_ERR;\n/**\n * @type {boolean}\n * @see https://developer.mozilla.org/en/DOM/window.closed\n */\nWindow.prototype.closed;\n\n/**\n * @type {HTMLObjectElement|HTMLIFrameElement|null}\n * @see https://developer.mozilla.org/en/DOM/window.frameElement\n */\nWindow.prototype.frameElement;\n\n/**\n * Allows lookup of frames by index or by name.\n * @type {!Window}\n * @see https://developer.mozilla.org/en/DOM/window.frames\n */\nWindow.prototype.frames;\n\n/**\n * @type {!History}\n * @suppress {duplicate}\n * @see https://developer.mozilla.org/en/DOM/window.history\n */\nvar history;\n\n/**\n * @type {!History}\n * @see https://developer.mozilla.org/en/DOM/window.history\n */\nWindow.prototype.history;\n\n/**\n * Returns the number of frames (either frame or iframe elements) in the\n * window.\n *\n * @type {number}\n * @see https://developer.mozilla.org/en/DOM/window.length\n */\nWindow.prototype.length;\n\n/**\n * Location has an exception in the DeclaredGlobalExternsOnWindow pass\n * so we have to manually include it:\n * https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/DeclaredGlobalExternsOnWindow.java#L116\n *\n * @type {!Location}\n * @implicitCast\n * @see https://developer.mozilla.org/en/DOM/window.location\n */\nWindow.prototype.location;\n\n/**\n\n * @type {string}\n * @see https://developer.mozilla.org/en/DOM/window.name\n */\nWindow.prototype.name;\n\n/**\n * @type {Navigator}\n * @see https://developer.mozilla.org/en/DOM/window.navigator\n */\nWindow.prototype.navigator;\n\n/**\n * @type {?Window}\n * @see https://developer.mozilla.org/en/DOM/window.opener\n */\nWindow.prototype.opener;\n\n/**\n * @type {!Window}\n * @see https://developer.mozilla.org/en/DOM/window.parent\n */\nWindow.prototype.parent;\n\n/**\n * @type {!Window}\n * @see https://developer.mozilla.org/en/DOM/window.self\n */\nWindow.prototype.self;\n\n/**\n * @type {?string}\n * @see https://developer.mozilla.org/en/DOM/window.status\n */\nWindow.prototype.status;\n\n/**\n * @interface\n * @see https://html.spec.whatwg.org/multipage/window-object.html#the-status-bar-barprop-object\n */\nfunction BarProp() {}\n\n/** @const {boolean} */\nBarProp.prototype.visible;\n\n/**\n * @type {!BarProp}\n * @see https://developer.mozilla.org/en/DOM/window.locationbar\n */\nWindow.prototype.locationbar;\n\n/**\n * @type {!BarProp}\n * @see https://developer.mozilla.org/en/DOM/window.menubar\n */\nWindow.prototype.menubar;\n\n/**\n * @type {!BarProp}\n * @see https://developer.mozilla.org/en/DOM/window.personalbar\n */\nWindow.prototype.personalbar;\n\n\n/**\n * @type {!BarProp}\n * @see https://developer.mozilla.org/en/DOM/window.scrollbars\n */\nWindow.prototype.scrollbars;\n\n/**\n * @type {!BarProp}\n * @see https://developer.mozilla.org/en/DOM/window.statusbar\n */\nWindow.prototype.statusbar;\n\n/**\n * @type {!BarProp}\n * @see https://developer.mozilla.org/en/DOM/window.toolbar\n */\nWindow.prototype.toolbar;\n\n/**\n * @type {!Window}\n * @see https://developer.mozilla.org/en/DOM/window.self\n */\nWindow.prototype.top;\n\n/**\n * @type {!Window}\n * @see https://developer.mozilla.org/en/DOM/window.self\n */\nWindow.prototype.window;\n\n/**\n * @param {*} message\n * @see https://developer.mozilla.org/en/DOM/window.alert\n * @return {undefined}\n */\nWindow.prototype.alert = function(message) {};\n\n/**\n * @param {*} message\n * @return {boolean}\n * @see https://developer.mozilla.org/en/DOM/window.confirm\n */\nWindow.prototype.confirm = function(message) {};\n\n/**\n * @param {string} message\n * @param {string=} value\n * @return {?string}\n * @see https://developer.mozilla.org/en/DOM/window.prompt\n */\nWindow.prototype.prompt = function(message, value) {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.blur\n * @return {undefined}\n */\nWindow.prototype.blur = function() {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.close\n * @return {undefined}\n */\nWindow.prototype.close = function() {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.focus\n * @return {undefined}\n */\nWindow.prototype.focus = function() {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/print\n * @return {undefined}\n */\nWindow.prototype.print = function() {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/stop\n * @return {undefined}\n */\nWindow.prototype.stop = function() {};\n\n/**\n * @param {*=} url\n * @param {string=} windowName\n * @param {string=} windowFeatures\n * @param {boolean=} replace\n * @return {Window}\n * @see http://msdn.microsoft.com/en-us/library/ms536651(VS.85).aspx\n */\nWindow.prototype.open = function(url, windowName, windowFeatures, replace) {};\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML\n * @implicitCast\n */\nElement.prototype.innerHTML;\n\n/**\n * @type {string}\n * @implicitCast\n * @see https://w3c.github.io/DOM-Parsing/#extensions-to-the-element-interface\n */\nElement.prototype.outerHTML;\n\n', --"externs/w3c_dom3.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s DOM Level 3 specification.\n * This file depends on w3c_dom2.js.\n * The whole file has been fully type annotated.\n * Created from\n * http://www.w3.org/TR/DOM-Level-3-Core/ecma-script-binding.html\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n * @author stevey@google.com (Steve Yegge)\n */\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF\n */\nDOMException.prototype.code;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF\n */\nDOMException.VALIDATION_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF\n */\nDOMException.TYPE_MISMATCH_ERR;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList\n */\nfunction DOMStringList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList-length\n */\nDOMStringList.prototype.length;\n\n/**\n * @param {string} str\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList-contains\n * @nosideeffects\n */\nDOMStringList.prototype.contains = function(str) {};\n\n/**\n * @param {number} index\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList-item\n * @nosideeffects\n */\nDOMStringList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationList\n */\nfunction DOMImplementationList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationList-length\n */\nDOMImplementationList.prototype.length;\n\n/**\n * @param {number} index\n * @return {DOMImplementation}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationList-item\n * @nosideeffects\n */\nDOMImplementationList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationSource\n */\nfunction DOMImplementationSource() {}\n\n/**\n * @param {?string} namespaceURI\n * @param {string} publicId\n * @param {DocumentType} doctype\n * @return {Document}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-2-Core-DOM-createDocument\n * @nosideeffects\n */\nDOMImplementation.prototype.createDocument = function(namespaceURI, publicId, doctype) {};\n\n/**\n * @param {string} qualifiedName\n * @param {string} publicId\n * @param {string} systemId\n * @return {DocumentType}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-2-Core-DOM-createDocType\n * @nosideeffects\n */\nDOMImplementation.prototype.createDocumentType = function(qualifiedName, publicId, systemId) {};\n\n/**\n * @param {string} features\n * @return {DOMImplementation}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-getDOMImpl\n * @nosideeffects\n */\nDOMImplementationSource.prototype.getDOMImplementation = function(features) {};\n\n/**\n * @param {string} features\n * @return {DOMImplementationList}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-getDOMImpls\n * @nosideeffects\n */\nDOMImplementationSource.prototype.getDOMImplementationList = function(features) {};\n\n/**\n * @param {Node} externalNode\n * @return {Node}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-adoptNode\n */\nDocument.prototype.adoptNode = function(externalNode) {};\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-documentURI\n */\nDocument.prototype.documentURI;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-inputEncoding\n */\nDocument.prototype.inputEncoding;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-encoding\n */\nDocument.prototype.xmlEncoding;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-standalone\n */\nDocument.prototype.xmlStandalone;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-version\n */\nDocument.prototype.xmlVersion;\n\n/**\n * @type {?string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-baseURI\n */\nNode.prototype.baseURI;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeNSLocalN\n */\nNode.prototype.localName;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeNSname\n */\nNode.prototype.namespaceURI;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeNSPrefix\n */\nNode.prototype.prefix;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent\n */\nNode.prototype.textContent;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_DISCONNECTED\n */\nNode.DOCUMENT_POSITION_DISCONNECTED;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_PRECEDING\n */\nNode.DOCUMENT_POSITION_PRECEDING;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_FOLLOWING\n */\nNode.DOCUMENT_POSITION_FOLLOWING;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_CONTAINS\n */\nNode.DOCUMENT_POSITION_CONTAINS;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_CONTAINED_BY\n */\nNode.DOCUMENT_POSITION_CONTAINED_BY;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC\n */\nNode.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;\n\n/**\n * @param {Node} other\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-compareDocumentPosition\n * @nosideeffects\n */\nNode.prototype.compareDocumentPosition = function(other) {};\n\n/**\n * @param {string} feature\n * @param {string} version\n * @return {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-getFeature\n * @nosideeffects\n */\nNode.prototype.getFeature = function(feature, version) {};\n\n/**\n * @param {string} key\n * @return {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-getUserData\n * @nosideeffects\n */\nNode.prototype.getUserData = function(key) {};\n\n/**\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeHasAttrs\n * @nosideeffects\n */\nNode.prototype.hasAttributes = function() {};\n\n/**\n * @param {?string} namespaceURI\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace\n * @nosideeffects\n */\nNode.prototype.isDefaultNamespace = function(namespaceURI) {};\n\n/**\n * @param {Node} arg\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isEqualNode\n * @nosideeffects\n */\nNode.prototype.isEqualNode = function(arg) {};\n\n/**\n * @param {Node} other\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isSameNode\n * @nosideeffects\n */\nNode.prototype.isSameNode = function(other) {};\n\n/**\n * @param {string} prefix\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI\n * @nosideeffects\n */\nNode.prototype.lookupNamespaceURI = function(prefix) {};\n\n/**\n * @param {?string} namespaceURI\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix\n * @nosideeffects\n */\nNode.prototype.lookupPrefix = function(namespaceURI) {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-normalize\n */\nNode.prototype.normalize = function() {};\n\n/**\n * @param {string} query\n * @return {?Element}\n * @see http://www.w3.org/TR/selectors-api/#queryselector\n * @nosideeffects\n */\nNode.prototype.querySelector = function(query) {};\n\n/**\n * @param {string} query\n * @return {!NodeList}\n * @see http://www.w3.org/TR/selectors-api/#queryselectorall\n * @nosideeffects\n */\nNode.prototype.querySelectorAll = function(query) {};\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Attr-ownerElement\n */\nAttr.prototype.ownerElement;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Attr-isId\n */\nAttr.prototype.isId;\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {Attr}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElGetAtNodeNS\n * @nosideeffects\n */\nElement.prototype.getAttributeNodeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElGetAttrNS\n * @nosideeffects\n */\nElement.prototype.getAttributeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {!NodeList}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-A6C90942\n * @nosideeffects\n */\nElement.prototype.getElementsByTagNameNS = function(namespaceURI, localName) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElHasAttr\n * @nosideeffects\n */\nElement.prototype.hasAttribute = function(name) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElHasAttrNS\n * @nosideeffects\n */\nElement.prototype.hasAttributeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElRemAtNS\n */\nElement.prototype.removeAttributeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {Attr} newAttr\n * @return {Attr}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElSetAtNodeNS\n */\nElement.prototype.setAttributeNodeNS = function(newAttr) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} qualifiedName\n * @param {string|number|boolean} value Values are converted to strings with\n * ToString, so we accept number and boolean since both convert easily to\n * strings.\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElSetAttrNS\n */\nElement.prototype.setAttributeNS = function(namespaceURI, qualifiedName, value) {};\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Text3-wholeText\n */\nText.prototype.wholeText;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-Interfaces-DOMError\n */\nfunction DOMError() {}\n\n/**\n * @type {DOMLocator}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-location\n */\nDOMError.prototype.location;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-message\n */\nDOMError.prototype.message;\n\n/**\n * @type {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-relatedData\n */\nDOMError.prototype.relatedData;\n\n/**\n * @type {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-relatedException\n */\nDOMError.prototype.relatedException;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity-warning\n */\nDOMError.SEVERITY_WARNING;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity-error\n */\nDOMError.SEVERITY_ERROR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity-fatal-error\n */\nDOMError.SEVERITY_FATAL_ERROR;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity\n */\nDOMError.prototype.severity;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-type\n */\nDOMError.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/dom/#domerror\n */\nDOMError.prototype.name;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-Interfaces-DOMErrorHandler\n */\nfunction DOMErrorHandler() {}\n\n/**\n * @param {DOMError} error\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ERRORS-DOMErrorHandler-handleError\n */\nDOMErrorHandler.prototype.handleError = function(error) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Interfaces-DOMLocator\n */\nfunction DOMLocator() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-byteOffset\n */\nDOMLocator.prototype.byteOffset;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-column-number\n */\nDOMLocator.prototype.columnNumber;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-line-number\n */\nDOMLocator.prototype.lineNumber;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-node\n */\nDOMLocator.prototype.relatedNode;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-uri\n */\nDOMLocator.prototype.uri;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-utf16Offset\n */\nDOMLocator.prototype.utf16Offset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-Core-DocType-publicId\n */\nDocumentType.prototype.publicId;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-Core-DocType-systemId\n */\nDocumentType.prototype.systemId;\n', --"externs/w3c_dom4.js":'/*\n * Copyright 2016 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s DOM4 specification. This file depends on\n * w3c_dom3.js. The whole file has been fully type annotated. Created from\n * https://www.w3.org/TR/domcore/.\n *\n * @externs\n * @author zhoumotongxue008@gmail.com (Michael Zhou)\n */\n\n/**\n * @typedef {?(DocumentType|Element|CharacterData)}\n * @see https://www.w3.org/TR/domcore/#interface-childnode\n */\nvar ChildNode;\n\n/**\n * @return {undefined}\n * @see https://www.w3.org/TR/domcore/#dom-childnode-remove\n */\nDocumentType.prototype.remove = function() {};\n\n/**\n * @return {undefined}\n * @see https://www.w3.org/TR/domcore/#dom-childnode-remove\n */\nElement.prototype.remove = function() {};\n\n/**\n * @return {undefined}\n * @see https://www.w3.org/TR/domcore/#dom-childnode-remove\n */\nCharacterData.prototype.remove = function() {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-replacewith\n */\nDocumentType.prototype.replaceWith = function(nodes) {};\n\n/**\n * @const {string}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#sec-domerror\n */\nDOMException.prototype.name;\n\n/**\n * @const {string}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#sec-domerror\n */\nDOMException.prototype.message;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.SECURITY_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.NETWORK_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.ABORT_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.URL_MISMATCH_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.QUOTA_EXCEEDED_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.TIMEOUT_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.INVALID_NODE_TYPE_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.DATA_CLONE_ERR;\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-replacewith\n */\nElement.prototype.replaceWith = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-replacewith\n */\nCharacterData.prototype.replaceWith = function(nodes) {};\n\n/**\n * @return {!Array}\n * @see https://dom.spec.whatwg.org/#dom-element-getattributenames\n */\nElement.prototype.getAttributeNames = function() {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-append\n */\nElement.prototype.append = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-append\n */\nDocument.prototype.append = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-append\n */\nDocumentFragment.prototype.append = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-prepend\n */\nElement.prototype.prepend = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-prepend\n */\nDocument.prototype.prepend = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-prepend\n */\nDocumentFragment.prototype.prepend = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-before\n */\nElement.prototype.before = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-before\n */\nDocumentType.prototype.before = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-before\n */\nCharacterData.prototype.before = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-after\n */\nElement.prototype.after = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-after\n */\nDocumentType.prototype.after = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-after\n */\nCharacterData.prototype.after = function(nodes) {};\n\n/**\n * @param {string} name\n * @param {boolean=} force\n * @return {boolean}\n * @throws {DOMException}\n * @see https://dom.spec.whatwg.org/#dom-element-toggleattribute\n */\nElement.prototype.toggleAttribute = function(name, force) {};\n\n/**\n * @type {Element}\n * @see http://msdn.microsoft.com/en-us/library/ms534327(VS.85).aspx\n */\nNode.prototype.parentElement;\n\n/**\n * @param {string} name\n * @return {!HTMLCollection}\n * @nosideeffects\n * @see https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname-classnames-classnames\n */\nDocument.prototype.getElementsByClassName = function(name) {};\n\n/**\n * @param {string} classNames\n * @return {!HTMLCollection}\n * @nosideeffects\n * @see https://dom.spec.whatwg.org/#dom-element-getelementsbyclassname-classnames-classnames\n */\nElement.prototype.getElementsByClassName = function(classNames) {};\n', --"externs/gecko_dom.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over\n * W3C\'s DOM specification by Gecko. This file depends on\n * w3c_dom2.js.\n *\n * When a non-standard extension appears in both Gecko and IE, we put\n * it in gecko_dom.js\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n */\n\n// TODO: Almost all of it has not been annotated with types.\n\n// Gecko DOM;\n\n/**\n * Mozilla only???\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLSpanElement() {}\n\n/**\n * @see https://developer.mozilla.org/en/Components_object\n */\nWindow.prototype.Components;\n\n/**\n * @type {Window}\n * @see https://developer.mozilla.org/en/DOM/window.content\n */\nWindow.prototype.content;\n\n/** @see https://developer.mozilla.org/en/DOM/window.controllers */\nWindow.prototype.controllers;\n\n/** @see https://developer.mozilla.org/en/DOM/window.crypto */\nWindow.prototype.crypto;\n\n/**\n * Gets/sets the status bar text for the given window.\n * @type {string}\n * @see https://developer.mozilla.org/en/DOM/window.defaultStatus\n */\nWindow.prototype.defaultStatus;\n\n/** @see https://developer.mozilla.org/en/DOM/window.dialogArguments */\nWindow.prototype.dialogArguments;\n\n/** @see https://developer.mozilla.org/en/DOM/window.directories */\nWindow.prototype.directories;\n\n/**\n * @type {boolean}\n * @see https://developer.mozilla.org/en/DOM/window.fullScreen\n */\nWindow.prototype.fullScreen;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/Storage#globalStorage\n */\nWindow.prototype.globalStorage;\n\n/** @see https://developer.mozilla.org/en/DOM/window.pkcs11 */\nWindow.prototype.pkcs11;\n\n/** @see https://developer.mozilla.org/en/DOM/window */\nWindow.prototype.returnValue;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/window.scrollMaxX\n */\nWindow.prototype.scrollMaxX;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/window.scrollMaxY\n */\nWindow.prototype.scrollMaxY;\n\n/** @see https://developer.mozilla.org/en/DOM/Storage#sessionStorage */\nWindow.prototype.sessionStorage;\n\n/** @see https://developer.mozilla.org/en/DOM/window.sidebar */\nWindow.prototype.sidebar;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.back\n * @return {undefined}\n */\nWindow.prototype.back = function() {};\n\n/** @deprecated */\nWindow.prototype.captureEvents;\n\n/**@see https://developer.mozilla.org/en/DOM/window.find */\nWindow.prototype.find;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.forward\n * @return {undefined}\n */\nWindow.prototype.forward = function() {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.getAttention\n * @return {undefined}\n */\nWindow.prototype.getAttention = function() {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.home\n * @return {undefined}\n */\nWindow.prototype.home = function() {};\n\nWindow.prototype.openDialog;\nWindow.prototype.releaseEvents;\nWindow.prototype.scrollByLines;\nWindow.prototype.scrollByPages;\n\n/**\n * @param {string} uri\n * @param {?=} opt_arguments\n * @param {string=} opt_options\n * @see https://developer.mozilla.org/en/DOM/window.showModalDialog\n */\nWindow.prototype.showModalDialog;\n\nWindow.prototype.sizeToContent;\n\nWindow.prototype.updateCommands;\n\n// properties of Document\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.alinkColor\n * @type {string}\n */\nDocument.prototype.alinkColor;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.anchors\n * @type {HTMLCollection}\n */\nDocument.prototype.anchors;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.applets\n * @type {HTMLCollection}\n */\nDocument.prototype.applets;\n/** @type {?string} */ Document.prototype.baseURI;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.bgColor\n * @type {string}\n */\nDocument.prototype.bgColor;\n\n/** @type {HTMLBodyElement} */ Document.prototype.body;\nDocument.prototype.characterSet;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.compatMode\n * @type {string}\n */\nDocument.prototype.compatMode;\n\nDocument.prototype.contentType;\n/** @type {string} */ Document.prototype.cookie;\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/defaultView\n * @type {?Window}\n */\nDocument.prototype.defaultView;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.designMode\n * @type {string}\n */\nDocument.prototype.designMode;\n\nDocument.prototype.documentURIObject;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.domain\n * @type {string}\n */\nDocument.prototype.domain;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.embeds\n * @type {HTMLCollection}\n */\nDocument.prototype.embeds;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.fgColor\n * @type {string}\n */\nDocument.prototype.fgColor;\n\n/** @type {Element} */ Document.prototype.firstChild;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.forms\n * @type {HTMLCollection}\n */\nDocument.prototype.forms;\n\n/** @type {HTMLCollection} */\nDocument.prototype.images;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/DOM/document.lastModified\n */\nDocument.prototype.lastModified;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/DOM/document.linkColor\n */\nDocument.prototype.linkColor;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.links\n * @type {HTMLCollection<(!HTMLAreaElement|!HTMLAnchorElement)>}\n */\nDocument.prototype.links;\n\n/**\n * @type {!Location}\n * @implicitCast\n */\nDocument.prototype.location;\n\nDocument.prototype.namespaceURI;\nDocument.prototype.nodePrincipal;\nDocument.prototype.plugins;\nDocument.prototype.popupNode;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/DOM/document.referrer\n */\nDocument.prototype.referrer;\n\n/**\n * @type {StyleSheetList}\n * @see https://developer.mozilla.org/en/DOM/document.styleSheets\n */\nDocument.prototype.styleSheets;\n\n/** @type {?string} */ Document.prototype.title;\nDocument.prototype.tooltipNode;\n/** @type {string} */ Document.prototype.URL;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/DOM/document.vlinkColor\n */\nDocument.prototype.vlinkColor;\n\n/** @type {number} */ Document.prototype.width;\n\n// Methods of Document\n/**\n * @see https://developer.mozilla.org/en/DOM/document.clear\n * @return {undefined}\n */\nDocument.prototype.clear = function() {};\n\n/**\n * @param {string} type\n * @return {Event}\n */\nDocument.prototype.createEvent = function(type) {};\nDocument.prototype.createNSResolver;\n/** @return {Range} */ Document.prototype.createRange = function() {};\nDocument.prototype.createTreeWalker;\n\nDocument.prototype.evaluate;\n\n/**\n * @param {string} commandName\n * @param {?boolean=} opt_showUi\n * @param {*=} opt_value\n * @see https://developer.mozilla.org/en/Rich-Text_Editing_in_Mozilla#Executing_Commands\n */\nDocument.prototype.execCommand;\n\nDocument.prototype.loadOverlay;\n\n/**\n * @see https://developer.mozilla.org/en/Midas\n * @see http://msdn.microsoft.com/en-us/library/ms536676(VS.85).aspx\n */\nDocument.prototype.queryCommandEnabled;\n\n/**\n * @see https://developer.mozilla.org/en/Midas\n * @see http://msdn.microsoft.com/en-us/library/ms536678(VS.85).aspx\n */\nDocument.prototype.queryCommandIndeterm;\n\n/**\n * @see https://developer.mozilla.org/en/Midas\n * @see http://msdn.microsoft.com/en-us/library/ms536679(VS.85).aspx\n */\nDocument.prototype.queryCommandState;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.queryCommandSupported\n * @see http://msdn.microsoft.com/en-us/library/ms536681(VS.85).aspx\n * @param {string} command\n * @return {?} Implementation-specific.\n */\nDocument.prototype.queryCommandSupported;\n\n/**\n * @see https://developer.mozilla.org/en/Midas\n * @see http://msdn.microsoft.com/en-us/library/ms536683(VS.85).aspx\n */\nDocument.prototype.queryCommandValue;\n\nDocument.prototype.ononline;\nDocument.prototype.onoffline;\n\n// XUL\n/**\n * @see http://developer.mozilla.org/en/DOM/document.getBoxObjectFor\n * @return {BoxObject}\n * @nosideeffects\n */\nDocument.prototype.getBoxObjectFor = function(element) {};\n\n// From:\n// http://lxr.mozilla.org/mozilla1.8/source/dom/public/idl/range/nsIDOMNSRange.idl\n\n/**\n * @param {!TrustedHTML|string} tag\n * @return {DocumentFragment}\n */\nRange.prototype.createContextualFragment;\n\n/**\n * @param {Node} parent\n * @param {number} offset\n * @return {boolean}\n * @nosideeffects\n */\nRange.prototype.isPointInRange;\n\n/**\n * @param {Node} parent\n * @param {number} offset\n * @return {number}\n * @nosideeffects\n */\nRange.prototype.comparePoint;\n\n/**\n * @param {Node} n\n * @return {boolean}\n * @nosideeffects\n */\nRange.prototype.intersectsNode;\n\n/**\n * @param {Node} n\n * @return {number}\n * @nosideeffects\n */\nRange.prototype.compareNode;\n\n/**\n * @type {!NodeList}\n * @see https://developer.mozilla.org/en/DOM/element.children\n */\nElement.prototype.children;\n\n/**\n * Firebug sets this property on elements it is inserting into the DOM.\n * @type {boolean}\n */\nElement.prototype.firebugIgnore;\n\n/**\n * Note: According to the spec, name is defined on specific types of\n * HTMLElements, rather than on Node, Element, or HTMLElement directly.\n * Ignore this.\n * @type {string}\n */\nElement.prototype.name;\n\nElement.prototype.nodePrincipal;\n\n/**\n * @type {!CSSStyleDeclaration}\n * This belongs on HTMLElement rather than Element, but that\n * breaks a lot.\n * TODO(rdcronin): Remove this declaration once the breakage is fixed.\n */\nElement.prototype.style;\n\n/**\n * @override\n * @return {!Element}\n */\nElement.prototype.cloneNode = function(deep) {};\n\n/** @return {undefined} */\nElement.prototype.click = function() {};\n\n/** @type {number} */\nHTMLTextAreaElement.prototype.selectionStart;\n\n/** @type {number} */\nHTMLTextAreaElement.prototype.selectionEnd;\n\n/**\n * @param {number} selectionStart\n * @param {number} selectionEnd\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#dom-textarea/input-setselectionrange\n * @return {undefined}\n */\nHTMLTextAreaElement.prototype.setSelectionRange =\n function(selectionStart, selectionEnd) {};\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/Navigator.buildID\n */\nNavigator.prototype.buildID;\n\n/**\n * @type {!Array|undefined}\n * @see https://developer.mozilla.org/en/Navigator.languages\n */\nNavigator.prototype.languages;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/Navigator.oscpu\n */\nNavigator.prototype.oscpu;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/Navigator.productSub\n */\nNavigator.prototype.productSub;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/Navigator.securityPolicy\n */\nNavigator.prototype.securityPolicy;\n\n/**\n * @param {string} url\n * @param {ArrayBufferView|Blob|string|FormData=} opt_data\n * @return {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/navigator.sendBeacon\n */\nNavigator.prototype.sendBeacon = function(url, opt_data) {};\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/Navigator.vendor\n */\nNavigator.prototype.vendor;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/Navigator.vendorSub\n */\nNavigator.prototype.vendorSub;\n\n\n/** @constructor */\nfunction BoxObject() {}\n\n/** @type {Element} */\nBoxObject.prototype.element;\n\n/** @type {number} */\nBoxObject.prototype.screenX;\n\n/** @type {number} */\nBoxObject.prototype.screenY;\n\n/** @type {number} */\nBoxObject.prototype.x;\n\n/** @type {number} */\nBoxObject.prototype.y;\n\n/** @type {number} */\nBoxObject.prototype.width;\n\n\n/**\n * @param {Element} element\n * @param {?string=} pseudoElt\n * @return {?CSSStyleDeclaration}\n * @nosideeffects\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getComputedStyle(element, pseudoElt) {}\n', --"externs/ie_dom.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over the\n * W3C's DOM specification by IE in JScript. This file depends on\n * w3c_dom2.js. The whole file has NOT been fully type annotated.\n *\n * When a non-standard extension appears in both Gecko and IE, we put\n * it in gecko_dom.js\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n * @author stevey@google.com (Steve Yegge)\n */\n\n// TODO(nicksantos): Rewrite all the DOM interfaces as interfaces, instead\n// of kludging them as an inheritance hierarchy.\n\n/**\n * @constructor\n * @extends {Document}\n * @see http://msdn.microsoft.com/en-us/library/ms757878(VS.85).aspx\n */\nfunction XMLDOMDocument() {}\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms761398(VS.85).aspx\n */\nXMLDOMDocument.prototype.async;\n\n/**\n * @type {!Function}\n * @see http://msdn.microsoft.com/en-us/library/ms762647(VS.85).aspx\n */\nXMLDOMDocument.prototype.ondataavailable;\n\n/**\n * @type {!Function}\n * @see http://msdn.microsoft.com/en-us/library/ms764640(VS.85).aspx\n */\nXMLDOMDocument.prototype.onreadystatechange;\n\n/**\n * @type {!Function}\n * @see http://msdn.microsoft.com/en-us/library/ms753795(VS.85).aspx\n */\nXMLDOMDocument.prototype.ontransformnode;\n\n/**\n * @type {Object}\n * @see http://msdn.microsoft.com/en-us/library/ms756041(VS.85).aspx\n */\nXMLDOMDocument.prototype.parseError;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms761353(VS.85).aspx\n */\nXMLDOMDocument.prototype.preserveWhiteSpace;\n\n/**\n * @type {number}\n * @see http://msdn.microsoft.com/en-us/library/ms753702(VS.85).aspx\n */\nXMLDOMDocument.prototype.readyState;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms762283(VS.85).aspx\n * @type {boolean}\n */\nXMLDOMDocument.prototype.resolveExternals;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms760290(v=vs.85).aspx\n * @param {string} name\n * @param {*} value\n * @return {undefined}\n */\nXMLDOMDocument.prototype.setProperty = function(name, value) {};\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms767669(VS.85).aspx\n */\nXMLDOMDocument.prototype.url;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms762791(VS.85).aspx\n */\nXMLDOMDocument.prototype.validateOnParse;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms763830(VS.85).aspx\n * @return {undefined}\n */\nXMLDOMDocument.prototype.abort = function() {};\n\n/**\n * @param {*} type\n * @param {string} name\n * @param {string} namespaceURI\n * @return {Node}\n * @see http://msdn.microsoft.com/en-us/library/ms757901(VS.85).aspx\n * @nosideeffects\n */\nXMLDOMDocument.prototype.createNode = function(type, name, namespaceURI) {};\n\n/**\n * @param {string} xmlString\n * @return {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms754585(VS.85).aspx\n * @override\n */\nXMLDOMDocument.prototype.loadXML = function(xmlString) {};\n\n/**\n * @param {string} id\n * @return {Node}\n * @see http://msdn.microsoft.com/en-us/library/ms766397(VS.85).aspx\n */\nXMLDOMDocument.prototype.nodeFromID = function(id) {};\n\n//==============================================================================\n// XMLNode methods and properties\n// In a real DOM hierarchy, XMLDOMDocument inherits from XMLNode and Document.\n// Since we can't express that in our type system, we put XMLNode properties\n// on Node.\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms767570(VS.85).aspx\n */\nNode.prototype.baseName;\n\n/**\n * @type {?string}\n * @see http://msdn.microsoft.com/en-us/library/ms762763(VS.85).aspx\n */\nNode.prototype.dataType;\n\n/**\n * @type {Node}\n * @see http://msdn.microsoft.com/en-us/library/ms764733(VS.85).aspx\n */\nNode.prototype.definition;\n\n/**\n * IE5 used document instead of ownerDocument.\n * Old versions of WebKit used document instead of contentDocument.\n * @type {Document}\n */\nNode.prototype.document;\n\n\n/**\n * Inserts the given HTML text into the element at the location.\n * @param {string} sWhere Where to insert the HTML text, one of 'beforeBegin',\n * 'afterBegin', 'beforeEnd', 'afterEnd'.\n * @param {!TrustedHTML|string} sText HTML text to insert.\n * @see http://msdn.microsoft.com/en-us/library/ms536452(VS.85).aspx\n * @return {undefined}\n */\nNode.prototype.insertAdjacentHTML = function(sWhere, sText) {};\n\n/**\n * @type {*}\n * @see http://msdn.microsoft.com/en-us/library/ms762308(VS.85).aspx\n */\nNode.prototype.nodeTypedValue;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms757895(VS.85).aspx\n */\nNode.prototype.nodeTypeString;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms762237(VS.85).aspx\n */\nNode.prototype.parsed;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms753816(VS.85).aspx\n */\nNode.prototype.specified;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms762687(VS.85).aspx\n */\nNode.prototype.text;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms755989(VS.85).aspx\n */\nNode.prototype.xml;\n\n/**\n * @param {string} expression An XPath expression.\n * @return {!NodeList}\n * @see http://msdn.microsoft.com/en-us/library/ms754523(VS.85).aspx\n * @nosideeffects\n */\nNode.prototype.selectNodes = function(expression) {};\n\n/**\n * @param {string} expression An XPath expression.\n * @return {Node}\n * @see http://msdn.microsoft.com/en-us/library/ms757846(VS.85).aspx\n * @nosideeffects\n */\nNode.prototype.selectSingleNode = function(expression) {};\n\n/**\n * @param {Node} stylesheet XSLT stylesheet.\n * @return {string}\n * @see http://msdn.microsoft.com/en-us/library/ms761399(VS.85).aspx\n * @nosideeffects\n */\nNode.prototype.transformNode = function(stylesheet) {};\n\n/**\n * @param {Node} stylesheet XSLT stylesheet.\n * @param {Object} outputObject\n * @see http://msdn.microsoft.com/en-us/library/ms766561(VS.85).aspx\n * @return {Object}\n */\nNode.prototype.transformNodeToObject =\n function(stylesheet, outputObject) {};\n\n//==============================================================================\n// Node methods\n\n/**\n * @param {boolean=} opt_bRemoveChildren Whether to remove the entire sub-tree.\n * Defaults to false.\n * @return {Node} The object that was removed.\n * @see http://msdn.microsoft.com/en-us/library/ms536708(VS.85).aspx\n */\nNode.prototype.removeNode = function(opt_bRemoveChildren) {};\n\n/**\n * @constructor\n */\nfunction ClipboardData() {}\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535220(VS.85).aspx\n * @param {string=} opt_type Type of clipboard data to clear. 'Text' or\n * 'URL' or 'File' or 'HTML' or 'Image'.\n * @return {undefined}\n */\nClipboardData.prototype.clearData = function(opt_type) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535220(VS.85).aspx\n * @param {string} type Type of clipboard data to set ('Text' or 'URL').\n * @param {string} data Data to set\n * @return {boolean} Whether the data were set correctly.\n */\nClipboardData.prototype.setData = function(type, data) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535220(VS.85).aspx\n * @param {string} type Type of clipboard data to get ('Text' or 'URL').\n * @return {string} The current data\n */\nClipboardData.prototype.getData = function(type) { };\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535220(VS.85).aspx\n * @type {ClipboardData}\n */\nWindow.prototype.clipboardData;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533724(VS.85).aspx\n */\nWindow.prototype.dialogHeight;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533725(VS.85).aspx\n */\nWindow.prototype.dialogLeft;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533726(VS.85).aspx\n */\nWindow.prototype.dialogTop;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533727(VS.85).aspx\n */\nWindow.prototype.dialogWidth;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535863(VS.85).aspx\n */\nWindow.prototype.event;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/cc197012(VS.85).aspx\n */\nWindow.prototype.maxConnectionsPer1_0Server;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/cc197013(VS.85).aspx\n */\nWindow.prototype.maxConnectionsPerServer;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534198(VS.85).aspx\n */\nWindow.prototype.offscreenBuffering;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534389(VS.85).aspx\n * @type {number|undefined}\n */\nWindow.prototype.screenLeft;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534389(VS.85).aspx\n * @type {number|undefined}\n */\nWindow.prototype.screenTop;\n\n// Functions\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.microsoft.com/en-us/library/ms536343(VS.85).aspx\n */\nWindow.prototype.attachEvent;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536392(VS.85).aspx\n */\nWindow.prototype.createPopup;\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.microsoft.com/en-us/library/ms536411(VS.85).aspx\n */\nWindow.prototype.detachEvent;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536420(VS.85).aspx\n */\nWindow.prototype.execScript;\n\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536638(VS.85).aspx\n */\nWindow.prototype.navigate;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536738(VS.85).aspx\n */\nWindow.prototype.setActive;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536758(VS.85).aspx\n */\nWindow.prototype.showHelp;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536761(VS.85).aspx\n */\nWindow.prototype.showModelessDialog;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535246%28v=vs.85%29.aspx\n * @const {!Object}\n */\nWindow.prototype.external;\n\n/**\n * @see https://msdn.microsoft.com/en-us/ie/dn265046(v=vs.94)\n * @const {!Object}\n */\nWindow.prototype.msCrypto;\n\n/**\n * @type {boolean}\n * @implicitCast\n * @see http://msdn.microsoft.com/en-us/library/ie/ms533072(v=vs.85).aspx\n */\nHTMLFrameElement.prototype.allowTransparency;\n\n/**\n * @type {Window}\n * @see http://msdn.microsoft.com/en-us/library/ms533692(VS.85).aspx\n */\nHTMLFrameElement.prototype.contentWindow;\n\n/**\n * @type {boolean}\n * @implicitCast\n * @see http://msdn.microsoft.com/en-us/library/ie/ms533072(v=vs.85).aspx\n */\nHTMLIFrameElement.prototype.allowTransparency;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536385(VS.85).aspx\n */\nHTMLBodyElement.prototype.createControlRange;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534359(VS.85).aspx\n */\nHTMLScriptElement.prototype.readyState;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534359(VS.85).aspx\n */\nHTMLIFrameElement.prototype.readyState;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534359(VS.85).aspx\n */\nHTMLImageElement.prototype.readyState;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534359(VS.85).aspx\n */\nHTMLObjectElement.prototype.readyState;\n\n\n/**\n * @constructor\n */\nfunction ControlRange() {}\n\nControlRange.prototype.add;\nControlRange.prototype.addElement;\nControlRange.prototype.execCommand;\nControlRange.prototype.item;\nControlRange.prototype.queryCommandEnabled;\nControlRange.prototype.queryCommandIndeterm;\nControlRange.prototype.queryCommandState;\nControlRange.prototype.queryCommandSupported;\nControlRange.prototype.queryCommandValue;\nControlRange.prototype.remove;\nControlRange.prototype.scrollIntoView;\nControlRange.prototype.select;\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/ms535872.aspx\n */\nfunction TextRange() {}\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533538(VS.85).aspx\n */\nTextRange.prototype.boundingHeight;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533539(VS.85).aspx\n */\nTextRange.prototype.boundingLeft;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533540(VS.85).aspx\n */\nTextRange.prototype.boundingTop;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533541(VS.85).aspx\n */\nTextRange.prototype.boundingWidth;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533874(VS.85).aspx\n */\nTextRange.prototype.htmlText;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534200(VS.85).aspx\n */\nTextRange.prototype.offsetLeft;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534303(VS.85).aspx\n */\nTextRange.prototype.offsetTop;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534676(VS.85).aspx\n */\nTextRange.prototype.text;\n\n/**\n * @param {boolean=} opt_toStart\n * @see http://msdn.microsoft.com/en-us/library/ms536371(VS.85).aspx\n */\nTextRange.prototype.collapse;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536373(VS.85).aspx\n */\nTextRange.prototype.compareEndPoints;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536416(VS.85).aspx\n */\nTextRange.prototype.duplicate;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536419(VS.85).aspx\n */\nTextRange.prototype.execCommand;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536421(VS.85).aspx\n */\nTextRange.prototype.expand;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536422(VS.85).aspx\n */\nTextRange.prototype.findText;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536432(VS.85).aspx\n */\nTextRange.prototype.getBookmark;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536433(VS.85).aspx\n */\nTextRange.prototype.getBoundingClientRect;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536435(VS.85).aspx\n */\nTextRange.prototype.getClientRects;\n\n/**\n * @param {TextRange|ControlRange} range\n * @return {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms536450(VS.85).aspx\n */\nTextRange.prototype.inRange;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536458(VS.85).aspx\n */\nTextRange.prototype.isEqual;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536616(VS.85).aspx\n */\nTextRange.prototype.move;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536620(VS.85).aspx\n */\nTextRange.prototype.moveEnd;\n\n/**\n * @param {string} unit\n * @param {number=} opt_count\n * @see http://msdn.microsoft.com/en-us/library/ms536623(VS.85).aspx\n */\nTextRange.prototype.moveStart;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536628(VS.85).aspx\n */\nTextRange.prototype.moveToBookmark;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536630(VS.85).aspx\n */\nTextRange.prototype.moveToElementText;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536632(VS.85).aspx\n */\nTextRange.prototype.moveToPoint;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536654(VS.85).aspx\n * @return {?Element}\n */\nTextRange.prototype.parentElement;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536656(VS.85).aspx\n */\nTextRange.prototype.pasteHTML;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536676(VS.85).aspx\n */\nTextRange.prototype.queryCommandEnabled;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536678(VS.85).aspx\n */\nTextRange.prototype.queryCommandIndeterm;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536679(VS.85).aspx\n */\nTextRange.prototype.queryCommandState;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536681(VS.85).aspx\n */\nTextRange.prototype.queryCommandSupported;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536683(VS.85).aspx\n */\nTextRange.prototype.queryCommandValue;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536730(VS.85).aspx\n */\nTextRange.prototype.scrollIntoView;\n\n/**\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/ms536735(VS.85).aspx\n */\nTextRange.prototype.select = function() {};\n\n/**\n * @param {string} how\n * @param {TextRange|ControlRange} sourceRange\n * @see http://msdn.microsoft.com/en-us/library/ms536745(VS.85).aspx\n */\nTextRange.prototype.setEndPoint;\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/ms537447(VS.85).aspx\n */\nfunction controlRange() {}\n\n\nDocument.prototype.loadXML;\n\n\n// http://msdn.microsoft.com/en-us/library/ms531073(VS.85).aspx\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533553(VS.85).aspx\n */\nDocument.prototype.charset;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533693(VS.85).aspx\n */\nDocument.prototype.cookie;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533731(VS.85).aspx\n */\nDocument.prototype.dir;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/cc196988(VS.85).aspx\n */\nDocument.prototype.documentMode;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533747(VS.85).aspx\n */\nDocument.prototype.expando;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533750(VS.85).aspx\n */\nDocument.prototype.fileCreatedDate;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533751(VS.85).aspx\n */\nDocument.prototype.fileModifiedDate;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533752(VS.85).aspx\n */\nDocument.prototype.fileSize;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534331(VS.85).aspx\n * @type {?Window}\n */\nDocument.prototype.parentWindow;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534353(VS.85).aspx\n */\nDocument.prototype.protocol;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534359(VS.85).aspx\n */\nHTMLDocument.prototype.readyState;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534704(VS.85).aspx\n */\nDocument.prototype.uniqueID;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534709(VS.85).aspx\n */\nDocument.prototype.URLUnencoded;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535155(VS.85).aspx\n */\nDocument.prototype.XMLDocument;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535163(VS.85).aspx\n */\nDocument.prototype.XSLDocument;\n\n// functions\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.microsoft.com/en-us/library/ms536343(VS.85).aspx\n */\nDocument.prototype.attachEvent;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536390(VS.85).aspx\n */\nDocument.prototype.createEventObject;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms531194(VS.85).aspx\n */\nDocument.prototype.createStyleSheet;\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.microsoft.com/en-us/library/ms536411(VS.85).aspx\n */\nDocument.prototype.detachEvent;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536425(VS.85).aspx\n */\nDocument.prototype.focus;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536614(VS.85).aspx\n */\nDocument.prototype.mergeAttributes;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536685(VS.85).aspx\n */\nDocument.prototype.recalc;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536689(VS.85).aspx\n */\nDocument.prototype.releaseCapture;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536738(VS.85).aspx\n */\nDocument.prototype.setActive;\n\n\n// collections\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537434(VS.85).aspx\n */\nDocument.prototype.all;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537445(VS.85).aspx\n */\nDocument.prototype.childNodes;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537459(VS.85).aspx\n */\nDocument.prototype.frames;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537470(VS.85).aspx\n */\nDocument.prototype.namespaces;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537487(VS.85).aspx\n * @type {!HTMLCollection}\n */\nDocument.prototype.scripts;\n\n/**\n * @param {string} sUrl\n * @return {number}\n * @see http://msdn.microsoft.com/en-us/library/ms535922(VS.85).aspx\n */\nElement.prototype.addBehavior = function(sUrl) {};\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.microsoft.com/en-us/library/mm536343(v=vs.85).aspx\n */\nElement.prototype.attachEvent;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms533546(VS.85).aspx\n */\nElement.prototype.canHaveChildren;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms533559(v=vs.85).aspx\n */\nElement.prototype.classid;\n\n/**\n * @param {number} iCoordX Integer that specifies the client window coordinate\n * of x.\n * @param {number} iCoordY Integer that specifies the client window coordinate\n * of y.\n * @return {string} The component of an element located at the specified\n * coordinates.\n * @see http://msdn.microsoft.com/en-us/library/ms536375(VS.85).aspx\n * @nosideeffects\n */\nElement.prototype.componentFromPoint = function(iCoordX, iCoordY) {};\n\n\n/**\n * TODO(tjgq): Make this string once existing usages have been migrated.\n * @type {string|boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms533690(VS.85).aspx\n */\nElement.prototype.contentEditable;\n\n/**\n * @return {TextRange}\n * @see http://msdn.microsoft.com/en-us/library/ms536401(VS.85).aspx\n */\nElement.prototype.createTextRange;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535231(VS.85).aspx\n * @type {?CSSStyleDeclaration}\n */\nElement.prototype.currentStyle;\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.microsoft.com/en-us/library/ie/ms536411(v=vs.85).aspx\n */\nElement.prototype.detachEvent;\n\n/**\n * @param {string=} opt_action\n * @see http://msdn.microsoft.com/en-us/library/ms536414%28VS.85%29.aspx\n * @return {undefined}\n */\nElement.prototype.doScroll = function(opt_action) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536423(VS.85).aspx\n */\nElement.prototype.fireEvent;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms533783(VS.85).aspx\n */\nElement.prototype.hideFocus;\n\n/**\n * @type {string}\n * @implicitCast\n *\n * TODO(lharker): remove the @implicitCast to enforce assigning an explicit\n * string to innerText instead of relying on coercion.\n *\n * @see http://msdn.microsoft.com/en-us/library/ms533899.aspx\n */\nElement.prototype.innerText;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms537838(VS.85).aspx\n */\nElement.prototype.isContentEditable;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms531395(v=vs.85).aspx\n * NOTE: Left untyped to avoid conflict with subclasses.\n */\nElement.prototype.load;\n\n/**\n * @param {number} pointerId Id of the pointer that is assign to the element.\n * @see http://msdn.microsoft.com/en-us/library/ie/hh771882(v=vs.85).aspx\n * @return {undefined}\n */\nElement.prototype.msSetPointerCapture = function(pointerId) {};\n\n/**\n * @param {number} pointerId\n * @see http://msdn.microsoft.com/en-us/library/ie/hh771880.aspx\n * @return {undefined}\n */\nElement.prototype.msReleasePointerCapture = function(pointerId) {};\n\n/**\n * @type {?function(Event)}\n * @see http://msdn.microsoft.com/en-us/library/ms536903(v=vs.85).aspx\n */\nElement.prototype.onbeforedeactivate;\n\n/**\n * @type {?function(Event)}\n * @see http://msdn.microsoft.com/en-us/library/ms536945(VS.85).aspx\n */\nElement.prototype.onmouseenter;\n\n/**\n * @type {?function(Event)}\n * @see http://msdn.microsoft.com/en-us/library/ms536946(VS.85).aspx\n */\nElement.prototype.onmouseleave;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536689(VS.85).aspx\n * @return {undefined}\n */\nElement.prototype.releaseCapture = function() {};\n\n/**\n * @param {number} iID\n * @return {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms536700(VS.85).aspx\n */\nElement.prototype.removeBehavior = function(iID) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/aa703996(VS.85).aspx\n */\nElement.prototype.runtimeStyle;\n\n/**\n * @param {string} sStoreName The arbitrary name assigned to a persistent object\n * in a UserData store.\n * @see http://msdn.microsoft.com/en-us/library/ms531403(v=vs.85).aspx\n * @return {undefined}\n */\nElement.prototype.save = function(sStoreName) {};\n\n/**\n * @param {boolean=} opt_bContainerCapture Events originating in a container are\n * captured by the container. Defaults to true.\n * @see http://msdn.microsoft.com/en-us/library/ms536742(VS.85).aspx\n * @return {undefined}\n */\nElement.prototype.setCapture = function(opt_bContainerCapture) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534635(VS.85).aspx\n */\nElement.prototype.sourceIndex;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms537840.aspx\n */\nElement.prototype.unselectable;\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/aa752462(v=vs.85).aspx\n */\nfunction HTMLFiltersCollection() {}\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/aa752463(v=vs.85).aspx\n * @type {number}\n */\nHTMLFiltersCollection.prototype.length;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537452(v=vs.85).aspx\n * @type {HTMLFiltersCollection}\n */\nElement.prototype.filters;\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/ms532853(v=vs.85).aspx\n */\nfunction HTMLFilter() {}\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms532954(v=vs.85).aspx\n * @return {undefined}\n */\nHTMLFilter.prototype.apply = function() {};\n\n/**\n * @constructor\n * @extends {HTMLFilter}\n * @see http://msdn.microsoft.com/en-us/library/ms532967(v=vs.85).aspx\n */\nfunction AlphaFilter() {}\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms532910(v=vs.85).aspx\n * @type {number}\n */\nAlphaFilter.prototype.Opacity;\n\n/**\n * @constructor\n * @extends {HTMLFilter}\n * @see http://msdn.microsoft.com/en-us/library/ms532969(v=vs.85).aspx\n */\nfunction AlphaImageLoaderFilter() {}\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms532920(v=vs.85).aspx\n * @type {string}\n */\nAlphaImageLoaderFilter.prototype.sizingMethod;\n\n// For IE, returns an object representing key-value pairs for all the global\n// variables prefixed with str, e.g. test*\n\n/** @param {*=} opt_str\n */\nfunction RuntimeObject(opt_str) {}\n\n\n/**\n * @type {StyleSheet}\n * @see http://msdn.microsoft.com/en-us/library/dd347030(VS.85).aspx\n */\nHTMLStyleElement.prototype.styleSheet;\n\n\n/**\n * IE implements Cross Origin Resource Sharing (cross-domain XMLHttpRequests)\n * via the XDomainRequest object.\n *\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/cc288060(v=vs.85).aspx\n * @see http://www.w3.org/TR/cors/\n */\nfunction XDomainRequest() {}\n\n/**\n * Aborts the request.\n * @see http://msdn.microsoft.com/en-us/library/cc288129(v=vs.85).aspx\n * @return {undefined}\n */\nXDomainRequest.prototype.abort = function() {};\n\n/**\n * Sets the method and URL for the request.\n * @param {string} bstrMethod Either \"GET\" or \"POST\"\n * @param {string} bstrUrl The target URL\n * @see http://msdn.microsoft.com/en-us/library/cc288168(v=vs.85).aspx\n * @return {undefined}\n */\nXDomainRequest.prototype.open = function(bstrMethod, bstrUrl) {};\n\n/**\n * Sends the request.\n * @param {string=} varBody The POST body to send to the server. If omitted,\n * the behavior is identical to sending an empty string.\n * @see http://msdn.microsoft.com/en-us/library/cc288207(v=vs.85).aspx\n * @return {undefined}\n */\nXDomainRequest.prototype.send = function(varBody) {};\n\n/**\n * Called if the request could not be completed. Note that error information is\n * not available.\n * @see http://msdn.microsoft.com/en-us/library/ms536930%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.onerror;\n\n/**\n * Called when the response has finished.\n * @see http://msdn.microsoft.com/en-us/library/ms536942%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.onload;\n\n/**\n * Called every time part of the response has been received.\n * @see http://msdn.microsoft.com/en-us/library/cc197058%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.onprogress;\n\n/**\n * Called if the timeout period has elapsed.\n * @see http://msdn.microsoft.com/en-us/library/cc197061%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.ontimeout;\n\n/**\n * The current response body.\n * @see http://msdn.microsoft.com/en-us/library/cc287956%28v=VS.85%29.aspx\n * @type {string}\n */\nXDomainRequest.prototype.responseText;\n\n/**\n * The timeout (in milliseconds) for the request.\n * @type {number}\n */\nXDomainRequest.prototype.timeout;\n\n/**\n * The Content-Type of the response, or an empty string.\n * @type {string}\n */\nXDomainRequest.prototype.contentType;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms533542(v=vs.85).aspx\n */\nNavigator.prototype.browserLanguage;\n\n/**\n * @type {number}\n * @see https://msdn.microsoft.com/en-us/library/ie/hh772144(v=vs.85).aspx\n */\nNavigator.prototype.msMaxTouchPoints;\n\n/**\n * @type {boolean}\n * @see http://blogs.msdn.com/b/ie/archive/2011/09/20/touch-input-for-ie10-and-metro-style-apps.aspx\n */\nNavigator.prototype.msPointerEnabled;\n\n/**\n * @param {(!File|!Blob)} blob\n * @param {string=} opt_defaultName\n * @return {boolean}\n * @see https://msdn.microsoft.com/en-us/library/hh772331(v=vs.85).aspx\n */\nNavigator.prototype.msSaveBlob = function(blob, opt_defaultName) {};\n\n/**\n * @param {(!File|!Blob)} blob\n * @param {string=} opt_defaultName\n * @return {boolean}\n * @see https://msdn.microsoft.com/en-us/library/hh772332(v=vs.85).aspx\n */\nNavigator.prototype.msSaveOrOpenBlob = function(blob, opt_defaultName) {};\n\n/**\n * @type {number}\n * @see http://msdn.microsoft.com/en-us/library/ms533721(v=vs.85).aspx\n */\nScreen.prototype.deviceXDPI;\n\n/**\n * @type {number}\n * @see http://msdn.microsoft.com/en-us/library/ms534128%28v=vs.85%29.aspx\n */\nScreen.prototype.logicalXDPI;\n\n/**\n * @type {number}\n * @see http://msdn.microsoft.com/en-us/library/ms534130%28v=vs.85%29.aspx\n */\nScreen.prototype.logicalYDPI;\n", --"externs/webkit_dom.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over W3C\'s DOM\n * specification by WebKit. This file depends on w3c_dom2.js.\n * All the provided definitions has been type annotated\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n */\n\n/**\n * @param {boolean=} opt_center\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=403510\n * @return {undefined}\n */\nElement.prototype.scrollIntoViewIfNeeded = function(opt_center) {};\n\n/**\n * @constructor\n * @see http://trac.webkit.org/browser/trunk/Source/WebCore/inspector/ScriptProfileNode.idl\n */\nfunction ScriptProfileNode() {};\n\n/** @type {string} */\nScriptProfileNode.prototype.functionName;\n\n/** @type {string} */\nScriptProfileNode.prototype.url;\n\n/** @type {number} */\nScriptProfileNode.prototype.lineNumber;\n\n/** @type {number} */\nScriptProfileNode.prototype.totalTime;\n\n/** @type {number} */\nScriptProfileNode.prototype.selfTime;\n\n/** @type {number} */\nScriptProfileNode.prototype.numberOfCalls;\n\n/** @type {Array} */\nScriptProfileNode.prototype.children;\n\n/** @type {boolean} */\nScriptProfileNode.prototype.visible;\n\n/** @type {number} */\nScriptProfileNode.prototype.callUID;\n\n/**\n * @constructor\n * @see http://trac.webkit.org/browser/trunk/Source/WebCore/inspector/ScriptProfile.idl\n */\nfunction ScriptProfile() {};\n\n/** @type {string} */\nScriptProfile.prototype.title;\n\n/** @type {number} */\nScriptProfile.prototype.uid;\n\n/** @type {ScriptProfileNode} */\nScriptProfile.prototype.head;\n\n/**\n * @type {number}\n * @see http://developer.android.com/reference/android/webkit/WebView.html\n */\nWindow.prototype.devicePixelRatio;\n\n/**\n * @param {string} contextId\n * @param {string} name\n * @param {number} width\n * @param {number} height\n * @nosideeffects\n * @return {undefined}\n */\nDocument.prototype.getCSSCanvasContext =\n function(contextId, name, width, height) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {?Range}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/caretRangeFromPoint\n */\nDocument.prototype.caretRangeFromPoint = function(x, y) {};\n\n/**\n * @return {!Promise}\n * @nosideeffects\n * @see https://webkit.org/blog/8124/introducing-storage-access-api\n */\nDocument.prototype.hasStorageAccess = function() {};\n\n/**\n * @return {!Promise}\n * @see https://webkit.org/blog/8124/introducing-storage-access-api\n * @see https://developer.mozilla.org/docs/Web/API/Document/requestStorageAccess#Syntax\n */\nDocument.prototype.requestStorageAccess = function() {};\n', --"externs/w3c_css.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's CSS specification\n * The whole file has been fully type annotated.\n * http://www.w3.org/TR/DOM-Level-2-Style/css.html\n * @externs\n * @author acleung@google.com (Alan Leung)\n * @author stevey@google.com (Steve Yegge)\n *\n * TODO(nicksantos): When there are no more occurrences of w3c_range.js and\n * gecko_dom.js being included directly in BUILD files, bug dbeam to split the\n * bottom part of this file into a separate externs.\n */\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet\n */\nfunction StyleSheet() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-type\n */\nStyleSheet.prototype.type;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-disabled\n */\nStyleSheet.prototype.disabled;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-owner\n */\nStyleSheet.prototype.ownerNode;\n\n/**\n * @type {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-parentStyleSheet\n */\nStyleSheet.prototype.parentStyleSheet;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-href\n */\nStyleSheet.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-title\n */\nStyleSheet.prototype.title;\n\n/**\n * @type {MediaList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-media\n */\nStyleSheet.prototype.media;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheetList\n */\nfunction StyleSheetList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheetList-length\n */\nStyleSheetList.prototype.length;\n\n/**\n * @param {number} index\n * @return {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheetList-item\n */\nStyleSheetList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList\n */\nfunction MediaList() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList-mediaText\n */\nMediaList.prototype.mediaText;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList-length\n */\nMediaList.prototype.length;\n\n/**\n * @param {number} index\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList-item\n */\nMediaList.prototype.item = function(index) {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-LinkStyle\n */\nfunction LinkStyle() {}\n\n/**\n * @type {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-LinkStyle-sheet\n */\nLinkStyle.prototype.sheet;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-DocumentStyle\n */\nfunction DocumentStyle() {}\n\n/**\n * @type {StyleSheetList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-DocumentStyle-styleSheets\n */\nDocumentStyle.prototype.styleSheets;\n\n/**\n * @constructor\n * @extends {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet\n */\nfunction CSSStyleSheet() {}\n\n/**\n * @type {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-ownerRule\n */\nCSSStyleSheet.prototype.ownerRule;\n\n/**\n * @type {CSSRuleList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-cssRules\n */\nCSSStyleSheet.prototype.cssRules;\n\n/**\n * @param {string} rule\n * @param {number} index\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-insertRule\n */\nCSSStyleSheet.prototype.insertRule = function(rule, index) {};\n\n/**\n * @param {number} index\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-deleteRule\n * @return {undefined}\n */\nCSSStyleSheet.prototype.deleteRule = function(index) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList\n */\nfunction CSSRuleList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList-length\n */\nCSSRuleList.prototype.length;\n\n/**\n * @param {number} index\n * @return {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList-item\n */\nCSSRuleList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule\n */\nfunction CSSRule() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-cssText\n */\nCSSRule.prototype.cssText;\n\n/**\n * @type {CSSStyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-sheet\n */\nCSSRule.prototype.parentStyleSheet;\n\n/**\n * @type {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-parentRule\n */\nCSSRule.prototype.parentRule;\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule\n */\nCSSRule.prototype.style;\n\n/**\n * Indicates that the rule is a {@see CSSUnknownRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.UNKNOWN_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSStyleRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.STYLE_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSCharsetRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.CHARSET_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSImportRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.IMPORT_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSMediaRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.MEDIA_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSFontFaceRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.FONT_FACE_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSPageRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.PAGE_RULE;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule\n */\nfunction CSSStyleRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule-selectorText\n */\nCSSStyleRule.prototype.selectorText;\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule-style\n */\nCSSStyleRule.prototype.style;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule\n */\nfunction CSSMediaRule() {}\n\n/**\n * @type {MediaList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-mediaTypes\n */\nCSSMediaRule.prototype.media;\n\n/**\n * @type {CSSRuleList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-cssRules\n */\nCSSMediaRule.prototype.cssRules;\n\n/**\n * @param {string} rule\n * @param {number} index\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-insertRule\n */\nCSSMediaRule.prototype.insertRule = function(rule, index) {};\n\n/**\n * @param {number} index\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-deleteRule\n * @return {undefined}\n */\nCSSMediaRule.prototype.deleteRule = function(index) {};\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSFontFaceRule\n */\nfunction CSSFontFaceRule() {}\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSFontFaceRule-style\n */\nCSSFontFaceRule.prototype.style;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPageRule\n */\nfunction CSSPageRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPageRule-name\n */\nCSSPageRule.prototype.selectorText;\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPageRule-style\n */\nCSSPageRule.prototype.style;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule\n */\nfunction CSSImportRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule-href\n */\nCSSImportRule.prototype.href;\n\n/**\n * @type {MediaList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule-media\n */\nCSSImportRule.prototype.media;\n\n/**\n * @type {CSSStyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule-styleSheet\n */\nCSSImportRule.prototype.styleSheet;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSCharsetRule\n */\nfunction CSSCharsetRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSCharsetRule-encoding\n */\nCSSCharsetRule.prototype.encoding;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSUnknownRule\n */\nfunction CSSUnknownRule() {}\n\n/**\n * @constructor\n * @extends {CSSProperties}\n * @implements {IObject<(string|number), string>}\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration\n */\nfunction CSSStyleDeclaration() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-cssText\n */\nCSSStyleDeclaration.prototype.cssText;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-length\n */\nCSSStyleDeclaration.prototype.length;\n\n/**\n * @type {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-parentRule\n */\nCSSStyleDeclaration.prototype.parentRule;\n\n/**\n * @param {string} propertyName\n * @return {CSSValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyCSSValue\n */\nCSSStyleDeclaration.prototype.getPropertyCSSValue = function(propertyName) {};\n\n/**\n * @param {string} propertyName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyPriority\n */\nCSSStyleDeclaration.prototype.getPropertyPriority = function(propertyName) {};\n\n/**\n * @param {string} propertyName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyValue\n */\nCSSStyleDeclaration.prototype.getPropertyValue = function(propertyName) {};\n\n/**\n * @param {number} index\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-item\n */\nCSSStyleDeclaration.prototype.item = function(index) {};\n\n/**\n * @param {string} propertyName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-removeProperty\n */\nCSSStyleDeclaration.prototype.removeProperty = function(propertyName) {};\n\n/**\n * @param {string} propertyName\n * @param {string} value\n * @param {string=} opt_priority\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-setProperty\n */\nCSSStyleDeclaration.prototype.setProperty = function(propertyName, value, opt_priority) {};\n\n// IE-specific\n\n/**\n * @param {string} name\n * @param {number=} opt_flags\n * @return {string|number|boolean|null}\n * @see http://msdn.microsoft.com/en-us/library/ms536429(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.getAttribute = function(name, opt_flags) {};\n\n/**\n * @param {string} name\n * @return {string|number|boolean|null}\n * @see http://msdn.microsoft.com/en-us/library/aa358797(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.getExpression = function(name) {};\n\n/**\n * @param {string} name\n * @param {number=} opt_flags\n * @return {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms536696(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.removeAttribute =\n function(name, opt_flags) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n * @see http://msdn.microsoft.com/en-us/library/aa358798(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.removeExpression = function(name) {};\n\n/**\n * @deprecated\n * @param {string} name\n * @param {*} value\n * @param {number=} opt_flags\n * @see http://msdn.microsoft.com/en-us/library/ms536739(VS.85).aspx\n * @return {undefined}\n */\nCSSStyleDeclaration.prototype.setAttribute = function(name, value, opt_flags) {};\n\n/**\n * @param {string} name\n * @param {string} expr\n * @param {string=} opt_language\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/ms531196(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.setExpression =\n function(name, expr, opt_language) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue\n */\nfunction CSSValue() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-cssText\n */\nCSSValue.prototype.cssText;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-cssValueType\n */\nCSSValue.prototype.cssValueType;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_INHERIT;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_PRIMITIVE_VALUE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_VALUE_LIST;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_CUSTOM;\n\n/**\n * @constructor\n * @extends {CSSValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nfunction CSSPrimitiveValue() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.prototype.primitiveType;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_UNKNOWN;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_NUMBER;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PERCENTAGE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_EMS;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_EXS;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PX;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_CM;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_MM;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_IN;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PT;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PC;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_DEG;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_RAD;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_GRAD;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_MS;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_S;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_HZ;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_KHZ;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_DIMENSION;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_STRING;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_URI;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_IDENT;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_ATTR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_COUNTER;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_RECT;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_RGBCOLOR;\n\n/**\n * @return {Counter}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getCounterValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getCounterValue = function() {};\n\n/**\n * @param {number} unitType\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getFloatValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getFloatValue = function(unitType) {};\n\n/**\n * @return {RGBColor}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getRGBColorValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getRGBColorValue = function() {};\n\n/**\n * @return {Rect}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getRectValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getRectValue = function() {};\n\n/**\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getStringValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getStringValue = function() {};\n\n/**\n * @param {number} unitType\n * @param {number} floatValue\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-setFloatValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR},\n * {@see DomException.NO_MODIFICATION_ALLOWED_ERR}\n */\nCSSPrimitiveValue.prototype.setFloatValue = function(unitType, floatValue) {};\n\n/**\n * @param {number} stringType\n * @param {string} stringValue\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-setStringValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR},\n * {@see DomException.NO_MODIFICATION_ALLOWED_ERR}\n */\nCSSPrimitiveValue.prototype.setStringValue = function(stringType, stringValue) {};\n\n/**\n * @constructor\n * @extends {CSSValue}\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValueList\n */\nfunction CSSValueList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValueList-length\n */\nCSSValueList.prototype.length;\n\n/**\n * @param {number} index\n * @return {CSSValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValueList-item\n */\nCSSValueList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor\n */\nfunction RGBColor() {}\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor-red\n */\nRGBColor.prototype.red;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor-green\n */\nRGBColor.prototype.green;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor-blue\n */\nRGBColor.prototype.blue;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect\n */\nfunction Rect() {}\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-top\n */\nRect.prototype.top;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-right\n */\nRect.prototype.right;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-bottom\n */\nRect.prototype.bottom;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-left\n */\nRect.prototype.left;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter\n */\nfunction Counter() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter-identifier\n */\nCounter.prototype.identifier;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter-listStyle\n */\nCounter.prototype.listStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter-separator\n */\nCounter.prototype.separator;\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ViewCSS\n */\nfunction ViewCSS() {}\n\n/**\n * @param {Element} elt\n * @param {?string=} opt_pseudoElt This argument is required according to the\n * CSS2 specification, but optional in all major browsers. See the note at\n * https://developer.mozilla.org/en-US/docs/Web/API/Window.getComputedStyle\n * @return {?CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSview-getComputedStyle\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nViewCSS.prototype.getComputedStyle = function(elt, opt_pseudoElt) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DocumentCSS\n */\nfunction DocumentCSS() {}\n\n/**\n * @param {Element} elt\n * @param {string} pseudoElt\n * @return {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DocumentCSS-getOverrideStyle\n */\nDocumentCSS.prototype.getOverrideStyle = function(elt, pseudoElt) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DOMImplementationCSS\n */\nfunction DOMImplementationCSS() {}\n\n/**\n * @param {string} title\n * @param {string} media\n * @return {CSSStyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DOMImplementationCSS-createCSSStyleSheet\n * @throws DOMException {@see DomException.SYNTAX_ERR}\n */\nDOMImplementationCSS.prototype.createCSSStyleSheet = function(title, media) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ElementCSSInlineStyle\n */\nfunction ElementCSSInlineStyle() {}\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ElementCSSInlineStyle-style\n */\nElementCSSInlineStyle.prototype.style;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties\n */\nfunction CSSProperties() {}\n\n// CSS 2 properties\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-azimuth\n */\nCSSProperties.prototype.azimuth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-background\n */\nCSSProperties.prototype.background;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundAttachment\n */\nCSSProperties.prototype.backgroundAttachment;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundColor\n */\nCSSProperties.prototype.backgroundColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundImage\n */\nCSSProperties.prototype.backgroundImage;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundPosition\n */\nCSSProperties.prototype.backgroundPosition;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundRepeat\n */\nCSSProperties.prototype.backgroundRepeat;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-background-size\n */\nCSSProperties.prototype.backgroundSize;\n\n/**\n * @implicitCast\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-border\n */\nCSSProperties.prototype.border;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderCollapse\n */\nCSSProperties.prototype.borderCollapse;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderColor\n */\nCSSProperties.prototype.borderColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderSpacing\n */\nCSSProperties.prototype.borderSpacing;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-borderStyle\n */\nCSSProperties.prototype.borderStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTop\n */\nCSSProperties.prototype.borderTop;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRight\n */\nCSSProperties.prototype.borderRight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottom\n */\nCSSProperties.prototype.borderBottom;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeft\n */\nCSSProperties.prototype.borderLeft;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTopColor\n */\nCSSProperties.prototype.borderTopColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRightColor\n */\nCSSProperties.prototype.borderRightColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottomColor\n */\nCSSProperties.prototype.borderBottomColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeftColor\n */\nCSSProperties.prototype.borderLeftColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTopStyle\n */\nCSSProperties.prototype.borderTopStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRightStyle\n */\nCSSProperties.prototype.borderRightStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottomStyle\n */\nCSSProperties.prototype.borderBottomStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeftStyle\n */\nCSSProperties.prototype.borderLeftStyle;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTopWidth\n */\nCSSProperties.prototype.borderTopWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRightWidth\n */\nCSSProperties.prototype.borderRightWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottomWidth\n */\nCSSProperties.prototype.borderBottomWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeftWidth\n */\nCSSProperties.prototype.borderLeftWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderWidth\n */\nCSSProperties.prototype.borderWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderBottomLeftRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderBottomRightRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderTopLeftRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderTopRightRadius;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-source\n */\nCSSProperties.prototype.borderImageSource;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-slice\n */\nCSSProperties.prototype.borderImageSlice;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-width\n */\nCSSProperties.prototype.borderImageWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-outset\n */\nCSSProperties.prototype.borderImageOutset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-repeat\n */\nCSSProperties.prototype.borderImageRepeat;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-border-image\n */\nCSSProperties.prototype.borderImage;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-bottom\n */\nCSSProperties.prototype.bottom;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-captionSide\n */\nCSSProperties.prototype.captionSide;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-clear\n */\nCSSProperties.prototype.clear;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-clip\n */\nCSSProperties.prototype.clip;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-color\n */\nCSSProperties.prototype.color;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-content\n */\nCSSProperties.prototype.content;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-counterIncrement\n */\nCSSProperties.prototype.counterIncrement;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-counterReset\n */\nCSSProperties.prototype.counterReset;\n\n/**\n * This is not an official part of the W3C spec. In practice, this is a settable\n * property that works cross-browser. It is used in goog.dom.setProperties() and\n * needs to be extern'd so the --disambiguate_properties JS compiler pass works.\n * @type {string}\n */\nCSSProperties.prototype.cssText;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cue\n */\nCSSProperties.prototype.cue;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cueAfter\n */\nCSSProperties.prototype.cueAfter;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cueBefore\n */\nCSSProperties.prototype.cueBefore;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cursor\n */\nCSSProperties.prototype.cursor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-direction\n */\nCSSProperties.prototype.direction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-display\n */\nCSSProperties.prototype.display;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-elevation\n */\nCSSProperties.prototype.elevation;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-emptyCells\n */\nCSSProperties.prototype.emptyCells;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cssFloat\n */\nCSSProperties.prototype.cssFloat;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-font\n */\nCSSProperties.prototype.font;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontFamily\n */\nCSSProperties.prototype.fontFamily;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontSize\n */\nCSSProperties.prototype.fontSize;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontSizeAdjust\n */\nCSSProperties.prototype.fontSizeAdjust;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontStretch\n */\nCSSProperties.prototype.fontStretch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontStyle\n */\nCSSProperties.prototype.fontStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontVariant\n */\nCSSProperties.prototype.fontVariant;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontWeight\n */\nCSSProperties.prototype.fontWeight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-height\n */\nCSSProperties.prototype.height;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-left\n */\nCSSProperties.prototype.left;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-letterSpacing\n */\nCSSProperties.prototype.letterSpacing;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-lineHeight\n */\nCSSProperties.prototype.lineHeight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStyle\n */\nCSSProperties.prototype.listStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStyleImage\n */\nCSSProperties.prototype.listStyleImage;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStylePosition\n */\nCSSProperties.prototype.listStylePosition;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStyleType\n */\nCSSProperties.prototype.listStyleType;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-margin\n */\nCSSProperties.prototype.margin;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginTop\n */\nCSSProperties.prototype.marginTop;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginRight\n */\nCSSProperties.prototype.marginRight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginBottom\n */\nCSSProperties.prototype.marginBottom;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginLeft\n */\nCSSProperties.prototype.marginLeft;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-markerOffset\n */\nCSSProperties.prototype.markerOffset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marks\n */\nCSSProperties.prototype.marks;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-maxHeight\n */\nCSSProperties.prototype.maxHeight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-maxWidth\n */\nCSSProperties.prototype.maxWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-minHeight\n */\nCSSProperties.prototype.minHeight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-minWidth\n */\nCSSProperties.prototype.minWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-orphans\n */\nCSSProperties.prototype.orphans;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outline\n */\nCSSProperties.prototype.outline;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outlineColor\n */\nCSSProperties.prototype.outlineColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outlineStyle\n */\nCSSProperties.prototype.outlineStyle;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outlineWidth\n */\nCSSProperties.prototype.outlineWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-overflow\n */\nCSSProperties.prototype.overflow;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-padding\n */\nCSSProperties.prototype.padding;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingTop\n */\nCSSProperties.prototype.paddingTop;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingRight\n */\nCSSProperties.prototype.paddingRight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingBottom\n */\nCSSProperties.prototype.paddingBottom;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingLeft\n */\nCSSProperties.prototype.paddingLeft;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-page\n */\nCSSProperties.prototype.page;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pageBreakAfter\n */\nCSSProperties.prototype.pageBreakAfter;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pageBreakBefore\n */\nCSSProperties.prototype.pageBreakBefore;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pageBreakInside\n */\nCSSProperties.prototype.pageBreakInside;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pause\n */\nCSSProperties.prototype.pause;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pauseAfter\n */\nCSSProperties.prototype.pauseAfter;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pauseBefore\n */\nCSSProperties.prototype.pauseBefore;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pitch\n */\nCSSProperties.prototype.pitch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pitchRange\n */\nCSSProperties.prototype.pitchRange;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-playDuring\n */\nCSSProperties.prototype.playDuring;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-position\n */\nCSSProperties.prototype.position;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-quotes\n */\nCSSProperties.prototype.quotes;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-ui/#resize\n */\nCSSProperties.prototype.resize;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-richness\n */\nCSSProperties.prototype.richness;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-right\n */\nCSSProperties.prototype.right;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-size\n */\nCSSProperties.prototype.size;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speak\n */\nCSSProperties.prototype.speak;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speakHeader\n */\nCSSProperties.prototype.speakHeader;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speakNumeral\n */\nCSSProperties.prototype.speakNumeral;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speakPunctuation\n */\nCSSProperties.prototype.speakPunctuation;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speechRate\n */\nCSSProperties.prototype.speechRate;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-stress\n */\nCSSProperties.prototype.stress;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-tableLayout\n */\nCSSProperties.prototype.tableLayout;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textAlign\n */\nCSSProperties.prototype.textAlign;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textDecoration\n */\nCSSProperties.prototype.textDecoration;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textIndent\n */\nCSSProperties.prototype.textIndent;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textShadow\n */\nCSSProperties.prototype.textShadow;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textTransform\n */\nCSSProperties.prototype.textTransform;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-top\n */\nCSSProperties.prototype.top;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-unicodeBidi\n */\nCSSProperties.prototype.unicodeBidi;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-verticalAlign\n */\nCSSProperties.prototype.verticalAlign;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-visibility\n */\nCSSProperties.prototype.visibility;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-voiceFamily\n */\nCSSProperties.prototype.voiceFamily;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-volume\n */\nCSSProperties.prototype.volume;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-whiteSpace\n */\nCSSProperties.prototype.whiteSpace;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-widows\n */\nCSSProperties.prototype.widows;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-width\n */\nCSSProperties.prototype.width;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-wordSpacing\n */\nCSSProperties.prototype.wordSpacing;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-wordWrap\n */\nCSSProperties.prototype.wordWrap;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-zIndex\n */\nCSSProperties.prototype.zIndex;\n\n// CSS 3 properties\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#box-shadow\n */\nCSSProperties.prototype.boxShadow;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-ui/#box-sizing\n */\nCSSProperties.prototype.boxSizing;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-color/#transparency\n */\nCSSProperties.prototype.opacity;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-ui/#text-overflow\n */\nCSSProperties.prototype.textOverflow;\n\n// CSS 3 animations\n\n/**\n * @type {string|number}\n * @see https://www.w3.org/TR/css-animations-1/#animation\n */\nCSSProperties.prototype.animation;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-delay\n */\nCSSProperties.prototype.animationDelay;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-direction\n */\nCSSProperties.prototype.animationDirection;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-duration\n */\nCSSProperties.prototype.animationDuration;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-fill-mode\n */\nCSSProperties.prototype.animationFillMode;\n\n/**\n * @type {string|number}\n * @see https://www.w3.org/TR/css-animations-1/#animation-iteration-count\n */\nCSSProperties.prototype.animationIterationCount;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-name\n */\nCSSProperties.prototype.animationName;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-play-state\n */\nCSSProperties.prototype.animationPlayState;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-timing-function\n */\nCSSProperties.prototype.animationTimingFunction;\n\n// CSS 3 transforms\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#backface-visibility-property\n */\nCSSProperties.prototype.backfaceVisibility;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#perspective\n */\nCSSProperties.prototype.perspective;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-2d-transforms/#perspective-origin\n */\nCSSProperties.prototype.perspectiveOrigin;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#effects\n */\nCSSProperties.prototype.transform;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-2d-transforms/#transform-origin\n */\nCSSProperties.prototype.transformOrigin;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#transform-style\n */\nCSSProperties.prototype.transformStyle;\n\n// CSS 3 transitions\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition\n */\nCSSProperties.prototype.transition;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-delay\n */\nCSSProperties.prototype.transitionDelay;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-duration\n */\nCSSProperties.prototype.transitionDuration;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-property-property\n */\nCSSProperties.prototype.transitionProperty;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-timing-function\n */\nCSSProperties.prototype.transitionTimingFunction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/SVG11/interact.html#PointerEventsProperty\n */\nCSSProperties.prototype.pointerEvents;\n\n\n// CSS Flexbox 1\n\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#align-content-property\n */\nCSSProperties.prototype.alignContent;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#align-items-property\n */\nCSSProperties.prototype.alignItems;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#align-items-property\n */\nCSSProperties.prototype.alignSelf;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-property\n */\nCSSProperties.prototype.flex;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-basis-property\n */\nCSSProperties.prototype.flexBasis;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-direction-property\n */\nCSSProperties.prototype.flexDirection;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-flow-property\n */\nCSSProperties.prototype.flexFlow;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-grow-property\n */\nCSSProperties.prototype.flexGrow;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-shrink-property\n */\nCSSProperties.prototype.flexShrink;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-wrap-property\n */\nCSSProperties.prototype.flexWrap;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#justify-content-property\n */\nCSSProperties.prototype.justifyContent;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/css-flexbox-1/#order-property\n */\nCSSProperties.prototype.order;\n\n// Externs for CSS Will Change Module Level 1\n// http://www.w3.org/TR/css-will-change/\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css-will-change-1/#will-change\n */\nCSSProperties.prototype.willChange;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-ui-4/#propdef-user-select\n */\nCSSProperties.prototype.userSelect;\n\n// CSS 3 Images\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css3-images/#the-object-fit\n */\nCSSProperties.prototype.objectFit;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css3-images/#object-position\n */\nCSSProperties.prototype.objectPosition;\n\n// CSS Masking\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-masking-1/\n */\nCSSProperties.prototype.clipPath;\n\n// CSS Containment\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-contain-1/\n */\nCSSProperties.prototype.contain;\n\n/**\n * TODO(dbeam): Put this in separate file named w3c_cssom.js.\n * Externs for the CSSOM View Module.\n * @see http://www.w3.org/TR/cssom-view/\n */\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-window-interface\n\n/**\n * @param {string} media_query_list\n * @return {!MediaQueryList}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-matchmedia\n */\nWindow.prototype.matchMedia = function(media_query_list) {};\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-innerwidth\n */\nWindow.prototype.innerWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-innerheight\n */\nWindow.prototype.innerHeight;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrollx\n */\nWindow.prototype.scrollX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-pagexoffset\n */\nWindow.prototype.pageXOffset;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrolly\n */\nWindow.prototype.scrollY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-pageyoffset\n */\nWindow.prototype.pageYOffset;\n\n/**\n * @typedef {{\n * left: (number|undefined),\n * top: (number|undefined),\n * behavior: (string|undefined)\n * }}\n * @see https://www.w3.org/TR/cssom-view/#dictdef-scrolltooptions\n */\nvar ScrollToOptions;\n\n/**\n * @record\n * @see https://www.w3.org/TR/cssom-view/#dictdef-scrollintoviewoptions\n */\nfunction ScrollIntoViewOptions () {}\n\n/** @type {string|undefined} */\nScrollIntoViewOptions.prototype.behavior;\n\n/** @type {string|undefined} */\nScrollIntoViewOptions.prototype.block;\n\n/** @type {string|undefined} */\nScrollIntoViewOptions.prototype.inline;\n\n/**\n * @param {number|!ScrollToOptions} scrollToOptionsOrX\n * @param {number=} opt_y\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scroll\n * @return {undefined}\n */\nWindow.prototype.scroll = function(scrollToOptionsOrX, opt_y) {};\n\n/**\n * @param {number|!ScrollToOptions} scrollToOptionsOrX\n * @param {number=} opt_y\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrollto\n * @return {undefined}\n */\nWindow.prototype.scrollTo = function(scrollToOptionsOrX, opt_y) {};\n\n/**\n * @param {number|!ScrollToOptions} scrollToOptionsOrX\n * @param {number=} opt_y\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrollby\n * @return {undefined}\n */\nWindow.prototype.scrollBy = function(scrollToOptionsOrX, opt_y) {};\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-screenx\n */\nWindow.prototype.screenX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-screeny\n */\nWindow.prototype.screenY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-outerwidth\n */\nWindow.prototype.outerWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-outerheight\n */\nWindow.prototype.outerHeight;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-devicepixelratio\n */\nWindow.prototype.devicePixelRatio;\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-moveto\n */\nWindow.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-moveby\n */\nWindow.prototype.moveBy = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-resizeto\n */\nWindow.prototype.resizeTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-resizeby\n */\nWindow.prototype.resizeBy = function(x, y) {};\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/cssom-view/#mediaquerylist\n */\nfunction MediaQueryList() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-media\n */\nMediaQueryList.prototype.media;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-matches\n */\nMediaQueryList.prototype.matches;\n\n/**\n * @param {MediaQueryListListener} listener\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-addlistener\n * @return {undefined}\n */\nMediaQueryList.prototype.addListener = function(listener) {};\n\n/**\n * @param {MediaQueryListListener} listener\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-removelistener\n * @return {undefined}\n */\nMediaQueryList.prototype.removeListener = function(listener) {};\n\n/** @override Not available in some browsers; use addListener instead. */\nMediaQueryList.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override Not available in old browsers; use removeListener instead. */\nMediaQueryList.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nMediaQueryList.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @typedef {(function(!MediaQueryList) : void)}\n * @see http://www.w3.org/TR/cssom-view/#mediaquerylistlistener\n */\nvar MediaQueryListListener;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/cssom-view/#screen\n */\nfunction Screen() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-availwidth\n */\nScreen.prototype.availWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-availheight\n */\nScreen.prototype.availHeight;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-width\n */\nScreen.prototype.width;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-height\n */\nScreen.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-colordepth\n */\nScreen.prototype.colorDepth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-pixeldepth\n */\nScreen.prototype.pixelDepth;\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-document-interface\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {?Element}\n * @see http://www.w3.org/TR/cssom-view/#dom-document-elementfrompoint\n */\nDocument.prototype.elementFromPoint = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {!IArrayLike}\n * @see http://www.w3.org/TR/cssom-view/#dom-document-elementsfrompoint\n */\nDocument.prototype.elementsFromPoint = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {CaretPosition}\n * @see http://www.w3.org/TR/cssom-view/#dom-document-caretpositionfrompoint\n */\nDocument.prototype.caretPositionFromPoint = function(x, y) {};\n\n/**\n * @type {Element}\n * @see http://dev.w3.org/csswg/cssom-view/#dom-document-scrollingelement\n */\nDocument.prototype.scrollingElement;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/cssom-view/#caretposition\n */\nfunction CaretPosition() {}\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/cssom-view/#dom-caretposition-offsetnode\n */\nCaretPosition.prototype.offsetNode;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-caretposition-offset\n */\nCaretPosition.prototype.offset;\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-element-interface\n\n/**\n * @return {!ClientRectList}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-getclientrects\n */\nElement.prototype.getClientRects = function() {};\n\n/**\n * @return {!DOMRect}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-getboundingclientrect\n */\nElement.prototype.getBoundingClientRect = function() {};\n\n/**\n * @param {(boolean|ScrollIntoViewOptions)=} top\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollintoview\n * @return {undefined}\n */\nElement.prototype.scrollIntoView = function(top) {};\n\n/**\n * @param {number|!ScrollToOptions} scrollToOptionsOrX\n * @param {number=} opt_y\n * @see https://www.w3.org/TR/cssom-view/#extension-to-the-element-interface\n * @return {undefined}\n */\nElement.prototype.scrollTo = function(scrollToOptionsOrX, opt_y) {};\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrolltop\n */\nElement.prototype.scrollTop;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollleft\n */\nElement.prototype.scrollLeft;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollwidth\n */\nElement.prototype.scrollWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollheight\n */\nElement.prototype.scrollHeight;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clienttop\n */\nElement.prototype.clientTop;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clientleft\n */\nElement.prototype.clientLeft;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clientwidth\n */\nElement.prototype.clientWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clientheight\n */\nElement.prototype.clientHeight;\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-htmlelement-interface\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetparent\n */\nHTMLElement.prototype.offsetParent;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsettop\n */\nHTMLElement.prototype.offsetTop;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetleft\n */\nHTMLElement.prototype.offsetLeft;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetwidth\n */\nHTMLElement.prototype.offsetWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetheight\n */\nHTMLElement.prototype.offsetHeight;\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-range-interface\n\n/**\n * @return {!ClientRectList}\n * @see http://www.w3.org/TR/cssom-view/#dom-range-getclientrects\n */\nRange.prototype.getClientRects = function() {};\n\n/**\n * @return {!DOMRect}\n * @see http://www.w3.org/TR/cssom-view/#dom-range-getboundingclientrect\n */\nRange.prototype.getBoundingClientRect = function() {};\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-mouseevent-interface\n\n// MouseEvent: screen{X,Y} and client{X,Y} are in DOM Level 2/3 Event as well,\n// so it seems like a specification issue. I've emailed www-style@w3.org in\n// hopes of resolving the conflict, but in the mean time they can live here\n// (http://lists.w3.org/Archives/Public/www-style/2012May/0039.html).\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-screenx\n */\n//MouseEvent.prototype.screenX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-screeny\n */\n//MouseEvent.prototype.screenY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-pagex\n */\nMouseEvent.prototype.pageX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-pagey\n */\nMouseEvent.prototype.pageY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-clientx\n */\n//MouseEvent.prototype.clientX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-clienty\n */\n//MouseEvent.prototype.clientY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-x\n */\nMouseEvent.prototype.x;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-y\n */\nMouseEvent.prototype.y;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-offsetx\n */\nMouseEvent.prototype.offsetX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-offsety\n */\nMouseEvent.prototype.offsetY;\n\n\n// http://www.w3.org/TR/cssom-view/#rectangles\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/cssom-view/#the-clientrectlist-interface\n * @implements {IArrayLike}\n */\nfunction ClientRectList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrectlist-length\n */\nClientRectList.prototype.length;\n\n/**\n * @param {number} index\n * @return {?DOMRect}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrectlist-item\n */\nClientRectList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * http://www.w3.org/TR/css3-conditional/#CSS-interface\n */\nfunction CSSInterface() {}\n\n/**\n * @param {string} ident\n * @return {string}\n * @see http://www.w3.org/TR/cssom/#the-css.escape()-method\n * @throws DOMException {@see DOMException.INVALID_CHARACTER_ERR}\n */\nCSSInterface.prototype.escape = function(ident) {};\n\n/**\n * @param {string} property\n * @param {string=} opt_value\n * @return {boolean}\n */\nCSSInterface.prototype.supports = function(property, opt_value) {};\n\n/**\n * TODO(nicksantos): This suppress tag probably isn't needed, and\n * should be removed.\n * @suppress {duplicate}\n * @type {CSSInterface}\n */\nvar CSS;\n\n/** @type {CSSInterface} */\nWindow.prototype.CSS;\n\n// http://dev.w3.org/csswg/css-font-loading/\n\n/**\n * Set of possible string values: 'error', 'loaded', 'loading', 'unloaded'.\n * @typedef {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#enumdef-fontfaceloadstatus\n */\nvar FontFaceLoadStatus;\n\n/**\n * @typedef {{\n * style: (string|undefined),\n * weight: (string|undefined),\n * stretch: (string|undefined),\n * unicodeRange: (string|undefined),\n * variant: (string|undefined),\n * featureSettings: (string|undefined)\n * }}\n * @see http://dev.w3.org/csswg/css-font-loading/#dictdef-fontfacedescriptors\n */\nvar FontFaceDescriptors;\n\n/**\n * @constructor\n * @param {string} fontFamily\n * @param {(string|ArrayBuffer|ArrayBufferView)} source\n * @param {!FontFaceDescriptors=} opt_descriptors\n * @see http://dev.w3.org/csswg/css-font-loading/#font-face-constructor\n */\nfunction FontFace(fontFamily, source, opt_descriptors) {}\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-family\n */\nFontFace.prototype.family;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-style\n */\nFontFace.prototype.style;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-weight\n */\nFontFace.prototype.weight;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-stretch\n */\nFontFace.prototype.stretch;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-unicoderange\n */\nFontFace.prototype.unicodeRange;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-variant\n */\nFontFace.prototype.variant;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-featuresettings\n */\nFontFace.prototype.featureSettings;\n\n/**\n * @type {FontFaceLoadStatus}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-status\n */\nFontFace.prototype.status;\n\n/**\n * @return {!Promise}\n * @see http://dev.w3.org/csswg/css-font-loading/#font-face-load\n */\nFontFace.prototype.load = function() {};\n\n/**\n * Set of possible string values: 'loaded', 'loading'.\n * @typedef {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#enumdef-fontfacesetloadstatus\n */\nvar FontFaceSetLoadStatus;\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see http://dev.w3.org/csswg/css-font-loading/#FontFaceSet-interface\n */\nfunction FontFaceSet() {}\n\n// Event handlers\n// http://dev.w3.org/csswg/css-font-loading/#FontFaceSet-events\n\n/** @type {?function (Event)} */ FontFaceSet.prototype.onloading;\n/** @type {?function (Event)} */ FontFaceSet.prototype.onloadingdone;\n/** @type {?function (Event)} */ FontFaceSet.prototype.onloadingerror;\n\n/**\n * @param {!FontFace} value\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-add\n * @return {undefined}\n */\nFontFaceSet.prototype.add = function(value) {};\n\n/**\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-clear\n * @return {undefined}\n */\nFontFaceSet.prototype.clear = function() {};\n\n/**\n * @param {!FontFace} value\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-delete\n * @return {undefined}\n */\nFontFaceSet.prototype.delete = function(value) {};\n\n/**\n * @param {!FontFace} font\n * @return {boolean}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-has\n */\nFontFaceSet.prototype.has = function(font) {};\n\n/**\n * @param {function(!FontFace, number, !FontFaceSet)} callback\n * @param {?Object=} selfObj\n * see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-foreach\n * @return {undefined}\n */\nFontFaceSet.prototype.forEach = function(callback, selfObj) {};\n\n/**\n * @param {string} font\n * @param {string=} opt_text\n * @return {!Promise>}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-load\n */\nFontFaceSet.prototype.load = function(font, opt_text) {};\n\n/**\n * @param {string} font\n * @param {string=} opt_text\n * @return {boolean}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-check\n */\nFontFaceSet.prototype.check = function(font, opt_text) {};\n\n/**\n * @type {!Promise}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-ready\n */\nFontFaceSet.prototype.ready;\n\n/**\n * @type {FontFaceSetLoadStatus}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-status\n */\nFontFaceSet.prototype.status;\n\n/**\n * @constructor\n * @param {string} type\n * @param {{\n * animationName: (string|undefined),\n * elapsedTime: (number|undefined),\n * pseudoElement: (string|undefined)\n * }=} opt_animationEventInitDict\n * @extends {Event}\n * @see https://drafts.csswg.org/css-animations/#interface-animationevent\n */\nfunction AnimationEvent(type, opt_animationEventInitDict) {};\n\n/**\n * @type {string}\n * @see https://drafts.csswg.org/css-animations/#dom-animationevent-animationname\n */\nAnimationEvent.prototype.animationName;\n\n/**\n * @type {number}\n * @see https://drafts.csswg.org/css-animations/#dom-animationevent-elapsedtime\n */\nAnimationEvent.prototype.elapsedTime;\n\n/**\n * @type {string}\n * @see https://drafts.csswg.org/css-animations/#dom-animationevent-pseudoelement\n */\nAnimationEvent.prototype.pseudoElement;\n\n/**\n * @record\n * @see http://dev.w3.org/csswg/css-animations/#csskeyframerule\n */\nfunction CSSKeyframeRule() {}\n\n/**\n * @type {string}\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframerule-keytext\n */\nCSSKeyframeRule.prototype.keyText;\n\n/**\n * @type {!CSSStyleDeclaration}\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframerule-style\n */\nCSSKeyframeRule.prototype.style;\n\n\n/**\n * @record\n * @see http://dev.w3.org/csswg/css-animations/#csskeyframesrule\n */\nfunction CSSKeyframesRule() {}\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-name\n * @type {string}\n */\nCSSKeyframesRule.prototype.name;\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-cssrules\n * @type {!CSSRuleList}\n */\nCSSKeyframesRule.prototype.cssRules;\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-findrule\n * @param {string} key The key text for the rule to find.\n * @return {?CSSKeyframeRule}\n */\nCSSKeyframesRule.prototype.findRule = function(key) {};\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-appendrule\n * @param {string} rule The text for the rule to append.\n */\nCSSKeyframesRule.prototype.appendRule = function(rule) {};\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-deleterule\n * @param {string} key The key text for the rule to delete.\n */\nCSSKeyframesRule.prototype.deleteRule = function(key) {};\n", --"externs/gecko_css.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for Gecko\'s custom CSS properties. Copied from:\n * http://mxr.mozilla.org/mozilla2.0/source/dom/interfaces/css/nsIDOMCSS2Properties.idl\n *\n * @externs\n * @author nicksantos@google.com (Nick Santos)\n */\n\n\n/** @type {string} */ CSSProperties.prototype.MozAppearance;\n/** @type {string} */ CSSProperties.prototype.MozBackfaceVisibility;\n/** @type {string} */ CSSProperties.prototype.MozBackgroundClip;\n/** @type {string} */ CSSProperties.prototype.MozBackgroundInlinePolicy;\n/** @type {string} */ CSSProperties.prototype.MozBackgroundOrigin;\n/** @type {string} */ CSSProperties.prototype.MozBinding;\n/** @type {string} */ CSSProperties.prototype.MozBorderBottomColors;\n/** @type {string} */ CSSProperties.prototype.MozBorderEnd;\n/** @type {string} */ CSSProperties.prototype.MozBorderEndColor;\n/** @type {string} */ CSSProperties.prototype.MozBorderEndStyle;\n/** @type {string} */ CSSProperties.prototype.MozBorderEndWidth;\n/** @type {string} */ CSSProperties.prototype.MozBorderImage;\n/** @type {string} */ CSSProperties.prototype.MozBorderLeftColors;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadius;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusTopleft;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusTopright;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusBottomleft;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusBottomright;\n/** @type {string} */ CSSProperties.prototype.MozBorderRightColors;\n/** @type {string} */ CSSProperties.prototype.MozBorderStart;\n/** @type {string} */ CSSProperties.prototype.MozBorderStartColor;\n/** @type {string} */ CSSProperties.prototype.MozBorderStartStyle;\n/** @type {string} */ CSSProperties.prototype.MozBorderStartWidth;\n/** @type {string} */ CSSProperties.prototype.MozBorderTopColors;\n/** @type {string} */ CSSProperties.prototype.MozBoxAlign;\n/** @type {string} */ CSSProperties.prototype.MozBoxDirection;\n/** @type {string} */ CSSProperties.prototype.MozBoxFlex;\n/** @type {string} */ CSSProperties.prototype.MozBoxOrdinalGroup;\n/** @type {string} */ CSSProperties.prototype.MozBoxOrient;\n/** @type {string} */ CSSProperties.prototype.MozBoxPack;\n/** @type {string} */ CSSProperties.prototype.MozBoxSizing;\n/** @type {string} */ CSSProperties.prototype.MozBoxShadow;\n/** @type {string} */ CSSProperties.prototype.MozColumnCount;\n/** @type {string} */ CSSProperties.prototype.MozColumnGap;\n/** @type {string} */ CSSProperties.prototype.MozColumnRule;\n/** @type {string} */ CSSProperties.prototype.MozColumnRuleColor;\n/** @type {string} */ CSSProperties.prototype.MozColumnRuleStyle;\n/** @type {string} */ CSSProperties.prototype.MozColumnRuleWidth;\n/** @type {string} */ CSSProperties.prototype.MozColumnWidth;\n/** @type {string} */ CSSProperties.prototype.MozFloatEdge;\n/** @type {string} */ CSSProperties.prototype.MozFontFeatureSettings;\n/** @type {string} */ CSSProperties.prototype.MozFontLanguageOverride;\n/** @type {string} */ CSSProperties.prototype.MozForceBrokenImageIcon;\n/** @type {string} */ CSSProperties.prototype.MozImageRegion;\n/** @type {string} */ CSSProperties.prototype.MozMarginEnd;\n/** @type {string} */ CSSProperties.prototype.MozMarginStart;\n/** @type {number|string} */ CSSProperties.prototype.MozOpacity;\n/** @type {string} */ CSSProperties.prototype.MozOutline;\n/** @type {string} */ CSSProperties.prototype.MozOutlineColor;\n/** @type {string} */ CSSProperties.prototype.MozOutlineOffset;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadius;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusBottomleft;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusBottomright;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusTopleft;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusTopright;\n/** @type {string} */ CSSProperties.prototype.MozOutlineStyle;\n/** @type {string} */ CSSProperties.prototype.MozOutlineWidth;\n/** @type {string} */ CSSProperties.prototype.MozPaddingEnd;\n/** @type {string} */ CSSProperties.prototype.MozPaddingStart;\n/** @type {string} */ CSSProperties.prototype.MozPerspective;\n/** @type {string} */ CSSProperties.prototype.MozStackSizing;\n/** @type {string} */ CSSProperties.prototype.MozTabSize;\n/** @type {string} */ CSSProperties.prototype.MozTransform;\n/** @type {string} */ CSSProperties.prototype.MozTransformOrigin;\n/** @type {string} */ CSSProperties.prototype.MozTransition;\n/** @type {string} */ CSSProperties.prototype.MozTransitionDelay;\n/** @type {string} */ CSSProperties.prototype.MozTransitionDuration;\n/** @type {string} */ CSSProperties.prototype.MozTransitionProperty;\n/** @type {string} */ CSSProperties.prototype.MozTransitionTimingFunction;\n/** @type {string} */ CSSProperties.prototype.MozUserFocus;\n/** @type {string} */ CSSProperties.prototype.MozUserInput;\n/** @type {string} */ CSSProperties.prototype.MozUserModify;\n/** @type {string} */ CSSProperties.prototype.MozUserSelect;\n/** @type {string} */ CSSProperties.prototype.MozWindowShadow;\n\n\n// These are non-standard Gecko CSSOM properties on Window.prototype.screen.\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/window.screen.availTop\n */\nScreen.prototype.availTop;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/window.screen.availLeft\n */\nScreen.prototype.availLeft;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/window.screen.left\n */\nScreen.prototype.left;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/window.screen.top\n */\nScreen.prototype.top;\n', --"externs/ie_css.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for IE\'s custom CSS properties, as defined here:\n * http://msdn.microsoft.com/en-us/library/aa768661(VS.85).aspx\n *\n * This page is also useful for the IDL definitions:\n * http://source.winehq.org/source/include/mshtml.idl\n *\n * @externs\n * @author nicksantos@google.com\n */\n\n/** @type {Element} */\nStyleSheet.prototype.owningElement;\n\n/** @type {boolean} */\nStyleSheet.prototype.readOnly;\n\n/** @type {StyleSheetList} */\nStyleSheet.prototype.imports;\n\n/** @type {string} */\nStyleSheet.prototype.id;\n\n/**\n * @param {string} bstrURL\n * @param {number} lIndex\n * @return {number}\n */\nStyleSheet.prototype.addImport;\n\n/**\n * @param {string} bstrSelector\n * @param {string} bstrStyle\n * @param {number=} opt_iIndex\n * @return {number}\n * @see http://msdn.microsoft.com/en-us/library/aa358796%28v=vs.85%29.aspx\n */\nStyleSheet.prototype.addRule;\n\n/**\n * @param {number} lIndex\n */\nStyleSheet.prototype.removeImport;\n\n/**\n * @param {number} lIndex\n */\nStyleSheet.prototype.removeRule;\n\n/** @type {string} */\nStyleSheet.prototype.cssText;\n\n/** @type {CSSRuleList} */\nStyleSheet.prototype.rules;\n\n// StyleSheet methods\n\n/**\n * @param {string} propName\n * @return {string}\n * @see http://msdn.microsoft.com/en-us/library/aa358797(VS.85).aspx\n */\nStyleSheet.prototype.getExpression;\n\n/**\n * @param {string} name\n * @param {string} expression\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/ms531196(VS.85).aspx\n */\nStyleSheet.prototype.setExpression;\n\n/**\n * @param {string} expression\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/aa358798(VS.85).aspx\n */\nStyleSheet.prototype.removeExpression;\n\n// IE-only CSS style names.\n\n/** @type {string} */ CSSProperties.prototype.backgroundPositionX;\n\n/** @type {string} */ CSSProperties.prototype.backgroundPositionY;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ie/ms531081(v=vs.85).aspx\n * NOTE: Left untyped to avoid conflict with caller.\n */\nCSSProperties.prototype.behavior;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms533883.aspx\n */\nCSSProperties.prototype.imeMode;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534176(VS.85).aspx\n */\nCSSProperties.prototype.msInterpolationMode;\n\n/** @type {string} */ CSSProperties.prototype.overflowX;\n\n/** @type {string} */ CSSProperties.prototype.overflowY;\n\n/** @type {number} */ CSSProperties.prototype.pixelWidth;\n\n/** @type {number} */ CSSProperties.prototype.pixelHeight;\n\n/** @type {number} */ CSSProperties.prototype.pixelLeft;\n\n/** @type {number} */ CSSProperties.prototype.pixelTop;\n\n/** @type {string} */ CSSProperties.prototype.styleFloat;\n\n/**\n * @type {string|number}\n * @see http://msdn.microsoft.com/en-us/library/ms535169(VS.85).aspx\n */\nCSSProperties.prototype.zoom;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms535153(VS.85).aspx\n */\nCSSProperties.prototype.writingMode;\n\n/**\n * IE-specific extensions.\n * @see http://blogs.msdn.com/b/ie/archive/2008/09/08/microsoft-css-vendor-extensions.aspx\n */\n\n/** @type {string} */\nCSSProperties.prototype.MsAccelerator;\n\n/** @type {string} */\nCSSProperties.prototype.MsBackgroundPositionX;\n\n/** @type {string} */\nCSSProperties.prototype.MsBackgroundPositionY;\n\n/** @type {string} */\nCSSProperties.prototype.MsBehavior;\n\n/** @type {string} */\nCSSProperties.prototype.MsBlockProgression;\n\n/** @type {string} */\nCSSProperties.prototype.MsFilter;\n\n/** @type {string} */\nCSSProperties.prototype.MsImeMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGrid;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridChar;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridLine;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridType;\n\n/** @type {string} */\nCSSProperties.prototype.MsLineBreak;\n\n/** @type {string} */\nCSSProperties.prototype.MsLineGridMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsInterpolationMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsOverflowX;\n\n/** @type {string} */\nCSSProperties.prototype.MsOverflowY;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbar3dlightColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarArrowColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarBaseColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarDarkshadowColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarFaceColor;\n\nCSSProperties.prototype.MsScrollbarHighlightColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarShadowColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarTrackColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextAlignLast;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextAutospace;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextJustify;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextKashidaSpace;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextOverflow;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextUnderlinePosition;\n\n/** @type {string} */\nCSSProperties.prototype.MsWordBreak;\n\n/** @type {string} */\nCSSProperties.prototype.MsWordWrap;\n\n/** @type {string} */\nCSSProperties.prototype.MsWritingMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsZoom;\n\n/** @type {string} */\nCSSProperties.prototype.MsUserSelect;\n\n// See: http://msdn.microsoft.com/en-us/library/windows/apps/Hh702466.aspx\n\n/** @type {string} */\nCSSProperties.prototype.msContentZooming;\n\n/** @type {string} */\nCSSProperties.prototype.msTouchAction;\n\n/** @type {string} */\nCSSProperties.prototype.msTransform;\n\n/** @type {string} */\nCSSProperties.prototype.msTransition;\n', --"externs/webkit_css.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for WebKit\'s custom CSS properties. Copied from:\n * {@link\n * http://trac.webkit.org/browser/trunk/Source/WebCore/css/CSSPropertyNames.in}\n *\n * If you make changes to this file, notice that every property appears\n * twice: once as an uppercase name and once as a lowercase name.\n * WebKit allows both. The uppercase version is preferred.\n *\n * @externs\n * @author nicksantos@google.com (Nick Santos)\n * @author mastepien@google.com (Marek Stepien)\n */\n\n/** @type {string} */ CSSProperties.prototype.WebkitAlignContent;\n/** @type {string} */ CSSProperties.prototype.WebkitAlignItems;\n/** @type {string} */ CSSProperties.prototype.WebkitAlignSelf;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimation;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationDelay;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationDuration;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationFillMode;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationIterationCount;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationName;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationPlayState;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationTimingFunction;\n/** @type {string} */ CSSProperties.prototype.WebkitAppearance;\n/** @type {string} */ CSSProperties.prototype.WebkitAppRegion;\n/** @type {string} */ CSSProperties.prototype.WebkitAspectRatio;\n/** @type {string} */ CSSProperties.prototype.WebkitBackfaceVisibility;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundClip;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundComposite;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundSize;\n/** @type {string} */ CSSProperties.prototype.WebkitBinding;\n/** @type {string} */ CSSProperties.prototype.WebkitBlendMode;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfterColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfterStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfterWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBeforeColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBeforeStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBeforeWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBottomLeftRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBottomRightRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEnd;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEndColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEndStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEndWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderFit;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderHorizontalSpacing;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderImage;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStart;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStartColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStartStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStartWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderTopLeftRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderTopRightRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderVerticalSpacing;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxAlign;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxDecorationBreak;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxFlex;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxFlexGroup;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxLines;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxOrdinalGroup;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxOrient;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxPack;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxReflect;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxShadow;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxSizing;\n/** @type {string} */ CSSProperties.prototype.WebkitColorCorrection;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnAxis;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnBreakAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnBreakBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnBreakInside;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnCount;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnGap;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnProgression;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRule;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRuleColor;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRuleStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRuleWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitColumns;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnSpan;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitDashboardRegion;\n/** @type {string} */ CSSProperties.prototype.WebkitFilter;\n/** @type {string} */ CSSProperties.prototype.WebkitFlex;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexBasis;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexFlow;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexGrow;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexShrink;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexWrap;\n/** @type {string} */ CSSProperties.prototype.WebkitFlowFrom;\n/** @type {string} */ CSSProperties.prototype.WebkitFlowInto;\n/** @type {string} */ CSSProperties.prototype.WebkitFontSizeDelta;\n/** @type {string} */ CSSProperties.prototype.WebkitFontSmoothing;\n/** @type {string} */ CSSProperties.prototype.WebkitGridColumn;\n/** @type {string} */ CSSProperties.prototype.WebkitGridColumns;\n/** @type {string} */ CSSProperties.prototype.WebkitGridRow;\n/** @type {string} */ CSSProperties.prototype.WebkitGridRows;\n/** @type {string} */ CSSProperties.prototype.WebkitHighlight;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateCharacter;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateLimitAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateLimitBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateLimitLines;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphens;\n/** @type {string} */ CSSProperties.prototype.WebkitJustifyContent;\n/** @type {string} */ CSSProperties.prototype.WebkitLineAlign;\n/** @type {string} */ CSSProperties.prototype.WebkitLineBoxContain;\n/** @type {string} */ CSSProperties.prototype.WebkitLineBreak;\n/** @type {string} */ CSSProperties.prototype.WebkitLineClamp;\n/** @type {string} */ CSSProperties.prototype.WebkitLineGrid;\n/** @type {string} */ CSSProperties.prototype.WebkitLineSnap;\n/** @type {string} */ CSSProperties.prototype.WebkitLocale;\n/** @type {string} */ CSSProperties.prototype.WebkitLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.WebkitLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginAfterCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginBeforeCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginBottomCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginEnd;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginStart;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginTopCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarquee;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeIncrement;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeRepetition;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeSpeed;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitMask;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskAttachment;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImage;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageOutset;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageRepeat;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageSlice;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageSource;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskClip;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskComposite;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskImage;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskPosition;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskPositionX;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskPositionY;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskRepeat;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskRepeatX;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskRepeatY;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskSize;\n/** @type {string} */\nCSSProperties.prototype.WebkitMatchNearestMailBlockquoteColor;\n/** @type {string} */ CSSProperties.prototype.WebkitMaxLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.WebkitMaxLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitMinLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.WebkitMinLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitNbspMode;\n/** @type {string} */ CSSProperties.prototype.WebkitOrder;\n/** @type {string} */ CSSProperties.prototype.WebkitOverflowScrolling;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingEnd;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingStart;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspective;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspectiveOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspectiveOriginX;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspectiveOriginY;\n/** @type {string} */ CSSProperties.prototype.WebkitPrintColorAdjust;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionBreakAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionBreakBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionBreakInside;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionOverflow;\n/** @type {string} */ CSSProperties.prototype.WebkitRtlOrdering;\n/** @type {string} */ CSSProperties.prototype.WebkitRubyPosition;\n/** @type {string} */ CSSProperties.prototype.WebkitShapeInside;\n/** @type {string} */ CSSProperties.prototype.WebkitShapeMargin;\n/** @type {string} */ CSSProperties.prototype.WebkitShapeOutside;\n/** @type {string} */ CSSProperties.prototype.WebkitShapePadding;\n/** @type {string} */ CSSProperties.prototype.WebkitTapHighlightColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextAlignLast;\n/** @type {string} */ CSSProperties.prototype.WebkitTextCombine;\n/** @type {string} */ CSSProperties.prototype.WebkitTextDecorationLine;\n/** @type {string} */ CSSProperties.prototype.WebkitTextDecorationsInEffect;\n/** @type {string} */ CSSProperties.prototype.WebkitTextDecorationStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasis;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasisColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasisPosition;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasisStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitTextFillColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextOrientation;\n/** @type {string} */ CSSProperties.prototype.WebkitTextSecurity;\n/** @type {string} */ CSSProperties.prototype.WebkitTextSizeAdjust;\n/** @type {string} */ CSSProperties.prototype.WebkitTextStroke;\n/** @type {string} */ CSSProperties.prototype.WebkitTextStrokeColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextStrokeWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitTransform;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOriginX;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOriginY;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOriginZ;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitTransition;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionDelay;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionDuration;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionProperty;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionRepeatCount;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionTimingFunction;\n/** @type {string} */ CSSProperties.prototype.WebkitUserDrag;\n/** @type {string} */ CSSProperties.prototype.WebkitUserModify;\n/** @type {string} */ CSSProperties.prototype.WebkitUserSelect;\n/** @type {string} */ CSSProperties.prototype.WebkitWrap;\n/** @type {string} */ CSSProperties.prototype.WebkitWrapFlow;\n/** @type {string} */ CSSProperties.prototype.WebkitWrapThrough;\n/** @type {string} */ CSSProperties.prototype.WebkitWritingMode;\n\n// WebKit also adds bindings for the lowercase versions of these properties.\n// The uppercase version is preferred.\n\n/** @type {string} */ CSSProperties.prototype.webkitAlignContent;\n/** @type {string} */ CSSProperties.prototype.webkitAlignItems;\n/** @type {string} */ CSSProperties.prototype.webkitAlignSelf;\n/** @type {string} */ CSSProperties.prototype.webkitAnimation;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationDelay;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationDirection;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationDuration;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationFillMode;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationIterationCount;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationName;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationPlayState;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationTimingFunction;\n/** @type {string} */ CSSProperties.prototype.webkitAppearance;\n/** @type {string} */ CSSProperties.prototype.webkitAppRegion;\n/** @type {string} */ CSSProperties.prototype.webkitAspectRatio;\n/** @type {string} */ CSSProperties.prototype.webkitBackfaceVisibility;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundClip;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundComposite;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundSize;\n/** @type {string} */ CSSProperties.prototype.webkitBinding;\n/** @type {string} */ CSSProperties.prototype.webkitBlendMode;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfter;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfterColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfterStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfterWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBefore;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBeforeColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBeforeStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBeforeWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBottomLeftRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBottomRightRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEnd;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEndColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEndStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEndWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderFit;\n/** @type {string} */ CSSProperties.prototype.webkitBorderHorizontalSpacing;\n/** @type {string} */ CSSProperties.prototype.webkitBorderImage;\n/** @type {string} */ CSSProperties.prototype.webkitBorderRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStart;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStartColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStartStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStartWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderTopLeftRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderTopRightRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderVerticalSpacing;\n/** @type {string} */ CSSProperties.prototype.webkitBoxAlign;\n/** @type {string} */ CSSProperties.prototype.webkitBoxDecorationBreak;\n/** @type {string} */ CSSProperties.prototype.webkitBoxDirection;\n/** @type {string} */ CSSProperties.prototype.webkitBoxFlex;\n/** @type {string} */ CSSProperties.prototype.webkitBoxFlexGroup;\n/** @type {string} */ CSSProperties.prototype.webkitBoxLines;\n/** @type {string} */ CSSProperties.prototype.webkitBoxOrdinalGroup;\n/** @type {string} */ CSSProperties.prototype.webkitBoxOrient;\n/** @type {string} */ CSSProperties.prototype.webkitBoxPack;\n/** @type {string} */ CSSProperties.prototype.webkitBoxReflect;\n/** @type {string} */ CSSProperties.prototype.webkitBoxShadow;\n/** @type {string} */ CSSProperties.prototype.webkitBoxSizing;\n/** @type {string} */ CSSProperties.prototype.webkitColorCorrection;\n/** @type {string} */ CSSProperties.prototype.webkitColumnAxis;\n/** @type {string} */ CSSProperties.prototype.webkitColumnBreakAfter;\n/** @type {string} */ CSSProperties.prototype.webkitColumnBreakBefore;\n/** @type {string} */ CSSProperties.prototype.webkitColumnBreakInside;\n/** @type {string} */ CSSProperties.prototype.webkitColumnCount;\n/** @type {string} */ CSSProperties.prototype.webkitColumnGap;\n/** @type {string} */ CSSProperties.prototype.webkitColumnProgression;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRule;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRuleColor;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRuleStyle;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRuleWidth;\n/** @type {string} */ CSSProperties.prototype.webkitColumns;\n/** @type {string} */ CSSProperties.prototype.webkitColumnSpan;\n/** @type {string} */ CSSProperties.prototype.webkitColumnWidth;\n/** @type {string} */ CSSProperties.prototype.webkitDashboardRegion;\n/** @type {string} */ CSSProperties.prototype.webkitFilter;\n/** @type {string} */ CSSProperties.prototype.webkitFlex;\n/** @type {string} */ CSSProperties.prototype.webkitFlexBasis;\n/** @type {string} */ CSSProperties.prototype.webkitFlexDirection;\n/** @type {string} */ CSSProperties.prototype.webkitFlexFlow;\n/** @type {string} */ CSSProperties.prototype.webkitFlexGrow;\n/** @type {string} */ CSSProperties.prototype.webkitFlexShrink;\n/** @type {string} */ CSSProperties.prototype.webkitFlexWrap;\n/** @type {string} */ CSSProperties.prototype.webkitFlowFrom;\n/** @type {string} */ CSSProperties.prototype.webkitFlowInto;\n/** @type {string} */ CSSProperties.prototype.webkitFontSizeDelta;\n/** @type {string} */ CSSProperties.prototype.webkitFontSmoothing;\n/** @type {string} */ CSSProperties.prototype.webkitGridColumn;\n/** @type {string} */ CSSProperties.prototype.webkitGridColumns;\n/** @type {string} */ CSSProperties.prototype.webkitGridRow;\n/** @type {string} */ CSSProperties.prototype.webkitGridRows;\n/** @type {string} */ CSSProperties.prototype.webkitHighlight;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateCharacter;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateLimitAfter;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateLimitBefore;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateLimitLines;\n/** @type {string} */ CSSProperties.prototype.webkitHyphens;\n/** @type {string} */ CSSProperties.prototype.webkitJustifyContent;\n/** @type {string} */ CSSProperties.prototype.webkitLineAlign;\n/** @type {string} */ CSSProperties.prototype.webkitLineBoxContain;\n/** @type {string} */ CSSProperties.prototype.webkitLineBreak;\n/** @type {string} */ CSSProperties.prototype.webkitLineClamp;\n/** @type {string} */ CSSProperties.prototype.webkitLineGrid;\n/** @type {string} */ CSSProperties.prototype.webkitLineSnap;\n/** @type {string} */ CSSProperties.prototype.webkitLocale;\n/** @type {string} */ CSSProperties.prototype.webkitLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.webkitLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.webkitMarginAfter;\n/** @type {string} */ CSSProperties.prototype.webkitMarginAfterCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginBefore;\n/** @type {string} */ CSSProperties.prototype.webkitMarginBeforeCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginBottomCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginEnd;\n/** @type {string} */ CSSProperties.prototype.webkitMarginStart;\n/** @type {string} */ CSSProperties.prototype.webkitMarginTopCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarquee;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeDirection;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeIncrement;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeRepetition;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeSpeed;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeStyle;\n/** @type {string} */ CSSProperties.prototype.webkitMask;\n/** @type {string} */ CSSProperties.prototype.webkitMaskAttachment;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImage;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageOutset;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageRepeat;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageSlice;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageSource;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageWidth;\n/** @type {string} */ CSSProperties.prototype.webkitMaskClip;\n/** @type {string} */ CSSProperties.prototype.webkitMaskComposite;\n/** @type {string} */ CSSProperties.prototype.webkitMaskImage;\n/** @type {string} */ CSSProperties.prototype.webkitMaskOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitMaskPosition;\n/** @type {string} */ CSSProperties.prototype.webkitMaskPositionX;\n/** @type {string} */ CSSProperties.prototype.webkitMaskPositionY;\n/** @type {string} */ CSSProperties.prototype.webkitMaskRepeat;\n/** @type {string} */ CSSProperties.prototype.webkitMaskRepeatX;\n/** @type {string} */ CSSProperties.prototype.webkitMaskRepeatY;\n/** @type {string} */ CSSProperties.prototype.webkitMaskSize;\n/** @type {string} */\nCSSProperties.prototype.webkitMatchNearestMailBlockquoteColor;\n/** @type {string} */ CSSProperties.prototype.webkitMaxLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.webkitMaxLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.webkitMinLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.webkitMinLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.webkitNbspMode;\n/** @type {string} */ CSSProperties.prototype.webkitOrder;\n/** @type {string} */ CSSProperties.prototype.webkitOverflowScrolling;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingAfter;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingBefore;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingEnd;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingStart;\n/** @type {string} */ CSSProperties.prototype.webkitPerspective;\n/** @type {string} */ CSSProperties.prototype.webkitPerspectiveOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitPerspectiveOriginX;\n/** @type {string} */ CSSProperties.prototype.webkitPerspectiveOriginY;\n/** @type {string} */ CSSProperties.prototype.webkitPrintColorAdjust;\n/** @type {string} */ CSSProperties.prototype.webkitRegionBreakAfter;\n/** @type {string} */ CSSProperties.prototype.webkitRegionBreakBefore;\n/** @type {string} */ CSSProperties.prototype.webkitRegionBreakInside;\n/** @type {string} */ CSSProperties.prototype.webkitRegionOverflow;\n/** @type {string} */ CSSProperties.prototype.webkitRtlOrdering;\n/** @type {string} */ CSSProperties.prototype.webkitRubyPosition;\n/** @type {string} */ CSSProperties.prototype.webkitShapeInside;\n/** @type {string} */ CSSProperties.prototype.webkitShapeMargin;\n/** @type {string} */ CSSProperties.prototype.webkitShapeOutside;\n/** @type {string} */ CSSProperties.prototype.webkitShapePadding;\n/** @type {string} */ CSSProperties.prototype.webkitTapHighlightColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextAlignLast;\n/** @type {string} */ CSSProperties.prototype.webkitTextCombine;\n/** @type {string} */ CSSProperties.prototype.webkitTextDecorationLine;\n/** @type {string} */ CSSProperties.prototype.webkitTextDecorationsInEffect;\n/** @type {string} */ CSSProperties.prototype.webkitTextDecorationStyle;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasis;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasisColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasisPosition;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasisStyle;\n/** @type {string} */ CSSProperties.prototype.webkitTextFillColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextOrientation;\n/** @type {string} */ CSSProperties.prototype.webkitTextSecurity;\n/** @type {string} */ CSSProperties.prototype.webkitTextSizeAdjust;\n/** @type {string} */ CSSProperties.prototype.webkitTextStroke;\n/** @type {string} */ CSSProperties.prototype.webkitTextStrokeColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextStrokeWidth;\n/** @type {string} */ CSSProperties.prototype.webkitTransform;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOriginX;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOriginY;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOriginZ;\n/** @type {string} */ CSSProperties.prototype.webkitTransformStyle;\n/** @type {string} */ CSSProperties.prototype.webkitTransition;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionDelay;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionDuration;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionProperty;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionRepeatCount;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionTimingFunction;\n/** @type {string} */ CSSProperties.prototype.webkitUserDrag;\n/** @type {string} */ CSSProperties.prototype.webkitUserModify;\n/** @type {string} */ CSSProperties.prototype.webkitUserSelect;\n/** @type {string} */ CSSProperties.prototype.webkitWrap;\n/** @type {string} */ CSSProperties.prototype.webkitWrapFlow;\n/** @type {string} */ CSSProperties.prototype.webkitWrapThrough;\n/** @type {string} */ CSSProperties.prototype.webkitWritingMode;\n\n/**\n * @constructor\n * @param {number} x\n * @param {number} y\n */\nfunction WebKitPoint(x, y) {}\n\n/** @type {number} */\nWebKitPoint.prototype.x;\n\n/** @type {number} */\nWebKitPoint.prototype.y;\n', --"externs/google_legacy.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Declaration of the type level google namespace.\n * @externs\n * @author nicksantos@google.com (Nick Santos)\n */\n\n/**\n * Suppresses the compiler warning when multiple externs files declare the\n * google namespace.\n * @suppress {duplicate,strictMissingProperties}\n * NOTE: This definition should be marked \\@const, and when it is we can remove\n * the "strictMissingProperties" suppression.\n */\n// TODO(nicksantos): Consolidate to one google namespace declaration.\nvar google = {};\n', --"externs/deprecated.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview JavaScript Built-Ins that are not part of any specifications\n * but are still needed in some project\'s build.\n * @externs\n */\nvar opera = {};\n\nopera.postError;\n\n/** @nosideeffects */\nopera.version = function() {};\n\n/** @constructor */\nfunction XSLTProcessor() {}\n\n/**\n * @constructor\n * @extends {HTMLOptionElement}\n * @param {*=} opt_text\n * @param {*=} opt_value\n * @param {*=} opt_defaultSelected\n * @param {*=} opt_selected\n */\nfunction Option(opt_text, opt_value, opt_defaultSelected, opt_selected) {}\n\n\n// The "methods" object is a place to hang arbitrary external\n// properties. It is a throwback to pre-typed days, and should\n// not be used for any new definitions; it exists only to bridge\n// the gap between the old way and the new way.\nvar methods = {};\n\n/**\n * FF 1.5+ only\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @return {boolean}\n * @template T,S\n * @deprecated\n */\nArray.every = function(arr, callback, opt_context) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @return {!Array}\n * @template T,S\n * @deprecated\n */\nArray.filter = function(arr, callback, opt_context) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @template T,S\n * @return {undefined}\n * @deprecated\n */\nArray.forEach = function(arr, callback, opt_context) {};\n\n/**\n * Mozilla 1.6+ only.\n * @param {IArrayLike} arr\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @template T\n * @nosideeffects\n * @deprecated\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf\n */\nArray.indexOf = function(arr, obj, opt_fromIndex) {};\n\n/**\n * Mozilla 1.6+ only.\n * @param {IArrayLike} arr\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @template T\n * @nosideeffects\n * @deprecated\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf\n */\nArray.lastIndexOf = function(arr, obj, opt_fromIndex) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, !Array): R} callback\n * @param {S=} opt_context\n * @return {!Array}\n * @deprecated\n * @template T,S,R\n */\nArray.map = function(arr, callback, opt_context) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @return {boolean}\n * @deprecated\n * @template T,S\n */\nArray.some = function(arr, callback, opt_context) {};\n', --"externs/es6_proxy.js":'/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 6 Proxy objects.\n * @see https://tc39.github.io/ecma262/#sec-proxy-objects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy\n * @externs\n */\n\n\n/**\n * @record\n * @template TARGET\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler\n */\nfunction ProxyHandler() {}\n\n/**\n * @type {(function(TARGET):?Object)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-getprototypeof\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/getPrototypeOf\n */\nProxyHandler.prototype.getPrototypeOf /* = function(target) {} */;\n\n/**\n * @type {(function(TARGET, ?Object):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/setPrototypeOf\n */\nProxyHandler.prototype.setPrototypeOf /* = function(target, proto) {} */;\n\n/**\n * @type {(function(TARGET):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-isextensible\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/isExtensible\n */\nProxyHandler.prototype.isExtensible /* = function(target) {} */;\n\n/**\n * @type {(function(TARGET):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-preventextensions\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/preventExtensions\n */\nProxyHandler.prototype.preventExtensions /* = function(target) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol)):(!ObjectPropertyDescriptor|undefined))|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/getOwnPropertyDescriptor\n */\nProxyHandler.prototype.getOwnPropertyDescriptor /* = function(target, prop) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol), !ObjectPropertyDescriptor):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/defineProperty\n */\nProxyHandler.prototype.defineProperty /* = function(target, prop, desc) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol)):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/has\n */\nProxyHandler.prototype.has /* = function(target, prop) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol), !Object):*)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/get\n */\nProxyHandler.prototype.get /* = function(target, prop, receiver) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol), *, !Object):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/set\n */\nProxyHandler.prototype.set /* = function(target, prop, value, receiver) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol)):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-delete-p\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/deleteProperty\n */\nProxyHandler.prototype.deleteProperty /* = function (target, prop) {} */;\n\n/**\n * @type {(function(TARGET):!Array<(string|symbol)>)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/ownKeys\n */\nProxyHandler.prototype.ownKeys /* = function(target) {} */;\n\n/**\n * @type {(function(TARGET, *, !Array):*)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/apply\n */\nProxyHandler.prototype.apply /* = function(target, thisArg, argList) {} */;\n\n/**\n * @type {(function(TARGET, !Array, function(new: ?, ...?)):!Object)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/construct\n */\nProxyHandler.prototype.construct /* = function(target, argList, newTarget) {} */;\n\n\n/**\n * @constructor\n * @param {TARGET} target\n * @param {!ProxyHandler} handler\n * @template TARGET\n * @see https://tc39.github.io/ecma262/#sec-proxy-constructor\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy#Syntax\n */\nfunction Proxy(target, handler) {}\n\n/**\n * @param {TARGET} target\n * @param {!ProxyHandler} handler\n * @return {{proxy: !Proxy, revoke: function():void}}\n * @template TARGET\n * @see https://tc39.github.io/ecma262/#sec-proxy.revocable\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/revocable\n */\nProxy.revocable = function(target, handler) {};\n', --"externs/fido.js":'/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions from the FIDO Specifications\n * @see https://fidoalliance.org/download/\n *\n * @externs\n * @author arnarbi@gmail.com (Arnar Birgisson)\n */\n\n/**\n * U2F JavaScript API namespace\n * @see https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-javascript-api-v1.2-ps-20170411.html\n * @const\n */\nvar u2f = {};\n\n/**\n * Data object for a single sign request.\n * @typedef {string}\n */\nu2f.Transport;\n\n/**\n * Data object for a registered key.\n * @typedef {{\n * version: string,\n * keyHandle: string,\n * transports: (!Array|undefined),\n * appId: ?string\n * }}\n */\nu2f.RegisteredKey;\n\n/**\n * An error object for responses\n * @typedef {{\n * errorCode: number,\n * errorMessage: ?string\n * }}\n */\nu2f.Error;\n\n/**\n * Data object for a sign response.\n * @typedef {{\n * keyHandle: string,\n * signatureData: string,\n * clientData: string\n * }}\n */\nu2f.SignResponse;\n\n/**\n * @typedef {{\n * version: string,\n * challenge: string\n * }}\n */\nu2f.RegisterRequest\n\n/**\n * @param {string} appId\n * @param {string} challenge\n * @param {!Array} registeredKeys\n * @param {function((!u2f.Error|!u2f.SignResponse))} callback\n * @param {number=} opt_timeoutSeconds\n */\nu2f.sign = function(\n appId, challenge, registeredKeys, callback, opt_timeoutSeconds) {};\n\n/**\n * @param {string} appId\n * @param {!Array} registerRequests\n * @param {!Array} registeredKeys\n * @param {function((!u2f.Error|!u2f.SignResponse))} callback\n * @param {number=} opt_timeoutSeconds\n */\nu2f.register = function(\n appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) {};\n', -+"externs/w3c_dom1.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's DOM Level 1 specification.\n * The whole file has been fully type annotated. Created from\n * http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n * @author stevey@9oo91e.qjz9zk (Steve Yegge)\n */\n\n/**\n * @constructor\n * @param {string=} message\n * @param {string=} name\n * @see https://heycam.github.io/webidl/#idl-DOMException\n */\nfunction DOMException(message, name) {}\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.INDEX_SIZE_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.DOMSTRING_SIZE_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.HIERARCHY_REQUEST_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.WRONG_DOCUMENT_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.INVALID_CHARACTER_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NO_DATA_ALLOWED_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NO_MODIFICATION_ALLOWED_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NOT_FOUND_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NOT_SUPPORTED_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.INUSE_ATTRIBUTE_ERR;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nfunction ExceptionCode() {}\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-102161490\n */\nfunction DOMImplementation() {}\n\n/**\n * @param {string} feature\n * @param {string} version\n * @return {boolean}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-5CED94D7\n * @nosideeffects\n */\nDOMImplementation.prototype.hasFeature = function(feature, version) {};\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nfunction Node() {}\n\n/** @override */\nNode.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nNode.prototype.removeEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nNode.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {NamedNodeMap}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-attributes\n */\nNode.prototype.attributes;\n\n/**\n * @type {!NodeList}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-childNodes\n */\nNode.prototype.childNodes;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-firstChild\n */\nNode.prototype.firstChild;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-lastChild\n */\nNode.prototype.lastChild;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nextSibling\n */\nNode.prototype.nextSibling;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nodeName\n */\nNode.prototype.nodeName;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nodeValue\n */\nNode.prototype.nodeValue;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nodeType\n */\nNode.prototype.nodeType;\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-ownerDocument\n */\nNode.prototype.ownerDocument;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-parentNode\n */\nNode.prototype.parentNode;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-previousSibling\n */\nNode.prototype.previousSibling;\n\n/**\n * @param {Node} newChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-appendChild\n */\nNode.prototype.appendChild = function(newChild) {};\n\n/**\n * @param {boolean} deep\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-cloneNode\n * @nosideeffects\n */\nNode.prototype.cloneNode = function(deep) {};\n\n/**\n * @return {boolean}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-hasChildNodes\n * @nosideeffects\n */\nNode.prototype.hasChildNodes = function() {};\n\n/**\n * @param {Node} newChild\n * @param {Node} refChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-insertBefore\n */\nNode.prototype.insertBefore = function(newChild, refChild) {};\n\n/**\n * @param {Node} oldChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-removeChild\n */\nNode.prototype.removeChild = function(oldChild) {};\n\n/**\n * @param {Node} newChild\n * @param {Node} oldChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-replaceChild\n */\nNode.prototype.replaceChild = function(newChild, oldChild) {};\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ATTRIBUTE_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.CDATA_SECTION_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.COMMENT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.DOCUMENT_FRAGMENT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.DOCUMENT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.DOCUMENT_TYPE_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ELEMENT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ENTITY_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ENTITY_REFERENCE_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.PROCESSING_INSTRUCTION_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.TEXT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.NOTATION_NODE;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-B63ED1A3\n */\nfunction DocumentFragment() {}\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#i-Document\n */\nfunction Document() {}\n\n/**\n * @type {DocumentType}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-doctype\n */\nDocument.prototype.doctype;\n\n/**\n * @type {!HTMLHtmlElement}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-documentElement\n */\nDocument.prototype.documentElement;\n\n/**\n * @type {DOMImplementation}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-implementation\n */\nDocument.prototype.implementation;\n\n/**\n * @param {string} name\n * @return {!Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createAttribute\n * @nosideeffects\n */\nDocument.prototype.createAttribute = function(name) {};\n\n/**\n * @param {string} data\n * @return {!Comment}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createComment\n * @nosideeffects\n */\nDocument.prototype.createComment = function(data) {};\n\n/**\n * @param {string} data\n * @return {!CDATASection}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createCDATASection\n * @nosideeffects\n */\nDocument.prototype.createCDATASection = function(data) {};\n\n/**\n * @return {!DocumentFragment}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createDocumentFragment\n * @nosideeffects\n */\nDocument.prototype.createDocumentFragment = function() {};\n\n/**\n * Create a DOM element.\n *\n * Web components introduced the second parameter as a way of extending existing\n * tags (e.g. document.createElement('button', 'fancy-button')).\n *\n * @param {string} tagName\n * @param {string=} opt_typeExtension\n * @return {!Element}\n * @nosideeffects\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createElement\n * @see http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-instantiate\n */\nDocument.prototype.createElement = function(tagName, opt_typeExtension) {};\n\n/**\n * @param {string} target\n * @param {string} data\n * @return {!ProcessingInstruction}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createProcessingInstruction\n * @nosideeffects\n */\nDocument.prototype.createProcessingInstruction = function(target, data) {};\n\n/**\n * @param {number|string} data\n * @return {!Text}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createTextNode\n * @nosideeffects\n */\nDocument.prototype.createTextNode = function(data) {};\n\n/**\n * @param {string} tagname\n * @return {!NodeList}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-A6C9094\n * @nosideeffects\n */\nDocument.prototype.getElementsByTagName = function(tagname) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Document/open\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-open\n */\nDocument.prototype.open;\n\n/**\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-close\n */\nDocument.prototype.close = function() {};\n\n/**\n * @param {!TrustedHTML|string} text\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-write\n */\nDocument.prototype.write = function(text) {};\n\n/**\n * @param {!TrustedHTML|string} text\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-writeln\n */\nDocument.prototype.writeln = function(text) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @template T\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-536297177\n */\nfunction NodeList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-203510337\n */\nNodeList.prototype.length;\n\n/**\n * @param {number} index\n * @return {T|null}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-844377136\n */\nNodeList.prototype.item = function(index) {};\n\n/**\n * @param {?function(this:S, T, number, !NodeList): ?} callback\n * @param {S=} opt_thisobj\n * @template S\n * @return {undefined}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/NodeList/forEach\n */\nNodeList.prototype.forEach = function(callback, opt_thisobj) {};\n\n/**\n * @constructor\n * @implements {IObject<(string|number), T>}\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @template T\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1780488922\n */\nfunction NamedNodeMap() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-6D0FB19E\n */\nNamedNodeMap.prototype.length;\n\n/**\n * @param {string} name\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1074577549\n * @nosideeffects\n */\nNamedNodeMap.prototype.getNamedItem = function(name) {};\n\n/**\n * @param {number} index\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-349467F9\n * @nosideeffects\n */\nNamedNodeMap.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-D58B193\n */\nNamedNodeMap.prototype.removeNamedItem = function(name) {};\n\n/**\n * @param {Node} arg\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1025163788\n */\nNamedNodeMap.prototype.setNamedItem = function(arg) {};\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-FF21A306\n */\nfunction CharacterData() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-72AB8359\n */\nCharacterData.prototype.data;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-7D61178C\n */\nCharacterData.prototype.length;\n\n/**\n * @param {string} arg\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-32791A2F\n */\nCharacterData.prototype.appendData = function(arg) {};\n\n/**\n * @param {number} offset\n * @param {number} count\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-7C603781\n */\nCharacterData.prototype.deleteData = function(offset, count) {};\n\n/**\n * @param {number} offset\n * @param {string} arg\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-3EDB695F\n */\nCharacterData.prototype.insertData = function(offset, arg) {};\n\n/**\n * @param {number} offset\n * @param {number} count\n * @param {string} arg\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-E5CBA7FB\n */\nCharacterData.prototype.replaceData = function(offset, count, arg) {};\n\n/**\n * @param {number} offset\n * @param {number} count\n * @return {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-6531BCCF\n * @nosideeffects\n */\nCharacterData.prototype.substringData = function(offset, count) {};\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-637646024\n */\nfunction Attr() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1112119403\n */\nAttr.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-862529273\n */\nAttr.prototype.specified;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-221662474\n */\nAttr.prototype.value;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-745549614\n */\nfunction Element() {}\n\n/**\n * @type {string}\n * @implicitCast\n * @see https://dom.spec.whatwg.org/index.html#dom-element-id\n */\nElement.prototype.id;\n\n/**\n * An Element always contains a non-null NamedNodeMap containing the attributes\n * of this node.\n * @type {!NamedNodeMap}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-attributes\n */\nElement.prototype.attributes;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-tagName\n */\nElement.prototype.tagName;\n\n/**\n * @implicitCast\n * @type {?}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Element/className\n * We type it as ? even though it is a string, because some SVG elements have\n * className that is an object, which isn't a subtype of string.\n * Alternative: TypeScript types this as string and types className on\n * SVGElement as ?.\n */\nElement.prototype.className;\n\n/**\n * @param {string} name\n * @param {?number=} flags\n * @return {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-getAttribute\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536429(VS.85).aspx\n * @nosideeffects\n */\nElement.prototype.getAttribute = function(name, flags) {};\n\n/**\n * @param {string} name\n * @return {Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-getAttributeNode\n * @nosideeffects\n */\nElement.prototype.getAttributeNode = function(name) {};\n\n/**\n * @param {string} tagname\n * @return {!NodeList}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1938918D\n * @nosideeffects\n */\nElement.prototype.getElementsByTagName = function(tagname) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-removeAttribute\n */\nElement.prototype.removeAttribute = function(name) {};\n\n/**\n * @param {Attr} oldAttr\n * @return {?Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-removeAttributeNode\n */\nElement.prototype.removeAttributeNode = function(oldAttr) {};\n\n/**\n * @param {string} name\n * @param {string|number|boolean|!TrustedHTML|!TrustedScriptURL|!TrustedURL}\n * value Values are converted to strings with ToString, so we accept number\n * and boolean since both convert easily to strings.\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-setAttribute\n */\nElement.prototype.setAttribute = function(name, value) {};\n\n/**\n * @param {Attr} newAttr\n * @return {?Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-setAttributeNode\n */\nElement.prototype.setAttributeNode = function(newAttr) {};\n\n// Event handlers\n// The DOM level 3 spec has a good index of these\n// http://www.w3.org/TR/DOM-Level-3-Events/#event-types\n\n/** @type {?function (Event)} */ Element.prototype.onabort;\n/** @type {?function (Event)} */ Element.prototype.onbeforeinput;\n/** @type {?function (Event)} */ Element.prototype.onbeforeunload;\n/** @type {?function (Event)} */ Element.prototype.onblur;\n/** @type {?function (Event)} */ Element.prototype.onchange;\n/** @type {?function (Event)} */ Element.prototype.onclick;\n/** @type {?function (Event)} */ Element.prototype.oncompositionstart;\n/** @type {?function (Event)} */ Element.prototype.oncompositionupdate;\n/** @type {?function (Event)} */ Element.prototype.oncompositionend;\n/** @type {?function (Event)} */ Element.prototype.oncontextmenu;\n/** @type {?function (Event)} */ Element.prototype.oncopy;\n/** @type {?function (Event)} */ Element.prototype.oncut;\n/** @type {?function (Event)} */ Element.prototype.ondblclick;\n/** @type {?function (Event)} */ Element.prototype.onerror;\n/** @type {?function (Event)} */ Element.prototype.onfocus;\n/** @type {?function (Event)} */ Element.prototype.onfocusin;\n/** @type {?function (Event)} */ Element.prototype.onfocusout;\n/** @type {?function (Event)} */ Element.prototype.oninput;\n/** @type {?function (Event)} */ Element.prototype.onkeydown;\n/** @type {?function (Event)} */ Element.prototype.onkeypress;\n/** @type {?function (Event)} */ Element.prototype.onkeyup;\n/** @type {?function (Event): void} */ Element.prototype.onload;\n/** @type {?function (Event): void} */ Element.prototype.onunload;\n/** @type {?function (Event)} */ Element.prototype.onmousedown;\n/** @type {?function (Event)} */ Element.prototype.onmousemove;\n/** @type {?function (Event)} */ Element.prototype.onmouseout;\n/** @type {?function (Event)} */ Element.prototype.onmouseover;\n/** @type {?function (Event)} */ Element.prototype.onmouseup;\n/** @type {?function (Event)} */ Element.prototype.onmousewheel;\n/** @type {?function (Event)} */ Element.prototype.onpaste;\n/** @type {?function (Event)} */ Element.prototype.onreset;\n/** @type {?function (Event)} */ Element.prototype.onresize;\n/** @type {?function (Event)} */ Element.prototype.onscroll;\n/** @type {?function (Event)} */ Element.prototype.onselect;\n/** @type {?function (Event=)} */ Element.prototype.onsubmit;\n/** @type {?function (Event)} */ Element.prototype.ontextinput;\n/** @type {?function (Event)} */ Element.prototype.onwheel;\n\n/**\n * @constructor\n * @extends {CharacterData}\n * @param {string=} contents Optional textual content.\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1312295772\n */\nfunction Text(contents) {}\n\n/**\n * @param {number} offset\n * @return {Text}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-38853C1D\n */\nText.prototype.splitText = function(offset) {};\n\n/**\n * @constructor\n * @extends {CharacterData}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1728279322\n */\nfunction Comment() {}\n\n/**\n * @constructor\n * @extends {Text}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-667469212\n */\nfunction CDATASection() {}\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-412266927\n */\nfunction DocumentType() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1844763134\n */\nDocumentType.prototype.name;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1004215813\n */\nfunction ProcessingInstruction() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-837822393\n */\nProcessingInstruction.prototype.data;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1478689192\n */\nProcessingInstruction.prototype.target;\n\n\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction Window() {}\nWindow.prototype.Window;\n\n/** @override */\nWindow.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWindow.prototype.removeEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWindow.prototype.dispatchEvent = function(evt) {};\n\n/** @type {?function (Event)} */ Window.prototype.onabort;\n/** @type {?function (Event)} */ Window.prototype.onbeforeunload;\n/** @type {?function (Event)} */ Window.prototype.onblur;\n/** @type {?function (Event)} */ Window.prototype.onchange;\n/** @type {?function (Event)} */ Window.prototype.onclick;\n/** @type {?function (Event)} */ Window.prototype.onclose;\n/** @type {?function (Event)} */ Window.prototype.oncontextmenu;\n/** @type {?function (Event)} */ Window.prototype.ondblclick;\n/** @type {?function (Event)} */ Window.prototype.ondragdrop;\n// onerror has a special signature.\n// See\n// https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/GlobalEventHandlers/onerror\n/**\n * @type {?function (string, string, number, number, !Error):?}\n */\nWindow.prototype.onerror;\n/** @type {?function (Event)} */ Window.prototype.onfocus;\n/** @type {?function (Event)} */ Window.prototype.onhashchange;\n/** @type {?function (Event)} */ Window.prototype.onkeydown;\n/** @type {?function (Event)} */ Window.prototype.onkeypress;\n/** @type {?function (Event)} */ Window.prototype.onkeyup;\n/** @type {?function (Event)} */ Window.prototype.onload;\n/** @type {?function (Event)} */ Window.prototype.onmousedown;\n/** @type {?function (Event)} */ Window.prototype.onmousemove;\n/** @type {?function (Event)} */ Window.prototype.onmouseout;\n/** @type {?function (Event)} */ Window.prototype.onmouseover;\n/** @type {?function (Event)} */ Window.prototype.onmouseup;\n/** @type {?function (Event)} */ Window.prototype.onmousewheel;\n/** @type {?function (Event)} */ Window.prototype.onpaint;\n/** @type {?function (Event)} */ Window.prototype.onpopstate;\n/** @type {?function (Event)} */ Window.prototype.onreset;\n/** @type {?function (Event)} */ Window.prototype.onresize;\n/** @type {?function (Event)} */ Window.prototype.onscroll;\n/** @type {?function (Event)} */ Window.prototype.onselect;\n/** @type {?function (Event=)} */ Window.prototype.onsubmit;\n/** @type {?function (Event)} */ Window.prototype.onunhandledrejection;\n/** @type {?function (Event)} */ Window.prototype.onunload;\n/** @type {?function (Event)} */ Window.prototype.onwheel;\n", -+"externs/w3c_dom2.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s DOM Level 2 specification.\n * This file depends on w3c_dom1.js.\n * The whole file has been fully type annotated.\n * Created from\n * http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n *\n * @externs\n */\n\n/**\n * @param {string} s id.\n * @return {Element}\n * @nosideeffects\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-getElBId\n */\nDocument.prototype.getElementById = function(s) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} qualifiedName\n * @param {string=} opt_typeExtension\n * @return {!Element}\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-DocCrElNS\n */\nDocument.prototype.createElementNS =\n function(namespaceURI, qualifiedName, opt_typeExtension) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} qualifiedName\n * @return {!Attr}\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-DocCrElNS\n */\nDocument.prototype.createAttributeNS =\n function(namespaceURI, qualifiedName) {};\n\n/**\n * @param {Node} root\n * @param {number=} whatToShow\n * @param {NodeFilter=} filter\n * @param {boolean=} entityReferenceExpansion\n * @return {!NodeIterator}\n * @see https://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/traversal.html#Traversal-Document\n * @see https://dom.spec.whatwg.org/#interface-document\n * @nosideeffects\n */\nDocument.prototype.createNodeIterator = function(\n root, whatToShow, filter, entityReferenceExpansion) {};\n\n/**\n * @param {Node} root\n * @param {number=} whatToShow\n * @param {NodeFilter=} filter\n * @param {boolean=} entityReferenceExpansion\n * @return {!TreeWalker}\n * @see https://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/traversal.html#Traversal-Document\n * @see https://dom.spec.whatwg.org/#interface-document\n * @nosideeffects\n */\nDocument.prototype.createTreeWalker = function(\n root, whatToShow, filter, entityReferenceExpansion) {};\n\n/**\n * @param {string} namespace\n * @param {string} name\n * @return {!NodeList}\n * @nosideeffects\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-getElBTNNS\n */\nDocument.prototype.getElementsByTagNameNS = function(namespace, name) {};\n\n/**\n * @param {!Node} externalNode\n * @param {boolean=} deep\n * @return {!Node}\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#Core-Document-importNode\n */\nDocument.prototype.importNode = function(externalNode, deep) {};\n\n/**\n * @constructor\n * @implements {IObject<(string|number),T>}\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @template T\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75708506\n */\nfunction HTMLCollection() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40057551\n */\nHTMLCollection.prototype.length;\n\n/**\n * @param {number} index\n * @return {T|null}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33262535\n * @nosideeffects\n */\nHTMLCollection.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @return {T|null}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-21069976\n * @nosideeffects\n */\nHTMLCollection.prototype.namedItem = function(name) {};\n\n/**\n * @constructor\n * @extends {HTMLCollection}\n * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#htmloptionscollection\n */\nfunction HTMLOptionsCollection() {}\n\n/**\n * @type {number}\n * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#dom-htmloptionscollection-length\n * @nosideeffects\n */\nHTMLOptionsCollection.prototype.length;\n\n/**\n * @param {HTMLOptionElement|HTMLOptGroupElement} element\n * @param {HTMLElement|number=} before\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#dom-htmloptionscollection-add\n */\nHTMLOptionsCollection.prototype.add = function(element, before) {};\n\n/**\n * NOTE(tjgq): The HTMLOptionsCollection#item method is inherited from\n * HTMLCollection, but it must be declared explicitly to work around an error\n * when building a jsinterop library for GWT.\n * @param {number} index\n * @return {HTMLOptionElement}\n * @override\n * @nosideeffects\n */\nHTMLOptionsCollection.prototype.item = function(index) {};\n\n/**\n * @param {number} index\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#dom-htmloptionscollection-remove\n */\nHTMLOptionsCollection.prototype.remove = function(index) {};\n\n/**\n * @constructor\n * @extends {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26809268\n */\nfunction HTMLDocument() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18446827\n */\nHTMLDocument.prototype.title;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95229140\n */\nHTMLDocument.prototype.referrer;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-2250147\n */\nHTMLDocument.prototype.domain;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46183437\n */\nHTMLDocument.prototype.URL;\n\n/**\n * @type {!HTMLBodyElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-56360201\n */\nHTMLDocument.prototype.body;\n\n/**\n * @type {!HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90379117\n */\nHTMLDocument.prototype.images;\n\n/**\n * @type {!HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85113862\n */\nHTMLDocument.prototype.applets;\n\n/**\n * @type {!HTMLCollection<(!HTMLAnchorElement|!HTMLAreaElement)>}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7068919\n */\nHTMLDocument.prototype.links;\n\n/**\n * @type {!HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-1689064\n */\nHTMLDocument.prototype.forms;\n\n/**\n * @type {!HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7577272\n */\nHTMLDocument.prototype.anchors;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8747038\n */\nHTMLDocument.prototype.cookie;\n\n/**\n * @param {string=} opt_mimeType\n * @param {string=} opt_replace\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-72161170\n * Even though official spec says "no parameters" some old browsers might take\n * optional parameters: https://msdn.m1cr050ft.qjz9zk/en-us/library/ms536652(v=vs.85).aspx\n * @override\n */\nHTMLDocument.prototype.open = function(opt_mimeType, opt_replace) {};\n\n/**\n * @param {string} elementName\n * @return {!NodeList}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71555259\n * @nosideeffects\n */\nHTMLDocument.prototype.getElementsByName = function(elementName) {};\n\n\n/** @typedef {{\n createNodeIterator: function(Node, number=, NodeFilter=, boolean=) : NodeIterator,\n createTreeWalker: function(Node, number=, NodeFilter=, boolean=) : TreeWalker\n}} */\nvar TraversalDocument;\n\n/**\n * @record\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeFilter\n*/\nfunction NodeFilter() {}\n\n/* Constants for whatToShow */\n/** @const {number} */ NodeFilter.SHOW_ALL;\n/** @const {number} */ NodeFilter.SHOW_ATTRIBUTE;\n/** @const {number} */ NodeFilter.SHOW_CDATA_SECTION;\n/** @const {number} */ NodeFilter.SHOW_COMMENT;\n/** @const {number} */ NodeFilter.SHOW_DOCUMENT;\n/** @const {number} */ NodeFilter.SHOW_DOCUMENT_FRAGMENT;\n/** @const {number} */ NodeFilter.SHOW_DOCUMENT_TYPE;\n/** @const {number} */ NodeFilter.SHOW_ELEMENT;\n/** @const {number} */ NodeFilter.SHOW_ENTITY;\n/** @const {number} */ NodeFilter.SHOW_ENTITY_REFERENCE;\n/** @const {number} */ NodeFilter.SHOW_NOTATION;\n/** @const {number} */ NodeFilter.SHOW_PROCESSING_INSTRUCTION;\n/** @const {number} */ NodeFilter.SHOW_TEXT;\n\n/* Consants for acceptNode */\n/** @const {number} */ NodeFilter.FILTER_ACCEPT;\n/** @const {number} */ NodeFilter.FILTER_REJECT;\n/** @const {number} */ NodeFilter.FILTER_SKIP;\n\n/**\n * @param {Node} n\n * @return {number} Any of NodeFilter.FILTER_* constants.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeFilter-acceptNode\n*/\nNodeFilter.prototype.acceptNode = function(n) {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator\n*/\nfunction NodeIterator() {}\n\n/**\n * Detach and invalidate the NodeIterator.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator-detach\n * @return {undefined}\n */\nNodeIterator.prototype.detach = function() {};\n\n/**\n * @return {Node} Next node in the set.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator-nextNode\n */\nNodeIterator.prototype.nextNode = function() {};\n\n/**\n * @return {Node} Previous node in the set.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator-previousNode\n */\nNodeIterator.prototype.previousNode = function() {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker\n*/\nfunction TreeWalker() {}\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-firstChild\n */\nTreeWalker.prototype.firstChild = function() {};\n\n/**\n * @return {?Node} The new Node or null..\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-lastChild\n */\nTreeWalker.prototype.lastChild = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-nextNode\n */\nTreeWalker.prototype.nextNode = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-nextSibling\n */\nTreeWalker.prototype.nextSibling = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-parentNode\n */\nTreeWalker.prototype.parentNode = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-previousNode\n */\nTreeWalker.prototype.previousNode = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-previousSibling\n */\nTreeWalker.prototype.previousSibling = function() {};\n\n/**\n * @type {Node}\n */\nTreeWalker.prototype.root;\n\n/**\n * @type {number}\n */\nTreeWalker.prototype.whatToShow;\n\n/**\n * @type {NodeFilter}\n */\nTreeWalker.prototype.filter;\n\n/**\n * @type {boolean}\n */\nTreeWalker.prototype.expandEntityReference;\n\n/**\n * @type {Node}\n */\nTreeWalker.prototype.currentNode;\n\n/**\n * @constructor\n * @extends {Element}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58190037\n */\nfunction HTMLElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78276800\n */\nHTMLElement.prototype.title;\n\n/**\n * @type {!CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ElementCSSInlineStyle\n */\nHTMLElement.prototype.style;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59132807\n */\nHTMLElement.prototype.lang;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52460740\n */\nHTMLElement.prototype.dir;\n\n/**\n * @implicitCast\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95362176\n */\nHTMLElement.prototype.className;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40676705\n */\nHTMLElement.prototype.tabIndex;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33759296\n */\nfunction HTMLHtmlElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9383775\n */\nHTMLHtmlElement.prototype.version;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77253168\n */\nfunction HTMLHeadElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96921909\n */\nHTMLHeadElement.prototype.profile;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @implements {LinkStyle}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35143001\n */\nfunction HTMLLinkElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87355129\n */\nHTMLLinkElement.prototype.disabled;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63954491\n */\nHTMLLinkElement.prototype.charset;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33532588\n */\nHTMLLinkElement.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85145682\n */\nHTMLLinkElement.prototype.hreflang;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75813125\n */\nHTMLLinkElement.prototype.media;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-41369587\n */\nHTMLLinkElement.prototype.rel;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40715461\n */\nHTMLLinkElement.prototype.rev;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84183095\n */\nHTMLLinkElement.prototype.target;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32498296\n */\nHTMLLinkElement.prototype.type;\n\n/** @type {StyleSheet} */\nHTMLLinkElement.prototype.sheet;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79243169\n */\nfunction HTMLTitleElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77500413\n */\nHTMLTitleElement.prototype.text;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-37041454\n */\nfunction HTMLMetaElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87670826\n */\nHTMLMetaElement.prototype.content;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77289449\n */\nHTMLMetaElement.prototype.httpEquiv;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-31037081\n */\nHTMLMetaElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35993789\n */\nHTMLMetaElement.prototype.scheme;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73629039\n */\nfunction HTMLBaseElement() {}\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-65382887\n */\nHTMLBaseElement.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73844298\n */\nHTMLBaseElement.prototype.target;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85283003\n */\nfunction HTMLIsIndexElement() {}\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87069980\n */\nHTMLIsIndexElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33589862\n */\nHTMLIsIndexElement.prototype.prompt;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @implements {LinkStyle}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16428977\n */\nfunction HTMLStyleElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-51162010\n */\nHTMLStyleElement.prototype.disabled;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76412738\n */\nHTMLStyleElement.prototype.media;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22472002\n */\nHTMLStyleElement.prototype.type;\n\n/** @type {StyleSheet} */\nHTMLStyleElement.prototype.sheet;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62018039\n */\nfunction HTMLBodyElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59424581\n */\nHTMLBodyElement.prototype.aLink;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-37574810\n */\nHTMLBodyElement.prototype.background;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-24940084\n */\nHTMLBodyElement.prototype.bgColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7662206\n */\nHTMLBodyElement.prototype.link;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73714763\n */\nHTMLBodyElement.prototype.text;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83224305\n */\nHTMLBodyElement.prototype.vLink;\n\n/**\n * @constructor\n * @extends {HTMLCollection}\n * @implements {IObject)>}\n * @implements {IArrayLike}\n * @template T\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#the-htmlformcontrolscollection-interface\n */\nfunction HTMLFormControlsCollection() {}\n\n/**\n * @param {string} name\n * @return {T|RadioNodeList|null}\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#dom-htmlformcontrolscollection-nameditem\n * @nosideeffects\n * @override\n */\nHTMLFormControlsCollection.prototype.namedItem = function(name) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40002357\n */\nfunction HTMLFormElement() {}\n\n/**\n * @type {!HTMLFormControlsCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76728479\n */\nHTMLFormElement.prototype.elements;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#HTML-HTMLFormElement-length\n */\nHTMLFormElement.prototype.length;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22051454\n */\nHTMLFormElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-19661795\n */\nHTMLFormElement.prototype.acceptCharset;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74049184\n */\nHTMLFormElement.prototype.action;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84227810\n */\nHTMLFormElement.prototype.enctype;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82545539\n */\nHTMLFormElement.prototype.method;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6512890\n */\nHTMLFormElement.prototype.target;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76767676\n */\nHTMLFormElement.prototype.submit = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76767677\n */\nHTMLFormElement.prototype.reset = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-94282980\n */\nfunction HTMLSelectElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58783172\n */\nHTMLSelectElement.prototype.type;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85676760\n */\nHTMLSelectElement.prototype.selectedIndex;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59351919\n */\nHTMLSelectElement.prototype.value;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-5933486\n */\nHTMLSelectElement.prototype.length;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20489458\n */\nHTMLSelectElement.prototype.form;\n\n/**\n * @type {!HTMLOptionsCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30606413\n */\nHTMLSelectElement.prototype.options;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79102918\n */\nHTMLSelectElement.prototype.disabled;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13246613\n */\nHTMLSelectElement.prototype.multiple;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-41636323\n */\nHTMLSelectElement.prototype.name;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18293826\n */\nHTMLSelectElement.prototype.size;\n\n/**\n * @param {HTMLElement} element\n * @param {HTMLElement=} opt_before\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14493106\n */\nHTMLSelectElement.prototype.add = function(element, opt_before) {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-28216144\n * @override\n */\nHTMLSelectElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32130014\n * @override\n */\nHTMLSelectElement.prototype.focus = function() {};\n\n/**\n * @param {number=} opt_index\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33404570\n * @override\n */\nHTMLSelectElement.prototype.remove = function(opt_index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38450247\n */\nfunction HTMLOptGroupElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-15518803\n */\nHTMLOptGroupElement.prototype.disabled;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95806054\n */\nHTMLOptGroupElement.prototype.label;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70901257\n */\nfunction HTMLOptionElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-37770574\n */\nHTMLOptionElement.prototype.defaultSelected;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-23482473\n */\nHTMLOptionElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-17116503\n */\nHTMLOptionElement.prototype.form;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14038413\n */\nHTMLOptionElement.prototype.index;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40736115\n */\nHTMLOptionElement.prototype.label;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70874476\n */\nHTMLOptionElement.prototype.selected;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48154426\n */\nHTMLOptionElement.prototype.text;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6185554\n */\nHTMLOptionElement.prototype.value;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6043025\n */\nfunction HTMLInputElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-15328520\n */\nHTMLInputElement.prototype.accept;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59914154\n */\nHTMLInputElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96991182\n */\nHTMLInputElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-92701314\n */\nHTMLInputElement.prototype.alt;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30233917\n */\nHTMLInputElement.prototype.checked;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20509171\n */\nHTMLInputElement.prototype.defaultChecked;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26091157\n */\nHTMLInputElement.prototype.defaultValue;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-50886781\n */\nHTMLInputElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63239895\n */\nHTMLInputElement.prototype.form;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-54719353\n */\nHTMLInputElement.prototype.maxLength;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-89658498\n */\nHTMLInputElement.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88461592\n */\nHTMLInputElement.prototype.readOnly;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79659438\n */\nHTMLInputElement.prototype.size;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-97320704\n */\nHTMLInputElement.prototype.src;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62176355\n */\nHTMLInputElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62883744\n */\nHTMLInputElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32463706\n */\nHTMLInputElement.prototype.useMap;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-49531485\n */\nHTMLInputElement.prototype.value;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26838235\n * @override\n */\nHTMLInputElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-2651361\n * @override\n */\nHTMLInputElement.prototype.click = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-65996295\n * @override\n */\nHTMLInputElement.prototype.focus = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-34677168\n */\nHTMLInputElement.prototype.select = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-24874179\n */\nfunction HTMLTextAreaElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-93102991\n */\nHTMLTextAreaElement.prototype.accessKey;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-51387225\n */\nHTMLTextAreaElement.prototype.cols;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-36152213\n */\nHTMLTextAreaElement.prototype.defaultValue;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-98725443\n */\nHTMLTextAreaElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18911464\n */\nHTMLTextAreaElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70715578\n */\nHTMLTextAreaElement.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39131423\n */\nHTMLTextAreaElement.prototype.readOnly;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46975887\n */\nHTMLTextAreaElement.prototype.rows;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-60363303\n */\nHTMLTextAreaElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#HTML-HTMLTextAreaElement-type\n */\nHTMLTextAreaElement.prototype.type;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70715579\n */\nHTMLTextAreaElement.prototype.value;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6750689\n * @override\n */\nHTMLTextAreaElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39055426\n * @override\n */\nHTMLTextAreaElement.prototype.focus = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48880622\n */\nHTMLTextAreaElement.prototype.select = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-34812697\n */\nfunction HTMLButtonElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73169431\n */\nHTMLButtonElement.prototype.accessKey;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-92757155\n */\nHTMLButtonElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71254493\n */\nHTMLButtonElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11029910\n */\nHTMLButtonElement.prototype.name;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39190908\n */\nHTMLButtonElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-27430092\n */\nHTMLButtonElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-72856782\n */\nHTMLButtonElement.prototype.value;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13691394\n */\nfunction HTMLLabelElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43589892\n */\nHTMLLabelElement.prototype.accessKey;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32480901\n */\nHTMLLabelElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96509813\n */\nHTMLLabelElement.prototype.htmlFor;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7365882\n */\nfunction HTMLFieldSetElement() {}\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75392630\n */\nHTMLFieldSetElement.prototype.form;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#attr-fieldset-disabled\n */\nHTMLFieldSetElement.prototype.disabled;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-21482039\n */\nfunction HTMLLegendElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11297832\n */\nHTMLLegendElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79538067\n */\nHTMLLegendElement.prototype.align;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-29594519\n */\nHTMLLegendElement.prototype.form;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-86834457\n */\nfunction HTMLUListElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39864178\n */\nHTMLUListElement.prototype.compact;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96874670\n */\nHTMLUListElement.prototype.type;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58056027\n */\nfunction HTMLOListElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76448506\n */\nHTMLOListElement.prototype.compact;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14793325\n */\nHTMLOListElement.prototype.start;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40971103\n */\nHTMLOListElement.prototype.type;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52368974\n */\nfunction HTMLDListElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-21738539\n */\nHTMLDListElement.prototype.compact;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71600284\n */\nfunction HTMLDirectoryElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75317739\n */\nHTMLDirectoryElement.prototype.compact;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-72509186\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-menu-element\n */\nfunction HTMLMenuElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68436464\n */\nHTMLMenuElement.prototype.compact;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74680021\n */\nfunction HTMLLIElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52387668\n */\nHTMLLIElement.prototype.type;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-45496263\n */\nHTMLLIElement.prototype.value;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22445964\n */\nfunction HTMLDivElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70908791\n */\nHTMLDivElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84675076\n */\nfunction HTMLParagraphElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53465507\n */\nHTMLParagraphElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43345119\n */\nfunction HTMLHeadingElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6796462\n */\nHTMLHeadingElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70319763\n */\nfunction HTMLQuoteElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53895598\n */\nHTMLQuoteElement.prototype.cite;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11383425\n */\nfunction HTMLPreElement() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13894083\n */\nHTMLPreElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-56836063\n */\nfunction HTMLBRElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82703081\n */\nHTMLBRElement.prototype.clear;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32774408\n */\nfunction HTMLBaseFontElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87502302\n */\nHTMLBaseFontElement.prototype.color;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88128969\n */\nHTMLBaseFontElement.prototype.face;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38930424\n */\nHTMLBaseFontElement.prototype.size;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43943847\n */\nfunction HTMLFontElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53532975\n */\nHTMLFontElement.prototype.color;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-55715655\n */\nHTMLFontElement.prototype.face;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90127284\n */\nHTMLFontElement.prototype.size;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68228811\n */\nfunction HTMLHRElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-15235012\n */\nHTMLHRElement.prototype.align;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79813978\n */\nHTMLHRElement.prototype.noShade;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77612587\n */\nHTMLHRElement.prototype.size;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87744198\n */\nHTMLHRElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79359609\n */\nfunction HTMLModElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75101708\n */\nHTMLModElement.prototype.cite;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88432678\n */\nHTMLModElement.prototype.dateTime;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48250443\n */\nfunction HTMLAnchorElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-89647724\n */\nHTMLAnchorElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67619266\n */\nHTMLAnchorElement.prototype.charset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-92079539\n */\nHTMLAnchorElement.prototype.coords;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88517319\n */\nHTMLAnchorElement.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87358513\n */\nHTMLAnchorElement.prototype.hreflang;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32783304\n */\nHTMLAnchorElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-3815891\n */\nHTMLAnchorElement.prototype.rel;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58259771\n */\nHTMLAnchorElement.prototype.rev;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-49899808\n */\nHTMLAnchorElement.prototype.shape;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-41586466\n */\nHTMLAnchorElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6414197\n */\nHTMLAnchorElement.prototype.target;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63938221\n */\nHTMLAnchorElement.prototype.type;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-65068939\n * @override\n */\nHTMLAnchorElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-47150313\n * @override\n */\nHTMLAnchorElement.prototype.focus = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-17701901\n */\nfunction HTMLImageElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-3211094\n */\nHTMLImageElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95636861\n */\nHTMLImageElement.prototype.alt;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-136671\n */\nHTMLImageElement.prototype.border;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91561496\n */\nHTMLImageElement.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53675471\n */\nHTMLImageElement.prototype.hspace;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58983880\n */\nHTMLImageElement.prototype.isMap;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77376969\n */\nHTMLImageElement.prototype.longDesc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91256910\n */\nHTMLImageElement.prototype.lowSrc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-47534097\n */\nHTMLImageElement.prototype.name;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87762984\n */\nHTMLImageElement.prototype.src;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35981181\n */\nHTMLImageElement.prototype.useMap;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85374897\n */\nHTMLImageElement.prototype.vspace;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13839076\n */\nHTMLImageElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9893177\n */\nfunction HTMLObjectElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16962097\n */\nHTMLObjectElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-47783837\n */\nHTMLObjectElement.prototype.archive;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82818419\n */\nHTMLObjectElement.prototype.border;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75241146\n */\nHTMLObjectElement.prototype.code;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-25709136\n */\nHTMLObjectElement.prototype.codeBase;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-19945008\n */\nHTMLObjectElement.prototype.codeType;\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38538621\n */\nHTMLObjectElement.prototype.contentDocument;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-81766986\n */\nHTMLObjectElement.prototype.data;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-942770\n */\nHTMLObjectElement.prototype.declare;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46094773\n */\nHTMLObjectElement.prototype.form;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88925838\n */\nHTMLObjectElement.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-17085376\n */\nHTMLObjectElement.prototype.hspace;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20110362\n */\nHTMLObjectElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-25039673\n */\nHTMLObjectElement.prototype.standby;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-27083787\n */\nHTMLObjectElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91665621\n */\nHTMLObjectElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6649772\n */\nHTMLObjectElement.prototype.useMap;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8682483\n */\nHTMLObjectElement.prototype.vspace;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38538620\n */\nHTMLObjectElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64077273\n */\nfunction HTMLParamElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59871447\n */\nHTMLParamElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18179888\n */\nHTMLParamElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77971357\n */\nHTMLParamElement.prototype.value;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-23931872\n */\nHTMLParamElement.prototype.valueType;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-31006348\n */\nfunction HTMLAppletElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8049912\n */\nHTMLAppletElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58610064\n */\nHTMLAppletElement.prototype.alt;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14476360\n */\nHTMLAppletElement.prototype.archive;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-61509645\n */\nHTMLAppletElement.prototype.code;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6581160\n */\nHTMLAppletElement.prototype.codeBase;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90184867\n */\nHTMLAppletElement.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-1567197\n */\nHTMLAppletElement.prototype.hspace;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39843695\n */\nHTMLAppletElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-93681523\n */\nHTMLAppletElement.prototype.object;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22637173\n */\nHTMLAppletElement.prototype.vspace;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16526327\n */\nHTMLAppletElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-94109203\n */\nfunction HTMLMapElement() {}\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71838730\n */\nHTMLMapElement.prototype.areas;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52696514\n */\nHTMLMapElement.prototype.name;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26019118\n */\nfunction HTMLAreaElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-57944457\n */\nHTMLAreaElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39775416\n */\nHTMLAreaElement.prototype.alt;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-66021476\n */\nHTMLAreaElement.prototype.coords;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-34672936\n */\nHTMLAreaElement.prototype.href;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-61826871\n */\nHTMLAreaElement.prototype.noHref;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85683271\n */\nHTMLAreaElement.prototype.shape;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8722121\n */\nHTMLAreaElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46054682\n */\nHTMLAreaElement.prototype.target;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-81598695\n */\nfunction HTMLScriptElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35305677\n */\nHTMLScriptElement.prototype.charset;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-93788534\n */\nHTMLScriptElement.prototype.defer;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-56700403\n */\nHTMLScriptElement.prototype.event;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-66979266\n */\nHTMLScriptElement.prototype.htmlFor;\n\n/**\n * @type {?function(!Event)}\n */\nHTMLScriptElement.prototype.onreadystatechange;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75147231\n */\nHTMLScriptElement.prototype.src;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46872999\n */\nHTMLScriptElement.prototype.text;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30534818\n */\nHTMLScriptElement.prototype.type;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64060425\n */\nfunction HTMLTableElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-23180977\n */\nHTMLTableElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83532985\n */\nHTMLTableElement.prototype.bgColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-50969400\n */\nHTMLTableElement.prototype.border;\n\n/**\n * @type {HTMLTableCaptionElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14594520\n */\nHTMLTableElement.prototype.caption;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59162158\n */\nHTMLTableElement.prototype.cellPadding;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68907883\n */\nHTMLTableElement.prototype.cellSpacing;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64808476\n */\nHTMLTableElement.prototype.frame;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6156016\n */\nHTMLTableElement.prototype.rows;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26347553\n */\nHTMLTableElement.prototype.rules;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-44998528\n */\nHTMLTableElement.prototype.summary;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63206416\n */\nHTMLTableElement.prototype.tBodies;\n\n/**\n * @type {HTMLTableSectionElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64197097\n */\nHTMLTableElement.prototype.tFoot;\n\n/**\n * @type {HTMLTableSectionElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9530944\n */\nHTMLTableElement.prototype.tHead;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77447361\n */\nHTMLTableElement.prototype.width;\n\n/**\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96920263\n */\nHTMLTableElement.prototype.createCaption = function() {};\n\n/**\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8453710\n */\nHTMLTableElement.prototype.createTFoot = function() {};\n\n/**\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70313345\n */\nHTMLTableElement.prototype.createTHead = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22930071\n */\nHTMLTableElement.prototype.deleteCaption = function() {};\n\n/**\n * @param {number} index\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13114938\n */\nHTMLTableElement.prototype.deleteRow = function(index) {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78363258\n */\nHTMLTableElement.prototype.deleteTFoot = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38310198\n */\nHTMLTableElement.prototype.deleteTHead = function() {};\n\n/**\n * @param {number=} opt_index\n * @return {HTMLElement}\n * @see https://www.w3.org/TR/html5/tabular-data.html#htmltableelement\n */\nHTMLTableElement.prototype.insertRow = function(opt_index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-12035137\n */\nfunction HTMLTableCaptionElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79875068\n */\nHTMLTableCaptionElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84150186\n */\nfunction HTMLTableColElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-31128447\n */\nHTMLTableColElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9447412\n */\nHTMLTableColElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-57779225\n */\nHTMLTableColElement.prototype.chOff;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96511335\n */\nHTMLTableColElement.prototype.span;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83291710\n */\nHTMLTableColElement.prototype.vAlign;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-25196799\n */\nHTMLTableColElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67417573\n */\nfunction HTMLTableSectionElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40530119\n */\nHTMLTableSectionElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83470012\n */\nHTMLTableSectionElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53459732\n */\nHTMLTableSectionElement.prototype.chOff;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52092650\n */\nHTMLTableSectionElement.prototype.rows;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-4379116\n */\nHTMLTableSectionElement.prototype.vAlign;\n\n/**\n * @param {number} index\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-5625626\n */\nHTMLTableSectionElement.prototype.deleteRow = function(index) {};\n\n/**\n * @param {number=} opt_index\n * @return {HTMLElement}\n * @see https://www.w3.org/TR/html5/tabular-data.html#htmltablesectionelement\n */\nHTMLTableSectionElement.prototype.insertRow = function(opt_index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6986576\n */\nfunction HTMLTableRowElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74098257\n */\nHTMLTableRowElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18161327\n */\nHTMLTableRowElement.prototype.bgColor;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67349879\n */\nHTMLTableRowElement.prototype.cells;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16230502\n */\nHTMLTableRowElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68207461\n */\nHTMLTableRowElement.prototype.chOff;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67347567\n */\nHTMLTableRowElement.prototype.rowIndex;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79105901\n */\nHTMLTableRowElement.prototype.sectionRowIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90000058\n */\nHTMLTableRowElement.prototype.vAlign;\n\n/**\n * @param {number} index\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11738598\n */\nHTMLTableRowElement.prototype.deleteCell = function(index) {};\n\n/**\n * @param {number} index\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68927016\n */\nHTMLTableRowElement.prototype.insertCell = function(index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82915075\n */\nfunction HTMLTableCellElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74444037\n */\nHTMLTableCellElement.prototype.abbr;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-98433879\n */\nHTMLTableCellElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76554418\n */\nHTMLTableCellElement.prototype.axis;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88135431\n */\nHTMLTableCellElement.prototype.bgColor;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-80748363\n */\nHTMLTableCellElement.prototype.cellIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30914780\n */\nHTMLTableCellElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20144310\n */\nHTMLTableCellElement.prototype.chOff;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84645244\n */\nHTMLTableCellElement.prototype.colSpan;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-89104817\n */\nHTMLTableCellElement.prototype.headers;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83679212\n */\nHTMLTableCellElement.prototype.height;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62922045\n */\nHTMLTableCellElement.prototype.noWrap;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48237625\n */\nHTMLTableCellElement.prototype.rowSpan;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-36139952\n */\nHTMLTableCellElement.prototype.scope;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58284221\n */\nHTMLTableCellElement.prototype.vAlign;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-27480795\n */\nHTMLTableCellElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43829095\n */\nfunction HTMLFrameSetElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-98869594\n */\nHTMLFrameSetElement.prototype.cols;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-19739247\n */\nHTMLFrameSetElement.prototype.rows;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-97790553\n */\nfunction HTMLFrameElement() {}\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78799536\n */\nHTMLFrameElement.prototype.contentDocument;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11858633\n */\nHTMLFrameElement.prototype.frameBorder;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7836998\n */\nHTMLFrameElement.prototype.longDesc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-55569778\n */\nHTMLFrameElement.prototype.marginHeight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8369969\n */\nHTMLFrameElement.prototype.marginWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91128709\n */\nHTMLFrameElement.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-80766578\n */\nHTMLFrameElement.prototype.noResize;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-45411424\n */\nHTMLFrameElement.prototype.scrolling;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78799535\n */\nHTMLFrameElement.prototype.src;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-50708718\n */\nfunction HTMLIFrameElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11309947\n */\nHTMLIFrameElement.prototype.align;\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67133006\n */\nHTMLIFrameElement.prototype.contentDocument;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22463410\n */\nHTMLIFrameElement.prototype.frameBorder;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-1678118\n */\nHTMLIFrameElement.prototype.height;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70472105\n */\nHTMLIFrameElement.prototype.longDesc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91371294\n */\nHTMLIFrameElement.prototype.marginHeight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-66486595\n */\nHTMLIFrameElement.prototype.marginWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96819659\n */\nHTMLIFrameElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-36369822\n */\nHTMLIFrameElement.prototype.scrolling;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43933957\n */\nHTMLIFrameElement.prototype.src;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67133005\n */\nHTMLIFrameElement.prototype.width;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.INVALID_STATE_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.SYNTAX_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.INVALID_MODIFICATION_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.NAMESPACE_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.INVALID_ACCESS_ERR;\n/**\n * @type {boolean}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.closed\n */\nWindow.prototype.closed;\n\n/**\n * @type {HTMLObjectElement|HTMLIFrameElement|null}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.frameElement\n */\nWindow.prototype.frameElement;\n\n/**\n * Allows lookup of frames by index or by name.\n * @type {!Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.frames\n */\nWindow.prototype.frames;\n\n/**\n * @type {!History}\n * @suppress {duplicate}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.history\n */\nvar history;\n\n/**\n * @type {!History}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.history\n */\nWindow.prototype.history;\n\n/**\n * Returns the number of frames (either frame or iframe elements) in the\n * window.\n *\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.length\n */\nWindow.prototype.length;\n\n/**\n * Location has an exception in the DeclaredGlobalExternsOnWindow pass\n * so we have to manually include it:\n * https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/DeclaredGlobalExternsOnWindow.java#L116\n *\n * @type {!Location}\n * @implicitCast\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.location\n */\nWindow.prototype.location;\n\n/**\n\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.name\n */\nWindow.prototype.name;\n\n/**\n * @type {Navigator}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.navigator\n */\nWindow.prototype.navigator;\n\n/**\n * @type {?Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.opener\n */\nWindow.prototype.opener;\n\n/**\n * @type {!Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.parent\n */\nWindow.prototype.parent;\n\n/**\n * @type {!Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.self\n */\nWindow.prototype.self;\n\n/**\n * @type {?string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.status\n */\nWindow.prototype.status;\n\n/**\n * @interface\n * @see https://html.spec.whatwg.org/multipage/window-object.html#the-status-bar-barprop-object\n */\nfunction BarProp() {}\n\n/** @const {boolean} */\nBarProp.prototype.visible;\n\n/**\n * @type {!BarProp}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.locationbar\n */\nWindow.prototype.locationbar;\n\n/**\n * @type {!BarProp}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.menubar\n */\nWindow.prototype.menubar;\n\n/**\n * @type {!BarProp}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.personalbar\n */\nWindow.prototype.personalbar;\n\n\n/**\n * @type {!BarProp}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.scrollbars\n */\nWindow.prototype.scrollbars;\n\n/**\n * @type {!BarProp}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.statusbar\n */\nWindow.prototype.statusbar;\n\n/**\n * @type {!BarProp}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.toolbar\n */\nWindow.prototype.toolbar;\n\n/**\n * @type {!Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.self\n */\nWindow.prototype.top;\n\n/**\n * @type {!Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.self\n */\nWindow.prototype.window;\n\n/**\n * @param {*} message\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.alert\n * @return {undefined}\n */\nWindow.prototype.alert = function(message) {};\n\n/**\n * @param {*} message\n * @return {boolean}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.confirm\n */\nWindow.prototype.confirm = function(message) {};\n\n/**\n * @param {string} message\n * @param {string=} value\n * @return {?string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.prompt\n */\nWindow.prototype.prompt = function(message, value) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.blur\n * @return {undefined}\n */\nWindow.prototype.blur = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.close\n * @return {undefined}\n */\nWindow.prototype.close = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.focus\n * @return {undefined}\n */\nWindow.prototype.focus = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Window/print\n * @return {undefined}\n */\nWindow.prototype.print = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Window/stop\n * @return {undefined}\n */\nWindow.prototype.stop = function() {};\n\n/**\n * @param {*=} url\n * @param {string=} windowName\n * @param {string=} windowFeatures\n * @param {boolean=} replace\n * @return {Window}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536651(VS.85).aspx\n */\nWindow.prototype.open = function(url, windowName, windowFeatures, replace) {};\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Element/innerHTML\n * @implicitCast\n */\nElement.prototype.innerHTML;\n\n/**\n * @type {string}\n * @implicitCast\n * @see https://w3c.github.io/DOM-Parsing/#extensions-to-the-element-interface\n */\nElement.prototype.outerHTML;\n\n', -+"externs/w3c_dom3.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s DOM Level 3 specification.\n * This file depends on w3c_dom2.js.\n * The whole file has been fully type annotated.\n * Created from\n * http://www.w3.org/TR/DOM-Level-3-Core/ecma-script-binding.html\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n * @author stevey@9oo91e.qjz9zk (Steve Yegge)\n */\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF\n */\nDOMException.prototype.code;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF\n */\nDOMException.VALIDATION_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF\n */\nDOMException.TYPE_MISMATCH_ERR;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList\n */\nfunction DOMStringList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList-length\n */\nDOMStringList.prototype.length;\n\n/**\n * @param {string} str\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList-contains\n * @nosideeffects\n */\nDOMStringList.prototype.contains = function(str) {};\n\n/**\n * @param {number} index\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList-item\n * @nosideeffects\n */\nDOMStringList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationList\n */\nfunction DOMImplementationList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationList-length\n */\nDOMImplementationList.prototype.length;\n\n/**\n * @param {number} index\n * @return {DOMImplementation}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationList-item\n * @nosideeffects\n */\nDOMImplementationList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationSource\n */\nfunction DOMImplementationSource() {}\n\n/**\n * @param {?string} namespaceURI\n * @param {string} publicId\n * @param {DocumentType} doctype\n * @return {Document}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-2-Core-DOM-createDocument\n * @nosideeffects\n */\nDOMImplementation.prototype.createDocument = function(namespaceURI, publicId, doctype) {};\n\n/**\n * @param {string} qualifiedName\n * @param {string} publicId\n * @param {string} systemId\n * @return {DocumentType}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-2-Core-DOM-createDocType\n * @nosideeffects\n */\nDOMImplementation.prototype.createDocumentType = function(qualifiedName, publicId, systemId) {};\n\n/**\n * @param {string} features\n * @return {DOMImplementation}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-getDOMImpl\n * @nosideeffects\n */\nDOMImplementationSource.prototype.getDOMImplementation = function(features) {};\n\n/**\n * @param {string} features\n * @return {DOMImplementationList}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-getDOMImpls\n * @nosideeffects\n */\nDOMImplementationSource.prototype.getDOMImplementationList = function(features) {};\n\n/**\n * @param {Node} externalNode\n * @return {Node}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-adoptNode\n */\nDocument.prototype.adoptNode = function(externalNode) {};\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-documentURI\n */\nDocument.prototype.documentURI;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-inputEncoding\n */\nDocument.prototype.inputEncoding;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-encoding\n */\nDocument.prototype.xmlEncoding;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-standalone\n */\nDocument.prototype.xmlStandalone;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-version\n */\nDocument.prototype.xmlVersion;\n\n/**\n * @type {?string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-baseURI\n */\nNode.prototype.baseURI;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeNSLocalN\n */\nNode.prototype.localName;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeNSname\n */\nNode.prototype.namespaceURI;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeNSPrefix\n */\nNode.prototype.prefix;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent\n */\nNode.prototype.textContent;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_DISCONNECTED\n */\nNode.DOCUMENT_POSITION_DISCONNECTED;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_PRECEDING\n */\nNode.DOCUMENT_POSITION_PRECEDING;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_FOLLOWING\n */\nNode.DOCUMENT_POSITION_FOLLOWING;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_CONTAINS\n */\nNode.DOCUMENT_POSITION_CONTAINS;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_CONTAINED_BY\n */\nNode.DOCUMENT_POSITION_CONTAINED_BY;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC\n */\nNode.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;\n\n/**\n * @param {Node} other\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-compareDocumentPosition\n * @nosideeffects\n */\nNode.prototype.compareDocumentPosition = function(other) {};\n\n/**\n * @param {string} feature\n * @param {string} version\n * @return {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-getFeature\n * @nosideeffects\n */\nNode.prototype.getFeature = function(feature, version) {};\n\n/**\n * @param {string} key\n * @return {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-getUserData\n * @nosideeffects\n */\nNode.prototype.getUserData = function(key) {};\n\n/**\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeHasAttrs\n * @nosideeffects\n */\nNode.prototype.hasAttributes = function() {};\n\n/**\n * @param {?string} namespaceURI\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace\n * @nosideeffects\n */\nNode.prototype.isDefaultNamespace = function(namespaceURI) {};\n\n/**\n * @param {Node} arg\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isEqualNode\n * @nosideeffects\n */\nNode.prototype.isEqualNode = function(arg) {};\n\n/**\n * @param {Node} other\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isSameNode\n * @nosideeffects\n */\nNode.prototype.isSameNode = function(other) {};\n\n/**\n * @param {string} prefix\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI\n * @nosideeffects\n */\nNode.prototype.lookupNamespaceURI = function(prefix) {};\n\n/**\n * @param {?string} namespaceURI\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix\n * @nosideeffects\n */\nNode.prototype.lookupPrefix = function(namespaceURI) {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-normalize\n */\nNode.prototype.normalize = function() {};\n\n/**\n * @param {string} query\n * @return {?Element}\n * @see http://www.w3.org/TR/selectors-api/#queryselector\n * @nosideeffects\n */\nNode.prototype.querySelector = function(query) {};\n\n/**\n * @param {string} query\n * @return {!NodeList}\n * @see http://www.w3.org/TR/selectors-api/#queryselectorall\n * @nosideeffects\n */\nNode.prototype.querySelectorAll = function(query) {};\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Attr-ownerElement\n */\nAttr.prototype.ownerElement;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Attr-isId\n */\nAttr.prototype.isId;\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {Attr}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElGetAtNodeNS\n * @nosideeffects\n */\nElement.prototype.getAttributeNodeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElGetAttrNS\n * @nosideeffects\n */\nElement.prototype.getAttributeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {!NodeList}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-A6C90942\n * @nosideeffects\n */\nElement.prototype.getElementsByTagNameNS = function(namespaceURI, localName) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElHasAttr\n * @nosideeffects\n */\nElement.prototype.hasAttribute = function(name) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElHasAttrNS\n * @nosideeffects\n */\nElement.prototype.hasAttributeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElRemAtNS\n */\nElement.prototype.removeAttributeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {Attr} newAttr\n * @return {Attr}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElSetAtNodeNS\n */\nElement.prototype.setAttributeNodeNS = function(newAttr) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} qualifiedName\n * @param {string|number|boolean} value Values are converted to strings with\n * ToString, so we accept number and boolean since both convert easily to\n * strings.\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElSetAttrNS\n */\nElement.prototype.setAttributeNS = function(namespaceURI, qualifiedName, value) {};\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Text3-wholeText\n */\nText.prototype.wholeText;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-Interfaces-DOMError\n */\nfunction DOMError() {}\n\n/**\n * @type {DOMLocator}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-location\n */\nDOMError.prototype.location;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-message\n */\nDOMError.prototype.message;\n\n/**\n * @type {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-relatedData\n */\nDOMError.prototype.relatedData;\n\n/**\n * @type {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-relatedException\n */\nDOMError.prototype.relatedException;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity-warning\n */\nDOMError.SEVERITY_WARNING;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity-error\n */\nDOMError.SEVERITY_ERROR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity-fatal-error\n */\nDOMError.SEVERITY_FATAL_ERROR;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity\n */\nDOMError.prototype.severity;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-type\n */\nDOMError.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/dom/#domerror\n */\nDOMError.prototype.name;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-Interfaces-DOMErrorHandler\n */\nfunction DOMErrorHandler() {}\n\n/**\n * @param {DOMError} error\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ERRORS-DOMErrorHandler-handleError\n */\nDOMErrorHandler.prototype.handleError = function(error) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Interfaces-DOMLocator\n */\nfunction DOMLocator() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-byteOffset\n */\nDOMLocator.prototype.byteOffset;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-column-number\n */\nDOMLocator.prototype.columnNumber;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-line-number\n */\nDOMLocator.prototype.lineNumber;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-node\n */\nDOMLocator.prototype.relatedNode;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-uri\n */\nDOMLocator.prototype.uri;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-utf16Offset\n */\nDOMLocator.prototype.utf16Offset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-Core-DocType-publicId\n */\nDocumentType.prototype.publicId;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-Core-DocType-systemId\n */\nDocumentType.prototype.systemId;\n', -+"externs/w3c_dom4.js":'/*\n * Copyright 2016 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s DOM4 specification. This file depends on\n * w3c_dom3.js. The whole file has been fully type annotated. Created from\n * https://www.w3.org/TR/domcore/.\n *\n * @externs\n * @author zhoumotongxue008@9ma1l.qjz9zk (Michael Zhou)\n */\n\n/**\n * @typedef {?(DocumentType|Element|CharacterData)}\n * @see https://www.w3.org/TR/domcore/#interface-childnode\n */\nvar ChildNode;\n\n/**\n * @return {undefined}\n * @see https://www.w3.org/TR/domcore/#dom-childnode-remove\n */\nDocumentType.prototype.remove = function() {};\n\n/**\n * @return {undefined}\n * @see https://www.w3.org/TR/domcore/#dom-childnode-remove\n */\nElement.prototype.remove = function() {};\n\n/**\n * @return {undefined}\n * @see https://www.w3.org/TR/domcore/#dom-childnode-remove\n */\nCharacterData.prototype.remove = function() {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-replacewith\n */\nDocumentType.prototype.replaceWith = function(nodes) {};\n\n/**\n * @const {string}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#sec-domerror\n */\nDOMException.prototype.name;\n\n/**\n * @const {string}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#sec-domerror\n */\nDOMException.prototype.message;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.SECURITY_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.NETWORK_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.ABORT_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.URL_MISMATCH_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.QUOTA_EXCEEDED_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.TIMEOUT_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.INVALID_NODE_TYPE_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.DATA_CLONE_ERR;\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-replacewith\n */\nElement.prototype.replaceWith = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-replacewith\n */\nCharacterData.prototype.replaceWith = function(nodes) {};\n\n/**\n * @return {!Array}\n * @see https://dom.spec.whatwg.org/#dom-element-getattributenames\n */\nElement.prototype.getAttributeNames = function() {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-append\n */\nElement.prototype.append = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-append\n */\nDocument.prototype.append = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-append\n */\nDocumentFragment.prototype.append = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-prepend\n */\nElement.prototype.prepend = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-prepend\n */\nDocument.prototype.prepend = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-prepend\n */\nDocumentFragment.prototype.prepend = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-before\n */\nElement.prototype.before = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-before\n */\nDocumentType.prototype.before = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-before\n */\nCharacterData.prototype.before = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-after\n */\nElement.prototype.after = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-after\n */\nDocumentType.prototype.after = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-after\n */\nCharacterData.prototype.after = function(nodes) {};\n\n/**\n * @param {string} name\n * @param {boolean=} force\n * @return {boolean}\n * @throws {DOMException}\n * @see https://dom.spec.whatwg.org/#dom-element-toggleattribute\n */\nElement.prototype.toggleAttribute = function(name, force) {};\n\n/**\n * @type {Element}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534327(VS.85).aspx\n */\nNode.prototype.parentElement;\n\n/**\n * @param {string} name\n * @return {!HTMLCollection}\n * @nosideeffects\n * @see https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname-classnames-classnames\n */\nDocument.prototype.getElementsByClassName = function(name) {};\n\n/**\n * @param {string} classNames\n * @return {!HTMLCollection}\n * @nosideeffects\n * @see https://dom.spec.whatwg.org/#dom-element-getelementsbyclassname-classnames-classnames\n */\nElement.prototype.getElementsByClassName = function(classNames) {};\n', -+"externs/gecko_dom.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over\n * W3C\'s DOM specification by Gecko. This file depends on\n * w3c_dom2.js.\n *\n * When a non-standard extension appears in both Gecko and IE, we put\n * it in gecko_dom.js\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n */\n\n// TODO: Almost all of it has not been annotated with types.\n\n// Gecko DOM;\n\n/**\n * Mozilla only???\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLSpanElement() {}\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/Components_object\n */\nWindow.prototype.Components;\n\n/**\n * @type {Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.content\n */\nWindow.prototype.content;\n\n/** @see https://developer.m0z111a.qjz9zk/en/DOM/window.controllers */\nWindow.prototype.controllers;\n\n/** @see https://developer.m0z111a.qjz9zk/en/DOM/window.crypto */\nWindow.prototype.crypto;\n\n/**\n * Gets/sets the status bar text for the given window.\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.defaultStatus\n */\nWindow.prototype.defaultStatus;\n\n/** @see https://developer.m0z111a.qjz9zk/en/DOM/window.dialogArguments */\nWindow.prototype.dialogArguments;\n\n/** @see https://developer.m0z111a.qjz9zk/en/DOM/window.directories */\nWindow.prototype.directories;\n\n/**\n * @type {boolean}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.fullScreen\n */\nWindow.prototype.fullScreen;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/Storage#globalStorage\n */\nWindow.prototype.globalStorage;\n\n/** @see https://developer.m0z111a.qjz9zk/en/DOM/window.pkcs11 */\nWindow.prototype.pkcs11;\n\n/** @see https://developer.m0z111a.qjz9zk/en/DOM/window */\nWindow.prototype.returnValue;\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/window.scrollMaxX\n */\nWindow.prototype.scrollMaxX;\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/window.scrollMaxY\n */\nWindow.prototype.scrollMaxY;\n\n/** @see https://developer.m0z111a.qjz9zk/en/DOM/Storage#sessionStorage */\nWindow.prototype.sessionStorage;\n\n/** @see https://developer.m0z111a.qjz9zk/en/DOM/window.sidebar */\nWindow.prototype.sidebar;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.back\n * @return {undefined}\n */\nWindow.prototype.back = function() {};\n\n/** @deprecated */\nWindow.prototype.captureEvents;\n\n/**@see https://developer.m0z111a.qjz9zk/en/DOM/window.find */\nWindow.prototype.find;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.forward\n * @return {undefined}\n */\nWindow.prototype.forward = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.getAttention\n * @return {undefined}\n */\nWindow.prototype.getAttention = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.home\n * @return {undefined}\n */\nWindow.prototype.home = function() {};\n\nWindow.prototype.openDialog;\nWindow.prototype.releaseEvents;\nWindow.prototype.scrollByLines;\nWindow.prototype.scrollByPages;\n\n/**\n * @param {string} uri\n * @param {?=} opt_arguments\n * @param {string=} opt_options\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.showModalDialog\n */\nWindow.prototype.showModalDialog;\n\nWindow.prototype.sizeToContent;\n\nWindow.prototype.updateCommands;\n\n// properties of Document\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.alinkColor\n * @type {string}\n */\nDocument.prototype.alinkColor;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.anchors\n * @type {HTMLCollection}\n */\nDocument.prototype.anchors;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.applets\n * @type {HTMLCollection}\n */\nDocument.prototype.applets;\n/** @type {?string} */ Document.prototype.baseURI;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.bgColor\n * @type {string}\n */\nDocument.prototype.bgColor;\n\n/** @type {HTMLBodyElement} */ Document.prototype.body;\nDocument.prototype.characterSet;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.compatMode\n * @type {string}\n */\nDocument.prototype.compatMode;\n\nDocument.prototype.contentType;\n/** @type {string} */ Document.prototype.cookie;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Document/defaultView\n * @type {?Window}\n */\nDocument.prototype.defaultView;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.designMode\n * @type {string}\n */\nDocument.prototype.designMode;\n\nDocument.prototype.documentURIObject;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.domain\n * @type {string}\n */\nDocument.prototype.domain;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.embeds\n * @type {HTMLCollection}\n */\nDocument.prototype.embeds;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.fgColor\n * @type {string}\n */\nDocument.prototype.fgColor;\n\n/** @type {Element} */ Document.prototype.firstChild;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.forms\n * @type {HTMLCollection}\n */\nDocument.prototype.forms;\n\n/** @type {HTMLCollection} */\nDocument.prototype.images;\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.lastModified\n */\nDocument.prototype.lastModified;\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.linkColor\n */\nDocument.prototype.linkColor;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.links\n * @type {HTMLCollection<(!HTMLAreaElement|!HTMLAnchorElement)>}\n */\nDocument.prototype.links;\n\n/**\n * @type {!Location}\n * @implicitCast\n */\nDocument.prototype.location;\n\nDocument.prototype.namespaceURI;\nDocument.prototype.nodePrincipal;\nDocument.prototype.plugins;\nDocument.prototype.popupNode;\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.referrer\n */\nDocument.prototype.referrer;\n\n/**\n * @type {StyleSheetList}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.styleSheets\n */\nDocument.prototype.styleSheets;\n\n/** @type {?string} */ Document.prototype.title;\nDocument.prototype.tooltipNode;\n/** @type {string} */ Document.prototype.URL;\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.vlinkColor\n */\nDocument.prototype.vlinkColor;\n\n/** @type {number} */ Document.prototype.width;\n\n// Methods of Document\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.clear\n * @return {undefined}\n */\nDocument.prototype.clear = function() {};\n\n/**\n * @param {string} type\n * @return {Event}\n */\nDocument.prototype.createEvent = function(type) {};\nDocument.prototype.createNSResolver;\n/** @return {Range} */ Document.prototype.createRange = function() {};\nDocument.prototype.createTreeWalker;\n\nDocument.prototype.evaluate;\n\n/**\n * @param {string} commandName\n * @param {?boolean=} opt_showUi\n * @param {*=} opt_value\n * @see https://developer.m0z111a.qjz9zk/en/Rich-Text_Editing_in_Mozilla#Executing_Commands\n */\nDocument.prototype.execCommand;\n\nDocument.prototype.loadOverlay;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/Midas\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536676(VS.85).aspx\n */\nDocument.prototype.queryCommandEnabled;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/Midas\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536678(VS.85).aspx\n */\nDocument.prototype.queryCommandIndeterm;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/Midas\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536679(VS.85).aspx\n */\nDocument.prototype.queryCommandState;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.queryCommandSupported\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536681(VS.85).aspx\n * @param {string} command\n * @return {?} Implementation-specific.\n */\nDocument.prototype.queryCommandSupported;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/Midas\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536683(VS.85).aspx\n */\nDocument.prototype.queryCommandValue;\n\nDocument.prototype.ononline;\nDocument.prototype.onoffline;\n\n// XUL\n/**\n * @see http://developer.m0z111a.qjz9zk/en/DOM/document.getBoxObjectFor\n * @return {BoxObject}\n * @nosideeffects\n */\nDocument.prototype.getBoxObjectFor = function(element) {};\n\n// From:\n// http://lxr.m0z111a.qjz9zk/mozilla1.8/source/dom/public/idl/range/nsIDOMNSRange.idl\n\n/**\n * @param {!TrustedHTML|string} tag\n * @return {DocumentFragment}\n */\nRange.prototype.createContextualFragment;\n\n/**\n * @param {Node} parent\n * @param {number} offset\n * @return {boolean}\n * @nosideeffects\n */\nRange.prototype.isPointInRange;\n\n/**\n * @param {Node} parent\n * @param {number} offset\n * @return {number}\n * @nosideeffects\n */\nRange.prototype.comparePoint;\n\n/**\n * @param {Node} n\n * @return {boolean}\n * @nosideeffects\n */\nRange.prototype.intersectsNode;\n\n/**\n * @param {Node} n\n * @return {number}\n * @nosideeffects\n */\nRange.prototype.compareNode;\n\n/**\n * @type {!NodeList}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/element.children\n */\nElement.prototype.children;\n\n/**\n * Firebug sets this property on elements it is inserting into the DOM.\n * @type {boolean}\n */\nElement.prototype.firebugIgnore;\n\n/**\n * Note: According to the spec, name is defined on specific types of\n * HTMLElements, rather than on Node, Element, or HTMLElement directly.\n * Ignore this.\n * @type {string}\n */\nElement.prototype.name;\n\nElement.prototype.nodePrincipal;\n\n/**\n * @type {!CSSStyleDeclaration}\n * This belongs on HTMLElement rather than Element, but that\n * breaks a lot.\n * TODO(rdcronin): Remove this declaration once the breakage is fixed.\n */\nElement.prototype.style;\n\n/**\n * @override\n * @return {!Element}\n */\nElement.prototype.cloneNode = function(deep) {};\n\n/** @return {undefined} */\nElement.prototype.click = function() {};\n\n/** @type {number} */\nHTMLTextAreaElement.prototype.selectionStart;\n\n/** @type {number} */\nHTMLTextAreaElement.prototype.selectionEnd;\n\n/**\n * @param {number} selectionStart\n * @param {number} selectionEnd\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#dom-textarea/input-setselectionrange\n * @return {undefined}\n */\nHTMLTextAreaElement.prototype.setSelectionRange =\n function(selectionStart, selectionEnd) {};\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/Navigator.buildID\n */\nNavigator.prototype.buildID;\n\n/**\n * @type {!Array|undefined}\n * @see https://developer.m0z111a.qjz9zk/en/Navigator.languages\n */\nNavigator.prototype.languages;\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/Navigator.oscpu\n */\nNavigator.prototype.oscpu;\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/Navigator.productSub\n */\nNavigator.prototype.productSub;\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/Navigator.securityPolicy\n */\nNavigator.prototype.securityPolicy;\n\n/**\n * @param {string} url\n * @param {ArrayBufferView|Blob|string|FormData=} opt_data\n * @return {boolean}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/navigator.sendBeacon\n */\nNavigator.prototype.sendBeacon = function(url, opt_data) {};\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/Navigator.vendor\n */\nNavigator.prototype.vendor;\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/Navigator.vendorSub\n */\nNavigator.prototype.vendorSub;\n\n\n/** @constructor */\nfunction BoxObject() {}\n\n/** @type {Element} */\nBoxObject.prototype.element;\n\n/** @type {number} */\nBoxObject.prototype.screenX;\n\n/** @type {number} */\nBoxObject.prototype.screenY;\n\n/** @type {number} */\nBoxObject.prototype.x;\n\n/** @type {number} */\nBoxObject.prototype.y;\n\n/** @type {number} */\nBoxObject.prototype.width;\n\n\n/**\n * @param {Element} element\n * @param {?string=} pseudoElt\n * @return {?CSSStyleDeclaration}\n * @nosideeffects\n * @see https://bugzilla.m0z111a.qjz9zk/show_bug.cgi?id=548397\n */\nfunction getComputedStyle(element, pseudoElt) {}\n', -+"externs/ie_dom.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over the\n * W3C's DOM specification by IE in JScript. This file depends on\n * w3c_dom2.js. The whole file has NOT been fully type annotated.\n *\n * When a non-standard extension appears in both Gecko and IE, we put\n * it in gecko_dom.js\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n * @author stevey@9oo91e.qjz9zk (Steve Yegge)\n */\n\n// TODO(nicksantos): Rewrite all the DOM interfaces as interfaces, instead\n// of kludging them as an inheritance hierarchy.\n\n/**\n * @constructor\n * @extends {Document}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms757878(VS.85).aspx\n */\nfunction XMLDOMDocument() {}\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms761398(VS.85).aspx\n */\nXMLDOMDocument.prototype.async;\n\n/**\n * @type {!Function}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms762647(VS.85).aspx\n */\nXMLDOMDocument.prototype.ondataavailable;\n\n/**\n * @type {!Function}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms764640(VS.85).aspx\n */\nXMLDOMDocument.prototype.onreadystatechange;\n\n/**\n * @type {!Function}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms753795(VS.85).aspx\n */\nXMLDOMDocument.prototype.ontransformnode;\n\n/**\n * @type {Object}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms756041(VS.85).aspx\n */\nXMLDOMDocument.prototype.parseError;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms761353(VS.85).aspx\n */\nXMLDOMDocument.prototype.preserveWhiteSpace;\n\n/**\n * @type {number}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms753702(VS.85).aspx\n */\nXMLDOMDocument.prototype.readyState;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms762283(VS.85).aspx\n * @type {boolean}\n */\nXMLDOMDocument.prototype.resolveExternals;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms760290(v=vs.85).aspx\n * @param {string} name\n * @param {*} value\n * @return {undefined}\n */\nXMLDOMDocument.prototype.setProperty = function(name, value) {};\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms767669(VS.85).aspx\n */\nXMLDOMDocument.prototype.url;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms762791(VS.85).aspx\n */\nXMLDOMDocument.prototype.validateOnParse;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms763830(VS.85).aspx\n * @return {undefined}\n */\nXMLDOMDocument.prototype.abort = function() {};\n\n/**\n * @param {*} type\n * @param {string} name\n * @param {string} namespaceURI\n * @return {Node}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms757901(VS.85).aspx\n * @nosideeffects\n */\nXMLDOMDocument.prototype.createNode = function(type, name, namespaceURI) {};\n\n/**\n * @param {string} xmlString\n * @return {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms754585(VS.85).aspx\n * @override\n */\nXMLDOMDocument.prototype.loadXML = function(xmlString) {};\n\n/**\n * @param {string} id\n * @return {Node}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms766397(VS.85).aspx\n */\nXMLDOMDocument.prototype.nodeFromID = function(id) {};\n\n//==============================================================================\n// XMLNode methods and properties\n// In a real DOM hierarchy, XMLDOMDocument inherits from XMLNode and Document.\n// Since we can't express that in our type system, we put XMLNode properties\n// on Node.\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms767570(VS.85).aspx\n */\nNode.prototype.baseName;\n\n/**\n * @type {?string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms762763(VS.85).aspx\n */\nNode.prototype.dataType;\n\n/**\n * @type {Node}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms764733(VS.85).aspx\n */\nNode.prototype.definition;\n\n/**\n * IE5 used document instead of ownerDocument.\n * Old versions of WebKit used document instead of contentDocument.\n * @type {Document}\n */\nNode.prototype.document;\n\n\n/**\n * Inserts the given HTML text into the element at the location.\n * @param {string} sWhere Where to insert the HTML text, one of 'beforeBegin',\n * 'afterBegin', 'beforeEnd', 'afterEnd'.\n * @param {!TrustedHTML|string} sText HTML text to insert.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536452(VS.85).aspx\n * @return {undefined}\n */\nNode.prototype.insertAdjacentHTML = function(sWhere, sText) {};\n\n/**\n * @type {*}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms762308(VS.85).aspx\n */\nNode.prototype.nodeTypedValue;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms757895(VS.85).aspx\n */\nNode.prototype.nodeTypeString;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms762237(VS.85).aspx\n */\nNode.prototype.parsed;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms753816(VS.85).aspx\n */\nNode.prototype.specified;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms762687(VS.85).aspx\n */\nNode.prototype.text;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms755989(VS.85).aspx\n */\nNode.prototype.xml;\n\n/**\n * @param {string} expression An XPath expression.\n * @return {!NodeList}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms754523(VS.85).aspx\n * @nosideeffects\n */\nNode.prototype.selectNodes = function(expression) {};\n\n/**\n * @param {string} expression An XPath expression.\n * @return {Node}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms757846(VS.85).aspx\n * @nosideeffects\n */\nNode.prototype.selectSingleNode = function(expression) {};\n\n/**\n * @param {Node} stylesheet XSLT stylesheet.\n * @return {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms761399(VS.85).aspx\n * @nosideeffects\n */\nNode.prototype.transformNode = function(stylesheet) {};\n\n/**\n * @param {Node} stylesheet XSLT stylesheet.\n * @param {Object} outputObject\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms766561(VS.85).aspx\n * @return {Object}\n */\nNode.prototype.transformNodeToObject =\n function(stylesheet, outputObject) {};\n\n//==============================================================================\n// Node methods\n\n/**\n * @param {boolean=} opt_bRemoveChildren Whether to remove the entire sub-tree.\n * Defaults to false.\n * @return {Node} The object that was removed.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536708(VS.85).aspx\n */\nNode.prototype.removeNode = function(opt_bRemoveChildren) {};\n\n/**\n * @constructor\n */\nfunction ClipboardData() {}\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535220(VS.85).aspx\n * @param {string=} opt_type Type of clipboard data to clear. 'Text' or\n * 'URL' or 'File' or 'HTML' or 'Image'.\n * @return {undefined}\n */\nClipboardData.prototype.clearData = function(opt_type) {};\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535220(VS.85).aspx\n * @param {string} type Type of clipboard data to set ('Text' or 'URL').\n * @param {string} data Data to set\n * @return {boolean} Whether the data were set correctly.\n */\nClipboardData.prototype.setData = function(type, data) {};\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535220(VS.85).aspx\n * @param {string} type Type of clipboard data to get ('Text' or 'URL').\n * @return {string} The current data\n */\nClipboardData.prototype.getData = function(type) { };\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535220(VS.85).aspx\n * @type {ClipboardData}\n */\nWindow.prototype.clipboardData;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533724(VS.85).aspx\n */\nWindow.prototype.dialogHeight;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533725(VS.85).aspx\n */\nWindow.prototype.dialogLeft;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533726(VS.85).aspx\n */\nWindow.prototype.dialogTop;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533727(VS.85).aspx\n */\nWindow.prototype.dialogWidth;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535863(VS.85).aspx\n */\nWindow.prototype.event;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc197012(VS.85).aspx\n */\nWindow.prototype.maxConnectionsPer1_0Server;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc197013(VS.85).aspx\n */\nWindow.prototype.maxConnectionsPerServer;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534198(VS.85).aspx\n */\nWindow.prototype.offscreenBuffering;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534389(VS.85).aspx\n * @type {number|undefined}\n */\nWindow.prototype.screenLeft;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534389(VS.85).aspx\n * @type {number|undefined}\n */\nWindow.prototype.screenTop;\n\n// Functions\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536343(VS.85).aspx\n */\nWindow.prototype.attachEvent;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536392(VS.85).aspx\n */\nWindow.prototype.createPopup;\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536411(VS.85).aspx\n */\nWindow.prototype.detachEvent;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536420(VS.85).aspx\n */\nWindow.prototype.execScript;\n\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536638(VS.85).aspx\n */\nWindow.prototype.navigate;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536738(VS.85).aspx\n */\nWindow.prototype.setActive;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536758(VS.85).aspx\n */\nWindow.prototype.showHelp;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536761(VS.85).aspx\n */\nWindow.prototype.showModelessDialog;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535246%28v=vs.85%29.aspx\n * @const {!Object}\n */\nWindow.prototype.external;\n\n/**\n * @see https://msdn.m1cr050ft.qjz9zk/en-us/ie/dn265046(v=vs.94)\n * @const {!Object}\n */\nWindow.prototype.msCrypto;\n\n/**\n * @type {boolean}\n * @implicitCast\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/ms533072(v=vs.85).aspx\n */\nHTMLFrameElement.prototype.allowTransparency;\n\n/**\n * @type {Window}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533692(VS.85).aspx\n */\nHTMLFrameElement.prototype.contentWindow;\n\n/**\n * @type {boolean}\n * @implicitCast\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/ms533072(v=vs.85).aspx\n */\nHTMLIFrameElement.prototype.allowTransparency;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536385(VS.85).aspx\n */\nHTMLBodyElement.prototype.createControlRange;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534359(VS.85).aspx\n */\nHTMLScriptElement.prototype.readyState;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534359(VS.85).aspx\n */\nHTMLIFrameElement.prototype.readyState;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534359(VS.85).aspx\n */\nHTMLImageElement.prototype.readyState;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534359(VS.85).aspx\n */\nHTMLObjectElement.prototype.readyState;\n\n\n/**\n * @constructor\n */\nfunction ControlRange() {}\n\nControlRange.prototype.add;\nControlRange.prototype.addElement;\nControlRange.prototype.execCommand;\nControlRange.prototype.item;\nControlRange.prototype.queryCommandEnabled;\nControlRange.prototype.queryCommandIndeterm;\nControlRange.prototype.queryCommandState;\nControlRange.prototype.queryCommandSupported;\nControlRange.prototype.queryCommandValue;\nControlRange.prototype.remove;\nControlRange.prototype.scrollIntoView;\nControlRange.prototype.select;\n\n/**\n * @constructor\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535872.aspx\n */\nfunction TextRange() {}\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533538(VS.85).aspx\n */\nTextRange.prototype.boundingHeight;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533539(VS.85).aspx\n */\nTextRange.prototype.boundingLeft;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533540(VS.85).aspx\n */\nTextRange.prototype.boundingTop;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533541(VS.85).aspx\n */\nTextRange.prototype.boundingWidth;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533874(VS.85).aspx\n */\nTextRange.prototype.htmlText;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534200(VS.85).aspx\n */\nTextRange.prototype.offsetLeft;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534303(VS.85).aspx\n */\nTextRange.prototype.offsetTop;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534676(VS.85).aspx\n */\nTextRange.prototype.text;\n\n/**\n * @param {boolean=} opt_toStart\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536371(VS.85).aspx\n */\nTextRange.prototype.collapse;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536373(VS.85).aspx\n */\nTextRange.prototype.compareEndPoints;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536416(VS.85).aspx\n */\nTextRange.prototype.duplicate;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536419(VS.85).aspx\n */\nTextRange.prototype.execCommand;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536421(VS.85).aspx\n */\nTextRange.prototype.expand;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536422(VS.85).aspx\n */\nTextRange.prototype.findText;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536432(VS.85).aspx\n */\nTextRange.prototype.getBookmark;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536433(VS.85).aspx\n */\nTextRange.prototype.getBoundingClientRect;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536435(VS.85).aspx\n */\nTextRange.prototype.getClientRects;\n\n/**\n * @param {TextRange|ControlRange} range\n * @return {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536450(VS.85).aspx\n */\nTextRange.prototype.inRange;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536458(VS.85).aspx\n */\nTextRange.prototype.isEqual;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536616(VS.85).aspx\n */\nTextRange.prototype.move;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536620(VS.85).aspx\n */\nTextRange.prototype.moveEnd;\n\n/**\n * @param {string} unit\n * @param {number=} opt_count\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536623(VS.85).aspx\n */\nTextRange.prototype.moveStart;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536628(VS.85).aspx\n */\nTextRange.prototype.moveToBookmark;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536630(VS.85).aspx\n */\nTextRange.prototype.moveToElementText;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536632(VS.85).aspx\n */\nTextRange.prototype.moveToPoint;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536654(VS.85).aspx\n * @return {?Element}\n */\nTextRange.prototype.parentElement;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536656(VS.85).aspx\n */\nTextRange.prototype.pasteHTML;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536676(VS.85).aspx\n */\nTextRange.prototype.queryCommandEnabled;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536678(VS.85).aspx\n */\nTextRange.prototype.queryCommandIndeterm;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536679(VS.85).aspx\n */\nTextRange.prototype.queryCommandState;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536681(VS.85).aspx\n */\nTextRange.prototype.queryCommandSupported;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536683(VS.85).aspx\n */\nTextRange.prototype.queryCommandValue;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536730(VS.85).aspx\n */\nTextRange.prototype.scrollIntoView;\n\n/**\n * @return {undefined}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536735(VS.85).aspx\n */\nTextRange.prototype.select = function() {};\n\n/**\n * @param {string} how\n * @param {TextRange|ControlRange} sourceRange\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536745(VS.85).aspx\n */\nTextRange.prototype.setEndPoint;\n\n/**\n * @constructor\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537447(VS.85).aspx\n */\nfunction controlRange() {}\n\n\nDocument.prototype.loadXML;\n\n\n// http://msdn.m1cr050ft.qjz9zk/en-us/library/ms531073(VS.85).aspx\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533553(VS.85).aspx\n */\nDocument.prototype.charset;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533693(VS.85).aspx\n */\nDocument.prototype.cookie;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533731(VS.85).aspx\n */\nDocument.prototype.dir;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc196988(VS.85).aspx\n */\nDocument.prototype.documentMode;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533747(VS.85).aspx\n */\nDocument.prototype.expando;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533750(VS.85).aspx\n */\nDocument.prototype.fileCreatedDate;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533751(VS.85).aspx\n */\nDocument.prototype.fileModifiedDate;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533752(VS.85).aspx\n */\nDocument.prototype.fileSize;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534331(VS.85).aspx\n * @type {?Window}\n */\nDocument.prototype.parentWindow;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534353(VS.85).aspx\n */\nDocument.prototype.protocol;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534359(VS.85).aspx\n */\nHTMLDocument.prototype.readyState;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534704(VS.85).aspx\n */\nDocument.prototype.uniqueID;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534709(VS.85).aspx\n */\nDocument.prototype.URLUnencoded;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535155(VS.85).aspx\n */\nDocument.prototype.XMLDocument;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535163(VS.85).aspx\n */\nDocument.prototype.XSLDocument;\n\n// functions\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536343(VS.85).aspx\n */\nDocument.prototype.attachEvent;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536390(VS.85).aspx\n */\nDocument.prototype.createEventObject;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms531194(VS.85).aspx\n */\nDocument.prototype.createStyleSheet;\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536411(VS.85).aspx\n */\nDocument.prototype.detachEvent;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536425(VS.85).aspx\n */\nDocument.prototype.focus;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536614(VS.85).aspx\n */\nDocument.prototype.mergeAttributes;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536685(VS.85).aspx\n */\nDocument.prototype.recalc;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536689(VS.85).aspx\n */\nDocument.prototype.releaseCapture;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536738(VS.85).aspx\n */\nDocument.prototype.setActive;\n\n\n// collections\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537434(VS.85).aspx\n */\nDocument.prototype.all;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537445(VS.85).aspx\n */\nDocument.prototype.childNodes;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537459(VS.85).aspx\n */\nDocument.prototype.frames;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537470(VS.85).aspx\n */\nDocument.prototype.namespaces;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537487(VS.85).aspx\n * @type {!HTMLCollection}\n */\nDocument.prototype.scripts;\n\n/**\n * @param {string} sUrl\n * @return {number}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535922(VS.85).aspx\n */\nElement.prototype.addBehavior = function(sUrl) {};\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/mm536343(v=vs.85).aspx\n */\nElement.prototype.attachEvent;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533546(VS.85).aspx\n */\nElement.prototype.canHaveChildren;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533559(v=vs.85).aspx\n */\nElement.prototype.classid;\n\n/**\n * @param {number} iCoordX Integer that specifies the client window coordinate\n * of x.\n * @param {number} iCoordY Integer that specifies the client window coordinate\n * of y.\n * @return {string} The component of an element located at the specified\n * coordinates.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536375(VS.85).aspx\n * @nosideeffects\n */\nElement.prototype.componentFromPoint = function(iCoordX, iCoordY) {};\n\n\n/**\n * TODO(tjgq): Make this string once existing usages have been migrated.\n * @type {string|boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533690(VS.85).aspx\n */\nElement.prototype.contentEditable;\n\n/**\n * @return {TextRange}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536401(VS.85).aspx\n */\nElement.prototype.createTextRange;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535231(VS.85).aspx\n * @type {?CSSStyleDeclaration}\n */\nElement.prototype.currentStyle;\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/ms536411(v=vs.85).aspx\n */\nElement.prototype.detachEvent;\n\n/**\n * @param {string=} opt_action\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536414%28VS.85%29.aspx\n * @return {undefined}\n */\nElement.prototype.doScroll = function(opt_action) {};\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536423(VS.85).aspx\n */\nElement.prototype.fireEvent;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533783(VS.85).aspx\n */\nElement.prototype.hideFocus;\n\n/**\n * @type {string}\n * @implicitCast\n *\n * TODO(lharker): remove the @implicitCast to enforce assigning an explicit\n * string to innerText instead of relying on coercion.\n *\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533899.aspx\n */\nElement.prototype.innerText;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537838(VS.85).aspx\n */\nElement.prototype.isContentEditable;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms531395(v=vs.85).aspx\n * NOTE: Left untyped to avoid conflict with subclasses.\n */\nElement.prototype.load;\n\n/**\n * @param {number} pointerId Id of the pointer that is assign to the element.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/hh771882(v=vs.85).aspx\n * @return {undefined}\n */\nElement.prototype.msSetPointerCapture = function(pointerId) {};\n\n/**\n * @param {number} pointerId\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/hh771880.aspx\n * @return {undefined}\n */\nElement.prototype.msReleasePointerCapture = function(pointerId) {};\n\n/**\n * @type {?function(Event)}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536903(v=vs.85).aspx\n */\nElement.prototype.onbeforedeactivate;\n\n/**\n * @type {?function(Event)}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536945(VS.85).aspx\n */\nElement.prototype.onmouseenter;\n\n/**\n * @type {?function(Event)}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536946(VS.85).aspx\n */\nElement.prototype.onmouseleave;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536689(VS.85).aspx\n * @return {undefined}\n */\nElement.prototype.releaseCapture = function() {};\n\n/**\n * @param {number} iID\n * @return {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536700(VS.85).aspx\n */\nElement.prototype.removeBehavior = function(iID) {};\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/aa703996(VS.85).aspx\n */\nElement.prototype.runtimeStyle;\n\n/**\n * @param {string} sStoreName The arbitrary name assigned to a persistent object\n * in a UserData store.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms531403(v=vs.85).aspx\n * @return {undefined}\n */\nElement.prototype.save = function(sStoreName) {};\n\n/**\n * @param {boolean=} opt_bContainerCapture Events originating in a container are\n * captured by the container. Defaults to true.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536742(VS.85).aspx\n * @return {undefined}\n */\nElement.prototype.setCapture = function(opt_bContainerCapture) {};\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534635(VS.85).aspx\n */\nElement.prototype.sourceIndex;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537840.aspx\n */\nElement.prototype.unselectable;\n\n/**\n * @constructor\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/aa752462(v=vs.85).aspx\n */\nfunction HTMLFiltersCollection() {}\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/aa752463(v=vs.85).aspx\n * @type {number}\n */\nHTMLFiltersCollection.prototype.length;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537452(v=vs.85).aspx\n * @type {HTMLFiltersCollection}\n */\nElement.prototype.filters;\n\n/**\n * @constructor\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms532853(v=vs.85).aspx\n */\nfunction HTMLFilter() {}\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms532954(v=vs.85).aspx\n * @return {undefined}\n */\nHTMLFilter.prototype.apply = function() {};\n\n/**\n * @constructor\n * @extends {HTMLFilter}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms532967(v=vs.85).aspx\n */\nfunction AlphaFilter() {}\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms532910(v=vs.85).aspx\n * @type {number}\n */\nAlphaFilter.prototype.Opacity;\n\n/**\n * @constructor\n * @extends {HTMLFilter}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms532969(v=vs.85).aspx\n */\nfunction AlphaImageLoaderFilter() {}\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms532920(v=vs.85).aspx\n * @type {string}\n */\nAlphaImageLoaderFilter.prototype.sizingMethod;\n\n// For IE, returns an object representing key-value pairs for all the global\n// variables prefixed with str, e.g. test*\n\n/** @param {*=} opt_str\n */\nfunction RuntimeObject(opt_str) {}\n\n\n/**\n * @type {StyleSheet}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/dd347030(VS.85).aspx\n */\nHTMLStyleElement.prototype.styleSheet;\n\n\n/**\n * IE implements Cross Origin Resource Sharing (cross-domain XMLHttpRequests)\n * via the XDomainRequest object.\n *\n * @constructor\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc288060(v=vs.85).aspx\n * @see http://www.w3.org/TR/cors/\n */\nfunction XDomainRequest() {}\n\n/**\n * Aborts the request.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc288129(v=vs.85).aspx\n * @return {undefined}\n */\nXDomainRequest.prototype.abort = function() {};\n\n/**\n * Sets the method and URL for the request.\n * @param {string} bstrMethod Either \"GET\" or \"POST\"\n * @param {string} bstrUrl The target URL\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc288168(v=vs.85).aspx\n * @return {undefined}\n */\nXDomainRequest.prototype.open = function(bstrMethod, bstrUrl) {};\n\n/**\n * Sends the request.\n * @param {string=} varBody The POST body to send to the server. If omitted,\n * the behavior is identical to sending an empty string.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc288207(v=vs.85).aspx\n * @return {undefined}\n */\nXDomainRequest.prototype.send = function(varBody) {};\n\n/**\n * Called if the request could not be completed. Note that error information is\n * not available.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536930%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.onerror;\n\n/**\n * Called when the response has finished.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536942%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.onload;\n\n/**\n * Called every time part of the response has been received.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc197058%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.onprogress;\n\n/**\n * Called if the timeout period has elapsed.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc197061%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.ontimeout;\n\n/**\n * The current response body.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc287956%28v=VS.85%29.aspx\n * @type {string}\n */\nXDomainRequest.prototype.responseText;\n\n/**\n * The timeout (in milliseconds) for the request.\n * @type {number}\n */\nXDomainRequest.prototype.timeout;\n\n/**\n * The Content-Type of the response, or an empty string.\n * @type {string}\n */\nXDomainRequest.prototype.contentType;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533542(v=vs.85).aspx\n */\nNavigator.prototype.browserLanguage;\n\n/**\n * @type {number}\n * @see https://msdn.m1cr050ft.qjz9zk/en-us/library/ie/hh772144(v=vs.85).aspx\n */\nNavigator.prototype.msMaxTouchPoints;\n\n/**\n * @type {boolean}\n * @see http://blogs.msdn.com/b/ie/archive/2011/09/20/touch-input-for-ie10-and-metro-style-apps.aspx\n */\nNavigator.prototype.msPointerEnabled;\n\n/**\n * @param {(!File|!Blob)} blob\n * @param {string=} opt_defaultName\n * @return {boolean}\n * @see https://msdn.m1cr050ft.qjz9zk/en-us/library/hh772331(v=vs.85).aspx\n */\nNavigator.prototype.msSaveBlob = function(blob, opt_defaultName) {};\n\n/**\n * @param {(!File|!Blob)} blob\n * @param {string=} opt_defaultName\n * @return {boolean}\n * @see https://msdn.m1cr050ft.qjz9zk/en-us/library/hh772332(v=vs.85).aspx\n */\nNavigator.prototype.msSaveOrOpenBlob = function(blob, opt_defaultName) {};\n\n/**\n * @type {number}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533721(v=vs.85).aspx\n */\nScreen.prototype.deviceXDPI;\n\n/**\n * @type {number}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534128%28v=vs.85%29.aspx\n */\nScreen.prototype.logicalXDPI;\n\n/**\n * @type {number}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534130%28v=vs.85%29.aspx\n */\nScreen.prototype.logicalYDPI;\n", -+"externs/webkit_dom.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over W3C\'s DOM\n * specification by WebKit. This file depends on w3c_dom2.js.\n * All the provided definitions has been type annotated\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n */\n\n/**\n * @param {boolean=} opt_center\n * @see https://bugzilla.m0z111a.qjz9zk/show_bug.cgi?id=403510\n * @return {undefined}\n */\nElement.prototype.scrollIntoViewIfNeeded = function(opt_center) {};\n\n/**\n * @constructor\n * @see http://trac.webkit.org/browser/trunk/Source/WebCore/inspector/ScriptProfileNode.idl\n */\nfunction ScriptProfileNode() {};\n\n/** @type {string} */\nScriptProfileNode.prototype.functionName;\n\n/** @type {string} */\nScriptProfileNode.prototype.url;\n\n/** @type {number} */\nScriptProfileNode.prototype.lineNumber;\n\n/** @type {number} */\nScriptProfileNode.prototype.totalTime;\n\n/** @type {number} */\nScriptProfileNode.prototype.selfTime;\n\n/** @type {number} */\nScriptProfileNode.prototype.numberOfCalls;\n\n/** @type {Array} */\nScriptProfileNode.prototype.children;\n\n/** @type {boolean} */\nScriptProfileNode.prototype.visible;\n\n/** @type {number} */\nScriptProfileNode.prototype.callUID;\n\n/**\n * @constructor\n * @see http://trac.webkit.org/browser/trunk/Source/WebCore/inspector/ScriptProfile.idl\n */\nfunction ScriptProfile() {};\n\n/** @type {string} */\nScriptProfile.prototype.title;\n\n/** @type {number} */\nScriptProfile.prototype.uid;\n\n/** @type {ScriptProfileNode} */\nScriptProfile.prototype.head;\n\n/**\n * @type {number}\n * @see http://developer.8n6r01d.qjz9zk/reference/android/webkit/WebView.html\n */\nWindow.prototype.devicePixelRatio;\n\n/**\n * @param {string} contextId\n * @param {string} name\n * @param {number} width\n * @param {number} height\n * @nosideeffects\n * @return {undefined}\n */\nDocument.prototype.getCSSCanvasContext =\n function(contextId, name, width, height) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {?Range}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Document/caretRangeFromPoint\n */\nDocument.prototype.caretRangeFromPoint = function(x, y) {};\n\n/**\n * @return {!Promise}\n * @nosideeffects\n * @see https://webkit.org/blog/8124/introducing-storage-access-api\n */\nDocument.prototype.hasStorageAccess = function() {};\n\n/**\n * @return {!Promise}\n * @see https://webkit.org/blog/8124/introducing-storage-access-api\n * @see https://developer.m0z111a.qjz9zk/docs/Web/API/Document/requestStorageAccess#Syntax\n */\nDocument.prototype.requestStorageAccess = function() {};\n', -+"externs/w3c_css.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's CSS specification\n * The whole file has been fully type annotated.\n * http://www.w3.org/TR/DOM-Level-2-Style/css.html\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n * @author stevey@9oo91e.qjz9zk (Steve Yegge)\n *\n * TODO(nicksantos): When there are no more occurrences of w3c_range.js and\n * gecko_dom.js being included directly in BUILD files, bug dbeam to split the\n * bottom part of this file into a separate externs.\n */\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet\n */\nfunction StyleSheet() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-type\n */\nStyleSheet.prototype.type;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-disabled\n */\nStyleSheet.prototype.disabled;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-owner\n */\nStyleSheet.prototype.ownerNode;\n\n/**\n * @type {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-parentStyleSheet\n */\nStyleSheet.prototype.parentStyleSheet;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-href\n */\nStyleSheet.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-title\n */\nStyleSheet.prototype.title;\n\n/**\n * @type {MediaList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-media\n */\nStyleSheet.prototype.media;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheetList\n */\nfunction StyleSheetList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheetList-length\n */\nStyleSheetList.prototype.length;\n\n/**\n * @param {number} index\n * @return {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheetList-item\n */\nStyleSheetList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList\n */\nfunction MediaList() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList-mediaText\n */\nMediaList.prototype.mediaText;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList-length\n */\nMediaList.prototype.length;\n\n/**\n * @param {number} index\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList-item\n */\nMediaList.prototype.item = function(index) {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-LinkStyle\n */\nfunction LinkStyle() {}\n\n/**\n * @type {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-LinkStyle-sheet\n */\nLinkStyle.prototype.sheet;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-DocumentStyle\n */\nfunction DocumentStyle() {}\n\n/**\n * @type {StyleSheetList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-DocumentStyle-styleSheets\n */\nDocumentStyle.prototype.styleSheets;\n\n/**\n * @constructor\n * @extends {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet\n */\nfunction CSSStyleSheet() {}\n\n/**\n * @type {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-ownerRule\n */\nCSSStyleSheet.prototype.ownerRule;\n\n/**\n * @type {CSSRuleList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-cssRules\n */\nCSSStyleSheet.prototype.cssRules;\n\n/**\n * @param {string} rule\n * @param {number} index\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-insertRule\n */\nCSSStyleSheet.prototype.insertRule = function(rule, index) {};\n\n/**\n * @param {number} index\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-deleteRule\n * @return {undefined}\n */\nCSSStyleSheet.prototype.deleteRule = function(index) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList\n */\nfunction CSSRuleList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList-length\n */\nCSSRuleList.prototype.length;\n\n/**\n * @param {number} index\n * @return {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList-item\n */\nCSSRuleList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule\n */\nfunction CSSRule() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-cssText\n */\nCSSRule.prototype.cssText;\n\n/**\n * @type {CSSStyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-sheet\n */\nCSSRule.prototype.parentStyleSheet;\n\n/**\n * @type {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-parentRule\n */\nCSSRule.prototype.parentRule;\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule\n */\nCSSRule.prototype.style;\n\n/**\n * Indicates that the rule is a {@see CSSUnknownRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.UNKNOWN_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSStyleRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.STYLE_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSCharsetRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.CHARSET_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSImportRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.IMPORT_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSMediaRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.MEDIA_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSFontFaceRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.FONT_FACE_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSPageRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.PAGE_RULE;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule\n */\nfunction CSSStyleRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule-selectorText\n */\nCSSStyleRule.prototype.selectorText;\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule-style\n */\nCSSStyleRule.prototype.style;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule\n */\nfunction CSSMediaRule() {}\n\n/**\n * @type {MediaList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-mediaTypes\n */\nCSSMediaRule.prototype.media;\n\n/**\n * @type {CSSRuleList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-cssRules\n */\nCSSMediaRule.prototype.cssRules;\n\n/**\n * @param {string} rule\n * @param {number} index\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-insertRule\n */\nCSSMediaRule.prototype.insertRule = function(rule, index) {};\n\n/**\n * @param {number} index\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-deleteRule\n * @return {undefined}\n */\nCSSMediaRule.prototype.deleteRule = function(index) {};\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSFontFaceRule\n */\nfunction CSSFontFaceRule() {}\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSFontFaceRule-style\n */\nCSSFontFaceRule.prototype.style;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPageRule\n */\nfunction CSSPageRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPageRule-name\n */\nCSSPageRule.prototype.selectorText;\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPageRule-style\n */\nCSSPageRule.prototype.style;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule\n */\nfunction CSSImportRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule-href\n */\nCSSImportRule.prototype.href;\n\n/**\n * @type {MediaList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule-media\n */\nCSSImportRule.prototype.media;\n\n/**\n * @type {CSSStyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule-styleSheet\n */\nCSSImportRule.prototype.styleSheet;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSCharsetRule\n */\nfunction CSSCharsetRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSCharsetRule-encoding\n */\nCSSCharsetRule.prototype.encoding;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSUnknownRule\n */\nfunction CSSUnknownRule() {}\n\n/**\n * @constructor\n * @extends {CSSProperties}\n * @implements {IObject<(string|number), string>}\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration\n */\nfunction CSSStyleDeclaration() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-cssText\n */\nCSSStyleDeclaration.prototype.cssText;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-length\n */\nCSSStyleDeclaration.prototype.length;\n\n/**\n * @type {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-parentRule\n */\nCSSStyleDeclaration.prototype.parentRule;\n\n/**\n * @param {string} propertyName\n * @return {CSSValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyCSSValue\n */\nCSSStyleDeclaration.prototype.getPropertyCSSValue = function(propertyName) {};\n\n/**\n * @param {string} propertyName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyPriority\n */\nCSSStyleDeclaration.prototype.getPropertyPriority = function(propertyName) {};\n\n/**\n * @param {string} propertyName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyValue\n */\nCSSStyleDeclaration.prototype.getPropertyValue = function(propertyName) {};\n\n/**\n * @param {number} index\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-item\n */\nCSSStyleDeclaration.prototype.item = function(index) {};\n\n/**\n * @param {string} propertyName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-removeProperty\n */\nCSSStyleDeclaration.prototype.removeProperty = function(propertyName) {};\n\n/**\n * @param {string} propertyName\n * @param {string} value\n * @param {string=} opt_priority\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-setProperty\n */\nCSSStyleDeclaration.prototype.setProperty = function(propertyName, value, opt_priority) {};\n\n// IE-specific\n\n/**\n * @param {string} name\n * @param {number=} opt_flags\n * @return {string|number|boolean|null}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536429(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.getAttribute = function(name, opt_flags) {};\n\n/**\n * @param {string} name\n * @return {string|number|boolean|null}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/aa358797(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.getExpression = function(name) {};\n\n/**\n * @param {string} name\n * @param {number=} opt_flags\n * @return {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536696(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.removeAttribute =\n function(name, opt_flags) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/aa358798(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.removeExpression = function(name) {};\n\n/**\n * @deprecated\n * @param {string} name\n * @param {*} value\n * @param {number=} opt_flags\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536739(VS.85).aspx\n * @return {undefined}\n */\nCSSStyleDeclaration.prototype.setAttribute = function(name, value, opt_flags) {};\n\n/**\n * @param {string} name\n * @param {string} expr\n * @param {string=} opt_language\n * @return {undefined}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms531196(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.setExpression =\n function(name, expr, opt_language) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue\n */\nfunction CSSValue() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-cssText\n */\nCSSValue.prototype.cssText;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-cssValueType\n */\nCSSValue.prototype.cssValueType;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_INHERIT;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_PRIMITIVE_VALUE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_VALUE_LIST;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_CUSTOM;\n\n/**\n * @constructor\n * @extends {CSSValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nfunction CSSPrimitiveValue() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.prototype.primitiveType;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_UNKNOWN;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_NUMBER;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PERCENTAGE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_EMS;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_EXS;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PX;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_CM;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_MM;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_IN;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PT;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PC;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_DEG;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_RAD;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_GRAD;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_MS;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_S;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_HZ;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_KHZ;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_DIMENSION;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_STRING;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_URI;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_IDENT;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_ATTR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_COUNTER;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_RECT;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_RGBCOLOR;\n\n/**\n * @return {Counter}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getCounterValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getCounterValue = function() {};\n\n/**\n * @param {number} unitType\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getFloatValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getFloatValue = function(unitType) {};\n\n/**\n * @return {RGBColor}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getRGBColorValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getRGBColorValue = function() {};\n\n/**\n * @return {Rect}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getRectValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getRectValue = function() {};\n\n/**\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getStringValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getStringValue = function() {};\n\n/**\n * @param {number} unitType\n * @param {number} floatValue\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-setFloatValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR},\n * {@see DomException.NO_MODIFICATION_ALLOWED_ERR}\n */\nCSSPrimitiveValue.prototype.setFloatValue = function(unitType, floatValue) {};\n\n/**\n * @param {number} stringType\n * @param {string} stringValue\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-setStringValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR},\n * {@see DomException.NO_MODIFICATION_ALLOWED_ERR}\n */\nCSSPrimitiveValue.prototype.setStringValue = function(stringType, stringValue) {};\n\n/**\n * @constructor\n * @extends {CSSValue}\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValueList\n */\nfunction CSSValueList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValueList-length\n */\nCSSValueList.prototype.length;\n\n/**\n * @param {number} index\n * @return {CSSValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValueList-item\n */\nCSSValueList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor\n */\nfunction RGBColor() {}\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor-red\n */\nRGBColor.prototype.red;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor-green\n */\nRGBColor.prototype.green;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor-blue\n */\nRGBColor.prototype.blue;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect\n */\nfunction Rect() {}\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-top\n */\nRect.prototype.top;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-right\n */\nRect.prototype.right;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-bottom\n */\nRect.prototype.bottom;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-left\n */\nRect.prototype.left;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter\n */\nfunction Counter() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter-identifier\n */\nCounter.prototype.identifier;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter-listStyle\n */\nCounter.prototype.listStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter-separator\n */\nCounter.prototype.separator;\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ViewCSS\n */\nfunction ViewCSS() {}\n\n/**\n * @param {Element} elt\n * @param {?string=} opt_pseudoElt This argument is required according to the\n * CSS2 specification, but optional in all major browsers. See the note at\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Window.getComputedStyle\n * @return {?CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSview-getComputedStyle\n * @see https://bugzilla.m0z111a.qjz9zk/show_bug.cgi?id=548397\n */\nViewCSS.prototype.getComputedStyle = function(elt, opt_pseudoElt) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DocumentCSS\n */\nfunction DocumentCSS() {}\n\n/**\n * @param {Element} elt\n * @param {string} pseudoElt\n * @return {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DocumentCSS-getOverrideStyle\n */\nDocumentCSS.prototype.getOverrideStyle = function(elt, pseudoElt) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DOMImplementationCSS\n */\nfunction DOMImplementationCSS() {}\n\n/**\n * @param {string} title\n * @param {string} media\n * @return {CSSStyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DOMImplementationCSS-createCSSStyleSheet\n * @throws DOMException {@see DomException.SYNTAX_ERR}\n */\nDOMImplementationCSS.prototype.createCSSStyleSheet = function(title, media) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ElementCSSInlineStyle\n */\nfunction ElementCSSInlineStyle() {}\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ElementCSSInlineStyle-style\n */\nElementCSSInlineStyle.prototype.style;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties\n */\nfunction CSSProperties() {}\n\n// CSS 2 properties\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-azimuth\n */\nCSSProperties.prototype.azimuth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-background\n */\nCSSProperties.prototype.background;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundAttachment\n */\nCSSProperties.prototype.backgroundAttachment;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundColor\n */\nCSSProperties.prototype.backgroundColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundImage\n */\nCSSProperties.prototype.backgroundImage;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundPosition\n */\nCSSProperties.prototype.backgroundPosition;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundRepeat\n */\nCSSProperties.prototype.backgroundRepeat;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-background-size\n */\nCSSProperties.prototype.backgroundSize;\n\n/**\n * @implicitCast\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-border\n */\nCSSProperties.prototype.border;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderCollapse\n */\nCSSProperties.prototype.borderCollapse;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderColor\n */\nCSSProperties.prototype.borderColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderSpacing\n */\nCSSProperties.prototype.borderSpacing;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-borderStyle\n */\nCSSProperties.prototype.borderStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTop\n */\nCSSProperties.prototype.borderTop;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRight\n */\nCSSProperties.prototype.borderRight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottom\n */\nCSSProperties.prototype.borderBottom;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeft\n */\nCSSProperties.prototype.borderLeft;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTopColor\n */\nCSSProperties.prototype.borderTopColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRightColor\n */\nCSSProperties.prototype.borderRightColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottomColor\n */\nCSSProperties.prototype.borderBottomColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeftColor\n */\nCSSProperties.prototype.borderLeftColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTopStyle\n */\nCSSProperties.prototype.borderTopStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRightStyle\n */\nCSSProperties.prototype.borderRightStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottomStyle\n */\nCSSProperties.prototype.borderBottomStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeftStyle\n */\nCSSProperties.prototype.borderLeftStyle;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTopWidth\n */\nCSSProperties.prototype.borderTopWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRightWidth\n */\nCSSProperties.prototype.borderRightWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottomWidth\n */\nCSSProperties.prototype.borderBottomWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeftWidth\n */\nCSSProperties.prototype.borderLeftWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderWidth\n */\nCSSProperties.prototype.borderWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderBottomLeftRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderBottomRightRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderTopLeftRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderTopRightRadius;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-source\n */\nCSSProperties.prototype.borderImageSource;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-slice\n */\nCSSProperties.prototype.borderImageSlice;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-width\n */\nCSSProperties.prototype.borderImageWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-outset\n */\nCSSProperties.prototype.borderImageOutset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-repeat\n */\nCSSProperties.prototype.borderImageRepeat;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-border-image\n */\nCSSProperties.prototype.borderImage;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-bottom\n */\nCSSProperties.prototype.bottom;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-captionSide\n */\nCSSProperties.prototype.captionSide;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-clear\n */\nCSSProperties.prototype.clear;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-clip\n */\nCSSProperties.prototype.clip;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-color\n */\nCSSProperties.prototype.color;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-content\n */\nCSSProperties.prototype.content;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-counterIncrement\n */\nCSSProperties.prototype.counterIncrement;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-counterReset\n */\nCSSProperties.prototype.counterReset;\n\n/**\n * This is not an official part of the W3C spec. In practice, this is a settable\n * property that works cross-browser. It is used in goog.dom.setProperties() and\n * needs to be extern'd so the --disambiguate_properties JS compiler pass works.\n * @type {string}\n */\nCSSProperties.prototype.cssText;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cue\n */\nCSSProperties.prototype.cue;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cueAfter\n */\nCSSProperties.prototype.cueAfter;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cueBefore\n */\nCSSProperties.prototype.cueBefore;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cursor\n */\nCSSProperties.prototype.cursor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-direction\n */\nCSSProperties.prototype.direction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-display\n */\nCSSProperties.prototype.display;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-elevation\n */\nCSSProperties.prototype.elevation;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-emptyCells\n */\nCSSProperties.prototype.emptyCells;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cssFloat\n */\nCSSProperties.prototype.cssFloat;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-font\n */\nCSSProperties.prototype.font;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontFamily\n */\nCSSProperties.prototype.fontFamily;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontSize\n */\nCSSProperties.prototype.fontSize;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontSizeAdjust\n */\nCSSProperties.prototype.fontSizeAdjust;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontStretch\n */\nCSSProperties.prototype.fontStretch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontStyle\n */\nCSSProperties.prototype.fontStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontVariant\n */\nCSSProperties.prototype.fontVariant;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontWeight\n */\nCSSProperties.prototype.fontWeight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-height\n */\nCSSProperties.prototype.height;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-left\n */\nCSSProperties.prototype.left;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-letterSpacing\n */\nCSSProperties.prototype.letterSpacing;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-lineHeight\n */\nCSSProperties.prototype.lineHeight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStyle\n */\nCSSProperties.prototype.listStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStyleImage\n */\nCSSProperties.prototype.listStyleImage;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStylePosition\n */\nCSSProperties.prototype.listStylePosition;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStyleType\n */\nCSSProperties.prototype.listStyleType;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-margin\n */\nCSSProperties.prototype.margin;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginTop\n */\nCSSProperties.prototype.marginTop;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginRight\n */\nCSSProperties.prototype.marginRight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginBottom\n */\nCSSProperties.prototype.marginBottom;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginLeft\n */\nCSSProperties.prototype.marginLeft;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-markerOffset\n */\nCSSProperties.prototype.markerOffset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marks\n */\nCSSProperties.prototype.marks;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-maxHeight\n */\nCSSProperties.prototype.maxHeight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-maxWidth\n */\nCSSProperties.prototype.maxWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-minHeight\n */\nCSSProperties.prototype.minHeight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-minWidth\n */\nCSSProperties.prototype.minWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-orphans\n */\nCSSProperties.prototype.orphans;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outline\n */\nCSSProperties.prototype.outline;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outlineColor\n */\nCSSProperties.prototype.outlineColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outlineStyle\n */\nCSSProperties.prototype.outlineStyle;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outlineWidth\n */\nCSSProperties.prototype.outlineWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-overflow\n */\nCSSProperties.prototype.overflow;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-padding\n */\nCSSProperties.prototype.padding;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingTop\n */\nCSSProperties.prototype.paddingTop;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingRight\n */\nCSSProperties.prototype.paddingRight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingBottom\n */\nCSSProperties.prototype.paddingBottom;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingLeft\n */\nCSSProperties.prototype.paddingLeft;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-page\n */\nCSSProperties.prototype.page;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pageBreakAfter\n */\nCSSProperties.prototype.pageBreakAfter;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pageBreakBefore\n */\nCSSProperties.prototype.pageBreakBefore;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pageBreakInside\n */\nCSSProperties.prototype.pageBreakInside;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pause\n */\nCSSProperties.prototype.pause;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pauseAfter\n */\nCSSProperties.prototype.pauseAfter;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pauseBefore\n */\nCSSProperties.prototype.pauseBefore;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pitch\n */\nCSSProperties.prototype.pitch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pitchRange\n */\nCSSProperties.prototype.pitchRange;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-playDuring\n */\nCSSProperties.prototype.playDuring;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-position\n */\nCSSProperties.prototype.position;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-quotes\n */\nCSSProperties.prototype.quotes;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-ui/#resize\n */\nCSSProperties.prototype.resize;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-richness\n */\nCSSProperties.prototype.richness;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-right\n */\nCSSProperties.prototype.right;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-size\n */\nCSSProperties.prototype.size;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speak\n */\nCSSProperties.prototype.speak;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speakHeader\n */\nCSSProperties.prototype.speakHeader;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speakNumeral\n */\nCSSProperties.prototype.speakNumeral;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speakPunctuation\n */\nCSSProperties.prototype.speakPunctuation;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speechRate\n */\nCSSProperties.prototype.speechRate;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-stress\n */\nCSSProperties.prototype.stress;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-tableLayout\n */\nCSSProperties.prototype.tableLayout;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textAlign\n */\nCSSProperties.prototype.textAlign;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textDecoration\n */\nCSSProperties.prototype.textDecoration;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textIndent\n */\nCSSProperties.prototype.textIndent;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textShadow\n */\nCSSProperties.prototype.textShadow;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textTransform\n */\nCSSProperties.prototype.textTransform;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-top\n */\nCSSProperties.prototype.top;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-unicodeBidi\n */\nCSSProperties.prototype.unicodeBidi;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-verticalAlign\n */\nCSSProperties.prototype.verticalAlign;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-visibility\n */\nCSSProperties.prototype.visibility;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-voiceFamily\n */\nCSSProperties.prototype.voiceFamily;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-volume\n */\nCSSProperties.prototype.volume;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-whiteSpace\n */\nCSSProperties.prototype.whiteSpace;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-widows\n */\nCSSProperties.prototype.widows;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-width\n */\nCSSProperties.prototype.width;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-wordSpacing\n */\nCSSProperties.prototype.wordSpacing;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-wordWrap\n */\nCSSProperties.prototype.wordWrap;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-zIndex\n */\nCSSProperties.prototype.zIndex;\n\n// CSS 3 properties\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#box-shadow\n */\nCSSProperties.prototype.boxShadow;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-ui/#box-sizing\n */\nCSSProperties.prototype.boxSizing;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-color/#transparency\n */\nCSSProperties.prototype.opacity;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-ui/#text-overflow\n */\nCSSProperties.prototype.textOverflow;\n\n// CSS 3 animations\n\n/**\n * @type {string|number}\n * @see https://www.w3.org/TR/css-animations-1/#animation\n */\nCSSProperties.prototype.animation;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-delay\n */\nCSSProperties.prototype.animationDelay;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-direction\n */\nCSSProperties.prototype.animationDirection;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-duration\n */\nCSSProperties.prototype.animationDuration;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-fill-mode\n */\nCSSProperties.prototype.animationFillMode;\n\n/**\n * @type {string|number}\n * @see https://www.w3.org/TR/css-animations-1/#animation-iteration-count\n */\nCSSProperties.prototype.animationIterationCount;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-name\n */\nCSSProperties.prototype.animationName;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-play-state\n */\nCSSProperties.prototype.animationPlayState;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-timing-function\n */\nCSSProperties.prototype.animationTimingFunction;\n\n// CSS 3 transforms\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#backface-visibility-property\n */\nCSSProperties.prototype.backfaceVisibility;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#perspective\n */\nCSSProperties.prototype.perspective;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-2d-transforms/#perspective-origin\n */\nCSSProperties.prototype.perspectiveOrigin;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#effects\n */\nCSSProperties.prototype.transform;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-2d-transforms/#transform-origin\n */\nCSSProperties.prototype.transformOrigin;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#transform-style\n */\nCSSProperties.prototype.transformStyle;\n\n// CSS 3 transitions\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition\n */\nCSSProperties.prototype.transition;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-delay\n */\nCSSProperties.prototype.transitionDelay;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-duration\n */\nCSSProperties.prototype.transitionDuration;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-property-property\n */\nCSSProperties.prototype.transitionProperty;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-timing-function\n */\nCSSProperties.prototype.transitionTimingFunction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/SVG11/interact.html#PointerEventsProperty\n */\nCSSProperties.prototype.pointerEvents;\n\n\n// CSS Flexbox 1\n\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#align-content-property\n */\nCSSProperties.prototype.alignContent;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#align-items-property\n */\nCSSProperties.prototype.alignItems;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#align-items-property\n */\nCSSProperties.prototype.alignSelf;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-property\n */\nCSSProperties.prototype.flex;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-basis-property\n */\nCSSProperties.prototype.flexBasis;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-direction-property\n */\nCSSProperties.prototype.flexDirection;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-flow-property\n */\nCSSProperties.prototype.flexFlow;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-grow-property\n */\nCSSProperties.prototype.flexGrow;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-shrink-property\n */\nCSSProperties.prototype.flexShrink;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-wrap-property\n */\nCSSProperties.prototype.flexWrap;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#justify-content-property\n */\nCSSProperties.prototype.justifyContent;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/css-flexbox-1/#order-property\n */\nCSSProperties.prototype.order;\n\n// Externs for CSS Will Change Module Level 1\n// http://www.w3.org/TR/css-will-change/\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css-will-change-1/#will-change\n */\nCSSProperties.prototype.willChange;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-ui-4/#propdef-user-select\n */\nCSSProperties.prototype.userSelect;\n\n// CSS 3 Images\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css3-images/#the-object-fit\n */\nCSSProperties.prototype.objectFit;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css3-images/#object-position\n */\nCSSProperties.prototype.objectPosition;\n\n// CSS Masking\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-masking-1/\n */\nCSSProperties.prototype.clipPath;\n\n// CSS Containment\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-contain-1/\n */\nCSSProperties.prototype.contain;\n\n/**\n * TODO(dbeam): Put this in separate file named w3c_cssom.js.\n * Externs for the CSSOM View Module.\n * @see http://www.w3.org/TR/cssom-view/\n */\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-window-interface\n\n/**\n * @param {string} media_query_list\n * @return {!MediaQueryList}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-matchmedia\n */\nWindow.prototype.matchMedia = function(media_query_list) {};\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-innerwidth\n */\nWindow.prototype.innerWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-innerheight\n */\nWindow.prototype.innerHeight;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrollx\n */\nWindow.prototype.scrollX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-pagexoffset\n */\nWindow.prototype.pageXOffset;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrolly\n */\nWindow.prototype.scrollY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-pageyoffset\n */\nWindow.prototype.pageYOffset;\n\n/**\n * @typedef {{\n * left: (number|undefined),\n * top: (number|undefined),\n * behavior: (string|undefined)\n * }}\n * @see https://www.w3.org/TR/cssom-view/#dictdef-scrolltooptions\n */\nvar ScrollToOptions;\n\n/**\n * @record\n * @see https://www.w3.org/TR/cssom-view/#dictdef-scrollintoviewoptions\n */\nfunction ScrollIntoViewOptions () {}\n\n/** @type {string|undefined} */\nScrollIntoViewOptions.prototype.behavior;\n\n/** @type {string|undefined} */\nScrollIntoViewOptions.prototype.block;\n\n/** @type {string|undefined} */\nScrollIntoViewOptions.prototype.inline;\n\n/**\n * @param {number|!ScrollToOptions} scrollToOptionsOrX\n * @param {number=} opt_y\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scroll\n * @return {undefined}\n */\nWindow.prototype.scroll = function(scrollToOptionsOrX, opt_y) {};\n\n/**\n * @param {number|!ScrollToOptions} scrollToOptionsOrX\n * @param {number=} opt_y\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrollto\n * @return {undefined}\n */\nWindow.prototype.scrollTo = function(scrollToOptionsOrX, opt_y) {};\n\n/**\n * @param {number|!ScrollToOptions} scrollToOptionsOrX\n * @param {number=} opt_y\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrollby\n * @return {undefined}\n */\nWindow.prototype.scrollBy = function(scrollToOptionsOrX, opt_y) {};\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-screenx\n */\nWindow.prototype.screenX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-screeny\n */\nWindow.prototype.screenY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-outerwidth\n */\nWindow.prototype.outerWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-outerheight\n */\nWindow.prototype.outerHeight;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-devicepixelratio\n */\nWindow.prototype.devicePixelRatio;\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-moveto\n */\nWindow.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-moveby\n */\nWindow.prototype.moveBy = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-resizeto\n */\nWindow.prototype.resizeTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-resizeby\n */\nWindow.prototype.resizeBy = function(x, y) {};\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/cssom-view/#mediaquerylist\n */\nfunction MediaQueryList() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-media\n */\nMediaQueryList.prototype.media;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-matches\n */\nMediaQueryList.prototype.matches;\n\n/**\n * @param {MediaQueryListListener} listener\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-addlistener\n * @return {undefined}\n */\nMediaQueryList.prototype.addListener = function(listener) {};\n\n/**\n * @param {MediaQueryListListener} listener\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-removelistener\n * @return {undefined}\n */\nMediaQueryList.prototype.removeListener = function(listener) {};\n\n/** @override Not available in some browsers; use addListener instead. */\nMediaQueryList.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override Not available in old browsers; use removeListener instead. */\nMediaQueryList.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nMediaQueryList.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @typedef {(function(!MediaQueryList) : void)}\n * @see http://www.w3.org/TR/cssom-view/#mediaquerylistlistener\n */\nvar MediaQueryListListener;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/cssom-view/#screen\n */\nfunction Screen() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-availwidth\n */\nScreen.prototype.availWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-availheight\n */\nScreen.prototype.availHeight;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-width\n */\nScreen.prototype.width;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-height\n */\nScreen.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-colordepth\n */\nScreen.prototype.colorDepth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-pixeldepth\n */\nScreen.prototype.pixelDepth;\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-document-interface\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {?Element}\n * @see http://www.w3.org/TR/cssom-view/#dom-document-elementfrompoint\n */\nDocument.prototype.elementFromPoint = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {!IArrayLike}\n * @see http://www.w3.org/TR/cssom-view/#dom-document-elementsfrompoint\n */\nDocument.prototype.elementsFromPoint = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {CaretPosition}\n * @see http://www.w3.org/TR/cssom-view/#dom-document-caretpositionfrompoint\n */\nDocument.prototype.caretPositionFromPoint = function(x, y) {};\n\n/**\n * @type {Element}\n * @see http://dev.w3.org/csswg/cssom-view/#dom-document-scrollingelement\n */\nDocument.prototype.scrollingElement;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/cssom-view/#caretposition\n */\nfunction CaretPosition() {}\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/cssom-view/#dom-caretposition-offsetnode\n */\nCaretPosition.prototype.offsetNode;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-caretposition-offset\n */\nCaretPosition.prototype.offset;\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-element-interface\n\n/**\n * @return {!ClientRectList}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-getclientrects\n */\nElement.prototype.getClientRects = function() {};\n\n/**\n * @return {!DOMRect}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-getboundingclientrect\n */\nElement.prototype.getBoundingClientRect = function() {};\n\n/**\n * @param {(boolean|ScrollIntoViewOptions)=} top\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollintoview\n * @return {undefined}\n */\nElement.prototype.scrollIntoView = function(top) {};\n\n/**\n * @param {number|!ScrollToOptions} scrollToOptionsOrX\n * @param {number=} opt_y\n * @see https://www.w3.org/TR/cssom-view/#extension-to-the-element-interface\n * @return {undefined}\n */\nElement.prototype.scrollTo = function(scrollToOptionsOrX, opt_y) {};\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrolltop\n */\nElement.prototype.scrollTop;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollleft\n */\nElement.prototype.scrollLeft;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollwidth\n */\nElement.prototype.scrollWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollheight\n */\nElement.prototype.scrollHeight;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clienttop\n */\nElement.prototype.clientTop;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clientleft\n */\nElement.prototype.clientLeft;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clientwidth\n */\nElement.prototype.clientWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clientheight\n */\nElement.prototype.clientHeight;\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-htmlelement-interface\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetparent\n */\nHTMLElement.prototype.offsetParent;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsettop\n */\nHTMLElement.prototype.offsetTop;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetleft\n */\nHTMLElement.prototype.offsetLeft;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetwidth\n */\nHTMLElement.prototype.offsetWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetheight\n */\nHTMLElement.prototype.offsetHeight;\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-range-interface\n\n/**\n * @return {!ClientRectList}\n * @see http://www.w3.org/TR/cssom-view/#dom-range-getclientrects\n */\nRange.prototype.getClientRects = function() {};\n\n/**\n * @return {!DOMRect}\n * @see http://www.w3.org/TR/cssom-view/#dom-range-getboundingclientrect\n */\nRange.prototype.getBoundingClientRect = function() {};\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-mouseevent-interface\n\n// MouseEvent: screen{X,Y} and client{X,Y} are in DOM Level 2/3 Event as well,\n// so it seems like a specification issue. I've emailed www-style@w3.org in\n// hopes of resolving the conflict, but in the mean time they can live here\n// (http://lists.w3.org/Archives/Public/www-style/2012May/0039.html).\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-screenx\n */\n//MouseEvent.prototype.screenX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-screeny\n */\n//MouseEvent.prototype.screenY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-pagex\n */\nMouseEvent.prototype.pageX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-pagey\n */\nMouseEvent.prototype.pageY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-clientx\n */\n//MouseEvent.prototype.clientX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-clienty\n */\n//MouseEvent.prototype.clientY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-x\n */\nMouseEvent.prototype.x;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-y\n */\nMouseEvent.prototype.y;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-offsetx\n */\nMouseEvent.prototype.offsetX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-offsety\n */\nMouseEvent.prototype.offsetY;\n\n\n// http://www.w3.org/TR/cssom-view/#rectangles\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/cssom-view/#the-clientrectlist-interface\n * @implements {IArrayLike}\n */\nfunction ClientRectList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrectlist-length\n */\nClientRectList.prototype.length;\n\n/**\n * @param {number} index\n * @return {?DOMRect}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrectlist-item\n */\nClientRectList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * http://www.w3.org/TR/css3-conditional/#CSS-interface\n */\nfunction CSSInterface() {}\n\n/**\n * @param {string} ident\n * @return {string}\n * @see http://www.w3.org/TR/cssom/#the-css.escape()-method\n * @throws DOMException {@see DOMException.INVALID_CHARACTER_ERR}\n */\nCSSInterface.prototype.escape = function(ident) {};\n\n/**\n * @param {string} property\n * @param {string=} opt_value\n * @return {boolean}\n */\nCSSInterface.prototype.supports = function(property, opt_value) {};\n\n/**\n * TODO(nicksantos): This suppress tag probably isn't needed, and\n * should be removed.\n * @suppress {duplicate}\n * @type {CSSInterface}\n */\nvar CSS;\n\n/** @type {CSSInterface} */\nWindow.prototype.CSS;\n\n// http://dev.w3.org/csswg/css-font-loading/\n\n/**\n * Set of possible string values: 'error', 'loaded', 'loading', 'unloaded'.\n * @typedef {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#enumdef-fontfaceloadstatus\n */\nvar FontFaceLoadStatus;\n\n/**\n * @typedef {{\n * style: (string|undefined),\n * weight: (string|undefined),\n * stretch: (string|undefined),\n * unicodeRange: (string|undefined),\n * variant: (string|undefined),\n * featureSettings: (string|undefined)\n * }}\n * @see http://dev.w3.org/csswg/css-font-loading/#dictdef-fontfacedescriptors\n */\nvar FontFaceDescriptors;\n\n/**\n * @constructor\n * @param {string} fontFamily\n * @param {(string|ArrayBuffer|ArrayBufferView)} source\n * @param {!FontFaceDescriptors=} opt_descriptors\n * @see http://dev.w3.org/csswg/css-font-loading/#font-face-constructor\n */\nfunction FontFace(fontFamily, source, opt_descriptors) {}\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-family\n */\nFontFace.prototype.family;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-style\n */\nFontFace.prototype.style;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-weight\n */\nFontFace.prototype.weight;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-stretch\n */\nFontFace.prototype.stretch;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-unicoderange\n */\nFontFace.prototype.unicodeRange;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-variant\n */\nFontFace.prototype.variant;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-featuresettings\n */\nFontFace.prototype.featureSettings;\n\n/**\n * @type {FontFaceLoadStatus}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-status\n */\nFontFace.prototype.status;\n\n/**\n * @return {!Promise}\n * @see http://dev.w3.org/csswg/css-font-loading/#font-face-load\n */\nFontFace.prototype.load = function() {};\n\n/**\n * Set of possible string values: 'loaded', 'loading'.\n * @typedef {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#enumdef-fontfacesetloadstatus\n */\nvar FontFaceSetLoadStatus;\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see http://dev.w3.org/csswg/css-font-loading/#FontFaceSet-interface\n */\nfunction FontFaceSet() {}\n\n// Event handlers\n// http://dev.w3.org/csswg/css-font-loading/#FontFaceSet-events\n\n/** @type {?function (Event)} */ FontFaceSet.prototype.onloading;\n/** @type {?function (Event)} */ FontFaceSet.prototype.onloadingdone;\n/** @type {?function (Event)} */ FontFaceSet.prototype.onloadingerror;\n\n/**\n * @param {!FontFace} value\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-add\n * @return {undefined}\n */\nFontFaceSet.prototype.add = function(value) {};\n\n/**\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-clear\n * @return {undefined}\n */\nFontFaceSet.prototype.clear = function() {};\n\n/**\n * @param {!FontFace} value\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-delete\n * @return {undefined}\n */\nFontFaceSet.prototype.delete = function(value) {};\n\n/**\n * @param {!FontFace} font\n * @return {boolean}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-has\n */\nFontFaceSet.prototype.has = function(font) {};\n\n/**\n * @param {function(!FontFace, number, !FontFaceSet)} callback\n * @param {?Object=} selfObj\n * see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-foreach\n * @return {undefined}\n */\nFontFaceSet.prototype.forEach = function(callback, selfObj) {};\n\n/**\n * @param {string} font\n * @param {string=} opt_text\n * @return {!Promise>}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-load\n */\nFontFaceSet.prototype.load = function(font, opt_text) {};\n\n/**\n * @param {string} font\n * @param {string=} opt_text\n * @return {boolean}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-check\n */\nFontFaceSet.prototype.check = function(font, opt_text) {};\n\n/**\n * @type {!Promise}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-ready\n */\nFontFaceSet.prototype.ready;\n\n/**\n * @type {FontFaceSetLoadStatus}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-status\n */\nFontFaceSet.prototype.status;\n\n/**\n * @constructor\n * @param {string} type\n * @param {{\n * animationName: (string|undefined),\n * elapsedTime: (number|undefined),\n * pseudoElement: (string|undefined)\n * }=} opt_animationEventInitDict\n * @extends {Event}\n * @see https://drafts.csswg.org/css-animations/#interface-animationevent\n */\nfunction AnimationEvent(type, opt_animationEventInitDict) {};\n\n/**\n * @type {string}\n * @see https://drafts.csswg.org/css-animations/#dom-animationevent-animationname\n */\nAnimationEvent.prototype.animationName;\n\n/**\n * @type {number}\n * @see https://drafts.csswg.org/css-animations/#dom-animationevent-elapsedtime\n */\nAnimationEvent.prototype.elapsedTime;\n\n/**\n * @type {string}\n * @see https://drafts.csswg.org/css-animations/#dom-animationevent-pseudoelement\n */\nAnimationEvent.prototype.pseudoElement;\n\n/**\n * @record\n * @see http://dev.w3.org/csswg/css-animations/#csskeyframerule\n */\nfunction CSSKeyframeRule() {}\n\n/**\n * @type {string}\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframerule-keytext\n */\nCSSKeyframeRule.prototype.keyText;\n\n/**\n * @type {!CSSStyleDeclaration}\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframerule-style\n */\nCSSKeyframeRule.prototype.style;\n\n\n/**\n * @record\n * @see http://dev.w3.org/csswg/css-animations/#csskeyframesrule\n */\nfunction CSSKeyframesRule() {}\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-name\n * @type {string}\n */\nCSSKeyframesRule.prototype.name;\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-cssrules\n * @type {!CSSRuleList}\n */\nCSSKeyframesRule.prototype.cssRules;\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-findrule\n * @param {string} key The key text for the rule to find.\n * @return {?CSSKeyframeRule}\n */\nCSSKeyframesRule.prototype.findRule = function(key) {};\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-appendrule\n * @param {string} rule The text for the rule to append.\n */\nCSSKeyframesRule.prototype.appendRule = function(rule) {};\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-deleterule\n * @param {string} key The key text for the rule to delete.\n */\nCSSKeyframesRule.prototype.deleteRule = function(key) {};\n", -+"externs/gecko_css.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for Gecko\'s custom CSS properties. Copied from:\n * http://mxr.m0z111a.qjz9zk/mozilla2.0/source/dom/interfaces/css/nsIDOMCSS2Properties.idl\n *\n * @externs\n * @author nicksantos@9oo91e.qjz9zk (Nick Santos)\n */\n\n\n/** @type {string} */ CSSProperties.prototype.MozAppearance;\n/** @type {string} */ CSSProperties.prototype.MozBackfaceVisibility;\n/** @type {string} */ CSSProperties.prototype.MozBackgroundClip;\n/** @type {string} */ CSSProperties.prototype.MozBackgroundInlinePolicy;\n/** @type {string} */ CSSProperties.prototype.MozBackgroundOrigin;\n/** @type {string} */ CSSProperties.prototype.MozBinding;\n/** @type {string} */ CSSProperties.prototype.MozBorderBottomColors;\n/** @type {string} */ CSSProperties.prototype.MozBorderEnd;\n/** @type {string} */ CSSProperties.prototype.MozBorderEndColor;\n/** @type {string} */ CSSProperties.prototype.MozBorderEndStyle;\n/** @type {string} */ CSSProperties.prototype.MozBorderEndWidth;\n/** @type {string} */ CSSProperties.prototype.MozBorderImage;\n/** @type {string} */ CSSProperties.prototype.MozBorderLeftColors;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadius;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusTopleft;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusTopright;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusBottomleft;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusBottomright;\n/** @type {string} */ CSSProperties.prototype.MozBorderRightColors;\n/** @type {string} */ CSSProperties.prototype.MozBorderStart;\n/** @type {string} */ CSSProperties.prototype.MozBorderStartColor;\n/** @type {string} */ CSSProperties.prototype.MozBorderStartStyle;\n/** @type {string} */ CSSProperties.prototype.MozBorderStartWidth;\n/** @type {string} */ CSSProperties.prototype.MozBorderTopColors;\n/** @type {string} */ CSSProperties.prototype.MozBoxAlign;\n/** @type {string} */ CSSProperties.prototype.MozBoxDirection;\n/** @type {string} */ CSSProperties.prototype.MozBoxFlex;\n/** @type {string} */ CSSProperties.prototype.MozBoxOrdinalGroup;\n/** @type {string} */ CSSProperties.prototype.MozBoxOrient;\n/** @type {string} */ CSSProperties.prototype.MozBoxPack;\n/** @type {string} */ CSSProperties.prototype.MozBoxSizing;\n/** @type {string} */ CSSProperties.prototype.MozBoxShadow;\n/** @type {string} */ CSSProperties.prototype.MozColumnCount;\n/** @type {string} */ CSSProperties.prototype.MozColumnGap;\n/** @type {string} */ CSSProperties.prototype.MozColumnRule;\n/** @type {string} */ CSSProperties.prototype.MozColumnRuleColor;\n/** @type {string} */ CSSProperties.prototype.MozColumnRuleStyle;\n/** @type {string} */ CSSProperties.prototype.MozColumnRuleWidth;\n/** @type {string} */ CSSProperties.prototype.MozColumnWidth;\n/** @type {string} */ CSSProperties.prototype.MozFloatEdge;\n/** @type {string} */ CSSProperties.prototype.MozFontFeatureSettings;\n/** @type {string} */ CSSProperties.prototype.MozFontLanguageOverride;\n/** @type {string} */ CSSProperties.prototype.MozForceBrokenImageIcon;\n/** @type {string} */ CSSProperties.prototype.MozImageRegion;\n/** @type {string} */ CSSProperties.prototype.MozMarginEnd;\n/** @type {string} */ CSSProperties.prototype.MozMarginStart;\n/** @type {number|string} */ CSSProperties.prototype.MozOpacity;\n/** @type {string} */ CSSProperties.prototype.MozOutline;\n/** @type {string} */ CSSProperties.prototype.MozOutlineColor;\n/** @type {string} */ CSSProperties.prototype.MozOutlineOffset;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadius;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusBottomleft;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusBottomright;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusTopleft;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusTopright;\n/** @type {string} */ CSSProperties.prototype.MozOutlineStyle;\n/** @type {string} */ CSSProperties.prototype.MozOutlineWidth;\n/** @type {string} */ CSSProperties.prototype.MozPaddingEnd;\n/** @type {string} */ CSSProperties.prototype.MozPaddingStart;\n/** @type {string} */ CSSProperties.prototype.MozPerspective;\n/** @type {string} */ CSSProperties.prototype.MozStackSizing;\n/** @type {string} */ CSSProperties.prototype.MozTabSize;\n/** @type {string} */ CSSProperties.prototype.MozTransform;\n/** @type {string} */ CSSProperties.prototype.MozTransformOrigin;\n/** @type {string} */ CSSProperties.prototype.MozTransition;\n/** @type {string} */ CSSProperties.prototype.MozTransitionDelay;\n/** @type {string} */ CSSProperties.prototype.MozTransitionDuration;\n/** @type {string} */ CSSProperties.prototype.MozTransitionProperty;\n/** @type {string} */ CSSProperties.prototype.MozTransitionTimingFunction;\n/** @type {string} */ CSSProperties.prototype.MozUserFocus;\n/** @type {string} */ CSSProperties.prototype.MozUserInput;\n/** @type {string} */ CSSProperties.prototype.MozUserModify;\n/** @type {string} */ CSSProperties.prototype.MozUserSelect;\n/** @type {string} */ CSSProperties.prototype.MozWindowShadow;\n\n\n// These are non-standard Gecko CSSOM properties on Window.prototype.screen.\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/window.screen.availTop\n */\nScreen.prototype.availTop;\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/window.screen.availLeft\n */\nScreen.prototype.availLeft;\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/window.screen.left\n */\nScreen.prototype.left;\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/window.screen.top\n */\nScreen.prototype.top;\n', -+"externs/ie_css.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for IE\'s custom CSS properties, as defined here:\n * http://msdn.m1cr050ft.qjz9zk/en-us/library/aa768661(VS.85).aspx\n *\n * This page is also useful for the IDL definitions:\n * http://source.winehq.org/source/include/mshtml.idl\n *\n * @externs\n * @author nicksantos@9oo91e.qjz9zk\n */\n\n/** @type {Element} */\nStyleSheet.prototype.owningElement;\n\n/** @type {boolean} */\nStyleSheet.prototype.readOnly;\n\n/** @type {StyleSheetList} */\nStyleSheet.prototype.imports;\n\n/** @type {string} */\nStyleSheet.prototype.id;\n\n/**\n * @param {string} bstrURL\n * @param {number} lIndex\n * @return {number}\n */\nStyleSheet.prototype.addImport;\n\n/**\n * @param {string} bstrSelector\n * @param {string} bstrStyle\n * @param {number=} opt_iIndex\n * @return {number}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/aa358796%28v=vs.85%29.aspx\n */\nStyleSheet.prototype.addRule;\n\n/**\n * @param {number} lIndex\n */\nStyleSheet.prototype.removeImport;\n\n/**\n * @param {number} lIndex\n */\nStyleSheet.prototype.removeRule;\n\n/** @type {string} */\nStyleSheet.prototype.cssText;\n\n/** @type {CSSRuleList} */\nStyleSheet.prototype.rules;\n\n// StyleSheet methods\n\n/**\n * @param {string} propName\n * @return {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/aa358797(VS.85).aspx\n */\nStyleSheet.prototype.getExpression;\n\n/**\n * @param {string} name\n * @param {string} expression\n * @return {undefined}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms531196(VS.85).aspx\n */\nStyleSheet.prototype.setExpression;\n\n/**\n * @param {string} expression\n * @return {undefined}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/aa358798(VS.85).aspx\n */\nStyleSheet.prototype.removeExpression;\n\n// IE-only CSS style names.\n\n/** @type {string} */ CSSProperties.prototype.backgroundPositionX;\n\n/** @type {string} */ CSSProperties.prototype.backgroundPositionY;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/ms531081(v=vs.85).aspx\n * NOTE: Left untyped to avoid conflict with caller.\n */\nCSSProperties.prototype.behavior;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533883.aspx\n */\nCSSProperties.prototype.imeMode;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534176(VS.85).aspx\n */\nCSSProperties.prototype.msInterpolationMode;\n\n/** @type {string} */ CSSProperties.prototype.overflowX;\n\n/** @type {string} */ CSSProperties.prototype.overflowY;\n\n/** @type {number} */ CSSProperties.prototype.pixelWidth;\n\n/** @type {number} */ CSSProperties.prototype.pixelHeight;\n\n/** @type {number} */ CSSProperties.prototype.pixelLeft;\n\n/** @type {number} */ CSSProperties.prototype.pixelTop;\n\n/** @type {string} */ CSSProperties.prototype.styleFloat;\n\n/**\n * @type {string|number}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535169(VS.85).aspx\n */\nCSSProperties.prototype.zoom;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535153(VS.85).aspx\n */\nCSSProperties.prototype.writingMode;\n\n/**\n * IE-specific extensions.\n * @see http://blogs.msdn.com/b/ie/archive/2008/09/08/microsoft-css-vendor-extensions.aspx\n */\n\n/** @type {string} */\nCSSProperties.prototype.MsAccelerator;\n\n/** @type {string} */\nCSSProperties.prototype.MsBackgroundPositionX;\n\n/** @type {string} */\nCSSProperties.prototype.MsBackgroundPositionY;\n\n/** @type {string} */\nCSSProperties.prototype.MsBehavior;\n\n/** @type {string} */\nCSSProperties.prototype.MsBlockProgression;\n\n/** @type {string} */\nCSSProperties.prototype.MsFilter;\n\n/** @type {string} */\nCSSProperties.prototype.MsImeMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGrid;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridChar;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridLine;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridType;\n\n/** @type {string} */\nCSSProperties.prototype.MsLineBreak;\n\n/** @type {string} */\nCSSProperties.prototype.MsLineGridMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsInterpolationMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsOverflowX;\n\n/** @type {string} */\nCSSProperties.prototype.MsOverflowY;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbar3dlightColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarArrowColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarBaseColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarDarkshadowColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarFaceColor;\n\nCSSProperties.prototype.MsScrollbarHighlightColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarShadowColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarTrackColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextAlignLast;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextAutospace;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextJustify;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextKashidaSpace;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextOverflow;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextUnderlinePosition;\n\n/** @type {string} */\nCSSProperties.prototype.MsWordBreak;\n\n/** @type {string} */\nCSSProperties.prototype.MsWordWrap;\n\n/** @type {string} */\nCSSProperties.prototype.MsWritingMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsZoom;\n\n/** @type {string} */\nCSSProperties.prototype.MsUserSelect;\n\n// See: http://msdn.m1cr050ft.qjz9zk/en-us/library/windows/apps/Hh702466.aspx\n\n/** @type {string} */\nCSSProperties.prototype.msContentZooming;\n\n/** @type {string} */\nCSSProperties.prototype.msTouchAction;\n\n/** @type {string} */\nCSSProperties.prototype.msTransform;\n\n/** @type {string} */\nCSSProperties.prototype.msTransition;\n', -+"externs/webkit_css.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for WebKit\'s custom CSS properties. Copied from:\n * {@link\n * http://trac.webkit.org/browser/trunk/Source/WebCore/css/CSSPropertyNames.in}\n *\n * If you make changes to this file, notice that every property appears\n * twice: once as an uppercase name and once as a lowercase name.\n * WebKit allows both. The uppercase version is preferred.\n *\n * @externs\n * @author nicksantos@9oo91e.qjz9zk (Nick Santos)\n * @author mastepien@9oo91e.qjz9zk (Marek Stepien)\n */\n\n/** @type {string} */ CSSProperties.prototype.WebkitAlignContent;\n/** @type {string} */ CSSProperties.prototype.WebkitAlignItems;\n/** @type {string} */ CSSProperties.prototype.WebkitAlignSelf;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimation;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationDelay;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationDuration;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationFillMode;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationIterationCount;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationName;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationPlayState;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationTimingFunction;\n/** @type {string} */ CSSProperties.prototype.WebkitAppearance;\n/** @type {string} */ CSSProperties.prototype.WebkitAppRegion;\n/** @type {string} */ CSSProperties.prototype.WebkitAspectRatio;\n/** @type {string} */ CSSProperties.prototype.WebkitBackfaceVisibility;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundClip;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundComposite;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundSize;\n/** @type {string} */ CSSProperties.prototype.WebkitBinding;\n/** @type {string} */ CSSProperties.prototype.WebkitBlendMode;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfterColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfterStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfterWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBeforeColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBeforeStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBeforeWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBottomLeftRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBottomRightRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEnd;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEndColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEndStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEndWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderFit;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderHorizontalSpacing;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderImage;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStart;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStartColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStartStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStartWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderTopLeftRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderTopRightRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderVerticalSpacing;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxAlign;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxDecorationBreak;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxFlex;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxFlexGroup;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxLines;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxOrdinalGroup;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxOrient;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxPack;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxReflect;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxShadow;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxSizing;\n/** @type {string} */ CSSProperties.prototype.WebkitColorCorrection;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnAxis;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnBreakAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnBreakBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnBreakInside;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnCount;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnGap;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnProgression;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRule;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRuleColor;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRuleStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRuleWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitColumns;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnSpan;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitDashboardRegion;\n/** @type {string} */ CSSProperties.prototype.WebkitFilter;\n/** @type {string} */ CSSProperties.prototype.WebkitFlex;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexBasis;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexFlow;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexGrow;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexShrink;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexWrap;\n/** @type {string} */ CSSProperties.prototype.WebkitFlowFrom;\n/** @type {string} */ CSSProperties.prototype.WebkitFlowInto;\n/** @type {string} */ CSSProperties.prototype.WebkitFontSizeDelta;\n/** @type {string} */ CSSProperties.prototype.WebkitFontSmoothing;\n/** @type {string} */ CSSProperties.prototype.WebkitGridColumn;\n/** @type {string} */ CSSProperties.prototype.WebkitGridColumns;\n/** @type {string} */ CSSProperties.prototype.WebkitGridRow;\n/** @type {string} */ CSSProperties.prototype.WebkitGridRows;\n/** @type {string} */ CSSProperties.prototype.WebkitHighlight;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateCharacter;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateLimitAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateLimitBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateLimitLines;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphens;\n/** @type {string} */ CSSProperties.prototype.WebkitJustifyContent;\n/** @type {string} */ CSSProperties.prototype.WebkitLineAlign;\n/** @type {string} */ CSSProperties.prototype.WebkitLineBoxContain;\n/** @type {string} */ CSSProperties.prototype.WebkitLineBreak;\n/** @type {string} */ CSSProperties.prototype.WebkitLineClamp;\n/** @type {string} */ CSSProperties.prototype.WebkitLineGrid;\n/** @type {string} */ CSSProperties.prototype.WebkitLineSnap;\n/** @type {string} */ CSSProperties.prototype.WebkitLocale;\n/** @type {string} */ CSSProperties.prototype.WebkitLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.WebkitLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginAfterCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginBeforeCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginBottomCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginEnd;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginStart;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginTopCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarquee;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeIncrement;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeRepetition;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeSpeed;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitMask;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskAttachment;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImage;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageOutset;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageRepeat;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageSlice;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageSource;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskClip;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskComposite;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskImage;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskPosition;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskPositionX;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskPositionY;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskRepeat;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskRepeatX;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskRepeatY;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskSize;\n/** @type {string} */\nCSSProperties.prototype.WebkitMatchNearestMailBlockquoteColor;\n/** @type {string} */ CSSProperties.prototype.WebkitMaxLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.WebkitMaxLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitMinLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.WebkitMinLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitNbspMode;\n/** @type {string} */ CSSProperties.prototype.WebkitOrder;\n/** @type {string} */ CSSProperties.prototype.WebkitOverflowScrolling;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingEnd;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingStart;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspective;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspectiveOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspectiveOriginX;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspectiveOriginY;\n/** @type {string} */ CSSProperties.prototype.WebkitPrintColorAdjust;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionBreakAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionBreakBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionBreakInside;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionOverflow;\n/** @type {string} */ CSSProperties.prototype.WebkitRtlOrdering;\n/** @type {string} */ CSSProperties.prototype.WebkitRubyPosition;\n/** @type {string} */ CSSProperties.prototype.WebkitShapeInside;\n/** @type {string} */ CSSProperties.prototype.WebkitShapeMargin;\n/** @type {string} */ CSSProperties.prototype.WebkitShapeOutside;\n/** @type {string} */ CSSProperties.prototype.WebkitShapePadding;\n/** @type {string} */ CSSProperties.prototype.WebkitTapHighlightColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextAlignLast;\n/** @type {string} */ CSSProperties.prototype.WebkitTextCombine;\n/** @type {string} */ CSSProperties.prototype.WebkitTextDecorationLine;\n/** @type {string} */ CSSProperties.prototype.WebkitTextDecorationsInEffect;\n/** @type {string} */ CSSProperties.prototype.WebkitTextDecorationStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasis;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasisColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasisPosition;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasisStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitTextFillColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextOrientation;\n/** @type {string} */ CSSProperties.prototype.WebkitTextSecurity;\n/** @type {string} */ CSSProperties.prototype.WebkitTextSizeAdjust;\n/** @type {string} */ CSSProperties.prototype.WebkitTextStroke;\n/** @type {string} */ CSSProperties.prototype.WebkitTextStrokeColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextStrokeWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitTransform;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOriginX;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOriginY;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOriginZ;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitTransition;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionDelay;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionDuration;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionProperty;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionRepeatCount;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionTimingFunction;\n/** @type {string} */ CSSProperties.prototype.WebkitUserDrag;\n/** @type {string} */ CSSProperties.prototype.WebkitUserModify;\n/** @type {string} */ CSSProperties.prototype.WebkitUserSelect;\n/** @type {string} */ CSSProperties.prototype.WebkitWrap;\n/** @type {string} */ CSSProperties.prototype.WebkitWrapFlow;\n/** @type {string} */ CSSProperties.prototype.WebkitWrapThrough;\n/** @type {string} */ CSSProperties.prototype.WebkitWritingMode;\n\n// WebKit also adds bindings for the lowercase versions of these properties.\n// The uppercase version is preferred.\n\n/** @type {string} */ CSSProperties.prototype.webkitAlignContent;\n/** @type {string} */ CSSProperties.prototype.webkitAlignItems;\n/** @type {string} */ CSSProperties.prototype.webkitAlignSelf;\n/** @type {string} */ CSSProperties.prototype.webkitAnimation;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationDelay;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationDirection;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationDuration;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationFillMode;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationIterationCount;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationName;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationPlayState;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationTimingFunction;\n/** @type {string} */ CSSProperties.prototype.webkitAppearance;\n/** @type {string} */ CSSProperties.prototype.webkitAppRegion;\n/** @type {string} */ CSSProperties.prototype.webkitAspectRatio;\n/** @type {string} */ CSSProperties.prototype.webkitBackfaceVisibility;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundClip;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundComposite;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundSize;\n/** @type {string} */ CSSProperties.prototype.webkitBinding;\n/** @type {string} */ CSSProperties.prototype.webkitBlendMode;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfter;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfterColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfterStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfterWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBefore;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBeforeColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBeforeStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBeforeWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBottomLeftRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBottomRightRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEnd;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEndColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEndStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEndWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderFit;\n/** @type {string} */ CSSProperties.prototype.webkitBorderHorizontalSpacing;\n/** @type {string} */ CSSProperties.prototype.webkitBorderImage;\n/** @type {string} */ CSSProperties.prototype.webkitBorderRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStart;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStartColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStartStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStartWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderTopLeftRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderTopRightRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderVerticalSpacing;\n/** @type {string} */ CSSProperties.prototype.webkitBoxAlign;\n/** @type {string} */ CSSProperties.prototype.webkitBoxDecorationBreak;\n/** @type {string} */ CSSProperties.prototype.webkitBoxDirection;\n/** @type {string} */ CSSProperties.prototype.webkitBoxFlex;\n/** @type {string} */ CSSProperties.prototype.webkitBoxFlexGroup;\n/** @type {string} */ CSSProperties.prototype.webkitBoxLines;\n/** @type {string} */ CSSProperties.prototype.webkitBoxOrdinalGroup;\n/** @type {string} */ CSSProperties.prototype.webkitBoxOrient;\n/** @type {string} */ CSSProperties.prototype.webkitBoxPack;\n/** @type {string} */ CSSProperties.prototype.webkitBoxReflect;\n/** @type {string} */ CSSProperties.prototype.webkitBoxShadow;\n/** @type {string} */ CSSProperties.prototype.webkitBoxSizing;\n/** @type {string} */ CSSProperties.prototype.webkitColorCorrection;\n/** @type {string} */ CSSProperties.prototype.webkitColumnAxis;\n/** @type {string} */ CSSProperties.prototype.webkitColumnBreakAfter;\n/** @type {string} */ CSSProperties.prototype.webkitColumnBreakBefore;\n/** @type {string} */ CSSProperties.prototype.webkitColumnBreakInside;\n/** @type {string} */ CSSProperties.prototype.webkitColumnCount;\n/** @type {string} */ CSSProperties.prototype.webkitColumnGap;\n/** @type {string} */ CSSProperties.prototype.webkitColumnProgression;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRule;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRuleColor;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRuleStyle;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRuleWidth;\n/** @type {string} */ CSSProperties.prototype.webkitColumns;\n/** @type {string} */ CSSProperties.prototype.webkitColumnSpan;\n/** @type {string} */ CSSProperties.prototype.webkitColumnWidth;\n/** @type {string} */ CSSProperties.prototype.webkitDashboardRegion;\n/** @type {string} */ CSSProperties.prototype.webkitFilter;\n/** @type {string} */ CSSProperties.prototype.webkitFlex;\n/** @type {string} */ CSSProperties.prototype.webkitFlexBasis;\n/** @type {string} */ CSSProperties.prototype.webkitFlexDirection;\n/** @type {string} */ CSSProperties.prototype.webkitFlexFlow;\n/** @type {string} */ CSSProperties.prototype.webkitFlexGrow;\n/** @type {string} */ CSSProperties.prototype.webkitFlexShrink;\n/** @type {string} */ CSSProperties.prototype.webkitFlexWrap;\n/** @type {string} */ CSSProperties.prototype.webkitFlowFrom;\n/** @type {string} */ CSSProperties.prototype.webkitFlowInto;\n/** @type {string} */ CSSProperties.prototype.webkitFontSizeDelta;\n/** @type {string} */ CSSProperties.prototype.webkitFontSmoothing;\n/** @type {string} */ CSSProperties.prototype.webkitGridColumn;\n/** @type {string} */ CSSProperties.prototype.webkitGridColumns;\n/** @type {string} */ CSSProperties.prototype.webkitGridRow;\n/** @type {string} */ CSSProperties.prototype.webkitGridRows;\n/** @type {string} */ CSSProperties.prototype.webkitHighlight;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateCharacter;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateLimitAfter;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateLimitBefore;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateLimitLines;\n/** @type {string} */ CSSProperties.prototype.webkitHyphens;\n/** @type {string} */ CSSProperties.prototype.webkitJustifyContent;\n/** @type {string} */ CSSProperties.prototype.webkitLineAlign;\n/** @type {string} */ CSSProperties.prototype.webkitLineBoxContain;\n/** @type {string} */ CSSProperties.prototype.webkitLineBreak;\n/** @type {string} */ CSSProperties.prototype.webkitLineClamp;\n/** @type {string} */ CSSProperties.prototype.webkitLineGrid;\n/** @type {string} */ CSSProperties.prototype.webkitLineSnap;\n/** @type {string} */ CSSProperties.prototype.webkitLocale;\n/** @type {string} */ CSSProperties.prototype.webkitLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.webkitLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.webkitMarginAfter;\n/** @type {string} */ CSSProperties.prototype.webkitMarginAfterCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginBefore;\n/** @type {string} */ CSSProperties.prototype.webkitMarginBeforeCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginBottomCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginEnd;\n/** @type {string} */ CSSProperties.prototype.webkitMarginStart;\n/** @type {string} */ CSSProperties.prototype.webkitMarginTopCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarquee;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeDirection;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeIncrement;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeRepetition;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeSpeed;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeStyle;\n/** @type {string} */ CSSProperties.prototype.webkitMask;\n/** @type {string} */ CSSProperties.prototype.webkitMaskAttachment;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImage;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageOutset;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageRepeat;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageSlice;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageSource;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageWidth;\n/** @type {string} */ CSSProperties.prototype.webkitMaskClip;\n/** @type {string} */ CSSProperties.prototype.webkitMaskComposite;\n/** @type {string} */ CSSProperties.prototype.webkitMaskImage;\n/** @type {string} */ CSSProperties.prototype.webkitMaskOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitMaskPosition;\n/** @type {string} */ CSSProperties.prototype.webkitMaskPositionX;\n/** @type {string} */ CSSProperties.prototype.webkitMaskPositionY;\n/** @type {string} */ CSSProperties.prototype.webkitMaskRepeat;\n/** @type {string} */ CSSProperties.prototype.webkitMaskRepeatX;\n/** @type {string} */ CSSProperties.prototype.webkitMaskRepeatY;\n/** @type {string} */ CSSProperties.prototype.webkitMaskSize;\n/** @type {string} */\nCSSProperties.prototype.webkitMatchNearestMailBlockquoteColor;\n/** @type {string} */ CSSProperties.prototype.webkitMaxLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.webkitMaxLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.webkitMinLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.webkitMinLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.webkitNbspMode;\n/** @type {string} */ CSSProperties.prototype.webkitOrder;\n/** @type {string} */ CSSProperties.prototype.webkitOverflowScrolling;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingAfter;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingBefore;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingEnd;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingStart;\n/** @type {string} */ CSSProperties.prototype.webkitPerspective;\n/** @type {string} */ CSSProperties.prototype.webkitPerspectiveOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitPerspectiveOriginX;\n/** @type {string} */ CSSProperties.prototype.webkitPerspectiveOriginY;\n/** @type {string} */ CSSProperties.prototype.webkitPrintColorAdjust;\n/** @type {string} */ CSSProperties.prototype.webkitRegionBreakAfter;\n/** @type {string} */ CSSProperties.prototype.webkitRegionBreakBefore;\n/** @type {string} */ CSSProperties.prototype.webkitRegionBreakInside;\n/** @type {string} */ CSSProperties.prototype.webkitRegionOverflow;\n/** @type {string} */ CSSProperties.prototype.webkitRtlOrdering;\n/** @type {string} */ CSSProperties.prototype.webkitRubyPosition;\n/** @type {string} */ CSSProperties.prototype.webkitShapeInside;\n/** @type {string} */ CSSProperties.prototype.webkitShapeMargin;\n/** @type {string} */ CSSProperties.prototype.webkitShapeOutside;\n/** @type {string} */ CSSProperties.prototype.webkitShapePadding;\n/** @type {string} */ CSSProperties.prototype.webkitTapHighlightColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextAlignLast;\n/** @type {string} */ CSSProperties.prototype.webkitTextCombine;\n/** @type {string} */ CSSProperties.prototype.webkitTextDecorationLine;\n/** @type {string} */ CSSProperties.prototype.webkitTextDecorationsInEffect;\n/** @type {string} */ CSSProperties.prototype.webkitTextDecorationStyle;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasis;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasisColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasisPosition;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasisStyle;\n/** @type {string} */ CSSProperties.prototype.webkitTextFillColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextOrientation;\n/** @type {string} */ CSSProperties.prototype.webkitTextSecurity;\n/** @type {string} */ CSSProperties.prototype.webkitTextSizeAdjust;\n/** @type {string} */ CSSProperties.prototype.webkitTextStroke;\n/** @type {string} */ CSSProperties.prototype.webkitTextStrokeColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextStrokeWidth;\n/** @type {string} */ CSSProperties.prototype.webkitTransform;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOriginX;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOriginY;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOriginZ;\n/** @type {string} */ CSSProperties.prototype.webkitTransformStyle;\n/** @type {string} */ CSSProperties.prototype.webkitTransition;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionDelay;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionDuration;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionProperty;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionRepeatCount;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionTimingFunction;\n/** @type {string} */ CSSProperties.prototype.webkitUserDrag;\n/** @type {string} */ CSSProperties.prototype.webkitUserModify;\n/** @type {string} */ CSSProperties.prototype.webkitUserSelect;\n/** @type {string} */ CSSProperties.prototype.webkitWrap;\n/** @type {string} */ CSSProperties.prototype.webkitWrapFlow;\n/** @type {string} */ CSSProperties.prototype.webkitWrapThrough;\n/** @type {string} */ CSSProperties.prototype.webkitWritingMode;\n\n/**\n * @constructor\n * @param {number} x\n * @param {number} y\n */\nfunction WebKitPoint(x, y) {}\n\n/** @type {number} */\nWebKitPoint.prototype.x;\n\n/** @type {number} */\nWebKitPoint.prototype.y;\n', -+"externs/google_legacy.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Declaration of the type level google namespace.\n * @externs\n * @author nicksantos@9oo91e.qjz9zk (Nick Santos)\n */\n\n/**\n * Suppresses the compiler warning when multiple externs files declare the\n * google namespace.\n * @suppress {duplicate,strictMissingProperties}\n * NOTE: This definition should be marked \\@const, and when it is we can remove\n * the "strictMissingProperties" suppression.\n */\n// TODO(nicksantos): Consolidate to one google namespace declaration.\nvar google = {};\n', -+"externs/deprecated.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview JavaScript Built-Ins that are not part of any specifications\n * but are still needed in some project\'s build.\n * @externs\n */\nvar opera = {};\n\nopera.postError;\n\n/** @nosideeffects */\nopera.version = function() {};\n\n/** @constructor */\nfunction XSLTProcessor() {}\n\n/**\n * @constructor\n * @extends {HTMLOptionElement}\n * @param {*=} opt_text\n * @param {*=} opt_value\n * @param {*=} opt_defaultSelected\n * @param {*=} opt_selected\n */\nfunction Option(opt_text, opt_value, opt_defaultSelected, opt_selected) {}\n\n\n// The "methods" object is a place to hang arbitrary external\n// properties. It is a throwback to pre-typed days, and should\n// not be used for any new definitions; it exists only to bridge\n// the gap between the old way and the new way.\nvar methods = {};\n\n/**\n * FF 1.5+ only\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @return {boolean}\n * @template T,S\n * @deprecated\n */\nArray.every = function(arr, callback, opt_context) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @return {!Array}\n * @template T,S\n * @deprecated\n */\nArray.filter = function(arr, callback, opt_context) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @template T,S\n * @return {undefined}\n * @deprecated\n */\nArray.forEach = function(arr, callback, opt_context) {};\n\n/**\n * Mozilla 1.6+ only.\n * @param {IArrayLike} arr\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @template T\n * @nosideeffects\n * @deprecated\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf\n */\nArray.indexOf = function(arr, obj, opt_fromIndex) {};\n\n/**\n * Mozilla 1.6+ only.\n * @param {IArrayLike} arr\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @template T\n * @nosideeffects\n * @deprecated\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf\n */\nArray.lastIndexOf = function(arr, obj, opt_fromIndex) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, !Array): R} callback\n * @param {S=} opt_context\n * @return {!Array}\n * @deprecated\n * @template T,S,R\n */\nArray.map = function(arr, callback, opt_context) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @return {boolean}\n * @deprecated\n * @template T,S\n */\nArray.some = function(arr, callback, opt_context) {};\n', -+"externs/es6_proxy.js":'/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 6 Proxy objects.\n * @see https://tc39.github.io/ecma262/#sec-proxy-objects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy\n * @externs\n */\n\n\n/**\n * @record\n * @template TARGET\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler\n */\nfunction ProxyHandler() {}\n\n/**\n * @type {(function(TARGET):?Object)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-getprototypeof\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/getPrototypeOf\n */\nProxyHandler.prototype.getPrototypeOf /* = function(target) {} */;\n\n/**\n * @type {(function(TARGET, ?Object):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/setPrototypeOf\n */\nProxyHandler.prototype.setPrototypeOf /* = function(target, proto) {} */;\n\n/**\n * @type {(function(TARGET):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-isextensible\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/isExtensible\n */\nProxyHandler.prototype.isExtensible /* = function(target) {} */;\n\n/**\n * @type {(function(TARGET):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-preventextensions\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/preventExtensions\n */\nProxyHandler.prototype.preventExtensions /* = function(target) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol)):(!ObjectPropertyDescriptor|undefined))|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/getOwnPropertyDescriptor\n */\nProxyHandler.prototype.getOwnPropertyDescriptor /* = function(target, prop) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol), !ObjectPropertyDescriptor):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/defineProperty\n */\nProxyHandler.prototype.defineProperty /* = function(target, prop, desc) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol)):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/has\n */\nProxyHandler.prototype.has /* = function(target, prop) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol), !Object):*)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/get\n */\nProxyHandler.prototype.get /* = function(target, prop, receiver) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol), *, !Object):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/set\n */\nProxyHandler.prototype.set /* = function(target, prop, value, receiver) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol)):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-delete-p\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/deleteProperty\n */\nProxyHandler.prototype.deleteProperty /* = function (target, prop) {} */;\n\n/**\n * @type {(function(TARGET):!Array<(string|symbol)>)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/ownKeys\n */\nProxyHandler.prototype.ownKeys /* = function(target) {} */;\n\n/**\n * @type {(function(TARGET, *, !Array):*)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/apply\n */\nProxyHandler.prototype.apply /* = function(target, thisArg, argList) {} */;\n\n/**\n * @type {(function(TARGET, !Array, function(new: ?, ...?)):!Object)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/construct\n */\nProxyHandler.prototype.construct /* = function(target, argList, newTarget) {} */;\n\n\n/**\n * @constructor\n * @param {TARGET} target\n * @param {!ProxyHandler} handler\n * @template TARGET\n * @see https://tc39.github.io/ecma262/#sec-proxy-constructor\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy#Syntax\n */\nfunction Proxy(target, handler) {}\n\n/**\n * @param {TARGET} target\n * @param {!ProxyHandler} handler\n * @return {{proxy: !Proxy, revoke: function():void}}\n * @template TARGET\n * @see https://tc39.github.io/ecma262/#sec-proxy.revocable\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/revocable\n */\nProxy.revocable = function(target, handler) {};\n', -+"externs/fido.js":'/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions from the FIDO Specifications\n * @see https://fidoalliance.org/download/\n *\n * @externs\n * @author arnarbi@9ma1l.qjz9zk (Arnar Birgisson)\n */\n\n/**\n * U2F JavaScript API namespace\n * @see https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-javascript-api-v1.2-ps-20170411.html\n * @const\n */\nvar u2f = {};\n\n/**\n * Data object for a single sign request.\n * @typedef {string}\n */\nu2f.Transport;\n\n/**\n * Data object for a registered key.\n * @typedef {{\n * version: string,\n * keyHandle: string,\n * transports: (!Array|undefined),\n * appId: ?string\n * }}\n */\nu2f.RegisteredKey;\n\n/**\n * An error object for responses\n * @typedef {{\n * errorCode: number,\n * errorMessage: ?string\n * }}\n */\nu2f.Error;\n\n/**\n * Data object for a sign response.\n * @typedef {{\n * keyHandle: string,\n * signatureData: string,\n * clientData: string\n * }}\n */\nu2f.SignResponse;\n\n/**\n * @typedef {{\n * version: string,\n * challenge: string\n * }}\n */\nu2f.RegisterRequest\n\n/**\n * @param {string} appId\n * @param {string} challenge\n * @param {!Array} registeredKeys\n * @param {function((!u2f.Error|!u2f.SignResponse))} callback\n * @param {number=} opt_timeoutSeconds\n */\nu2f.sign = function(\n appId, challenge, registeredKeys, callback, opt_timeoutSeconds) {};\n\n/**\n * @param {string} appId\n * @param {!Array} registerRequests\n * @param {!Array} registeredKeys\n * @param {function((!u2f.Error|!u2f.SignResponse))} callback\n * @param {number=} opt_timeoutSeconds\n */\nu2f.register = function(\n appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) {};\n', - "externs/w3c_fileapi.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for objects in the File API, File Writer API, and\n * File System API. Details of the API are at:\n * http://www.w3.org/TR/FileAPI/\n *\n * @externs\n */\n\n/** @record */\nfunction BlobPropertyBag() {};\n\n/** @type {(string|undefined)} */\nBlobPropertyBag.prototype.type;\n\n/**\n * @see http://dev.w3.org/2006/webapi/FileAPI/#dfn-Blob\n * @param {Array=} opt_blobParts\n * @param {BlobPropertyBag=} opt_options\n * @constructor\n * @nosideeffects\n */\nfunction Blob(opt_blobParts, opt_options) {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-size\n * @type {number}\n */\nBlob.prototype.size;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-type\n * @type {string}\n */\nBlob.prototype.type;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-slice\n * @param {number=} start\n * @param {number=} length\n * @param {string=} opt_contentType\n * @return {!Blob}\n * @nosideeffects\n */\nBlob.prototype.slice = function(start, length, opt_contentType) {};\n\n\n/**\n * @record\n * @extends {BlobPropertyBag}\n **/\nfunction FilePropertyBag() {};\n\n/** @type {(number|undefined)} */\nFilePropertyBag.prototype.lastModified;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-file\n * @param {!Array=} contents\n * @param {string=} name\n * @param {FilePropertyBag=} properties\n * @constructor\n * @extends {Blob}\n */\nfunction File(contents, name, properties) {}\n\n/**\n * Chrome uses this instead of name.\n * @deprecated Use name instead.\n * @type {string}\n */\nFile.prototype.fileName;\n\n/**\n * Chrome uses this instead of size.\n * @deprecated Use size instead.\n * @type {string}\n */\nFile.prototype.fileSize;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-name\n * @type {string}\n */\nFile.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-lastModifiedDate\n * @type {Date}\n */\nFile.prototype.lastModifiedDate;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-lastModified\n * @type {number}\n */\nFile.prototype.lastModified;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-filereader\n * @constructor\n * @implements {EventTarget}\n */\nfunction FileReader() {}\n\n/** @override */\nFileReader.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nFileReader.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nFileReader.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsArrayBuffer\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileReader.prototype.readAsArrayBuffer = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsBinaryStringAsync\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileReader.prototype.readAsBinaryString = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsText\n * @param {!Blob} blob\n * @param {string=} encoding\n * @return {undefined}\n */\nFileReader.prototype.readAsText = function(blob, encoding) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsDataURL\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileReader.prototype.readAsDataURL = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-abort\n * @return {undefined}\n */\nFileReader.prototype.abort = function() {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-empty\n * @const {number}\n */\nFileReader.prototype.EMPTY;\n\n/** @const {number} */\nFileReader.EMPTY;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-loading\n * @const {number}\n */\nFileReader.prototype.LOADING;\n\n/** @const {number} */\nFileReader.LOADING;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-done\n * @const {number}\n */\nFileReader.prototype.DONE;\n\n/** @const {number} */\nFileReader.DONE;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readystate\n * @type {number}\n */\nFileReader.prototype.readyState;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-result\n * @type {string|Blob|ArrayBuffer}\n */\nFileReader.prototype.result;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-error\n * @type {DOMError}\n */\nFileReader.prototype.error;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-onloadstart\n * @type {?function(!ProgressEvent)}\n */\nFileReader.prototype.onloadstart;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-onprogress\n * @type {?function(!ProgressEvent)}\n */\nFileReader.prototype.onprogress;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-onload\n * @type {?function(!ProgressEvent)}\n */\nFileReader.prototype.onload;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-onabort\n * @type {?function(!ProgressEvent)}\n */\nFileReader.prototype.onabort;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-onerror\n * @type {?function(!ProgressEvent)}\n */\nFileReader.prototype.onerror;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-onloadend\n * @type {?function(!ProgressEvent)}\n */\nFileReader.prototype.onloadend;\n\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#FileReaderSyncSync\n * @constructor\n */\nfunction FileReaderSync() {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsArrayBufferSync\n * @param {!Blob} blob\n * @return {!ArrayBuffer}\n */\nFileReaderSync.prototype.readAsArrayBuffer = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsBinaryStringSync\n * @param {!Blob} blob\n * @return {string}\n */\nFileReaderSync.prototype.readAsBinaryString = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsTextSync\n * @param {!Blob} blob\n * @param {string=} encoding\n * @return {string}\n */\nFileReaderSync.prototype.readAsText = function(blob, encoding) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsDataURLSync\n * @param {!Blob} blob\n * @return {string}\n */\nFileReaderSync.prototype.readAsDataURL = function(blob) {};\n', --"externs/nonstandard_fileapi.js":"/*\n * Copyright 2019 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for file api implemented in\n * various browsers but not part of https://www.w3.org/TR/FileAPI.\n * @externs\n */\n\n/**\n * This replaces Blob.slice in Chrome since WebKit revision 84005.\n * @see http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0222.html\n * @param {number=} start\n * @param {number=} end\n * @param {string=} contentType\n * @return {!Blob}\n * @nosideeffects\n */\nBlob.prototype.webkitSlice = function(start, end, contentType) {};\n\n/**\n * This replaces Blob.slice in Firefox.\n * @see http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0222.html\n * @param {number=} start\n * @param {number=} end\n * @param {string=} contentType\n * @return {!Blob}\n * @nosideeffects\n */\nBlob.prototype.mozSlice = function(start, end, contentType) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#the-blobbuilder-interface\n * @constructor\n */\nfunction BlobBuilder() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append0\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append1\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append2\n * @param {string|Blob|ArrayBuffer} data\n * @param {string=} endings\n * @return {undefined}\n */\nBlobBuilder.prototype.append = function(data, endings) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-getBlob\n * @param {string=} contentType\n * @return {!Blob}\n */\nBlobBuilder.prototype.getBlob = function(contentType) {};\n\n/**\n * This has replaced BlobBuilder in Chrome since WebKit revision 84008.\n * @see http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0222.html\n * @constructor\n */\nfunction WebKitBlobBuilder() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append0\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append1\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append2\n * @param {string|Blob|ArrayBuffer} data\n * @param {string=} endings\n * @return {undefined}\n */\nWebKitBlobBuilder.prototype.append = function(data, endings) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-getBlob\n * @param {string=} contentType\n * @return {!Blob}\n */\nWebKitBlobBuilder.prototype.getBlob = function(contentType) {};\n\n/**\n * @record\n * @see https://dev.w3.org/2009/dap/file-system/file-dir-sys.html#the-flags-dictionary\n */\nfunction FileSystemFlags() {};\n\n/** @type {(undefined|boolean)} */\nFileSystemFlags.prototype.create;\n\n/** @type {(undefined|boolean)} */\nFileSystemFlags.prototype.exclusive;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryentry-interface\n * @constructor\n * @extends {Entry}\n */\nfunction DirectoryEntry() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-createReader\n * @return {!DirectoryReader}\n */\nDirectoryEntry.prototype.createReader = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-getFile\n * @param {string} path\n * @param {!FileSystemFlags=} options\n * @param {function(!FileEntry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryEntry.prototype.getFile = function(\n path, options, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-getDirectory\n * @param {string} path\n * @param {!FileSystemFlags=} options\n * @param {function(!DirectoryEntry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryEntry.prototype.getDirectory = function(\n path, options, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-removeRecursively\n * @param {function()} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryEntry.prototype.removeRecursively = function(\n successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryreader-interface\n * @constructor\n */\nfunction DirectoryReader() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryReader-readEntries\n * @param {function(!Array)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryReader.prototype.readEntries = function(\n successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-entry-interface\n * @constructor\n */\nfunction Entry() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-isFile\n * @type {boolean}\n */\nEntry.prototype.isFile;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-isDirectory\n * @type {boolean}\n */\nEntry.prototype.isDirectory;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-name\n * @type {string}\n */\nEntry.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-fullPath\n * @type {string}\n */\nEntry.prototype.fullPath;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-filesystem\n * @type {!FileSystem}\n */\nEntry.prototype.filesystem;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-moveTo\n * @param {!DirectoryEntry} parent\n * @param {string=} newName\n * @param {function(!Entry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.moveTo = function(\n parent, newName, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-copyTo\n * @param {!DirectoryEntry} parent\n * @param {string=} newName\n * @param {function(!Entry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.copyTo = function(\n parent, newName, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-toURL\n * @param {string=} mimeType\n * @return {string}\n */\nEntry.prototype.toURL = function(mimeType) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-remove\n * @param {function()} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.remove = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-getMetadata\n * @param {function(!Metadata)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.getMetadata = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-getParent\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.getParent = function(successCallback, errorCallback) {};\n\n/**\n * @return {?Entry} The Entry corresponding to this item, or null. Note that\n * despite its name,this method only works in Chrome, and will eventually\n * be renamed to {@code getAsEntry}.\n * @nosideeffects\n */\nDataTransferItem.prototype.webkitGetAsEntry = function() {};\n\n/**\n * @see https://wicg.github.io/entries-api/#dom-file-webkitrelativepath\n * @type {string}\n */\nFile.prototype.webkitRelativePath;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-fileentry-interface\n * @constructor\n * @extends {Entry}\n */\nfunction FileEntry() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntry-createWriter\n * @param {function(!FileWriter)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nFileEntry.prototype.createWriter = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntry-file\n * @param {function(!File)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nFileEntry.prototype.file = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#FileErrorInterface\n * @constructor\n * @extends {DOMError}\n */\nfunction FileError() {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-NOT_FOUND_ERR\n * @const {number}\n */\nFileError.prototype.NOT_FOUND_ERR;\n\n/** @const {number} */\nFileError.NOT_FOUND_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-SECURITY_ERR\n * @const {number}\n */\nFileError.prototype.SECURITY_ERR;\n\n/** @const {number} */\nFileError.SECURITY_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-ABORT_ERR\n * @const {number}\n */\nFileError.prototype.ABORT_ERR;\n\n/** @const {number} */\nFileError.ABORT_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-NOT_READABLE_ERR\n * @const {number}\n */\nFileError.prototype.NOT_READABLE_ERR;\n\n/** @const {number} */\nFileError.NOT_READABLE_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-ENCODING_ERR\n * @const {number}\n */\nFileError.prototype.ENCODING_ERR;\n\n/** @const {number} */\nFileError.ENCODING_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileError-NO_MODIFICATION_ALLOWED_ERR\n * @const {number}\n */\nFileError.prototype.NO_MODIFICATION_ALLOWED_ERR;\n\n/** @const {number} */\nFileError.NO_MODIFICATION_ALLOWED_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-INVALID_STATE_ERR\n * @const {number}\n */\nFileError.prototype.INVALID_STATE_ERR;\n\n/** @const {number} */\nFileError.INVALID_STATE_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-SYNTAX_ERR\n * @const {number}\n */\nFileError.prototype.SYNTAX_ERR;\n\n/** @const {number} */\nFileError.SYNTAX_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileError-INVALID_MODIFICATION_ERR\n * @const {number}\n */\nFileError.prototype.INVALID_MODIFICATION_ERR;\n\n/** @const {number} */\nFileError.INVALID_MODIFICATION_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileError-QUOTA_EXCEEDED_ERR\n * @const {number}\n */\nFileError.prototype.QUOTA_EXCEEDED_ERR;\n\n/** @const {number} */\nFileError.QUOTA_EXCEEDED_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-TYPE_MISMATCH_ERR\n * @const {number}\n */\nFileError.prototype.TYPE_MISMATCH_ERR;\n\n/** @const {number} */\nFileError.TYPE_MISMATCH_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-PATH_EXISTS_ERR\n * @const {number}\n */\nFileError.prototype.PATH_EXISTS_ERR;\n\n/** @const {number} */\nFileError.PATH_EXISTS_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-code-exception\n * @type {number}\n * @deprecated Use the 'name' or 'message' attributes of DOMError rather than\n * 'code'\n */\nFileError.prototype.code;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#idl-def-FileSaver\n * @constructor\n */\nfunction FileSaver() {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-abort\n * @return {undefined}\n */\nFileSaver.prototype.abort = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-INIT\n * @const {number}\n */\nFileSaver.prototype.INIT;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-WRITING\n * @const {number}\n */\nFileSaver.prototype.WRITING;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-DONE\n * @const {number}\n */\nFileSaver.prototype.DONE;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-readyState\n * @type {number}\n */\nFileSaver.prototype.readyState;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-error\n * @type {FileError}\n */\nFileSaver.prototype.error;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onwritestart\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onwritestart;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onprogress\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onprogress;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onwrite\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onwrite;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onabort\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onabort;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onerror\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onerror;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onwriteend\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onwriteend;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-filesystem-interface\n * @constructor\n */\nfunction FileSystem() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystem-name\n * @type {string}\n */\nFileSystem.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystem-root\n * @type {!DirectoryEntry}\n */\nFileSystem.prototype.root;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#idl-def-FileWriter\n * @constructor\n * @extends {FileSaver}\n */\nfunction FileWriter() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-position\n * @type {number}\n */\nFileWriter.prototype.position;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-length\n * @type {number}\n */\nFileWriter.prototype.length;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-write\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileWriter.prototype.write = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-seek\n * @param {number} offset\n * @return {undefined}\n */\nFileWriter.prototype.seek = function(offset) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-truncate\n * @param {number} size\n * @return {undefined}\n */\nFileWriter.prototype.truncate = function(size) {};\n\n/**\n * LocalFileSystem interface, implemented by Window and WorkerGlobalScope.\n * @see http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem\n * @constructor\n */\nfunction LocalFileSystem() {}\n\n/**\n * Metadata interface.\n * @see http://www.w3.org/TR/file-system-api/#idl-def-Metadata\n * @constructor\n */\nfunction Metadata() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Metadata-modificationTime\n * @type {!Date}\n */\nMetadata.prototype.modificationTime;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Metadata-size\n * @type {number}\n */\nMetadata.prototype.size;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-TEMPORARY\n * @const {number}\n */\nWindow.prototype.TEMPORARY;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-PERSISTENT\n * @const {number}\n */\nWindow.prototype.PERSISTENT;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction requestFileSystem(type, size, successCallback, errorCallback) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.requestFileSystem = function(\n type, size, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction resolveLocalFileSystemURI(uri, successCallback, errorCallback) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.resolveLocalFileSystemURI =\n function(uri, successCallback, errorCallback) {}\n\n/**\n * This has replaced requestFileSystem in Chrome since WebKit revision 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction webkitRequestFileSystem(type, size, successCallback, errorCallback) {}\n\n/**\n * This has replaced requestFileSystem in Chrome since WebKit revision 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.webkitRequestFileSystem = function(type, size, successCallback,\n errorCallback) {};\n\n/**\n * This has replaced resolveLocalFileSystemURI in Chrome since WebKit revision\n * 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction webkitResolveLocalFileSystemURI(uri, successCallback, errorCallback) {}\n\n/**\n * This has replaced resolveLocalFileSystemURI in Chrome since WebKit revision\n * 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.webkitResolveLocalFileSystemURI = function(\n uri, successCallback, errorCallback) {}\n\n// WindowBlobURIMethods interface, implemented by Window and WorkerGlobalScope.\n// There are three APIs for this: the old specced API, the new specced API, and\n// the webkit-prefixed API.\n// @see http://www.w3.org/TR/FileAPI/#creating-revoking\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!Object} obj\n * @return {string}\n */\nfunction createObjectURL(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!Object} obj\n * @return {string}\n */\nWindow.prototype.createObjectURL = function(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nfunction revokeObjectURL(url) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nWindow.prototype.revokeObjectURL = function(url) {};\n\n/**\n * This has been replaced by URL in Chrome since WebKit revision 75739.\n * @constructor\n * @param {string} urlString\n * @param {string=} base\n */\nfunction webkitURL(urlString, base) {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!Object} obj\n * @return {string}\n */\nwebkitURL.createObjectURL = function(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nwebkitURL.revokeObjectURL = function(url) {};\n\n/**\n * @see https://developers.google.com/chrome/whitepapers/storage\n * @constructor\n */\nfunction StorageInfo() {}\n\n/**\n * @see https://developers.google.com/chrome/whitepapers/storage\n * @const {number}\n * */\nStorageInfo.prototype.TEMPORARY;\n\n/**\n * @see https://developers.google.com/chrome/whitepapers/storage\n * @const {number}\n */\nStorageInfo.prototype.PERSISTENT;\n\n/**\n * @see https://developers.google.com/chrome/whitepapers/storage#requestQuota\n * @param {number} type\n * @param {number} size\n * @param {function(number)} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageInfo.prototype.requestQuota = function(\n type, size, successCallback, errorCallback) {};\n\n/**\n * @see https://developers.google.com/chrome/whitepapers/storage#queryUsageAndQuota\n * @param {number} type\n * @param {function(number, number)} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageInfo.prototype.queryUsageAndQuota = function(\n type, successCallback, errorCallback) {};\n\n/**\n * @see https://developers.google.com/chrome/whitepapers/storage\n * @type {!StorageInfo}\n */\nWindow.prototype.webkitStorageInfo;\n\n/**\n * @see https://dvcs.w3.org/hg/quota/raw-file/tip/Overview.html#storagequota-interface.\n * @constructor\n */\nfunction StorageQuota() {}\n\n/**\n * @param {number} size\n * @param {function(number)=} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageQuota.prototype.requestQuota = function(\n size, successCallback, errorCallback) {};\n\n/**\n * @param {function(number, number)} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageQuota.prototype.queryUsageAndQuota = function(\n successCallback, errorCallback) {};\n\n/**\n * @type {!StorageQuota}\n * @see https://developer.chrome.com/apps/offline_storage\n */\nNavigator.prototype.webkitPersistentStorage;\n\n/**\n * @type {!StorageQuota}\n * @see https://developer.chrome.com/apps/offline_storage\n */\nNavigator.prototype.webkitTemporaryStorage;\n\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#idl-def-FileWriterSync\n * @constructor\n */\nfunction FileWriterSync() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-position\n * @type {number}\n * @const\n */\nFileWriterSync.prototype.position;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-length\n * @type {number}\n * @const\n */\nFileWriterSync.prototype.length;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-write\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileWriterSync.prototype.write = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-seek\n * @param {number} offset\n * @return {undefined}\n */\nFileWriterSync.prototype.seek = function(offset) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-truncate\n * @param {number} size\n * @return {undefined}\n */\nFileWriterSync.prototype.truncate = function(size) {};\n\n/**\n * LocalFileSystemSync interface, implemented by WorkerGlobalScope.\n * @see http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystemSync\n * @constructor\n */\nfunction LocalFileSystemSync() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/\n * #the-synchronous-filesystem-interface\n * @constructor\n */\nfunction FileSystemSync() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystemSync-name\n * @type {string}\n * @const\n */\nFileSystemSync.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystemSync-root\n * @type {!DirectoryEntrySync}\n * @const\n */\nFileSystemSync.prototype.root;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystemSync-requestFileSystemSync-FileSystemSync-unsigned-short-type-unsigned-long-long-size\n * @param {number} type\n * @param {number} size\n * @return {!FileSystemSync}\n */\nfunction requestFileSystemSync(type, size) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystemSync-requestFileSystemSync-FileSystemSync-unsigned-short-type-unsigned-long-long-size\n * @param {number} type\n * @param {number} size\n * @return {!FileSystemSync}\n */\nfunction webkitRequestFileSystemSync(type, size) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-entrysync-interface\n * @constructor\n */\nfunction EntrySync() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-isFile\n * @type {boolean}\n * @const\n */\nEntrySync.prototype.isFile;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-isDirectory\n * @type {boolean}\n * @const\n */\nEntrySync.prototype.isDirectory;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-name\n * @type {string}\n * @const\n */\nEntrySync.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-fullPath\n * @type {string}\n * @const\n */\nEntrySync.prototype.fullPath;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-filesystem\n * @type {!FileSystemSync}\n * @const\n */\nEntrySync.prototype.filesystem;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-moveTo\n * @param {!DirectoryEntrySync} parent\n * @param {string=} newName\n * @return {!EntrySync}\n */\nEntrySync.prototype.moveTo = function(parent, newName) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-copyTo\n * @param {!DirectoryEntrySync} parent\n * @param {string=} newName\n * @return {!EntrySync}\n */\nEntrySync.prototype.copyTo = function(parent, newName) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-toURL\n * @param {string=} mimeType\n * @return {string}\n */\nEntrySync.prototype.toURL = function(mimeType) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-remove\n * @return {undefined}\n */\nEntrySync.prototype.remove = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-getMetadata\n * @return {!Metadata}\n */\nEntrySync.prototype.getMetadata = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-getParent\n * @return {!DirectoryEntrySync}\n */\nEntrySync.prototype.getParent = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryentrysync-interface\n * @constructor\n * @extends {EntrySync}\n */\nfunction DirectoryEntrySync() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-createReader\n * @return {!DirectoryReaderSync}\n */\nDirectoryEntrySync.prototype.createReader = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-getFile\n * @param {string} path\n * @param {Object=} options\n * @return {!FileEntrySync}\n */\nDirectoryEntrySync.prototype.getFile = function(path, options) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-getDirectory\n * @param {string} path\n * @param {Object=} options\n * @return {!DirectoryEntrySync}\n */\nDirectoryEntrySync.prototype.getDirectory = function(path, options) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-removeRecursively\n * @return {undefined}\n */\nDirectoryEntrySync.prototype.removeRecursively = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryreadersync-interface\n * @constructor\n */\nfunction DirectoryReaderSync() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryReaderSync-readEntries\n * @return {!Array}\n */\nDirectoryReaderSync.prototype.readEntries = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-fileentrysync-interface\n * @constructor\n * @extends {EntrySync}\n */\nfunction FileEntrySync() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntrySync-createWriter\n * @return {!FileWriterSync}\n */\nFileEntrySync.prototype.createWriter = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntrySync-file\n * @return {!File}\n */\nFileEntrySync.prototype.file = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-fileexception-exception\n * @constructor\n */\nfunction FileException() {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-NOT_FOUND_ERR\n * @type {number}\n */\nFileException.prototype.NOT_FOUND_ERR;\n\n/** @type {number} */\nFileException.NOT_FOUND_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-SECURITY_ERR\n * @type {number}\n */\nFileException.prototype.SECURITY_ERR;\n\n/** @type {number} */\nFileException.SECURITY_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#widl-FileException-ABORT_ERR\n * @type {number}\n */\nFileException.prototype.ABORT_ERR;\n\n/** @type {number} */\nFileException.ABORT_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#widl-FileException-NOT_READABLE_ERR\n * @type {number}\n */\nFileException.prototype.NOT_READABLE_ERR;\n\n/** @type {number} */\nFileException.NOT_READABLE_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#widl-FileException-ENCODING_ERR\n * @type {number}\n */\nFileException.prototype.ENCODING_ERR;\n\n/** @type {number} */\nFileException.ENCODING_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-NO_MODIFICATION_ALLOWED_ERR\n * @type {number}\n */\nFileException.prototype.NO_MODIFICATION_ALLOWED_ERR;\n\n/** @type {number} */\nFileException.NO_MODIFICATION_ALLOWED_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-INVALID_STATE_ERR\n * @type {number}\n */\nFileException.prototype.INVALID_STATE_ERR;\n\n/** @type {number} */\nFileException.INVALID_STATE_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-SYNTAX_ERR\n * @type {number}\n */\nFileException.prototype.SYNTAX_ERR;\n\n/** @type {number} */\nFileException.SYNTAX_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-INVALID_MODIFICATION_ERR\n * @type {number}\n */\nFileException.prototype.INVALID_MODIFICATION_ERR;\n\n/** @type {number} */\nFileException.INVALID_MODIFICATION_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-QUOTA_EXCEEDED_ERR\n * @type {number}\n */\nFileException.prototype.QUOTA_EXCEEDED_ERR;\n\n/** @type {number} */\nFileException.QUOTA_EXCEEDED_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-TYPE_MISMATCH_ERR\n * @type {number}\n */\nFileException.prototype.TYPE_MISMATCH_ERR;\n\n/** @type {number} */\nFileException.TYPE_MISMATCH_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-PATH_EXISTS_ERR\n * @type {number}\n */\nFileException.prototype.PATH_EXISTS_ERR;\n\n/** @type {number} */\nFileException.PATH_EXISTS_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-code-exception\n * @type {number}\n */\nFileException.prototype.code;\n", --"externs/flash.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for all the Flash Object JavaScript methods. This\n * file depends on w3c_dom2.js.\n * Created from\n * http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.html\n *\n * @externs\n * @author ajp@google.com (Andy Perelson)\n */\n\n\n// Standard Methods.\n\n/**\n * Call a Flash function exported by ExternalInterface.\n * @param {string} xmlString The XML string passed to Flash. The outer element\n * should be {@code }. A sample invocation string:\n * {@code \n * test}\n * @return {string} The serialized return value from Flash that you can eval.\n */\nHTMLObjectElement.prototype.CallFunction = function(xmlString) {};\n\n/**\n * Returns the value of the Flash variable specified by varName or null if the\n * variable does not exist.\n * @param {string} varName The variable name.\n * @return {?string} The variable value.\n */\nHTMLObjectElement.prototype.GetVariable = function(varName) {};\n\n/**\n * Activates the frame number specified by `frameNumber` in the current\n * movie.\n * @param {number} frameNumber A non-negative integer frame number.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.GotoFrame = function(frameNumber) {};\n\n/**\n * @return {boolean} Whether the movie is currently playing.\n */\nHTMLObjectElement.prototype.IsPlaying = function() {};\n\n/**\n * Loads the movie identified by `url` to the layer specified by\n * `layerNumber`.\n * @param {number} layerNumber The layer number.\n * @param {string} url The movie URL.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.LoadMovie = function(layerNumber, url) {};\n\n/**\n * Pans a zoomed-in movie to the coordinates specified by x and y. Use mode to\n * specify whether the values for x and y are pixels or a percent of the window.\n * When mode is 0, the coordinates are pixels; when mode is 1, the coordinates\n * are percent of the window.\n * @param {number} x The x-coordinate.\n * @param {number} y The y-coordinate.\n * @param {number} mode The mode.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Pan = function(x, y, mode) {};\n\n/**\n * @return {number} The percent of the Flash Player movie that has streamed\n * into the browser so far; Possible values are from 0 to 100.\n */\nHTMLObjectElement.prototype.PercentLoaded = function() {};\n\n/**\n * Starts playing the movie.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Play = function() {};\n\n/**\n * Goes to the first frame.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Rewind = function() {};\n\n/**\n * Sets the value of the flash variable.\n * @param {string} variableName The variable name.\n * @param {string} value The value.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.SetVariable = function(variableName, value) {};\n\n/**\n * Zooms in on a rectangular area of the movie. The units of the coordinates\n * are in twips (1440 units per inch).\n * @param {number} left The left coordinate.\n * @param {number} top The top coordinate.\n * @param {number} right The right coordinate.\n * @param {number} bottom The bottom coordinate.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.SetZoomRect = function(left, top, right, bottom) {};\n\n/**\n * Stops playing the movie.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.StopPlay = function() {};\n\n/**\n * @return {number} The total number of frames in the movie.\n */\nHTMLObjectElement.prototype.TotalFrames = function() {};\n\n/**\n * Zooms the view by a relative scale factor.\n * @param {number} percent The percentage scale factor, should be an integer.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Zoom = function(percent) {};\n\n\n// TellTarget Methods.\n\n/**\n * Executes the action in the timeline specified by `target` in the\n * specified frame.\n * @param {string} target The timeline.\n * @param {number} frameNumber The frame number.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TCallFrame = function(target, frameNumber) {};\n\n/**\n * Executes the action in the timeline specified by `target` in the\n * specified frame.\n * @param {string} target The timeline.\n * @param {string} label The frame label.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TCallLabel = function(target, label) {};\n\n/**\n * Returns the number of the current frame for the specified timeline.\n * @param {string} target The timeline.\n * @return {number} The number of the current frame.\n */\nHTMLObjectElement.prototype.TCurentFrame = function(target) {};\n\n/**\n * Returns the label of the current frame for the specified timeline.\n * @param {string} target The timeline.\n * @return {string} The label of the current frame, empty string if no\n * current frame.\n */\nHTMLObjectElement.prototype.TCurrentLabel = function(target) {};\n\n/**\n * Returns a string indicating the value of the property in the\n * specified timeline.\n * @param {string} target The timeline.\n * @param {number} property The integer corresponding to the desired property.\n * @return {string} The value of the property.\n */\nHTMLObjectElement.prototype.TGetProperty = function(target, property) {};\n\n/**\n * Returns a number indicating the value of the property in the specified\n * timeline.\n * @param {string} target The timeline.\n * @param {number} property The integer corresponding to the desired property.\n * @return {number} A number indicating the value of the property.\n */\nHTMLObjectElement.prototype.TGetPropertyAsNumber = function(target, property) {};\n\n/**\n * Goes to the specified frame number in the specified timeline.\n * @param {string} target The timeline.\n * @param {number} frameNumber The frame number.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TGotoFrame = function(target, frameNumber) {};\n\n/**\n * Goes to the specified frame label in the specified timeline.\n * @param {string} target The timeline.\n * @param {string} label The framelabel.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TGotoLabel = function(target, label) {};\n\n/**\n * Plays the specified timeline.\n * @param {number} target The timeline.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TPlay = function(target) {};\n\n/**\n * Sets the value of the property in the specified timeline.\n * @param {number} target The timeline.\n * @param {number} property The integer corresponding to the desired property.\n * @param {string|number} value The value.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TSetProperty = function(target, property, value) {};\n\n/**\n * Stops the specified timeline.\n * @param {number} target The timeline.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TStopPlay = function(target) {};\n', --"externs/gecko_xml.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over some of the\n * W3C\'s XML specifications by Gecko. This file depends on\n * w3c_xml.js. The whole file has been fully type annotated.\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n */\n\n/**\n * XMLSerializer can be used to convert DOM subtree or DOM document into text.\n * XMLSerializer is available to unprivileged scripts.\n *\n * XMLSerializer is mainly useful for applications and extensions based on\n * Mozilla platform. While it\'s available to web pages, it\'s not part of any\n * standard and level of support in other browsers is unknown.\n *\n * @constructor\n */\nfunction XMLSerializer() {}\n\n/**\n * Returns the serialized subtree in the form of a string\n * @param {Node} subtree\n * @return {string}\n */\nXMLSerializer.prototype.serializeToString = function(subtree) {};\n\n/**\n * The subtree rooted by the specified element is serialized to a byte stream\n * using the character set specified.\n *\n * @param {Node} subtree\n * @return {Object}\n */\nXMLSerializer.prototype.serializeToStream = function(subtree) {};\n\n/**\n * DOMParser is mainly useful for applications and extensions based on Mozilla\n * platform. While it\'s available to web pages, it\'s not part of any standard and\n * level of support in other browsers is unknown.\n *\n * @constructor\n */\nfunction DOMParser() {}\n\n/**\n * The string passed in is parsed into a DOM document.\n *\n * Example:\n * var parser = new DOMParser();\n * var doc = parser.parseFromString(aStr, "text/xml");\n *\n * @param {!TrustedHTML|string} src The UTF16 string to be parsed.\n * @param {string} type The content type of the string.\n * @return {Document}\n */\nDOMParser.prototype.parseFromString = function(src, type) {};\n', --"externs/html5.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for all the extensions over the\n * W3C's DOM3 specification in HTML5. This file depends on\n * w3c_dom3.js. The whole file has been fully type annotated.\n *\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/index.html\n * @see http://dev.w3.org/html5/spec/Overview.html\n *\n * This also includes Typed Array definitions from\n * http://www.khronos.org/registry/typedarray/specs/latest/\n *\n * This relies on w3c_event.js being included first.\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n */\n\n/** @type {?HTMLSlotElement} */\nNode.prototype.assignedSlot;\n\n/**\n * @type {string}\n * @see https://dom.spec.whatwg.org/#dom-element-slot\n */\nElement.prototype.slot;\n\n/**\n * Note: In IE, the contains() method only exists on Elements, not Nodes.\n * Therefore, it is recommended that you use the Conformance framework to\n * prevent calling this on Nodes which are not Elements.\n * @see https://connect.microsoft.com/IE/feedback/details/780874/node-contains-is-incorrect\n *\n * @param {Node} n The node to check\n * @return {boolean} If 'n' is this Node, or is contained within this Node.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Node.contains\n * @nosideeffects\n */\nNode.prototype.contains = function(n) {};\n\n/** @type {boolean} */\nNode.prototype.isConnected;\n\n/**\n * Inserts the given HTML Element into the node at the location.\n * @param {string} where Where to insert the HTML text, one of 'beforeBegin',\n * 'afterBegin', 'beforeEnd', 'afterEnd'.\n * @param {!Element} element DOM Element to insert.\n * @return {?Element} The element that was inserted, or null, if the\n * insertion failed.\n * @see https://dom.spec.whatwg.org/#dom-element-insertadjacentelement\n */\nNode.prototype.insertAdjacentElement = function(where, element) {};\n\n/**\n * @type {boolean}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#the-script-element\n */\nHTMLScriptElement.prototype.async;\n\n/**\n * @constructor\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#the-canvas-element\n * @extends {HTMLElement}\n */\nfunction HTMLCanvasElement() {}\n\n/** @type {number} */\nHTMLCanvasElement.prototype.width;\n\n/** @type {number} */\nHTMLCanvasElement.prototype.height;\n\n/**\n * @see https://www.w3.org/TR/html5/scripting-1.html#dom-canvas-toblob\n * @param {function(!Blob)} callback\n * @param {string=} opt_type\n * @param {...*} var_args\n * @throws {Error}\n */\nHTMLCanvasElement.prototype.toBlob = function(callback, opt_type, var_args) {};\n\n/**\n * @param {string=} opt_type\n * @param {...*} var_args\n * @return {string}\n * @throws {Error}\n */\nHTMLCanvasElement.prototype.toDataURL = function(opt_type, var_args) {};\n\n/**\n * @modifies {this}\n * @param {string} contextId\n * @param {Object=} opt_args\n * @return {Object}\n */\nHTMLCanvasElement.prototype.getContext = function(contextId, opt_args) {};\n\n/**\n * @see https://www.w3.org/TR/mediacapture-fromelement/\n * @param {number=} opt_framerate\n * @return {!MediaStream}\n * @throws {Error}\n * */\nHTMLCanvasElement.prototype.captureStream = function(opt_framerate) {};\n\n/**\n * @see https://html.spec.whatwg.org/multipage/canvas.html#dom-canvas-transfercontroltooffscreen\n * @return {!OffscreenCanvas}\n * @throws {Error}\n * */\nHTMLCanvasElement.prototype.transferControlToOffscreen = function() {};\n\n/**\n * @see https://html.spec.whatwg.org/multipage/canvas.html#the-offscreencanvas-interface\n * @implements {EventTarget}\n * @implements {Transferable}\n * @param {number} width\n * @param {number} height\n * @nosideeffects\n * @constructor\n */\nfunction OffscreenCanvas(width, height) {}\n\n/** @override */\nOffscreenCanvas.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nOffscreenCanvas.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nOffscreenCanvas.prototype.dispatchEvent = function(evt) {};\n\n/** @type {number} */\nOffscreenCanvas.prototype.width;\n\n/** @type {number} */\nOffscreenCanvas.prototype.height;\n\n/**\n * @param {string} contextId\n * @param {!Object=} opt_options\n * @modifies {this}\n * @return {!Object}\n */\nOffscreenCanvas.prototype.getContext = function(contextId, opt_options) {};\n\n/**\n * @return {!ImageBitmap}\n */\nOffscreenCanvas.prototype.transferToImageBitmap = function() {};\n\n/**\n * @param {{type: (string|undefined), quality: (number|undefined)}=} opt_options\n * @return {!Promise}\n */\nOffscreenCanvas.prototype.convertToBlob = function(opt_options) {};\n\n// TODO(tjgq): Find a way to add SVGImageElement to this typedef without making\n// svg.js part of core.\n/**\n * @typedef {HTMLImageElement|HTMLVideoElement|HTMLCanvasElement|ImageBitmap|\n * OffscreenCanvas}\n */\nvar CanvasImageSource;\n\n/**\n * @interface\n * @see https://www.w3.org/TR/2dcontext/#canvaspathmethods\n */\nfunction CanvasPathMethods() {}\n\n/**\n * @return {undefined}\n */\nCanvasPathMethods.prototype.closePath = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.lineTo = function(x, y) {};\n\n/**\n * @param {number} cpx\n * @param {number} cpy\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.quadraticCurveTo = function(cpx, cpy, x, y) {};\n\n/**\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.bezierCurveTo = function(\n cp1x, cp1y, cp2x, cp2y, x, y) {};\n\n/**\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} radius\n * @return {undefined}\n */\nCanvasPathMethods.prototype.arcTo = function(x1, y1, x2, y2, radius) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nCanvasPathMethods.prototype.rect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radius\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} opt_anticlockwise\n * @return {undefined}\n */\nCanvasPathMethods.prototype.arc = function(\n x, y, radius, startAngle, endAngle, opt_anticlockwise) {};\n\n/**\n * @constructor\n * @implements {CanvasPathMethods}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#path2d-objects\n */\nfunction Path2D() {}\n\n/**\n * @return {undefined}\n * @override\n */\nPath2D.prototype.closePath = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nPath2D.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nPath2D.prototype.lineTo = function(x, y) {};\n\n/**\n * @param {number} cpx\n * @param {number} cpy\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nPath2D.prototype.quadraticCurveTo = function(cpx, cpy, x, y) {};\n\n/**\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nPath2D.prototype.bezierCurveTo = function(\n cp1x, cp1y, cp2x, cp2y, x, y) {};\n\n/**\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} radius\n * @return {undefined}\n * @override\n */\nPath2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n * @override\n */\nPath2D.prototype.rect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radius\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} optAnticlockwise\n * @return {undefined}\n * @override\n */\nPath2D.prototype.arc = function(\n x, y, radius, startAngle, endAngle, optAnticlockwise) {};\n\n/**\n * @param {Path2D} path\n * @return {undefined}\n */\nPath2D.prototype.addPath = function(path) {};\n\n/**\n * @interface\n * @see https://www.w3.org/TR/2dcontext/#canvasdrawingstyles\n */\nfunction CanvasDrawingStyles() {}\n\n/** @type {number} */\nCanvasDrawingStyles.prototype.lineWidth;\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.lineCap;\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.lineJoin;\n\n/** @type {number} */\nCanvasDrawingStyles.prototype.miterLimit;\n\n/**\n * @param {Array} segments\n * @return {undefined}\n */\nCanvasDrawingStyles.prototype.setLineDash = function(segments) {};\n\n/**\n * @return {!Array}\n */\nCanvasDrawingStyles.prototype.getLineDash = function() {};\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.font;\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.textAlign;\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.textBaseline;\n\n// TODO(dramaix): replace this with @record.\n/**\n * @constructor\n * @abstract\n * @implements {CanvasDrawingStyles}\n * @implements {CanvasPathMethods}\n * @see http://www.w3.org/TR/2dcontext/#canvasrenderingcontext2d\n */\nfunction BaseRenderingContext2D() {}\n\n/** @const {!HTMLCanvasElement|!OffscreenCanvas} */\nBaseRenderingContext2D.prototype.canvas;\n\n/**\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.save = function() {};\n\n/**\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.restore = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.scale = function(x, y) {};\n\n/**\n * @param {number} angle\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.rotate = function(angle) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.translate = function(x, y) {};\n\n/**\n * @param {number} m11\n * @param {number} m12\n * @param {number} m21\n * @param {number} m22\n * @param {number} dx\n * @param {number} dy\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.transform = function(\n m11, m12, m21, m22, dx, dy) {};\n\n/**\n * @param {number} m11\n * @param {number} m12\n * @param {number} m21\n * @param {number} m22\n * @param {number} dx\n * @param {number} dy\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.setTransform = function(\n m11, m12, m21, m22, dx, dy) {};\n\n/**\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @return {!CanvasGradient}\n * @throws {Error}\n */\nBaseRenderingContext2D.prototype.createLinearGradient = function(\n x0, y0, x1, y1) {};\n\n/**\n * @param {number} x0\n * @param {number} y0\n * @param {number} r0\n * @param {number} x1\n * @param {number} y1\n * @param {number} r1\n * @return {!CanvasGradient}\n * @throws {Error}\n */\nBaseRenderingContext2D.prototype.createRadialGradient = function(\n x0, y0, r0, x1, y1, r1) {};\n\n/**\n * @param {CanvasImageSource} image\n * @param {string} repetition\n * @return {?CanvasPattern}\n * @throws {Error}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#dom-context-2d-createpattern\n */\nBaseRenderingContext2D.prototype.createPattern = function(\n image, repetition) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.clearRect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.fillRect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.strokeRect = function(x, y, w, h) {};\n\n/**\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.beginPath = function() {};\n\n/**\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.closePath = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.lineTo = function(x, y) {};\n\n/**\n * @param {number} cpx\n * @param {number} cpy\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.quadraticCurveTo = function(\n cpx, cpy, x, y) {};\n\n/**\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.bezierCurveTo = function(\n cp1x, cp1y, cp2x, cp2y, x, y) {};\n\n/**\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} radius\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.rect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radius\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} opt_anticlockwise\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.arc = function(\n x, y, radius, startAngle, endAngle, opt_anticlockwise) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radiusX\n * @param {number} radiusY\n * @param {number} rotation\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} opt_anticlockwise\n * @return {undefined}\n * @see http://developer.mozilla.org/en/docs/Web/API/CanvasRenderingContext2D/ellipse\n */\nBaseRenderingContext2D.prototype.ellipse = function(\n x, y, radiusX, radiusY, rotation, startAngle, endAngle, opt_anticlockwise) {\n};\n\n/**\n * @param {Path2D|string=} optFillRuleOrPath\n * @param {string=} optFillRule\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.fill = function(optFillRuleOrPath, optFillRule) {};\n\n/**\n * @param {Path2D=} optStroke\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.stroke = function(optStroke) {};\n\n/**\n * @param {Element} element\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.drawFocusIfNeeded = function(element) {};\n\n/**\n * @param {Path2D|string=} optFillRuleOrPath\n * @param {string=} optFillRule\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.clip = function(optFillRuleOrPath, optFillRule) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/isPointInStroke\n */\nBaseRenderingContext2D.prototype.isPointInStroke = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {string=} opt_fillRule\n * @return {boolean}\n * @nosideeffects\n */\nBaseRenderingContext2D.prototype.isPointInPath = function(\n x, y, opt_fillRule) {};\n\n/**\n * @param {string} text\n * @param {number} x\n * @param {number} y\n * @param {number=} opt_maxWidth\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.fillText = function(\n text, x, y, opt_maxWidth) {};\n\n/**\n * @param {string} text\n * @param {number} x\n * @param {number} y\n * @param {number=} opt_maxWidth\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.strokeText = function(\n text, x, y, opt_maxWidth) {};\n\n/**\n * @param {string} text\n * @return {!TextMetrics}\n * @nosideeffects\n */\nBaseRenderingContext2D.prototype.measureText = function(text) {};\n\n/**\n * @param {CanvasImageSource} image\n * @param {number} dx Destination x coordinate.\n * @param {number} dy Destination y coordinate.\n * @param {number=} opt_dw Destination box width. Defaults to the image width.\n * @param {number=} opt_dh Destination box height.\n * Defaults to the image height.\n * @param {number=} opt_sx Source box x coordinate. Used to select a portion of\n * the source image to draw. Defaults to 0.\n * @param {number=} opt_sy Source box y coordinate. Used to select a portion of\n * the source image to draw. Defaults to 0.\n * @param {number=} opt_sw Source box width. Used to select a portion of\n * the source image to draw. Defaults to the full image width.\n * @param {number=} opt_sh Source box height. Used to select a portion of\n * the source image to draw. Defaults to the full image height.\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.drawImage = function(\n image, dx, dy, opt_dw, opt_dh, opt_sx, opt_sy, opt_sw, opt_sh) {};\n\n/**\n * @param {number} sw\n * @param {number} sh\n * @return {!ImageData}\n * @throws {Error}\n * @nosideeffects\n */\nBaseRenderingContext2D.prototype.createImageData = function(sw, sh) {};\n\n/**\n * @param {number} sx\n * @param {number} sy\n * @param {number} sw\n * @param {number} sh\n * @return {!ImageData}\n * @throws {Error}\n */\nBaseRenderingContext2D.prototype.getImageData = function(sx, sy, sw, sh) {};\n\n/**\n * @param {ImageData} imagedata\n * @param {number} dx\n * @param {number} dy\n * @param {number=} opt_dirtyX\n * @param {number=} opt_dirtyY\n * @param {number=} opt_dirtyWidth\n * @param {number=} opt_dirtyHeight\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.putImageData = function(imagedata, dx, dy,\n opt_dirtyX, opt_dirtyY, opt_dirtyWidth, opt_dirtyHeight) {};\n\n/**\n * Note: WebKit only\n * @param {number|string=} opt_a\n * @param {number=} opt_b\n * @param {number=} opt_c\n * @param {number=} opt_d\n * @param {number=} opt_e\n * @see http://developer.apple.com/library/safari/#documentation/appleapplications/reference/WebKitDOMRef/CanvasRenderingContext2D_idl/Classes/CanvasRenderingContext2D/index.html\n * @return {undefined}\n * @deprecated\n */\nBaseRenderingContext2D.prototype.setFillColor = function(\n opt_a, opt_b, opt_c, opt_d, opt_e) {};\n\n/**\n * Note: WebKit only\n * @param {number|string=} opt_a\n * @param {number=} opt_b\n * @param {number=} opt_c\n * @param {number=} opt_d\n * @param {number=} opt_e\n * @see http://developer.apple.com/library/safari/#documentation/appleapplications/reference/WebKitDOMRef/CanvasRenderingContext2D_idl/Classes/CanvasRenderingContext2D/index.html\n * @return {undefined}\n * @deprecated\n */\nBaseRenderingContext2D.prototype.setStrokeColor = function(\n opt_a, opt_b, opt_c, opt_d, opt_e) {};\n\n/**\n * @return {!Array}\n * @override\n */\nBaseRenderingContext2D.prototype.getLineDash = function() {};\n\n/**\n * @param {Array} segments\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.setLineDash = function(segments) {};\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.fillColor;\n\n/**\n * @type {string|!CanvasGradient|!CanvasPattern}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#fill-and-stroke-styles:dom-context-2d-fillstyle\n * @implicitCast\n */\nBaseRenderingContext2D.prototype.fillStyle;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.font;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.globalAlpha;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.globalCompositeOperation;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.lineWidth;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.lineCap;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.lineJoin;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.miterLimit;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.shadowBlur;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.shadowColor;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.shadowOffsetX;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.shadowOffsetY;\n\n/** @type {boolean} */\nBaseRenderingContext2D.prototype.imageSmoothingEnabled;\n\n/**\n * @type {string|!CanvasGradient|!CanvasPattern}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#fill-and-stroke-styles:dom-context-2d-strokestyle\n * @implicitCast\n */\nBaseRenderingContext2D.prototype.strokeStyle;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.strokeColor;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.textAlign;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.textBaseline;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.lineDashOffset;\n\n/**\n * @constructor\n * @extends {BaseRenderingContext2D}\n * @see http://www.w3.org/TR/2dcontext/#canvasrenderingcontext2d\n */\nfunction CanvasRenderingContext2D() {}\n\n/** @const {!HTMLCanvasElement} */\nCanvasRenderingContext2D.prototype.canvas;\n\n/**\n * @constructor\n * @extends {BaseRenderingContext2D}\n * @see http://www.w3.org/TR/2dcontext/#canvasrenderingcontext2d\n */\nfunction OffscreenCanvasRenderingContext2D() {}\n\n/** @const {!OffscreenCanvas} */\nOffscreenCanvasRenderingContext2D.prototype.canvas;\n\n/**\n * @constructor\n */\nfunction CanvasGradient() {}\n\n/**\n * @param {number} offset\n * @param {string} color\n * @return {undefined}\n */\nCanvasGradient.prototype.addColorStop = function(offset, color) {};\n\n/**\n * @constructor\n */\nfunction CanvasPattern() {}\n\n/**\n * @constructor\n */\nfunction TextMetrics() {}\n\n/** @const {number} */\nTextMetrics.prototype.width;\n\n/**\n * @param {!Uint8ClampedArray|number} dataOrWidth In the first form, this is the\n * array of pixel data. In the second form, this is the image width.\n * @param {number} widthOrHeight In the first form, this is the image width. In\n * the second form, this is the image height.\n * @param {number=} opt_height In the first form, this is the optional image\n * height. The second form omits this argument.\n * @see https://html.spec.whatwg.org/multipage/scripting.html#imagedata\n * @constructor\n */\nfunction ImageData(dataOrWidth, widthOrHeight, opt_height) {}\n\n/** @const {!Uint8ClampedArray} */\nImageData.prototype.data;\n\n/** @const {number} */\nImageData.prototype.width;\n\n/** @const {number} */\nImageData.prototype.height;\n\n/**\n * @see https://www.w3.org/TR/html51/webappapis.html#webappapis-images\n * @interface\n */\nfunction ImageBitmap() {}\n\n/**\n * @const {number}\n */\nImageBitmap.prototype.width;\n\n/**\n * @const {number}\n */\nImageBitmap.prototype.height;\n\n/**\n * @typedef {{\n * imageOrientation: (string|undefined),\n * premultiplyAlpha: (string|undefined),\n * colorSpaceConversion: (string|undefined),\n * resizeWidth: (number|undefined),\n * resizeHeight: (number|undefined),\n * resizeQuality: (string|undefined)\n * }}\n * @see https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#images-2\n */\nvar ImageBitmapOptions;\n\n/**\n * @param {(!HTMLCanvasElement|!Blob|!HTMLVideoElement|!HTMLImageElement|!ImageBitmap|!CanvasRenderingContext2D|!ImageData)}\n * image\n * @param {(number|!ImageBitmapOptions)=} sxOrOptions\n * @param {number=} sy\n * @param {number=} sw\n * @param {number=} sh\n * @param {!ImageBitmapOptions=} options\n * @return {!Promise}\n * @see * https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#dom-createimagebitmap\n */\nfunction createImageBitmap(image, sxOrOptions, sy, sw, sh, options) {}\n\n\n/**\n * @constructor\n */\nfunction ClientInformation() {}\n\n/** @type {boolean} */\nClientInformation.prototype.onLine;\n\n/**\n * @param {string} protocol\n * @param {string} uri\n * @param {string} title\n * @return {undefined}\n */\nClientInformation.prototype.registerProtocolHandler = function(\n protocol, uri, title) {};\n\n/**\n * @param {string} mimeType\n * @param {string} uri\n * @param {string} title\n * @return {undefined}\n */\nClientInformation.prototype.registerContentHandler = function(\n mimeType, uri, title) {};\n\n// HTML5 Database objects\n/**\n * @constructor\n */\nfunction Database() {}\n\n/**\n * @type {string}\n */\nDatabase.prototype.version;\n\n/**\n * @param {function(!SQLTransaction) : void} callback\n * @param {(function(!SQLError) : void)=} opt_errorCallback\n * @param {Function=} opt_Callback\n * @return {undefined}\n */\nDatabase.prototype.transaction = function(\n callback, opt_errorCallback, opt_Callback) {};\n\n/**\n * @param {function(!SQLTransaction) : void} callback\n * @param {(function(!SQLError) : void)=} opt_errorCallback\n * @param {Function=} opt_Callback\n * @return {undefined}\n */\nDatabase.prototype.readTransaction = function(\n callback, opt_errorCallback, opt_Callback) {};\n\n/**\n * @param {string} oldVersion\n * @param {string} newVersion\n * @param {function(!SQLTransaction) : void} callback\n * @param {function(!SQLError) : void} errorCallback\n * @param {Function} successCallback\n * @return {undefined}\n */\nDatabase.prototype.changeVersion = function(\n oldVersion, newVersion, callback, errorCallback, successCallback) {};\n\n/**\n * @interface\n */\nfunction DatabaseCallback() {}\n\n/**\n * @param {!Database} db\n * @return {undefined}\n */\nDatabaseCallback.prototype.handleEvent = function(db) {};\n\n/**\n * @constructor\n */\nfunction SQLError() {}\n\n/**\n * @type {number}\n */\nSQLError.prototype.code;\n\n/**\n * @type {string}\n */\nSQLError.prototype.message;\n\n/**\n * @constructor\n */\nfunction SQLTransaction() {}\n\n/**\n * @param {string} sqlStatement\n * @param {Array<*>=} opt_queryArgs\n * @param {SQLStatementCallback=} opt_callback\n * @param {(function(!SQLTransaction, !SQLError) : (boolean|void))=}\n * opt_errorCallback\n * @return {undefined}\n */\nSQLTransaction.prototype.executeSql = function(\n sqlStatement, opt_queryArgs, opt_callback, opt_errorCallback) {};\n\n/**\n * @typedef {(function(!SQLTransaction, !SQLResultSet) : void)}\n */\nvar SQLStatementCallback;\n\n/**\n * @constructor\n */\nfunction SQLResultSet() {}\n\n/**\n * @type {number}\n */\nSQLResultSet.prototype.insertId;\n\n/**\n * @type {number}\n */\nSQLResultSet.prototype.rowsAffected;\n\n/**\n * @type {!SQLResultSetRowList}\n */\nSQLResultSet.prototype.rows;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/webdatabase/#sqlresultsetrowlist\n */\nfunction SQLResultSetRowList() {}\n\n/**\n * @type {number}\n */\nSQLResultSetRowList.prototype.length;\n\n/**\n * @param {number} index\n * @return {Object}\n * @nosideeffects\n */\nSQLResultSetRowList.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @param {string} version\n * @param {string} description\n * @param {number} size\n * @param {(DatabaseCallback|function(Database))=} opt_callback\n * @return {!Database}\n */\nfunction openDatabase(name, version, description, size, opt_callback) {}\n\n/**\n * @param {string} name\n * @param {string} version\n * @param {string} description\n * @param {number} size\n * @param {(DatabaseCallback|function(Database))=} opt_callback\n * @return {!Database}\n */\nWindow.prototype.openDatabase =\n function(name, version, description, size, opt_callback) {};\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/embedded-content-0.html#dom-img-complete\n */\nHTMLImageElement.prototype.complete;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/html5/embedded-content-0.html#dom-img-naturalwidth\n */\nHTMLImageElement.prototype.naturalWidth;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/html5/embedded-content-0.html#dom-img-naturalheight\n */\nHTMLImageElement.prototype.naturalHeight;\n\n/**\n * @type {string}\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/embedded-content-1.html#attr-img-crossorigin\n */\nHTMLImageElement.prototype.crossOrigin;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-currentsrc\n */\nHTMLImageElement.prototype.currentSrc;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/images.html#image-decoding-hint\n */\nHTMLImageElement.prototype.decoding;\n\n/**\n * @return {!Promise}\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-decode\n */\nHTMLImageElement.prototype.decode;\n\n\n/**\n * This is a superposition of the Window and Worker postMessage methods.\n * @param {*} message\n * @param {(string|!Array)=} opt_targetOriginOrTransfer\n * @param {(string|!Array|!Array)=}\n * opt_targetOriginOrPortsOrTransfer\n * @return {void}\n */\nfunction postMessage(message, opt_targetOriginOrTransfer,\n opt_targetOriginOrPortsOrTransfer) {}\n\n/**\n * @param {*} message\n * @param {string=} targetOrigin\n * @param {(!Array)=} transfer\n * @return {void}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage\n */\nWindow.prototype.postMessage = function(message, targetOrigin, transfer) {};\n\n/**\n * The postMessage method (as implemented in Opera).\n * @param {string} message\n */\nDocument.prototype.postMessage = function(message) {};\n\n/**\n * Document head accessor.\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dom.html#the-head-element-0\n * @type {HTMLHeadElement}\n */\nDocument.prototype.head;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/dom.html#current-document-readiness\n */\nDocument.prototype.readyState;\n\n/**\n * @see https://html.spec.whatwg.org/#application-cache-api\n * @constructor\n * @implements {EventTarget}\n */\nfunction ApplicationCache() {}\n\n/** @override */\nApplicationCache.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nApplicationCache.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nApplicationCache.prototype.dispatchEvent = function(evt) {};\n\n/**\n * The object isn't associated with an application cache. This can occur if the\n * update process fails and there is no previous cache to revert to, or if there\n * is no manifest file.\n * @const {number}\n */\nApplicationCache.prototype.UNCACHED;\n\n/**\n * The object isn't associated with an application cache. This can occur if the\n * update process fails and there is no previous cache to revert to, or if there\n * is no manifest file.\n * @const {number}\n */\nApplicationCache.UNCACHED;\n\n/**\n * The cache is idle.\n * @const {number}\n */\nApplicationCache.prototype.IDLE;\n\n/**\n * The cache is idle.\n * @const {number}\n */\nApplicationCache.IDLE;\n\n/**\n * The update has started but the resources are not downloaded yet - for\n * example, this can happen when the manifest file is fetched.\n * @const {number}\n */\nApplicationCache.prototype.CHECKING;\n\n/**\n * The update has started but the resources are not downloaded yet - for\n * example, this can happen when the manifest file is fetched.\n * @const {number}\n */\nApplicationCache.CHECKING;\n\n/**\n * The resources are being downloaded into the cache.\n * @const {number}\n */\nApplicationCache.prototype.DOWNLOADING;\n\n/**\n * The resources are being downloaded into the cache.\n * @const {number}\n */\nApplicationCache.DOWNLOADING;\n\n/**\n * Resources have finished downloading and the new cache is ready to be used.\n * @const {number}\n */\nApplicationCache.prototype.UPDATEREADY;\n\n/**\n * Resources have finished downloading and the new cache is ready to be used.\n * @const {number}\n */\nApplicationCache.UPDATEREADY;\n\n/**\n * The cache is obsolete.\n * @const {number}\n */\nApplicationCache.prototype.OBSOLETE;\n\n/**\n * The cache is obsolete.\n * @const {number}\n */\nApplicationCache.OBSOLETE;\n\n/**\n * The current status of the application cache.\n * @type {number}\n */\nApplicationCache.prototype.status;\n\n/**\n * Sent when the update process finishes for the first time; that is, the first\n * time an application cache is saved.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.oncached;\n\n/**\n * Sent when the cache update process begins.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onchecking;\n\n/**\n * Sent when the update process begins downloading resources in the manifest\n * file.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.ondownloading;\n\n/**\n * Sent when an error occurs.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onerror;\n\n/**\n * Sent when the update process finishes but the manifest file does not change.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onnoupdate;\n\n/**\n * Sent when each resource in the manifest file begins to download.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onprogress;\n\n/**\n * Sent when there is an existing application cache, the update process\n * finishes, and there is a new application cache ready for use.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onupdateready;\n\n/**\n * Replaces the active cache with the latest version.\n * @throws {DOMException}\n * @return {undefined}\n */\nApplicationCache.prototype.swapCache = function() {};\n\n/**\n * Manually triggers the update process.\n * @throws {DOMException}\n * @return {undefined}\n */\nApplicationCache.prototype.update = function() {};\n\n/** @type {?ApplicationCache} */\nvar applicationCache;\n\n/** @type {ApplicationCache} */\nWindow.prototype.applicationCache;\n\n/**\n * @see https://developer.mozilla.org/En/DOM/Worker/Functions_available_to_workers\n * @param {...!TrustedScriptURL|string} var_args\n * @return {undefined}\n */\nWindow.prototype.importScripts = function(var_args) {};\n\n/**\n * Decodes a string of data which has been encoded using base-64 encoding.\n *\n * @param {string} encodedData\n * @return {string}\n * @nosideeffects\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#dom-atob\n */\nfunction atob(encodedData) {}\n\n/**\n * @param {string} stringToEncode\n * @return {string}\n * @nosideeffects\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#dom-btoa\n */\nfunction btoa(stringToEncode) {}\n\n/**\n * @see https://developer.mozilla.org/En/DOM/Worker/Functions_available_to_workers\n * @param {...!TrustedScriptURL|string} var_args\n * @return {undefined}\n */\nfunction importScripts(var_args) {}\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @constructor\n * @implements {EventTarget}\n */\nfunction WebWorker() {}\n\n/** @override */\nWebWorker.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWebWorker.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nWebWorker.prototype.dispatchEvent = function(evt) {};\n\n/**\n * Stops the worker process\n * @return {undefined}\n */\nWebWorker.prototype.terminate = function() {};\n\n/**\n * Posts a message to the worker thread.\n * @param {string} message\n * @return {undefined}\n */\nWebWorker.prototype.postMessage = function(message) {};\n\n/**\n * Sent when the worker thread posts a message to its creator.\n * @type {?function(!MessageEvent<*>): void}\n */\nWebWorker.prototype.onmessage;\n\n/**\n * Sent when the worker thread encounters an error.\n * @type {?function(!ErrorEvent): void}\n */\nWebWorker.prototype.onerror;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @param {string} scriptURL\n * @param {!WorkerOptions=} opt_options\n * @constructor\n * @implements {EventTarget}\n */\nfunction Worker(scriptURL, opt_options) {}\n\n/** @override */\nWorker.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWorker.prototype.removeEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWorker.prototype.dispatchEvent = function(evt) {};\n\n/**\n * Stops the worker process\n * @return {undefined}\n */\nWorker.prototype.terminate = function() {};\n\n/**\n * Posts a message to the worker thread.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nWorker.prototype.postMessage = function(message, opt_transfer) {};\n\n/**\n * Posts a message to the worker thread.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nWorker.prototype.webkitPostMessage = function(message, opt_transfer) {};\n\n/**\n * Sent when the worker thread posts a message to its creator.\n * @type {?function(!MessageEvent<*>): void}\n */\nWorker.prototype.onmessage;\n\n/**\n * Sent when the worker thread encounters an error.\n * @type {?function(!ErrorEvent): void}\n */\nWorker.prototype.onerror;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @record\n */\nfunction WorkerOptions() {}\n\n/**\n * Defines a name for the new global environment of the worker, primarily for\n * debugging purposes.\n * @type {string|undefined}\n */\nWorkerOptions.prototype.name;\n\n/**\n * 'classic' or 'module'. Default: 'classic'.\n * Specifying 'module' ensures the worker environment supports JavaScript\n * modules.\n * @type {string|undefined}\n */\nWorkerOptions.prototype.type;\n\n// WorkerOptions.prototype.credentials is defined in fetchapi.js.\n// if type = 'module', it specifies how scriptURL is fetched.\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @param {string} scriptURL The URL of the script to run in the SharedWorker.\n * @param {string=} opt_name A name that can later be used to obtain a\n * reference to the same SharedWorker.\n * @constructor\n * @implements {EventTarget}\n */\nfunction SharedWorker(scriptURL, opt_name) {}\n\n/** @override */\nSharedWorker.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSharedWorker.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSharedWorker.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {!MessagePort}\n */\nSharedWorker.prototype.port;\n\n/**\n * Called on network errors for loading the initial script.\n * @type {?function(!ErrorEvent): void}\n */\nSharedWorker.prototype.onerror;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @see http://www.w3.org/TR/url-1/#dom-urlutilsreadonly\n * @interface\n */\nfunction WorkerLocation() {}\n\n/** @type {string} */\nWorkerLocation.prototype.href;\n\n/** @type {string} */\nWorkerLocation.prototype.origin;\n\n/** @type {string} */\nWorkerLocation.prototype.protocol;\n\n/** @type {string} */\nWorkerLocation.prototype.host;\n\n/** @type {string} */\nWorkerLocation.prototype.hostname;\n\n/** @type {string} */\nWorkerLocation.prototype.port;\n\n/** @type {string} */\nWorkerLocation.prototype.pathname;\n\n/** @type {string} */\nWorkerLocation.prototype.search;\n\n/** @type {string} */\nWorkerLocation.prototype.hash;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @interface\n * @extends {EventTarget}\n */\nfunction WorkerGlobalScope() {}\n\n/** @type {!WorkerGlobalScope} */\nWorkerGlobalScope.prototype.self;\n\n/** @type {!WorkerLocation} */\nWorkerGlobalScope.prototype.location;\n\n/**\n * Closes the worker represented by this WorkerGlobalScope.\n * @return {undefined}\n */\nWorkerGlobalScope.prototype.close = function() {};\n\n/**\n * Sent when the worker encounters an error.\n * @type {?function(string, string, number, number, !Error): void}\n */\nWorkerGlobalScope.prototype.onerror;\n\n/**\n * Sent when the worker goes offline.\n * @type {?function(!Event): void}\n */\nWorkerGlobalScope.prototype.onoffline;\n\n/**\n * Sent when the worker goes online.\n * @type {?function(!Event): void}\n */\nWorkerGlobalScope.prototype.ononline;\n\n/** @type {!WorkerPerformance} */\nWorkerGlobalScope.prototype.performance;\n\n/** @type {!WorkerNavigator} */\nWorkerGlobalScope.prototype.navigator;\n\n/**\n * Worker postMessage method.\n * @param {*} message\n * @param {(!Array)=} transfer\n * @return {void}\n */\nWorkerGlobalScope.prototype.postMessage = function(message, transfer) {};\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @interface\n * @extends {WorkerGlobalScope}\n */\nfunction DedicatedWorkerGlobalScope() {}\n\n/**\n * Posts a message to creator of this worker.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nDedicatedWorkerGlobalScope.prototype.postMessage =\n function(message, opt_transfer) {};\n\n/**\n * Posts a message to creator of this worker.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nDedicatedWorkerGlobalScope.prototype.webkitPostMessage =\n function(message, opt_transfer) {};\n\n/**\n * Sent when the creator posts a message to this worker.\n * @type {?function(!MessageEvent<*>): void}\n */\nDedicatedWorkerGlobalScope.prototype.onmessage;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @interface\n * @extends {WorkerGlobalScope}\n */\nfunction SharedWorkerGlobalScope() {}\n\n/** @type {string} */\nSharedWorkerGlobalScope.prototype.name;\n\n/**\n * Sent when a connection to this worker is opened.\n * @type {?function(!Event)}\n */\nSharedWorkerGlobalScope.prototype.onconnect;\n\n/** @type {!Array|undefined} */\nHTMLElement.observedAttributes;\n\n/**\n * @param {!Document} oldDocument\n * @param {!Document} newDocument\n */\nHTMLElement.prototype.adoptedCallback = function(oldDocument, newDocument) {};\n\n/**\n * @param {!{mode: string}} options\n * @return {!ShadowRoot}\n */\nHTMLElement.prototype.attachShadow = function(options) {};\n\n/**\n * @param {string} attributeName\n * @param {?string} oldValue\n * @param {?string} newValue\n * @param {?string} namespace\n */\nHTMLElement.prototype.attributeChangedCallback = function(attributeName, oldValue, newValue, namespace) {};\n\n/** @type {function()|undefined} */\nHTMLElement.prototype.connectedCallback;\n\n/** @type {Element} */\nHTMLElement.prototype.contextMenu;\n\n/** @type {function()|undefined} */\nHTMLElement.prototype.disconnectedCallback;\n\n/** @type {boolean} */\nHTMLElement.prototype.draggable;\n\n/**\n * This is actually a DOMSettableTokenList property. However since that\n * interface isn't currently defined and no known browsers implement this\n * feature, just define the property for now.\n *\n * @const {Object}\n */\nHTMLElement.prototype.dropzone;\n\n/** @type {boolean} */\nHTMLElement.prototype.hidden;\n\n/** @type {boolean} */\nHTMLElement.prototype.spellcheck;\n\n/**\n * @see https://dom.spec.whatwg.org/#dictdef-getrootnodeoptions\n * @typedef {{\n * composed: boolean\n * }}\n */\nvar GetRootNodeOptions;\n\n/**\n * @see https://dom.spec.whatwg.org/#dom-node-getrootnode\n * @param {GetRootNodeOptions=} opt_options\n * @return {!Node}\n */\nNode.prototype.getRootNode = function(opt_options) {};\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @return {!ShadowRoot}\n */\nHTMLElement.prototype.createShadowRoot;\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @return {!ShadowRoot}\n */\nHTMLElement.prototype.webkitCreateShadowRoot;\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/\n * @type {ShadowRoot}\n */\nHTMLElement.prototype.shadowRoot;\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/\n * @return {!NodeList}\n */\nHTMLElement.prototype.getDestinationInsertionPoints = function() {};\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @type {function()}\n */\nHTMLElement.prototype.createdCallback;\n\n/**\n * @see http://w3c.github.io/webcomponents/explainer/#lifecycle-callbacks\n * @type {function()}\n */\nHTMLElement.prototype.attachedCallback;\n\n/**\n * @see http://w3c.github.io/webcomponents/explainer/#lifecycle-callbacks\n * @type {function()}\n */\nHTMLElement.prototype.detachedCallback;\n\n/**\n * Cryptographic nonce used by Content Security Policy.\n * @see https://html.spec.whatwg.org/multipage/dom.html#elements-in-the-dom:noncedelement\n * @type {?string}\n */\nHTMLElement.prototype.nonce;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.download;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.hash;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.host;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.hostname;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.pathname;\n\n/**\n * The 'ping' attribute is known to be supported in recent versions (as of\n * mid-2014) of Chrome, Safari, and Firefox, and is not supported in any\n * current version of Internet Explorer.\n *\n * @type {string}\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#hyperlink-auditing\n */\nHTMLAnchorElement.prototype.ping;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.port;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.protocol;\n\n/** @type {!DOMTokenList} */\nHTMLAnchorElement.prototype.relList;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.search;\n\n/** @type {string} */\nHTMLAreaElement.prototype.download;\n\n/**\n * @type {string}\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#hyperlink-auditing\n */\nHTMLAreaElement.prototype.ping;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/html-markup/iframe.html#iframe.attrs.srcdoc\n */\nHTMLIFrameElement.prototype.srcdoc;\n\n/**\n * @type {?DOMTokenList}\n * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-iframe-element.html#attr-iframe-sandbox\n */\nHTMLIFrameElement.prototype.sandbox;\n\n/**\n * @type {Window}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/contentWindow\n */\nHTMLIFrameElement.prototype.contentWindow;\n\n/** @type {string} */\nHTMLInputElement.prototype.autocomplete;\n\n/** @type {string} */\nHTMLInputElement.prototype.dirname;\n\n/** @type {FileList} */\nHTMLInputElement.prototype.files;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#dom-input-indeterminate\n */\nHTMLInputElement.prototype.indeterminate;\n\n/** @type {string} */\nHTMLInputElement.prototype.list;\n\n/** @implicitCast @type {string} */\nHTMLInputElement.prototype.max;\n\n/** @implicitCast @type {string} */\nHTMLInputElement.prototype.min;\n\n/** @type {string} */\nHTMLInputElement.prototype.pattern;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.multiple;\n\n/** @type {string} */\nHTMLInputElement.prototype.placeholder;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.required;\n\n/** @implicitCast @type {string} */\nHTMLInputElement.prototype.step;\n\n/** @type {Date} */\nHTMLInputElement.prototype.valueAsDate;\n\n/** @type {number} */\nHTMLInputElement.prototype.valueAsNumber;\n\n/**\n * Changes the form control's value by the value given in the step attribute\n * multiplied by opt_n.\n * @param {number=} opt_n step multiplier. Defaults to 1.\n * @return {undefined}\n */\nHTMLInputElement.prototype.stepDown = function(opt_n) {};\n\n/**\n * Changes the form control's value by the value given in the step attribute\n * multiplied by opt_n.\n * @param {number=} opt_n step multiplier. Defaults to 1.\n * @return {undefined}\n */\nHTMLInputElement.prototype.stepUp = function(opt_n) {};\n\n\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement\n */\nfunction HTMLMediaElement() {}\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_empty\n * @const {number}\n */\nHTMLMediaElement.NETWORK_EMPTY;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_empty\n * @const {number}\n */\nHTMLMediaElement.prototype.NETWORK_EMPTY;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_idle\n * @const {number}\n */\nHTMLMediaElement.NETWORK_IDLE;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_idle\n * @const {number}\n */\nHTMLMediaElement.prototype.NETWORK_IDLE;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_loading\n * @const {number}\n */\nHTMLMediaElement.NETWORK_LOADING;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_loading\n * @const {number}\n */\nHTMLMediaElement.prototype.NETWORK_LOADING;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_no_source\n * @const {number}\n */\nHTMLMediaElement.NETWORK_NO_SOURCE;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_no_source\n * @const {number}\n */\nHTMLMediaElement.prototype.NETWORK_NO_SOURCE;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_nothing\n * @const {number}\n */\nHTMLMediaElement.HAVE_NOTHING;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_nothing\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_NOTHING;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_metadata\n * @const {number}\n */\nHTMLMediaElement.HAVE_METADATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_metadata\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_METADATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_current_data\n * @const {number}\n */\nHTMLMediaElement.HAVE_CURRENT_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_current_data\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_CURRENT_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_future_data\n * @const {number}\n */\nHTMLMediaElement.HAVE_FUTURE_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_future_data\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_FUTURE_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_enough_data\n * @const {number}\n */\nHTMLMediaElement.HAVE_ENOUGH_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_enough_data\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_ENOUGH_DATA;\n\n/** @type {MediaError} */\nHTMLMediaElement.prototype.error;\n\n/** @type {string} @implicitCast */\nHTMLMediaElement.prototype.src;\n\n/** @type {string} */\nHTMLMediaElement.prototype.currentSrc;\n\n/** @type {number} */\nHTMLMediaElement.prototype.networkState;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.autobuffer;\n\n/** @type {!TimeRanges} */\nHTMLMediaElement.prototype.buffered;\n\n/** @type {?MediaStream} */\nHTMLMediaElement.prototype.srcObject;\n\n/**\n * Loads the media element.\n * @return {undefined}\n */\nHTMLMediaElement.prototype.load = function() {};\n\n/**\n * @param {string} type Type of the element in question in question.\n * @return {string} Whether it can play the type.\n * @nosideeffects\n */\nHTMLMediaElement.prototype.canPlayType = function(type) {};\n\n/** Event handlers */\n\n/** @type {?function(Event)} */\nHTMLMediaElement.prototype.onabort;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.oncanplay;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.oncanplaythrough;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.ondurationchange;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onemptied;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onended;\n\n/** @type {?function(Event)} */\nHTMLMediaElement.prototype.onerror;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onloadeddata;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onloadedmetadata;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onloadstart;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onpause;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onplay;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onplaying;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onprogress;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onratechange;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onseeked;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onseeking;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onstalled;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onsuspend;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.ontimeupdate;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onvolumechange;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onwaiting;\n\n/** @type {?function(Event)} */\nHTMLImageElement.prototype.onload;\n\n/** @type {?function(Event)} */\nHTMLImageElement.prototype.onerror;\n\n/** @type {string} */\nHTMLMediaElement.prototype.preload;\n\n/** @type {number} */\nHTMLMediaElement.prototype.readyState;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.seeking;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-crossorigin\n */\nHTMLMediaElement.prototype.crossOrigin;\n\n/**\n * The current time, in seconds.\n * @type {number}\n */\nHTMLMediaElement.prototype.currentTime;\n\n/**\n * The absolute timeline offset.\n * @return {!Date}\n */\nHTMLMediaElement.prototype.getStartDate = function() {};\n\n/**\n * The length of the media in seconds.\n * @type {number}\n */\nHTMLMediaElement.prototype.duration;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.paused;\n\n/** @type {number} */\nHTMLMediaElement.prototype.defaultPlaybackRate;\n\n/** @type {number} */\nHTMLMediaElement.prototype.playbackRate;\n\n/** @type {TimeRanges} */\nHTMLMediaElement.prototype.played;\n\n/** @type {TimeRanges} */\nHTMLMediaElement.prototype.seekable;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.ended;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.autoplay;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.loop;\n\n/**\n * Starts playing the media.\n * @return {?Promise} This is a *nullable* Promise on purpose unlike\n * the HTML5 spec because supported older browsers (incl. Smart TVs) don't\n * return a Promise.\n */\nHTMLMediaElement.prototype.play = function() {};\n\n/**\n * Pauses the media.\n * @return {undefined}\n */\nHTMLMediaElement.prototype.pause = function() {};\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.controls;\n\n/**\n * The audio volume, from 0.0 (silent) to 1.0 (loudest).\n * @type {number}\n */\nHTMLMediaElement.prototype.volume;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.muted;\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dom-media-addtexttrack\n * @param {string} kind Kind of the text track.\n * @param {string=} opt_label Label of the text track.\n * @param {string=} opt_language Language of the text track.\n * @return {!TextTrack} TextTrack object added to the media element.\n */\nHTMLMediaElement.prototype.addTextTrack =\n function(kind, opt_label, opt_language) {};\n\n/** @type {!TextTrackList} */\nHTMLMediaElement.prototype.textTracks;\n\n/**\n * The ID of the audio device through which output is being delivered, or an\n * empty string if using the default device.\n *\n * Implemented as a draft spec in Chrome 49+.\n *\n * @see https://w3c.github.io/mediacapture-output/#htmlmediaelement-extensions\n * @type {string}\n */\nHTMLMediaElement.prototype.sinkId;\n\n/**\n * Sets the audio device through which output should be delivered.\n *\n * Implemented as a draft spec in Chrome 49+.\n *\n * @param {string} sinkId The ID of the audio output device, or empty string\n * for default device.\n *\n * @see https://w3c.github.io/mediacapture-output/#htmlmediaelement-extensions\n * @return {!Promise}\n */\nHTMLMediaElement.prototype.setSinkId = function(sinkId) {};\n\n\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see https://html.spec.whatwg.org/multipage/dom.html#htmlunknownelement\n * @see https://html.spec.whatwg.org/multipage/scripting.html#customized-built-in-element-restrictions\n * @see https://w3c.github.io/webcomponents/spec/custom/#custom-elements-api\n */\nfunction HTMLUnknownElement() {}\n\n\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/\n * @return {!NodeList}\n */\nText.prototype.getDestinationInsertionPoints = function() {};\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttracklist\n * @constructor\n * @implements {IArrayLike}\n */\nfunction TextTrackList() {}\n\n/** @type {number} */\nTextTrackList.prototype.length;\n\n/**\n * @param {string} id\n * @return {TextTrack}\n */\nTextTrackList.prototype.getTrackById = function(id) {};\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrack\n * @constructor\n * @implements {EventTarget}\n */\nfunction TextTrack() {}\n\n/**\n * @param {TextTrackCue} cue\n * @return {undefined}\n */\nTextTrack.prototype.addCue = function(cue) {};\n\n/**\n * @param {TextTrackCue} cue\n * @return {undefined}\n */\nTextTrack.prototype.removeCue = function(cue) {};\n\n/**\n * @const {TextTrackCueList}\n */\nTextTrack.prototype.activeCues;\n\n/**\n * @const {TextTrackCueList}\n */\nTextTrack.prototype.cues;\n\n/**\n * @type {string}\n */\nTextTrack.prototype.mode;\n\n/** @override */\nTextTrack.prototype.addEventListener = function(\n type, listener, opt_useCapture) {};\n\n/** @override */\nTextTrack.prototype.dispatchEvent = function(evt) {};\n\n/** @override */\nTextTrack.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrackcuelist\n * @constructor\n * @implements {IArrayLike}\n */\nfunction TextTrackCueList() {}\n\n/** @const {number} */\nTextTrackCueList.prototype.length;\n\n/**\n * @param {string} id\n * @return {TextTrackCue}\n */\nTextTrackCueList.prototype.getCueById = function(id) {};\n\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrackcue\n * @constructor\n * @param {number} startTime\n * @param {number} endTime\n * @param {string} text\n */\nfunction TextTrackCue(startTime, endTime, text) {}\n\n/** @type {string} */\nTextTrackCue.prototype.id;\n\n/** @type {number} */\nTextTrackCue.prototype.startTime;\n\n/** @type {number} */\nTextTrackCue.prototype.endTime;\n\n/** @type {string} */\nTextTrackCue.prototype.text;\n\n\n\n/**\n * @see https://w3c.github.io/webvtt/#vttregion\n * @constructor\n */\nfunction VTTRegion() {}\n\n/** @type {string} */\nVTTRegion.prototype.id;\n\n/** @type {number} */\nVTTRegion.prototype.width;\n\n/** @type {number} */\nVTTRegion.prototype.lines;\n\n/** @type {number} */\nVTTRegion.prototype.regionAnchorX;\n\n/** @type {number} */\nVTTRegion.prototype.regionAnchorY;\n\n/** @type {number} */\nVTTRegion.prototype.viewportAnchorX;\n\n/** @type {number} */\nVTTRegion.prototype.viewportAnchorY;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-scrollsetting\n * @type {string}\n */\nVTTRegion.prototype.scroll;\n\n\n\n/**\n * @see http://dev.w3.org/html5/webvtt/#the-vttcue-interface\n * @constructor\n * @extends {TextTrackCue}\n * @param {number} startTime\n * @param {number} endTime\n * @param {string} text\n */\nfunction VTTCue(startTime, endTime, text) {}\n\n/** @type {?VTTRegion} */\nVTTCue.prototype.region;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-directionsetting\n * @type {string}\n */\nVTTCue.prototype.vertical;\n\n/** @type {boolean} */\nVTTCue.prototype.snapToLines;\n\n/** @type {(number|string)} */\nVTTCue.prototype.line;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-linealignsetting\n * @type {string}\n */\nVTTCue.prototype.lineAlign;\n\n/** @type {(number|string)} */\nVTTCue.prototype.position;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-positionalignsetting\n * @type {string}\n */\nVTTCue.prototype.positionAlign;\n\n/** @type {number} */\nVTTCue.prototype.size;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-alignsetting\n * @type {string}\n */\nVTTCue.prototype.align;\n\n/** @type {string} */\nVTTCue.prototype.text;\n\n/** @return {!DocumentFragment} */\nVTTCue.prototype.getCueAsHTML = function() {};\n\n\n/**\n * @constructor\n * @extends {HTMLMediaElement}\n */\nfunction HTMLAudioElement() {}\n\n/**\n * @constructor\n * @extends {HTMLMediaElement}\n * The webkit-prefixed attributes are defined in\n * https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/html/media/HTMLMediaElement.idl\n */\nfunction HTMLVideoElement() {}\n\n/**\n * Starts displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitEnterFullscreen = function() {};\n\n/**\n * Starts displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitEnterFullScreen = function() {};\n\n/**\n * Stops displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitExitFullscreen = function() {};\n\n/**\n * Stops displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitExitFullScreen = function() {};\n\n/** @type {number} */\nHTMLVideoElement.prototype.width;\n\n/** @type {number} */\nHTMLVideoElement.prototype.height;\n\n/** @type {number} */\nHTMLVideoElement.prototype.videoWidth;\n\n/** @type {number} */\nHTMLVideoElement.prototype.videoHeight;\n\n/** @type {string} */\nHTMLVideoElement.prototype.poster;\n\n/** @type {boolean} */\nHTMLVideoElement.prototype.webkitSupportsFullscreen;\n\n/** @type {boolean} */\nHTMLVideoElement.prototype.webkitDisplayingFullscreen;\n\n/** @type {number} */\nHTMLVideoElement.prototype.webkitDecodedFrameCount;\n\n/** @type {number} */\nHTMLVideoElement.prototype.webkitDroppedFrameCount;\n\n/**\n * @typedef {{\n * creationTime: number,\n * totalVideoFrames: number,\n * droppedVideoFrames: number,\n * corruptedVideoFrames: number,\n * totalFrameDelay: number\n * }}\n */\nvar VideoPlaybackQuality;\n\n/**\n * @see https://w3c.github.io/media-source/#htmlvideoelement-extensions\n * @return {!VideoPlaybackQuality} Stats about the current playback.\n */\nHTMLVideoElement.prototype.getVideoPlaybackQuality = function() {};\n\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/media.html#error-codes\n */\nfunction MediaError() {}\n\n/** @type {number} */\nMediaError.prototype.code;\n\n/** @type {string} */\nMediaError.prototype.message;\n\n/**\n * The fetching process for the media resource was aborted by the user agent at\n * the user's request.\n * @const {number}\n */\nMediaError.MEDIA_ERR_ABORTED;\n\n/**\n * A network error of some description caused the user agent to stop fetching\n * the media resource, after the resource was established to be usable.\n * @const {number}\n */\nMediaError.MEDIA_ERR_NETWORK;\n\n/**\n * An error of some description occurred while decoding the media resource,\n * after the resource was established to be usable.\n * @const {number}\n */\nMediaError.MEDIA_ERR_DECODE;\n\n/**\n * The media resource indicated by the src attribute was not suitable.\n * @const {number}\n */\nMediaError.MEDIA_ERR_SRC_NOT_SUPPORTED;\n\n// HTML5 MessageChannel\n/**\n * @see http://dev.w3.org/html5/spec/comms.html#messagechannel\n * @constructor\n */\nfunction MessageChannel() {}\n\n/**\n * Returns the first port.\n * @type {!MessagePort}\n */\nMessageChannel.prototype.port1;\n\n/**\n * Returns the second port.\n * @type {!MessagePort}\n */\nMessageChannel.prototype.port2;\n\n// HTML5 MessagePort\n/**\n * @see http://dev.w3.org/html5/spec/comms.html#messageport\n * @constructor\n * @implements {EventTarget}\n * @implements {Transferable}\n */\nfunction MessagePort() {}\n\n/** @override */\nMessagePort.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nMessagePort.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nMessagePort.prototype.dispatchEvent = function(evt) {};\n\n\n/**\n * Posts a message through the channel, optionally with the given\n * Array of Transferables.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nMessagePort.prototype.postMessage = function(message, opt_transfer) {\n};\n\n/**\n * Begins dispatching messages received on the port.\n * @return {undefined}\n */\nMessagePort.prototype.start = function() {};\n\n/**\n * Disconnects the port, so that it is no longer active.\n * @return {undefined}\n */\nMessagePort.prototype.close = function() {};\n\n/**\n * TODO(blickly): Change this to MessageEvent<*> and add casts as needed\n * @type {?function(!MessageEvent): void}\n */\nMessagePort.prototype.onmessage;\n\n// HTML5 MessageEvent class\n/**\n * @typedef {Window|MessagePort|ServiceWorker}\n * @see https://html.spec.whatwg.org/multipage/comms.html#messageeventsource\n */\nvar MessageEventSource;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @template T\n * @see https://html.spec.whatwg.org/multipage/comms.html#messageeventinit\n */\nfunction MessageEventInit() {}\n\n/** @type {T|undefined} */\nMessageEventInit.prototype.data;\n\n/** @type {(string|undefined)} */\nMessageEventInit.prototype.origin;\n\n/** @type {(string|undefined)} */\nMessageEventInit.prototype.lastEventId;\n\n/** @type {(?MessageEventSource|undefined)} */\nMessageEventInit.prototype.source;\n\n/** @type {(!Array|undefined)} */\nMessageEventInit.prototype.ports;\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/comms.html#messageevent\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {MessageEventInit=} opt_eventInitDict\n * @template T\n */\nfunction MessageEvent(type, opt_eventInitDict) {}\n\n/**\n * The data payload of the message.\n * @type {T}\n */\nMessageEvent.prototype.data;\n\n/**\n * The origin of the message, for server-sent events and cross-document\n * messaging.\n * @type {string}\n */\nMessageEvent.prototype.origin;\n\n/**\n * The last event ID, for server-sent events.\n * @type {string}\n */\nMessageEvent.prototype.lastEventId;\n\n/**\n * The window that dispatched the event.\n * @type {Window}\n */\nMessageEvent.prototype.source;\n\n/**\n * The Array of MessagePorts sent with the message, for cross-document\n * messaging and channel messaging.\n * @type {!Array}\n */\nMessageEvent.prototype.ports;\n\n/**\n * Initializes the event in a manner analogous to the similarly-named methods in\n * the DOM Events interfaces.\n * @param {string} typeArg\n * @param {boolean=} canBubbleArg\n * @param {boolean=} cancelableArg\n * @param {T=} dataArg\n * @param {string=} originArg\n * @param {string=} lastEventIdArg\n * @param {?MessageEventSource=} sourceArg\n * @param {!Array=} portsArg\n * @return {undefined}\n */\nMessageEvent.prototype.initMessageEvent = function(typeArg, canBubbleArg,\n cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, portsArg) {};\n\n/**\n * Initializes the event in a manner analogous to the similarly-named methods in\n * the DOM Events interfaces.\n * @param {string} namespaceURI\n * @param {string=} typeArg\n * @param {boolean=} canBubbleArg\n * @param {boolean=} cancelableArg\n * @param {T=} dataArg\n * @param {string=} originArg\n * @param {string=} lastEventIdArg\n * @param {?MessageEventSource=} sourceArg\n * @param {!Array=} portsArg\n * @return {undefined}\n */\nMessageEvent.prototype.initMessageEventNS = function(namespaceURI, typeArg,\n canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg,\n portsArg) {};\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://html.spec.whatwg.org/multipage/web-sockets.html#the-closeevent-interface\n */\nfunction CloseEventInit() {}\n\n/**\n * @type {undefined|boolean}\n */\nCloseEventInit.prototype.wasClean;\n\n/**\n * @type {undefined|number}\n */\nCloseEventInit.prototype.code;\n\n/**\n * @type {undefined|string}\n */\nCloseEventInit.prototype.reason;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {!CloseEventInit=} opt_init\n */\nvar CloseEvent = function(type, opt_init) {};\n\n/**\n * @type {boolean}\n */\nCloseEvent.prototype.wasClean;\n\n/**\n * @type {number}\n */\nCloseEvent.prototype.code;\n\n/**\n * @type {string}\n */\nCloseEvent.prototype.reason;\n\n/**\n * HTML5 BroadcastChannel class.\n * @param {string} channelName\n * @see https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel\n * @see https://html.spec.whatwg.org/multipage/comms.html#dom-broadcastchannel\n * @implements {EventTarget}\n * @constructor\n */\nfunction BroadcastChannel(channelName) {}\n\n/**\n * Sends the message, of any type of object, to each BroadcastChannel object\n * listening to the same channel.\n * @param {*} message\n */\nBroadcastChannel.prototype.postMessage = function(message) {};\n\n/**\n * Closes the channel object, indicating it won't get any new messages, and\n * allowing it to be, eventually, garbage collected.\n * @return {void}\n */\nBroadcastChannel.prototype.close = function() {};\n\n/** @override */\nBroadcastChannel.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nBroadcastChannel.prototype.dispatchEvent = function(evt) {};\n\n/** @override */\nBroadcastChannel.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/**\n * An EventHandler property that specifies the function to execute when a\n * message event is fired on this object.\n * @type {?function(!MessageEvent<*>)}\n */\nBroadcastChannel.prototype.onmessage;\n\n/**\n * The name of the channel.\n * @type {string}\n */\nBroadcastChannel.prototype.name;\n\n/**\n * HTML5 DataTransfer class.\n *\n * @see http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html\n * @see http://developers.whatwg.org/dnd.html#datatransferitem\n * @constructor\n */\nfunction DataTransfer() {}\n\n/** @type {string} */\nDataTransfer.prototype.dropEffect;\n\n/** @type {string} */\nDataTransfer.prototype.effectAllowed;\n\n/** @type {!Array} */\nDataTransfer.prototype.types;\n\n/** @type {!FileList} */\nDataTransfer.prototype.files;\n\n/**\n * @param {string=} opt_format Format for which to remove data.\n * @return {undefined}\n */\nDataTransfer.prototype.clearData = function(opt_format) {};\n\n/**\n * @param {string} format Format for which to set data.\n * @param {string} data Data to add.\n * @return {boolean}\n */\nDataTransfer.prototype.setData = function(format, data) {};\n\n/**\n * @param {string} format Format for which to set data.\n * @return {string} Data for the given format.\n */\nDataTransfer.prototype.getData = function(format) { return ''; };\n\n/**\n * @param {HTMLElement} img The image to use when dragging.\n * @param {number} x Horizontal position of the cursor.\n * @param {number} y Vertical position of the cursor.\n * @return {undefined}\n */\nDataTransfer.prototype.setDragImage = function(img, x, y) {};\n\n/**\n * @param {HTMLElement} elem Element to receive drag result events.\n * @return {undefined}\n */\nDataTransfer.prototype.addElement = function(elem) {};\n\n/**\n * Addition for accessing clipboard file data that are part of the proposed\n * HTML5 spec.\n * @type {DataTransfer}\n */\nMouseEvent.prototype.dataTransfer;\n\n/**\n * @record\n * @extends {MouseEventInit}\n * @see https://w3c.github.io/uievents/#idl-wheeleventinit\n */\nfunction WheelEventInit() {}\n\n/** @type {undefined|number} */\nWheelEventInit.prototype.deltaX;\n\n/** @type {undefined|number} */\nWheelEventInit.prototype.deltaY;\n\n/** @type {undefined|number} */\nWheelEventInit.prototype.deltaZ;\n\n/** @type {undefined|number} */\nWheelEventInit.prototype.deltaMode;\n\n/**\n * @param {string} type\n * @param {WheelEventInit=} opt_eventInitDict\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#interface-WheelEvent\n * @constructor\n * @extends {MouseEvent}\n */\nfunction WheelEvent(type, opt_eventInitDict) {}\n\n/** @const {number} */\nWheelEvent.DOM_DELTA_PIXEL;\n\n/** @const {number} */\nWheelEvent.DOM_DELTA_LINE;\n\n/** @const {number} */\nWheelEvent.DOM_DELTA_PAGE;\n\n/** @const {number} */\nWheelEvent.prototype.deltaX;\n\n/** @const {number} */\nWheelEvent.prototype.deltaY;\n\n/** @const {number} */\nWheelEvent.prototype.deltaZ;\n\n/** @const {number} */\nWheelEvent.prototype.deltaMode;\n\n/**\n * HTML5 DataTransferItem class.\n *\n * @see http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html\n * @see http://developers.whatwg.org/dnd.html#datatransferitem\n * @constructor\n */\nfunction DataTransferItem() {}\n\n/** @type {string} */\nDataTransferItem.prototype.kind;\n\n/** @type {string} */\nDataTransferItem.prototype.type;\n\n/**\n * @param {function(string)} callback\n * @return {undefined}\n */\nDataTransferItem.prototype.getAsString = function(callback) {};\n\n/**\n * @return {?File} The file corresponding to this item, or null.\n * @nosideeffects\n */\nDataTransferItem.prototype.getAsFile = function() { return null; };\n\n/**\n * HTML5 DataTransferItemList class. There are some discrepancies in the docs\n * on the whatwg.org site. When in doubt, these prototypes match what is\n * implemented as of Chrome 30.\n *\n * @see http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html\n * @see http://developers.whatwg.org/dnd.html#datatransferitem\n * @constructor\n * @implements {IArrayLike}\n */\nfunction DataTransferItemList() {}\n\n/** @type {number} */\nDataTransferItemList.prototype.length;\n\n/**\n * @param {number} i File to return from the list.\n * @return {DataTransferItem} The ith DataTransferItem in the list, or null.\n * @nosideeffects\n */\nDataTransferItemList.prototype.item = function(i) { return null; };\n\n/**\n * Adds an item to the list.\n * @param {string|!File} data Data for the item being added.\n * @param {string=} opt_type Mime type of the item being added. MUST be present\n * if the {@code data} parameter is a string.\n * @return {DataTransferItem}\n */\nDataTransferItemList.prototype.add = function(data, opt_type) {};\n\n/**\n * Removes an item from the list.\n * @param {number} i File to remove from the list.\n * @return {undefined}\n */\nDataTransferItemList.prototype.remove = function(i) {};\n\n/**\n * Removes all items from the list.\n * @return {undefined}\n */\nDataTransferItemList.prototype.clear = function() {};\n\n/** @type {!DataTransferItemList} */\nDataTransfer.prototype.items;\n\n/**\n * @record\n * @extends {MouseEventInit}\n * @see http://w3c.github.io/html/editing.html#dictdef-drageventinit\n */\nfunction DragEventInit() {}\n\n/** @type {undefined|?DataTransfer} */\nDragEventInit.prototype.dataTransfer;\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#the-dragevent-interface\n * @constructor\n * @extends {MouseEvent}\n * @param {string} type\n * @param {DragEventInit=} opt_eventInitDict\n */\nfunction DragEvent(type, opt_eventInitDict) {}\n\n/** @type {DataTransfer} */\nDragEvent.prototype.dataTransfer;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://www.w3.org/TR/progress-events/#progresseventinit\n */\nfunction ProgressEventInit() {}\n\n/** @type {undefined|boolean} */\nProgressEventInit.prototype.lengthComputable;\n\n/** @type {undefined|number} */\nProgressEventInit.prototype.loaded;\n\n/** @type {undefined|number} */\nProgressEventInit.prototype.total;\n\n/**\n * @constructor\n * @template TARGET\n * @param {string} type\n * @param {ProgressEventInit=} opt_progressEventInitDict\n * @extends {Event}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/ProgressEvent\n */\nfunction ProgressEvent(type, opt_progressEventInitDict) {}\n\n/**\n * @override\n * @type {TARGET}\n */\nProgressEvent.prototype.target;\n\n/** @type {number} */\nProgressEvent.prototype.total;\n\n/** @type {number} */\nProgressEvent.prototype.loaded;\n\n/** @type {boolean} */\nProgressEvent.prototype.lengthComputable;\n\n\n/**\n * @constructor\n */\nfunction TimeRanges() {}\n\n/** @type {number} */\nTimeRanges.prototype.length;\n\n/**\n * @param {number} index The index.\n * @return {number} The start time of the range at index.\n * @throws {DOMException}\n */\nTimeRanges.prototype.start = function(index) { return 0; };\n\n/**\n * @param {number} index The index.\n * @return {number} The end time of the range at index.\n * @throws {DOMException}\n */\nTimeRanges.prototype.end = function(index) { return 0; };\n\n\n// HTML5 Web Socket class\n/**\n * @see https://html.spec.whatwg.org/multipage/web-sockets.html\n * @constructor\n * @param {string} url\n * @param {(string|!Array)=} opt_protocol\n * @implements {EventTarget}\n */\nfunction WebSocket(url, opt_protocol) {}\n\n/**\n * The connection has not yet been established.\n * @const {number}\n */\nWebSocket.CONNECTING;\n\n/**\n * The connection has not yet been established.\n * @const {number}\n */\nWebSocket.prototype.CONNECTING;\n\n/**\n * The WebSocket connection is established and communication is possible.\n * @const {number}\n */\nWebSocket.OPEN;\n\n/**\n * The WebSocket connection is established and communication is possible.\n * @const {number}\n */\nWebSocket.prototype.OPEN;\n\n/**\n * The connection is going through the closing handshake, or the close() method has been invoked.\n * @const {number}\n */\nWebSocket.CLOSING;\n\n/**\n * The connection is going through the closing handshake, or the close() method has been invoked.\n * @const {number}\n */\nWebSocket.prototype.CLOSING;\n\n/**\n * The connection has been closed or could not be opened.\n * @const {number}\n */\nWebSocket.CLOSED;\n\n/**\n * The connection has been closed or could not be opened.\n * @const {number}\n */\nWebSocket.prototype.CLOSED;\n\n/** @override */\nWebSocket.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWebSocket.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nWebSocket.prototype.dispatchEvent = function(evt) {};\n\n/**\n * Returns the URL value that was passed to the constructor.\n * @type {string}\n */\nWebSocket.prototype.url;\n\n/**\n * Represents the state of the connection.\n * @type {number}\n */\nWebSocket.prototype.readyState;\n\n/**\n * Returns the number of bytes that have been queued but not yet sent.\n * @type {number}\n */\nWebSocket.prototype.bufferedAmount;\n\n/**\n * An event handler called on error event.\n * @type {?function(!Event): void}\n */\nWebSocket.prototype.onerror;\n\n/**\n * An event handler called on open event.\n * @type {?function(!Event): void}\n */\nWebSocket.prototype.onopen;\n\n/**\n * An event handler called on message event.\n * @type {?function(!MessageEvent): void}\n */\nWebSocket.prototype.onmessage;\n\n/**\n * An event handler called on close event.\n * @type {?function(!CloseEvent): void}\n */\nWebSocket.prototype.onclose;\n\n/**\n * Transmits data using the connection.\n * @param {string|!ArrayBuffer|!ArrayBufferView|!Blob} data\n * @return {void}\n */\nWebSocket.prototype.send = function(data) {};\n\n/**\n * Closes the Web Socket connection or connection attempt, if any.\n * @param {number=} opt_code\n * @param {string=} opt_reason\n * @return {undefined}\n */\nWebSocket.prototype.close = function(opt_code, opt_reason) {};\n\n/**\n * @type {string} Sets the type of data (blob or arraybuffer) for binary data.\n */\nWebSocket.prototype.binaryType;\n\n// HTML5 History\n/**\n * @constructor\n * @see http://w3c.github.io/html/browsers.html#the-history-interface\n */\nfunction History() {}\n\n/**\n * Goes back one step in the joint session history.\n * If there is no previous page, does nothing.\n *\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-history-back\n * @param {number=} opt_distance the number of entries to go back\n * (Mozilla doesn't support distance -- use #go instead)\n *\n * @return {undefined}\n */\nHistory.prototype.back = function(opt_distance) {};\n\n/**\n * Goes forward one step in the joint session history.\n * If there is no next page, does nothing.\n *\n * @return {undefined}\n */\nHistory.prototype.forward = function() {};\n\n/**\n * The number of entries in the joint session history.\n *\n * @type {number}\n */\nHistory.prototype.length;\n\n/**\n * Goes back or forward the specified number of steps in the joint session\n * history. A zero delta will reload the current page. If the delta is out of\n * range, does nothing.\n *\n * @param {number} delta The number of entries to go back.\n * @return {undefined}\n */\nHistory.prototype.go = function(delta) {};\n\n/**\n * Pushes a new state into the session history.\n * @see http://www.w3.org/TR/html5/history.html#the-history-interface\n * @param {*} data New state.\n * @param {string} title The title for a new session history entry.\n * @param {string=} opt_url The URL for a new session history entry.\n * @return {undefined}\n */\nHistory.prototype.pushState = function(data, title, opt_url) {};\n\n/**\n * Replaces the current state in the session history.\n * @see http://www.w3.org/TR/html5/history.html#the-history-interface\n * @param {*} data New state.\n * @param {string} title The title for a session history entry.\n * @param {string=} opt_url The URL for a new session history entry.\n * @return {undefined}\n */\nHistory.prototype.replaceState = function(data, title, opt_url) {};\n\n/**\n * Pending state object.\n * @see https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history#Reading_the_current_state\n * @type {*}\n */\nHistory.prototype.state;\n\n/**\n * Allows web applications to explicitly set default scroll restoration behavior\n * on history navigation. This property can be either auto or manual.\n *\n * Non-standard. Only supported in Chrome 46+.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/History\n * @see https://majido.github.io/scroll-restoration-proposal/history-based-api.html\n * @type {string}\n */\nHistory.prototype.scrollRestoration;\n\n/**\n * Add history property to Window.\n *\n * @type {!History}\n */\nWindow.prototype.history;\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/history.html#the-location-interface\n */\nfunction Location() {}\n\n/**\n * Returns the Location object's URL. Can be set, to navigate to the given URL.\n * @implicitCast\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-href\n */\nLocation.prototype.href;\n\n/**\n * Returns the Location object's URL's origin.\n * @const {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-origin\n */\nLocation.prototype.origin;\n\n/**\n * Returns the Location object's URL's scheme. Can be set, to navigate to the\n * same URL with a changed scheme.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-protocol\n */\nLocation.prototype.protocol;\n\n/**\n * Returns the Location object's URL's host and port (if different from the\n * default port for the scheme). Can be set, to navigate to the same URL with\n * a changed host and port.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-host\n */\nLocation.prototype.host;\n\n/**\n * Returns the Location object's URL's host. Can be set, to navigate to the\n * same URL with a changed host.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-hostname\n */\nLocation.prototype.hostname;\n\n/**\n * Returns the Location object's URL's port. Can be set, to navigate to the\n * same URL with a changed port.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#the-location-interface:dom-location-port\n */\nLocation.prototype.port;\n\n/**\n * Returns the Location object's URL's path. Can be set, to navigate to the\n * same URL with a changed path.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-pathname\n */\nLocation.prototype.pathname;\n\n/**\n * Returns the Location object's URL's query (includes leading \"?\" if\n * non-empty). Can be set, to navigate to the same URL with a changed query\n * (ignores leading \"?\").\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-search\n */\nLocation.prototype.search;\n\n/**\n * Returns the Location object's URL's fragment (includes leading \"#\" if\n * non-empty). Can be set, to navigate to the same URL with a changed fragment\n * (ignores leading \"#\").\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-hash\n */\nLocation.prototype.hash;\n\n/**\n * Navigates to the given page.\n * @param {!TrustedURL|string} url\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-assign\n */\nLocation.prototype.assign = function(url) {};\n\n/**\n * Removes the current page from the session history and navigates to the given\n * page.\n * @param {!TrustedURL|string} url\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-replace\n */\nLocation.prototype.replace = function(url) {};\n\n/**\n * Reloads the current page.\n * @param {boolean=} forceReload If true, reloads the page from\n * the server. Defaults to false.\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-reload\n */\nLocation.prototype.reload = function(forceReload) {};\n\n/**\n * Returns a DOMStringList object listing the origins of the ancestor browsing\n * contexts, from the parent browsing context to the top-level browsing\n * context.\n * @type {DOMStringList}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-ancestororigins\n */\nLocation.prototype.ancestorOrigins;\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/#popstateevent\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {{state: *}=} opt_eventInitDict\n */\nfunction PopStateEvent(type, opt_eventInitDict) {}\n\n/**\n * @type {*}\n */\nPopStateEvent.prototype.state;\n\n/**\n * Initializes the event after it has been created with document.createEvent\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {*} stateArg\n * @return {undefined}\n */\nPopStateEvent.prototype.initPopStateEvent = function(typeArg, canBubbleArg,\n cancelableArg, stateArg) {};\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/#hashchangeevent\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {{oldURL: string, newURL: string}=} opt_eventInitDict\n */\nfunction HashChangeEvent(type, opt_eventInitDict) {}\n\n/** @type {string} */\nHashChangeEvent.prototype.oldURL;\n\n/** @type {string} */\nHashChangeEvent.prototype.newURL;\n\n/**\n * Initializes the event after it has been created with document.createEvent\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {string} oldURLArg\n * @param {string} newURLArg\n * @return {undefined}\n */\nHashChangeEvent.prototype.initHashChangeEvent = function(typeArg, canBubbleArg,\n cancelableArg, oldURLArg, newURLArg) {};\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/#pagetransitionevent\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {{persisted: boolean}=} opt_eventInitDict\n */\nfunction PageTransitionEvent(type, opt_eventInitDict) {}\n\n/** @type {boolean} */\nPageTransitionEvent.prototype.persisted;\n\n/**\n * Initializes the event after it has been created with document.createEvent\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {*} persistedArg\n * @return {undefined}\n */\nPageTransitionEvent.prototype.initPageTransitionEvent = function(typeArg,\n canBubbleArg, cancelableArg, persistedArg) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n */\nfunction FileList() {}\n\n/** @type {number} */\nFileList.prototype.length;\n\n/**\n * @param {number} i File to return from the list.\n * @return {File} The ith file in the list.\n * @nosideeffects\n */\nFileList.prototype.item = function(i) { return null; };\n\n/**\n * @type {boolean}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#withcredentials\n */\nXMLHttpRequest.prototype.withCredentials;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onloadstart\n */\nXMLHttpRequest.prototype.onloadstart;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#handler-xhr-onprogress\n */\nXMLHttpRequest.prototype.onprogress;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onabort\n */\nXMLHttpRequest.prototype.onabort;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onload\n */\nXMLHttpRequest.prototype.onload;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-ontimeout\n */\nXMLHttpRequest.prototype.ontimeout;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onloadend\n */\nXMLHttpRequest.prototype.onloadend;\n\n/**\n * @type {XMLHttpRequestUpload}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-upload-attribute\n */\nXMLHttpRequest.prototype.upload;\n\n/**\n * @param {string} mimeType The mime type to override with.\n * @return {undefined}\n */\nXMLHttpRequest.prototype.overrideMimeType = function(mimeType) {};\n\n/**\n * @type {string}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-responsetype-attribute\n */\nXMLHttpRequest.prototype.responseType;\n\n/**\n * @type {?(ArrayBuffer|Blob|Document|Object|string)}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-response-attribute\n */\nXMLHttpRequest.prototype.response;\n\n\n/**\n * @type {ArrayBuffer}\n * Implemented as a draft spec in Firefox 4 as the way to get a requested array\n * buffer from an XMLHttpRequest.\n * @see https://developer.mozilla.org/En/Using_XMLHttpRequest#Receiving_binary_data_using_JavaScript_typed_arrays\n *\n * This property is not used anymore and should be removed.\n * @see https://github.com/google/closure-compiler/pull/1389\n */\nXMLHttpRequest.prototype.mozResponseArrayBuffer;\n\n/**\n * XMLHttpRequestEventTarget defines events for checking the status of a data\n * transfer between a client and a server. This should be a common base class\n * for XMLHttpRequest and XMLHttpRequestUpload.\n *\n * @constructor\n * @implements {EventTarget}\n */\nfunction XMLHttpRequestEventTarget() {}\n\n/** @override */\nXMLHttpRequestEventTarget.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nXMLHttpRequestEventTarget.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nXMLHttpRequestEventTarget.prototype.dispatchEvent = function(evt) {};\n\n/**\n * An event target to track the status of an upload.\n *\n * @constructor\n * @extends {XMLHttpRequestEventTarget}\n */\nfunction XMLHttpRequestUpload() {}\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#handler-xhr-onprogress\n */\nXMLHttpRequestUpload.prototype.onprogress;\n\n/**\n * @param {number=} opt_width\n * @param {number=} opt_height\n * @constructor\n * @extends {HTMLImageElement}\n */\nfunction Image(opt_width, opt_height) {}\n\n\n/**\n * Dataset collection.\n * This is really a DOMStringMap but it behaves close enough to an object to\n * pass as an object.\n * @const {!Object}\n */\nHTMLElement.prototype.dataset;\n\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see https://dom.spec.whatwg.org/#interface-domtokenlist\n */\nfunction DOMTokenList() {}\n\n/**\n * Returns the number of CSS classes applied to this Element.\n * @type {number}\n */\nDOMTokenList.prototype.length;\n\n/**\n * Returns the string value applied to this Element.\n * @type {string|undefined}\n */\nDOMTokenList.prototype.value;\n\n/**\n * @param {number} index The index of the item to return.\n * @return {string} The CSS class at the specified index.\n * @nosideeffects\n */\nDOMTokenList.prototype.item = function(index) {};\n\n/**\n * @param {string} token The CSS class to check for.\n * @return {boolean} Whether the CSS class has been applied to the Element.\n * @nosideeffects\n */\nDOMTokenList.prototype.contains = function(token) {};\n\n/**\n * @param {...string} var_args The CSS class(es) to add to this element.\n * @return {undefined}\n */\nDOMTokenList.prototype.add = function(var_args) {};\n\n/**\n * @param {...string} var_args The CSS class(es) to remove from this element.\n * @return {undefined}\n */\nDOMTokenList.prototype.remove = function(var_args) {};\n\n/**\n * Replaces token with newToken.\n * @param {string} token The CSS class to replace.\n * @param {string} newToken The new CSS class to use.\n * @return {undefined}\n */\nDOMTokenList.prototype.replace = function(token, newToken) {};\n\n/**\n * @param {string} token The token to query for.\n * @return {boolean} Whether the token was found.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/supports\n * @nosideeffects\n */\nDOMTokenList.prototype.supports = function(token) {};\n\n/**\n * @param {string} token The CSS class to toggle from this element.\n * @param {boolean=} opt_force True to add the class whether it exists\n * or not. False to remove the class whether it exists or not.\n * This argument is not supported on IE 10 and below, according to\n * the MDN page linked below.\n * @return {boolean} False if the token was removed; True otherwise.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element.classList\n */\nDOMTokenList.prototype.toggle = function(token, opt_force) {};\n\n/**\n * @return {string} A stringified representation of CSS classes.\n * @nosideeffects\n * @override\n */\nDOMTokenList.prototype.toString = function() {};\n\n/**\n * @return {!IteratorIterable} An iterator to go through all values of\n * the key/value pairs contained in this object.\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/values\n */\nDOMTokenList.prototype.values = function() {};\n\n/**\n * A better interface to CSS classes than className.\n * @const {!DOMTokenList}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/classList\n */\nElement.prototype.classList;\n\n/**\n * Constraint Validation API properties and methods\n * @see http://www.w3.org/TR/2009/WD-html5-20090423/forms.html#the-constraint-validation-api\n */\n\n/** @return {boolean} */\nHTMLFormElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLFormElement.prototype.reportValidity = function() {};\n\n/** @type {boolean} */\nHTMLFormElement.prototype.noValidate;\n\n/** @constructor */\nfunction ValidityState() {}\n\n/** @type {boolean} */\nValidityState.prototype.badInput;\n\n/** @type {boolean} */\nValidityState.prototype.customError;\n\n/** @type {boolean} */\nValidityState.prototype.patternMismatch;\n\n/** @type {boolean} */\nValidityState.prototype.rangeOverflow;\n\n/** @type {boolean} */\nValidityState.prototype.rangeUnderflow;\n\n/** @type {boolean} */\nValidityState.prototype.stepMismatch;\n\n/** @type {boolean} */\nValidityState.prototype.typeMismatch;\n\n/** @type {boolean} */\nValidityState.prototype.tooLong;\n\n/** @type {boolean} */\nValidityState.prototype.tooShort;\n\n/** @type {boolean} */\nValidityState.prototype.valid;\n\n/** @type {boolean} */\nValidityState.prototype.valueMissing;\n\n\n/** @type {boolean} */\nHTMLButtonElement.prototype.autofocus;\n\n/**\n * Can return null when hidden.\n * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels\n * @const {?NodeList}\n */\nHTMLButtonElement.prototype.labels;\n\n/** @type {string} */\nHTMLButtonElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLButtonElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLButtonElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLButtonElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLButtonElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLButtonElement.prototype.setCustomValidity = function(message) {};\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formaction\n */\nHTMLButtonElement.prototype.formAction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formenctype\n */\nHTMLButtonElement.prototype.formEnctype;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formmethod\n */\nHTMLButtonElement.prototype.formMethod;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formtarget\n */\nHTMLButtonElement.prototype.formTarget;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.autofocus;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.formNoValidate;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formaction\n */\nHTMLInputElement.prototype.formAction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formenctype\n */\nHTMLInputElement.prototype.formEnctype;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formmethod\n */\nHTMLInputElement.prototype.formMethod;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formtarget\n */\nHTMLInputElement.prototype.formTarget;\n\n/**\n * Can return null when hidden.\n * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels\n * @const {?NodeList}\n */\nHTMLInputElement.prototype.labels;\n\n/** @type {string} */\nHTMLInputElement.prototype.validationMessage;\n\n/**\n * @type {number}\n * @implicitCast\n */\nHTMLInputElement.prototype.selectionStart;\n\n/**\n * @type {number}\n * @implicitCast\n */\nHTMLInputElement.prototype.selectionEnd;\n\n/** @type {string} */\nHTMLInputElement.prototype.selectionDirection;\n\n/**\n * @param {number} start\n * @param {number} end\n * @param {string=} direction\n * @see https://html.spec.whatwg.org/#dom-textarea/input-setselectionrange\n * @return {undefined}\n */\nHTMLInputElement.prototype.setSelectionRange = function(start, end, direction) {};\n\n/**\n * @const {ValidityState}\n */\nHTMLInputElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLInputElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLInputElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLInputElement.prototype.setCustomValidity = function(message) {};\n\n/** @type {Element} */\nHTMLLabelElement.prototype.control;\n\n/** @type {boolean} */\nHTMLSelectElement.prototype.autofocus;\n\n/**\n * Can return null when hidden.\n * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels\n * @const {?NodeList}\n */\nHTMLSelectElement.prototype.labels;\n\n/** @type {HTMLCollection} */\nHTMLSelectElement.prototype.selectedOptions;\n\n/** @type {string} */\nHTMLSelectElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLSelectElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLSelectElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLSelectElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLSelectElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLSelectElement.prototype.setCustomValidity = function(message) {};\n\n/** @type {boolean} */\nHTMLTextAreaElement.prototype.autofocus;\n\n/**\n * Can return null when hidden.\n * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels\n * @const {?NodeList}\n */\nHTMLTextAreaElement.prototype.labels;\n\n/** @type {string} */\nHTMLTextAreaElement.prototype.placeholder;\n\n/** @type {string} */\nHTMLTextAreaElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLTextAreaElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLTextAreaElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLTextAreaElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLTextAreaElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLTextAreaElement.prototype.setCustomValidity = function(message) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/html5/the-embed-element.html#htmlembedelement\n */\nfunction HTMLEmbedElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/dimension-attributes.html#dom-dim-width\n */\nHTMLEmbedElement.prototype.width;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/dimension-attributes.html#dom-dim-height\n */\nHTMLEmbedElement.prototype.height;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/html5/the-embed-element.html#dom-embed-src\n */\nHTMLEmbedElement.prototype.src;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/the-embed-element.html#dom-embed-type\n */\nHTMLEmbedElement.prototype.type;\n\n// Fullscreen APIs.\n\n/**\n * @record\n * @see https://fullscreen.spec.whatwg.org/#dictdef-fullscreenoptions\n */\nfunction FullscreenOptions() {}\n\n/** @type {string} */\nFullscreenOptions.prototype.navigationUI;\n\n/**\n * @see https://fullscreen.spec.whatwg.org/#dom-element-requestfullscreen\n * @param {!FullscreenOptions=} options\n * @return {undefined}\n */\nElement.prototype.requestFullscreen = function(options) {};\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2012/WD-fullscreen-20120703/#dom-document-fullscreenenabled\n */\nDocument.prototype.fullscreenEnabled;\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/2012/WD-fullscreen-20120703/#dom-document-fullscreenelement\n */\nDocument.prototype.fullscreenElement;\n\n/**\n * @see http://www.w3.org/TR/2012/WD-fullscreen-20120703/#dom-document-exitfullscreen\n * @return {undefined}\n */\nDocument.prototype.exitFullscreen = function() {};\n\n// Externs definitions of browser current implementations.\n// Firefox 10 implementation.\nElement.prototype.mozRequestFullScreen = function() {};\n\nElement.prototype.mozRequestFullScreenWithKeys = function() {};\n\n/** @type {boolean} */\nDocument.prototype.mozFullScreen;\n\nDocument.prototype.mozCancelFullScreen = function() {};\n\n/** @type {Element} */\nDocument.prototype.mozFullScreenElement;\n\n/** @type {boolean} */\nDocument.prototype.mozFullScreenEnabled;\n\n// Chrome 21 implementation.\n/**\n * The current fullscreen element for the document is set to this element.\n * Valid only for Webkit browsers.\n * @param {number=} opt_allowKeyboardInput Whether keyboard input is desired.\n * Should use ALLOW_KEYBOARD_INPUT constant.\n * @return {undefined}\n */\nElement.prototype.webkitRequestFullScreen = function(opt_allowKeyboardInput) {};\n\n/**\n * The current fullscreen element for the document is set to this element.\n * Valid only for Webkit browsers.\n * @param {number=} opt_allowKeyboardInput Whether keyboard input is desired.\n * Should use ALLOW_KEYBOARD_INPUT constant.\n * @return {undefined}\n */\nElement.prototype.webkitRequestFullscreen = function(opt_allowKeyboardInput) {};\n\n/** @type {boolean} */\nDocument.prototype.webkitIsFullScreen;\n\nDocument.prototype.webkitCancelFullScreen = function() {};\n\n/** @type {boolean} */\nDocument.prototype.webkitFullscreenEnabled;\n\n/** @type {Element} */\nDocument.prototype.webkitCurrentFullScreenElement;\n\n/** @type {Element} */\nDocument.prototype.webkitFullscreenElement;\n\n/** @type {boolean} */\nDocument.prototype.webkitFullScreenKeyboardInputAllowed;\n\n// IE 11 implementation.\n// http://msdn.microsoft.com/en-us/library/ie/dn265028(v=vs.85).aspx\n/** @return {void} */\nElement.prototype.msRequestFullscreen = function() {};\n\n/** @return {void} */\nDocument.prototype.msExitFullscreen = function() {};\n\n/** @type {boolean} */\nDocument.prototype.msFullscreenEnabled;\n\n/** @type {Element} */\nDocument.prototype.msFullscreenElement;\n\n/** @const {number} */\nElement.ALLOW_KEYBOARD_INPUT;\n\n/** @const {number} */\nElement.prototype.ALLOW_KEYBOARD_INPUT;\n\n\n/**\n * @typedef {{\n * childList: (boolean|undefined),\n * attributes: (boolean|undefined),\n * characterData: (boolean|undefined),\n * subtree: (boolean|undefined),\n * attributeOldValue: (boolean|undefined),\n * characterDataOldValue: (boolean|undefined),\n * attributeFilter: (!Array|undefined)\n * }}\n */\nvar MutationObserverInit;\n\n\n/** @constructor */\nfunction MutationRecord() {}\n\n/** @type {string} */\nMutationRecord.prototype.type;\n\n/** @type {Node} */\nMutationRecord.prototype.target;\n\n/** @type {!NodeList} */\nMutationRecord.prototype.addedNodes;\n\n/** @type {!NodeList} */\nMutationRecord.prototype.removedNodes;\n\n/** @type {?Node} */\nMutationRecord.prototype.previousSibling;\n\n/** @type {?Node} */\nMutationRecord.prototype.nextSibling;\n\n/** @type {?string} */\nMutationRecord.prototype.attributeName;\n\n/** @type {?string} */\nMutationRecord.prototype.attributeNamespace;\n\n/** @type {?string} */\nMutationRecord.prototype.oldValue;\n\n\n/**\n * @see http://www.w3.org/TR/domcore/#mutation-observers\n * @param {function(!Array, !MutationObserver)} callback\n * @constructor\n */\nfunction MutationObserver(callback) {}\n\n/**\n * @param {Node} target\n * @param {MutationObserverInit=} options\n * @return {undefined}\n */\nMutationObserver.prototype.observe = function(target, options) {};\n\nMutationObserver.prototype.disconnect = function() {};\n\n/**\n * @return {!Array}\n */\nMutationObserver.prototype.takeRecords = function() {};\n\n/**\n * @type {function(new:MutationObserver, function(Array))}\n */\nWindow.prototype.WebKitMutationObserver;\n\n/**\n * @type {function(new:MutationObserver, function(Array))}\n */\nWindow.prototype.MozMutationObserver;\n\n\n/**\n * @see http://www.w3.org/TR/page-visibility/\n * @type {VisibilityState}\n */\nDocument.prototype.visibilityState;\n\n/**\n * @type {string}\n */\nDocument.prototype.mozVisibilityState;\n\n/**\n * @type {string}\n */\nDocument.prototype.webkitVisibilityState;\n\n/**\n * @type {string}\n */\nDocument.prototype.msVisibilityState;\n\n/**\n * @see http://www.w3.org/TR/page-visibility/\n * @type {boolean}\n */\nDocument.prototype.hidden;\n\n/**\n * @type {boolean}\n */\nDocument.prototype.mozHidden;\n\n/**\n * @type {boolean}\n */\nDocument.prototype.webkitHidden;\n\n/**\n * @type {boolean}\n */\nDocument.prototype.msHidden;\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @see http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-register\n * @param {string} type\n * @param {{extends: (string|undefined), prototype: (Object|undefined)}=}\n * options\n * @return {function(new:Element, ...*)} a constructor for the new tag.\n * @deprecated document.registerElement() is deprecated in favor of\n * customElements.define()\n */\nDocument.prototype.registerElement = function(type, options) {};\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @see http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-register\n * @param {string} type\n * @param {{extends: (string|undefined), prototype: (Object|undefined)}} options\n * @deprecated This method has been removed and will be removed soon from this file.\n */\nDocument.prototype.register = function(type, options) {};\n\n/**\n * @type {!FontFaceSet}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfacesource-fonts\n */\nDocument.prototype.fonts;\n\n\n/**\n * @type {?HTMLScriptElement}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/currentScript\n */\nDocument.prototype.currentScript;\n\n/**\n * Definition of ShadowRoot interface,\n * @see http://www.w3.org/TR/shadow-dom/#api-shadow-root\n * @constructor\n * @extends {DocumentFragment}\n */\nfunction ShadowRoot() {}\n\n/**\n * The host element that a ShadowRoot is attached to.\n * Note: this is not yet W3C standard but is undergoing development.\n * W3C feature tracking bug:\n * https://www.w3.org/Bugs/Public/show_bug.cgi?id=22399\n * Draft specification:\n * https://dvcs.w3.org/hg/webcomponents/raw-file/6743f1ace623/spec/shadow/index.html#shadow-root-object\n * @type {!Element}\n */\nShadowRoot.prototype.host;\n\n/**\n * @param {string} id id.\n * @return {HTMLElement}\n * @nosideeffects\n */\nShadowRoot.prototype.getElementById = function(id) {};\n\n\n/**\n * @return {Selection}\n * @nosideeffects\n */\nShadowRoot.prototype.getSelection = function() {};\n\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {Element}\n * @nosideeffects\n */\nShadowRoot.prototype.elementFromPoint = function(x, y) {};\n\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {!IArrayLike}\n * @nosideeffects\n */\nShadowRoot.prototype.elementsFromPoint = function(x, y) {};\n\n\n/**\n * @type {?Element}\n */\nShadowRoot.prototype.activeElement;\n\n\n/**\n * @type {string}\n */\nShadowRoot.prototype.mode;\n\n\n/**\n * @type {?ShadowRoot}\n * @deprecated\n */\nShadowRoot.prototype.olderShadowRoot;\n\n\n/**\n * @type {string}\n * @implicitCast\n */\nShadowRoot.prototype.innerHTML;\n\n\n/**\n * @type {!StyleSheetList}\n */\nShadowRoot.prototype.styleSheets;\n\n\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/#the-content-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLContentElement() {}\n\n/**\n * @type {string}\n */\nHTMLContentElement.prototype.select;\n\n/**\n * @return {!NodeList}\n */\nHTMLContentElement.prototype.getDistributedNodes = function() {};\n\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/#the-shadow-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLShadowElement() {}\n\n/**\n * @return {!NodeList}\n */\nHTMLShadowElement.prototype.getDistributedNodes = function() {};\n\n\n/**\n * @see http://www.w3.org/TR/html5/webappapis.html#the-errorevent-interface\n *\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {ErrorEventInit=} opt_eventInitDict\n */\nfunction ErrorEvent(type, opt_eventInitDict) {}\n\n/** @const {string} */\nErrorEvent.prototype.message;\n\n/** @const {string} */\nErrorEvent.prototype.filename;\n\n/** @const {number} */\nErrorEvent.prototype.lineno;\n\n/** @const {number} */\nErrorEvent.prototype.colno;\n\n/** @const {*} */\nErrorEvent.prototype.error;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://www.w3.org/TR/html5/webappapis.html#erroreventinit\n */\nfunction ErrorEventInit() {}\n\n/** @type {undefined|string} */\nErrorEventInit.prototype.message;\n\n/** @type {undefined|string} */\nErrorEventInit.prototype.filename;\n\n/** @type {undefined|number} */\nErrorEventInit.prototype.lineno;\n\n/** @type {undefined|number} */\nErrorEventInit.prototype.colno;\n\n/** @type {*} */\nErrorEventInit.prototype.error;\n\n\n/**\n * @see http://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument\n * @param {string=} opt_title A title to give the new HTML document\n * @return {!HTMLDocument}\n */\nDOMImplementation.prototype.createHTMLDocument = function(opt_title) {};\n\n\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#the-picture-element\n * @extends {HTMLElement}\n */\nfunction HTMLPictureElement() {}\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#the-picture-element\n * @extends {HTMLElement}\n */\nfunction HTMLSourceElement() {}\n\n/** @type {string} */\nHTMLSourceElement.prototype.media;\n\n/** @type {string} */\nHTMLSourceElement.prototype.sizes;\n\n/** @type {string} @implicitCast */\nHTMLSourceElement.prototype.src;\n\n/** @type {string} */\nHTMLSourceElement.prototype.srcset;\n\n/** @type {string} */\nHTMLSourceElement.prototype.type;\n\n/** @type {string} */\nHTMLImageElement.prototype.sizes;\n\n/** @type {string} */\nHTMLImageElement.prototype.srcset;\n\n\n/**\n * 4.11 Interactive elements\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html\n */\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-details-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLDetailsElement() {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-details-open\n * @type {boolean}\n */\nHTMLDetailsElement.prototype.open;\n\n\n// As of 2/20/2015,

has no special web IDL interface nor global\n// constructor (i.e. HTMLSummaryElement).\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menu-type\n * @type {string}\n */\nHTMLMenuElement.prototype.type;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menu-label\n * @type {string}\n */\nHTMLMenuElement.prototype.label;\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-menuitem-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLMenuItemElement() {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-type\n * @type {string}\n */\nHTMLMenuItemElement.prototype.type;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-label\n * @type {string}\n */\nHTMLMenuItemElement.prototype.label;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-icon\n * @type {string}\n */\nHTMLMenuItemElement.prototype.icon;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-disabled\n * @type {boolean}\n */\nHTMLMenuItemElement.prototype.disabled;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-checked\n * @type {boolean}\n */\nHTMLMenuItemElement.prototype.checked;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-radiogroup\n * @type {string}\n */\nHTMLMenuItemElement.prototype.radiogroup;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-default\n * @type {boolean}\n */\nHTMLMenuItemElement.prototype.default;\n\n// TODO(dbeam): add HTMLMenuItemElement.prototype.command if it's implemented.\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#relatedevent\n * @param {string} type\n * @param {{relatedTarget: (EventTarget|undefined)}=} opt_eventInitDict\n * @constructor\n * @extends {Event}\n */\nfunction RelatedEvent(type, opt_eventInitDict) {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-relatedevent-relatedtarget\n * @type {EventTarget|undefined}\n */\nRelatedEvent.prototype.relatedTarget;\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-dialog-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLDialogElement() {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-open\n * @type {boolean}\n */\nHTMLDialogElement.prototype.open;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-returnvalue\n * @type {string}\n */\nHTMLDialogElement.prototype.returnValue;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-show\n * @param {(MouseEvent|Element)=} opt_anchor\n * @return {undefined}\n */\nHTMLDialogElement.prototype.show = function(opt_anchor) {};\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-showmodal\n * @param {(MouseEvent|Element)=} opt_anchor\n * @return {undefined}\n */\nHTMLDialogElement.prototype.showModal = function(opt_anchor) {};\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-close\n * @param {string=} opt_returnValue\n * @return {undefined}\n */\nHTMLDialogElement.prototype.close = function(opt_returnValue) {};\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/scripting.html#the-template-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLTemplateElement() {}\n\n/**\n * @see https://html.spec.whatwg.org/multipage/scripting.html#the-template-element\n * @type {!DocumentFragment}\n */\nHTMLTemplateElement.prototype.content;\n\n\n/**\n * @type {?Document}\n * @see w3c_dom2.js\n * @see http://www.w3.org/TR/html-imports/#interface-import\n */\nHTMLLinkElement.prototype.import;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/#attr-link-as\n * @see https://w3c.github.io/preload/#as-attribute\n */\nHTMLLinkElement.prototype.as;\n\n/**\n * @see https://html.spec.whatwg.org/#attr-link-crossorigin\n * @type {string}\n */\nHTMLLinkElement.prototype.crossOrigin;\n\n\n/**\n * @return {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-elements\n */\nHTMLFieldSetElement.prototype.checkValidity = function() {};\n\n/**\n * @type {HTMLCollection}\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-elements\n */\nHTMLFieldSetElement.prototype.elements;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.name;\n\n/**\n * @param {string} message\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-elements\n * @return {undefined}\n */\nHTMLFieldSetElement.prototype.setCustomValidity = function(message) {};\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-type\n */\nHTMLFieldSetElement.prototype.type;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.validationMessage;\n\n/**\n * @type {ValidityState}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.validity;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.willValidate;\n\n/**\n * @constructor\n * @extends {NodeList}\n * @template T\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#radionodelist\n */\nfunction RadioNodeList() {}\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#radionodelist\n */\nRadioNodeList.prototype.value;\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-datalist-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLDataListElement() {}\n\n\n/** @type {HTMLCollection} */\nHTMLDataListElement.prototype.options;\n\n\n/**\n * @return {boolean}\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n */\nHTMLObjectElement.prototype.checkValidity;\n\n/**\n * @param {string} message\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n * @return {undefined}\n */\nHTMLObjectElement.prototype.setCustomValidity;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n */\nHTMLObjectElement.prototype.validationMessage;\n\n/**\n * @type {!ValidityState}\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n */\nHTMLObjectElement.prototype.validity;\n\n/**\n * @type {boolean}\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n */\nHTMLObjectElement.prototype.willValidate;\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-output-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLOutputElement() {}\n\n/**\n * @const {!DOMTokenList}\n */\nHTMLOutputElement.prototype.htmlFor;\n\n/**\n * @type {HTMLFormElement}\n */\nHTMLOutputElement.prototype.form;\n\n/**\n * @type {string}\n */\nHTMLOutputElement.prototype.name;\n\n/**\n * @const {string}\n */\nHTMLOutputElement.prototype.type;\n\n/**\n * @type {string}\n */\nHTMLOutputElement.prototype.defaultValue;\n\n/**\n * @type {string}\n */\nHTMLOutputElement.prototype.value;\n\n/**\n * @const {?NodeList}\n */\nHTMLOutputElement.prototype.labels;\n\n/** @type {string} */\nHTMLOutputElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLOutputElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLOutputElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLOutputElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLOutputElement.prototype.reportValidity = function() {};\n\n/** @param {string} message */\nHTMLOutputElement.prototype.setCustomValidity = function(message) {};\n\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-progress-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLProgressElement() {}\n\n\n/** @type {number} */\nHTMLProgressElement.prototype.value;\n\n\n/** @type {number} */\nHTMLProgressElement.prototype.max;\n\n\n/** @type {number} */\nHTMLProgressElement.prototype.position;\n\n\n/** @type {?NodeList} */\nHTMLProgressElement.prototype.labels;\n\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#the-track-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLTrackElement() {}\n\n\n/** @type {string} */\nHTMLTrackElement.prototype.kind;\n\n\n/** @type {string} @implicitCast */\nHTMLTrackElement.prototype.src;\n\n\n/** @type {string} */\nHTMLTrackElement.prototype.srclang;\n\n\n/** @type {string} */\nHTMLTrackElement.prototype.label;\n\n\n/** @type {boolean} */\nHTMLTrackElement.prototype.default;\n\n\n/** @const {number} */\nHTMLTrackElement.prototype.readyState;\n\n\n/** @const {!TextTrack} */\nHTMLTrackElement.prototype.track;\n\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-meter-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLMeterElement() {}\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.value;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.min;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.max;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.low;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.high;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.optimum;\n\n\n/** @type {?NodeList} */\nHTMLMeterElement.prototype.labels;\n\n\n/**\n * @interface\n * @see https://storage.spec.whatwg.org/#api\n */\nfunction NavigatorStorage() {};\n\n/**\n * @type {!StorageManager}\n */\nNavigatorStorage.prototype.storage;\n\n/**\n * @constructor\n * @implements NavigatorStorage\n * @see https://www.w3.org/TR/html5/webappapis.html#navigator\n */\nfunction Navigator() {}\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-appcodename\n */\nNavigator.prototype.appCodeName;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-appname\n */\nNavigator.prototype.appName;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-appversion\n */\nNavigator.prototype.appVersion;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-platform\n */\nNavigator.prototype.platform;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-product\n */\nNavigator.prototype.product;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-useragent\n */\nNavigator.prototype.userAgent;\n\n/**\n * @return {boolean}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-taintenabled\n */\nNavigator.prototype.taintEnabled = function() {};\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-language\n */\nNavigator.prototype.language;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/browsers.html#navigatoronline\n */\nNavigator.prototype.onLine;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-cookieenabled\n */\nNavigator.prototype.cookieEnabled;\n\n/**\n * @param {string} scheme\n * @param {string} url\n * @param {string} title\n * @return {undefined}\n */\nNavigator.prototype.registerProtocolHandler = function(scheme, url, title) {}\n\n/**\n * @param {string} mimeType\n * @param {string} url\n * @param {string} title\n * @return {undefined}\n */\nNavigator.prototype.registerContentHandler = function(mimeType, url, title) {}\n\n/**\n * @param {string} scheme\n * @param {string} url\n * @return {undefined}\n */\nNavigator.prototype.unregisterProtocolHandler = function(scheme, url) {}\n\n/**\n * @param {string} mimeType\n * @param {string} url\n * @return {undefined}\n */\nNavigator.prototype.unregisterContentHandler = function(mimeType, url) {}\n\n/**\n * @type {!MimeTypeArray}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-mimetypes\n */\nNavigator.prototype.mimeTypes;\n\n/**\n * @type {!PluginArray}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-plugins\n */\nNavigator.prototype.plugins;\n\n/**\n * @return {boolean}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-javaenabled\n * @nosideeffects\n */\nNavigator.prototype.javaEnabled = function() {};\n\n/**\n * @type {number}\n * @see https://developers.google.com/web/updates/2017/12/device-memory\n * https://github.com/w3c/device-memory\n */\nNavigator.prototype.deviceMemory;\n\n/**\n * @type {!StorageManager}\n * @see https://storage.spec.whatwg.org\n */\nNavigator.prototype.storage;\n\n/**\n * @param {!ShareData=} data\n * @return {!Promise}\n * @see https://wicg.github.io/web-share/#share-method\n */\nNavigator.prototype.share = function(data) {};\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/NavigatorConcurrentHardware/hardwareConcurrency\n */\nNavigator.prototype.hardwareConcurrency;\n\n/**\n * @constructor\n * @implements NavigatorStorage\n * @see https://html.spec.whatwg.org/multipage/workers.html#the-workernavigator-object\n */\nfunction WorkerNavigator() {}\n\n/**\n * @type {number}\n * @see https://developers.google.com/web/updates/2017/12/device-memory\n * https://github.com/w3c/device-memory\n */\nWorkerNavigator.prototype.deviceMemory;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/NavigatorConcurrentHardware/hardwareConcurrency\n */\nWorkerNavigator.prototype.hardwareConcurrency;\n\n/**\n * @type {!StorageManager}\n * @see https://storage.spec.whatwg.org\n */\nWorkerNavigator.prototype.storage;\n\n/**\n * @record\n * @see https://wicg.github.io/web-share/#sharedata-dictionary\n */\nfunction ShareData() {}\n\n/** @type {string|undefined} */\nShareData.prototype.title;\n\n/** @type {string|undefined} */\nShareData.prototype.text;\n\n/** @type {string|undefined} */\nShareData.prototype.url;\n\n/**\n * @constructor\n * @implements {IObject<(string|number),!Plugin>}\n * @implements {IArrayLike}\n * @see https://www.w3.org/TR/html5/webappapis.html#pluginarray\n */\nfunction PluginArray() {}\n\n/** @type {number} */\nPluginArray.prototype.length;\n\n/**\n * @param {number} index\n * @return {Plugin}\n */\nPluginArray.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @return {Plugin}\n */\nPluginArray.prototype.namedItem = function(name) {};\n\n/**\n * @param {boolean=} reloadDocuments\n * @return {undefined}\n */\nPluginArray.prototype.refresh = function(reloadDocuments) {};\n\n/**\n * @constructor\n * @implements {IObject<(string|number),!MimeType>}\n * @implements {IArrayLike}\n * @see https://www.w3.org/TR/html5/webappapis.html#mimetypearray\n */\nfunction MimeTypeArray() {}\n\n/**\n * @param {number} index\n * @return {MimeType}\n */\nMimeTypeArray.prototype.item = function(index) {};\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/en/DOM/window.navigator.mimeTypes\n */\nMimeTypeArray.prototype.length;\n\n/**\n * @param {string} name\n * @return {MimeType}\n */\nMimeTypeArray.prototype.namedItem = function(name) {};\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/html5/webappapis.html#mimetype\n */\nfunction MimeType() {}\n\n/** @type {string} */\nMimeType.prototype.description;\n\n/** @type {Plugin} */\nMimeType.prototype.enabledPlugin;\n\n/** @type {string} */\nMimeType.prototype.suffixes;\n\n/** @type {string} */\nMimeType.prototype.type;\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-plugin\n */\nfunction Plugin() {}\n\n/** @type {string} */\nPlugin.prototype.description;\n\n/** @type {string} */\nPlugin.prototype.filename;\n\n/** @type {number} */\nPlugin.prototype.length;\n\n/** @type {string} */\nPlugin.prototype.name;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/custom-elements.html#customelementregistry\n * @constructor\n */\nfunction CustomElementRegistry() {}\n\n/**\n * @param {string} tagName\n * @param {function(new:HTMLElement)} klass\n * @param {{extends: string}=} options\n * @return {undefined}\n */\nCustomElementRegistry.prototype.define = function (tagName, klass, options) {};\n\n/**\n * @param {string} tagName\n * @return {function(new:HTMLElement)|undefined}\n */\nCustomElementRegistry.prototype.get = function(tagName) {};\n\n/**\n * @param {string} tagName\n * @return {!Promise}\n */\nCustomElementRegistry.prototype.whenDefined = function(tagName) {};\n\n/**\n * @param {!Node} root\n * @return {undefined}\n */\nCustomElementRegistry.prototype.upgrade = function(root) {};\n\n/** @type {!CustomElementRegistry} */\nvar customElements;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLSlotElement() {}\n\n/** @typedef {{flatten: boolean}} */\nvar AssignedNodesOptions;\n\n/**\n * @param {!AssignedNodesOptions=} options\n * @return {!Array}\n */\nHTMLSlotElement.prototype.assignedNodes = function(options) {};\n\n/**\n * @param {!AssignedNodesOptions=} options\n * @return {!Array}\n */\nHTMLSlotElement.prototype.assignedElements = function(options) {};\n\n/** @type {boolean} */\nEvent.prototype.composed;\n\n/**\n * @return {!Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Event/composedPath\n */\nEvent.prototype.composedPath = function() {};\n\n/**\n * @constructor\n * @param {{\n * firesTouchEvents: (string|undefined),\n * pointerMovementScrolls: (string|undefined)\n * }=} opt_options\n */\nfunction InputDeviceCapabilities(opt_options){}\n\n/** @type {boolean} */\nInputDeviceCapabilities.prototype.firesTouchEvents;\n\n/** @type {boolean} */\nInputDeviceCapabilities.prototype.pointerMovementScrolls;\n\n/** @type {?InputDeviceCapabilities} */\nMouseEvent.prototype.sourceCapabilities;\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/VisualViewport\n * @constructor\n * @implements {EventTarget}\n */\nfunction VisualViewport() {}\n\n/** @type {number} */\nVisualViewport.prototype.offsetLeft;\n\n/** @type {number} */\nVisualViewport.prototype.offsetTop;\n\n/** @type {number} */\nVisualViewport.prototype.pageLeft;\n\n/** @type {number} */\nVisualViewport.prototype.pageTop;\n\n/** @type {number} */\nVisualViewport.prototype.width;\n\n/** @type {number} */\nVisualViewport.prototype.height;\n\n/** @type {number} */\nVisualViewport.prototype.scale;\n\n/** @override */\nVisualViewport.prototype.addEventListener = function(type, listener,\n opt_options) {};\n\n/** @override */\nVisualViewport.prototype.removeEventListener = function(type, listener,\n opt_options) {};\n\n/** @override */\nVisualViewport.prototype.dispatchEvent = function(evt) {};\n\n/** @type {?function(!Event)} */\nVisualViewport.prototype.onresize;\n\n/** @type {?function(!Event)} */\nVisualViewport.prototype.onscroll;\n\n/**\n * @see https://storage.spec.whatwg.org/\n * @constructor\n */\nfunction StorageManager() {}\n\n/** @return {!Promise} */\nStorageManager.prototype.persisted = function() {};\n\n/** @return {!Promise} */\nStorageManager.prototype.persist = function() {};\n\n/** @return {!Promise} */\nStorageManager.prototype.estimate = function() {};\n\n/**\n * @see https://storage.spec.whatwg.org/\n * @typedef {{\n * usage: number,\n * quota: number\n * }}\n */\nvar StorageEstimate;\n\n/*\n * Focus Management APIs\n *\n * See https://html.spec.whatwg.org/multipage/interaction.html#focus-management-apis\n */\n\n\n/**\n * @type {?Element}\n * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-document-activeelement\n */\nDocument.prototype.activeElement;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-document-hasfocus\n * @return {boolean}\n */\nDocument.prototype.hasFocus = function() {};\n\n/**\n * @param {{preventScroll: boolean}=} options\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-focus\n */\nElement.prototype.focus = function(options) {};\n\n/**\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-blur\n */\nElement.prototype.blur = function() {};\n", --"externs/ie_vml.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for IE\'s vector markup language, or VML.\n *\n * @externs\n * @author robbyw@google.com (Robby Walker)\n */\n\n\n/**\n * @type {Object|string}\n * @see http://msdn.microsoft.com/en-us/library/bb263836(VS.85).aspx\n */\nElement.prototype.coordorigin;\n\n/**\n * @type {Object|string}\n * @see http://msdn.microsoft.com/en-us/library/bb263837(VS.85).aspx\n */\nElement.prototype.coordsize;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/bb263839(VS.85).aspx\n */\nElement.prototype.fillcolor;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/bb263840(VS.85).aspx\n */\nElement.prototype.filled;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/bb263871(VS.85).aspx\n */\nElement.prototype.path;\n\n/**\n * @type {number|string}\n * @see http://msdn.microsoft.com/en-us/library/bb263877(VS.85).aspx\n */\nElement.prototype.rotation;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/bb263881(VS.85).aspx\n */\nElement.prototype.strokecolor;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/bb263882(VS.85).aspx\n */\nElement.prototype.stroked;\n\n/**\n * @type {number|string}\n * @see http://msdn.microsoft.com/en-us/library/bb263883(VS.85).aspx\n */\nElement.prototype.strokeweight;\n', --"externs/intersection_observer.js":'/*\n * Copyright 2016 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Externs for Intersection Observer objects.\n * @see https://w3c.github.io/IntersectionObserver/\n * @externs\n * @author robadurbin@google.com (Rob Durbin)\n */\n\n// TODO(robadurbin): Once the Intersection Observer spec is adopted by W3C, add\n// a w3c_ prefix to this file\'s name.\n\n\n/**\n * These contain the information provided from a change event.\n * @see https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\n * @record\n */\nfunction IntersectionObserverEntry() {}\n\n/**\n * The time the change was observed.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-time\n * @const {number}\n */\nIntersectionObserverEntry.prototype.time;\n\n/**\n * The root intersection rectangle, if target belongs to the same unit of\n * related similar-origin browsing contexts as the intersection root, null\n * otherwise.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-rootbounds\n * @const {{top: number, right: number, bottom: number, left: number,\n * height: number, width: number}}\n */\nIntersectionObserverEntry.prototype.rootBounds;\n\n/**\n * The rectangle describing the element being observed.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-boundingclientrect\n * @const {!{top: number, right: number, bottom: number, left: number,\n * height: number, width: number}}\n */\nIntersectionObserverEntry.prototype.boundingClientRect;\n\n/**\n * The rectangle describing the intersection between the observed element and\n * the viewport.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-intersectionrect\n * @const {!{top: number, right: number, bottom: number, left: number,\n * height: number, width: number}}\n */\nIntersectionObserverEntry.prototype.intersectionRect;\n\n/**\n * Ratio of intersectionRect area to boundingClientRect area.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-intersectionratio\n * @const {number}\n */\nIntersectionObserverEntry.prototype.intersectionRatio;\n\n/**\n * The Element whose intersection with the intersection root changed.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-target\n * @const {!Element}\n */\nIntersectionObserverEntry.prototype.target;\n\n/**\n * Whether or not the target is intersecting with the root.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-isintersecting\n * @const {boolean}\n */\nIntersectionObserverEntry.prototype.isIntersecting;\n\n/**\n * Whether or not the target is visible with the root.\n * @see https://w3c.github.io/IntersectionObserver/v2/#dom-intersectionobserverentry-isvisible\n * @const {boolean|undefined}\n */\nIntersectionObserverEntry.prototype.isVisible;\n\n/**\n * Callback for the IntersectionObserver.\n * @see https://w3c.github.io/IntersectionObserver/#intersection-observer-callback\n * @typedef {function(!Array,!IntersectionObserver)}\n */\nvar IntersectionObserverCallback;\n\n/**\n * Options for the IntersectionObserver.\n * @see https://w3c.github.io/IntersectionObserver/v2/#intersection-observer-init\n * @typedef {{\n * threshold: (!Array|number|undefined),\n * delay: (number|undefined),\n * trackVisibility: (boolean|undefined),\n * root: (?Element|undefined),\n * rootMargin: (string|undefined)\n * }}\n */\nvar IntersectionObserverInit;\n\n/**\n * This is the constructor for Intersection Observer objects.\n * @see https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\n * @param {!IntersectionObserverCallback} handler The callback for the observer.\n * @param {!IntersectionObserverInit=} opt_options The object defining the\n * thresholds, etc.\n * @constructor\n */\nfunction IntersectionObserver(handler, opt_options) {};\n\n/**\n * The root Element to use for intersection, or null if the observer uses the\n * implicit root.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-root\n * @const {?Element}\n */\nIntersectionObserver.prototype.root;\n\n/**\n * Offsets applied to the intersection root\u2019s bounding box, effectively growing\n * or shrinking the box that is used to calculate intersections.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-rootmargin\n * @const {string}\n */\nIntersectionObserver.prototype.rootMargin;\n\n/**\n * A list of thresholds, sorted in increasing numeric order, where each\n * threshold is a ratio of intersection area to bounding box area of an observed\n * target.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-thresholds\n * @const {!Array}\n */\nIntersectionObserver.prototype.thresholds;\n\n/**\n * This is used to set which element to observe.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-observe\n * @param {!Element} element The element to observe.\n * @return {undefined}\n */\nIntersectionObserver.prototype.observe = function(element) {};\n\n/**\n * This is used to stop observing a given element.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-unobserve\n * @param {!Element} element The elmenent to stop observing.\n * @return {undefined}\n */\nIntersectionObserver.prototype.unobserve = function(element) {};\n\n/**\n * Disconnect.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-disconnect\n */\nIntersectionObserver.prototype.disconnect = function() {};\n\n/**\n * Take records.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-takerecords\n * @return {!Array.}\n */\nIntersectionObserver.prototype.takeRecords = function() {};\n', --"externs/iphone.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for all iPhone extensions. Created from:\n * http://developer.apple.com/library/safari/navigation/\n *\n * @externs\n * @author agrieve@google.com (Andrew Grieve)\n */\n\n\n/**\n * @type {number}\n */\nTouch.prototype.webkitForce;\n\n/**\n * @type {number}\n */\nTouch.prototype.webkitRadiusX;\n\n/**\n * @type {number}\n */\nTouch.prototype.webkitRadiusY;\n\n/**\n * The distance between two fingers since the start of an event as a multiplier\n * of the initial distance. The initial value is 1.0. If less than 1.0, the\n * gesture is pinch close (to zoom out). If greater than 1.0, the gesture is\n * pinch open (to zoom in).\n * @type {number}\n */\nTouchEvent.prototype.scale;\n\n/**\n * The delta rotation since the start of an event, in degrees, where clockwise\n * is positive and counter-clockwise is negative. The initial value is 0.0.\n * @type {number}\n */\nTouchEvent.prototype.rotation;\n\n/**\n * Initializes a newly created TouchEvent object.\n * @param {string} type\n * @param {boolean} canBubble\n * @param {boolean} cancelable\n * @param {Window} view\n * @param {number} detail\n * @param {number} screenX\n * @param {number} screenY\n * @param {number} clientX\n * @param {number} clientY\n * @param {boolean} ctrlKey\n * @param {boolean} altKey\n * @param {boolean} shiftKey\n * @param {boolean} metaKey\n * @param {TouchList} touches\n * @param {TouchList} targetTouches\n * @param {TouchList} changedTouches\n * @param {number} scale\n * @param {number} rotation\n * @return {undefined}\n */\nTouchEvent.prototype.initTouchEvent = function(type, canBubble, cancelable,\n view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey,\n metaKey, touches, targetTouches, changedTouches, scale, rotation) {};\n\n/**\n * The GestureEvent class encapsulates information about a multi-touch gesture.\n *\n * GestureEvent objects are high-level events that encapsulate the low-level\n * TouchEvent objects. Both GestureEvent and TouchEvent events are sent during\n * a multi-touch sequence. Gesture events contain scaling and rotation\n * information allowing gestures to be combined, if supported by the platform.\n * If not supported, one gesture ends before another starts. Listen for\n * GestureEvent events if you want to respond to gestures only, not process\n * the low-level TouchEvent objects.\n *\n * @see http://developer.apple.com/library/safari/#documentation/UserExperience/Reference/GestureEventClassReference/GestureEvent/GestureEvent.html\n * @extends {UIEvent}\n * @constructor\n */\nfunction GestureEvent() {}\n\n/**\n * The distance between two fingers since the start of an event as a multiplier\n * of the initial distance. The initial value is 1.0. If less than 1.0, the\n * gesture is pinch close (to zoom out). If greater than 1.0, the gesture is\n * pinch open (to zoom in).\n * @type {number}\n */\nGestureEvent.prototype.scale;\n\n/**\n * The delta rotation since the start of an event, in degrees, where clockwise\n * is positive and counter-clockwise is negative. The initial value is 0.0.\n * @type {number}\n */\nGestureEvent.prototype.rotation;\n\n/**\n * The target of this gesture.\n * @type {EventTarget}\n */\nGestureEvent.prototype.target;\n\n/**\n * Initializes a newly created GestureEvent object.\n * @param {string} type\n * @param {boolean} canBubble\n * @param {boolean} cancelable\n * @param {Window} view\n * @param {number} detail\n * @param {number} screenX\n * @param {number} screenY\n * @param {number} clientX\n * @param {number} clientY\n * @param {boolean} ctrlKey\n * @param {boolean} altKey\n * @param {boolean} shiftKey\n * @param {boolean} metaKey\n * @param {EventTarget} target\n * @param {number} scale\n * @param {number} rotation\n * @return {undefined}\n */\nGestureEvent.prototype.initGestureEvent = function(type, canBubble, cancelable,\n view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey,\n metaKey, target, scale, rotation) {};\n\n\n/**\n * Specifies the JavaScript method to invoke when a gesture is started by\n * two or more fingers touching the surface.\n * @type {?function(!GestureEvent)}\n */\nElement.prototype.ongesturestart;\n\n/**\n * Specifies the JavaScript method to invoke when fingers are moved during a\n * gesture.\n * @type {?function(!GestureEvent)}\n */\nElement.prototype.ongesturechange;\n\n/**\n * Specifies the JavaScript method to invoke when a gesture ends (when there are\n * 0 or 1 fingers touching the surface).\n * @type {?function(!GestureEvent)}\n */\nElement.prototype.ongestureend;\n\n/**\n * Specifies the JavaScript method to invoke when the browser device\'s\n * orientation changes, i.e.the device is rotated.\n * @type {?function(!Event)}\n * @see http://developer.apple.com/library/IOS/#documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html\n */\nWindow.prototype.onorientationchange;\n\n/**\n * Returns the orientation of the browser\'s device, one of [-90, 0, 90, 180].\n * @type {number}\n * @see http://developer.apple.com/library/IOS/#documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html\n */\nWindow.prototype.orientation;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLInputElement.prototype.autocorrect;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLInputElement.prototype.autocapitalize;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLTextAreaElement.prototype.autocorrect;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLTextAreaElement.prototype.autocapitalize;\n', --"externs/mediakeys.js":'/*\n * Copyright 2015 The Closure Compiler authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview MediaKey externs.\n * Based on {@link http://goo.gl/blgtZZ EME draft 12 March 2015}.\n * @externs\n */\n\n\n/**\n * @typedef {{contentType: string, robustness: string}}\n * @see https://w3c.github.io/encrypted-media/#mediakeysystemmediacapability-dictionary\n */\nvar MediaKeySystemMediaCapability;\n\n\n/** @typedef {{\n * label: (string|undefined),\n * initDataTypes: (!Array|undefined),\n * audioCapabilities: (!Array|undefined),\n * videoCapabilities: (!Array|undefined),\n * distinctiveIdentifier: (string|undefined),\n * persistentState: (string|undefined),\n * sessionTypes: (!Array|undefined)\n * }}\n * @see https://w3c.github.io/encrypted-media/#mediakeysystemconfiguration-dictionary\n */\nvar MediaKeySystemConfiguration;\n\n\n/**\n * @param {string} keySystem\n * @param {!Array} supportedConfigurations\n * @return {!Promise}\n * @see https://w3c.github.io/encrypted-media/#navigator-extension-requestmediakeysystemaccess\n */\nNavigator.prototype.requestMediaKeySystemAccess =\n function(keySystem, supportedConfigurations) {};\n\n\n/** @const {MediaKeys} */\nHTMLMediaElement.prototype.mediaKeys;\n\n\n/**\n * @param {MediaKeys} mediaKeys\n * @return {!Promise}\n * @see https://w3c.github.io/encrypted-media/#widl-HTMLMediaElement-setMediaKeys-Promise-void--MediaKeys-mediaKeys\n */\nHTMLMediaElement.prototype.setMediaKeys = function(mediaKeys) {};\n\n\n\n/**\n * @interface\n * @see https://w3c.github.io/encrypted-media/#mediakeysystemaccess-interface\n */\nfunction MediaKeySystemAccess() {}\n\n\n/** @return {!Promise} */\nMediaKeySystemAccess.prototype.createMediaKeys = function() {};\n\n\n/** @return {!MediaKeySystemConfiguration} */\nMediaKeySystemAccess.prototype.getConfiguration = function() {};\n\n\n/** @const {string} */\nMediaKeySystemAccess.prototype.keySystem;\n\n\n\n/**\n * @interface\n * @see https://w3c.github.io/encrypted-media/#mediakeys-interface\n */\nfunction MediaKeys() {}\n\n\n/**\n * @param {string=} opt_sessionType defaults to "temporary"\n * @return {!MediaKeySession}\n * @throws {TypeError} if opt_sessionType is invalid.\n */\nMediaKeys.prototype.createSession = function(opt_sessionType) {};\n\n\n/**\n * @param {!BufferSource} serverCertificate\n * @return {!Promise}\n */\nMediaKeys.prototype.setServerCertificate = function(serverCertificate) {};\n\n\n\n/**\n * @interface\n * @see https://w3c.github.io/encrypted-media/#mediakeystatusmap-interface\n */\nfunction MediaKeyStatusMap() {}\n\n\n/** @const {number} */\nMediaKeyStatusMap.prototype.size;\n\n\n/**\n * Array entry 0 is the key, 1 is the value.\n * @return {!Iterator>}\n */\nMediaKeyStatusMap.prototype.entries = function() {};\n\n\n/**\n * The function is called with each value.\n * @param {function(string, !BufferSource)} callback A callback function to run for\n * each media key. The first parameter is the key status; the second\n * parameter is the key ID.\n * @return {undefined}\n */\nMediaKeyStatusMap.prototype.forEach = function(callback) {};\n\n\n/**\n * @param {!BufferSource} keyId\n * @return {string|undefined}\n */\nMediaKeyStatusMap.prototype.get = function(keyId) {};\n\n\n/**\n * @param {!BufferSource} keyId\n * @return {boolean}\n */\nMediaKeyStatusMap.prototype.has = function(keyId) {};\n\n\n/**\n * @return {!Iterator}\n */\nMediaKeyStatusMap.prototype.keys = function() {};\n\n\n/**\n * @return {!Iterator}\n */\nMediaKeyStatusMap.prototype.values = function() {};\n\n\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://w3c.github.io/encrypted-media/#mediakeysession-interface\n */\nfunction MediaKeySession() {}\n\n\n/** @const {string} */\nMediaKeySession.prototype.sessionId;\n\n\n/** @const {number} */\nMediaKeySession.prototype.expiration;\n\n\n/** @const {!Promise} */\nMediaKeySession.prototype.closed;\n\n\n/** @const {!MediaKeyStatusMap} */\nMediaKeySession.prototype.keyStatuses;\n\n\n/**\n * @param {string} initDataType\n * @param {!BufferSource} initData\n * @return {!Promise}\n */\nMediaKeySession.prototype.generateRequest = function(initDataType, initData) {};\n\n\n/**\n * @param {string} sessionId\n * @return {!Promise}}\n */\nMediaKeySession.prototype.load = function(sessionId) {};\n\n\n/**\n * @param {!BufferSource} response\n * @return {!Promise}\n */\nMediaKeySession.prototype.update = function(response) {};\n\n\n/** @return {!Promise} */\nMediaKeySession.prototype.close = function() {};\n\n\n/** @return {!Promise} */\nMediaKeySession.prototype.remove = function() {};\n\n\n/**\n * @override\n */\nMediaKeySession.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n\n/**\n * @override\n */\nMediaKeySession.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n\n/**\n * @override\n * @return {boolean}\n */\nMediaKeySession.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @record\n * @extends {EventInit}\n */\nfunction MediaKeyMessageEventInit() {};\n\n/** @type {string} */\nMediaKeyMessageEventInit.prototype.messageType;\n\n/** @type {!ArrayBuffer} */\nMediaKeyMessageEventInit.prototype.message;\n\n\n/**\n * @constructor\n * @param {string} type\n * @param {MediaKeyMessageEventInit} eventInitDict\n * @extends {Event}\n * @see https://w3c.github.io/encrypted-media/#mediakeymessageevent\n */\nfunction MediaKeyMessageEvent(type, eventInitDict) {}\n\n\n/** @const {string} */\nMediaKeyMessageEvent.prototype.messageType;\n\n\n/** @const {!ArrayBuffer} */\nMediaKeyMessageEvent.prototype.message;\n\n\n/** @const {!MediaKeySession} */\nMediaKeyMessageEvent.prototype.target;\n\n/**\n * @record\n * @extends {EventInit}\n */\nfunction MediaEncryptedEventInit() {};\n\n/** @type {(string | undefined)} */\nMediaEncryptedEventInit.prototype.initDataType;\n\n/** @type {(ArrayBuffer | undefined)} */\nMediaEncryptedEventInit.prototype.initData;\n\n/**\n * @constructor\n * @param {string} type\n * @param {MediaEncryptedEventInit=} opt_eventInitDict\n * @extends {Event}\n * @see https://w3c.github.io/encrypted-media/#mediaencryptedevent\n */\nfunction MediaEncryptedEvent(type, opt_eventInitDict) {}\n\n\n/** @const {string} */\nMediaEncryptedEvent.prototype.initDataType;\n\n\n/** @const {ArrayBuffer} */\nMediaEncryptedEvent.prototype.initData;\n\n\n/** @const {!HTMLMediaElement} */\nMediaEncryptedEvent.prototype.target;\n\n', --"externs/mediasource.js":'/*\n * Copyright 2012 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for the Media Source Extensions. Note that the\n * properties available here are the union of several versions of the spec.\n * @see http://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html\n *\n * @externs\n * @author mattward@google.com (Matt Ward)\n */\n\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction MediaSource() {}\n\n/** @override */\nMediaSource.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nMediaSource.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nMediaSource.prototype.dispatchEvent = function(evt) {};\n\n/** @type {Array} */\nMediaSource.prototype.sourceBuffers;\n\n/** @type {Array} */\nMediaSource.prototype.activeSourceBuffers;\n\n/** @type {number} */\nMediaSource.prototype.duration;\n\n/**\n * @param {string} type\n * @return {SourceBuffer}\n */\nMediaSource.prototype.addSourceBuffer = function(type) {};\n\n/**\n * @param {SourceBuffer} sourceBuffer\n * @return {undefined}\n */\nMediaSource.prototype.removeSourceBuffer = function(sourceBuffer) {};\n\n/**\n * Updates the live seekable range.\n * @param {number} start\n * @param {number} end\n */\nMediaSource.prototype.setLiveSeekableRange = function(start, end) {};\n\n/**\n * Clears the live seekable range.\n * @return {void}\n */\nMediaSource.prototype.clearLiveSeekableRange = function() {};\n\n/** @type {string} */\nMediaSource.prototype.readyState;\n\n/**\n * @param {string=} opt_error\n * @return {undefined}\n */\nMediaSource.prototype.endOfStream = function(opt_error) {};\n\n/**\n * @param {string} type\n * @return {boolean}\n */\nMediaSource.isTypeSupported = function(type) {};\n\n\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction SourceBuffer() {}\n\n/** @override */\nSourceBuffer.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSourceBuffer.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSourceBuffer.prototype.dispatchEvent = function(evt) {};\n\n/** @type {string} */\nSourceBuffer.prototype.appendMode;\n\n/** @type {boolean} */\nSourceBuffer.prototype.updating;\n\n/** @type {TimeRanges} */\nSourceBuffer.prototype.buffered;\n\n/** @type {number} */\nSourceBuffer.prototype.timestampOffset;\n\n/** @type {number} */\nSourceBuffer.prototype.appendWindowStart;\n\n/** @type {number} */\nSourceBuffer.prototype.appendWindowEnd;\n\n/**\n * @param {Uint8Array} data\n * @return {undefined}\n */\nSourceBuffer.prototype.append = function(data) {};\n\n/**\n * @param {ArrayBuffer|ArrayBufferView} data\n * @return {undefined}\n */\nSourceBuffer.prototype.appendBuffer = function(data) {};\n\n/**\n * Abort the current segment append sequence.\n * @return {undefined}\n */\nSourceBuffer.prototype.abort = function() {};\n\n/**\n * @param {number} start\n * @param {number} end\n * @return {undefined}\n */\nSourceBuffer.prototype.remove = function(start, end) {};\n\n/**\n * @param {string} type\n * @return {undefined}\n */\nSourceBuffer.prototype.changeType = function(type) {};\n', -+"externs/nonstandard_fileapi.js":"/*\n * Copyright 2019 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for file api implemented in\n * various browsers but not part of https://www.w3.org/TR/FileAPI.\n * @externs\n */\n\n/**\n * This replaces Blob.slice in Chrome since WebKit revision 84005.\n * @see http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0222.html\n * @param {number=} start\n * @param {number=} end\n * @param {string=} contentType\n * @return {!Blob}\n * @nosideeffects\n */\nBlob.prototype.webkitSlice = function(start, end, contentType) {};\n\n/**\n * This replaces Blob.slice in Firefox.\n * @see http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0222.html\n * @param {number=} start\n * @param {number=} end\n * @param {string=} contentType\n * @return {!Blob}\n * @nosideeffects\n */\nBlob.prototype.mozSlice = function(start, end, contentType) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#the-blobbuilder-interface\n * @constructor\n */\nfunction BlobBuilder() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append0\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append1\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append2\n * @param {string|Blob|ArrayBuffer} data\n * @param {string=} endings\n * @return {undefined}\n */\nBlobBuilder.prototype.append = function(data, endings) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-getBlob\n * @param {string=} contentType\n * @return {!Blob}\n */\nBlobBuilder.prototype.getBlob = function(contentType) {};\n\n/**\n * This has replaced BlobBuilder in Chrome since WebKit revision 84008.\n * @see http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0222.html\n * @constructor\n */\nfunction WebKitBlobBuilder() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append0\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append1\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append2\n * @param {string|Blob|ArrayBuffer} data\n * @param {string=} endings\n * @return {undefined}\n */\nWebKitBlobBuilder.prototype.append = function(data, endings) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-getBlob\n * @param {string=} contentType\n * @return {!Blob}\n */\nWebKitBlobBuilder.prototype.getBlob = function(contentType) {};\n\n/**\n * @record\n * @see https://dev.w3.org/2009/dap/file-system/file-dir-sys.html#the-flags-dictionary\n */\nfunction FileSystemFlags() {};\n\n/** @type {(undefined|boolean)} */\nFileSystemFlags.prototype.create;\n\n/** @type {(undefined|boolean)} */\nFileSystemFlags.prototype.exclusive;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryentry-interface\n * @constructor\n * @extends {Entry}\n */\nfunction DirectoryEntry() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-createReader\n * @return {!DirectoryReader}\n */\nDirectoryEntry.prototype.createReader = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-getFile\n * @param {string} path\n * @param {!FileSystemFlags=} options\n * @param {function(!FileEntry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryEntry.prototype.getFile = function(\n path, options, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-getDirectory\n * @param {string} path\n * @param {!FileSystemFlags=} options\n * @param {function(!DirectoryEntry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryEntry.prototype.getDirectory = function(\n path, options, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-removeRecursively\n * @param {function()} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryEntry.prototype.removeRecursively = function(\n successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryreader-interface\n * @constructor\n */\nfunction DirectoryReader() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryReader-readEntries\n * @param {function(!Array)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryReader.prototype.readEntries = function(\n successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-entry-interface\n * @constructor\n */\nfunction Entry() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-isFile\n * @type {boolean}\n */\nEntry.prototype.isFile;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-isDirectory\n * @type {boolean}\n */\nEntry.prototype.isDirectory;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-name\n * @type {string}\n */\nEntry.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-fullPath\n * @type {string}\n */\nEntry.prototype.fullPath;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-filesystem\n * @type {!FileSystem}\n */\nEntry.prototype.filesystem;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-moveTo\n * @param {!DirectoryEntry} parent\n * @param {string=} newName\n * @param {function(!Entry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.moveTo = function(\n parent, newName, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-copyTo\n * @param {!DirectoryEntry} parent\n * @param {string=} newName\n * @param {function(!Entry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.copyTo = function(\n parent, newName, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-toURL\n * @param {string=} mimeType\n * @return {string}\n */\nEntry.prototype.toURL = function(mimeType) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-remove\n * @param {function()} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.remove = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-getMetadata\n * @param {function(!Metadata)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.getMetadata = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-getParent\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.getParent = function(successCallback, errorCallback) {};\n\n/**\n * @return {?Entry} The Entry corresponding to this item, or null. Note that\n * despite its name,this method only works in Chrome, and will eventually\n * be renamed to {@code getAsEntry}.\n * @nosideeffects\n */\nDataTransferItem.prototype.webkitGetAsEntry = function() {};\n\n/**\n * @see https://wicg.github.io/entries-api/#dom-file-webkitrelativepath\n * @type {string}\n */\nFile.prototype.webkitRelativePath;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-fileentry-interface\n * @constructor\n * @extends {Entry}\n */\nfunction FileEntry() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntry-createWriter\n * @param {function(!FileWriter)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nFileEntry.prototype.createWriter = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntry-file\n * @param {function(!File)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nFileEntry.prototype.file = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#FileErrorInterface\n * @constructor\n * @extends {DOMError}\n */\nfunction FileError() {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-NOT_FOUND_ERR\n * @const {number}\n */\nFileError.prototype.NOT_FOUND_ERR;\n\n/** @const {number} */\nFileError.NOT_FOUND_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-SECURITY_ERR\n * @const {number}\n */\nFileError.prototype.SECURITY_ERR;\n\n/** @const {number} */\nFileError.SECURITY_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-ABORT_ERR\n * @const {number}\n */\nFileError.prototype.ABORT_ERR;\n\n/** @const {number} */\nFileError.ABORT_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-NOT_READABLE_ERR\n * @const {number}\n */\nFileError.prototype.NOT_READABLE_ERR;\n\n/** @const {number} */\nFileError.NOT_READABLE_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-ENCODING_ERR\n * @const {number}\n */\nFileError.prototype.ENCODING_ERR;\n\n/** @const {number} */\nFileError.ENCODING_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileError-NO_MODIFICATION_ALLOWED_ERR\n * @const {number}\n */\nFileError.prototype.NO_MODIFICATION_ALLOWED_ERR;\n\n/** @const {number} */\nFileError.NO_MODIFICATION_ALLOWED_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-INVALID_STATE_ERR\n * @const {number}\n */\nFileError.prototype.INVALID_STATE_ERR;\n\n/** @const {number} */\nFileError.INVALID_STATE_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-SYNTAX_ERR\n * @const {number}\n */\nFileError.prototype.SYNTAX_ERR;\n\n/** @const {number} */\nFileError.SYNTAX_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileError-INVALID_MODIFICATION_ERR\n * @const {number}\n */\nFileError.prototype.INVALID_MODIFICATION_ERR;\n\n/** @const {number} */\nFileError.INVALID_MODIFICATION_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileError-QUOTA_EXCEEDED_ERR\n * @const {number}\n */\nFileError.prototype.QUOTA_EXCEEDED_ERR;\n\n/** @const {number} */\nFileError.QUOTA_EXCEEDED_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-TYPE_MISMATCH_ERR\n * @const {number}\n */\nFileError.prototype.TYPE_MISMATCH_ERR;\n\n/** @const {number} */\nFileError.TYPE_MISMATCH_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-PATH_EXISTS_ERR\n * @const {number}\n */\nFileError.prototype.PATH_EXISTS_ERR;\n\n/** @const {number} */\nFileError.PATH_EXISTS_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-code-exception\n * @type {number}\n * @deprecated Use the 'name' or 'message' attributes of DOMError rather than\n * 'code'\n */\nFileError.prototype.code;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#idl-def-FileSaver\n * @constructor\n */\nfunction FileSaver() {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-abort\n * @return {undefined}\n */\nFileSaver.prototype.abort = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-INIT\n * @const {number}\n */\nFileSaver.prototype.INIT;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-WRITING\n * @const {number}\n */\nFileSaver.prototype.WRITING;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-DONE\n * @const {number}\n */\nFileSaver.prototype.DONE;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-readyState\n * @type {number}\n */\nFileSaver.prototype.readyState;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-error\n * @type {FileError}\n */\nFileSaver.prototype.error;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onwritestart\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onwritestart;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onprogress\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onprogress;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onwrite\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onwrite;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onabort\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onabort;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onerror\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onerror;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onwriteend\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onwriteend;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-filesystem-interface\n * @constructor\n */\nfunction FileSystem() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystem-name\n * @type {string}\n */\nFileSystem.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystem-root\n * @type {!DirectoryEntry}\n */\nFileSystem.prototype.root;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#idl-def-FileWriter\n * @constructor\n * @extends {FileSaver}\n */\nfunction FileWriter() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-position\n * @type {number}\n */\nFileWriter.prototype.position;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-length\n * @type {number}\n */\nFileWriter.prototype.length;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-write\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileWriter.prototype.write = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-seek\n * @param {number} offset\n * @return {undefined}\n */\nFileWriter.prototype.seek = function(offset) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-truncate\n * @param {number} size\n * @return {undefined}\n */\nFileWriter.prototype.truncate = function(size) {};\n\n/**\n * LocalFileSystem interface, implemented by Window and WorkerGlobalScope.\n * @see http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem\n * @constructor\n */\nfunction LocalFileSystem() {}\n\n/**\n * Metadata interface.\n * @see http://www.w3.org/TR/file-system-api/#idl-def-Metadata\n * @constructor\n */\nfunction Metadata() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Metadata-modificationTime\n * @type {!Date}\n */\nMetadata.prototype.modificationTime;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Metadata-size\n * @type {number}\n */\nMetadata.prototype.size;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-TEMPORARY\n * @const {number}\n */\nWindow.prototype.TEMPORARY;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-PERSISTENT\n * @const {number}\n */\nWindow.prototype.PERSISTENT;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction requestFileSystem(type, size, successCallback, errorCallback) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.requestFileSystem = function(\n type, size, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction resolveLocalFileSystemURI(uri, successCallback, errorCallback) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.resolveLocalFileSystemURI =\n function(uri, successCallback, errorCallback) {}\n\n/**\n * This has replaced requestFileSystem in Chrome since WebKit revision 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction webkitRequestFileSystem(type, size, successCallback, errorCallback) {}\n\n/**\n * This has replaced requestFileSystem in Chrome since WebKit revision 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.webkitRequestFileSystem = function(type, size, successCallback,\n errorCallback) {};\n\n/**\n * This has replaced resolveLocalFileSystemURI in Chrome since WebKit revision\n * 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction webkitResolveLocalFileSystemURI(uri, successCallback, errorCallback) {}\n\n/**\n * This has replaced resolveLocalFileSystemURI in Chrome since WebKit revision\n * 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.webkitResolveLocalFileSystemURI = function(\n uri, successCallback, errorCallback) {}\n\n// WindowBlobURIMethods interface, implemented by Window and WorkerGlobalScope.\n// There are three APIs for this: the old specced API, the new specced API, and\n// the webkit-prefixed API.\n// @see http://www.w3.org/TR/FileAPI/#creating-revoking\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!Object} obj\n * @return {string}\n */\nfunction createObjectURL(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!Object} obj\n * @return {string}\n */\nWindow.prototype.createObjectURL = function(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nfunction revokeObjectURL(url) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nWindow.prototype.revokeObjectURL = function(url) {};\n\n/**\n * This has been replaced by URL in Chrome since WebKit revision 75739.\n * @constructor\n * @param {string} urlString\n * @param {string=} base\n */\nfunction webkitURL(urlString, base) {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!Object} obj\n * @return {string}\n */\nwebkitURL.createObjectURL = function(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nwebkitURL.revokeObjectURL = function(url) {};\n\n/**\n * @see https://developers.9oo91e.qjz9zk/chrome/whitepapers/storage\n * @constructor\n */\nfunction StorageInfo() {}\n\n/**\n * @see https://developers.9oo91e.qjz9zk/chrome/whitepapers/storage\n * @const {number}\n * */\nStorageInfo.prototype.TEMPORARY;\n\n/**\n * @see https://developers.9oo91e.qjz9zk/chrome/whitepapers/storage\n * @const {number}\n */\nStorageInfo.prototype.PERSISTENT;\n\n/**\n * @see https://developers.9oo91e.qjz9zk/chrome/whitepapers/storage#requestQuota\n * @param {number} type\n * @param {number} size\n * @param {function(number)} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageInfo.prototype.requestQuota = function(\n type, size, successCallback, errorCallback) {};\n\n/**\n * @see https://developers.9oo91e.qjz9zk/chrome/whitepapers/storage#queryUsageAndQuota\n * @param {number} type\n * @param {function(number, number)} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageInfo.prototype.queryUsageAndQuota = function(\n type, successCallback, errorCallback) {};\n\n/**\n * @see https://developers.9oo91e.qjz9zk/chrome/whitepapers/storage\n * @type {!StorageInfo}\n */\nWindow.prototype.webkitStorageInfo;\n\n/**\n * @see https://dvcs.w3.org/hg/quota/raw-file/tip/Overview.html#storagequota-interface.\n * @constructor\n */\nfunction StorageQuota() {}\n\n/**\n * @param {number} size\n * @param {function(number)=} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageQuota.prototype.requestQuota = function(\n size, successCallback, errorCallback) {};\n\n/**\n * @param {function(number, number)} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageQuota.prototype.queryUsageAndQuota = function(\n successCallback, errorCallback) {};\n\n/**\n * @type {!StorageQuota}\n * @see https://developer.ch40me.qjz9zk/apps/offline_storage\n */\nNavigator.prototype.webkitPersistentStorage;\n\n/**\n * @type {!StorageQuota}\n * @see https://developer.ch40me.qjz9zk/apps/offline_storage\n */\nNavigator.prototype.webkitTemporaryStorage;\n\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#idl-def-FileWriterSync\n * @constructor\n */\nfunction FileWriterSync() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-position\n * @type {number}\n * @const\n */\nFileWriterSync.prototype.position;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-length\n * @type {number}\n * @const\n */\nFileWriterSync.prototype.length;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-write\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileWriterSync.prototype.write = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-seek\n * @param {number} offset\n * @return {undefined}\n */\nFileWriterSync.prototype.seek = function(offset) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-truncate\n * @param {number} size\n * @return {undefined}\n */\nFileWriterSync.prototype.truncate = function(size) {};\n\n/**\n * LocalFileSystemSync interface, implemented by WorkerGlobalScope.\n * @see http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystemSync\n * @constructor\n */\nfunction LocalFileSystemSync() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/\n * #the-synchronous-filesystem-interface\n * @constructor\n */\nfunction FileSystemSync() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystemSync-name\n * @type {string}\n * @const\n */\nFileSystemSync.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystemSync-root\n * @type {!DirectoryEntrySync}\n * @const\n */\nFileSystemSync.prototype.root;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystemSync-requestFileSystemSync-FileSystemSync-unsigned-short-type-unsigned-long-long-size\n * @param {number} type\n * @param {number} size\n * @return {!FileSystemSync}\n */\nfunction requestFileSystemSync(type, size) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystemSync-requestFileSystemSync-FileSystemSync-unsigned-short-type-unsigned-long-long-size\n * @param {number} type\n * @param {number} size\n * @return {!FileSystemSync}\n */\nfunction webkitRequestFileSystemSync(type, size) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-entrysync-interface\n * @constructor\n */\nfunction EntrySync() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-isFile\n * @type {boolean}\n * @const\n */\nEntrySync.prototype.isFile;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-isDirectory\n * @type {boolean}\n * @const\n */\nEntrySync.prototype.isDirectory;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-name\n * @type {string}\n * @const\n */\nEntrySync.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-fullPath\n * @type {string}\n * @const\n */\nEntrySync.prototype.fullPath;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-filesystem\n * @type {!FileSystemSync}\n * @const\n */\nEntrySync.prototype.filesystem;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-moveTo\n * @param {!DirectoryEntrySync} parent\n * @param {string=} newName\n * @return {!EntrySync}\n */\nEntrySync.prototype.moveTo = function(parent, newName) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-copyTo\n * @param {!DirectoryEntrySync} parent\n * @param {string=} newName\n * @return {!EntrySync}\n */\nEntrySync.prototype.copyTo = function(parent, newName) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-toURL\n * @param {string=} mimeType\n * @return {string}\n */\nEntrySync.prototype.toURL = function(mimeType) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-remove\n * @return {undefined}\n */\nEntrySync.prototype.remove = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-getMetadata\n * @return {!Metadata}\n */\nEntrySync.prototype.getMetadata = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-getParent\n * @return {!DirectoryEntrySync}\n */\nEntrySync.prototype.getParent = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryentrysync-interface\n * @constructor\n * @extends {EntrySync}\n */\nfunction DirectoryEntrySync() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-createReader\n * @return {!DirectoryReaderSync}\n */\nDirectoryEntrySync.prototype.createReader = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-getFile\n * @param {string} path\n * @param {Object=} options\n * @return {!FileEntrySync}\n */\nDirectoryEntrySync.prototype.getFile = function(path, options) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-getDirectory\n * @param {string} path\n * @param {Object=} options\n * @return {!DirectoryEntrySync}\n */\nDirectoryEntrySync.prototype.getDirectory = function(path, options) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-removeRecursively\n * @return {undefined}\n */\nDirectoryEntrySync.prototype.removeRecursively = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryreadersync-interface\n * @constructor\n */\nfunction DirectoryReaderSync() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryReaderSync-readEntries\n * @return {!Array}\n */\nDirectoryReaderSync.prototype.readEntries = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-fileentrysync-interface\n * @constructor\n * @extends {EntrySync}\n */\nfunction FileEntrySync() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntrySync-createWriter\n * @return {!FileWriterSync}\n */\nFileEntrySync.prototype.createWriter = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntrySync-file\n * @return {!File}\n */\nFileEntrySync.prototype.file = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-fileexception-exception\n * @constructor\n */\nfunction FileException() {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-NOT_FOUND_ERR\n * @type {number}\n */\nFileException.prototype.NOT_FOUND_ERR;\n\n/** @type {number} */\nFileException.NOT_FOUND_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-SECURITY_ERR\n * @type {number}\n */\nFileException.prototype.SECURITY_ERR;\n\n/** @type {number} */\nFileException.SECURITY_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#widl-FileException-ABORT_ERR\n * @type {number}\n */\nFileException.prototype.ABORT_ERR;\n\n/** @type {number} */\nFileException.ABORT_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#widl-FileException-NOT_READABLE_ERR\n * @type {number}\n */\nFileException.prototype.NOT_READABLE_ERR;\n\n/** @type {number} */\nFileException.NOT_READABLE_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#widl-FileException-ENCODING_ERR\n * @type {number}\n */\nFileException.prototype.ENCODING_ERR;\n\n/** @type {number} */\nFileException.ENCODING_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-NO_MODIFICATION_ALLOWED_ERR\n * @type {number}\n */\nFileException.prototype.NO_MODIFICATION_ALLOWED_ERR;\n\n/** @type {number} */\nFileException.NO_MODIFICATION_ALLOWED_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-INVALID_STATE_ERR\n * @type {number}\n */\nFileException.prototype.INVALID_STATE_ERR;\n\n/** @type {number} */\nFileException.INVALID_STATE_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-SYNTAX_ERR\n * @type {number}\n */\nFileException.prototype.SYNTAX_ERR;\n\n/** @type {number} */\nFileException.SYNTAX_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-INVALID_MODIFICATION_ERR\n * @type {number}\n */\nFileException.prototype.INVALID_MODIFICATION_ERR;\n\n/** @type {number} */\nFileException.INVALID_MODIFICATION_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-QUOTA_EXCEEDED_ERR\n * @type {number}\n */\nFileException.prototype.QUOTA_EXCEEDED_ERR;\n\n/** @type {number} */\nFileException.QUOTA_EXCEEDED_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-TYPE_MISMATCH_ERR\n * @type {number}\n */\nFileException.prototype.TYPE_MISMATCH_ERR;\n\n/** @type {number} */\nFileException.TYPE_MISMATCH_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-PATH_EXISTS_ERR\n * @type {number}\n */\nFileException.prototype.PATH_EXISTS_ERR;\n\n/** @type {number} */\nFileException.PATH_EXISTS_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-code-exception\n * @type {number}\n */\nFileException.prototype.code;\n", -+"externs/flash.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for all the Flash Object JavaScript methods. This\n * file depends on w3c_dom2.js.\n * Created from\n * http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.html\n *\n * @externs\n * @author ajp@9oo91e.qjz9zk (Andy Perelson)\n */\n\n\n// Standard Methods.\n\n/**\n * Call a Flash function exported by ExternalInterface.\n * @param {string} xmlString The XML string passed to Flash. The outer element\n * should be {@code }. A sample invocation string:\n * {@code \n * test}\n * @return {string} The serialized return value from Flash that you can eval.\n */\nHTMLObjectElement.prototype.CallFunction = function(xmlString) {};\n\n/**\n * Returns the value of the Flash variable specified by varName or null if the\n * variable does not exist.\n * @param {string} varName The variable name.\n * @return {?string} The variable value.\n */\nHTMLObjectElement.prototype.GetVariable = function(varName) {};\n\n/**\n * Activates the frame number specified by `frameNumber` in the current\n * movie.\n * @param {number} frameNumber A non-negative integer frame number.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.GotoFrame = function(frameNumber) {};\n\n/**\n * @return {boolean} Whether the movie is currently playing.\n */\nHTMLObjectElement.prototype.IsPlaying = function() {};\n\n/**\n * Loads the movie identified by `url` to the layer specified by\n * `layerNumber`.\n * @param {number} layerNumber The layer number.\n * @param {string} url The movie URL.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.LoadMovie = function(layerNumber, url) {};\n\n/**\n * Pans a zoomed-in movie to the coordinates specified by x and y. Use mode to\n * specify whether the values for x and y are pixels or a percent of the window.\n * When mode is 0, the coordinates are pixels; when mode is 1, the coordinates\n * are percent of the window.\n * @param {number} x The x-coordinate.\n * @param {number} y The y-coordinate.\n * @param {number} mode The mode.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Pan = function(x, y, mode) {};\n\n/**\n * @return {number} The percent of the Flash Player movie that has streamed\n * into the browser so far; Possible values are from 0 to 100.\n */\nHTMLObjectElement.prototype.PercentLoaded = function() {};\n\n/**\n * Starts playing the movie.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Play = function() {};\n\n/**\n * Goes to the first frame.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Rewind = function() {};\n\n/**\n * Sets the value of the flash variable.\n * @param {string} variableName The variable name.\n * @param {string} value The value.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.SetVariable = function(variableName, value) {};\n\n/**\n * Zooms in on a rectangular area of the movie. The units of the coordinates\n * are in twips (1440 units per inch).\n * @param {number} left The left coordinate.\n * @param {number} top The top coordinate.\n * @param {number} right The right coordinate.\n * @param {number} bottom The bottom coordinate.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.SetZoomRect = function(left, top, right, bottom) {};\n\n/**\n * Stops playing the movie.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.StopPlay = function() {};\n\n/**\n * @return {number} The total number of frames in the movie.\n */\nHTMLObjectElement.prototype.TotalFrames = function() {};\n\n/**\n * Zooms the view by a relative scale factor.\n * @param {number} percent The percentage scale factor, should be an integer.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Zoom = function(percent) {};\n\n\n// TellTarget Methods.\n\n/**\n * Executes the action in the timeline specified by `target` in the\n * specified frame.\n * @param {string} target The timeline.\n * @param {number} frameNumber The frame number.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TCallFrame = function(target, frameNumber) {};\n\n/**\n * Executes the action in the timeline specified by `target` in the\n * specified frame.\n * @param {string} target The timeline.\n * @param {string} label The frame label.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TCallLabel = function(target, label) {};\n\n/**\n * Returns the number of the current frame for the specified timeline.\n * @param {string} target The timeline.\n * @return {number} The number of the current frame.\n */\nHTMLObjectElement.prototype.TCurentFrame = function(target) {};\n\n/**\n * Returns the label of the current frame for the specified timeline.\n * @param {string} target The timeline.\n * @return {string} The label of the current frame, empty string if no\n * current frame.\n */\nHTMLObjectElement.prototype.TCurrentLabel = function(target) {};\n\n/**\n * Returns a string indicating the value of the property in the\n * specified timeline.\n * @param {string} target The timeline.\n * @param {number} property The integer corresponding to the desired property.\n * @return {string} The value of the property.\n */\nHTMLObjectElement.prototype.TGetProperty = function(target, property) {};\n\n/**\n * Returns a number indicating the value of the property in the specified\n * timeline.\n * @param {string} target The timeline.\n * @param {number} property The integer corresponding to the desired property.\n * @return {number} A number indicating the value of the property.\n */\nHTMLObjectElement.prototype.TGetPropertyAsNumber = function(target, property) {};\n\n/**\n * Goes to the specified frame number in the specified timeline.\n * @param {string} target The timeline.\n * @param {number} frameNumber The frame number.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TGotoFrame = function(target, frameNumber) {};\n\n/**\n * Goes to the specified frame label in the specified timeline.\n * @param {string} target The timeline.\n * @param {string} label The framelabel.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TGotoLabel = function(target, label) {};\n\n/**\n * Plays the specified timeline.\n * @param {number} target The timeline.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TPlay = function(target) {};\n\n/**\n * Sets the value of the property in the specified timeline.\n * @param {number} target The timeline.\n * @param {number} property The integer corresponding to the desired property.\n * @param {string|number} value The value.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TSetProperty = function(target, property, value) {};\n\n/**\n * Stops the specified timeline.\n * @param {number} target The timeline.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TStopPlay = function(target) {};\n', -+"externs/gecko_xml.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over some of the\n * W3C\'s XML specifications by Gecko. This file depends on\n * w3c_xml.js. The whole file has been fully type annotated.\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n */\n\n/**\n * XMLSerializer can be used to convert DOM subtree or DOM document into text.\n * XMLSerializer is available to unprivileged scripts.\n *\n * XMLSerializer is mainly useful for applications and extensions based on\n * Mozilla platform. While it\'s available to web pages, it\'s not part of any\n * standard and level of support in other browsers is unknown.\n *\n * @constructor\n */\nfunction XMLSerializer() {}\n\n/**\n * Returns the serialized subtree in the form of a string\n * @param {Node} subtree\n * @return {string}\n */\nXMLSerializer.prototype.serializeToString = function(subtree) {};\n\n/**\n * The subtree rooted by the specified element is serialized to a byte stream\n * using the character set specified.\n *\n * @param {Node} subtree\n * @return {Object}\n */\nXMLSerializer.prototype.serializeToStream = function(subtree) {};\n\n/**\n * DOMParser is mainly useful for applications and extensions based on Mozilla\n * platform. While it\'s available to web pages, it\'s not part of any standard and\n * level of support in other browsers is unknown.\n *\n * @constructor\n */\nfunction DOMParser() {}\n\n/**\n * The string passed in is parsed into a DOM document.\n *\n * Example:\n * var parser = new DOMParser();\n * var doc = parser.parseFromString(aStr, "text/xml");\n *\n * @param {!TrustedHTML|string} src The UTF16 string to be parsed.\n * @param {string} type The content type of the string.\n * @return {Document}\n */\nDOMParser.prototype.parseFromString = function(src, type) {};\n', -+"externs/html5.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for all the extensions over the\n * W3C's DOM3 specification in HTML5. This file depends on\n * w3c_dom3.js. The whole file has been fully type annotated.\n *\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/index.html\n * @see http://dev.w3.org/html5/spec/Overview.html\n *\n * This also includes Typed Array definitions from\n * http://www.khronos.org/registry/typedarray/specs/latest/\n *\n * This relies on w3c_event.js being included first.\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n */\n\n/** @type {?HTMLSlotElement} */\nNode.prototype.assignedSlot;\n\n/**\n * @type {string}\n * @see https://dom.spec.whatwg.org/#dom-element-slot\n */\nElement.prototype.slot;\n\n/**\n * Note: In IE, the contains() method only exists on Elements, not Nodes.\n * Therefore, it is recommended that you use the Conformance framework to\n * prevent calling this on Nodes which are not Elements.\n * @see https://connect.m1cr050ft.qjz9zk/IE/feedback/details/780874/node-contains-is-incorrect\n *\n * @param {Node} n The node to check\n * @return {boolean} If 'n' is this Node, or is contained within this Node.\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Node.contains\n * @nosideeffects\n */\nNode.prototype.contains = function(n) {};\n\n/** @type {boolean} */\nNode.prototype.isConnected;\n\n/**\n * Inserts the given HTML Element into the node at the location.\n * @param {string} where Where to insert the HTML text, one of 'beforeBegin',\n * 'afterBegin', 'beforeEnd', 'afterEnd'.\n * @param {!Element} element DOM Element to insert.\n * @return {?Element} The element that was inserted, or null, if the\n * insertion failed.\n * @see https://dom.spec.whatwg.org/#dom-element-insertadjacentelement\n */\nNode.prototype.insertAdjacentElement = function(where, element) {};\n\n/**\n * @type {boolean}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#the-script-element\n */\nHTMLScriptElement.prototype.async;\n\n/**\n * @constructor\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#the-canvas-element\n * @extends {HTMLElement}\n */\nfunction HTMLCanvasElement() {}\n\n/** @type {number} */\nHTMLCanvasElement.prototype.width;\n\n/** @type {number} */\nHTMLCanvasElement.prototype.height;\n\n/**\n * @see https://www.w3.org/TR/html5/scripting-1.html#dom-canvas-toblob\n * @param {function(!Blob)} callback\n * @param {string=} opt_type\n * @param {...*} var_args\n * @throws {Error}\n */\nHTMLCanvasElement.prototype.toBlob = function(callback, opt_type, var_args) {};\n\n/**\n * @param {string=} opt_type\n * @param {...*} var_args\n * @return {string}\n * @throws {Error}\n */\nHTMLCanvasElement.prototype.toDataURL = function(opt_type, var_args) {};\n\n/**\n * @modifies {this}\n * @param {string} contextId\n * @param {Object=} opt_args\n * @return {Object}\n */\nHTMLCanvasElement.prototype.getContext = function(contextId, opt_args) {};\n\n/**\n * @see https://www.w3.org/TR/mediacapture-fromelement/\n * @param {number=} opt_framerate\n * @return {!MediaStream}\n * @throws {Error}\n * */\nHTMLCanvasElement.prototype.captureStream = function(opt_framerate) {};\n\n/**\n * @see https://html.spec.whatwg.org/multipage/canvas.html#dom-canvas-transfercontroltooffscreen\n * @return {!OffscreenCanvas}\n * @throws {Error}\n * */\nHTMLCanvasElement.prototype.transferControlToOffscreen = function() {};\n\n/**\n * @see https://html.spec.whatwg.org/multipage/canvas.html#the-offscreencanvas-interface\n * @implements {EventTarget}\n * @implements {Transferable}\n * @param {number} width\n * @param {number} height\n * @nosideeffects\n * @constructor\n */\nfunction OffscreenCanvas(width, height) {}\n\n/** @override */\nOffscreenCanvas.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nOffscreenCanvas.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nOffscreenCanvas.prototype.dispatchEvent = function(evt) {};\n\n/** @type {number} */\nOffscreenCanvas.prototype.width;\n\n/** @type {number} */\nOffscreenCanvas.prototype.height;\n\n/**\n * @param {string} contextId\n * @param {!Object=} opt_options\n * @modifies {this}\n * @return {!Object}\n */\nOffscreenCanvas.prototype.getContext = function(contextId, opt_options) {};\n\n/**\n * @return {!ImageBitmap}\n */\nOffscreenCanvas.prototype.transferToImageBitmap = function() {};\n\n/**\n * @param {{type: (string|undefined), quality: (number|undefined)}=} opt_options\n * @return {!Promise}\n */\nOffscreenCanvas.prototype.convertToBlob = function(opt_options) {};\n\n// TODO(tjgq): Find a way to add SVGImageElement to this typedef without making\n// svg.js part of core.\n/**\n * @typedef {HTMLImageElement|HTMLVideoElement|HTMLCanvasElement|ImageBitmap|\n * OffscreenCanvas}\n */\nvar CanvasImageSource;\n\n/**\n * @interface\n * @see https://www.w3.org/TR/2dcontext/#canvaspathmethods\n */\nfunction CanvasPathMethods() {}\n\n/**\n * @return {undefined}\n */\nCanvasPathMethods.prototype.closePath = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.lineTo = function(x, y) {};\n\n/**\n * @param {number} cpx\n * @param {number} cpy\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.quadraticCurveTo = function(cpx, cpy, x, y) {};\n\n/**\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.bezierCurveTo = function(\n cp1x, cp1y, cp2x, cp2y, x, y) {};\n\n/**\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} radius\n * @return {undefined}\n */\nCanvasPathMethods.prototype.arcTo = function(x1, y1, x2, y2, radius) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nCanvasPathMethods.prototype.rect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radius\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} opt_anticlockwise\n * @return {undefined}\n */\nCanvasPathMethods.prototype.arc = function(\n x, y, radius, startAngle, endAngle, opt_anticlockwise) {};\n\n/**\n * @constructor\n * @implements {CanvasPathMethods}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#path2d-objects\n */\nfunction Path2D() {}\n\n/**\n * @return {undefined}\n * @override\n */\nPath2D.prototype.closePath = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nPath2D.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nPath2D.prototype.lineTo = function(x, y) {};\n\n/**\n * @param {number} cpx\n * @param {number} cpy\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nPath2D.prototype.quadraticCurveTo = function(cpx, cpy, x, y) {};\n\n/**\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nPath2D.prototype.bezierCurveTo = function(\n cp1x, cp1y, cp2x, cp2y, x, y) {};\n\n/**\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} radius\n * @return {undefined}\n * @override\n */\nPath2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n * @override\n */\nPath2D.prototype.rect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radius\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} optAnticlockwise\n * @return {undefined}\n * @override\n */\nPath2D.prototype.arc = function(\n x, y, radius, startAngle, endAngle, optAnticlockwise) {};\n\n/**\n * @param {Path2D} path\n * @return {undefined}\n */\nPath2D.prototype.addPath = function(path) {};\n\n/**\n * @interface\n * @see https://www.w3.org/TR/2dcontext/#canvasdrawingstyles\n */\nfunction CanvasDrawingStyles() {}\n\n/** @type {number} */\nCanvasDrawingStyles.prototype.lineWidth;\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.lineCap;\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.lineJoin;\n\n/** @type {number} */\nCanvasDrawingStyles.prototype.miterLimit;\n\n/**\n * @param {Array} segments\n * @return {undefined}\n */\nCanvasDrawingStyles.prototype.setLineDash = function(segments) {};\n\n/**\n * @return {!Array}\n */\nCanvasDrawingStyles.prototype.getLineDash = function() {};\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.font;\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.textAlign;\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.textBaseline;\n\n// TODO(dramaix): replace this with @record.\n/**\n * @constructor\n * @abstract\n * @implements {CanvasDrawingStyles}\n * @implements {CanvasPathMethods}\n * @see http://www.w3.org/TR/2dcontext/#canvasrenderingcontext2d\n */\nfunction BaseRenderingContext2D() {}\n\n/** @const {!HTMLCanvasElement|!OffscreenCanvas} */\nBaseRenderingContext2D.prototype.canvas;\n\n/**\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.save = function() {};\n\n/**\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.restore = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.scale = function(x, y) {};\n\n/**\n * @param {number} angle\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.rotate = function(angle) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.translate = function(x, y) {};\n\n/**\n * @param {number} m11\n * @param {number} m12\n * @param {number} m21\n * @param {number} m22\n * @param {number} dx\n * @param {number} dy\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.transform = function(\n m11, m12, m21, m22, dx, dy) {};\n\n/**\n * @param {number} m11\n * @param {number} m12\n * @param {number} m21\n * @param {number} m22\n * @param {number} dx\n * @param {number} dy\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.setTransform = function(\n m11, m12, m21, m22, dx, dy) {};\n\n/**\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @return {!CanvasGradient}\n * @throws {Error}\n */\nBaseRenderingContext2D.prototype.createLinearGradient = function(\n x0, y0, x1, y1) {};\n\n/**\n * @param {number} x0\n * @param {number} y0\n * @param {number} r0\n * @param {number} x1\n * @param {number} y1\n * @param {number} r1\n * @return {!CanvasGradient}\n * @throws {Error}\n */\nBaseRenderingContext2D.prototype.createRadialGradient = function(\n x0, y0, r0, x1, y1, r1) {};\n\n/**\n * @param {CanvasImageSource} image\n * @param {string} repetition\n * @return {?CanvasPattern}\n * @throws {Error}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#dom-context-2d-createpattern\n */\nBaseRenderingContext2D.prototype.createPattern = function(\n image, repetition) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.clearRect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.fillRect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.strokeRect = function(x, y, w, h) {};\n\n/**\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.beginPath = function() {};\n\n/**\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.closePath = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.lineTo = function(x, y) {};\n\n/**\n * @param {number} cpx\n * @param {number} cpy\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.quadraticCurveTo = function(\n cpx, cpy, x, y) {};\n\n/**\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.bezierCurveTo = function(\n cp1x, cp1y, cp2x, cp2y, x, y) {};\n\n/**\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} radius\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.rect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radius\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} opt_anticlockwise\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.arc = function(\n x, y, radius, startAngle, endAngle, opt_anticlockwise) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radiusX\n * @param {number} radiusY\n * @param {number} rotation\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} opt_anticlockwise\n * @return {undefined}\n * @see http://developer.m0z111a.qjz9zk/en/docs/Web/API/CanvasRenderingContext2D/ellipse\n */\nBaseRenderingContext2D.prototype.ellipse = function(\n x, y, radiusX, radiusY, rotation, startAngle, endAngle, opt_anticlockwise) {\n};\n\n/**\n * @param {Path2D|string=} optFillRuleOrPath\n * @param {string=} optFillRule\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.fill = function(optFillRuleOrPath, optFillRule) {};\n\n/**\n * @param {Path2D=} optStroke\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.stroke = function(optStroke) {};\n\n/**\n * @param {Element} element\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.drawFocusIfNeeded = function(element) {};\n\n/**\n * @param {Path2D|string=} optFillRuleOrPath\n * @param {string=} optFillRule\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.clip = function(optFillRuleOrPath, optFillRule) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/API/CanvasRenderingContext2D/isPointInStroke\n */\nBaseRenderingContext2D.prototype.isPointInStroke = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {string=} opt_fillRule\n * @return {boolean}\n * @nosideeffects\n */\nBaseRenderingContext2D.prototype.isPointInPath = function(\n x, y, opt_fillRule) {};\n\n/**\n * @param {string} text\n * @param {number} x\n * @param {number} y\n * @param {number=} opt_maxWidth\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.fillText = function(\n text, x, y, opt_maxWidth) {};\n\n/**\n * @param {string} text\n * @param {number} x\n * @param {number} y\n * @param {number=} opt_maxWidth\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.strokeText = function(\n text, x, y, opt_maxWidth) {};\n\n/**\n * @param {string} text\n * @return {!TextMetrics}\n * @nosideeffects\n */\nBaseRenderingContext2D.prototype.measureText = function(text) {};\n\n/**\n * @param {CanvasImageSource} image\n * @param {number} dx Destination x coordinate.\n * @param {number} dy Destination y coordinate.\n * @param {number=} opt_dw Destination box width. Defaults to the image width.\n * @param {number=} opt_dh Destination box height.\n * Defaults to the image height.\n * @param {number=} opt_sx Source box x coordinate. Used to select a portion of\n * the source image to draw. Defaults to 0.\n * @param {number=} opt_sy Source box y coordinate. Used to select a portion of\n * the source image to draw. Defaults to 0.\n * @param {number=} opt_sw Source box width. Used to select a portion of\n * the source image to draw. Defaults to the full image width.\n * @param {number=} opt_sh Source box height. Used to select a portion of\n * the source image to draw. Defaults to the full image height.\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.drawImage = function(\n image, dx, dy, opt_dw, opt_dh, opt_sx, opt_sy, opt_sw, opt_sh) {};\n\n/**\n * @param {number} sw\n * @param {number} sh\n * @return {!ImageData}\n * @throws {Error}\n * @nosideeffects\n */\nBaseRenderingContext2D.prototype.createImageData = function(sw, sh) {};\n\n/**\n * @param {number} sx\n * @param {number} sy\n * @param {number} sw\n * @param {number} sh\n * @return {!ImageData}\n * @throws {Error}\n */\nBaseRenderingContext2D.prototype.getImageData = function(sx, sy, sw, sh) {};\n\n/**\n * @param {ImageData} imagedata\n * @param {number} dx\n * @param {number} dy\n * @param {number=} opt_dirtyX\n * @param {number=} opt_dirtyY\n * @param {number=} opt_dirtyWidth\n * @param {number=} opt_dirtyHeight\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.putImageData = function(imagedata, dx, dy,\n opt_dirtyX, opt_dirtyY, opt_dirtyWidth, opt_dirtyHeight) {};\n\n/**\n * Note: WebKit only\n * @param {number|string=} opt_a\n * @param {number=} opt_b\n * @param {number=} opt_c\n * @param {number=} opt_d\n * @param {number=} opt_e\n * @see http://developer.apple.com/library/safari/#documentation/appleapplications/reference/WebKitDOMRef/CanvasRenderingContext2D_idl/Classes/CanvasRenderingContext2D/index.html\n * @return {undefined}\n * @deprecated\n */\nBaseRenderingContext2D.prototype.setFillColor = function(\n opt_a, opt_b, opt_c, opt_d, opt_e) {};\n\n/**\n * Note: WebKit only\n * @param {number|string=} opt_a\n * @param {number=} opt_b\n * @param {number=} opt_c\n * @param {number=} opt_d\n * @param {number=} opt_e\n * @see http://developer.apple.com/library/safari/#documentation/appleapplications/reference/WebKitDOMRef/CanvasRenderingContext2D_idl/Classes/CanvasRenderingContext2D/index.html\n * @return {undefined}\n * @deprecated\n */\nBaseRenderingContext2D.prototype.setStrokeColor = function(\n opt_a, opt_b, opt_c, opt_d, opt_e) {};\n\n/**\n * @return {!Array}\n * @override\n */\nBaseRenderingContext2D.prototype.getLineDash = function() {};\n\n/**\n * @param {Array} segments\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.setLineDash = function(segments) {};\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.fillColor;\n\n/**\n * @type {string|!CanvasGradient|!CanvasPattern}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#fill-and-stroke-styles:dom-context-2d-fillstyle\n * @implicitCast\n */\nBaseRenderingContext2D.prototype.fillStyle;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.font;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.globalAlpha;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.globalCompositeOperation;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.lineWidth;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.lineCap;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.lineJoin;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.miterLimit;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.shadowBlur;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.shadowColor;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.shadowOffsetX;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.shadowOffsetY;\n\n/** @type {boolean} */\nBaseRenderingContext2D.prototype.imageSmoothingEnabled;\n\n/**\n * @type {string|!CanvasGradient|!CanvasPattern}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#fill-and-stroke-styles:dom-context-2d-strokestyle\n * @implicitCast\n */\nBaseRenderingContext2D.prototype.strokeStyle;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.strokeColor;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.textAlign;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.textBaseline;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.lineDashOffset;\n\n/**\n * @constructor\n * @extends {BaseRenderingContext2D}\n * @see http://www.w3.org/TR/2dcontext/#canvasrenderingcontext2d\n */\nfunction CanvasRenderingContext2D() {}\n\n/** @const {!HTMLCanvasElement} */\nCanvasRenderingContext2D.prototype.canvas;\n\n/**\n * @constructor\n * @extends {BaseRenderingContext2D}\n * @see http://www.w3.org/TR/2dcontext/#canvasrenderingcontext2d\n */\nfunction OffscreenCanvasRenderingContext2D() {}\n\n/** @const {!OffscreenCanvas} */\nOffscreenCanvasRenderingContext2D.prototype.canvas;\n\n/**\n * @constructor\n */\nfunction CanvasGradient() {}\n\n/**\n * @param {number} offset\n * @param {string} color\n * @return {undefined}\n */\nCanvasGradient.prototype.addColorStop = function(offset, color) {};\n\n/**\n * @constructor\n */\nfunction CanvasPattern() {}\n\n/**\n * @constructor\n */\nfunction TextMetrics() {}\n\n/** @const {number} */\nTextMetrics.prototype.width;\n\n/**\n * @param {!Uint8ClampedArray|number} dataOrWidth In the first form, this is the\n * array of pixel data. In the second form, this is the image width.\n * @param {number} widthOrHeight In the first form, this is the image width. In\n * the second form, this is the image height.\n * @param {number=} opt_height In the first form, this is the optional image\n * height. The second form omits this argument.\n * @see https://html.spec.whatwg.org/multipage/scripting.html#imagedata\n * @constructor\n */\nfunction ImageData(dataOrWidth, widthOrHeight, opt_height) {}\n\n/** @const {!Uint8ClampedArray} */\nImageData.prototype.data;\n\n/** @const {number} */\nImageData.prototype.width;\n\n/** @const {number} */\nImageData.prototype.height;\n\n/**\n * @see https://www.w3.org/TR/html51/webappapis.html#webappapis-images\n * @interface\n */\nfunction ImageBitmap() {}\n\n/**\n * @const {number}\n */\nImageBitmap.prototype.width;\n\n/**\n * @const {number}\n */\nImageBitmap.prototype.height;\n\n/**\n * @typedef {{\n * imageOrientation: (string|undefined),\n * premultiplyAlpha: (string|undefined),\n * colorSpaceConversion: (string|undefined),\n * resizeWidth: (number|undefined),\n * resizeHeight: (number|undefined),\n * resizeQuality: (string|undefined)\n * }}\n * @see https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#images-2\n */\nvar ImageBitmapOptions;\n\n/**\n * @param {(!HTMLCanvasElement|!Blob|!HTMLVideoElement|!HTMLImageElement|!ImageBitmap|!CanvasRenderingContext2D|!ImageData)}\n * image\n * @param {(number|!ImageBitmapOptions)=} sxOrOptions\n * @param {number=} sy\n * @param {number=} sw\n * @param {number=} sh\n * @param {!ImageBitmapOptions=} options\n * @return {!Promise}\n * @see * https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#dom-createimagebitmap\n */\nfunction createImageBitmap(image, sxOrOptions, sy, sw, sh, options) {}\n\n\n/**\n * @constructor\n */\nfunction ClientInformation() {}\n\n/** @type {boolean} */\nClientInformation.prototype.onLine;\n\n/**\n * @param {string} protocol\n * @param {string} uri\n * @param {string} title\n * @return {undefined}\n */\nClientInformation.prototype.registerProtocolHandler = function(\n protocol, uri, title) {};\n\n/**\n * @param {string} mimeType\n * @param {string} uri\n * @param {string} title\n * @return {undefined}\n */\nClientInformation.prototype.registerContentHandler = function(\n mimeType, uri, title) {};\n\n// HTML5 Database objects\n/**\n * @constructor\n */\nfunction Database() {}\n\n/**\n * @type {string}\n */\nDatabase.prototype.version;\n\n/**\n * @param {function(!SQLTransaction) : void} callback\n * @param {(function(!SQLError) : void)=} opt_errorCallback\n * @param {Function=} opt_Callback\n * @return {undefined}\n */\nDatabase.prototype.transaction = function(\n callback, opt_errorCallback, opt_Callback) {};\n\n/**\n * @param {function(!SQLTransaction) : void} callback\n * @param {(function(!SQLError) : void)=} opt_errorCallback\n * @param {Function=} opt_Callback\n * @return {undefined}\n */\nDatabase.prototype.readTransaction = function(\n callback, opt_errorCallback, opt_Callback) {};\n\n/**\n * @param {string} oldVersion\n * @param {string} newVersion\n * @param {function(!SQLTransaction) : void} callback\n * @param {function(!SQLError) : void} errorCallback\n * @param {Function} successCallback\n * @return {undefined}\n */\nDatabase.prototype.changeVersion = function(\n oldVersion, newVersion, callback, errorCallback, successCallback) {};\n\n/**\n * @interface\n */\nfunction DatabaseCallback() {}\n\n/**\n * @param {!Database} db\n * @return {undefined}\n */\nDatabaseCallback.prototype.handleEvent = function(db) {};\n\n/**\n * @constructor\n */\nfunction SQLError() {}\n\n/**\n * @type {number}\n */\nSQLError.prototype.code;\n\n/**\n * @type {string}\n */\nSQLError.prototype.message;\n\n/**\n * @constructor\n */\nfunction SQLTransaction() {}\n\n/**\n * @param {string} sqlStatement\n * @param {Array<*>=} opt_queryArgs\n * @param {SQLStatementCallback=} opt_callback\n * @param {(function(!SQLTransaction, !SQLError) : (boolean|void))=}\n * opt_errorCallback\n * @return {undefined}\n */\nSQLTransaction.prototype.executeSql = function(\n sqlStatement, opt_queryArgs, opt_callback, opt_errorCallback) {};\n\n/**\n * @typedef {(function(!SQLTransaction, !SQLResultSet) : void)}\n */\nvar SQLStatementCallback;\n\n/**\n * @constructor\n */\nfunction SQLResultSet() {}\n\n/**\n * @type {number}\n */\nSQLResultSet.prototype.insertId;\n\n/**\n * @type {number}\n */\nSQLResultSet.prototype.rowsAffected;\n\n/**\n * @type {!SQLResultSetRowList}\n */\nSQLResultSet.prototype.rows;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/webdatabase/#sqlresultsetrowlist\n */\nfunction SQLResultSetRowList() {}\n\n/**\n * @type {number}\n */\nSQLResultSetRowList.prototype.length;\n\n/**\n * @param {number} index\n * @return {Object}\n * @nosideeffects\n */\nSQLResultSetRowList.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @param {string} version\n * @param {string} description\n * @param {number} size\n * @param {(DatabaseCallback|function(Database))=} opt_callback\n * @return {!Database}\n */\nfunction openDatabase(name, version, description, size, opt_callback) {}\n\n/**\n * @param {string} name\n * @param {string} version\n * @param {string} description\n * @param {number} size\n * @param {(DatabaseCallback|function(Database))=} opt_callback\n * @return {!Database}\n */\nWindow.prototype.openDatabase =\n function(name, version, description, size, opt_callback) {};\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/embedded-content-0.html#dom-img-complete\n */\nHTMLImageElement.prototype.complete;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/html5/embedded-content-0.html#dom-img-naturalwidth\n */\nHTMLImageElement.prototype.naturalWidth;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/html5/embedded-content-0.html#dom-img-naturalheight\n */\nHTMLImageElement.prototype.naturalHeight;\n\n/**\n * @type {string}\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/embedded-content-1.html#attr-img-crossorigin\n */\nHTMLImageElement.prototype.crossOrigin;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-currentsrc\n */\nHTMLImageElement.prototype.currentSrc;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/images.html#image-decoding-hint\n */\nHTMLImageElement.prototype.decoding;\n\n/**\n * @return {!Promise}\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-decode\n */\nHTMLImageElement.prototype.decode;\n\n\n/**\n * This is a superposition of the Window and Worker postMessage methods.\n * @param {*} message\n * @param {(string|!Array)=} opt_targetOriginOrTransfer\n * @param {(string|!Array|!Array)=}\n * opt_targetOriginOrPortsOrTransfer\n * @return {void}\n */\nfunction postMessage(message, opt_targetOriginOrTransfer,\n opt_targetOriginOrPortsOrTransfer) {}\n\n/**\n * @param {*} message\n * @param {string=} targetOrigin\n * @param {(!Array)=} transfer\n * @return {void}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Window/postMessage\n */\nWindow.prototype.postMessage = function(message, targetOrigin, transfer) {};\n\n/**\n * The postMessage method (as implemented in Opera).\n * @param {string} message\n */\nDocument.prototype.postMessage = function(message) {};\n\n/**\n * Document head accessor.\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dom.html#the-head-element-0\n * @type {HTMLHeadElement}\n */\nDocument.prototype.head;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/dom.html#current-document-readiness\n */\nDocument.prototype.readyState;\n\n/**\n * @see https://html.spec.whatwg.org/#application-cache-api\n * @constructor\n * @implements {EventTarget}\n */\nfunction ApplicationCache() {}\n\n/** @override */\nApplicationCache.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nApplicationCache.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nApplicationCache.prototype.dispatchEvent = function(evt) {};\n\n/**\n * The object isn't associated with an application cache. This can occur if the\n * update process fails and there is no previous cache to revert to, or if there\n * is no manifest file.\n * @const {number}\n */\nApplicationCache.prototype.UNCACHED;\n\n/**\n * The object isn't associated with an application cache. This can occur if the\n * update process fails and there is no previous cache to revert to, or if there\n * is no manifest file.\n * @const {number}\n */\nApplicationCache.UNCACHED;\n\n/**\n * The cache is idle.\n * @const {number}\n */\nApplicationCache.prototype.IDLE;\n\n/**\n * The cache is idle.\n * @const {number}\n */\nApplicationCache.IDLE;\n\n/**\n * The update has started but the resources are not downloaded yet - for\n * example, this can happen when the manifest file is fetched.\n * @const {number}\n */\nApplicationCache.prototype.CHECKING;\n\n/**\n * The update has started but the resources are not downloaded yet - for\n * example, this can happen when the manifest file is fetched.\n * @const {number}\n */\nApplicationCache.CHECKING;\n\n/**\n * The resources are being downloaded into the cache.\n * @const {number}\n */\nApplicationCache.prototype.DOWNLOADING;\n\n/**\n * The resources are being downloaded into the cache.\n * @const {number}\n */\nApplicationCache.DOWNLOADING;\n\n/**\n * Resources have finished downloading and the new cache is ready to be used.\n * @const {number}\n */\nApplicationCache.prototype.UPDATEREADY;\n\n/**\n * Resources have finished downloading and the new cache is ready to be used.\n * @const {number}\n */\nApplicationCache.UPDATEREADY;\n\n/**\n * The cache is obsolete.\n * @const {number}\n */\nApplicationCache.prototype.OBSOLETE;\n\n/**\n * The cache is obsolete.\n * @const {number}\n */\nApplicationCache.OBSOLETE;\n\n/**\n * The current status of the application cache.\n * @type {number}\n */\nApplicationCache.prototype.status;\n\n/**\n * Sent when the update process finishes for the first time; that is, the first\n * time an application cache is saved.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.oncached;\n\n/**\n * Sent when the cache update process begins.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onchecking;\n\n/**\n * Sent when the update process begins downloading resources in the manifest\n * file.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.ondownloading;\n\n/**\n * Sent when an error occurs.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onerror;\n\n/**\n * Sent when the update process finishes but the manifest file does not change.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onnoupdate;\n\n/**\n * Sent when each resource in the manifest file begins to download.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onprogress;\n\n/**\n * Sent when there is an existing application cache, the update process\n * finishes, and there is a new application cache ready for use.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onupdateready;\n\n/**\n * Replaces the active cache with the latest version.\n * @throws {DOMException}\n * @return {undefined}\n */\nApplicationCache.prototype.swapCache = function() {};\n\n/**\n * Manually triggers the update process.\n * @throws {DOMException}\n * @return {undefined}\n */\nApplicationCache.prototype.update = function() {};\n\n/** @type {?ApplicationCache} */\nvar applicationCache;\n\n/** @type {ApplicationCache} */\nWindow.prototype.applicationCache;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/En/DOM/Worker/Functions_available_to_workers\n * @param {...!TrustedScriptURL|string} var_args\n * @return {undefined}\n */\nWindow.prototype.importScripts = function(var_args) {};\n\n/**\n * Decodes a string of data which has been encoded using base-64 encoding.\n *\n * @param {string} encodedData\n * @return {string}\n * @nosideeffects\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#dom-atob\n */\nfunction atob(encodedData) {}\n\n/**\n * @param {string} stringToEncode\n * @return {string}\n * @nosideeffects\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#dom-btoa\n */\nfunction btoa(stringToEncode) {}\n\n/**\n * @see https://developer.m0z111a.qjz9zk/En/DOM/Worker/Functions_available_to_workers\n * @param {...!TrustedScriptURL|string} var_args\n * @return {undefined}\n */\nfunction importScripts(var_args) {}\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @constructor\n * @implements {EventTarget}\n */\nfunction WebWorker() {}\n\n/** @override */\nWebWorker.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWebWorker.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nWebWorker.prototype.dispatchEvent = function(evt) {};\n\n/**\n * Stops the worker process\n * @return {undefined}\n */\nWebWorker.prototype.terminate = function() {};\n\n/**\n * Posts a message to the worker thread.\n * @param {string} message\n * @return {undefined}\n */\nWebWorker.prototype.postMessage = function(message) {};\n\n/**\n * Sent when the worker thread posts a message to its creator.\n * @type {?function(!MessageEvent<*>): void}\n */\nWebWorker.prototype.onmessage;\n\n/**\n * Sent when the worker thread encounters an error.\n * @type {?function(!ErrorEvent): void}\n */\nWebWorker.prototype.onerror;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @param {string} scriptURL\n * @param {!WorkerOptions=} opt_options\n * @constructor\n * @implements {EventTarget}\n */\nfunction Worker(scriptURL, opt_options) {}\n\n/** @override */\nWorker.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWorker.prototype.removeEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWorker.prototype.dispatchEvent = function(evt) {};\n\n/**\n * Stops the worker process\n * @return {undefined}\n */\nWorker.prototype.terminate = function() {};\n\n/**\n * Posts a message to the worker thread.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nWorker.prototype.postMessage = function(message, opt_transfer) {};\n\n/**\n * Posts a message to the worker thread.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nWorker.prototype.webkitPostMessage = function(message, opt_transfer) {};\n\n/**\n * Sent when the worker thread posts a message to its creator.\n * @type {?function(!MessageEvent<*>): void}\n */\nWorker.prototype.onmessage;\n\n/**\n * Sent when the worker thread encounters an error.\n * @type {?function(!ErrorEvent): void}\n */\nWorker.prototype.onerror;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @record\n */\nfunction WorkerOptions() {}\n\n/**\n * Defines a name for the new global environment of the worker, primarily for\n * debugging purposes.\n * @type {string|undefined}\n */\nWorkerOptions.prototype.name;\n\n/**\n * 'classic' or 'module'. Default: 'classic'.\n * Specifying 'module' ensures the worker environment supports JavaScript\n * modules.\n * @type {string|undefined}\n */\nWorkerOptions.prototype.type;\n\n// WorkerOptions.prototype.credentials is defined in fetchapi.js.\n// if type = 'module', it specifies how scriptURL is fetched.\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @param {string} scriptURL The URL of the script to run in the SharedWorker.\n * @param {string=} opt_name A name that can later be used to obtain a\n * reference to the same SharedWorker.\n * @constructor\n * @implements {EventTarget}\n */\nfunction SharedWorker(scriptURL, opt_name) {}\n\n/** @override */\nSharedWorker.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSharedWorker.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSharedWorker.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {!MessagePort}\n */\nSharedWorker.prototype.port;\n\n/**\n * Called on network errors for loading the initial script.\n * @type {?function(!ErrorEvent): void}\n */\nSharedWorker.prototype.onerror;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @see http://www.w3.org/TR/url-1/#dom-urlutilsreadonly\n * @interface\n */\nfunction WorkerLocation() {}\n\n/** @type {string} */\nWorkerLocation.prototype.href;\n\n/** @type {string} */\nWorkerLocation.prototype.origin;\n\n/** @type {string} */\nWorkerLocation.prototype.protocol;\n\n/** @type {string} */\nWorkerLocation.prototype.host;\n\n/** @type {string} */\nWorkerLocation.prototype.hostname;\n\n/** @type {string} */\nWorkerLocation.prototype.port;\n\n/** @type {string} */\nWorkerLocation.prototype.pathname;\n\n/** @type {string} */\nWorkerLocation.prototype.search;\n\n/** @type {string} */\nWorkerLocation.prototype.hash;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @interface\n * @extends {EventTarget}\n */\nfunction WorkerGlobalScope() {}\n\n/** @type {!WorkerGlobalScope} */\nWorkerGlobalScope.prototype.self;\n\n/** @type {!WorkerLocation} */\nWorkerGlobalScope.prototype.location;\n\n/**\n * Closes the worker represented by this WorkerGlobalScope.\n * @return {undefined}\n */\nWorkerGlobalScope.prototype.close = function() {};\n\n/**\n * Sent when the worker encounters an error.\n * @type {?function(string, string, number, number, !Error): void}\n */\nWorkerGlobalScope.prototype.onerror;\n\n/**\n * Sent when the worker goes offline.\n * @type {?function(!Event): void}\n */\nWorkerGlobalScope.prototype.onoffline;\n\n/**\n * Sent when the worker goes online.\n * @type {?function(!Event): void}\n */\nWorkerGlobalScope.prototype.ononline;\n\n/** @type {!WorkerPerformance} */\nWorkerGlobalScope.prototype.performance;\n\n/** @type {!WorkerNavigator} */\nWorkerGlobalScope.prototype.navigator;\n\n/**\n * Worker postMessage method.\n * @param {*} message\n * @param {(!Array)=} transfer\n * @return {void}\n */\nWorkerGlobalScope.prototype.postMessage = function(message, transfer) {};\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @interface\n * @extends {WorkerGlobalScope}\n */\nfunction DedicatedWorkerGlobalScope() {}\n\n/**\n * Posts a message to creator of this worker.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nDedicatedWorkerGlobalScope.prototype.postMessage =\n function(message, opt_transfer) {};\n\n/**\n * Posts a message to creator of this worker.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nDedicatedWorkerGlobalScope.prototype.webkitPostMessage =\n function(message, opt_transfer) {};\n\n/**\n * Sent when the creator posts a message to this worker.\n * @type {?function(!MessageEvent<*>): void}\n */\nDedicatedWorkerGlobalScope.prototype.onmessage;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @interface\n * @extends {WorkerGlobalScope}\n */\nfunction SharedWorkerGlobalScope() {}\n\n/** @type {string} */\nSharedWorkerGlobalScope.prototype.name;\n\n/**\n * Sent when a connection to this worker is opened.\n * @type {?function(!Event)}\n */\nSharedWorkerGlobalScope.prototype.onconnect;\n\n/** @type {!Array|undefined} */\nHTMLElement.observedAttributes;\n\n/**\n * @param {!Document} oldDocument\n * @param {!Document} newDocument\n */\nHTMLElement.prototype.adoptedCallback = function(oldDocument, newDocument) {};\n\n/**\n * @param {!{mode: string}} options\n * @return {!ShadowRoot}\n */\nHTMLElement.prototype.attachShadow = function(options) {};\n\n/**\n * @param {string} attributeName\n * @param {?string} oldValue\n * @param {?string} newValue\n * @param {?string} namespace\n */\nHTMLElement.prototype.attributeChangedCallback = function(attributeName, oldValue, newValue, namespace) {};\n\n/** @type {function()|undefined} */\nHTMLElement.prototype.connectedCallback;\n\n/** @type {Element} */\nHTMLElement.prototype.contextMenu;\n\n/** @type {function()|undefined} */\nHTMLElement.prototype.disconnectedCallback;\n\n/** @type {boolean} */\nHTMLElement.prototype.draggable;\n\n/**\n * This is actually a DOMSettableTokenList property. However since that\n * interface isn't currently defined and no known browsers implement this\n * feature, just define the property for now.\n *\n * @const {Object}\n */\nHTMLElement.prototype.dropzone;\n\n/** @type {boolean} */\nHTMLElement.prototype.hidden;\n\n/** @type {boolean} */\nHTMLElement.prototype.spellcheck;\n\n/**\n * @see https://dom.spec.whatwg.org/#dictdef-getrootnodeoptions\n * @typedef {{\n * composed: boolean\n * }}\n */\nvar GetRootNodeOptions;\n\n/**\n * @see https://dom.spec.whatwg.org/#dom-node-getrootnode\n * @param {GetRootNodeOptions=} opt_options\n * @return {!Node}\n */\nNode.prototype.getRootNode = function(opt_options) {};\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @return {!ShadowRoot}\n */\nHTMLElement.prototype.createShadowRoot;\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @return {!ShadowRoot}\n */\nHTMLElement.prototype.webkitCreateShadowRoot;\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/\n * @type {ShadowRoot}\n */\nHTMLElement.prototype.shadowRoot;\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/\n * @return {!NodeList}\n */\nHTMLElement.prototype.getDestinationInsertionPoints = function() {};\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @type {function()}\n */\nHTMLElement.prototype.createdCallback;\n\n/**\n * @see http://w3c.github.io/webcomponents/explainer/#lifecycle-callbacks\n * @type {function()}\n */\nHTMLElement.prototype.attachedCallback;\n\n/**\n * @see http://w3c.github.io/webcomponents/explainer/#lifecycle-callbacks\n * @type {function()}\n */\nHTMLElement.prototype.detachedCallback;\n\n/**\n * Cryptographic nonce used by Content Security Policy.\n * @see https://html.spec.whatwg.org/multipage/dom.html#elements-in-the-dom:noncedelement\n * @type {?string}\n */\nHTMLElement.prototype.nonce;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.download;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.hash;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.host;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.hostname;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.pathname;\n\n/**\n * The 'ping' attribute is known to be supported in recent versions (as of\n * mid-2014) of Chrome, Safari, and Firefox, and is not supported in any\n * current version of Internet Explorer.\n *\n * @type {string}\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#hyperlink-auditing\n */\nHTMLAnchorElement.prototype.ping;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.port;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.protocol;\n\n/** @type {!DOMTokenList} */\nHTMLAnchorElement.prototype.relList;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.search;\n\n/** @type {string} */\nHTMLAreaElement.prototype.download;\n\n/**\n * @type {string}\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#hyperlink-auditing\n */\nHTMLAreaElement.prototype.ping;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/html-markup/iframe.html#iframe.attrs.srcdoc\n */\nHTMLIFrameElement.prototype.srcdoc;\n\n/**\n * @type {?DOMTokenList}\n * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-iframe-element.html#attr-iframe-sandbox\n */\nHTMLIFrameElement.prototype.sandbox;\n\n/**\n * @type {Window}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/HTMLIFrameElement/contentWindow\n */\nHTMLIFrameElement.prototype.contentWindow;\n\n/** @type {string} */\nHTMLInputElement.prototype.autocomplete;\n\n/** @type {string} */\nHTMLInputElement.prototype.dirname;\n\n/** @type {FileList} */\nHTMLInputElement.prototype.files;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#dom-input-indeterminate\n */\nHTMLInputElement.prototype.indeterminate;\n\n/** @type {string} */\nHTMLInputElement.prototype.list;\n\n/** @implicitCast @type {string} */\nHTMLInputElement.prototype.max;\n\n/** @implicitCast @type {string} */\nHTMLInputElement.prototype.min;\n\n/** @type {string} */\nHTMLInputElement.prototype.pattern;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.multiple;\n\n/** @type {string} */\nHTMLInputElement.prototype.placeholder;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.required;\n\n/** @implicitCast @type {string} */\nHTMLInputElement.prototype.step;\n\n/** @type {Date} */\nHTMLInputElement.prototype.valueAsDate;\n\n/** @type {number} */\nHTMLInputElement.prototype.valueAsNumber;\n\n/**\n * Changes the form control's value by the value given in the step attribute\n * multiplied by opt_n.\n * @param {number=} opt_n step multiplier. Defaults to 1.\n * @return {undefined}\n */\nHTMLInputElement.prototype.stepDown = function(opt_n) {};\n\n/**\n * Changes the form control's value by the value given in the step attribute\n * multiplied by opt_n.\n * @param {number=} opt_n step multiplier. Defaults to 1.\n * @return {undefined}\n */\nHTMLInputElement.prototype.stepUp = function(opt_n) {};\n\n\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/HTMLMediaElement\n */\nfunction HTMLMediaElement() {}\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_empty\n * @const {number}\n */\nHTMLMediaElement.NETWORK_EMPTY;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_empty\n * @const {number}\n */\nHTMLMediaElement.prototype.NETWORK_EMPTY;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_idle\n * @const {number}\n */\nHTMLMediaElement.NETWORK_IDLE;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_idle\n * @const {number}\n */\nHTMLMediaElement.prototype.NETWORK_IDLE;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_loading\n * @const {number}\n */\nHTMLMediaElement.NETWORK_LOADING;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_loading\n * @const {number}\n */\nHTMLMediaElement.prototype.NETWORK_LOADING;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_no_source\n * @const {number}\n */\nHTMLMediaElement.NETWORK_NO_SOURCE;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_no_source\n * @const {number}\n */\nHTMLMediaElement.prototype.NETWORK_NO_SOURCE;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_nothing\n * @const {number}\n */\nHTMLMediaElement.HAVE_NOTHING;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_nothing\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_NOTHING;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_metadata\n * @const {number}\n */\nHTMLMediaElement.HAVE_METADATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_metadata\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_METADATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_current_data\n * @const {number}\n */\nHTMLMediaElement.HAVE_CURRENT_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_current_data\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_CURRENT_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_future_data\n * @const {number}\n */\nHTMLMediaElement.HAVE_FUTURE_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_future_data\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_FUTURE_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_enough_data\n * @const {number}\n */\nHTMLMediaElement.HAVE_ENOUGH_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_enough_data\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_ENOUGH_DATA;\n\n/** @type {MediaError} */\nHTMLMediaElement.prototype.error;\n\n/** @type {string} @implicitCast */\nHTMLMediaElement.prototype.src;\n\n/** @type {string} */\nHTMLMediaElement.prototype.currentSrc;\n\n/** @type {number} */\nHTMLMediaElement.prototype.networkState;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.autobuffer;\n\n/** @type {!TimeRanges} */\nHTMLMediaElement.prototype.buffered;\n\n/** @type {?MediaStream} */\nHTMLMediaElement.prototype.srcObject;\n\n/**\n * Loads the media element.\n * @return {undefined}\n */\nHTMLMediaElement.prototype.load = function() {};\n\n/**\n * @param {string} type Type of the element in question in question.\n * @return {string} Whether it can play the type.\n * @nosideeffects\n */\nHTMLMediaElement.prototype.canPlayType = function(type) {};\n\n/** Event handlers */\n\n/** @type {?function(Event)} */\nHTMLMediaElement.prototype.onabort;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.oncanplay;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.oncanplaythrough;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.ondurationchange;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onemptied;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onended;\n\n/** @type {?function(Event)} */\nHTMLMediaElement.prototype.onerror;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onloadeddata;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onloadedmetadata;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onloadstart;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onpause;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onplay;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onplaying;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onprogress;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onratechange;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onseeked;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onseeking;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onstalled;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onsuspend;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.ontimeupdate;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onvolumechange;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onwaiting;\n\n/** @type {?function(Event)} */\nHTMLImageElement.prototype.onload;\n\n/** @type {?function(Event)} */\nHTMLImageElement.prototype.onerror;\n\n/** @type {string} */\nHTMLMediaElement.prototype.preload;\n\n/** @type {number} */\nHTMLMediaElement.prototype.readyState;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.seeking;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-crossorigin\n */\nHTMLMediaElement.prototype.crossOrigin;\n\n/**\n * The current time, in seconds.\n * @type {number}\n */\nHTMLMediaElement.prototype.currentTime;\n\n/**\n * The absolute timeline offset.\n * @return {!Date}\n */\nHTMLMediaElement.prototype.getStartDate = function() {};\n\n/**\n * The length of the media in seconds.\n * @type {number}\n */\nHTMLMediaElement.prototype.duration;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.paused;\n\n/** @type {number} */\nHTMLMediaElement.prototype.defaultPlaybackRate;\n\n/** @type {number} */\nHTMLMediaElement.prototype.playbackRate;\n\n/** @type {TimeRanges} */\nHTMLMediaElement.prototype.played;\n\n/** @type {TimeRanges} */\nHTMLMediaElement.prototype.seekable;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.ended;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.autoplay;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.loop;\n\n/**\n * Starts playing the media.\n * @return {?Promise} This is a *nullable* Promise on purpose unlike\n * the HTML5 spec because supported older browsers (incl. Smart TVs) don't\n * return a Promise.\n */\nHTMLMediaElement.prototype.play = function() {};\n\n/**\n * Pauses the media.\n * @return {undefined}\n */\nHTMLMediaElement.prototype.pause = function() {};\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.controls;\n\n/**\n * The audio volume, from 0.0 (silent) to 1.0 (loudest).\n * @type {number}\n */\nHTMLMediaElement.prototype.volume;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.muted;\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dom-media-addtexttrack\n * @param {string} kind Kind of the text track.\n * @param {string=} opt_label Label of the text track.\n * @param {string=} opt_language Language of the text track.\n * @return {!TextTrack} TextTrack object added to the media element.\n */\nHTMLMediaElement.prototype.addTextTrack =\n function(kind, opt_label, opt_language) {};\n\n/** @type {!TextTrackList} */\nHTMLMediaElement.prototype.textTracks;\n\n/**\n * The ID of the audio device through which output is being delivered, or an\n * empty string if using the default device.\n *\n * Implemented as a draft spec in Chrome 49+.\n *\n * @see https://w3c.github.io/mediacapture-output/#htmlmediaelement-extensions\n * @type {string}\n */\nHTMLMediaElement.prototype.sinkId;\n\n/**\n * Sets the audio device through which output should be delivered.\n *\n * Implemented as a draft spec in Chrome 49+.\n *\n * @param {string} sinkId The ID of the audio output device, or empty string\n * for default device.\n *\n * @see https://w3c.github.io/mediacapture-output/#htmlmediaelement-extensions\n * @return {!Promise}\n */\nHTMLMediaElement.prototype.setSinkId = function(sinkId) {};\n\n\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see https://html.spec.whatwg.org/multipage/dom.html#htmlunknownelement\n * @see https://html.spec.whatwg.org/multipage/scripting.html#customized-built-in-element-restrictions\n * @see https://w3c.github.io/webcomponents/spec/custom/#custom-elements-api\n */\nfunction HTMLUnknownElement() {}\n\n\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/\n * @return {!NodeList}\n */\nText.prototype.getDestinationInsertionPoints = function() {};\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttracklist\n * @constructor\n * @implements {IArrayLike}\n */\nfunction TextTrackList() {}\n\n/** @type {number} */\nTextTrackList.prototype.length;\n\n/**\n * @param {string} id\n * @return {TextTrack}\n */\nTextTrackList.prototype.getTrackById = function(id) {};\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrack\n * @constructor\n * @implements {EventTarget}\n */\nfunction TextTrack() {}\n\n/**\n * @param {TextTrackCue} cue\n * @return {undefined}\n */\nTextTrack.prototype.addCue = function(cue) {};\n\n/**\n * @param {TextTrackCue} cue\n * @return {undefined}\n */\nTextTrack.prototype.removeCue = function(cue) {};\n\n/**\n * @const {TextTrackCueList}\n */\nTextTrack.prototype.activeCues;\n\n/**\n * @const {TextTrackCueList}\n */\nTextTrack.prototype.cues;\n\n/**\n * @type {string}\n */\nTextTrack.prototype.mode;\n\n/** @override */\nTextTrack.prototype.addEventListener = function(\n type, listener, opt_useCapture) {};\n\n/** @override */\nTextTrack.prototype.dispatchEvent = function(evt) {};\n\n/** @override */\nTextTrack.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrackcuelist\n * @constructor\n * @implements {IArrayLike}\n */\nfunction TextTrackCueList() {}\n\n/** @const {number} */\nTextTrackCueList.prototype.length;\n\n/**\n * @param {string} id\n * @return {TextTrackCue}\n */\nTextTrackCueList.prototype.getCueById = function(id) {};\n\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrackcue\n * @constructor\n * @param {number} startTime\n * @param {number} endTime\n * @param {string} text\n */\nfunction TextTrackCue(startTime, endTime, text) {}\n\n/** @type {string} */\nTextTrackCue.prototype.id;\n\n/** @type {number} */\nTextTrackCue.prototype.startTime;\n\n/** @type {number} */\nTextTrackCue.prototype.endTime;\n\n/** @type {string} */\nTextTrackCue.prototype.text;\n\n\n\n/**\n * @see https://w3c.github.io/webvtt/#vttregion\n * @constructor\n */\nfunction VTTRegion() {}\n\n/** @type {string} */\nVTTRegion.prototype.id;\n\n/** @type {number} */\nVTTRegion.prototype.width;\n\n/** @type {number} */\nVTTRegion.prototype.lines;\n\n/** @type {number} */\nVTTRegion.prototype.regionAnchorX;\n\n/** @type {number} */\nVTTRegion.prototype.regionAnchorY;\n\n/** @type {number} */\nVTTRegion.prototype.viewportAnchorX;\n\n/** @type {number} */\nVTTRegion.prototype.viewportAnchorY;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-scrollsetting\n * @type {string}\n */\nVTTRegion.prototype.scroll;\n\n\n\n/**\n * @see http://dev.w3.org/html5/webvtt/#the-vttcue-interface\n * @constructor\n * @extends {TextTrackCue}\n * @param {number} startTime\n * @param {number} endTime\n * @param {string} text\n */\nfunction VTTCue(startTime, endTime, text) {}\n\n/** @type {?VTTRegion} */\nVTTCue.prototype.region;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-directionsetting\n * @type {string}\n */\nVTTCue.prototype.vertical;\n\n/** @type {boolean} */\nVTTCue.prototype.snapToLines;\n\n/** @type {(number|string)} */\nVTTCue.prototype.line;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-linealignsetting\n * @type {string}\n */\nVTTCue.prototype.lineAlign;\n\n/** @type {(number|string)} */\nVTTCue.prototype.position;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-positionalignsetting\n * @type {string}\n */\nVTTCue.prototype.positionAlign;\n\n/** @type {number} */\nVTTCue.prototype.size;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-alignsetting\n * @type {string}\n */\nVTTCue.prototype.align;\n\n/** @type {string} */\nVTTCue.prototype.text;\n\n/** @return {!DocumentFragment} */\nVTTCue.prototype.getCueAsHTML = function() {};\n\n\n/**\n * @constructor\n * @extends {HTMLMediaElement}\n */\nfunction HTMLAudioElement() {}\n\n/**\n * @constructor\n * @extends {HTMLMediaElement}\n * The webkit-prefixed attributes are defined in\n * https://cs.ch40m1um.qjz9zk/chromium/src/third_party/WebKit/Source/core/html/media/HTMLMediaElement.idl\n */\nfunction HTMLVideoElement() {}\n\n/**\n * Starts displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitEnterFullscreen = function() {};\n\n/**\n * Starts displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitEnterFullScreen = function() {};\n\n/**\n * Stops displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitExitFullscreen = function() {};\n\n/**\n * Stops displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitExitFullScreen = function() {};\n\n/** @type {number} */\nHTMLVideoElement.prototype.width;\n\n/** @type {number} */\nHTMLVideoElement.prototype.height;\n\n/** @type {number} */\nHTMLVideoElement.prototype.videoWidth;\n\n/** @type {number} */\nHTMLVideoElement.prototype.videoHeight;\n\n/** @type {string} */\nHTMLVideoElement.prototype.poster;\n\n/** @type {boolean} */\nHTMLVideoElement.prototype.webkitSupportsFullscreen;\n\n/** @type {boolean} */\nHTMLVideoElement.prototype.webkitDisplayingFullscreen;\n\n/** @type {number} */\nHTMLVideoElement.prototype.webkitDecodedFrameCount;\n\n/** @type {number} */\nHTMLVideoElement.prototype.webkitDroppedFrameCount;\n\n/**\n * @typedef {{\n * creationTime: number,\n * totalVideoFrames: number,\n * droppedVideoFrames: number,\n * corruptedVideoFrames: number,\n * totalFrameDelay: number\n * }}\n */\nvar VideoPlaybackQuality;\n\n/**\n * @see https://w3c.github.io/media-source/#htmlvideoelement-extensions\n * @return {!VideoPlaybackQuality} Stats about the current playback.\n */\nHTMLVideoElement.prototype.getVideoPlaybackQuality = function() {};\n\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/media.html#error-codes\n */\nfunction MediaError() {}\n\n/** @type {number} */\nMediaError.prototype.code;\n\n/** @type {string} */\nMediaError.prototype.message;\n\n/**\n * The fetching process for the media resource was aborted by the user agent at\n * the user's request.\n * @const {number}\n */\nMediaError.MEDIA_ERR_ABORTED;\n\n/**\n * A network error of some description caused the user agent to stop fetching\n * the media resource, after the resource was established to be usable.\n * @const {number}\n */\nMediaError.MEDIA_ERR_NETWORK;\n\n/**\n * An error of some description occurred while decoding the media resource,\n * after the resource was established to be usable.\n * @const {number}\n */\nMediaError.MEDIA_ERR_DECODE;\n\n/**\n * The media resource indicated by the src attribute was not suitable.\n * @const {number}\n */\nMediaError.MEDIA_ERR_SRC_NOT_SUPPORTED;\n\n// HTML5 MessageChannel\n/**\n * @see http://dev.w3.org/html5/spec/comms.html#messagechannel\n * @constructor\n */\nfunction MessageChannel() {}\n\n/**\n * Returns the first port.\n * @type {!MessagePort}\n */\nMessageChannel.prototype.port1;\n\n/**\n * Returns the second port.\n * @type {!MessagePort}\n */\nMessageChannel.prototype.port2;\n\n// HTML5 MessagePort\n/**\n * @see http://dev.w3.org/html5/spec/comms.html#messageport\n * @constructor\n * @implements {EventTarget}\n * @implements {Transferable}\n */\nfunction MessagePort() {}\n\n/** @override */\nMessagePort.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nMessagePort.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nMessagePort.prototype.dispatchEvent = function(evt) {};\n\n\n/**\n * Posts a message through the channel, optionally with the given\n * Array of Transferables.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nMessagePort.prototype.postMessage = function(message, opt_transfer) {\n};\n\n/**\n * Begins dispatching messages received on the port.\n * @return {undefined}\n */\nMessagePort.prototype.start = function() {};\n\n/**\n * Disconnects the port, so that it is no longer active.\n * @return {undefined}\n */\nMessagePort.prototype.close = function() {};\n\n/**\n * TODO(blickly): Change this to MessageEvent<*> and add casts as needed\n * @type {?function(!MessageEvent): void}\n */\nMessagePort.prototype.onmessage;\n\n// HTML5 MessageEvent class\n/**\n * @typedef {Window|MessagePort|ServiceWorker}\n * @see https://html.spec.whatwg.org/multipage/comms.html#messageeventsource\n */\nvar MessageEventSource;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @template T\n * @see https://html.spec.whatwg.org/multipage/comms.html#messageeventinit\n */\nfunction MessageEventInit() {}\n\n/** @type {T|undefined} */\nMessageEventInit.prototype.data;\n\n/** @type {(string|undefined)} */\nMessageEventInit.prototype.origin;\n\n/** @type {(string|undefined)} */\nMessageEventInit.prototype.lastEventId;\n\n/** @type {(?MessageEventSource|undefined)} */\nMessageEventInit.prototype.source;\n\n/** @type {(!Array|undefined)} */\nMessageEventInit.prototype.ports;\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/comms.html#messageevent\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {MessageEventInit=} opt_eventInitDict\n * @template T\n */\nfunction MessageEvent(type, opt_eventInitDict) {}\n\n/**\n * The data payload of the message.\n * @type {T}\n */\nMessageEvent.prototype.data;\n\n/**\n * The origin of the message, for server-sent events and cross-document\n * messaging.\n * @type {string}\n */\nMessageEvent.prototype.origin;\n\n/**\n * The last event ID, for server-sent events.\n * @type {string}\n */\nMessageEvent.prototype.lastEventId;\n\n/**\n * The window that dispatched the event.\n * @type {Window}\n */\nMessageEvent.prototype.source;\n\n/**\n * The Array of MessagePorts sent with the message, for cross-document\n * messaging and channel messaging.\n * @type {!Array}\n */\nMessageEvent.prototype.ports;\n\n/**\n * Initializes the event in a manner analogous to the similarly-named methods in\n * the DOM Events interfaces.\n * @param {string} typeArg\n * @param {boolean=} canBubbleArg\n * @param {boolean=} cancelableArg\n * @param {T=} dataArg\n * @param {string=} originArg\n * @param {string=} lastEventIdArg\n * @param {?MessageEventSource=} sourceArg\n * @param {!Array=} portsArg\n * @return {undefined}\n */\nMessageEvent.prototype.initMessageEvent = function(typeArg, canBubbleArg,\n cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, portsArg) {};\n\n/**\n * Initializes the event in a manner analogous to the similarly-named methods in\n * the DOM Events interfaces.\n * @param {string} namespaceURI\n * @param {string=} typeArg\n * @param {boolean=} canBubbleArg\n * @param {boolean=} cancelableArg\n * @param {T=} dataArg\n * @param {string=} originArg\n * @param {string=} lastEventIdArg\n * @param {?MessageEventSource=} sourceArg\n * @param {!Array=} portsArg\n * @return {undefined}\n */\nMessageEvent.prototype.initMessageEventNS = function(namespaceURI, typeArg,\n canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg,\n portsArg) {};\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://html.spec.whatwg.org/multipage/web-sockets.html#the-closeevent-interface\n */\nfunction CloseEventInit() {}\n\n/**\n * @type {undefined|boolean}\n */\nCloseEventInit.prototype.wasClean;\n\n/**\n * @type {undefined|number}\n */\nCloseEventInit.prototype.code;\n\n/**\n * @type {undefined|string}\n */\nCloseEventInit.prototype.reason;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {!CloseEventInit=} opt_init\n */\nvar CloseEvent = function(type, opt_init) {};\n\n/**\n * @type {boolean}\n */\nCloseEvent.prototype.wasClean;\n\n/**\n * @type {number}\n */\nCloseEvent.prototype.code;\n\n/**\n * @type {string}\n */\nCloseEvent.prototype.reason;\n\n/**\n * HTML5 BroadcastChannel class.\n * @param {string} channelName\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/BroadcastChannel\n * @see https://html.spec.whatwg.org/multipage/comms.html#dom-broadcastchannel\n * @implements {EventTarget}\n * @constructor\n */\nfunction BroadcastChannel(channelName) {}\n\n/**\n * Sends the message, of any type of object, to each BroadcastChannel object\n * listening to the same channel.\n * @param {*} message\n */\nBroadcastChannel.prototype.postMessage = function(message) {};\n\n/**\n * Closes the channel object, indicating it won't get any new messages, and\n * allowing it to be, eventually, garbage collected.\n * @return {void}\n */\nBroadcastChannel.prototype.close = function() {};\n\n/** @override */\nBroadcastChannel.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nBroadcastChannel.prototype.dispatchEvent = function(evt) {};\n\n/** @override */\nBroadcastChannel.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/**\n * An EventHandler property that specifies the function to execute when a\n * message event is fired on this object.\n * @type {?function(!MessageEvent<*>)}\n */\nBroadcastChannel.prototype.onmessage;\n\n/**\n * The name of the channel.\n * @type {string}\n */\nBroadcastChannel.prototype.name;\n\n/**\n * HTML5 DataTransfer class.\n *\n * @see http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html\n * @see http://developers.whatwg.org/dnd.html#datatransferitem\n * @constructor\n */\nfunction DataTransfer() {}\n\n/** @type {string} */\nDataTransfer.prototype.dropEffect;\n\n/** @type {string} */\nDataTransfer.prototype.effectAllowed;\n\n/** @type {!Array} */\nDataTransfer.prototype.types;\n\n/** @type {!FileList} */\nDataTransfer.prototype.files;\n\n/**\n * @param {string=} opt_format Format for which to remove data.\n * @return {undefined}\n */\nDataTransfer.prototype.clearData = function(opt_format) {};\n\n/**\n * @param {string} format Format for which to set data.\n * @param {string} data Data to add.\n * @return {boolean}\n */\nDataTransfer.prototype.setData = function(format, data) {};\n\n/**\n * @param {string} format Format for which to set data.\n * @return {string} Data for the given format.\n */\nDataTransfer.prototype.getData = function(format) { return ''; };\n\n/**\n * @param {HTMLElement} img The image to use when dragging.\n * @param {number} x Horizontal position of the cursor.\n * @param {number} y Vertical position of the cursor.\n * @return {undefined}\n */\nDataTransfer.prototype.setDragImage = function(img, x, y) {};\n\n/**\n * @param {HTMLElement} elem Element to receive drag result events.\n * @return {undefined}\n */\nDataTransfer.prototype.addElement = function(elem) {};\n\n/**\n * Addition for accessing clipboard file data that are part of the proposed\n * HTML5 spec.\n * @type {DataTransfer}\n */\nMouseEvent.prototype.dataTransfer;\n\n/**\n * @record\n * @extends {MouseEventInit}\n * @see https://w3c.github.io/uievents/#idl-wheeleventinit\n */\nfunction WheelEventInit() {}\n\n/** @type {undefined|number} */\nWheelEventInit.prototype.deltaX;\n\n/** @type {undefined|number} */\nWheelEventInit.prototype.deltaY;\n\n/** @type {undefined|number} */\nWheelEventInit.prototype.deltaZ;\n\n/** @type {undefined|number} */\nWheelEventInit.prototype.deltaMode;\n\n/**\n * @param {string} type\n * @param {WheelEventInit=} opt_eventInitDict\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#interface-WheelEvent\n * @constructor\n * @extends {MouseEvent}\n */\nfunction WheelEvent(type, opt_eventInitDict) {}\n\n/** @const {number} */\nWheelEvent.DOM_DELTA_PIXEL;\n\n/** @const {number} */\nWheelEvent.DOM_DELTA_LINE;\n\n/** @const {number} */\nWheelEvent.DOM_DELTA_PAGE;\n\n/** @const {number} */\nWheelEvent.prototype.deltaX;\n\n/** @const {number} */\nWheelEvent.prototype.deltaY;\n\n/** @const {number} */\nWheelEvent.prototype.deltaZ;\n\n/** @const {number} */\nWheelEvent.prototype.deltaMode;\n\n/**\n * HTML5 DataTransferItem class.\n *\n * @see http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html\n * @see http://developers.whatwg.org/dnd.html#datatransferitem\n * @constructor\n */\nfunction DataTransferItem() {}\n\n/** @type {string} */\nDataTransferItem.prototype.kind;\n\n/** @type {string} */\nDataTransferItem.prototype.type;\n\n/**\n * @param {function(string)} callback\n * @return {undefined}\n */\nDataTransferItem.prototype.getAsString = function(callback) {};\n\n/**\n * @return {?File} The file corresponding to this item, or null.\n * @nosideeffects\n */\nDataTransferItem.prototype.getAsFile = function() { return null; };\n\n/**\n * HTML5 DataTransferItemList class. There are some discrepancies in the docs\n * on the whatwg.org site. When in doubt, these prototypes match what is\n * implemented as of Chrome 30.\n *\n * @see http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html\n * @see http://developers.whatwg.org/dnd.html#datatransferitem\n * @constructor\n * @implements {IArrayLike}\n */\nfunction DataTransferItemList() {}\n\n/** @type {number} */\nDataTransferItemList.prototype.length;\n\n/**\n * @param {number} i File to return from the list.\n * @return {DataTransferItem} The ith DataTransferItem in the list, or null.\n * @nosideeffects\n */\nDataTransferItemList.prototype.item = function(i) { return null; };\n\n/**\n * Adds an item to the list.\n * @param {string|!File} data Data for the item being added.\n * @param {string=} opt_type Mime type of the item being added. MUST be present\n * if the {@code data} parameter is a string.\n * @return {DataTransferItem}\n */\nDataTransferItemList.prototype.add = function(data, opt_type) {};\n\n/**\n * Removes an item from the list.\n * @param {number} i File to remove from the list.\n * @return {undefined}\n */\nDataTransferItemList.prototype.remove = function(i) {};\n\n/**\n * Removes all items from the list.\n * @return {undefined}\n */\nDataTransferItemList.prototype.clear = function() {};\n\n/** @type {!DataTransferItemList} */\nDataTransfer.prototype.items;\n\n/**\n * @record\n * @extends {MouseEventInit}\n * @see http://w3c.github.io/html/editing.html#dictdef-drageventinit\n */\nfunction DragEventInit() {}\n\n/** @type {undefined|?DataTransfer} */\nDragEventInit.prototype.dataTransfer;\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#the-dragevent-interface\n * @constructor\n * @extends {MouseEvent}\n * @param {string} type\n * @param {DragEventInit=} opt_eventInitDict\n */\nfunction DragEvent(type, opt_eventInitDict) {}\n\n/** @type {DataTransfer} */\nDragEvent.prototype.dataTransfer;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://www.w3.org/TR/progress-events/#progresseventinit\n */\nfunction ProgressEventInit() {}\n\n/** @type {undefined|boolean} */\nProgressEventInit.prototype.lengthComputable;\n\n/** @type {undefined|number} */\nProgressEventInit.prototype.loaded;\n\n/** @type {undefined|number} */\nProgressEventInit.prototype.total;\n\n/**\n * @constructor\n * @template TARGET\n * @param {string} type\n * @param {ProgressEventInit=} opt_progressEventInitDict\n * @extends {Event}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/ProgressEvent\n */\nfunction ProgressEvent(type, opt_progressEventInitDict) {}\n\n/**\n * @override\n * @type {TARGET}\n */\nProgressEvent.prototype.target;\n\n/** @type {number} */\nProgressEvent.prototype.total;\n\n/** @type {number} */\nProgressEvent.prototype.loaded;\n\n/** @type {boolean} */\nProgressEvent.prototype.lengthComputable;\n\n\n/**\n * @constructor\n */\nfunction TimeRanges() {}\n\n/** @type {number} */\nTimeRanges.prototype.length;\n\n/**\n * @param {number} index The index.\n * @return {number} The start time of the range at index.\n * @throws {DOMException}\n */\nTimeRanges.prototype.start = function(index) { return 0; };\n\n/**\n * @param {number} index The index.\n * @return {number} The end time of the range at index.\n * @throws {DOMException}\n */\nTimeRanges.prototype.end = function(index) { return 0; };\n\n\n// HTML5 Web Socket class\n/**\n * @see https://html.spec.whatwg.org/multipage/web-sockets.html\n * @constructor\n * @param {string} url\n * @param {(string|!Array)=} opt_protocol\n * @implements {EventTarget}\n */\nfunction WebSocket(url, opt_protocol) {}\n\n/**\n * The connection has not yet been established.\n * @const {number}\n */\nWebSocket.CONNECTING;\n\n/**\n * The connection has not yet been established.\n * @const {number}\n */\nWebSocket.prototype.CONNECTING;\n\n/**\n * The WebSocket connection is established and communication is possible.\n * @const {number}\n */\nWebSocket.OPEN;\n\n/**\n * The WebSocket connection is established and communication is possible.\n * @const {number}\n */\nWebSocket.prototype.OPEN;\n\n/**\n * The connection is going through the closing handshake, or the close() method has been invoked.\n * @const {number}\n */\nWebSocket.CLOSING;\n\n/**\n * The connection is going through the closing handshake, or the close() method has been invoked.\n * @const {number}\n */\nWebSocket.prototype.CLOSING;\n\n/**\n * The connection has been closed or could not be opened.\n * @const {number}\n */\nWebSocket.CLOSED;\n\n/**\n * The connection has been closed or could not be opened.\n * @const {number}\n */\nWebSocket.prototype.CLOSED;\n\n/** @override */\nWebSocket.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWebSocket.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nWebSocket.prototype.dispatchEvent = function(evt) {};\n\n/**\n * Returns the URL value that was passed to the constructor.\n * @type {string}\n */\nWebSocket.prototype.url;\n\n/**\n * Represents the state of the connection.\n * @type {number}\n */\nWebSocket.prototype.readyState;\n\n/**\n * Returns the number of bytes that have been queued but not yet sent.\n * @type {number}\n */\nWebSocket.prototype.bufferedAmount;\n\n/**\n * An event handler called on error event.\n * @type {?function(!Event): void}\n */\nWebSocket.prototype.onerror;\n\n/**\n * An event handler called on open event.\n * @type {?function(!Event): void}\n */\nWebSocket.prototype.onopen;\n\n/**\n * An event handler called on message event.\n * @type {?function(!MessageEvent): void}\n */\nWebSocket.prototype.onmessage;\n\n/**\n * An event handler called on close event.\n * @type {?function(!CloseEvent): void}\n */\nWebSocket.prototype.onclose;\n\n/**\n * Transmits data using the connection.\n * @param {string|!ArrayBuffer|!ArrayBufferView|!Blob} data\n * @return {void}\n */\nWebSocket.prototype.send = function(data) {};\n\n/**\n * Closes the Web Socket connection or connection attempt, if any.\n * @param {number=} opt_code\n * @param {string=} opt_reason\n * @return {undefined}\n */\nWebSocket.prototype.close = function(opt_code, opt_reason) {};\n\n/**\n * @type {string} Sets the type of data (blob or arraybuffer) for binary data.\n */\nWebSocket.prototype.binaryType;\n\n// HTML5 History\n/**\n * @constructor\n * @see http://w3c.github.io/html/browsers.html#the-history-interface\n */\nfunction History() {}\n\n/**\n * Goes back one step in the joint session history.\n * If there is no previous page, does nothing.\n *\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-history-back\n * @param {number=} opt_distance the number of entries to go back\n * (Mozilla doesn't support distance -- use #go instead)\n *\n * @return {undefined}\n */\nHistory.prototype.back = function(opt_distance) {};\n\n/**\n * Goes forward one step in the joint session history.\n * If there is no next page, does nothing.\n *\n * @return {undefined}\n */\nHistory.prototype.forward = function() {};\n\n/**\n * The number of entries in the joint session history.\n *\n * @type {number}\n */\nHistory.prototype.length;\n\n/**\n * Goes back or forward the specified number of steps in the joint session\n * history. A zero delta will reload the current page. If the delta is out of\n * range, does nothing.\n *\n * @param {number} delta The number of entries to go back.\n * @return {undefined}\n */\nHistory.prototype.go = function(delta) {};\n\n/**\n * Pushes a new state into the session history.\n * @see http://www.w3.org/TR/html5/history.html#the-history-interface\n * @param {*} data New state.\n * @param {string} title The title for a new session history entry.\n * @param {string=} opt_url The URL for a new session history entry.\n * @return {undefined}\n */\nHistory.prototype.pushState = function(data, title, opt_url) {};\n\n/**\n * Replaces the current state in the session history.\n * @see http://www.w3.org/TR/html5/history.html#the-history-interface\n * @param {*} data New state.\n * @param {string} title The title for a session history entry.\n * @param {string=} opt_url The URL for a new session history entry.\n * @return {undefined}\n */\nHistory.prototype.replaceState = function(data, title, opt_url) {};\n\n/**\n * Pending state object.\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history#Reading_the_current_state\n * @type {*}\n */\nHistory.prototype.state;\n\n/**\n * Allows web applications to explicitly set default scroll restoration behavior\n * on history navigation. This property can be either auto or manual.\n *\n * Non-standard. Only supported in Chrome 46+.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/History\n * @see https://majido.github.io/scroll-restoration-proposal/history-based-api.html\n * @type {string}\n */\nHistory.prototype.scrollRestoration;\n\n/**\n * Add history property to Window.\n *\n * @type {!History}\n */\nWindow.prototype.history;\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/history.html#the-location-interface\n */\nfunction Location() {}\n\n/**\n * Returns the Location object's URL. Can be set, to navigate to the given URL.\n * @implicitCast\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-href\n */\nLocation.prototype.href;\n\n/**\n * Returns the Location object's URL's origin.\n * @const {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-origin\n */\nLocation.prototype.origin;\n\n/**\n * Returns the Location object's URL's scheme. Can be set, to navigate to the\n * same URL with a changed scheme.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-protocol\n */\nLocation.prototype.protocol;\n\n/**\n * Returns the Location object's URL's host and port (if different from the\n * default port for the scheme). Can be set, to navigate to the same URL with\n * a changed host and port.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-host\n */\nLocation.prototype.host;\n\n/**\n * Returns the Location object's URL's host. Can be set, to navigate to the\n * same URL with a changed host.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-hostname\n */\nLocation.prototype.hostname;\n\n/**\n * Returns the Location object's URL's port. Can be set, to navigate to the\n * same URL with a changed port.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#the-location-interface:dom-location-port\n */\nLocation.prototype.port;\n\n/**\n * Returns the Location object's URL's path. Can be set, to navigate to the\n * same URL with a changed path.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-pathname\n */\nLocation.prototype.pathname;\n\n/**\n * Returns the Location object's URL's query (includes leading \"?\" if\n * non-empty). Can be set, to navigate to the same URL with a changed query\n * (ignores leading \"?\").\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-search\n */\nLocation.prototype.search;\n\n/**\n * Returns the Location object's URL's fragment (includes leading \"#\" if\n * non-empty). Can be set, to navigate to the same URL with a changed fragment\n * (ignores leading \"#\").\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-hash\n */\nLocation.prototype.hash;\n\n/**\n * Navigates to the given page.\n * @param {!TrustedURL|string} url\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-assign\n */\nLocation.prototype.assign = function(url) {};\n\n/**\n * Removes the current page from the session history and navigates to the given\n * page.\n * @param {!TrustedURL|string} url\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-replace\n */\nLocation.prototype.replace = function(url) {};\n\n/**\n * Reloads the current page.\n * @param {boolean=} forceReload If true, reloads the page from\n * the server. Defaults to false.\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-reload\n */\nLocation.prototype.reload = function(forceReload) {};\n\n/**\n * Returns a DOMStringList object listing the origins of the ancestor browsing\n * contexts, from the parent browsing context to the top-level browsing\n * context.\n * @type {DOMStringList}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-ancestororigins\n */\nLocation.prototype.ancestorOrigins;\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/#popstateevent\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {{state: *}=} opt_eventInitDict\n */\nfunction PopStateEvent(type, opt_eventInitDict) {}\n\n/**\n * @type {*}\n */\nPopStateEvent.prototype.state;\n\n/**\n * Initializes the event after it has been created with document.createEvent\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {*} stateArg\n * @return {undefined}\n */\nPopStateEvent.prototype.initPopStateEvent = function(typeArg, canBubbleArg,\n cancelableArg, stateArg) {};\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/#hashchangeevent\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {{oldURL: string, newURL: string}=} opt_eventInitDict\n */\nfunction HashChangeEvent(type, opt_eventInitDict) {}\n\n/** @type {string} */\nHashChangeEvent.prototype.oldURL;\n\n/** @type {string} */\nHashChangeEvent.prototype.newURL;\n\n/**\n * Initializes the event after it has been created with document.createEvent\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {string} oldURLArg\n * @param {string} newURLArg\n * @return {undefined}\n */\nHashChangeEvent.prototype.initHashChangeEvent = function(typeArg, canBubbleArg,\n cancelableArg, oldURLArg, newURLArg) {};\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/#pagetransitionevent\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {{persisted: boolean}=} opt_eventInitDict\n */\nfunction PageTransitionEvent(type, opt_eventInitDict) {}\n\n/** @type {boolean} */\nPageTransitionEvent.prototype.persisted;\n\n/**\n * Initializes the event after it has been created with document.createEvent\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {*} persistedArg\n * @return {undefined}\n */\nPageTransitionEvent.prototype.initPageTransitionEvent = function(typeArg,\n canBubbleArg, cancelableArg, persistedArg) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n */\nfunction FileList() {}\n\n/** @type {number} */\nFileList.prototype.length;\n\n/**\n * @param {number} i File to return from the list.\n * @return {File} The ith file in the list.\n * @nosideeffects\n */\nFileList.prototype.item = function(i) { return null; };\n\n/**\n * @type {boolean}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#withcredentials\n */\nXMLHttpRequest.prototype.withCredentials;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onloadstart\n */\nXMLHttpRequest.prototype.onloadstart;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#handler-xhr-onprogress\n */\nXMLHttpRequest.prototype.onprogress;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onabort\n */\nXMLHttpRequest.prototype.onabort;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onload\n */\nXMLHttpRequest.prototype.onload;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-ontimeout\n */\nXMLHttpRequest.prototype.ontimeout;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onloadend\n */\nXMLHttpRequest.prototype.onloadend;\n\n/**\n * @type {XMLHttpRequestUpload}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-upload-attribute\n */\nXMLHttpRequest.prototype.upload;\n\n/**\n * @param {string} mimeType The mime type to override with.\n * @return {undefined}\n */\nXMLHttpRequest.prototype.overrideMimeType = function(mimeType) {};\n\n/**\n * @type {string}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-responsetype-attribute\n */\nXMLHttpRequest.prototype.responseType;\n\n/**\n * @type {?(ArrayBuffer|Blob|Document|Object|string)}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-response-attribute\n */\nXMLHttpRequest.prototype.response;\n\n\n/**\n * @type {ArrayBuffer}\n * Implemented as a draft spec in Firefox 4 as the way to get a requested array\n * buffer from an XMLHttpRequest.\n * @see https://developer.m0z111a.qjz9zk/En/Using_XMLHttpRequest#Receiving_binary_data_using_JavaScript_typed_arrays\n *\n * This property is not used anymore and should be removed.\n * @see https://github.com/google/closure-compiler/pull/1389\n */\nXMLHttpRequest.prototype.mozResponseArrayBuffer;\n\n/**\n * XMLHttpRequestEventTarget defines events for checking the status of a data\n * transfer between a client and a server. This should be a common base class\n * for XMLHttpRequest and XMLHttpRequestUpload.\n *\n * @constructor\n * @implements {EventTarget}\n */\nfunction XMLHttpRequestEventTarget() {}\n\n/** @override */\nXMLHttpRequestEventTarget.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nXMLHttpRequestEventTarget.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nXMLHttpRequestEventTarget.prototype.dispatchEvent = function(evt) {};\n\n/**\n * An event target to track the status of an upload.\n *\n * @constructor\n * @extends {XMLHttpRequestEventTarget}\n */\nfunction XMLHttpRequestUpload() {}\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#handler-xhr-onprogress\n */\nXMLHttpRequestUpload.prototype.onprogress;\n\n/**\n * @param {number=} opt_width\n * @param {number=} opt_height\n * @constructor\n * @extends {HTMLImageElement}\n */\nfunction Image(opt_width, opt_height) {}\n\n\n/**\n * Dataset collection.\n * This is really a DOMStringMap but it behaves close enough to an object to\n * pass as an object.\n * @const {!Object}\n */\nHTMLElement.prototype.dataset;\n\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see https://dom.spec.whatwg.org/#interface-domtokenlist\n */\nfunction DOMTokenList() {}\n\n/**\n * Returns the number of CSS classes applied to this Element.\n * @type {number}\n */\nDOMTokenList.prototype.length;\n\n/**\n * Returns the string value applied to this Element.\n * @type {string|undefined}\n */\nDOMTokenList.prototype.value;\n\n/**\n * @param {number} index The index of the item to return.\n * @return {string} The CSS class at the specified index.\n * @nosideeffects\n */\nDOMTokenList.prototype.item = function(index) {};\n\n/**\n * @param {string} token The CSS class to check for.\n * @return {boolean} Whether the CSS class has been applied to the Element.\n * @nosideeffects\n */\nDOMTokenList.prototype.contains = function(token) {};\n\n/**\n * @param {...string} var_args The CSS class(es) to add to this element.\n * @return {undefined}\n */\nDOMTokenList.prototype.add = function(var_args) {};\n\n/**\n * @param {...string} var_args The CSS class(es) to remove from this element.\n * @return {undefined}\n */\nDOMTokenList.prototype.remove = function(var_args) {};\n\n/**\n * Replaces token with newToken.\n * @param {string} token The CSS class to replace.\n * @param {string} newToken The new CSS class to use.\n * @return {undefined}\n */\nDOMTokenList.prototype.replace = function(token, newToken) {};\n\n/**\n * @param {string} token The token to query for.\n * @return {boolean} Whether the token was found.\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/DOMTokenList/supports\n * @nosideeffects\n */\nDOMTokenList.prototype.supports = function(token) {};\n\n/**\n * @param {string} token The CSS class to toggle from this element.\n * @param {boolean=} opt_force True to add the class whether it exists\n * or not. False to remove the class whether it exists or not.\n * This argument is not supported on IE 10 and below, according to\n * the MDN page linked below.\n * @return {boolean} False if the token was removed; True otherwise.\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Element.classList\n */\nDOMTokenList.prototype.toggle = function(token, opt_force) {};\n\n/**\n * @return {string} A stringified representation of CSS classes.\n * @nosideeffects\n * @override\n */\nDOMTokenList.prototype.toString = function() {};\n\n/**\n * @return {!IteratorIterable} An iterator to go through all values of\n * the key/value pairs contained in this object.\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/DOMTokenList/values\n */\nDOMTokenList.prototype.values = function() {};\n\n/**\n * A better interface to CSS classes than className.\n * @const {!DOMTokenList}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Element/classList\n */\nElement.prototype.classList;\n\n/**\n * Constraint Validation API properties and methods\n * @see http://www.w3.org/TR/2009/WD-html5-20090423/forms.html#the-constraint-validation-api\n */\n\n/** @return {boolean} */\nHTMLFormElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLFormElement.prototype.reportValidity = function() {};\n\n/** @type {boolean} */\nHTMLFormElement.prototype.noValidate;\n\n/** @constructor */\nfunction ValidityState() {}\n\n/** @type {boolean} */\nValidityState.prototype.badInput;\n\n/** @type {boolean} */\nValidityState.prototype.customError;\n\n/** @type {boolean} */\nValidityState.prototype.patternMismatch;\n\n/** @type {boolean} */\nValidityState.prototype.rangeOverflow;\n\n/** @type {boolean} */\nValidityState.prototype.rangeUnderflow;\n\n/** @type {boolean} */\nValidityState.prototype.stepMismatch;\n\n/** @type {boolean} */\nValidityState.prototype.typeMismatch;\n\n/** @type {boolean} */\nValidityState.prototype.tooLong;\n\n/** @type {boolean} */\nValidityState.prototype.tooShort;\n\n/** @type {boolean} */\nValidityState.prototype.valid;\n\n/** @type {boolean} */\nValidityState.prototype.valueMissing;\n\n\n/** @type {boolean} */\nHTMLButtonElement.prototype.autofocus;\n\n/**\n * Can return null when hidden.\n * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels\n * @const {?NodeList}\n */\nHTMLButtonElement.prototype.labels;\n\n/** @type {string} */\nHTMLButtonElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLButtonElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLButtonElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLButtonElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLButtonElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLButtonElement.prototype.setCustomValidity = function(message) {};\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formaction\n */\nHTMLButtonElement.prototype.formAction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formenctype\n */\nHTMLButtonElement.prototype.formEnctype;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formmethod\n */\nHTMLButtonElement.prototype.formMethod;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formtarget\n */\nHTMLButtonElement.prototype.formTarget;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.autofocus;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.formNoValidate;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formaction\n */\nHTMLInputElement.prototype.formAction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formenctype\n */\nHTMLInputElement.prototype.formEnctype;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formmethod\n */\nHTMLInputElement.prototype.formMethod;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formtarget\n */\nHTMLInputElement.prototype.formTarget;\n\n/**\n * Can return null when hidden.\n * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels\n * @const {?NodeList}\n */\nHTMLInputElement.prototype.labels;\n\n/** @type {string} */\nHTMLInputElement.prototype.validationMessage;\n\n/**\n * @type {number}\n * @implicitCast\n */\nHTMLInputElement.prototype.selectionStart;\n\n/**\n * @type {number}\n * @implicitCast\n */\nHTMLInputElement.prototype.selectionEnd;\n\n/** @type {string} */\nHTMLInputElement.prototype.selectionDirection;\n\n/**\n * @param {number} start\n * @param {number} end\n * @param {string=} direction\n * @see https://html.spec.whatwg.org/#dom-textarea/input-setselectionrange\n * @return {undefined}\n */\nHTMLInputElement.prototype.setSelectionRange = function(start, end, direction) {};\n\n/**\n * @const {ValidityState}\n */\nHTMLInputElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLInputElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLInputElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLInputElement.prototype.setCustomValidity = function(message) {};\n\n/** @type {Element} */\nHTMLLabelElement.prototype.control;\n\n/** @type {boolean} */\nHTMLSelectElement.prototype.autofocus;\n\n/**\n * Can return null when hidden.\n * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels\n * @const {?NodeList}\n */\nHTMLSelectElement.prototype.labels;\n\n/** @type {HTMLCollection} */\nHTMLSelectElement.prototype.selectedOptions;\n\n/** @type {string} */\nHTMLSelectElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLSelectElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLSelectElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLSelectElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLSelectElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLSelectElement.prototype.setCustomValidity = function(message) {};\n\n/** @type {boolean} */\nHTMLTextAreaElement.prototype.autofocus;\n\n/**\n * Can return null when hidden.\n * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels\n * @const {?NodeList}\n */\nHTMLTextAreaElement.prototype.labels;\n\n/** @type {string} */\nHTMLTextAreaElement.prototype.placeholder;\n\n/** @type {string} */\nHTMLTextAreaElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLTextAreaElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLTextAreaElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLTextAreaElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLTextAreaElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLTextAreaElement.prototype.setCustomValidity = function(message) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/html5/the-embed-element.html#htmlembedelement\n */\nfunction HTMLEmbedElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/dimension-attributes.html#dom-dim-width\n */\nHTMLEmbedElement.prototype.width;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/dimension-attributes.html#dom-dim-height\n */\nHTMLEmbedElement.prototype.height;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/html5/the-embed-element.html#dom-embed-src\n */\nHTMLEmbedElement.prototype.src;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/the-embed-element.html#dom-embed-type\n */\nHTMLEmbedElement.prototype.type;\n\n// Fullscreen APIs.\n\n/**\n * @record\n * @see https://fullscreen.spec.whatwg.org/#dictdef-fullscreenoptions\n */\nfunction FullscreenOptions() {}\n\n/** @type {string} */\nFullscreenOptions.prototype.navigationUI;\n\n/**\n * @see https://fullscreen.spec.whatwg.org/#dom-element-requestfullscreen\n * @param {!FullscreenOptions=} options\n * @return {undefined}\n */\nElement.prototype.requestFullscreen = function(options) {};\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2012/WD-fullscreen-20120703/#dom-document-fullscreenenabled\n */\nDocument.prototype.fullscreenEnabled;\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/2012/WD-fullscreen-20120703/#dom-document-fullscreenelement\n */\nDocument.prototype.fullscreenElement;\n\n/**\n * @see http://www.w3.org/TR/2012/WD-fullscreen-20120703/#dom-document-exitfullscreen\n * @return {undefined}\n */\nDocument.prototype.exitFullscreen = function() {};\n\n// Externs definitions of browser current implementations.\n// Firefox 10 implementation.\nElement.prototype.mozRequestFullScreen = function() {};\n\nElement.prototype.mozRequestFullScreenWithKeys = function() {};\n\n/** @type {boolean} */\nDocument.prototype.mozFullScreen;\n\nDocument.prototype.mozCancelFullScreen = function() {};\n\n/** @type {Element} */\nDocument.prototype.mozFullScreenElement;\n\n/** @type {boolean} */\nDocument.prototype.mozFullScreenEnabled;\n\n// Chrome 21 implementation.\n/**\n * The current fullscreen element for the document is set to this element.\n * Valid only for Webkit browsers.\n * @param {number=} opt_allowKeyboardInput Whether keyboard input is desired.\n * Should use ALLOW_KEYBOARD_INPUT constant.\n * @return {undefined}\n */\nElement.prototype.webkitRequestFullScreen = function(opt_allowKeyboardInput) {};\n\n/**\n * The current fullscreen element for the document is set to this element.\n * Valid only for Webkit browsers.\n * @param {number=} opt_allowKeyboardInput Whether keyboard input is desired.\n * Should use ALLOW_KEYBOARD_INPUT constant.\n * @return {undefined}\n */\nElement.prototype.webkitRequestFullscreen = function(opt_allowKeyboardInput) {};\n\n/** @type {boolean} */\nDocument.prototype.webkitIsFullScreen;\n\nDocument.prototype.webkitCancelFullScreen = function() {};\n\n/** @type {boolean} */\nDocument.prototype.webkitFullscreenEnabled;\n\n/** @type {Element} */\nDocument.prototype.webkitCurrentFullScreenElement;\n\n/** @type {Element} */\nDocument.prototype.webkitFullscreenElement;\n\n/** @type {boolean} */\nDocument.prototype.webkitFullScreenKeyboardInputAllowed;\n\n// IE 11 implementation.\n// http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/dn265028(v=vs.85).aspx\n/** @return {void} */\nElement.prototype.msRequestFullscreen = function() {};\n\n/** @return {void} */\nDocument.prototype.msExitFullscreen = function() {};\n\n/** @type {boolean} */\nDocument.prototype.msFullscreenEnabled;\n\n/** @type {Element} */\nDocument.prototype.msFullscreenElement;\n\n/** @const {number} */\nElement.ALLOW_KEYBOARD_INPUT;\n\n/** @const {number} */\nElement.prototype.ALLOW_KEYBOARD_INPUT;\n\n\n/**\n * @typedef {{\n * childList: (boolean|undefined),\n * attributes: (boolean|undefined),\n * characterData: (boolean|undefined),\n * subtree: (boolean|undefined),\n * attributeOldValue: (boolean|undefined),\n * characterDataOldValue: (boolean|undefined),\n * attributeFilter: (!Array|undefined)\n * }}\n */\nvar MutationObserverInit;\n\n\n/** @constructor */\nfunction MutationRecord() {}\n\n/** @type {string} */\nMutationRecord.prototype.type;\n\n/** @type {Node} */\nMutationRecord.prototype.target;\n\n/** @type {!NodeList} */\nMutationRecord.prototype.addedNodes;\n\n/** @type {!NodeList} */\nMutationRecord.prototype.removedNodes;\n\n/** @type {?Node} */\nMutationRecord.prototype.previousSibling;\n\n/** @type {?Node} */\nMutationRecord.prototype.nextSibling;\n\n/** @type {?string} */\nMutationRecord.prototype.attributeName;\n\n/** @type {?string} */\nMutationRecord.prototype.attributeNamespace;\n\n/** @type {?string} */\nMutationRecord.prototype.oldValue;\n\n\n/**\n * @see http://www.w3.org/TR/domcore/#mutation-observers\n * @param {function(!Array, !MutationObserver)} callback\n * @constructor\n */\nfunction MutationObserver(callback) {}\n\n/**\n * @param {Node} target\n * @param {MutationObserverInit=} options\n * @return {undefined}\n */\nMutationObserver.prototype.observe = function(target, options) {};\n\nMutationObserver.prototype.disconnect = function() {};\n\n/**\n * @return {!Array}\n */\nMutationObserver.prototype.takeRecords = function() {};\n\n/**\n * @type {function(new:MutationObserver, function(Array))}\n */\nWindow.prototype.WebKitMutationObserver;\n\n/**\n * @type {function(new:MutationObserver, function(Array))}\n */\nWindow.prototype.MozMutationObserver;\n\n\n/**\n * @see http://www.w3.org/TR/page-visibility/\n * @type {VisibilityState}\n */\nDocument.prototype.visibilityState;\n\n/**\n * @type {string}\n */\nDocument.prototype.mozVisibilityState;\n\n/**\n * @type {string}\n */\nDocument.prototype.webkitVisibilityState;\n\n/**\n * @type {string}\n */\nDocument.prototype.msVisibilityState;\n\n/**\n * @see http://www.w3.org/TR/page-visibility/\n * @type {boolean}\n */\nDocument.prototype.hidden;\n\n/**\n * @type {boolean}\n */\nDocument.prototype.mozHidden;\n\n/**\n * @type {boolean}\n */\nDocument.prototype.webkitHidden;\n\n/**\n * @type {boolean}\n */\nDocument.prototype.msHidden;\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @see http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-register\n * @param {string} type\n * @param {{extends: (string|undefined), prototype: (Object|undefined)}=}\n * options\n * @return {function(new:Element, ...*)} a constructor for the new tag.\n * @deprecated document.registerElement() is deprecated in favor of\n * customElements.define()\n */\nDocument.prototype.registerElement = function(type, options) {};\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @see http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-register\n * @param {string} type\n * @param {{extends: (string|undefined), prototype: (Object|undefined)}} options\n * @deprecated This method has been removed and will be removed soon from this file.\n */\nDocument.prototype.register = function(type, options) {};\n\n/**\n * @type {!FontFaceSet}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfacesource-fonts\n */\nDocument.prototype.fonts;\n\n\n/**\n * @type {?HTMLScriptElement}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Document/currentScript\n */\nDocument.prototype.currentScript;\n\n/**\n * Definition of ShadowRoot interface,\n * @see http://www.w3.org/TR/shadow-dom/#api-shadow-root\n * @constructor\n * @extends {DocumentFragment}\n */\nfunction ShadowRoot() {}\n\n/**\n * The host element that a ShadowRoot is attached to.\n * Note: this is not yet W3C standard but is undergoing development.\n * W3C feature tracking bug:\n * https://www.w3.org/Bugs/Public/show_bug.cgi?id=22399\n * Draft specification:\n * https://dvcs.w3.org/hg/webcomponents/raw-file/6743f1ace623/spec/shadow/index.html#shadow-root-object\n * @type {!Element}\n */\nShadowRoot.prototype.host;\n\n/**\n * @param {string} id id.\n * @return {HTMLElement}\n * @nosideeffects\n */\nShadowRoot.prototype.getElementById = function(id) {};\n\n\n/**\n * @return {Selection}\n * @nosideeffects\n */\nShadowRoot.prototype.getSelection = function() {};\n\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {Element}\n * @nosideeffects\n */\nShadowRoot.prototype.elementFromPoint = function(x, y) {};\n\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {!IArrayLike}\n * @nosideeffects\n */\nShadowRoot.prototype.elementsFromPoint = function(x, y) {};\n\n\n/**\n * @type {?Element}\n */\nShadowRoot.prototype.activeElement;\n\n\n/**\n * @type {string}\n */\nShadowRoot.prototype.mode;\n\n\n/**\n * @type {?ShadowRoot}\n * @deprecated\n */\nShadowRoot.prototype.olderShadowRoot;\n\n\n/**\n * @type {string}\n * @implicitCast\n */\nShadowRoot.prototype.innerHTML;\n\n\n/**\n * @type {!StyleSheetList}\n */\nShadowRoot.prototype.styleSheets;\n\n\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/#the-content-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLContentElement() {}\n\n/**\n * @type {string}\n */\nHTMLContentElement.prototype.select;\n\n/**\n * @return {!NodeList}\n */\nHTMLContentElement.prototype.getDistributedNodes = function() {};\n\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/#the-shadow-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLShadowElement() {}\n\n/**\n * @return {!NodeList}\n */\nHTMLShadowElement.prototype.getDistributedNodes = function() {};\n\n\n/**\n * @see http://www.w3.org/TR/html5/webappapis.html#the-errorevent-interface\n *\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {ErrorEventInit=} opt_eventInitDict\n */\nfunction ErrorEvent(type, opt_eventInitDict) {}\n\n/** @const {string} */\nErrorEvent.prototype.message;\n\n/** @const {string} */\nErrorEvent.prototype.filename;\n\n/** @const {number} */\nErrorEvent.prototype.lineno;\n\n/** @const {number} */\nErrorEvent.prototype.colno;\n\n/** @const {*} */\nErrorEvent.prototype.error;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://www.w3.org/TR/html5/webappapis.html#erroreventinit\n */\nfunction ErrorEventInit() {}\n\n/** @type {undefined|string} */\nErrorEventInit.prototype.message;\n\n/** @type {undefined|string} */\nErrorEventInit.prototype.filename;\n\n/** @type {undefined|number} */\nErrorEventInit.prototype.lineno;\n\n/** @type {undefined|number} */\nErrorEventInit.prototype.colno;\n\n/** @type {*} */\nErrorEventInit.prototype.error;\n\n\n/**\n * @see http://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument\n * @param {string=} opt_title A title to give the new HTML document\n * @return {!HTMLDocument}\n */\nDOMImplementation.prototype.createHTMLDocument = function(opt_title) {};\n\n\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#the-picture-element\n * @extends {HTMLElement}\n */\nfunction HTMLPictureElement() {}\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#the-picture-element\n * @extends {HTMLElement}\n */\nfunction HTMLSourceElement() {}\n\n/** @type {string} */\nHTMLSourceElement.prototype.media;\n\n/** @type {string} */\nHTMLSourceElement.prototype.sizes;\n\n/** @type {string} @implicitCast */\nHTMLSourceElement.prototype.src;\n\n/** @type {string} */\nHTMLSourceElement.prototype.srcset;\n\n/** @type {string} */\nHTMLSourceElement.prototype.type;\n\n/** @type {string} */\nHTMLImageElement.prototype.sizes;\n\n/** @type {string} */\nHTMLImageElement.prototype.srcset;\n\n\n/**\n * 4.11 Interactive elements\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html\n */\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-details-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLDetailsElement() {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-details-open\n * @type {boolean}\n */\nHTMLDetailsElement.prototype.open;\n\n\n// As of 2/20/2015, has no special web IDL interface nor global\n// constructor (i.e. HTMLSummaryElement).\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menu-type\n * @type {string}\n */\nHTMLMenuElement.prototype.type;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menu-label\n * @type {string}\n */\nHTMLMenuElement.prototype.label;\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-menuitem-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLMenuItemElement() {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-type\n * @type {string}\n */\nHTMLMenuItemElement.prototype.type;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-label\n * @type {string}\n */\nHTMLMenuItemElement.prototype.label;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-icon\n * @type {string}\n */\nHTMLMenuItemElement.prototype.icon;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-disabled\n * @type {boolean}\n */\nHTMLMenuItemElement.prototype.disabled;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-checked\n * @type {boolean}\n */\nHTMLMenuItemElement.prototype.checked;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-radiogroup\n * @type {string}\n */\nHTMLMenuItemElement.prototype.radiogroup;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-default\n * @type {boolean}\n */\nHTMLMenuItemElement.prototype.default;\n\n// TODO(dbeam): add HTMLMenuItemElement.prototype.command if it's implemented.\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#relatedevent\n * @param {string} type\n * @param {{relatedTarget: (EventTarget|undefined)}=} opt_eventInitDict\n * @constructor\n * @extends {Event}\n */\nfunction RelatedEvent(type, opt_eventInitDict) {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-relatedevent-relatedtarget\n * @type {EventTarget|undefined}\n */\nRelatedEvent.prototype.relatedTarget;\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-dialog-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLDialogElement() {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-open\n * @type {boolean}\n */\nHTMLDialogElement.prototype.open;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-returnvalue\n * @type {string}\n */\nHTMLDialogElement.prototype.returnValue;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-show\n * @param {(MouseEvent|Element)=} opt_anchor\n * @return {undefined}\n */\nHTMLDialogElement.prototype.show = function(opt_anchor) {};\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-showmodal\n * @param {(MouseEvent|Element)=} opt_anchor\n * @return {undefined}\n */\nHTMLDialogElement.prototype.showModal = function(opt_anchor) {};\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-close\n * @param {string=} opt_returnValue\n * @return {undefined}\n */\nHTMLDialogElement.prototype.close = function(opt_returnValue) {};\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/scripting.html#the-template-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLTemplateElement() {}\n\n/**\n * @see https://html.spec.whatwg.org/multipage/scripting.html#the-template-element\n * @type {!DocumentFragment}\n */\nHTMLTemplateElement.prototype.content;\n\n\n/**\n * @type {?Document}\n * @see w3c_dom2.js\n * @see http://www.w3.org/TR/html-imports/#interface-import\n */\nHTMLLinkElement.prototype.import;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/#attr-link-as\n * @see https://w3c.github.io/preload/#as-attribute\n */\nHTMLLinkElement.prototype.as;\n\n/**\n * @see https://html.spec.whatwg.org/#attr-link-crossorigin\n * @type {string}\n */\nHTMLLinkElement.prototype.crossOrigin;\n\n\n/**\n * @return {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-elements\n */\nHTMLFieldSetElement.prototype.checkValidity = function() {};\n\n/**\n * @type {HTMLCollection}\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-elements\n */\nHTMLFieldSetElement.prototype.elements;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.name;\n\n/**\n * @param {string} message\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-elements\n * @return {undefined}\n */\nHTMLFieldSetElement.prototype.setCustomValidity = function(message) {};\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-type\n */\nHTMLFieldSetElement.prototype.type;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.validationMessage;\n\n/**\n * @type {ValidityState}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.validity;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.willValidate;\n\n/**\n * @constructor\n * @extends {NodeList}\n * @template T\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#radionodelist\n */\nfunction RadioNodeList() {}\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#radionodelist\n */\nRadioNodeList.prototype.value;\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-datalist-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLDataListElement() {}\n\n\n/** @type {HTMLCollection} */\nHTMLDataListElement.prototype.options;\n\n\n/**\n * @return {boolean}\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n */\nHTMLObjectElement.prototype.checkValidity;\n\n/**\n * @param {string} message\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n * @return {undefined}\n */\nHTMLObjectElement.prototype.setCustomValidity;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n */\nHTMLObjectElement.prototype.validationMessage;\n\n/**\n * @type {!ValidityState}\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n */\nHTMLObjectElement.prototype.validity;\n\n/**\n * @type {boolean}\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n */\nHTMLObjectElement.prototype.willValidate;\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-output-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLOutputElement() {}\n\n/**\n * @const {!DOMTokenList}\n */\nHTMLOutputElement.prototype.htmlFor;\n\n/**\n * @type {HTMLFormElement}\n */\nHTMLOutputElement.prototype.form;\n\n/**\n * @type {string}\n */\nHTMLOutputElement.prototype.name;\n\n/**\n * @const {string}\n */\nHTMLOutputElement.prototype.type;\n\n/**\n * @type {string}\n */\nHTMLOutputElement.prototype.defaultValue;\n\n/**\n * @type {string}\n */\nHTMLOutputElement.prototype.value;\n\n/**\n * @const {?NodeList}\n */\nHTMLOutputElement.prototype.labels;\n\n/** @type {string} */\nHTMLOutputElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLOutputElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLOutputElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLOutputElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLOutputElement.prototype.reportValidity = function() {};\n\n/** @param {string} message */\nHTMLOutputElement.prototype.setCustomValidity = function(message) {};\n\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-progress-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLProgressElement() {}\n\n\n/** @type {number} */\nHTMLProgressElement.prototype.value;\n\n\n/** @type {number} */\nHTMLProgressElement.prototype.max;\n\n\n/** @type {number} */\nHTMLProgressElement.prototype.position;\n\n\n/** @type {?NodeList} */\nHTMLProgressElement.prototype.labels;\n\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#the-track-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLTrackElement() {}\n\n\n/** @type {string} */\nHTMLTrackElement.prototype.kind;\n\n\n/** @type {string} @implicitCast */\nHTMLTrackElement.prototype.src;\n\n\n/** @type {string} */\nHTMLTrackElement.prototype.srclang;\n\n\n/** @type {string} */\nHTMLTrackElement.prototype.label;\n\n\n/** @type {boolean} */\nHTMLTrackElement.prototype.default;\n\n\n/** @const {number} */\nHTMLTrackElement.prototype.readyState;\n\n\n/** @const {!TextTrack} */\nHTMLTrackElement.prototype.track;\n\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-meter-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLMeterElement() {}\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.value;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.min;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.max;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.low;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.high;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.optimum;\n\n\n/** @type {?NodeList} */\nHTMLMeterElement.prototype.labels;\n\n\n/**\n * @interface\n * @see https://storage.spec.whatwg.org/#api\n */\nfunction NavigatorStorage() {};\n\n/**\n * @type {!StorageManager}\n */\nNavigatorStorage.prototype.storage;\n\n/**\n * @constructor\n * @implements NavigatorStorage\n * @see https://www.w3.org/TR/html5/webappapis.html#navigator\n */\nfunction Navigator() {}\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-appcodename\n */\nNavigator.prototype.appCodeName;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-appname\n */\nNavigator.prototype.appName;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-appversion\n */\nNavigator.prototype.appVersion;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-platform\n */\nNavigator.prototype.platform;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-product\n */\nNavigator.prototype.product;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-useragent\n */\nNavigator.prototype.userAgent;\n\n/**\n * @return {boolean}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-taintenabled\n */\nNavigator.prototype.taintEnabled = function() {};\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-language\n */\nNavigator.prototype.language;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/browsers.html#navigatoronline\n */\nNavigator.prototype.onLine;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-cookieenabled\n */\nNavigator.prototype.cookieEnabled;\n\n/**\n * @param {string} scheme\n * @param {string} url\n * @param {string} title\n * @return {undefined}\n */\nNavigator.prototype.registerProtocolHandler = function(scheme, url, title) {}\n\n/**\n * @param {string} mimeType\n * @param {string} url\n * @param {string} title\n * @return {undefined}\n */\nNavigator.prototype.registerContentHandler = function(mimeType, url, title) {}\n\n/**\n * @param {string} scheme\n * @param {string} url\n * @return {undefined}\n */\nNavigator.prototype.unregisterProtocolHandler = function(scheme, url) {}\n\n/**\n * @param {string} mimeType\n * @param {string} url\n * @return {undefined}\n */\nNavigator.prototype.unregisterContentHandler = function(mimeType, url) {}\n\n/**\n * @type {!MimeTypeArray}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-mimetypes\n */\nNavigator.prototype.mimeTypes;\n\n/**\n * @type {!PluginArray}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-plugins\n */\nNavigator.prototype.plugins;\n\n/**\n * @return {boolean}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-javaenabled\n * @nosideeffects\n */\nNavigator.prototype.javaEnabled = function() {};\n\n/**\n * @type {number}\n * @see https://developers.9oo91e.qjz9zk/web/updates/2017/12/device-memory\n * https://github.com/w3c/device-memory\n */\nNavigator.prototype.deviceMemory;\n\n/**\n * @type {!StorageManager}\n * @see https://storage.spec.whatwg.org\n */\nNavigator.prototype.storage;\n\n/**\n * @param {!ShareData=} data\n * @return {!Promise}\n * @see https://wicg.github.io/web-share/#share-method\n */\nNavigator.prototype.share = function(data) {};\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/NavigatorConcurrentHardware/hardwareConcurrency\n */\nNavigator.prototype.hardwareConcurrency;\n\n/**\n * @constructor\n * @implements NavigatorStorage\n * @see https://html.spec.whatwg.org/multipage/workers.html#the-workernavigator-object\n */\nfunction WorkerNavigator() {}\n\n/**\n * @type {number}\n * @see https://developers.9oo91e.qjz9zk/web/updates/2017/12/device-memory\n * https://github.com/w3c/device-memory\n */\nWorkerNavigator.prototype.deviceMemory;\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/NavigatorConcurrentHardware/hardwareConcurrency\n */\nWorkerNavigator.prototype.hardwareConcurrency;\n\n/**\n * @type {!StorageManager}\n * @see https://storage.spec.whatwg.org\n */\nWorkerNavigator.prototype.storage;\n\n/**\n * @record\n * @see https://wicg.github.io/web-share/#sharedata-dictionary\n */\nfunction ShareData() {}\n\n/** @type {string|undefined} */\nShareData.prototype.title;\n\n/** @type {string|undefined} */\nShareData.prototype.text;\n\n/** @type {string|undefined} */\nShareData.prototype.url;\n\n/**\n * @constructor\n * @implements {IObject<(string|number),!Plugin>}\n * @implements {IArrayLike}\n * @see https://www.w3.org/TR/html5/webappapis.html#pluginarray\n */\nfunction PluginArray() {}\n\n/** @type {number} */\nPluginArray.prototype.length;\n\n/**\n * @param {number} index\n * @return {Plugin}\n */\nPluginArray.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @return {Plugin}\n */\nPluginArray.prototype.namedItem = function(name) {};\n\n/**\n * @param {boolean=} reloadDocuments\n * @return {undefined}\n */\nPluginArray.prototype.refresh = function(reloadDocuments) {};\n\n/**\n * @constructor\n * @implements {IObject<(string|number),!MimeType>}\n * @implements {IArrayLike}\n * @see https://www.w3.org/TR/html5/webappapis.html#mimetypearray\n */\nfunction MimeTypeArray() {}\n\n/**\n * @param {number} index\n * @return {MimeType}\n */\nMimeTypeArray.prototype.item = function(index) {};\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.navigator.mimeTypes\n */\nMimeTypeArray.prototype.length;\n\n/**\n * @param {string} name\n * @return {MimeType}\n */\nMimeTypeArray.prototype.namedItem = function(name) {};\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/html5/webappapis.html#mimetype\n */\nfunction MimeType() {}\n\n/** @type {string} */\nMimeType.prototype.description;\n\n/** @type {Plugin} */\nMimeType.prototype.enabledPlugin;\n\n/** @type {string} */\nMimeType.prototype.suffixes;\n\n/** @type {string} */\nMimeType.prototype.type;\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-plugin\n */\nfunction Plugin() {}\n\n/** @type {string} */\nPlugin.prototype.description;\n\n/** @type {string} */\nPlugin.prototype.filename;\n\n/** @type {number} */\nPlugin.prototype.length;\n\n/** @type {string} */\nPlugin.prototype.name;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/custom-elements.html#customelementregistry\n * @constructor\n */\nfunction CustomElementRegistry() {}\n\n/**\n * @param {string} tagName\n * @param {function(new:HTMLElement)} klass\n * @param {{extends: string}=} options\n * @return {undefined}\n */\nCustomElementRegistry.prototype.define = function (tagName, klass, options) {};\n\n/**\n * @param {string} tagName\n * @return {function(new:HTMLElement)|undefined}\n */\nCustomElementRegistry.prototype.get = function(tagName) {};\n\n/**\n * @param {string} tagName\n * @return {!Promise}\n */\nCustomElementRegistry.prototype.whenDefined = function(tagName) {};\n\n/**\n * @param {!Node} root\n * @return {undefined}\n */\nCustomElementRegistry.prototype.upgrade = function(root) {};\n\n/** @type {!CustomElementRegistry} */\nvar customElements;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLSlotElement() {}\n\n/** @typedef {{flatten: boolean}} */\nvar AssignedNodesOptions;\n\n/**\n * @param {!AssignedNodesOptions=} options\n * @return {!Array}\n */\nHTMLSlotElement.prototype.assignedNodes = function(options) {};\n\n/**\n * @param {!AssignedNodesOptions=} options\n * @return {!Array}\n */\nHTMLSlotElement.prototype.assignedElements = function(options) {};\n\n/** @type {boolean} */\nEvent.prototype.composed;\n\n/**\n * @return {!Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Event/composedPath\n */\nEvent.prototype.composedPath = function() {};\n\n/**\n * @constructor\n * @param {{\n * firesTouchEvents: (string|undefined),\n * pointerMovementScrolls: (string|undefined)\n * }=} opt_options\n */\nfunction InputDeviceCapabilities(opt_options){}\n\n/** @type {boolean} */\nInputDeviceCapabilities.prototype.firesTouchEvents;\n\n/** @type {boolean} */\nInputDeviceCapabilities.prototype.pointerMovementScrolls;\n\n/** @type {?InputDeviceCapabilities} */\nMouseEvent.prototype.sourceCapabilities;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/VisualViewport\n * @constructor\n * @implements {EventTarget}\n */\nfunction VisualViewport() {}\n\n/** @type {number} */\nVisualViewport.prototype.offsetLeft;\n\n/** @type {number} */\nVisualViewport.prototype.offsetTop;\n\n/** @type {number} */\nVisualViewport.prototype.pageLeft;\n\n/** @type {number} */\nVisualViewport.prototype.pageTop;\n\n/** @type {number} */\nVisualViewport.prototype.width;\n\n/** @type {number} */\nVisualViewport.prototype.height;\n\n/** @type {number} */\nVisualViewport.prototype.scale;\n\n/** @override */\nVisualViewport.prototype.addEventListener = function(type, listener,\n opt_options) {};\n\n/** @override */\nVisualViewport.prototype.removeEventListener = function(type, listener,\n opt_options) {};\n\n/** @override */\nVisualViewport.prototype.dispatchEvent = function(evt) {};\n\n/** @type {?function(!Event)} */\nVisualViewport.prototype.onresize;\n\n/** @type {?function(!Event)} */\nVisualViewport.prototype.onscroll;\n\n/**\n * @see https://storage.spec.whatwg.org/\n * @constructor\n */\nfunction StorageManager() {}\n\n/** @return {!Promise} */\nStorageManager.prototype.persisted = function() {};\n\n/** @return {!Promise} */\nStorageManager.prototype.persist = function() {};\n\n/** @return {!Promise} */\nStorageManager.prototype.estimate = function() {};\n\n/**\n * @see https://storage.spec.whatwg.org/\n * @typedef {{\n * usage: number,\n * quota: number\n * }}\n */\nvar StorageEstimate;\n\n/*\n * Focus Management APIs\n *\n * See https://html.spec.whatwg.org/multipage/interaction.html#focus-management-apis\n */\n\n\n/**\n * @type {?Element}\n * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-document-activeelement\n */\nDocument.prototype.activeElement;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-document-hasfocus\n * @return {boolean}\n */\nDocument.prototype.hasFocus = function() {};\n\n/**\n * @param {{preventScroll: boolean}=} options\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-focus\n */\nElement.prototype.focus = function(options) {};\n\n/**\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-blur\n */\nElement.prototype.blur = function() {};\n", -+"externs/ie_vml.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for IE\'s vector markup language, or VML.\n *\n * @externs\n * @author robbyw@9oo91e.qjz9zk (Robby Walker)\n */\n\n\n/**\n * @type {Object|string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263836(VS.85).aspx\n */\nElement.prototype.coordorigin;\n\n/**\n * @type {Object|string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263837(VS.85).aspx\n */\nElement.prototype.coordsize;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263839(VS.85).aspx\n */\nElement.prototype.fillcolor;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263840(VS.85).aspx\n */\nElement.prototype.filled;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263871(VS.85).aspx\n */\nElement.prototype.path;\n\n/**\n * @type {number|string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263877(VS.85).aspx\n */\nElement.prototype.rotation;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263881(VS.85).aspx\n */\nElement.prototype.strokecolor;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263882(VS.85).aspx\n */\nElement.prototype.stroked;\n\n/**\n * @type {number|string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263883(VS.85).aspx\n */\nElement.prototype.strokeweight;\n', -+"externs/intersection_observer.js":'/*\n * Copyright 2016 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Externs for Intersection Observer objects.\n * @see https://w3c.github.io/IntersectionObserver/\n * @externs\n * @author robadurbin@9oo91e.qjz9zk (Rob Durbin)\n */\n\n// TODO(robadurbin): Once the Intersection Observer spec is adopted by W3C, add\n// a w3c_ prefix to this file\'s name.\n\n\n/**\n * These contain the information provided from a change event.\n * @see https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\n * @record\n */\nfunction IntersectionObserverEntry() {}\n\n/**\n * The time the change was observed.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-time\n * @const {number}\n */\nIntersectionObserverEntry.prototype.time;\n\n/**\n * The root intersection rectangle, if target belongs to the same unit of\n * related similar-origin browsing contexts as the intersection root, null\n * otherwise.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-rootbounds\n * @const {{top: number, right: number, bottom: number, left: number,\n * height: number, width: number}}\n */\nIntersectionObserverEntry.prototype.rootBounds;\n\n/**\n * The rectangle describing the element being observed.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-boundingclientrect\n * @const {!{top: number, right: number, bottom: number, left: number,\n * height: number, width: number}}\n */\nIntersectionObserverEntry.prototype.boundingClientRect;\n\n/**\n * The rectangle describing the intersection between the observed element and\n * the viewport.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-intersectionrect\n * @const {!{top: number, right: number, bottom: number, left: number,\n * height: number, width: number}}\n */\nIntersectionObserverEntry.prototype.intersectionRect;\n\n/**\n * Ratio of intersectionRect area to boundingClientRect area.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-intersectionratio\n * @const {number}\n */\nIntersectionObserverEntry.prototype.intersectionRatio;\n\n/**\n * The Element whose intersection with the intersection root changed.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-target\n * @const {!Element}\n */\nIntersectionObserverEntry.prototype.target;\n\n/**\n * Whether or not the target is intersecting with the root.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-isintersecting\n * @const {boolean}\n */\nIntersectionObserverEntry.prototype.isIntersecting;\n\n/**\n * Whether or not the target is visible with the root.\n * @see https://w3c.github.io/IntersectionObserver/v2/#dom-intersectionobserverentry-isvisible\n * @const {boolean|undefined}\n */\nIntersectionObserverEntry.prototype.isVisible;\n\n/**\n * Callback for the IntersectionObserver.\n * @see https://w3c.github.io/IntersectionObserver/#intersection-observer-callback\n * @typedef {function(!Array,!IntersectionObserver)}\n */\nvar IntersectionObserverCallback;\n\n/**\n * Options for the IntersectionObserver.\n * @see https://w3c.github.io/IntersectionObserver/v2/#intersection-observer-init\n * @typedef {{\n * threshold: (!Array|number|undefined),\n * delay: (number|undefined),\n * trackVisibility: (boolean|undefined),\n * root: (?Element|undefined),\n * rootMargin: (string|undefined)\n * }}\n */\nvar IntersectionObserverInit;\n\n/**\n * This is the constructor for Intersection Observer objects.\n * @see https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\n * @param {!IntersectionObserverCallback} handler The callback for the observer.\n * @param {!IntersectionObserverInit=} opt_options The object defining the\n * thresholds, etc.\n * @constructor\n */\nfunction IntersectionObserver(handler, opt_options) {};\n\n/**\n * The root Element to use for intersection, or null if the observer uses the\n * implicit root.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-root\n * @const {?Element}\n */\nIntersectionObserver.prototype.root;\n\n/**\n * Offsets applied to the intersection root\u2019s bounding box, effectively growing\n * or shrinking the box that is used to calculate intersections.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-rootmargin\n * @const {string}\n */\nIntersectionObserver.prototype.rootMargin;\n\n/**\n * A list of thresholds, sorted in increasing numeric order, where each\n * threshold is a ratio of intersection area to bounding box area of an observed\n * target.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-thresholds\n * @const {!Array}\n */\nIntersectionObserver.prototype.thresholds;\n\n/**\n * This is used to set which element to observe.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-observe\n * @param {!Element} element The element to observe.\n * @return {undefined}\n */\nIntersectionObserver.prototype.observe = function(element) {};\n\n/**\n * This is used to stop observing a given element.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-unobserve\n * @param {!Element} element The elmenent to stop observing.\n * @return {undefined}\n */\nIntersectionObserver.prototype.unobserve = function(element) {};\n\n/**\n * Disconnect.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-disconnect\n */\nIntersectionObserver.prototype.disconnect = function() {};\n\n/**\n * Take records.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-takerecords\n * @return {!Array.}\n */\nIntersectionObserver.prototype.takeRecords = function() {};\n', -+"externs/iphone.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for all iPhone extensions. Created from:\n * http://developer.apple.com/library/safari/navigation/\n *\n * @externs\n * @author agrieve@9oo91e.qjz9zk (Andrew Grieve)\n */\n\n\n/**\n * @type {number}\n */\nTouch.prototype.webkitForce;\n\n/**\n * @type {number}\n */\nTouch.prototype.webkitRadiusX;\n\n/**\n * @type {number}\n */\nTouch.prototype.webkitRadiusY;\n\n/**\n * The distance between two fingers since the start of an event as a multiplier\n * of the initial distance. The initial value is 1.0. If less than 1.0, the\n * gesture is pinch close (to zoom out). If greater than 1.0, the gesture is\n * pinch open (to zoom in).\n * @type {number}\n */\nTouchEvent.prototype.scale;\n\n/**\n * The delta rotation since the start of an event, in degrees, where clockwise\n * is positive and counter-clockwise is negative. The initial value is 0.0.\n * @type {number}\n */\nTouchEvent.prototype.rotation;\n\n/**\n * Initializes a newly created TouchEvent object.\n * @param {string} type\n * @param {boolean} canBubble\n * @param {boolean} cancelable\n * @param {Window} view\n * @param {number} detail\n * @param {number} screenX\n * @param {number} screenY\n * @param {number} clientX\n * @param {number} clientY\n * @param {boolean} ctrlKey\n * @param {boolean} altKey\n * @param {boolean} shiftKey\n * @param {boolean} metaKey\n * @param {TouchList} touches\n * @param {TouchList} targetTouches\n * @param {TouchList} changedTouches\n * @param {number} scale\n * @param {number} rotation\n * @return {undefined}\n */\nTouchEvent.prototype.initTouchEvent = function(type, canBubble, cancelable,\n view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey,\n metaKey, touches, targetTouches, changedTouches, scale, rotation) {};\n\n/**\n * The GestureEvent class encapsulates information about a multi-touch gesture.\n *\n * GestureEvent objects are high-level events that encapsulate the low-level\n * TouchEvent objects. Both GestureEvent and TouchEvent events are sent during\n * a multi-touch sequence. Gesture events contain scaling and rotation\n * information allowing gestures to be combined, if supported by the platform.\n * If not supported, one gesture ends before another starts. Listen for\n * GestureEvent events if you want to respond to gestures only, not process\n * the low-level TouchEvent objects.\n *\n * @see http://developer.apple.com/library/safari/#documentation/UserExperience/Reference/GestureEventClassReference/GestureEvent/GestureEvent.html\n * @extends {UIEvent}\n * @constructor\n */\nfunction GestureEvent() {}\n\n/**\n * The distance between two fingers since the start of an event as a multiplier\n * of the initial distance. The initial value is 1.0. If less than 1.0, the\n * gesture is pinch close (to zoom out). If greater than 1.0, the gesture is\n * pinch open (to zoom in).\n * @type {number}\n */\nGestureEvent.prototype.scale;\n\n/**\n * The delta rotation since the start of an event, in degrees, where clockwise\n * is positive and counter-clockwise is negative. The initial value is 0.0.\n * @type {number}\n */\nGestureEvent.prototype.rotation;\n\n/**\n * The target of this gesture.\n * @type {EventTarget}\n */\nGestureEvent.prototype.target;\n\n/**\n * Initializes a newly created GestureEvent object.\n * @param {string} type\n * @param {boolean} canBubble\n * @param {boolean} cancelable\n * @param {Window} view\n * @param {number} detail\n * @param {number} screenX\n * @param {number} screenY\n * @param {number} clientX\n * @param {number} clientY\n * @param {boolean} ctrlKey\n * @param {boolean} altKey\n * @param {boolean} shiftKey\n * @param {boolean} metaKey\n * @param {EventTarget} target\n * @param {number} scale\n * @param {number} rotation\n * @return {undefined}\n */\nGestureEvent.prototype.initGestureEvent = function(type, canBubble, cancelable,\n view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey,\n metaKey, target, scale, rotation) {};\n\n\n/**\n * Specifies the JavaScript method to invoke when a gesture is started by\n * two or more fingers touching the surface.\n * @type {?function(!GestureEvent)}\n */\nElement.prototype.ongesturestart;\n\n/**\n * Specifies the JavaScript method to invoke when fingers are moved during a\n * gesture.\n * @type {?function(!GestureEvent)}\n */\nElement.prototype.ongesturechange;\n\n/**\n * Specifies the JavaScript method to invoke when a gesture ends (when there are\n * 0 or 1 fingers touching the surface).\n * @type {?function(!GestureEvent)}\n */\nElement.prototype.ongestureend;\n\n/**\n * Specifies the JavaScript method to invoke when the browser device\'s\n * orientation changes, i.e.the device is rotated.\n * @type {?function(!Event)}\n * @see http://developer.apple.com/library/IOS/#documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html\n */\nWindow.prototype.onorientationchange;\n\n/**\n * Returns the orientation of the browser\'s device, one of [-90, 0, 90, 180].\n * @type {number}\n * @see http://developer.apple.com/library/IOS/#documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html\n */\nWindow.prototype.orientation;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLInputElement.prototype.autocorrect;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLInputElement.prototype.autocapitalize;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLTextAreaElement.prototype.autocorrect;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLTextAreaElement.prototype.autocapitalize;\n', -+"externs/mediakeys.js":'/*\n * Copyright 2015 The Closure Compiler authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview MediaKey externs.\n * Based on {@link http://goo.gl.qjz9zk/blgtZZ EME draft 12 March 2015}.\n * @externs\n */\n\n\n/**\n * @typedef {{contentType: string, robustness: string}}\n * @see https://w3c.github.io/encrypted-media/#mediakeysystemmediacapability-dictionary\n */\nvar MediaKeySystemMediaCapability;\n\n\n/** @typedef {{\n * label: (string|undefined),\n * initDataTypes: (!Array|undefined),\n * audioCapabilities: (!Array|undefined),\n * videoCapabilities: (!Array|undefined),\n * distinctiveIdentifier: (string|undefined),\n * persistentState: (string|undefined),\n * sessionTypes: (!Array|undefined)\n * }}\n * @see https://w3c.github.io/encrypted-media/#mediakeysystemconfiguration-dictionary\n */\nvar MediaKeySystemConfiguration;\n\n\n/**\n * @param {string} keySystem\n * @param {!Array} supportedConfigurations\n * @return {!Promise}\n * @see https://w3c.github.io/encrypted-media/#navigator-extension-requestmediakeysystemaccess\n */\nNavigator.prototype.requestMediaKeySystemAccess =\n function(keySystem, supportedConfigurations) {};\n\n\n/** @const {MediaKeys} */\nHTMLMediaElement.prototype.mediaKeys;\n\n\n/**\n * @param {MediaKeys} mediaKeys\n * @return {!Promise}\n * @see https://w3c.github.io/encrypted-media/#widl-HTMLMediaElement-setMediaKeys-Promise-void--MediaKeys-mediaKeys\n */\nHTMLMediaElement.prototype.setMediaKeys = function(mediaKeys) {};\n\n\n\n/**\n * @interface\n * @see https://w3c.github.io/encrypted-media/#mediakeysystemaccess-interface\n */\nfunction MediaKeySystemAccess() {}\n\n\n/** @return {!Promise} */\nMediaKeySystemAccess.prototype.createMediaKeys = function() {};\n\n\n/** @return {!MediaKeySystemConfiguration} */\nMediaKeySystemAccess.prototype.getConfiguration = function() {};\n\n\n/** @const {string} */\nMediaKeySystemAccess.prototype.keySystem;\n\n\n\n/**\n * @interface\n * @see https://w3c.github.io/encrypted-media/#mediakeys-interface\n */\nfunction MediaKeys() {}\n\n\n/**\n * @param {string=} opt_sessionType defaults to "temporary"\n * @return {!MediaKeySession}\n * @throws {TypeError} if opt_sessionType is invalid.\n */\nMediaKeys.prototype.createSession = function(opt_sessionType) {};\n\n\n/**\n * @param {!BufferSource} serverCertificate\n * @return {!Promise}\n */\nMediaKeys.prototype.setServerCertificate = function(serverCertificate) {};\n\n\n\n/**\n * @interface\n * @see https://w3c.github.io/encrypted-media/#mediakeystatusmap-interface\n */\nfunction MediaKeyStatusMap() {}\n\n\n/** @const {number} */\nMediaKeyStatusMap.prototype.size;\n\n\n/**\n * Array entry 0 is the key, 1 is the value.\n * @return {!Iterator>}\n */\nMediaKeyStatusMap.prototype.entries = function() {};\n\n\n/**\n * The function is called with each value.\n * @param {function(string, !BufferSource)} callback A callback function to run for\n * each media key. The first parameter is the key status; the second\n * parameter is the key ID.\n * @return {undefined}\n */\nMediaKeyStatusMap.prototype.forEach = function(callback) {};\n\n\n/**\n * @param {!BufferSource} keyId\n * @return {string|undefined}\n */\nMediaKeyStatusMap.prototype.get = function(keyId) {};\n\n\n/**\n * @param {!BufferSource} keyId\n * @return {boolean}\n */\nMediaKeyStatusMap.prototype.has = function(keyId) {};\n\n\n/**\n * @return {!Iterator}\n */\nMediaKeyStatusMap.prototype.keys = function() {};\n\n\n/**\n * @return {!Iterator}\n */\nMediaKeyStatusMap.prototype.values = function() {};\n\n\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://w3c.github.io/encrypted-media/#mediakeysession-interface\n */\nfunction MediaKeySession() {}\n\n\n/** @const {string} */\nMediaKeySession.prototype.sessionId;\n\n\n/** @const {number} */\nMediaKeySession.prototype.expiration;\n\n\n/** @const {!Promise} */\nMediaKeySession.prototype.closed;\n\n\n/** @const {!MediaKeyStatusMap} */\nMediaKeySession.prototype.keyStatuses;\n\n\n/**\n * @param {string} initDataType\n * @param {!BufferSource} initData\n * @return {!Promise}\n */\nMediaKeySession.prototype.generateRequest = function(initDataType, initData) {};\n\n\n/**\n * @param {string} sessionId\n * @return {!Promise}}\n */\nMediaKeySession.prototype.load = function(sessionId) {};\n\n\n/**\n * @param {!BufferSource} response\n * @return {!Promise}\n */\nMediaKeySession.prototype.update = function(response) {};\n\n\n/** @return {!Promise} */\nMediaKeySession.prototype.close = function() {};\n\n\n/** @return {!Promise} */\nMediaKeySession.prototype.remove = function() {};\n\n\n/**\n * @override\n */\nMediaKeySession.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n\n/**\n * @override\n */\nMediaKeySession.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n\n/**\n * @override\n * @return {boolean}\n */\nMediaKeySession.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @record\n * @extends {EventInit}\n */\nfunction MediaKeyMessageEventInit() {};\n\n/** @type {string} */\nMediaKeyMessageEventInit.prototype.messageType;\n\n/** @type {!ArrayBuffer} */\nMediaKeyMessageEventInit.prototype.message;\n\n\n/**\n * @constructor\n * @param {string} type\n * @param {MediaKeyMessageEventInit} eventInitDict\n * @extends {Event}\n * @see https://w3c.github.io/encrypted-media/#mediakeymessageevent\n */\nfunction MediaKeyMessageEvent(type, eventInitDict) {}\n\n\n/** @const {string} */\nMediaKeyMessageEvent.prototype.messageType;\n\n\n/** @const {!ArrayBuffer} */\nMediaKeyMessageEvent.prototype.message;\n\n\n/** @const {!MediaKeySession} */\nMediaKeyMessageEvent.prototype.target;\n\n/**\n * @record\n * @extends {EventInit}\n */\nfunction MediaEncryptedEventInit() {};\n\n/** @type {(string | undefined)} */\nMediaEncryptedEventInit.prototype.initDataType;\n\n/** @type {(ArrayBuffer | undefined)} */\nMediaEncryptedEventInit.prototype.initData;\n\n/**\n * @constructor\n * @param {string} type\n * @param {MediaEncryptedEventInit=} opt_eventInitDict\n * @extends {Event}\n * @see https://w3c.github.io/encrypted-media/#mediaencryptedevent\n */\nfunction MediaEncryptedEvent(type, opt_eventInitDict) {}\n\n\n/** @const {string} */\nMediaEncryptedEvent.prototype.initDataType;\n\n\n/** @const {ArrayBuffer} */\nMediaEncryptedEvent.prototype.initData;\n\n\n/** @const {!HTMLMediaElement} */\nMediaEncryptedEvent.prototype.target;\n\n', -+"externs/mediasource.js":'/*\n * Copyright 2012 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for the Media Source Extensions. Note that the\n * properties available here are the union of several versions of the spec.\n * @see http://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html\n *\n * @externs\n * @author mattward@9oo91e.qjz9zk (Matt Ward)\n */\n\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction MediaSource() {}\n\n/** @override */\nMediaSource.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nMediaSource.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nMediaSource.prototype.dispatchEvent = function(evt) {};\n\n/** @type {Array} */\nMediaSource.prototype.sourceBuffers;\n\n/** @type {Array} */\nMediaSource.prototype.activeSourceBuffers;\n\n/** @type {number} */\nMediaSource.prototype.duration;\n\n/**\n * @param {string} type\n * @return {SourceBuffer}\n */\nMediaSource.prototype.addSourceBuffer = function(type) {};\n\n/**\n * @param {SourceBuffer} sourceBuffer\n * @return {undefined}\n */\nMediaSource.prototype.removeSourceBuffer = function(sourceBuffer) {};\n\n/**\n * Updates the live seekable range.\n * @param {number} start\n * @param {number} end\n */\nMediaSource.prototype.setLiveSeekableRange = function(start, end) {};\n\n/**\n * Clears the live seekable range.\n * @return {void}\n */\nMediaSource.prototype.clearLiveSeekableRange = function() {};\n\n/** @type {string} */\nMediaSource.prototype.readyState;\n\n/**\n * @param {string=} opt_error\n * @return {undefined}\n */\nMediaSource.prototype.endOfStream = function(opt_error) {};\n\n/**\n * @param {string} type\n * @return {boolean}\n */\nMediaSource.isTypeSupported = function(type) {};\n\n\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction SourceBuffer() {}\n\n/** @override */\nSourceBuffer.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSourceBuffer.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSourceBuffer.prototype.dispatchEvent = function(evt) {};\n\n/** @type {string} */\nSourceBuffer.prototype.appendMode;\n\n/** @type {boolean} */\nSourceBuffer.prototype.updating;\n\n/** @type {TimeRanges} */\nSourceBuffer.prototype.buffered;\n\n/** @type {number} */\nSourceBuffer.prototype.timestampOffset;\n\n/** @type {number} */\nSourceBuffer.prototype.appendWindowStart;\n\n/** @type {number} */\nSourceBuffer.prototype.appendWindowEnd;\n\n/**\n * @param {Uint8Array} data\n * @return {undefined}\n */\nSourceBuffer.prototype.append = function(data) {};\n\n/**\n * @param {ArrayBuffer|ArrayBufferView} data\n * @return {undefined}\n */\nSourceBuffer.prototype.appendBuffer = function(data) {};\n\n/**\n * Abort the current segment append sequence.\n * @return {undefined}\n */\nSourceBuffer.prototype.abort = function() {};\n\n/**\n * @param {number} start\n * @param {number} end\n * @return {undefined}\n */\nSourceBuffer.prototype.remove = function(start, end) {};\n\n/**\n * @param {string} type\n * @return {undefined}\n */\nSourceBuffer.prototype.changeType = function(type) {};\n', - "externs/page_visibility.js":"/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Externs for Page Visibility.\n *\n * @see http://www.w3.org/TR/page-visibility\n * @externs\n */\n\n/**\n * Set of possible values: 'hidden', 'visible', 'prerender', 'unloaded'.\n * @typedef {string}\n * @see http://www.w3.org/TR/page-visibility/#VisibilityState\n */\nvar VisibilityState;\n", --"externs/url.js":"/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for URL and URLSearchParams from the spec at\n * https://url.spec.whatwg.org.\n *\n * @externs\n * @author rdcronin@google.com (Devlin Cronin)\n */\n\n/**\n * @typedef {Array}\n */\nvar URLSearchParamsTupleType;\n\n/**\n * Represents the query string of a URL.\n *\n * * When `init` is a string, it is basically parsed as a query string\n * `'name1=value1&name2=value2'`.\n *\n * * When `init` is an array of arrays of string\n * `([['name1', 'value1'], ['name2', 'value2']])`,\n * it must contain pairs of strings, where the first item in the pair will be\n * interpreted as a key and the second as a value.\n *\n * NOTE: The specification uses Iterable rather than Array, but this is not\n * supported in Edge 17 - 18.\n *\n * * When `init` is an object, keys and values will be interpreted as such\n * `({name1: 'value1', name2: 'value2'}).\n *\n * @see https://url.spec.whatwg.org/#interface-urlsearchparams\n * @constructor\n * @implements {Iterable>}\n * @param {(string|!Array|!Object)=}\n * init\n */\nfunction URLSearchParams(init) {}\n\n/**\n * @param {string} name\n * @param {string} value\n * @return {undefined}\n */\nURLSearchParams.prototype.append = function(name, value) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n */\nURLSearchParams.prototype.delete = function(name) {};\n\n/**\n * @return {!IteratorIterable>}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams/entries\n */\nURLSearchParams.prototype.entries = function() {};\n\n/**\n * @param {string} name\n * @return {?string}\n */\nURLSearchParams.prototype.get = function(name) {};\n\n/**\n * @param {string} name\n * @return {!Array}\n */\nURLSearchParams.prototype.getAll = function(name) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n */\nURLSearchParams.prototype.has = function(name) {};\n\n/**\n * @param {string} name\n * @param {string} value\n * @return {undefined}\n */\nURLSearchParams.prototype.set = function(name, value) {};\n\n/**\n * @return {undefined}\n */\nURLSearchParams.prototype.sort = function() {};\n\n/**\n * @see https://url.spec.whatwg.org\n * @constructor\n * @param {string} url\n * @param {(string|!URL)=} base\n */\nfunction URL(url, base) {}\n\n/** @type {string} */\nURL.prototype.href;\n\n/**\n * @const {string}\n */\nURL.prototype.origin;\n\n/** @type {string} */\nURL.prototype.protocol;\n\n/** @type {string} */\nURL.prototype.username;\n\n/** @type {string} */\nURL.prototype.password;\n\n/** @type {string} */\nURL.prototype.host;\n\n/** @type {string} */\nURL.prototype.hostname;\n\n/** @type {string} */\nURL.prototype.port;\n\n/** @type {string} */\nURL.prototype.pathname;\n\n/** @type {string} */\nURL.prototype.search;\n\n/**\n * @const {!URLSearchParams}\n */\nURL.prototype.searchParams;\n\n/** @type {string} */\nURL.prototype.hash;\n\n/**\n * @param {string} domain\n * @return {string}\n */\nURL.domainToASCII = function(domain) {};\n\n/**\n * @param {string} domain\n * @return {string}\n */\nURL.domainToUnicode = function(domain) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!File|!Blob|!MediaSource|!MediaStream} obj\n * @return {string}\n */\nURL.createObjectURL = function(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nURL.revokeObjectURL = function(url) {};\n", -+"externs/url.js":"/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for URL and URLSearchParams from the spec at\n * https://url.spec.whatwg.org.\n *\n * @externs\n * @author rdcronin@9oo91e.qjz9zk (Devlin Cronin)\n */\n\n/**\n * @typedef {Array}\n */\nvar URLSearchParamsTupleType;\n\n/**\n * Represents the query string of a URL.\n *\n * * When `init` is a string, it is basically parsed as a query string\n * `'name1=value1&name2=value2'`.\n *\n * * When `init` is an array of arrays of string\n * `([['name1', 'value1'], ['name2', 'value2']])`,\n * it must contain pairs of strings, where the first item in the pair will be\n * interpreted as a key and the second as a value.\n *\n * NOTE: The specification uses Iterable rather than Array, but this is not\n * supported in Edge 17 - 18.\n *\n * * When `init` is an object, keys and values will be interpreted as such\n * `({name1: 'value1', name2: 'value2'}).\n *\n * @see https://url.spec.whatwg.org/#interface-urlsearchparams\n * @constructor\n * @implements {Iterable>}\n * @param {(string|!Array|!Object)=}\n * init\n */\nfunction URLSearchParams(init) {}\n\n/**\n * @param {string} name\n * @param {string} value\n * @return {undefined}\n */\nURLSearchParams.prototype.append = function(name, value) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n */\nURLSearchParams.prototype.delete = function(name) {};\n\n/**\n * @return {!IteratorIterable>}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/URLSearchParams/entries\n */\nURLSearchParams.prototype.entries = function() {};\n\n/**\n * @param {string} name\n * @return {?string}\n */\nURLSearchParams.prototype.get = function(name) {};\n\n/**\n * @param {string} name\n * @return {!Array}\n */\nURLSearchParams.prototype.getAll = function(name) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n */\nURLSearchParams.prototype.has = function(name) {};\n\n/**\n * @param {string} name\n * @param {string} value\n * @return {undefined}\n */\nURLSearchParams.prototype.set = function(name, value) {};\n\n/**\n * @return {undefined}\n */\nURLSearchParams.prototype.sort = function() {};\n\n/**\n * @see https://url.spec.whatwg.org\n * @constructor\n * @param {string} url\n * @param {(string|!URL)=} base\n */\nfunction URL(url, base) {}\n\n/** @type {string} */\nURL.prototype.href;\n\n/**\n * @const {string}\n */\nURL.prototype.origin;\n\n/** @type {string} */\nURL.prototype.protocol;\n\n/** @type {string} */\nURL.prototype.username;\n\n/** @type {string} */\nURL.prototype.password;\n\n/** @type {string} */\nURL.prototype.host;\n\n/** @type {string} */\nURL.prototype.hostname;\n\n/** @type {string} */\nURL.prototype.port;\n\n/** @type {string} */\nURL.prototype.pathname;\n\n/** @type {string} */\nURL.prototype.search;\n\n/**\n * @const {!URLSearchParams}\n */\nURL.prototype.searchParams;\n\n/** @type {string} */\nURL.prototype.hash;\n\n/**\n * @param {string} domain\n * @return {string}\n */\nURL.domainToASCII = function(domain) {};\n\n/**\n * @param {string} domain\n * @return {string}\n */\nURL.domainToUnicode = function(domain) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!File|!Blob|!MediaSource|!MediaStream} obj\n * @return {string}\n */\nURL.createObjectURL = function(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nURL.revokeObjectURL = function(url) {};\n", - "externs/v8.js":'/*\n * Copyright 2013 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview This file describes the externs API for V8-specific objects.\n * @externs\n */\n\n\n\n/**\n * Stack frame elements in V8.\n * @constructor\n */\nfunction CallSite() {}\n\n\n/**\n * Returns the value of this.\n * @return {Object|undefined}\n */\nCallSite.prototype.getThis = function() {};\n\n\n/**\n * Returns the type of this as a string. This is the name of the function stored\n * in the constructor field of this, if available, otherwise the object\'s\n * [[Class]] internal property.\n * @return {string|undefined}\n */\nCallSite.prototype.getTypeName = function() {};\n\n\n/**\n * Returns the current function.\n * @return {!Function|undefined}\n */\nCallSite.prototype.getFunction = function() {};\n\n\n/**\n * Returns the name of the current function, typically its name property. If a\n * name property is not available an attempt will be made to try to infer a name\n * from the function\'s context.\n * @return {string|undefined}\n */\nCallSite.prototype.getFunctionName = function() {};\n\n\n/**\n * Returns the name of the property of this or one of its prototypes that holds\n * the current function.\n * @return {string|undefined}\n */\nCallSite.prototype.getMethodName = function() {};\n\n\n/**\n * If this function was defined in a script returns the name of the script\n * @return {string|undefined}\n */\nCallSite.prototype.getFileName = function() {};\n\n\n/**\n * If this function was defined in a script returns the current line number.\n * @return {number|undefined}\n */\nCallSite.prototype.getLineNumber = function() {};\n\n\n/**\n * If this function was defined in a script returns the current column number.\n * @return {number|undefined}\n */\nCallSite.prototype.getColumnNumber = function() {};\n\n\n/**\n * If this function was created using a call to eval, returns a CallSite object\n * representing the location where eval was called\n * @return {CallSite|undefined}\n */\nCallSite.prototype.getEvalOrigin = function() {};\n\n\n/**\n * Is this a toplevel invocation, that is, is this the global object?\n * @return {boolean}\n */\nCallSite.prototype.isToplevel = function() {};\n\n\n/**\n * Does this call take place in code defined by a call to eval?\n * @return {boolean}\n */\nCallSite.prototype.isEval = function() {};\n\n\n/**\n * Is this call in native V8 code?\n * @return {boolean}\n */\nCallSite.prototype.isNative = function() {};\n\n\n/**\n * Is this a constructor call?\n * @return {boolean}\n */\nCallSite.prototype.isConstructor = function() {};\n', --"externs/webstorage.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for W3C\'s WebStorage specification.\n * This file depends on html5.js.\n * @externs\n * @author jeffbailey@google.com (Jeff Bailey)\n */\n\n/**\n * @interface\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-storage-interface\n */\nfunction Storage() {}\n\n/**\n * @const {number}\n */\nStorage.prototype.length;\n\n/**\n * @param {number} index\n * @return {?string}\n */\nStorage.prototype.key = function(index) {};\n\n/**\n * @param {string} key\n * @return {?string}\n */\nStorage.prototype.getItem = function(key) {};\n\n/**\n * @param {string} key\n * @param {string} data\n * @return {void}\n */\nStorage.prototype.setItem = function(key, data) {};\n\n/**\n * @param {string} key\n * @return {void}\n */\nStorage.prototype.removeItem = function(key) {};\n\n/**\n * @return {void}\n */\nStorage.prototype.clear = function() {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-sessionstorage-attribute\n */\nfunction WindowSessionStorage() {}\n\n/**\n * @type {Storage}\n */\nWindowSessionStorage.prototype.sessionStorage;\n\n/**\n * Window implements WindowSessionStorage\n *\n * @type {Storage}\n */\nWindow.prototype.sessionStorage;\n\n/**\n * @interface\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-localstorage-attribute\n */\nfunction WindowLocalStorage() {}\n\n/**\n * @type {Storage}\n */\nWindowLocalStorage.prototype.localStorage;\n\n/**\n * Window implements WindowLocalStorage\n *\n * @type {Storage}\n */\nWindow.prototype.localStorage;\n\n/**\n * This is the storage event interface.\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-storage-event\n * @extends {Event}\n * @constructor\n */\nfunction StorageEvent() {}\n\n/**\n * @type {string}\n */\nStorageEvent.prototype.key;\n\n/**\n * @type {?string}\n */\nStorageEvent.prototype.oldValue;\n\n/**\n * @type {?string}\n */\nStorageEvent.prototype.newValue;\n\n/**\n * @type {string}\n */\nStorageEvent.prototype.url;\n\n/**\n * @type {?Storage}\n */\nStorageEvent.prototype.storageArea;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {string} keyArg\n * @param {?string} oldValueArg\n * @param {?string} newValueArg\n * @param {string} urlArg\n * @param {?Storage} storageAreaArg\n * @return {void}\n */\nStorageEvent.prototype.initStorageEvent = function(typeArg, canBubbleArg,\n cancelableArg, keyArg,\n oldValueArg, newValueArg,\n urlArg, storageAreaArg) {};\n\n', -+"externs/webstorage.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for W3C\'s WebStorage specification.\n * This file depends on html5.js.\n * @externs\n * @author jeffbailey@9oo91e.qjz9zk (Jeff Bailey)\n */\n\n/**\n * @interface\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-storage-interface\n */\nfunction Storage() {}\n\n/**\n * @const {number}\n */\nStorage.prototype.length;\n\n/**\n * @param {number} index\n * @return {?string}\n */\nStorage.prototype.key = function(index) {};\n\n/**\n * @param {string} key\n * @return {?string}\n */\nStorage.prototype.getItem = function(key) {};\n\n/**\n * @param {string} key\n * @param {string} data\n * @return {void}\n */\nStorage.prototype.setItem = function(key, data) {};\n\n/**\n * @param {string} key\n * @return {void}\n */\nStorage.prototype.removeItem = function(key) {};\n\n/**\n * @return {void}\n */\nStorage.prototype.clear = function() {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-sessionstorage-attribute\n */\nfunction WindowSessionStorage() {}\n\n/**\n * @type {Storage}\n */\nWindowSessionStorage.prototype.sessionStorage;\n\n/**\n * Window implements WindowSessionStorage\n *\n * @type {Storage}\n */\nWindow.prototype.sessionStorage;\n\n/**\n * @interface\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-localstorage-attribute\n */\nfunction WindowLocalStorage() {}\n\n/**\n * @type {Storage}\n */\nWindowLocalStorage.prototype.localStorage;\n\n/**\n * Window implements WindowLocalStorage\n *\n * @type {Storage}\n */\nWindow.prototype.localStorage;\n\n/**\n * This is the storage event interface.\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-storage-event\n * @extends {Event}\n * @constructor\n */\nfunction StorageEvent() {}\n\n/**\n * @type {string}\n */\nStorageEvent.prototype.key;\n\n/**\n * @type {?string}\n */\nStorageEvent.prototype.oldValue;\n\n/**\n * @type {?string}\n */\nStorageEvent.prototype.newValue;\n\n/**\n * @type {string}\n */\nStorageEvent.prototype.url;\n\n/**\n * @type {?Storage}\n */\nStorageEvent.prototype.storageArea;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {string} keyArg\n * @param {?string} oldValueArg\n * @param {?string} newValueArg\n * @param {string} urlArg\n * @param {?Storage} storageAreaArg\n * @return {void}\n */\nStorageEvent.prototype.initStorageEvent = function(typeArg, canBubbleArg,\n cancelableArg, keyArg,\n oldValueArg, newValueArg,\n urlArg, storageAreaArg) {};\n\n', - "externs/whatwg_encoding.js":'/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for WHATWG\'s Encoding specification\n * https://encoding.spec.whatwg.org\n * @externs\n */\n\n/**\n * @constructor\n * @param {string=} encoding\n * @param {Object=} options\n */\nfunction TextDecoder(encoding, options) {}\n\n/** @type {string} **/ TextDecoder.prototype.encoding;\n/** @type {boolean} **/ TextDecoder.prototype.fatal;\n/** @type {boolean} **/ TextDecoder.prototype.ignoreBOM;\n\n/**\n * @param {!BufferSource=} input\n * @param {?Object=} options\n * @return {string}\n * @see https://encoding.spec.whatwg.org/#textdecoder\n */\nTextDecoder.prototype.decode = function decode(input, options) {};\n\n/**\n * @constructor\n * @param {string=} utfLabel\n */\nfunction TextEncoder(utfLabel) {}\n\n/** @type {string} **/ TextEncoder.prototype.encoding;\n\n/**\n * @param {string=} input\n * @return {!Uint8Array}\n */\nTextEncoder.prototype.encode = function(input) {};\n', - "externs/w3c_abort.js":'/*\n * Copyright 2018 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for AbortController\n * @see https://dom.spec.whatwg.org/#aborting-ongoing-activities\n * @externs\n */\n\n\n\n/**\n * @record\n * @extends {EventTarget}\n * @see https://dom.spec.whatwg.org/#interface-AbortSignal\n */\nfunction AbortSignal() {}\n\n/** @type {boolean} */\nAbortSignal.prototype.aborted;\n\n/** @type {?function(!Event)} */\nAbortSignal.prototype.onabort;\n\n\n\n/**\n * @constructor\n * @see https://dom.spec.whatwg.org/#interface-abortcontroller\n */\nfunction AbortController() {}\n\n/** @const {!AbortSignal} */\nAbortController.prototype.signal;\n\n/** @return {void} */\nAbortController.prototype.abort = function() {};\n', --"externs/w3c_anim_timing.js":'/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for timing control for script base animations. The\n * whole file has been fully type annotated.\n *\n * @see http://www.w3.org/TR/animation-timing/\n * @see http://webstuff.nfshost.com/anim-timing/Overview.html\n * @externs\n * @author bcornell@google.com (Brian Cornell)\n */\n\n/**\n * @typedef {function(number): undefined}\n * @see https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#framerequestcallback\n */\nvar FrameRequestCallback;\n\n/**\n * @param {!FrameRequestCallback} callback\n * @param {Element=} opt_element In early versions of this API, the callback\n * was invoked only if the element was visible.\n * @return {number}\n */\nfunction requestAnimationFrame(callback, opt_element) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction cancelRequestAnimationFrame(handle) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction cancelAnimationFrame(handle) {};\n', -+"externs/w3c_anim_timing.js":'/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for timing control for script base animations. The\n * whole file has been fully type annotated.\n *\n * @see http://www.w3.org/TR/animation-timing/\n * @see http://webstuff.nfshost.com/anim-timing/Overview.html\n * @externs\n * @author bcornell@9oo91e.qjz9zk (Brian Cornell)\n */\n\n/**\n * @typedef {function(number): undefined}\n * @see https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#framerequestcallback\n */\nvar FrameRequestCallback;\n\n/**\n * @param {!FrameRequestCallback} callback\n * @param {Element=} opt_element In early versions of this API, the callback\n * was invoked only if the element was visible.\n * @return {number}\n */\nfunction requestAnimationFrame(callback, opt_element) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction cancelRequestAnimationFrame(handle) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction cancelAnimationFrame(handle) {};\n', - "externs/nonstandard_anim_timing.js":'/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Nonstandard definitions for timing control for script base animations.\n *\n * @externs\n */\n\n/**\n * @param {!FrameRequestCallback} callback\n * @param {Element=} opt_element\n * @return {number}\n */\nfunction webkitRequestAnimationFrame(callback, opt_element) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction webkitCancelRequestAnimationFrame(handle) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction webkitCancelAnimationFrame(handle) {};\n\n/**\n * @param {?FrameRequestCallback} callback It\'s legitimate to pass a null\n * callback and listen on the MozBeforePaint event instead.\n * @param {Element=} opt_element\n * @return {number}\n */\nfunction mozRequestAnimationFrame(callback, opt_element) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction mozCancelRequestAnimationFrame(handle) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction mozCancelAnimationFrame(handle) {};\n\n/**\n * @param {!FrameRequestCallback} callback\n * @param {Element=} opt_element\n * @return {number}\n */\nfunction msRequestAnimationFrame(callback, opt_element) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction msCancelRequestAnimationFrame(handle) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction msCancelAnimationFrame(handle) {};\n\n/**\n * @param {!FrameRequestCallback} callback\n * @param {Element=} opt_element\n * @return {number}\n */\nfunction oRequestAnimationFrame(callback, opt_element) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction oCancelRequestAnimationFrame(handle) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction oCancelAnimationFrame(handle) {};\n', - "externs/w3c_audio.js":'/*\n * Copyright 2012 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for the API related to audio.\n * Definitions for the Web Audio API.\n * This file is based on the W3C Working Draft 08 December 2015.\n * @see http://www.w3.org/TR/webaudio/\n *\n * @externs\n */\n\n/**\n * @implements {EventTarget}\n * @constructor\n */\nfunction BaseAudioContext() {}\n\n/** @type {!AudioDestinationNode} */\nBaseAudioContext.prototype.destination;\n\n/** @type {number} */\nBaseAudioContext.prototype.sampleRate;\n\n/** @type {number} */\nBaseAudioContext.prototype.currentTime;\n\n/** @type {!AudioListener} */\nBaseAudioContext.prototype.listener;\n\n/**\n * @type {string}\n * See https://www.w3.org/TR/webaudio/#BaseAudioContext for valid values\n */\nBaseAudioContext.prototype.state;\n\n/**\n * @param {number} numberOfChannels\n * @param {number} length\n * @param {number} sampleRate\n * @return {!AudioBuffer}\n */\nBaseAudioContext.prototype.createBuffer =\n function(numberOfChannels, length, sampleRate) {};\n\n/**\n * @param {!ArrayBuffer} audioData\n * @param {function(!AudioBuffer)=} successCallback\n * @param {function(?)=} errorCallback\n * @return {!Promise}\n */\nBaseAudioContext.prototype.decodeAudioData =\n function(audioData, successCallback, errorCallback) {};\n\n/**\n * @return {!AudioBufferSourceNode}\n */\nBaseAudioContext.prototype.createBufferSource = function() {};\n\n/**\n * @deprecated Use createAudioWorker instead\n * @param {number=} bufferSize\n * @param {number=} numberOfInputChannels_opt\n * @param {number=} numberOfOutputChannels_opt\n * @return {!ScriptProcessorNode}\n */\nBaseAudioContext.prototype.createScriptProcessor = function(bufferSize,\n numberOfInputChannels_opt, numberOfOutputChannels_opt) {};\n\n/**\n * @return {!AnalyserNode}\n */\nBaseAudioContext.prototype.createAnalyser = function() {};\n\n/**\n * @return {!GainNode}\n */\nBaseAudioContext.prototype.createGain = function() {};\n\n/**\n * @param {number=} maxDelayTime\n * @return {!DelayNode}\n */\nBaseAudioContext.prototype.createDelay = function(maxDelayTime) {};\n\n/**\n * @return {!BiquadFilterNode}\n */\nBaseAudioContext.prototype.createBiquadFilter = function() {};\n\n/**\n * @return {!WaveShaperNode}\n */\nBaseAudioContext.prototype.createWaveShaper = function() {};\n\n/**\n * @deprecated Use BaseAudioContext#createSpatialPanner or BaseAudioContext#createStereoPanner\n * @return {!PannerNode}\n */\nBaseAudioContext.prototype.createPanner = function() {};\n\n/**\n * @return {!StereoPannerNode}\n */\nBaseAudioContext.prototype.createStereoPanner = function() {};\n\n/**\n * @return {!ConvolverNode}\n */\nBaseAudioContext.prototype.createConvolver = function() {};\n\n/**\n * @param {number=} numberOfOutputs\n * @return {!ChannelSplitterNode}\n */\nBaseAudioContext.prototype.createChannelSplitter = function(numberOfOutputs) {};\n\n/**\n * @param {number=} numberOfInputs\n * @return {!ChannelMergerNode}\n */\nBaseAudioContext.prototype.createChannelMerger = function(numberOfInputs) {};\n\n/**\n * @return {!DynamicsCompressorNode}\n */\nBaseAudioContext.prototype.createDynamicsCompressor = function() {};\n\n/**\n * @return {!OscillatorNode}\n */\nBaseAudioContext.prototype.createOscillator = function() {};\n\n/**\n * @param {!Float32Array} real\n * @param {!Float32Array} imag\n * @return {!PeriodicWave}\n */\nBaseAudioContext.prototype.createPeriodicWave = function(real, imag) {};\n\n/**\n * @return {!Promise}\n */\nBaseAudioContext.prototype.resume = function() {};\n\n/**\n * @return {!Promise}\n */\nBaseAudioContext.prototype.suspend = function() {};\n\n/**\n * @return {!Promise}\n */\nBaseAudioContext.prototype.close = function() {};\n\n/** @type {?function(!Event)} */\nBaseAudioContext.prototype.onstatechange;\n\n/**\n * @param {string} scriptURL\n * @return {!Promise}\n */\nBaseAudioContext.prototype.createAudioWorker = function(scriptURL) {};\n\n/**\n * @param {!IArrayLike} feedforward\n * @param {!IArrayLike} feedback\n * @return {!IIRFilterNode}\n */\nBaseAudioContext.prototype.createIIRFilter = function(feedforward, feedback) {};\n\n/**\n * @return {!SpatialPannerNode}\n */\nBaseAudioContext.prototype.createSpatialPanner = function() {};\n\n/**\n * @record\n * @see https://webaudio.github.io/web-audio-api/#idl-def-AudioContextOptions\n */\nfunction AudioContextOptions() {};\n\n/** @type {(undefined|string|number)} */\nAudioContextOptions.prototype.latencyHint;\n\n/** @type {(undefined|number)} */\nAudioContextOptions.prototype.sampleRate;\n\n/**\n * Includes the non-standard contextOptions optional options parameter\n * implemented by Chrome and Firefox.\n * @param {!AudioContextOptions=} contextOptions\n * @constructor\n * @extends {BaseAudioContext}\n */\nfunction AudioContext(contextOptions) {}\n\n/**\n * @param {!HTMLMediaElement} mediaElement\n * @return {!MediaElementAudioSourceNode}\n */\nAudioContext.prototype.createMediaElementSource = function(mediaElement) {};\n\n/**\n * @return {!MediaStreamAudioDestinationNode}\n */\nAudioContext.prototype.createMediaStreamDestination = function() {};\n\n/**\n * @param {!MediaStream} mediaStream\n * @return {!MediaStreamAudioSourceNode}\n */\nAudioContext.prototype.createMediaStreamSource = function(mediaStream) {};\n\n/**\n * @deprecated Use createScriptProcessor instead.\n * @param {number} bufferSize\n * @param {number} numberOfInputs\n * @param {number} numberOfOuputs\n * @return {!ScriptProcessorNode}\n */\nAudioContext.prototype.createJavaScriptNode = function(bufferSize,\n numberOfInputs, numberOfOuputs) {};\n\n/**\n * @deprecated Use createGain instead.\n * @return {!GainNode}\n */\nAudioContext.prototype.createGainNode = function() {};\n\n/**\n * @deprecated Use createDelay instead.\n * @param {number=} maxDelayTime\n * @return {!DelayNode}\n */\nAudioContext.prototype.createDelayNode = function(maxDelayTime) {};\n\n/**\n * @param {number} numberOfChannels\n * @param {number} length\n * @param {number} sampleRate\n * @constructor\n * @extends {BaseAudioContext}\n */\nfunction OfflineAudioContext(numberOfChannels, length, sampleRate) {}\n\n/**\n * @return {!Promise}\n */\nOfflineAudioContext.prototype.startRendering = function() {};\n\n/** @type {function(!OfflineAudioCompletionEvent)} */\nOfflineAudioContext.prototype.oncomplete;\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction OfflineAudioCompletionEvent() {}\n\n/** @type {AudioBuffer} */\nOfflineAudioCompletionEvent.prototype.renderedBuffer;\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see https://www.w3.org/TR/webaudio/#the-audionode-interface\n */\nfunction AudioNode() {}\n\n/**\n * @override\n */\nAudioNode.prototype.addEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n */\nAudioNode.prototype.removeEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nAudioNode.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @param {!AudioNode|!AudioParam} destination\n * @param {number=} output\n * @param {number=} input\n * @return {AudioNode|void}\n */\nAudioNode.prototype.connect = function(destination, output, input) {};\n\n/**\n * @param {!AudioNode|!AudioParam|number=} destination\n * @param {number=} output\n * @param {number=} input\n */\nAudioNode.prototype.disconnect = function(destination, output, input) {};\n\n/** @type {!AudioContext} */\nAudioNode.prototype.context;\n\n/** @type {number} */\nAudioNode.prototype.numberOfInputs;\n\n/** @type {number} */\nAudioNode.prototype.numberOfOutputs;\n\n/** @type {number} */\nAudioNode.prototype.channelCount;\n\n/**\n * @type {string}\n * See https://www.w3.org/TR/webaudio/#the-audionode-interface for valid values\n */\nAudioNode.prototype.channelCountMode;\n\n/**\n * @type {string}\n * See https://www.w3.org/TR/webaudio/#the-audionode-interface for valid values\n */\nAudioNode.prototype.channelInterpretation;\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction AudioSourceNode() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction AudioDestinationNode() {}\n\n/**\n * @deprecated Use AudioDestinationNode#maxChannelCount\n * @type {number}\n */\nAudioDestinationNode.prototype.numberOfChannels;\n\n/** @type {number} */\nAudioDestinationNode.prototype.maxChannelCount;\n\n/**\n * @constructor\n */\nfunction AudioParam() {}\n\n/** @type {number} */\nAudioParam.prototype.value;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioParam.prototype.maxValue;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioParam.prototype.minValue;\n\n/** @type {number} */\nAudioParam.prototype.defaultValue;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioParam.prototype.units;\n\n/**\n * @param {number} value\n * @param {number} startTime\n * @return {!AudioParam}\n * @throws {!TypeError} if startTime is negative or not a finite number\n */\nAudioParam.prototype.setValueAtTime = function(value, startTime) {};\n\n/**\n * @param {number} value\n * @param {number} endTime\n * @return {!AudioParam}\n * @throws {!TypeError} if endTime is negative or not a finite number\n */\nAudioParam.prototype.linearRampToValueAtTime = function(value, endTime) {};\n\n/**\n * @param {number} value\n * @param {number} endTime\n * @return {!AudioParam}\n * @throws {!TypeError} if endTime is negative or not a finite number\n */\nAudioParam.prototype.exponentialRampToValueAtTime = function(value, endTime) {};\n\n/**\n * @param {number} target\n * @param {number} startTime\n * @param {number} timeConstant\n * @return {!AudioParam}\n * @throws {!TypeError} if startTime is negative or not a finite number, or\n * timeConstant is not strictly positive\n */\nAudioParam.prototype.setTargetAtTime = function(target, startTime,\n timeConstant) {};\n\n/**\n * @deprecated Use setTargetAtTime instead.\n * @param {number} target\n * @param {number} startTime\n * @param {number} timeConstant\n * @return {!AudioParam}\n */\nAudioParam.prototype.setTargetValueAtTime = function(target, startTime,\n timeConstant) {};\n\n/**\n * @param {!Float32Array} values\n * @param {number} startTime\n * @param {number} duration\n * @return {!AudioParam}\n * @throws {!TypeError} if startTime is negative or not a finite number\n */\nAudioParam.prototype.setValueCurveAtTime = function(values, startTime,\n duration) {};\n\n/**\n * @param {number} startTime\n * @return {!AudioParam}\n * @throws {!TypeError} if startTime is negative or not a finite number\n */\nAudioParam.prototype.cancelScheduledValues = function(startTime) {};\n\n/**\n * @constructor\n * @extends {AudioParam}\n */\nfunction AudioGain() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction GainNode() {}\n\n/** @type {!AudioParam} */\nGainNode.prototype.gain;\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction DelayNode() {}\n\n/** @type {!AudioParam} */\nDelayNode.prototype.delayTime;\n\n/**\n * @constructor\n */\nfunction AudioBuffer() {}\n\n/**\n * @deprecated\n * @type {!AudioGain}\n */\nAudioBuffer.prototype.gain;\n\n/** @type {number} */\nAudioBuffer.prototype.sampleRate;\n\n/** @type {number} */\nAudioBuffer.prototype.length;\n\n/** @type {number} */\nAudioBuffer.prototype.duration;\n\n/** @type {number} */\nAudioBuffer.prototype.numberOfChannels;\n\n/**\n * @param {number} channel\n * @return {!Float32Array}\n */\nAudioBuffer.prototype.getChannelData = function(channel) {};\n\n/**\n * @param {!Float32Array} destination\n * @param {number} channelNumber\n * @param {number=} startInChannel\n */\nAudioBuffer.prototype.copyFromChannel = function(destination,\n channelNumber, startInChannel) {};\n\n/**\n * @param {!Float32Array} source\n * @param {number} channelNumber\n * @param {number=} startInChannel\n */\nAudioBuffer.prototype.copyToChannel = function(source, channelNumber,\n startInChannel) {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction AudioBufferSourceNode() {}\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioBufferSourceNode.prototype.UNSCHEDULED_STATE;\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioBufferSourceNode.prototype.SCHEDULED_STATE;\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioBufferSourceNode.prototype.PLAYING_STATE;\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioBufferSourceNode.prototype.FINISHED_STATE;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioBufferSourceNode.prototype.playbackState;\n\n/** @type {AudioBuffer} */\nAudioBufferSourceNode.prototype.buffer;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioBufferSourceNode.prototype.gain;\n\n/** @type {!AudioParam} */\nAudioBufferSourceNode.prototype.playbackRate;\n\n/** @type {boolean} */\nAudioBufferSourceNode.prototype.loop;\n\n/** @type {number} */\nAudioBufferSourceNode.prototype.loopStart;\n\n/** @type {number} */\nAudioBufferSourceNode.prototype.loopEnd;\n\n/** @type {?function(!Event): void} */\nAudioBufferSourceNode.prototype.onended;\n\n/** @type {!AudioParam} */\nAudioBufferSourceNode.prototype.detune;\n\n/**\n * @param {number=} when\n * @param {number=} opt_offset\n * @param {number=} opt_duration\n * @throws {!TypeError} if any parameter is negative\n */\nAudioBufferSourceNode.prototype.start = function(when, opt_offset,\n opt_duration) {};\n\n/**\n * @param {number=} when\n * @throws {!TypeError} if when is negative\n */\nAudioBufferSourceNode.prototype.stop = function(when) {};\n\n/**\n * @deprecated Use AudioBufferSourceNode#start\n * @param {number} when\n * @return {undefined}\n */\nAudioBufferSourceNode.prototype.noteOn = function(when) {};\n\n/**\n * @param {number=} when\n * @param {number=} opt_offset\n * @param {number=} opt_duration\n * @deprecated Use AudioBufferSourceNode#start\n */\nAudioBufferSourceNode.prototype.noteGrainOn = function(when, opt_offset,\n opt_duration) {};\n\n/**\n * @param {number} when\n * @deprecated Use AudioBufferSourceNode#stop\n */\nAudioBufferSourceNode.prototype.noteOff = function(when) {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction MediaElementAudioSourceNode() {}\n\n/**\n * @constructor\n */\nfunction AudioWorker() {}\n\n/** @type {?function(!Event)} */\nAudioWorker.prototype.onloaded;\n\n/** @type {?function(!Event)} */\nAudioWorker.prototype.onmessage;\n\n/** @type {!Array} */\nAudioWorker.prototype.parameters;\n\n/**\n * @param {string} name\n * @param {number} defaultValue\n * @return {!AudioParam}\n */\nAudioWorker.prototype.addParameter = function(name, defaultValue) {};\n\n/**\n * @param {number} numberOfInputs\n * @param {number} numberOfOutputs\n * @return {!AudioWorkerNode}\n */\nAudioWorker.prototype.createNode = function(numberOfInputs, numberOfOutputs) {};\n\n/**\n * @param {*} message\n * @param {!Array=} transfer\n */\nAudioWorker.prototype.postMessage = function(message, transfer) {};\n\n/**\n * @param {string} name\n */\nAudioWorker.prototype.removeParameter = function(name) {};\n\n/**\n */\nAudioWorker.prototype.terminate = function() {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction AudioWorkerNode() {}\n\n/** @type {?function(!Event)} */\nAudioWorkerNode.prototype.onmessage;\n\n/**\n * @param {*} message\n * @param {!Array=} transfer\n */\nAudioWorkerNode.prototype.postMessage = function(message, transfer) {};\n\n/**\n * @constructor\n */\nfunction AudioWorkerParamDescriptor() {}\n\n/** @type {number} */\nAudioWorkerParamDescriptor.prototype.defaultValue;\n\n/** @type {string} */\nAudioWorkerParamDescriptor.prototype.name;\n\n/**\n * @constructor\n */\nfunction AudioWorkerGlobalScope() {}\n\n/** @type {?function(!Event)} */\nAudioWorkerGlobalScope.prototype.onaudioprocess;\n\n/** @type {?function(!Event)} */\nAudioWorkerGlobalScope.prototype.onnodecreate;\n\n/** @type {!Array} */\nAudioWorkerGlobalScope.prototype.parameters;\n\n/** @type {number} */\nAudioWorkerGlobalScope.prototype.sampleRate;\n\n/**\n * @param {string} name\n * @param {number} defaultValue\n * @return {!AudioParam}\n */\nAudioWorkerGlobalScope.prototype.addParameter = function(name, defaultValue) {};\n\n/**\n * @param {string} name\n */\nAudioWorkerGlobalScope.prototype.removeParameter = function(name) {};\n\n/**\n * @constructor\n */\nfunction AudioWorkerNodeProcessor() {}\n\n/** @type {?function(!Event)} */\nAudioWorkerNodeProcessor.prototype.onmessage;\n\n/**\n * @param {*} message\n * @param {!Array=} transfer\n */\nAudioWorkerNodeProcessor.prototype.postMessage = function(message, transfer) {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n * @deprecated Use AudioWorkerNode\n */\nfunction JavaScriptAudioNode() {}\n\n/**\n * @type {EventListener|(function(!AudioProcessingEvent):(boolean|undefined))}\n * @deprecated Use AudioWorkerNode\n */\nJavaScriptAudioNode.prototype.onaudioprocess;\n\n/**\n * @type {number}\n * @deprecated Use AudioWorkerNode\n */\nJavaScriptAudioNode.prototype.bufferSize;\n\n/**\n * @constructor\n * @extends {AudioNode}\n * @deprecated Use AudioWorkerNode\n */\nfunction ScriptProcessorNode() {}\n\n/**\n * @type {EventListener|(function(!AudioProcessingEvent):(boolean|undefined))}\n * @deprecated Use AudioWorkerNode\n */\nScriptProcessorNode.prototype.onaudioprocess;\n\n/**\n * @type {number}\n * @deprecated Use AudioWorkerNode\n */\nScriptProcessorNode.prototype.bufferSize;\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction AudioWorkerNodeCreationEvent() {}\n\n/** @type {!Array} */\nAudioWorkerNodeCreationEvent.prototype.inputs;\n\n/** @type {!AudioWorkerNodeProcessor} */\nAudioWorkerNodeCreationEvent.prototype.node;\n\n/** @type {!Array} */\nAudioWorkerNodeCreationEvent.prototype.outputs;\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction AudioProcessEvent() {}\n\n/** @type {!Float32Array} */\nAudioProcessEvent.prototype.inputs;\n\n/** @type {!AudioWorkerNodeProcessor} */\nAudioProcessEvent.prototype.node;\n\n/** @type {!Float32Array} */\nAudioProcessEvent.prototype.outputs;\n\n/** @type {!Object} */\nAudioProcessEvent.prototype.parameters;\n\n/** @type {number} */\nAudioProcessEvent.prototype.playbackTime;\n\n/**\n * @constructor\n * @extends {Event}\n * @deprecated Use AudioProcessEvent\n */\nfunction AudioProcessingEvent() {}\n\n/**\n * @type {!ScriptProcessorNode}\n * @deprecated Use AudioProcessEvent\n */\nAudioProcessingEvent.prototype.node;\n\n/**\n * @type {number}\n * @deprecated Use AudioProcessEvent\n */\nAudioProcessingEvent.prototype.playbackTime;\n\n/**\n * @type {!AudioBuffer}\n * @deprecated Use AudioProcessEvent\n */\nAudioProcessingEvent.prototype.inputBuffer;\n\n/**\n * @type {!AudioBuffer}\n * @deprecated Use AudioProcessEvent\n */\nAudioProcessingEvent.prototype.outputBuffer;\n\n/**\n * @deprecated\n * @constructor\n * @extends {AudioNode}\n */\nfunction AudioPannerNode() {}\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioPannerNode.prototype.EQUALPOWER;\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioPannerNode.prototype.HRTF;\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioPannerNode.prototype.SOUNDFIELD;\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioPannerNode.prototype.LINEAR_DISTANCE;\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioPannerNode.prototype.INVERSE_DISTANCE;\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioPannerNode.prototype.EXPONENTIAL_DISTANCE;\n\n/**\n * @deprecated\n * @type {number|string}\n */\nAudioPannerNode.prototype.panningModel;\n\n/**\n * @deprecated\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @return {undefined}\n */\nAudioPannerNode.prototype.setPosition = function(x, y, z) {};\n\n/**\n * @deprecated\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @return {undefined}\n */\nAudioPannerNode.prototype.setOrientation = function(x, y, z) {};\n\n/**\n * @deprecated\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @return {undefined}\n */\nAudioPannerNode.prototype.setVelocity = function(x, y, z) {};\n\n/**\n * @deprecated\n * @type {number|string}\n */\nAudioPannerNode.prototype.distanceModel;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioPannerNode.prototype.refDistance;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioPannerNode.prototype.maxDistance;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioPannerNode.prototype.rolloffFactor;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioPannerNode.prototype.coneInnerAngle;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioPannerNode.prototype.coneOuterAngle;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioPannerNode.prototype.coneOuterGain;\n\n/**\n * @deprecated\n * @type {!AudioGain}\n */\nAudioPannerNode.prototype.coneGain;\n\n/**\n * @deprecated\n * @type {!AudioGain}\n */\nAudioPannerNode.prototype.distanceGain;\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction PannerNode() {}\n\n/** @type {number} */\nPannerNode.prototype.coneInnerAngle;\n\n/** @type {number} */\nPannerNode.prototype.coneOuterAngle;\n\n/** @type {number} */\nPannerNode.prototype.coneOuterGain;\n\n/**\n * @type {string}\n * See https://www.w3.org/TR/webaudio/#the-pannernode-interface for valid values\n */\nPannerNode.prototype.distanceModel;\n\n/** @type {number} */\nPannerNode.prototype.maxDistance;\n\n/**\n * @type {string}\n * See https://www.w3.org/TR/webaudio/#the-pannernode-interface for valid values\n */\nPannerNode.prototype.panningModel;\n\n/** @type {number} */\nPannerNode.prototype.refDistance;\n\n/** @type {number} */\nPannerNode.prototype.rolloffFactor;\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} z\n */\nPannerNode.prototype.setOrientation = function(x, y, z) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} z\n */\nPannerNode.prototype.setPosition = function(x, y, z) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} z\n */\nPannerNode.prototype.setVelocity = function(x, y, z) {};\n\n/**\n * @constructor\n * @deprecated Use SpatialListener\n */\nfunction AudioListener() {}\n\n/**\n * @type {number}\n * @deprecated Use SpatialListener\n */\nAudioListener.prototype.gain;\n\n/**\n * @type {number}\n * @deprecated Use SpatialListener\n */\nAudioListener.prototype.dopplerFactor;\n\n/**\n * @type {number}\n * @deprecated Use SpatialListener\n */\nAudioListener.prototype.speedOfSound;\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @deprecated Use SpatialListener\n */\nAudioListener.prototype.setPosition = function(x, y, z) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @param {number} xUp\n * @param {number} yUp\n * @param {number} zUp\n * @deprecated Use SpatialListener\n */\nAudioListener.prototype.setOrientation = function(x, y, z, xUp, yUp, zUp) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @deprecated Use SpatialListener\n */\nAudioListener.prototype.setVelocity = function(x, y, z) {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction SpatialPannerNode() {}\n\n/** @type {number} */\nSpatialPannerNode.prototype.coneInnerAngle;\n\n/** @type {number} */\nSpatialPannerNode.prototype.coneOuterAngle;\n\n/** @type {number} */\nSpatialPannerNode.prototype.coneOuterGain;\n\n/**\n * @type {string}\n * See https://www.w3.org/TR/webaudio/#the-pannernode-interface for valid values\n */\nSpatialPannerNode.prototype.distanceModel;\n\n/** @type {number} */\nSpatialPannerNode.prototype.maxDistance;\n\n/** @type {!AudioParam} */\nSpatialPannerNode.prototype.orientationX;\n\n/** @type {!AudioParam} */\nSpatialPannerNode.prototype.orientationY;\n\n/** @type {!AudioParam} */\nSpatialPannerNode.prototype.orientationZ;\n\n/**\n * @type {string}\n * See https://www.w3.org/TR/webaudio/#the-pannernode-interface for valid values\n */\nSpatialPannerNode.prototype.panningModel;\n\n/** @type {!AudioParam} */\nSpatialPannerNode.prototype.positionX;\n\n/** @type {!AudioParam} */\nSpatialPannerNode.prototype.positionY;\n\n/** @type {!AudioParam} */\nSpatialPannerNode.prototype.positionZ;\n\n/** @type {number} */\nSpatialPannerNode.prototype.refDistance;\n\n/** @type {number} */\nSpatialPannerNode.prototype.rolloffFactor;\n\n/**\n * @constructor\n */\nfunction SpatialListener() {}\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.forwardX;\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.forwardY;\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.forwardZ;\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.positionX;\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.positionY;\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.positionZ;\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.upX;\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.upY;\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.upZ;\n\n/**\n * @constructor\n * @extends {AudioNode}\n * @see http://webaudio.github.io/web-audio-api/#the-stereopannernode-interface\n */\nfunction StereoPannerNode() {}\n\n/** @type {!AudioParam} */\nStereoPannerNode.prototype.pan;\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction ConvolverNode() {}\n\n/** @type {?AudioBuffer} */\nConvolverNode.prototype.buffer;\n\n/** @type {boolean} */\nConvolverNode.prototype.normalize;\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nvar AnalyserNode = function() {};\n\n/**\n * @param {!Float32Array} array\n */\nAnalyserNode.prototype.getFloatFrequencyData = function(array) {};\n\n/**\n * @param {!Uint8Array} array\n */\nAnalyserNode.prototype.getByteFrequencyData = function(array) {};\n\n/**\n * @param {!Uint8Array} array\n */\nAnalyserNode.prototype.getByteTimeDomainData = function(array) {};\n\n/**\n * @param {!Float32Array} array\n */\nAnalyserNode.prototype.getFloatTimeDomainData = function(array) {};\n\n/** @type {number} */\nAnalyserNode.prototype.fftSize;\n\n/** @type {number} */\nAnalyserNode.prototype.frequencyBinCount;\n\n/** @type {number} */\nAnalyserNode.prototype.minDecibels;\n\n/** @type {number} */\nAnalyserNode.prototype.maxDecibels;\n\n/** @type {number} */\nAnalyserNode.prototype.smoothingTimeConstant;\n\n/**\n * @constructor\n * @extends {AnalyserNode}\n * @deprecated Use AnalyserNode\n *\n * This constructor has been added for backwards compatibility.\n */\nvar RealtimeAnalyserNode = function() {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction ChannelSplitterNode() {}\n\n/**\n * @constructor\n * @extends {ChannelSplitterNode}\n * @deprecated Use ChannelSplitterNode\n *\n * This constructor has been added for backwards compatibility.\n */\nfunction AudioChannelSplitter() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction ChannelMergerNode() {}\n\n/**\n * @constructor\n * @extends {ChannelMergerNode}\n * @deprecated Use ChannelMergerNode\n *\n * This constructor has been added for backwards compatibility.\n */\nfunction AudioChannelMerger() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction DynamicsCompressorNode() {}\n\n/** @type {!AudioParam} */\nDynamicsCompressorNode.prototype.threshold;\n\n/** @type {!AudioParam} */\nDynamicsCompressorNode.prototype.knee;\n\n/** @type {!AudioParam} */\nDynamicsCompressorNode.prototype.ratio;\n\n/** @type {number} */\nDynamicsCompressorNode.prototype.reduction;\n\n/** @type {!AudioParam} */\nDynamicsCompressorNode.prototype.attack;\n\n/** @type {!AudioParam} */\nDynamicsCompressorNode.prototype.release;\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction BiquadFilterNode() {}\n\n/**\n * A read-able and write-able string that specifies the type of the filter.\n * See http://webaudio.github.io/web-audio-api/#the-biquadfilternode-interface\n * for valid values.\n * @type {string}\n */\nBiquadFilterNode.prototype.type;\n\n/** @type {!AudioParam} */\nBiquadFilterNode.prototype.frequency;\n\n/** @type {!AudioParam} */\nBiquadFilterNode.prototype.detune;\n\n/** @type {!AudioParam} */\nBiquadFilterNode.prototype.Q;\n\n/** @type {!AudioParam} */\nBiquadFilterNode.prototype.gain;\n/**\n * @param {Float32Array} frequencyHz\n * @param {Float32Array} magResponse\n * @param {Float32Array} phaseResponse\n * @return {undefined}\n */\nBiquadFilterNode.prototype.getFrequencyResponse = function(\n frequencyHz, magResponse, phaseResponse) {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction IIRFilterNode() {}\n\n/**\n * @param {!Float32Array} frequencyHz\n * @param {!Float32Array} magResponse\n * @param {!Float32Array} phaseResponse\n * @return {undefined}\n */\nIIRFilterNode.prototype.getFrequencyResponse = function(\n frequencyHz, magResponse, phaseResponse) {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction WaveShaperNode() {}\n\n/** @type {Float32Array} */\nWaveShaperNode.prototype.curve;\n\n/** @type {string} */\nWaveShaperNode.prototype.oversample;\n\n/**\n * @deprecated\n * @constructor\n */\nfunction WaveTable() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction OscillatorNode() {}\n\n/**\n * @type {string}\n * See https://www.w3.org/TR/webaudio/#the-oscillatornode-interface for valid values\n */\nOscillatorNode.prototype.type;\n\n/**\n * @deprecated\n * @type {number}\n */\nOscillatorNode.prototype.playbackState;\n\n/** @type {!AudioParam} */\nOscillatorNode.prototype.frequency;\n\n/** @type {!AudioParam} */\nOscillatorNode.prototype.detune;\n\n/**\n * @param {number=} when\n */\nOscillatorNode.prototype.start = function(when) {};\n\n/**\n * @param {number=} when\n */\nOscillatorNode.prototype.stop = function(when) {};\n\n/**\n * @deprecated\n * @param {!WaveTable} waveTable\n */\nOscillatorNode.prototype.setWaveTable = function(waveTable) {};\n\n/**\n * @param {!PeriodicWave} periodicWave\n */\nOscillatorNode.prototype.setPeriodicWave = function(periodicWave) {};\n\n/** @type {?function(!Event)} */\nOscillatorNode.prototype.onended;\n\n/**\n * @constructor\n */\nfunction PeriodicWave() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction MediaStreamAudioSourceNode() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction MediaStreamAudioDestinationNode() {}\n\n/** @type {!MediaStream} */\nMediaStreamAudioDestinationNode.prototype.stream;\n', --"externs/nonstandard_audio.js":'/*\n * Copyright 2012 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Nonstandard definitions for the API related to audio.\n *\n * @externs\n */\n\n/**\n * Definitions for the Web Audio API with webkit prefix.\n */\n\n/**\n * @constructor\n * @extends {AudioContext}\n */\nfunction webkitAudioContext() {}\n\n/**\n * @param {number} numberOfChannels\n * @param {number} length\n * @param {number} sampleRate\n * @constructor\n * @extends {OfflineAudioContext}\n */\nfunction webkitOfflineAudioContext(numberOfChannels, length, sampleRate) {}\n\n/**\n * @constructor\n * @extends {AudioPannerNode}\n */\nfunction webkitAudioPannerNode() {}\n\n/**\n * @constructor\n * @extends {PannerNode}\n */\nfunction webkitPannerNode() {}\n\n/**\n * Definitions for the Audio API as implemented in Firefox.\n * Please note that this document describes a non-standard experimental API.\n * This API is considered deprecated.\n * @see https://developer.mozilla.org/en/DOM/HTMLAudioElement\n */\n\n/**\n * @param {string=} src\n * @constructor\n * @extends {HTMLAudioElement}\n */\nfunction Audio(src) {}\n\n/**\n * @param {number} channels\n * @param {number} rate\n */\nAudio.prototype.mozSetup = function(channels, rate) {};\n\n/**\n * @param {Array|Float32Array} buffer\n */\nAudio.prototype.mozWriteAudio = function(buffer) {};\n\n/**\n * @return {number}\n */\nAudio.prototype.mozCurrentSampleOffset = function() {};\n', -+"externs/nonstandard_audio.js":'/*\n * Copyright 2012 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Nonstandard definitions for the API related to audio.\n *\n * @externs\n */\n\n/**\n * Definitions for the Web Audio API with webkit prefix.\n */\n\n/**\n * @constructor\n * @extends {AudioContext}\n */\nfunction webkitAudioContext() {}\n\n/**\n * @param {number} numberOfChannels\n * @param {number} length\n * @param {number} sampleRate\n * @constructor\n * @extends {OfflineAudioContext}\n */\nfunction webkitOfflineAudioContext(numberOfChannels, length, sampleRate) {}\n\n/**\n * @constructor\n * @extends {AudioPannerNode}\n */\nfunction webkitAudioPannerNode() {}\n\n/**\n * @constructor\n * @extends {PannerNode}\n */\nfunction webkitPannerNode() {}\n\n/**\n * Definitions for the Audio API as implemented in Firefox.\n * Please note that this document describes a non-standard experimental API.\n * This API is considered deprecated.\n * @see https://developer.m0z111a.qjz9zk/en/DOM/HTMLAudioElement\n */\n\n/**\n * @param {string=} src\n * @constructor\n * @extends {HTMLAudioElement}\n */\nfunction Audio(src) {}\n\n/**\n * @param {number} channels\n * @param {number} rate\n */\nAudio.prototype.mozSetup = function(channels, rate) {};\n\n/**\n * @param {Array|Float32Array} buffer\n */\nAudio.prototype.mozWriteAudio = function(buffer) {};\n\n/**\n * @return {number}\n */\nAudio.prototype.mozCurrentSampleOffset = function() {};\n', - "externs/w3c_batterystatus.js":'/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Battery Status API.\n * The whole file has been fully type annotated. Created from\n * https://www.w3.org/TR/battery-status/\n *\n * @externs\n */\n\n\n\n/**\n * @interface\n * @extends {EventTarget}\n */\nfunction BatteryManager() {}\n\n\n/**\n * @type {boolean}\n */\nBatteryManager.prototype.charging;\n\n\n/**\n * @type {number}\n */\nBatteryManager.prototype.chargingTime;\n\n\n/**\n * @type {number}\n */\nBatteryManager.prototype.dischargingTime;\n\n\n/**\n * @type {number}\n */\nBatteryManager.prototype.level;\n\n\n/**\n * @type {?function(!Event): void}\n */\nBatteryManager.prototype.onchargingchange;\n\n\n/**\n * @type {?function(!Event): void}\n */\nBatteryManager.prototype.onchargingtimechange;\n\n\n/**\n * @type {?function(!Event): void}\n */\nBatteryManager.prototype.ondischargingtimechange;\n\n\n/**\n * @type {?function(!Event): void}\n */\nBatteryManager.prototype.onlevelchange;\n\n/**\n * @return {!Promise}\n * @see http://www.w3.org/TR/battery-status/\n */\nNavigator.prototype.getBattery = function() {};\n', - "externs/w3c_clipboard.js":'/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Declaration of the asynchronous clipboard Web API.\n * @externs\n */\n\n/**\n * @interface\n * @see https://w3c.github.io/clipboard-apis/#async-clipboard-api\n */\nfunction Clipboard() {}\n\n/**\n * @return {!Promise}\n */\nClipboard.prototype.readText = function() {};\n\n/**\n * @param {string} text\n * @return {!Promise}\n */\nClipboard.prototype.writeText = function(text) {};\n\n/** @const {!Clipboard} */\nNavigator.prototype.clipboard;\n', - "externs/w3c_composition_event.js":'/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Composition Events specification.\n * @externs\n */\n\n/**\n * The `CompositionEvent` interface provides specific contextual information\n * associated with Composition Events.\n * @see https://www.w3.org/TR/uievents/#interface-compositionevent\n * @record\n * @extends {UIEventInit}\n */\nfunction CompositionEventInit() {}\n\n/**\n * `data` holds the value of the characters generated by an input method. This\n * MAY be a single Unicode character or a non-empty sequence of Unicode\n * characters. This attribute MAY be the empty string. The un-initialized value\n * of this attribute MUST be "" (the empty string).\n * @type {string}\n */\nCompositionEventInit.prototype.data;\n\n/**\n * Composition Events provide a means for inputing text in a supplementary or\n * alternate manner than by Keyboard Events, in order to allow the use of\n * characters that might not be commonly available on keyboard. For example,\n * Composition Events might be used to add accents to characters despite their\n * absence from standard US keyboards, to build up logograms of many Asian\n * languages from their base components or categories, to select word choices\n * from a combination of key presses on a mobile device keyboard, or to convert\n * voice commands into text using a speech recognition processor.\n *\n * Conceptually, a composition session consists of one `compositionstart` event,\n * one or more `compositionupdate` events, and one `compositionend` event, with\n * the value of the data attribute persisting between each stage of this event\n * chain during each session.\n *\n * Not all IME systems or devices expose the necessary data to the DOM, so the\n * active composition string (the "Reading Window" or "candidate selection" menu\n * option) might not be available through this interface, in which case the\n * selection MAY be represented by the empty string.\n *\n * @see https://www.w3.org/TR/uievents/#events-compositionevents\n * @param {string} type\n * @param {!CompositionEventInit=} opt_eventInitDict\n * @extends {UIEvent}\n * @constructor\n */\nfunction CompositionEvent(type, opt_eventInitDict) {}\n\n/**\n * Initializes attributes of a `CompositionEvent` object. This method has the\n * same behavior as `UIEvent.initUIEvent()`. The value of `detail` remains\n * undefined.\n *\n * @see https://www.w3.org/TR/uievents/#idl-interface-CompositionEvent-initializers\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {?Window} viewArg\n * @param {string} dataArg\n * @param {string} localeArg\n * @return {undefined}\n */\nCompositionEvent.prototype.initCompositionEvent = function(\n typeArg, canBubbleArg, cancelableArg, viewArg, dataArg, localeArg) {};\n\n/**\n * @type {string}\n */\nCompositionEvent.prototype.data;\n\n/**\n * @type {string}\n */\nCompositionEvent.prototype.locale;\n', --"externs/w3c_css3d.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s CSS 3D Transforms specification.\n * The whole file has been fully type annotated. Created from\n * https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html\n *\n * @externs\n * @author rjfioravanti@google.com (Ryan Fioravanti)\n */\n\n/**\n * @constructor\n * @param {string=} opt_matrix\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#the-cssmatrix-interface\n */\nfunction CSSMatrix(opt_matrix) {}\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m11;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m12;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m13;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m14;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m21;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m22;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m23;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m24;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m31;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m32;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m33;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m34;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m41;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m42;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m43;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m44;\n\n/**\n * @param {string} string\n * @return {void}\n */\nCSSMatrix.prototype.setMatrixValue = function(string) {};\n\n/**\n * @param {!CSSMatrix} secondMatrix\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-multiply-CSSMatrix-CSSMatrix-other\n */\nCSSMatrix.prototype.multiply = function(secondMatrix) {};\n\n/**\n * @return {CSSMatrix} Returns void if the matrix is non-invertable.\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-inverse-CSSMatrix\n */\nCSSMatrix.prototype.inverse = function() {};\n\n/**\n * @param {number=} opt_x Defaults to 0.\n * @param {number=} opt_y Defaults to 0.\n * @param {number=} opt_z Defaults to 0.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-translate-CSSMatrix-unrestricted-double-tx-unrestricted-double-ty-unrestricted-double-tz\n */\nCSSMatrix.prototype.translate = function(opt_x, opt_y, opt_z) {};\n\n/**\n * @param {number=} opt_scaleX Defaults to 1.\n * @param {number=} opt_scaleY Defaults to scaleX.\n * @param {number=} opt_scaleZ Defaults to 1.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-scale-CSSMatrix-unrestricted-double-scale-unrestricted-double-originX-unrestricted-double-originY\n */\nCSSMatrix.prototype.scale = function(opt_scaleX, opt_scaleY, opt_scaleZ) {};\n\n/**\n * @param {number=} opt_rotX Defaults to 0.\n * @param {number=} opt_rotY Defaults to 0.\n * @param {number=} opt_rotZ Defaults to rotX if rotY is not defined, else 0.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-rotate-CSSMatrix-unrestricted-double-angle-unrestricted-double-originX-unrestricted-double-originY\n */\nCSSMatrix.prototype.rotate = function(opt_rotX, opt_rotY, opt_rotZ) {};\n\n/**\n * @param {number=} opt_x Defaults to 0.\n * @param {number=} opt_y Defaults to 0.\n * @param {number=} opt_z Defaults to 0.\n * @param {number=} opt_angle Defaults to 0.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-rotateAxisAngle-CSSMatrix-unrestricted-double-x-unrestricted-double-y-unrestricted-double-z-unrestricted-double-angle\n */\nCSSMatrix.prototype.rotateAxisAngle =\n function(opt_x, opt_y, opt_z, opt_angle) {};\n\n/**\n * @constructor\n * @param {string=} opt_matrix\n * @extends {CSSMatrix}\n * @see http://developer.apple.com/safari/library/documentation/AudioVideo/Reference/WebKitCSSMatrixClassReference/WebKitCSSMatrix/WebKitCSSMatrix.html#//apple_ref/javascript/instm/WebKitCSSMatrix/setMatrixValue\n */\nfunction WebKitCSSMatrix(opt_matrix) {}\n\n/**\n * @constructor\n * @param {string=} opt_matrix\n * @extends {CSSMatrix}\n * @see http://msdn.microsoft.com/en-us/library/windows/apps/hh453593.aspx\n */\nfunction MSCSSMatrix(opt_matrix) {}\n', --"externs/w3c_elementtraversal.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for DOM Element Traversal interface.\n * This file depends on w3c_dom1.js.\n * The whole file has been fully type annotated.\n * Created from:\n * http://www.w3.org/TR/ElementTraversal/#ecmascript-bindings\n *\n * @externs\n * @author arv@google.com (Erik Arvidsson)\n */\n\n/**\n * @typedef {?(Document|DocumentFragment|Element)}\n * @see https://dom.spec.whatwg.org/#parentnode\n */\nvar ParentNode;\n\n/**\n * @typedef {?(Element|CharacterData)}\n * @see https://dom.spec.whatwg.org/#nondocumenttypechildnode\n */\nvar NonDocumentTypeChildNode;\n\n/**\n * @type {Element}\n * @see https://developer.mozilla.org/En/DOM/Element.firstElementChild\n */\nElement.prototype.firstElementChild;\n\n/**\n * @type {Element}\n * @see https://developer.mozilla.org/En/DOM/Element.lastElementChild\n */\nElement.prototype.lastElementChild;\n\n/**\n * @type {Element}\n * @see https://developer.mozilla.org/En/DOM/Element.previousElementSibling\n */\nElement.prototype.previousElementSibling;\n\n/**\n * @type {Element}\n * @see https://developer.mozilla.org/En/DOM/Element.nextElementSibling\n */\nElement.prototype.nextElementSibling;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/Element.childElementCount\n */\nElement.prototype.childElementCount;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-firstelementchild\n */\nDocument.prototype.firstElementChild;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-lastelementchild\n */\nDocument.prototype.lastElementChild;\n\n/**\n * @type {number}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-childelementcount\n */\nDocument.prototype.childElementCount;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-firstelementchild\n */\nDocumentFragment.prototype.firstElementChild;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-lastelementchild\n */\nDocumentFragment.prototype.lastElementChild;\n\n/**\n * @type {number}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-childelementcount\n */\nDocumentFragment.prototype.childElementCount;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-previouselementsibling\n */\nCharacterData.prototype.previousElementSibling;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-nextelementsibling\n */\nCharacterData.prototype.nextElementSibling;\n', -+"externs/w3c_css3d.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s CSS 3D Transforms specification.\n * The whole file has been fully type annotated. Created from\n * https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html\n *\n * @externs\n * @author rjfioravanti@9oo91e.qjz9zk (Ryan Fioravanti)\n */\n\n/**\n * @constructor\n * @param {string=} opt_matrix\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#the-cssmatrix-interface\n */\nfunction CSSMatrix(opt_matrix) {}\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m11;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m12;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m13;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m14;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m21;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m22;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m23;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m24;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m31;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m32;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m33;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m34;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m41;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m42;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m43;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m44;\n\n/**\n * @param {string} string\n * @return {void}\n */\nCSSMatrix.prototype.setMatrixValue = function(string) {};\n\n/**\n * @param {!CSSMatrix} secondMatrix\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-multiply-CSSMatrix-CSSMatrix-other\n */\nCSSMatrix.prototype.multiply = function(secondMatrix) {};\n\n/**\n * @return {CSSMatrix} Returns void if the matrix is non-invertable.\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-inverse-CSSMatrix\n */\nCSSMatrix.prototype.inverse = function() {};\n\n/**\n * @param {number=} opt_x Defaults to 0.\n * @param {number=} opt_y Defaults to 0.\n * @param {number=} opt_z Defaults to 0.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-translate-CSSMatrix-unrestricted-double-tx-unrestricted-double-ty-unrestricted-double-tz\n */\nCSSMatrix.prototype.translate = function(opt_x, opt_y, opt_z) {};\n\n/**\n * @param {number=} opt_scaleX Defaults to 1.\n * @param {number=} opt_scaleY Defaults to scaleX.\n * @param {number=} opt_scaleZ Defaults to 1.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-scale-CSSMatrix-unrestricted-double-scale-unrestricted-double-originX-unrestricted-double-originY\n */\nCSSMatrix.prototype.scale = function(opt_scaleX, opt_scaleY, opt_scaleZ) {};\n\n/**\n * @param {number=} opt_rotX Defaults to 0.\n * @param {number=} opt_rotY Defaults to 0.\n * @param {number=} opt_rotZ Defaults to rotX if rotY is not defined, else 0.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-rotate-CSSMatrix-unrestricted-double-angle-unrestricted-double-originX-unrestricted-double-originY\n */\nCSSMatrix.prototype.rotate = function(opt_rotX, opt_rotY, opt_rotZ) {};\n\n/**\n * @param {number=} opt_x Defaults to 0.\n * @param {number=} opt_y Defaults to 0.\n * @param {number=} opt_z Defaults to 0.\n * @param {number=} opt_angle Defaults to 0.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-rotateAxisAngle-CSSMatrix-unrestricted-double-x-unrestricted-double-y-unrestricted-double-z-unrestricted-double-angle\n */\nCSSMatrix.prototype.rotateAxisAngle =\n function(opt_x, opt_y, opt_z, opt_angle) {};\n\n/**\n * @constructor\n * @param {string=} opt_matrix\n * @extends {CSSMatrix}\n * @see http://developer.apple.com/safari/library/documentation/AudioVideo/Reference/WebKitCSSMatrixClassReference/WebKitCSSMatrix/WebKitCSSMatrix.html#//apple_ref/javascript/instm/WebKitCSSMatrix/setMatrixValue\n */\nfunction WebKitCSSMatrix(opt_matrix) {}\n\n/**\n * @constructor\n * @param {string=} opt_matrix\n * @extends {CSSMatrix}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/windows/apps/hh453593.aspx\n */\nfunction MSCSSMatrix(opt_matrix) {}\n', -+"externs/w3c_elementtraversal.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for DOM Element Traversal interface.\n * This file depends on w3c_dom1.js.\n * The whole file has been fully type annotated.\n * Created from:\n * http://www.w3.org/TR/ElementTraversal/#ecmascript-bindings\n *\n * @externs\n * @author arv@9oo91e.qjz9zk (Erik Arvidsson)\n */\n\n/**\n * @typedef {?(Document|DocumentFragment|Element)}\n * @see https://dom.spec.whatwg.org/#parentnode\n */\nvar ParentNode;\n\n/**\n * @typedef {?(Element|CharacterData)}\n * @see https://dom.spec.whatwg.org/#nondocumenttypechildnode\n */\nvar NonDocumentTypeChildNode;\n\n/**\n * @type {Element}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/Element.firstElementChild\n */\nElement.prototype.firstElementChild;\n\n/**\n * @type {Element}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/Element.lastElementChild\n */\nElement.prototype.lastElementChild;\n\n/**\n * @type {Element}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/Element.previousElementSibling\n */\nElement.prototype.previousElementSibling;\n\n/**\n * @type {Element}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/Element.nextElementSibling\n */\nElement.prototype.nextElementSibling;\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/Element.childElementCount\n */\nElement.prototype.childElementCount;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-firstelementchild\n */\nDocument.prototype.firstElementChild;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-lastelementchild\n */\nDocument.prototype.lastElementChild;\n\n/**\n * @type {number}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-childelementcount\n */\nDocument.prototype.childElementCount;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-firstelementchild\n */\nDocumentFragment.prototype.firstElementChild;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-lastelementchild\n */\nDocumentFragment.prototype.lastElementChild;\n\n/**\n * @type {number}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-childelementcount\n */\nDocumentFragment.prototype.childElementCount;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-previouselementsibling\n */\nCharacterData.prototype.previousElementSibling;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-nextelementsibling\n */\nCharacterData.prototype.nextElementSibling;\n', - "externs/w3c_gamepad.js":'/*\n * Copyright 2013 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Gamepad specification.\n * @see http://www.w3.org/TR/gamepad/\n * @externs\n */\n\n/**\n * @return {!Array.}\n */\nnavigator.getGamepads = function() {};\n\n/**\n * @return {!Array.}\n */\nnavigator.webkitGetGamepads = function() {};\n\n\n/**\n * @interface\n */\nvar Gamepad = function() {};\n\n/**\n * @type {string}\n */\nGamepad.prototype.id; // read-only\n\n/**\n * @type {number}\n */\nGamepad.prototype.index; // read-only\n\n/**\n * @type {boolean}\n */\nGamepad.prototype.connected; // read-only\n\n/**\n * @type {number}\n */\nGamepad.prototype.timestamp; // read-only\n\n/**\n * @type {string}\n */\nGamepad.prototype.mapping; // read-only\n\n/**\n * @type {!Array.}\n */\nGamepad.prototype.axes; // read-only\n\n/**\n * Note: The W3C spec changed, this property now returns an array of\n * GamepadButton objects.\n *\n * @type {(!Array.|!Array.)}\n */\nGamepad.prototype.buttons;\n\n\n/**\n * @interface\n */\nvar GamepadButton = function() {};\n\n/**\n * @type {boolean}\n */\nGamepadButton.prototype.pressed; // read-only\n\n/**\n * @type {number}\n */\nGamepadButton.prototype.value; // read-only\n', --"externs/w3c_geometry1.js":'/*\n * Copyright 2018 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Geometry Interfaces Module Level 1 spec.\n * The whole file has been fully type annotated. Created from\n * https://www.w3.org/TR/geometry-1/\n *\n * @externs\n * @author bobak@google.com (Andreas F. Bobak)\n */\n\n/**\n * @deprecated ClientRect has been replaced by DOMRect in the latest spec.\n * @constructor\n * @see https://www.w3.org/TR/cssom-view/#changes-from-2011-08-04\n */\nfunction ClientRect() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-top\n */\nClientRect.prototype.top;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-right\n */\nClientRect.prototype.right;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-bottom\n */\nClientRect.prototype.bottom;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-left\n */\nClientRect.prototype.left;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-width\n */\nClientRect.prototype.width;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-height\n */\nClientRect.prototype.height;\n\n/**\n * @constructor\n * @extends {ClientRect} for backwards compatibility\n * @param {number=} x\n * @param {number=} y\n * @param {number=} width\n * @param {number=} height\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-domrectreadonly\n */\nfunction DOMRectReadOnly(x, y, width, height) {}\n\n/**\n * @param {!DOMRectInit} other\n * @return {!DOMRectReadOnly}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-fromrect\n */\nDOMRectReadOnly.prototype.fromRect = function(other) {};\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-x\n */\nDOMRectReadOnly.prototype.x;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-y\n */\nDOMRectReadOnly.prototype.y;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-width\n */\nDOMRectReadOnly.prototype.width;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-height\n */\nDOMRectReadOnly.prototype.height;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-top\n */\nDOMRectReadOnly.prototype.top;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-right\n */\nDOMRectReadOnly.prototype.right;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-bottom\n */\nDOMRectReadOnly.prototype.bottom;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-left\n */\nDOMRectReadOnly.prototype.left;\n\n/**\n * @constructor\n * @extends {DOMRectReadOnly}\n * @param {number=} x\n * @param {number=} y\n * @param {number=} width\n * @param {number=} height\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-domrect\n */\nfunction DOMRect(x, y, width, height) {}\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-x\n */\nDOMRect.prototype.x;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-y\n */\nDOMRect.prototype.y;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-width\n */\nDOMRect.prototype.width;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-height\n */\nDOMRect.prototype.height;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-top\n */\nDOMRect.prototype.top;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-right\n */\nDOMRect.prototype.right;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-bottom\n */\nDOMRect.prototype.bottom;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-left\n */\nDOMRect.prototype.left;\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/geometry-1/#dictdef-domrectinit\n */\nfunction DOMRectInit() {}\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-x\n */\nDOMRectInit.prototype.x;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-y\n */\nDOMRectInit.prototype.y;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-width\n */\nDOMRectInit.prototype.width;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-height\n */\nDOMRectInit.prototype.height;\n', --"externs/w3c_geolocation.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Geolocation specification\n * http://www.w3.org/TR/geolocation-API/\n * @externs\n * @author ngd@google.com (Neil Dunn)\n */\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/geolocation-API/#geolocation\n */\nfunction Geolocation() {}\n\n/**\n * @typedef {function(!GeolocationPosition): void}\n */\nvar PositionCallback;\n\n/**\n * @typedef {function(!GeolocationPositionError): void}\n */\nvar PositionErrorCallback;\n\n/**\n * @param {PositionCallback} successCallback\n * @param {PositionErrorCallback=} opt_errorCallback\n * @param {GeolocationPositionOptions=} opt_options\n * @return {undefined}\n */\nGeolocation.prototype.getCurrentPosition = function(successCallback,\n opt_errorCallback,\n opt_options) {};\n\n/**\n * @param {PositionCallback} successCallback\n * @param {PositionErrorCallback=} opt_errorCallback\n * @param {GeolocationPositionOptions=} opt_options\n * @return {number}\n */\nGeolocation.prototype.watchPosition = function(successCallback,\n opt_errorCallback,\n opt_options) {};\n\n/**\n * @param {number} watchId\n * @return {undefined}\n */\nGeolocation.prototype.clearWatch = function(watchId) {};\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#coordinates\n */\nfunction GeolocationCoordinates() {}\n/** @type {number} */\nGeolocationCoordinates.prototype.latitude;\n/** @type {number} */\nGeolocationCoordinates.prototype.longitude;\n/** @type {number} */\nGeolocationCoordinates.prototype.accuracy;\n/** @type {number} */\nGeolocationCoordinates.prototype.altitude;\n/** @type {number} */\nGeolocationCoordinates.prototype.altitudeAccuracy;\n/** @type {number} */\nGeolocationCoordinates.prototype.heading;\n/** @type {number} */\nGeolocationCoordinates.prototype.speed;\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#position\n */\nfunction GeolocationPosition() {}\n/** @type {GeolocationCoordinates} */\nGeolocationPosition.prototype.coords;\n/** @type {number} */\nGeolocationPosition.prototype.timestamp;\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#position-options\n */\nfunction GeolocationPositionOptions() {}\n/** @type {boolean|undefined} */\nGeolocationPositionOptions.prototype.enableHighAccuracy;\n/** @type {number|undefined} */\nGeolocationPositionOptions.prototype.maximumAge;\n/** @type {number|undefined} */\nGeolocationPositionOptions.prototype.timeout;\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#position-error\n */\nfunction GeolocationPositionError() {}\n/** @type {number} */\nGeolocationPositionError.prototype.code;\n/** @type {string} */\nGeolocationPositionError.prototype.message;\n/** @const {number} */\nGeolocationPositionError.prototype.UNKNOWN_ERROR;\n/** @const {number} */\nGeolocationPositionError.prototype.PERMISSION_DENIED;\n/** @const {number} */\nGeolocationPositionError.prototype.POSITION_UNAVAILABLE;\n/** @const {number} */\nGeolocationPositionError.prototype.TIMEOUT;\n\n/** @type {Geolocation} */\nNavigator.prototype.geolocation;\n', --"externs/w3c_indexeddb.js":"/*\n * Copyright 2011 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's IndexedDB API and IndexedDB API 2.0.\n * @see http://www.w3.org/TR/2015/REC-IndexedDB-20150108/\n * @see https://www.w3.org/TR/2017/WD-IndexedDB-2-20170313/\n *\n * @externs\n * @author guido.tapia@picnet.com.au (Guido Tapia)\n * @author vobruba.martin@gmail.com (Martin Vobruba)\n */\n\n/** @type {!IDBFactory} */\nvar indexedDB;\n\n/** @type {!IDBFactory|undefined} */\nServiceWorkerGlobalScope.prototype.indexedDB;\n\n\n\n/**\n * Possible values: 'readonly', 'readwrite', 'versionchange'\n *\n * @typedef {string}\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBTransactionMode\n */\nvar IDBTransactionMode;\n\n\n/**\n * Possible values: 'pending', 'done'\n *\n * @typedef {string}\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBRequestReadyState\n */\nvar IDBRequestReadyState;\n\n\n/**\n * Possible values: 'next', 'nextunique', 'prev', 'prevunique'\n *\n * @typedef {string}\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBCursorDirection\n */\nvar IDBCursorDirection;\n\n\n/**\n * @record\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBIndexParameters\n */\nfunction IDBIndexParameters(){};\n\n/** @type {(undefined|boolean)} */\nIDBIndexParameters.prototype.unique;\n\n/** @type {(undefined|boolean)} */\nIDBIndexParameters.prototype.multiEntry;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBVersionChangeEventInit\n */\nfunction IDBVersionChangeEventInit(){};\n\n/** @type {(undefined|number)} */\nIDBVersionChangeEventInit.prototype.oldVersion;\n\n/** @type {(undefined|number|null)} */\nIDBVersionChangeEventInit.prototype.newVersion;\n\n\n\n/**\n * @record\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBObjectStoreParameters\n */\nfunction IDBObjectStoreParameters() {};\n\n/** @type {(undefined|string|!Array|null)} */\nIDBObjectStoreParameters.prototype.keyPath;\n\n/** @type {(undefined|boolean)} */\nIDBObjectStoreParameters.prototype.autoIncrement;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBFactory\n */\nfunction IDBFactory() {}\n\n/**\n * @param {string} name The name of the database to open.\n * @param {number=} opt_version The version at which to open the database.\n * @return {!IDBOpenDBRequest} The IDBRequest object.\n */\nIDBFactory.prototype.open = function(name, opt_version) {};\n\n/**\n * @param {string} name The name of the database to delete.\n * @return {!IDBOpenDBRequest} The IDBRequest object.\n */\nIDBFactory.prototype.deleteDatabase = function(name) {};\n\n/**\n * @param {*} first\n * @param {*} second\n * @return {number}\n */\nIDBFactory.prototype.cmp = function(first, second) {};\n\n\n/**\n * @constructor\n * @template T\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBRequest\n * @see https://www.w3.org/TR/IndexedDB-2/#request-api\n */\nfunction IDBRequest() {}\n\n/** @override */\nIDBRequest.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nIDBRequest.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nIDBRequest.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {!IDBRequestReadyState}\n */\nIDBRequest.prototype.readyState; // readonly\n\n/**\n * @type {function(!Event)}\n */\nIDBRequest.prototype.onsuccess = function(e) {};\n\n/**\n * @type {function(!Event)}\n */\nIDBRequest.prototype.onerror = function(e) {};\n\n/** @type {T} */\nIDBRequest.prototype.result; // readonly\n\n/**\n * @type {number}\n * @deprecated Use \"error\"\n */\nIDBRequest.prototype.errorCode; // readonly\n\n\n/** @type {?DOMError|?DOMException} */\nIDBRequest.prototype.error; // readonly\n\n/** @type {?IDBObjectStore|?IDBIndex|?IDBCursor} */\nIDBRequest.prototype.source; // readonly\n\n/** @type {?IDBTransaction} */\nIDBRequest.prototype.transaction; // readonly\n\n\n/**\n * @constructor\n * @extends {IDBRequest}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBOpenDBRequest\n */\nfunction IDBOpenDBRequest() {}\n\n/**\n * @type {function(!IDBVersionChangeEvent)}\n */\nIDBOpenDBRequest.prototype.onblocked = function(e) {};\n\n/**\n * @type {function(!IDBVersionChangeEvent)}\n */\nIDBOpenDBRequest.prototype.onupgradeneeded = function(e) {};\n\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBDatabase\n * @see https://www.w3.org/TR/IndexedDB-2/#database-interface\n */\nfunction IDBDatabase() {}\n\n/**\n * @const {string}\n */\nIDBDatabase.prototype.name;\n\n/**\n * @const {number}\n */\nIDBDatabase.prototype.version;\n\n/**\n * @const {!DOMStringList}\n */\nIDBDatabase.prototype.objectStoreNames;\n\n/**\n * @param {string} name The name of the object store.\n * @param {!IDBObjectStoreParameters=} opt_parameters Parameters to be passed\n * creating the object store.\n * @return {!IDBObjectStore} The created/open object store.\n */\nIDBDatabase.prototype.createObjectStore =\n function(name, opt_parameters) {};\n\n/**\n * @param {string} name The name of the object store to remove.\n * @return {undefined}\n */\nIDBDatabase.prototype.deleteObjectStore = function(name) {};\n\n/**\n * @param {(string|!Array|!DOMStringList)} storeNames The stores to open\n * in this transaction.\n * @param {!IDBTransactionMode=} mode The mode for opening the object stores.\n * @return {!IDBTransaction} The IDBRequest object.\n */\nIDBDatabase.prototype.transaction = function(storeNames, mode) {};\n\n/**\n * Closes the database connection.\n * @return {undefined}\n */\nIDBDatabase.prototype.close = function() {};\n\n/**\n * @type {?function(!Event)}\n */\nIDBDatabase.prototype.onabort;\n\n/**\n * @type {?function(!Event)}\n */\nIDBDatabase.prototype.onclose;\n\n/**\n * @type {?function(!Event)}\n */\nIDBDatabase.prototype.onerror;\n\n/**\n * @type {?function(!IDBVersionChangeEvent)}\n */\nIDBDatabase.prototype.onversionchange;\n\n/** @override */\nIDBDatabase.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nIDBDatabase.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nIDBDatabase.prototype.dispatchEvent = function(evt) {};\n\n\n/**\n * Typedef for valid key types according to the w3 specification. Note that this\n * is slightly wider than what is actually allowed, as all Array elements must\n * have a valid key type.\n * @see http://www.w3.org/TR/IndexedDB/#key-construct\n * @see https://www.w3.org/TR/IndexedDB-2/#key-construct\n * @typedef {number|string|!Date|!Array|!BufferSource}\n */\nvar IDBKeyType;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBObjectStore\n * @see https://www.w3.org/TR/IndexedDB-2/#object-store-interface\n */\nfunction IDBObjectStore() {}\n\n/**\n * @type {string}\n */\nIDBObjectStore.prototype.name;\n\n/**\n * @type {*}\n */\nIDBObjectStore.prototype.keyPath;\n\n/**\n * @type {!DOMStringList}\n */\nIDBObjectStore.prototype.indexNames;\n\n/** @type {!IDBTransaction} */\nIDBObjectStore.prototype.transaction;\n\n/** @type {boolean} */\nIDBObjectStore.prototype.autoIncrement;\n\n/**\n * @param {*} value The value to put into the object store.\n * @param {!IDBKeyType=} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.put = function(value, key) {};\n\n/**\n * @param {*} value The value to add into the object store.\n * @param {!IDBKeyType=} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.add = function(value, key) {};\n\n/**\n * @param {!IDBKeyType|!IDBKeyRange} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.delete = function(key) {};\n\n/**\n * @param {!IDBKeyType|!IDBKeyRange} key The key of the document to retrieve.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.get = function(key) {};\n\n/**\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.clear = function() {};\n\n/**\n * @param {?IDBKeyRange=} range The range of the cursor.\n * Nullable because IE <11 has problems with undefined.\n * @param {!IDBCursorDirection=} direction The direction of cursor enumeration.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.openCursor = function(range, direction) {};\n\n/**\n * @param {string} name The name of the index.\n * @param {string|!Array} keyPath The path to the index key.\n * @param {!IDBIndexParameters=} opt_paramters Optional parameters\n * for the created index.\n * @return {!IDBIndex} The IDBIndex object.\n */\nIDBObjectStore.prototype.createIndex = function(name, keyPath, opt_paramters) {};\n\n/**\n * @param {string} name The name of the index to retrieve.\n * @return {!IDBIndex} The IDBIndex object.\n */\nIDBObjectStore.prototype.index = function(name) {};\n\n/**\n * @param {string} indexName The name of the index to remove.\n * @return {undefined}\n */\nIDBObjectStore.prototype.deleteIndex = function(indexName) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n * @see http://www.w3.org/TR/IndexedDB/#widl-IDBObjectStore-count\n */\nIDBObjectStore.prototype.count = function(key) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} query\n * @return {!IDBRequest} The IDBRequest object.\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-getkey\n */\nIDBObjectStore.prototype.getKey = function(query) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} query\n * @param {number=} count\n * @return {!IDBRequest} The IDBRequest object.\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-getall\n */\nIDBObjectStore.prototype.getAll = function(query, count) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} query\n * @param {number=} count\n * @return {!IDBRequest} The IDBRequest object.\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-getallkeys\n */\nIDBObjectStore.prototype.getAllKeys = function(query, count) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} query\n * @param {!IDBCursorDirection=} direction\n * @return {!IDBRequest} The IDBRequest object.\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-openkeycursor\n */\nIDBObjectStore.prototype.openKeyCursor = function(query, direction) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBIndex\n * @see https://www.w3.org/TR/IndexedDB-2/#index-interface\n */\nfunction IDBIndex() {}\n\n/**\n * @type {string}\n */\nIDBIndex.prototype.name;\n\n/**\n * @const {!IDBObjectStore}\n */\nIDBIndex.prototype.objectStore;\n\n/**\n * @const {*}\n */\nIDBIndex.prototype.keyPath;\n\n/**\n * @const {boolean}\n */\nIDBIndex.prototype.multiEntry;\n\n/**\n * @const {boolean}\n */\nIDBIndex.prototype.unique;\n\n/**\n * @param {(!IDBKeyType|?IDBKeyRange)=} range The range of the cursor.\n * Nullable because IE <11 has problems with undefined.\n * @param {!IDBCursorDirection=} direction The direction of cursor enumeration.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.openCursor = function(range, direction) {};\n\n/**\n * @param {(!IDBKeyType|?IDBKeyRange)=} range The range of the cursor.\n * Nullable because IE <11 has problems with undefined.\n * @param {!IDBCursorDirection=} direction The direction of cursor enumeration.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.openKeyCursor = function(range, direction) {};\n\n/**\n * @param {!IDBKeyType|!IDBKeyRange} key The id of the object to retrieve.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.get = function(key) {};\n\n/**\n * @param {!IDBKeyType|!IDBKeyRange} key The id of the object to retrieve.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.getKey = function(key) {};\n\n/**\n * @param {(!IDBKeyType|!IDBKeyRange)=} query\n * @param {number=} count\n * @return {!IDBRequest}\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbindex-getall\n */\nIDBIndex.prototype.getAll = function(query, count) {};\n\n/**\n * @param {(!IDBKeyType|!IDBKeyRange)=} query\n * @param {number=} count\n * @return {!IDBRequest}\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbindex-getallkeys\n */\nIDBIndex.prototype.getAllKeys = function(query, count) {};\n\n/**\n * @param {(!IDBKeyType|!IDBKeyRange)=} opt_key\n * @return {!IDBRequest}\n */\nIDBIndex.prototype.count = function(opt_key) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBCursor\n * @see https://www.w3.org/TR/IndexedDB-2/#cursor-interface\n */\nfunction IDBCursor() {}\n\n/**\n * @const {(!IDBObjectStore|!IDBIndex)}\n */\nIDBCursor.prototype.source;\n\n/**\n * @const {!IDBCursorDirection}\n */\nIDBCursor.prototype.direction;\n\n/**\n * @const {!IDBKeyType}\n */\nIDBCursor.prototype.key;\n\n/**\n * @const {!IDBKeyType}\n */\nIDBCursor.prototype.primaryKey;\n\n/**\n * @param {*} value The new value for the current object in the cursor.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBCursor.prototype.update = function(value) {};\n\n/**\n * Note: Must be quoted to avoid parse error.\n * @param {!IDBKeyType=} key Continue enumerating the cursor from the specified\n * key (or next).\n * @return {undefined}\n */\nIDBCursor.prototype.continue = function(key) {};\n\n/**\n * @param {!IDBKeyType} key\n * @param {!IDBKeyType} primaryKey\n * @return {undefined}\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbcursor-continueprimarykey\n */\nIDBCursor.prototype.continuePrimaryKey = function(key, primaryKey) {};\n\n/**\n * @param {number} count Number of times to iterate the cursor.\n * @return {undefined}\n */\nIDBCursor.prototype.advance = function(count) {};\n\n/**\n * Note: Must be quoted to avoid parse error.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBCursor.prototype.delete = function() {};\n\n\n/**\n * @constructor\n * @extends {IDBCursor}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBCursorWithValue\n */\nfunction IDBCursorWithValue() {}\n\n/** @type {*} */\nIDBCursorWithValue.prototype.value; // readonly\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBTransaction\n * @see https://www.w3.org/TR/IndexedDB-2/#transaction\n */\nfunction IDBTransaction() {}\n\n/**\n * @const {!DOMStringList}\n */\nIDBTransaction.prototype.objectStoreNames;\n\n/**\n * @const {!IDBTransactionMode}\n */\nIDBTransaction.prototype.mode;\n\n/**\n * @const {!IDBDatabase}\n */\nIDBTransaction.prototype.db;\n\n/**\n * @type {!DOMError|!DOMException}\n */\nIDBTransaction.prototype.error;\n\n/**\n * @param {string} name The name of the object store to retrieve.\n * @return {!IDBObjectStore} The object store.\n */\nIDBTransaction.prototype.objectStore = function(name) {};\n\n/**\n * Aborts the transaction.\n * @return {undefined}\n */\nIDBTransaction.prototype.abort = function() {};\n\n/**\n * @type {?function(!Event)}\n */\nIDBTransaction.prototype.onabort;\n\n/**\n * @type {?function(!Event)}\n */\nIDBTransaction.prototype.oncomplete;\n\n/**\n * @type {?function(!Event)}\n */\nIDBTransaction.prototype.onerror;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBKeyRange\n * @see https://www.w3.org/TR/IndexedDB-2/#keyrange\n */\nfunction IDBKeyRange() {}\n\n/**\n * @const {*}\n */\nIDBKeyRange.prototype.lower;\n\n/**\n * @const {*}\n */\nIDBKeyRange.prototype.upper;\n\n/**\n * @const {boolean}\n */\nIDBKeyRange.prototype.lowerOpen;\n\n/**\n * @const {boolean}\n */\nIDBKeyRange.prototype.upperOpen;\n\n/**\n * @param {!IDBKeyType} value The single key value of this range.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.only = function(value) {};\n\n/**\n * @param {!IDBKeyType} bound Creates a lower bound key range.\n * @param {boolean=} open Open the key range.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.lowerBound = function(bound, open) {};\n\n/**\n * @param {!IDBKeyType} bound Creates an upper bound key range.\n * @param {boolean=} open Open the key range.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.upperBound = function(bound, open) {};\n\n/**\n * @param {!IDBKeyType} left The left bound value.\n * @param {!IDBKeyType} right The right bound value.\n * @param {boolean=} openLeft Whether the left bound value should be excluded.\n * @param {boolean=} openRight Whether the right bound value should be excluded.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.bound = function(left, right, openLeft, openRight) {};\n\n/**\n * @param {!IDBKeyType} key\n * @return {boolean}\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbkeyrange-includes\n */\nIDBKeyRange.prototype.includes = function(key) {};\n\n\n/**\n * @param {string} type\n * @param {!IDBVersionChangeEventInit=} opt_eventInit\n * @constructor\n * @extends {Event}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBVersionChangeEvent\n */\nfunction IDBVersionChangeEvent(type, opt_eventInit) {}\n\n/**\n * @const {number}\n */\nIDBVersionChangeEvent.prototype.oldVersion;\n\n/**\n * @const {?number}\n */\nIDBVersionChangeEvent.prototype.newVersion;\n", -+"externs/w3c_geometry1.js":'/*\n * Copyright 2018 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Geometry Interfaces Module Level 1 spec.\n * The whole file has been fully type annotated. Created from\n * https://www.w3.org/TR/geometry-1/\n *\n * @externs\n * @author bobak@9oo91e.qjz9zk (Andreas F. Bobak)\n */\n\n/**\n * @deprecated ClientRect has been replaced by DOMRect in the latest spec.\n * @constructor\n * @see https://www.w3.org/TR/cssom-view/#changes-from-2011-08-04\n */\nfunction ClientRect() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-top\n */\nClientRect.prototype.top;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-right\n */\nClientRect.prototype.right;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-bottom\n */\nClientRect.prototype.bottom;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-left\n */\nClientRect.prototype.left;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-width\n */\nClientRect.prototype.width;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-height\n */\nClientRect.prototype.height;\n\n/**\n * @constructor\n * @extends {ClientRect} for backwards compatibility\n * @param {number=} x\n * @param {number=} y\n * @param {number=} width\n * @param {number=} height\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-domrectreadonly\n */\nfunction DOMRectReadOnly(x, y, width, height) {}\n\n/**\n * @param {!DOMRectInit} other\n * @return {!DOMRectReadOnly}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-fromrect\n */\nDOMRectReadOnly.prototype.fromRect = function(other) {};\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-x\n */\nDOMRectReadOnly.prototype.x;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-y\n */\nDOMRectReadOnly.prototype.y;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-width\n */\nDOMRectReadOnly.prototype.width;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-height\n */\nDOMRectReadOnly.prototype.height;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-top\n */\nDOMRectReadOnly.prototype.top;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-right\n */\nDOMRectReadOnly.prototype.right;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-bottom\n */\nDOMRectReadOnly.prototype.bottom;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-left\n */\nDOMRectReadOnly.prototype.left;\n\n/**\n * @constructor\n * @extends {DOMRectReadOnly}\n * @param {number=} x\n * @param {number=} y\n * @param {number=} width\n * @param {number=} height\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-domrect\n */\nfunction DOMRect(x, y, width, height) {}\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-x\n */\nDOMRect.prototype.x;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-y\n */\nDOMRect.prototype.y;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-width\n */\nDOMRect.prototype.width;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-height\n */\nDOMRect.prototype.height;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-top\n */\nDOMRect.prototype.top;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-right\n */\nDOMRect.prototype.right;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-bottom\n */\nDOMRect.prototype.bottom;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-left\n */\nDOMRect.prototype.left;\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/geometry-1/#dictdef-domrectinit\n */\nfunction DOMRectInit() {}\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-x\n */\nDOMRectInit.prototype.x;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-y\n */\nDOMRectInit.prototype.y;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-width\n */\nDOMRectInit.prototype.width;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-height\n */\nDOMRectInit.prototype.height;\n', -+"externs/w3c_geolocation.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Geolocation specification\n * http://www.w3.org/TR/geolocation-API/\n * @externs\n * @author ngd@9oo91e.qjz9zk (Neil Dunn)\n */\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/geolocation-API/#geolocation\n */\nfunction Geolocation() {}\n\n/**\n * @typedef {function(!GeolocationPosition): void}\n */\nvar PositionCallback;\n\n/**\n * @typedef {function(!GeolocationPositionError): void}\n */\nvar PositionErrorCallback;\n\n/**\n * @param {PositionCallback} successCallback\n * @param {PositionErrorCallback=} opt_errorCallback\n * @param {GeolocationPositionOptions=} opt_options\n * @return {undefined}\n */\nGeolocation.prototype.getCurrentPosition = function(successCallback,\n opt_errorCallback,\n opt_options) {};\n\n/**\n * @param {PositionCallback} successCallback\n * @param {PositionErrorCallback=} opt_errorCallback\n * @param {GeolocationPositionOptions=} opt_options\n * @return {number}\n */\nGeolocation.prototype.watchPosition = function(successCallback,\n opt_errorCallback,\n opt_options) {};\n\n/**\n * @param {number} watchId\n * @return {undefined}\n */\nGeolocation.prototype.clearWatch = function(watchId) {};\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#coordinates\n */\nfunction GeolocationCoordinates() {}\n/** @type {number} */\nGeolocationCoordinates.prototype.latitude;\n/** @type {number} */\nGeolocationCoordinates.prototype.longitude;\n/** @type {number} */\nGeolocationCoordinates.prototype.accuracy;\n/** @type {number} */\nGeolocationCoordinates.prototype.altitude;\n/** @type {number} */\nGeolocationCoordinates.prototype.altitudeAccuracy;\n/** @type {number} */\nGeolocationCoordinates.prototype.heading;\n/** @type {number} */\nGeolocationCoordinates.prototype.speed;\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#position\n */\nfunction GeolocationPosition() {}\n/** @type {GeolocationCoordinates} */\nGeolocationPosition.prototype.coords;\n/** @type {number} */\nGeolocationPosition.prototype.timestamp;\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#position-options\n */\nfunction GeolocationPositionOptions() {}\n/** @type {boolean|undefined} */\nGeolocationPositionOptions.prototype.enableHighAccuracy;\n/** @type {number|undefined} */\nGeolocationPositionOptions.prototype.maximumAge;\n/** @type {number|undefined} */\nGeolocationPositionOptions.prototype.timeout;\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#position-error\n */\nfunction GeolocationPositionError() {}\n/** @type {number} */\nGeolocationPositionError.prototype.code;\n/** @type {string} */\nGeolocationPositionError.prototype.message;\n/** @const {number} */\nGeolocationPositionError.prototype.UNKNOWN_ERROR;\n/** @const {number} */\nGeolocationPositionError.prototype.PERMISSION_DENIED;\n/** @const {number} */\nGeolocationPositionError.prototype.POSITION_UNAVAILABLE;\n/** @const {number} */\nGeolocationPositionError.prototype.TIMEOUT;\n\n/** @type {Geolocation} */\nNavigator.prototype.geolocation;\n', -+"externs/w3c_indexeddb.js":"/*\n * Copyright 2011 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's IndexedDB API and IndexedDB API 2.0.\n * @see http://www.w3.org/TR/2015/REC-IndexedDB-20150108/\n * @see https://www.w3.org/TR/2017/WD-IndexedDB-2-20170313/\n *\n * @externs\n * @author guido.tapia@picnet.com.au (Guido Tapia)\n * @author vobruba.martin@9ma1l.qjz9zk (Martin Vobruba)\n */\n\n/** @type {!IDBFactory} */\nvar indexedDB;\n\n/** @type {!IDBFactory|undefined} */\nServiceWorkerGlobalScope.prototype.indexedDB;\n\n\n\n/**\n * Possible values: 'readonly', 'readwrite', 'versionchange'\n *\n * @typedef {string}\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBTransactionMode\n */\nvar IDBTransactionMode;\n\n\n/**\n * Possible values: 'pending', 'done'\n *\n * @typedef {string}\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBRequestReadyState\n */\nvar IDBRequestReadyState;\n\n\n/**\n * Possible values: 'next', 'nextunique', 'prev', 'prevunique'\n *\n * @typedef {string}\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBCursorDirection\n */\nvar IDBCursorDirection;\n\n\n/**\n * @record\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBIndexParameters\n */\nfunction IDBIndexParameters(){};\n\n/** @type {(undefined|boolean)} */\nIDBIndexParameters.prototype.unique;\n\n/** @type {(undefined|boolean)} */\nIDBIndexParameters.prototype.multiEntry;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBVersionChangeEventInit\n */\nfunction IDBVersionChangeEventInit(){};\n\n/** @type {(undefined|number)} */\nIDBVersionChangeEventInit.prototype.oldVersion;\n\n/** @type {(undefined|number|null)} */\nIDBVersionChangeEventInit.prototype.newVersion;\n\n\n\n/**\n * @record\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBObjectStoreParameters\n */\nfunction IDBObjectStoreParameters() {};\n\n/** @type {(undefined|string|!Array|null)} */\nIDBObjectStoreParameters.prototype.keyPath;\n\n/** @type {(undefined|boolean)} */\nIDBObjectStoreParameters.prototype.autoIncrement;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBFactory\n */\nfunction IDBFactory() {}\n\n/**\n * @param {string} name The name of the database to open.\n * @param {number=} opt_version The version at which to open the database.\n * @return {!IDBOpenDBRequest} The IDBRequest object.\n */\nIDBFactory.prototype.open = function(name, opt_version) {};\n\n/**\n * @param {string} name The name of the database to delete.\n * @return {!IDBOpenDBRequest} The IDBRequest object.\n */\nIDBFactory.prototype.deleteDatabase = function(name) {};\n\n/**\n * @param {*} first\n * @param {*} second\n * @return {number}\n */\nIDBFactory.prototype.cmp = function(first, second) {};\n\n\n/**\n * @constructor\n * @template T\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBRequest\n * @see https://www.w3.org/TR/IndexedDB-2/#request-api\n */\nfunction IDBRequest() {}\n\n/** @override */\nIDBRequest.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nIDBRequest.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nIDBRequest.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {!IDBRequestReadyState}\n */\nIDBRequest.prototype.readyState; // readonly\n\n/**\n * @type {function(!Event)}\n */\nIDBRequest.prototype.onsuccess = function(e) {};\n\n/**\n * @type {function(!Event)}\n */\nIDBRequest.prototype.onerror = function(e) {};\n\n/** @type {T} */\nIDBRequest.prototype.result; // readonly\n\n/**\n * @type {number}\n * @deprecated Use \"error\"\n */\nIDBRequest.prototype.errorCode; // readonly\n\n\n/** @type {?DOMError|?DOMException} */\nIDBRequest.prototype.error; // readonly\n\n/** @type {?IDBObjectStore|?IDBIndex|?IDBCursor} */\nIDBRequest.prototype.source; // readonly\n\n/** @type {?IDBTransaction} */\nIDBRequest.prototype.transaction; // readonly\n\n\n/**\n * @constructor\n * @extends {IDBRequest}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBOpenDBRequest\n */\nfunction IDBOpenDBRequest() {}\n\n/**\n * @type {function(!IDBVersionChangeEvent)}\n */\nIDBOpenDBRequest.prototype.onblocked = function(e) {};\n\n/**\n * @type {function(!IDBVersionChangeEvent)}\n */\nIDBOpenDBRequest.prototype.onupgradeneeded = function(e) {};\n\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBDatabase\n * @see https://www.w3.org/TR/IndexedDB-2/#database-interface\n */\nfunction IDBDatabase() {}\n\n/**\n * @const {string}\n */\nIDBDatabase.prototype.name;\n\n/**\n * @const {number}\n */\nIDBDatabase.prototype.version;\n\n/**\n * @const {!DOMStringList}\n */\nIDBDatabase.prototype.objectStoreNames;\n\n/**\n * @param {string} name The name of the object store.\n * @param {!IDBObjectStoreParameters=} opt_parameters Parameters to be passed\n * creating the object store.\n * @return {!IDBObjectStore} The created/open object store.\n */\nIDBDatabase.prototype.createObjectStore =\n function(name, opt_parameters) {};\n\n/**\n * @param {string} name The name of the object store to remove.\n * @return {undefined}\n */\nIDBDatabase.prototype.deleteObjectStore = function(name) {};\n\n/**\n * @param {(string|!Array|!DOMStringList)} storeNames The stores to open\n * in this transaction.\n * @param {!IDBTransactionMode=} mode The mode for opening the object stores.\n * @return {!IDBTransaction} The IDBRequest object.\n */\nIDBDatabase.prototype.transaction = function(storeNames, mode) {};\n\n/**\n * Closes the database connection.\n * @return {undefined}\n */\nIDBDatabase.prototype.close = function() {};\n\n/**\n * @type {?function(!Event)}\n */\nIDBDatabase.prototype.onabort;\n\n/**\n * @type {?function(!Event)}\n */\nIDBDatabase.prototype.onclose;\n\n/**\n * @type {?function(!Event)}\n */\nIDBDatabase.prototype.onerror;\n\n/**\n * @type {?function(!IDBVersionChangeEvent)}\n */\nIDBDatabase.prototype.onversionchange;\n\n/** @override */\nIDBDatabase.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nIDBDatabase.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nIDBDatabase.prototype.dispatchEvent = function(evt) {};\n\n\n/**\n * Typedef for valid key types according to the w3 specification. Note that this\n * is slightly wider than what is actually allowed, as all Array elements must\n * have a valid key type.\n * @see http://www.w3.org/TR/IndexedDB/#key-construct\n * @see https://www.w3.org/TR/IndexedDB-2/#key-construct\n * @typedef {number|string|!Date|!Array|!BufferSource}\n */\nvar IDBKeyType;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBObjectStore\n * @see https://www.w3.org/TR/IndexedDB-2/#object-store-interface\n */\nfunction IDBObjectStore() {}\n\n/**\n * @type {string}\n */\nIDBObjectStore.prototype.name;\n\n/**\n * @type {*}\n */\nIDBObjectStore.prototype.keyPath;\n\n/**\n * @type {!DOMStringList}\n */\nIDBObjectStore.prototype.indexNames;\n\n/** @type {!IDBTransaction} */\nIDBObjectStore.prototype.transaction;\n\n/** @type {boolean} */\nIDBObjectStore.prototype.autoIncrement;\n\n/**\n * @param {*} value The value to put into the object store.\n * @param {!IDBKeyType=} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.put = function(value, key) {};\n\n/**\n * @param {*} value The value to add into the object store.\n * @param {!IDBKeyType=} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.add = function(value, key) {};\n\n/**\n * @param {!IDBKeyType|!IDBKeyRange} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.delete = function(key) {};\n\n/**\n * @param {!IDBKeyType|!IDBKeyRange} key The key of the document to retrieve.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.get = function(key) {};\n\n/**\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.clear = function() {};\n\n/**\n * @param {?IDBKeyRange=} range The range of the cursor.\n * Nullable because IE <11 has problems with undefined.\n * @param {!IDBCursorDirection=} direction The direction of cursor enumeration.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.openCursor = function(range, direction) {};\n\n/**\n * @param {string} name The name of the index.\n * @param {string|!Array} keyPath The path to the index key.\n * @param {!IDBIndexParameters=} opt_paramters Optional parameters\n * for the created index.\n * @return {!IDBIndex} The IDBIndex object.\n */\nIDBObjectStore.prototype.createIndex = function(name, keyPath, opt_paramters) {};\n\n/**\n * @param {string} name The name of the index to retrieve.\n * @return {!IDBIndex} The IDBIndex object.\n */\nIDBObjectStore.prototype.index = function(name) {};\n\n/**\n * @param {string} indexName The name of the index to remove.\n * @return {undefined}\n */\nIDBObjectStore.prototype.deleteIndex = function(indexName) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n * @see http://www.w3.org/TR/IndexedDB/#widl-IDBObjectStore-count\n */\nIDBObjectStore.prototype.count = function(key) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} query\n * @return {!IDBRequest} The IDBRequest object.\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-getkey\n */\nIDBObjectStore.prototype.getKey = function(query) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} query\n * @param {number=} count\n * @return {!IDBRequest} The IDBRequest object.\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-getall\n */\nIDBObjectStore.prototype.getAll = function(query, count) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} query\n * @param {number=} count\n * @return {!IDBRequest} The IDBRequest object.\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-getallkeys\n */\nIDBObjectStore.prototype.getAllKeys = function(query, count) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} query\n * @param {!IDBCursorDirection=} direction\n * @return {!IDBRequest} The IDBRequest object.\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-openkeycursor\n */\nIDBObjectStore.prototype.openKeyCursor = function(query, direction) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBIndex\n * @see https://www.w3.org/TR/IndexedDB-2/#index-interface\n */\nfunction IDBIndex() {}\n\n/**\n * @type {string}\n */\nIDBIndex.prototype.name;\n\n/**\n * @const {!IDBObjectStore}\n */\nIDBIndex.prototype.objectStore;\n\n/**\n * @const {*}\n */\nIDBIndex.prototype.keyPath;\n\n/**\n * @const {boolean}\n */\nIDBIndex.prototype.multiEntry;\n\n/**\n * @const {boolean}\n */\nIDBIndex.prototype.unique;\n\n/**\n * @param {(!IDBKeyType|?IDBKeyRange)=} range The range of the cursor.\n * Nullable because IE <11 has problems with undefined.\n * @param {!IDBCursorDirection=} direction The direction of cursor enumeration.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.openCursor = function(range, direction) {};\n\n/**\n * @param {(!IDBKeyType|?IDBKeyRange)=} range The range of the cursor.\n * Nullable because IE <11 has problems with undefined.\n * @param {!IDBCursorDirection=} direction The direction of cursor enumeration.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.openKeyCursor = function(range, direction) {};\n\n/**\n * @param {!IDBKeyType|!IDBKeyRange} key The id of the object to retrieve.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.get = function(key) {};\n\n/**\n * @param {!IDBKeyType|!IDBKeyRange} key The id of the object to retrieve.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.getKey = function(key) {};\n\n/**\n * @param {(!IDBKeyType|!IDBKeyRange)=} query\n * @param {number=} count\n * @return {!IDBRequest}\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbindex-getall\n */\nIDBIndex.prototype.getAll = function(query, count) {};\n\n/**\n * @param {(!IDBKeyType|!IDBKeyRange)=} query\n * @param {number=} count\n * @return {!IDBRequest}\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbindex-getallkeys\n */\nIDBIndex.prototype.getAllKeys = function(query, count) {};\n\n/**\n * @param {(!IDBKeyType|!IDBKeyRange)=} opt_key\n * @return {!IDBRequest}\n */\nIDBIndex.prototype.count = function(opt_key) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBCursor\n * @see https://www.w3.org/TR/IndexedDB-2/#cursor-interface\n */\nfunction IDBCursor() {}\n\n/**\n * @const {(!IDBObjectStore|!IDBIndex)}\n */\nIDBCursor.prototype.source;\n\n/**\n * @const {!IDBCursorDirection}\n */\nIDBCursor.prototype.direction;\n\n/**\n * @const {!IDBKeyType}\n */\nIDBCursor.prototype.key;\n\n/**\n * @const {!IDBKeyType}\n */\nIDBCursor.prototype.primaryKey;\n\n/**\n * @param {*} value The new value for the current object in the cursor.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBCursor.prototype.update = function(value) {};\n\n/**\n * Note: Must be quoted to avoid parse error.\n * @param {!IDBKeyType=} key Continue enumerating the cursor from the specified\n * key (or next).\n * @return {undefined}\n */\nIDBCursor.prototype.continue = function(key) {};\n\n/**\n * @param {!IDBKeyType} key\n * @param {!IDBKeyType} primaryKey\n * @return {undefined}\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbcursor-continueprimarykey\n */\nIDBCursor.prototype.continuePrimaryKey = function(key, primaryKey) {};\n\n/**\n * @param {number} count Number of times to iterate the cursor.\n * @return {undefined}\n */\nIDBCursor.prototype.advance = function(count) {};\n\n/**\n * Note: Must be quoted to avoid parse error.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBCursor.prototype.delete = function() {};\n\n\n/**\n * @constructor\n * @extends {IDBCursor}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBCursorWithValue\n */\nfunction IDBCursorWithValue() {}\n\n/** @type {*} */\nIDBCursorWithValue.prototype.value; // readonly\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBTransaction\n * @see https://www.w3.org/TR/IndexedDB-2/#transaction\n */\nfunction IDBTransaction() {}\n\n/**\n * @const {!DOMStringList}\n */\nIDBTransaction.prototype.objectStoreNames;\n\n/**\n * @const {!IDBTransactionMode}\n */\nIDBTransaction.prototype.mode;\n\n/**\n * @const {!IDBDatabase}\n */\nIDBTransaction.prototype.db;\n\n/**\n * @type {!DOMError|!DOMException}\n */\nIDBTransaction.prototype.error;\n\n/**\n * @param {string} name The name of the object store to retrieve.\n * @return {!IDBObjectStore} The object store.\n */\nIDBTransaction.prototype.objectStore = function(name) {};\n\n/**\n * Aborts the transaction.\n * @return {undefined}\n */\nIDBTransaction.prototype.abort = function() {};\n\n/**\n * @type {?function(!Event)}\n */\nIDBTransaction.prototype.onabort;\n\n/**\n * @type {?function(!Event)}\n */\nIDBTransaction.prototype.oncomplete;\n\n/**\n * @type {?function(!Event)}\n */\nIDBTransaction.prototype.onerror;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBKeyRange\n * @see https://www.w3.org/TR/IndexedDB-2/#keyrange\n */\nfunction IDBKeyRange() {}\n\n/**\n * @const {*}\n */\nIDBKeyRange.prototype.lower;\n\n/**\n * @const {*}\n */\nIDBKeyRange.prototype.upper;\n\n/**\n * @const {boolean}\n */\nIDBKeyRange.prototype.lowerOpen;\n\n/**\n * @const {boolean}\n */\nIDBKeyRange.prototype.upperOpen;\n\n/**\n * @param {!IDBKeyType} value The single key value of this range.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.only = function(value) {};\n\n/**\n * @param {!IDBKeyType} bound Creates a lower bound key range.\n * @param {boolean=} open Open the key range.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.lowerBound = function(bound, open) {};\n\n/**\n * @param {!IDBKeyType} bound Creates an upper bound key range.\n * @param {boolean=} open Open the key range.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.upperBound = function(bound, open) {};\n\n/**\n * @param {!IDBKeyType} left The left bound value.\n * @param {!IDBKeyType} right The right bound value.\n * @param {boolean=} openLeft Whether the left bound value should be excluded.\n * @param {boolean=} openRight Whether the right bound value should be excluded.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.bound = function(left, right, openLeft, openRight) {};\n\n/**\n * @param {!IDBKeyType} key\n * @return {boolean}\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbkeyrange-includes\n */\nIDBKeyRange.prototype.includes = function(key) {};\n\n\n/**\n * @param {string} type\n * @param {!IDBVersionChangeEventInit=} opt_eventInit\n * @constructor\n * @extends {Event}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBVersionChangeEvent\n */\nfunction IDBVersionChangeEvent(type, opt_eventInit) {}\n\n/**\n * @const {number}\n */\nIDBVersionChangeEvent.prototype.oldVersion;\n\n/**\n * @const {?number}\n */\nIDBVersionChangeEvent.prototype.newVersion;\n", - "externs/w3c_midi.js":'/*\n * Copyright 2014 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview W3C Web MIDI specification.\n * @see http://www.w3.org/TR/webmidi/\n *\n * @externs\n */\n\n\n/**\n * @param {!MIDIOptions=} opt_options\n * @return {!Promise.}\n */\nnavigator.requestMIDIAccess = function(opt_options) {};\n\n\n/**\n * @typedef {{\n * sysex: boolean\n * }}\n */\nvar MIDIOptions;\n\n\n\n/**\n * @interface\n */\nvar MIDIInputMap = function() {};\n\n\n/**\n * @const {number}\n */\nMIDIInputMap.prototype.size;\n\n\n/**\n * @param {function(string)} iterator\n */\nMIDIInputMap.prototype.keys = function(iterator) {};\n\n\n/**\n * @param {function(!Array.<*>)} iterator\n */\nMIDIInputMap.prototype.entries = function(iterator) {};\n\n\n/**\n * @param {function(!MIDIInput)} iterator\n */\nMIDIInputMap.prototype.values = function(iterator) {};\n\n\n/**\n * @param {string} key\n * @return {!MIDIInput}\n */\nMIDIInputMap.prototype.get = function(key) {};\n\n\n/**\n * @param {string} key\n * @return {boolean}\n */\nMIDIInputMap.prototype.has = function(key) {};\n\n\n\n/**\n * @interface\n */\nvar MIDIOutputMap = function() {};\n\n\n/**\n * @const {number}\n */\nMIDIOutputMap.prototype.size;\n\n\n/**\n * @param {function(string)} iterator\n */\nMIDIOutputMap.prototype.keys = function(iterator) {};\n\n\n/**\n * @param {function(!Array.<*>)} iterator\n */\nMIDIOutputMap.prototype.entries = function(iterator) {};\n\n\n/**\n * @param {function(!MIDIOutput)} iterator\n */\nMIDIOutputMap.prototype.values = function(iterator) {};\n\n\n/**\n * @param {string} key\n * @return {!MIDIOutput}\n */\nMIDIOutputMap.prototype.get = function(key) {};\n\n\n/**\n * @param {string} key\n * @return {boolean}\n */\nMIDIOutputMap.prototype.has = function(key) {};\n\n\n\n/**\n * @interface\n * @extends {EventTarget}\n */\nvar MIDIAccess = function() {};\n\n\n/**\n * @const {!MIDIInputMap}\n */\nMIDIAccess.prototype.inputs;\n\n\n/**\n * @const {!MIDIOutputMap}\n */\nMIDIAccess.prototype.outputs;\n\n\n/**\n * @const {function(!MIDIConnectionEvent)}\n */\nMIDIAccess.prototype.onconnect;\n\n\n/**\n * @type {function(!MIDIConnectionEvent)}\n */\nMIDIAccess.prototype.ondisconnect;\n\n\n/**\n * @const {boolean}\n */\nMIDIAccess.prototype.sysexEnabled;\n\n\n\n/**\n * @interface\n * @extends {EventTarget}\n */\nvar MIDIPort = function() {};\n\n\n/**\n * @const {string}\n */\nMIDIPort.prototype.id;\n\n\n/**\n * @const {string}\n */\nMIDIPort.prototype.manufacturer;\n\n\n/**\n * @const {string}\n */\nMIDIPort.prototype.name;\n\n\n/**\n * @const {string}\n */\nMIDIPort.prototype.type;\n\n\n/**\n * @const {string}\n */\nMIDIPort.prototype.version;\n\n\n/**\n * @type {function(!MIDIConnectionEvent)}\n */\nMIDIPort.prototype.ondisconnect;\n\n\n\n/**\n * @interface\n * @extends {MIDIPort}\n */\nvar MIDIInput = function() {};\n\n\n/**\n * @type {function(!MIDIMessageEvent)}\n */\nMIDIInput.prototype.onmidimessage;\n\n\n\n/**\n * @interface\n * @extends {MIDIPort}\n */\nvar MIDIOutput = function() {};\n\n\n/**\n * @param {!Uint8Array} data\n * @param {number=} opt_timestamp\n */\nMIDIOutput.prototype.send = function(data, opt_timestamp) {};\n\n\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {!MIDIMessageEventInit=} opt_init\n */\nvar MIDIMessageEvent = function(type, opt_init) {};\n\n\n/**\n * @const {number}\n */\nMIDIMessageEvent.prototype.receivedTime;\n\n\n/**\n * @const {!Uint8Array}\n */\nMIDIMessageEvent.prototype.data;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://www.w3.org/TR/webmidi/#midimessageeventinit-interface\n */\nfunction MIDIMessageEventInit() {}\n\n/** @type {undefined|number} */\nMIDIMessageEventInit.prototype.receivedTime;\n\n/** @type {undefined|!Uint8Array} */\nMIDIMessageEventInit.prototype.data;\n\n\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {!MIDIConnectionEventInit=} opt_init\n */\nvar MIDIConnectionEvent = function(type, opt_init) {};\n\n\n/**\n * @const {MIDIPort}\n */\nMIDIConnectionEvent.prototype.port;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://www.w3.org/TR/webmidi/#idl-def-MIDIConnectionEventInit\n */\nfunction MIDIConnectionEventInit() {}\n\n/** @type {undefined|!MIDIPort} */\nMIDIConnectionEventInit.prototype.port;\n', --"externs/w3c_navigation_timing.js":"/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's Navigation Timing specification.\n *\n * Created from\n * @see http://dvcs.w3.org/hg/webperf/raw-file/tip/specs/NavigationTiming/Overview.html\n * @see http://w3c-test.org/webperf/specs/ResourceTiming\n * @see http://www.w3.org/TR/performance-timeline\n * @see http://www.w3.org/TR/user-timing/\n *\n * @externs\n * @author rky@google.com (Ren\u00e9 Kyllingstad)\n */\n\n/** @constructor */\nfunction PerformanceTiming() {}\n/** @type {number} */ PerformanceTiming.prototype.navigationStart;\n/** @type {number} */ PerformanceTiming.prototype.unloadEventStart;\n/** @type {number} */ PerformanceTiming.prototype.unloadEventEnd;\n/** @type {number} */ PerformanceTiming.prototype.redirectStart;\n/** @type {number} */ PerformanceTiming.prototype.redirectEnd;\n/** @type {number} */ PerformanceTiming.prototype.fetchStart;\n/** @type {number} */ PerformanceTiming.prototype.domainLookupStart;\n/** @type {number} */ PerformanceTiming.prototype.domainLookupEnd;\n/** @type {number} */ PerformanceTiming.prototype.connectStart;\n/** @type {number} */ PerformanceTiming.prototype.connectEnd;\n/** @type {number} */ PerformanceTiming.prototype.secureConnectionStart;\n/** @type {number} */ PerformanceTiming.prototype.requestStart;\n/** @type {number} */ PerformanceTiming.prototype.responseStart;\n/** @type {number} */ PerformanceTiming.prototype.responseEnd;\n/** @type {number} */ PerformanceTiming.prototype.domLoading;\n/** @type {number} */ PerformanceTiming.prototype.domInteractive;\n/** @type {number} */ PerformanceTiming.prototype.domContentLoadedEventStart;\n/** @type {number} */ PerformanceTiming.prototype.domContentLoadedEventEnd;\n/** @type {number} */ PerformanceTiming.prototype.domComplete;\n/** @type {number} */ PerformanceTiming.prototype.loadEventStart;\n/** @type {number} */ PerformanceTiming.prototype.loadEventEnd;\n\n/** @constructor */\nfunction PerformanceEntry() {}\n/** @type {string} */ PerformanceEntry.prototype.name;\n/** @type {string} */ PerformanceEntry.prototype.entryType;\n/** @type {number} */ PerformanceEntry.prototype.startTime;\n/** @type {number} */ PerformanceEntry.prototype.duration;\n\n/**\n * https://www.w3.org/TR/resource-timing-2/#performanceresourcetiming\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformanceResourceTiming() {}\n/** @type {number} */ PerformanceResourceTiming.prototype.redirectStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.redirectEnd;\n/** @type {number} */ PerformanceResourceTiming.prototype.fetchStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.domainLookupStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.domainLookupEnd;\n/** @type {number} */ PerformanceResourceTiming.prototype.connectStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.connectEnd;\n/** @type {number} */\nPerformanceResourceTiming.prototype.secureConnectionStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.requestStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.responseStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.responseEnd;\n/** @type {string} */ PerformanceResourceTiming.prototype.initiatorType;\n/** @type {number|undefined} */\nPerformanceResourceTiming.prototype.transferSize;\n/** @type {number|undefined} */\nPerformanceResourceTiming.prototype.encodedBodySize;\n/** @type {number|undefined} */\nPerformanceResourceTiming.prototype.decodedBodySize;\n/** @type {number|undefined} */\nPerformanceResourceTiming.prototype.workerStart;\n/** @type {string} */ PerformanceResourceTiming.prototype.nextHopProtocol;\n\n/**\n * Possible values are 'navigate', 'reload', 'back_forward', and 'prerender'.\n * See https://w3c.github.io/navigation-timing/#sec-performance-navigation-types\n * @typedef {string}\n */\nvar NavigationType;\n\n/**\n * https://w3c.github.io/navigation-timing/#sec-PerformanceNavigationTiming\n * @constructor\n * @extends {PerformanceResourceTiming}\n */\nfunction PerformanceNavigationTiming() {}\n/** @type {number} */ PerformanceNavigationTiming.prototype.unloadEventStart;\n/** @type {number} */ PerformanceNavigationTiming.prototype.unloadEventEnd;\n/** @type {number} */ PerformanceNavigationTiming.prototype.domInteractive;\n/** @type {number} */ PerformanceNavigationTiming.prototype\n .domContentLoadedEventStart;\n/** @type {number} */ PerformanceNavigationTiming.prototype\n .domContentLoadedEventEnd;\n/** @type {number} */ PerformanceNavigationTiming.prototype.domComplete;\n/** @type {number} */ PerformanceNavigationTiming.prototype.loadEventStart;\n/** @type {number} */ PerformanceNavigationTiming.prototype.loadEventEnd;\n/** @type {NavigationType} */ PerformanceNavigationTiming.prototype.type;\n/** @type {number} */ PerformanceNavigationTiming.prototype.redirectCount;\n\n/**\n * https://w3c.github.io/paint-timing/#sec-PerformancePaintTiming\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformancePaintTiming() {}\n\n/** @constructor */\nfunction PerformanceNavigation() {}\n/** @const {number} */ PerformanceNavigation.TYPE_NAVIGATE;\n/** @const {number} */ PerformanceNavigation.prototype.TYPE_NAVIGATE;\n/** @const {number} */ PerformanceNavigation.TYPE_RELOAD;\n/** @const {number} */ PerformanceNavigation.prototype.TYPE_RELOAD;\n/** @const {number} */ PerformanceNavigation.TYPE_BACK_FORWARD;\n/** @const {number} */ PerformanceNavigation.prototype.TYPE_BACK_FORWARD;\n/** @const {number} */ PerformanceNavigation.TYPE_RESERVED;\n/** @const {number} */ PerformanceNavigation.prototype.TYPE_RESERVED;\n/** @type {number} */ PerformanceNavigation.prototype.type;\n/** @type {number} */ PerformanceNavigation.prototype.redirectCount;\n\n/**\n * https://w3c.github.io/longtasks/#taskattributiontiming\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction TaskAttributionTiming() {}\n/** @type {string} */ TaskAttributionTiming.prototype.containerId;\n/** @type {string} */ TaskAttributionTiming.prototype.containerName;\n/** @type {string} */ TaskAttributionTiming.prototype.containerSrc;\n/** @type {string} */ TaskAttributionTiming.prototype.containerType;\n\n/**\n * https://w3c.github.io/longtasks/#performancelongtasktiming\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformanceLongTaskTiming() {}\n/** @type {!Array} */\nPerformanceLongTaskTiming.prototype.attribution;\n\n/**\n * https://wicg.github.io/layout-instability/#sec-layout-shift\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction LayoutShift() {}\n/** @type {number} */ LayoutShift.prototype.value;\n/** @type {boolean} */ LayoutShift.prototype.hadRecentInput;\n/** @type {number} */ LayoutShift.prototype.lastInputTime;\n\n/**\n * https://wicg.github.io/largest-contentful-paint/#largestcontentfulpaint\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction LargestContentfulPaint() {}\n/** @type {number} */ LargestContentfulPaint.prototype.renderTime;\n/** @type {number} */ LargestContentfulPaint.prototype.loadTime;\n/** @type {number} */ LargestContentfulPaint.prototype.size;\n/** @type {string} */ LargestContentfulPaint.prototype.id;\n/** @type {string} */ LargestContentfulPaint.prototype.url;\n/** @type {?Element} */ LargestContentfulPaint.prototype.element;\n\n/**\n * https://wicg.github.io/event-timing/#sec-performance-event-timing\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformanceEventTiming() {}\n/** @type {number} */ PerformanceEventTiming.prototype.processingStart;\n/** @type {number} */ PerformanceEventTiming.prototype.processingEnd;\n/** @type {boolean} */ PerformanceEventTiming.prototype.cancelable;\n\n/** @constructor */\nfunction Performance() {}\n\n/** @type {PerformanceTiming} */\nPerformance.prototype.timing;\n\n/** @type {PerformanceNavigation} */\nPerformance.prototype.navigation;\n\n/** @type {number} */\nPerformance.prototype.timeOrigin;\n\n\n/**\n * Clears the buffer used to store the current list of\n * PerformanceResourceTiming resources.\n * @return {undefined}\n */\nPerformance.prototype.clearResourceTimings = function() {};\n\n/**\n * A callback that is invoked when the resourcetimingbufferfull event is fired.\n * @type {?function(Event)}\n */\nPerformance.prototype.onresourcetimingbufferfull = function() {};\n\n/**\n * Set the maximum number of PerformanceResourceTiming resources that may be\n * stored in the buffer.\n * @param {number} maxSize\n * @return {undefined}\n */\nPerformance.prototype.setResourceTimingBufferSize = function(maxSize) {};\n\n/**\n * @return {!Array} A copy of the PerformanceEntry list,\n * in chronological order with respect to startTime.\n * @nosideeffects\n */\nPerformance.prototype.getEntries = function() {};\n\n/**\n * @param {string} entryType Only return `PerformanceEntry`s with this\n * entryType.\n * @return {!Array} A copy of the PerformanceEntry list,\n * in chronological order with respect to startTime.\n * @nosideeffects\n */\nPerformance.prototype.getEntriesByType = function(entryType) {};\n\n/**\n * @param {string} name Only return `PerformanceEntry`s with this name.\n * @param {string=} opt_entryType Only return `PerformanceEntry`s with\n * this entryType.\n * @return {!Array} PerformanceEntry list in chronological\n * order with respect to startTime.\n * @nosideeffects\n */\nPerformance.prototype.getEntriesByName = function(name, opt_entryType) {};\n\n/**\n * @return {number}\n * @nosideeffects\n */\nPerformance.prototype.now = function() {};\n\n/**\n * @param {string} markName\n * @return {undefined}\n */\nPerformance.prototype.mark = function(markName) {};\n\n/**\n * @param {string=} opt_markName\n * @return {undefined}\n */\nPerformance.prototype.clearMarks = function(opt_markName) {};\n\n/**\n * @param {string} measureName\n * @param {string=} opt_startMark\n * @param {string=} opt_endMark\n * @return {undefined}\n */\nPerformance.prototype.measure = function(\n measureName, opt_startMark, opt_endMark) {};\n\n/**\n * @param {string=} opt_measureName\n * @return {undefined}\n */\nPerformance.prototype.clearMeasures = function(opt_measureName) {};\n\n/** @type {Performance} */\nWindow.prototype.performance;\n\n/**\n * @type {!Performance}\n * @suppress {duplicate}\n */\nvar performance;\n\n/**\n * @constructor\n * @extends {Performance}\n */\nfunction WorkerPerformance() {}\n\n/**\n * @typedef {function(!PerformanceObserverEntryList, !PerformanceObserver): void}\n */\nvar PerformanceObserverCallback;\n\n/**\n * See:\n * https://w3c.github.io/performance-timeline/#the-performanceobserver-interface\n * @constructor\n * @param {!PerformanceObserverCallback} callback\n */\nfunction PerformanceObserver(callback) {}\n\n/**\n * @param {!PerformanceObserverInit} options\n */\nPerformanceObserver.prototype.observe = function(options) {};\n\n/** @return {void} */\nPerformanceObserver.prototype.disconnect = function() {};\n\n/**\n * See https://developer.mozilla.org/en-US/docs/Web/API/PerformanceObserver/takeRecords\n * @return {!PerformanceObserverEntryList}\n */\nPerformanceObserver.prototype.takeRecords = function() {};\n\n/**\n * @record\n */\nfunction PerformanceObserverInit() {}\n\n/** @type {undefined|!Array} */\nPerformanceObserverInit.prototype.entryTypes;\n/** @type {undefined|string} */\nPerformanceObserverInit.prototype.type;\n/** @type {undefined|boolean} */\nPerformanceObserverInit.prototype.buffered;\n\n/**\n * @constructor\n */\nfunction PerformanceObserverEntryList() {}\n\n/** @return {!Array} */\nPerformanceObserverEntryList.prototype.getEntries = function() {};\n/**\n * @param {string} type\n * @return {!Array}\n */\nPerformanceObserverEntryList.prototype.getEntriesByName = function(type) {};\n/**\n * @param {string} name\n * @param {string=} opt_type\n * @return {!Array}\n */\nPerformanceObserverEntryList.prototype.getEntriesByType = function(\n name, opt_type) {};\n", -+"externs/w3c_navigation_timing.js":"/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's Navigation Timing specification.\n *\n * Created from\n * @see http://dvcs.w3.org/hg/webperf/raw-file/tip/specs/NavigationTiming/Overview.html\n * @see http://w3c-test.org/webperf/specs/ResourceTiming\n * @see http://www.w3.org/TR/performance-timeline\n * @see http://www.w3.org/TR/user-timing/\n *\n * @externs\n * @author rky@9oo91e.qjz9zk (Ren\u00e9 Kyllingstad)\n */\n\n/** @constructor */\nfunction PerformanceTiming() {}\n/** @type {number} */ PerformanceTiming.prototype.navigationStart;\n/** @type {number} */ PerformanceTiming.prototype.unloadEventStart;\n/** @type {number} */ PerformanceTiming.prototype.unloadEventEnd;\n/** @type {number} */ PerformanceTiming.prototype.redirectStart;\n/** @type {number} */ PerformanceTiming.prototype.redirectEnd;\n/** @type {number} */ PerformanceTiming.prototype.fetchStart;\n/** @type {number} */ PerformanceTiming.prototype.domainLookupStart;\n/** @type {number} */ PerformanceTiming.prototype.domainLookupEnd;\n/** @type {number} */ PerformanceTiming.prototype.connectStart;\n/** @type {number} */ PerformanceTiming.prototype.connectEnd;\n/** @type {number} */ PerformanceTiming.prototype.secureConnectionStart;\n/** @type {number} */ PerformanceTiming.prototype.requestStart;\n/** @type {number} */ PerformanceTiming.prototype.responseStart;\n/** @type {number} */ PerformanceTiming.prototype.responseEnd;\n/** @type {number} */ PerformanceTiming.prototype.domLoading;\n/** @type {number} */ PerformanceTiming.prototype.domInteractive;\n/** @type {number} */ PerformanceTiming.prototype.domContentLoadedEventStart;\n/** @type {number} */ PerformanceTiming.prototype.domContentLoadedEventEnd;\n/** @type {number} */ PerformanceTiming.prototype.domComplete;\n/** @type {number} */ PerformanceTiming.prototype.loadEventStart;\n/** @type {number} */ PerformanceTiming.prototype.loadEventEnd;\n\n/** @constructor */\nfunction PerformanceEntry() {}\n/** @type {string} */ PerformanceEntry.prototype.name;\n/** @type {string} */ PerformanceEntry.prototype.entryType;\n/** @type {number} */ PerformanceEntry.prototype.startTime;\n/** @type {number} */ PerformanceEntry.prototype.duration;\n\n/**\n * https://www.w3.org/TR/resource-timing-2/#performanceresourcetiming\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformanceResourceTiming() {}\n/** @type {number} */ PerformanceResourceTiming.prototype.redirectStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.redirectEnd;\n/** @type {number} */ PerformanceResourceTiming.prototype.fetchStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.domainLookupStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.domainLookupEnd;\n/** @type {number} */ PerformanceResourceTiming.prototype.connectStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.connectEnd;\n/** @type {number} */\nPerformanceResourceTiming.prototype.secureConnectionStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.requestStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.responseStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.responseEnd;\n/** @type {string} */ PerformanceResourceTiming.prototype.initiatorType;\n/** @type {number|undefined} */\nPerformanceResourceTiming.prototype.transferSize;\n/** @type {number|undefined} */\nPerformanceResourceTiming.prototype.encodedBodySize;\n/** @type {number|undefined} */\nPerformanceResourceTiming.prototype.decodedBodySize;\n/** @type {number|undefined} */\nPerformanceResourceTiming.prototype.workerStart;\n/** @type {string} */ PerformanceResourceTiming.prototype.nextHopProtocol;\n\n/**\n * Possible values are 'navigate', 'reload', 'back_forward', and 'prerender'.\n * See https://w3c.github.io/navigation-timing/#sec-performance-navigation-types\n * @typedef {string}\n */\nvar NavigationType;\n\n/**\n * https://w3c.github.io/navigation-timing/#sec-PerformanceNavigationTiming\n * @constructor\n * @extends {PerformanceResourceTiming}\n */\nfunction PerformanceNavigationTiming() {}\n/** @type {number} */ PerformanceNavigationTiming.prototype.unloadEventStart;\n/** @type {number} */ PerformanceNavigationTiming.prototype.unloadEventEnd;\n/** @type {number} */ PerformanceNavigationTiming.prototype.domInteractive;\n/** @type {number} */ PerformanceNavigationTiming.prototype\n .domContentLoadedEventStart;\n/** @type {number} */ PerformanceNavigationTiming.prototype\n .domContentLoadedEventEnd;\n/** @type {number} */ PerformanceNavigationTiming.prototype.domComplete;\n/** @type {number} */ PerformanceNavigationTiming.prototype.loadEventStart;\n/** @type {number} */ PerformanceNavigationTiming.prototype.loadEventEnd;\n/** @type {NavigationType} */ PerformanceNavigationTiming.prototype.type;\n/** @type {number} */ PerformanceNavigationTiming.prototype.redirectCount;\n\n/**\n * https://w3c.github.io/paint-timing/#sec-PerformancePaintTiming\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformancePaintTiming() {}\n\n/** @constructor */\nfunction PerformanceNavigation() {}\n/** @const {number} */ PerformanceNavigation.TYPE_NAVIGATE;\n/** @const {number} */ PerformanceNavigation.prototype.TYPE_NAVIGATE;\n/** @const {number} */ PerformanceNavigation.TYPE_RELOAD;\n/** @const {number} */ PerformanceNavigation.prototype.TYPE_RELOAD;\n/** @const {number} */ PerformanceNavigation.TYPE_BACK_FORWARD;\n/** @const {number} */ PerformanceNavigation.prototype.TYPE_BACK_FORWARD;\n/** @const {number} */ PerformanceNavigation.TYPE_RESERVED;\n/** @const {number} */ PerformanceNavigation.prototype.TYPE_RESERVED;\n/** @type {number} */ PerformanceNavigation.prototype.type;\n/** @type {number} */ PerformanceNavigation.prototype.redirectCount;\n\n/**\n * https://w3c.github.io/longtasks/#taskattributiontiming\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction TaskAttributionTiming() {}\n/** @type {string} */ TaskAttributionTiming.prototype.containerId;\n/** @type {string} */ TaskAttributionTiming.prototype.containerName;\n/** @type {string} */ TaskAttributionTiming.prototype.containerSrc;\n/** @type {string} */ TaskAttributionTiming.prototype.containerType;\n\n/**\n * https://w3c.github.io/longtasks/#performancelongtasktiming\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformanceLongTaskTiming() {}\n/** @type {!Array} */\nPerformanceLongTaskTiming.prototype.attribution;\n\n/**\n * https://wicg.github.io/layout-instability/#sec-layout-shift\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction LayoutShift() {}\n/** @type {number} */ LayoutShift.prototype.value;\n/** @type {boolean} */ LayoutShift.prototype.hadRecentInput;\n/** @type {number} */ LayoutShift.prototype.lastInputTime;\n\n/**\n * https://wicg.github.io/largest-contentful-paint/#largestcontentfulpaint\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction LargestContentfulPaint() {}\n/** @type {number} */ LargestContentfulPaint.prototype.renderTime;\n/** @type {number} */ LargestContentfulPaint.prototype.loadTime;\n/** @type {number} */ LargestContentfulPaint.prototype.size;\n/** @type {string} */ LargestContentfulPaint.prototype.id;\n/** @type {string} */ LargestContentfulPaint.prototype.url;\n/** @type {?Element} */ LargestContentfulPaint.prototype.element;\n\n/**\n * https://wicg.github.io/event-timing/#sec-performance-event-timing\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformanceEventTiming() {}\n/** @type {number} */ PerformanceEventTiming.prototype.processingStart;\n/** @type {number} */ PerformanceEventTiming.prototype.processingEnd;\n/** @type {boolean} */ PerformanceEventTiming.prototype.cancelable;\n\n/** @constructor */\nfunction Performance() {}\n\n/** @type {PerformanceTiming} */\nPerformance.prototype.timing;\n\n/** @type {PerformanceNavigation} */\nPerformance.prototype.navigation;\n\n/** @type {number} */\nPerformance.prototype.timeOrigin;\n\n\n/**\n * Clears the buffer used to store the current list of\n * PerformanceResourceTiming resources.\n * @return {undefined}\n */\nPerformance.prototype.clearResourceTimings = function() {};\n\n/**\n * A callback that is invoked when the resourcetimingbufferfull event is fired.\n * @type {?function(Event)}\n */\nPerformance.prototype.onresourcetimingbufferfull = function() {};\n\n/**\n * Set the maximum number of PerformanceResourceTiming resources that may be\n * stored in the buffer.\n * @param {number} maxSize\n * @return {undefined}\n */\nPerformance.prototype.setResourceTimingBufferSize = function(maxSize) {};\n\n/**\n * @return {!Array} A copy of the PerformanceEntry list,\n * in chronological order with respect to startTime.\n * @nosideeffects\n */\nPerformance.prototype.getEntries = function() {};\n\n/**\n * @param {string} entryType Only return `PerformanceEntry`s with this\n * entryType.\n * @return {!Array} A copy of the PerformanceEntry list,\n * in chronological order with respect to startTime.\n * @nosideeffects\n */\nPerformance.prototype.getEntriesByType = function(entryType) {};\n\n/**\n * @param {string} name Only return `PerformanceEntry`s with this name.\n * @param {string=} opt_entryType Only return `PerformanceEntry`s with\n * this entryType.\n * @return {!Array} PerformanceEntry list in chronological\n * order with respect to startTime.\n * @nosideeffects\n */\nPerformance.prototype.getEntriesByName = function(name, opt_entryType) {};\n\n/**\n * @return {number}\n * @nosideeffects\n */\nPerformance.prototype.now = function() {};\n\n/**\n * @param {string} markName\n * @return {undefined}\n */\nPerformance.prototype.mark = function(markName) {};\n\n/**\n * @param {string=} opt_markName\n * @return {undefined}\n */\nPerformance.prototype.clearMarks = function(opt_markName) {};\n\n/**\n * @param {string} measureName\n * @param {string=} opt_startMark\n * @param {string=} opt_endMark\n * @return {undefined}\n */\nPerformance.prototype.measure = function(\n measureName, opt_startMark, opt_endMark) {};\n\n/**\n * @param {string=} opt_measureName\n * @return {undefined}\n */\nPerformance.prototype.clearMeasures = function(opt_measureName) {};\n\n/** @type {Performance} */\nWindow.prototype.performance;\n\n/**\n * @type {!Performance}\n * @suppress {duplicate}\n */\nvar performance;\n\n/**\n * @constructor\n * @extends {Performance}\n */\nfunction WorkerPerformance() {}\n\n/**\n * @typedef {function(!PerformanceObserverEntryList, !PerformanceObserver): void}\n */\nvar PerformanceObserverCallback;\n\n/**\n * See:\n * https://w3c.github.io/performance-timeline/#the-performanceobserver-interface\n * @constructor\n * @param {!PerformanceObserverCallback} callback\n */\nfunction PerformanceObserver(callback) {}\n\n/**\n * @param {!PerformanceObserverInit} options\n */\nPerformanceObserver.prototype.observe = function(options) {};\n\n/** @return {void} */\nPerformanceObserver.prototype.disconnect = function() {};\n\n/**\n * See https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/PerformanceObserver/takeRecords\n * @return {!PerformanceObserverEntryList}\n */\nPerformanceObserver.prototype.takeRecords = function() {};\n\n/**\n * @record\n */\nfunction PerformanceObserverInit() {}\n\n/** @type {undefined|!Array} */\nPerformanceObserverInit.prototype.entryTypes;\n/** @type {undefined|string} */\nPerformanceObserverInit.prototype.type;\n/** @type {undefined|boolean} */\nPerformanceObserverInit.prototype.buffered;\n\n/**\n * @constructor\n */\nfunction PerformanceObserverEntryList() {}\n\n/** @return {!Array} */\nPerformanceObserverEntryList.prototype.getEntries = function() {};\n/**\n * @param {string} type\n * @return {!Array}\n */\nPerformanceObserverEntryList.prototype.getEntriesByName = function(type) {};\n/**\n * @param {string} name\n * @param {string=} opt_type\n * @return {!Array}\n */\nPerformanceObserverEntryList.prototype.getEntriesByType = function(\n name, opt_type) {};\n", - "externs/nonstandard_navigation_timing.js":'/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Nonstandard Definitions for W3C\'s Navigation Timing\n * specification.\n *\n * @externs\n */\n\n// Nonstandard. Only available in Blink.\n// Returns more granular results with the --enable-memory-info flag.\n/** @type {MemoryInfo} */ Performance.prototype.memory;\n\n/**\n * Clear out the buffer of performance timing events for webkit browsers.\n * @return {undefined}\n */\nPerformance.prototype.webkitClearResourceTimings = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n */\nPerformance.prototype.webkitNow = function() {};\n', - "externs/w3c_netinfo.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Externs for the Network Information API.\n * @externs\n */\n\n/**\n * @see http://wicg.github.io/netinfo/#-dfn-networkinformation-dfn-interface\n * @constructor\n */\nfunction NetworkInformation() {}\n\n/** @type {ConnectionType} */\nNetworkInformation.prototype.type;\n\n/** @type {EffectiveConnectionType} */\nNetworkInformation.prototype.effectiveType;\n\n/** @type {Megabit} */\nNetworkInformation.prototype.downlinkMax;\n\n/** @type {Megabit} */\nNetworkInformation.prototype.downlink;\n\n/** @type {Millisecond} */\nNetworkInformation.prototype.rtt;\n\n/** @type {?function(Event)} */\nNetworkInformation.prototype.onchange;\n\n/**\n * @typedef {number}\n */\nvar Megabit;\n\n/**\n * @typedef {number}\n */\nvar Millisecond;\n\n/**\n * Enum of:\n * 'bluetooth',\n * 'cellular',\n * 'ethernet',\n * 'mixed',\n * 'none',\n * 'other',\n * 'unknown',\n * 'wifi',\n * 'wimax'\n * @typedef {string}\n */\nvar ConnectionType;\n\n/**\n * Enum of:\n * '2g',\n * '3g',\n * '4g',\n * 'slow-2g'\n * @typedef {string}\n */\nvar EffectiveConnectionType;\n\n/** @type {!NetworkInformation} */\nNavigator.prototype.connection;\n", - "externs/w3c_permissions.js":"/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's Permissions API.\n * @see https://w3c.github.io/permissions/\n *\n * @externs\n */\n\n\n/**\n * @typedef {{name: PermissionName}}\n * @see https://w3c.github.io/permissions/#permission-descriptor\n */\nvar PermissionDescriptor;\n\n\n/**\n * @typedef {{name: PermissionName, userVisibleOnly: boolean}}\n * @see https://w3c.github.io/permissions/#push\n */\nvar PushPermissionDescriptor;\n\n\n/**\n * @typedef {{name: PermissionName, sysex: boolean}}\n * @see https://w3c.github.io/permissions/#midi\n */\nvar MidiPermissionDescriptor;\n\n\n/**\n * Set of possible values: 'geolocation', 'notifications', 'push', 'midi'.\n * @typedef {string}\n * @see https://w3c.github.io/permissions/#idl-def-PermissionName\n */\nvar PermissionName;\n\n\n/**\n * Set of possible values: 'granted', 'denied', 'prompt'.\n * @typedef {string}\n * @see https://w3c.github.io/permissions/#idl-def-PermissionState\n */\nvar PermissionState;\n\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see https://w3c.github.io/permissions/#status-of-a-permission\n */\nfunction PermissionStatus() {}\n\n/** @type {PermissionState} */\nPermissionStatus.prototype.state;\n\n/**\n * @type {PermissionState}\n * @deprecated, use PermissionStatus.state for newer clients\n */\nPermissionStatus.prototype.status;\n\n/** @type {?function(!Event)} */\nPermissionStatus.prototype.onchange;\n\n/** @override */\nPermissionStatus.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nPermissionStatus.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nPermissionStatus.prototype.dispatchEvent = function(evt) {};\n\n\n/**\n * @constructor\n * @see https://w3c.github.io/permissions/#idl-def-permissions\n */\nfunction Permissions() {}\n\n/**\n * @param {PermissionDescriptor} permission The permission to look up\n * @return {!Promise}\n * @see https://w3c.github.io/permissions/#dom-permissions-query\n */\nPermissions.prototype.query = function(permission) {};\n\n\n/** @type {Permissions} */\nNavigator.prototype.permissions;\n", - "externs/w3c_pointer_events.js":'/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Pointer Events specification.\n * Created from\n * http://www.w3.org/TR/pointerevents/\n *\n * @externs\n */\n\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/pointerevents/#the-touch-action-css-property\n */\nCSSProperties.prototype.touchAction;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/pointerevents/#widl-Navigator-pointerEnabled\n */\nNavigator.prototype.pointerEnabled;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/pointerevents/#widl-Navigator-maxTouchPoints\n */\nNavigator.prototype.maxTouchPoints;\n\n\n/**\n * @param {number} pointerId\n * @see https://www.w3.org/TR/pointerevents/#widl-Element-setPointerCapture-void-long-pointerId\n */\nElement.prototype.setPointerCapture = function(pointerId) {};\n\n/**\n * @param {number} pointerId\n * @see https://www.w3.org/TR/pointerevents/#widl-Element-releasePointerCapture-void-long-pointerId\n */\nElement.prototype.releasePointerCapture = function(pointerId) {};\n\n/**\n * @param {number} pointerId\n * @see https://www.w3.org/TR/pointerevents/#dom-element-haspointercapture\n * @return {boolean}\n */\nElement.prototype.hasPointerCapture = function(pointerId) {};\n\n\n/**\n * @record\n * @extends {MouseEventInit}\n * @see https://www.w3.org/TR/pointerevents/#idl-def-PointerEventInit\n */\nfunction PointerEventInit() {}\n\n/** @type {undefined|number} */\nPointerEventInit.prototype.pointerId;\n\n/** @type {undefined|number} */\nPointerEventInit.prototype.width;\n\n/** @type {undefined|number} */\nPointerEventInit.prototype.height;\n\n/** @type {undefined|number} */\nPointerEventInit.prototype.pressure;\n\n/** @type {undefined|number} */\nPointerEventInit.prototype.tiltX;\n\n/** @type {undefined|number} */\nPointerEventInit.prototype.tiltY;\n\n/** @type {undefined|string} */\nPointerEventInit.prototype.pointerType;\n\n/** @type {undefined|boolean} */\nPointerEventInit.prototype.isPrimary;\n\n/**\n * @constructor\n * @extends {MouseEvent}\n * @param {string} type\n * @param {PointerEventInit=} opt_eventInitDict\n * @see http://www.w3.org/TR/pointerevents/#pointerevent-interface\n */\nfunction PointerEvent(type, opt_eventInitDict) {}\n\n/** @type {number} */\nPointerEvent.prototype.pointerId;\n\n/** @type {number} */\nPointerEvent.prototype.width;\n\n/** @type {number} */\nPointerEvent.prototype.height;\n\n/** @type {number} */\nPointerEvent.prototype.pressure;\n\n/** @type {number} */\nPointerEvent.prototype.tiltX;\n\n/** @type {number} */\nPointerEvent.prototype.tiltY;\n\n/** @type {string} */\nPointerEvent.prototype.pointerType;\n\n/** @type {boolean} */\nPointerEvent.prototype.isPrimary;\n\n// Microsoft pointerType values\n/** @const {string} */\nPointerEvent.prototype.MSPOINTER_TYPE_TOUCH;\n\n/** @const {string} */\nPointerEvent.prototype.MSPOINTER_TYPE_PEN;\n\n/** @const {string} */\nPointerEvent.prototype.MSPOINTER_TYPE_MOUSE;\n\n/**\n * @see https://w3c.github.io/pointerevents/extension.html\n * @return {!Array}\n */\nPointerEvent.prototype.getCoalescedEvents = function() {};\n\n', --"externs/w3c_range.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s range specification.\n * This file depends on w3c_dom2.js.\n * The whole file has been fully type annotated.\n * Created from\n * http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n * @author stevey@google.com (Steve Yegge)\n */\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Interface\n */\nfunction Range() {}\n\n// constants on the constructor\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.START_TO_START;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.START_TO_END;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.END_TO_END;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.END_TO_START;\n\n// constants repeated on the prototype\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.START_TO_START;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.START_TO_END;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.END_TO_END;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.END_TO_START;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-startParent\n */\nRange.prototype.startContainer;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-startOffset\n */\nRange.prototype.startOffset;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-endParent\n */\nRange.prototype.endContainer;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-endOffset\n */\nRange.prototype.endOffset;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-collapsed\n */\nRange.prototype.collapsed;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-commonParent\n */\nRange.prototype.commonAncestorContainer;\n\n/**\n * @param {Node} refNode\n * @param {number} offset\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setStart\n */\nRange.prototype.setStart = function(refNode, offset) {};\n\n/**\n * @param {Node} refNode\n * @param {number} offset\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setEnd\n */\nRange.prototype.setEnd = function(refNode, offset) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-setStartBefore\n */\nRange.prototype.setStartBefore = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setStartAfter\n */\nRange.prototype.setStartAfter = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setEndBefore\n */\nRange.prototype.setEndBefore = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setEndAfter\n */\nRange.prototype.setEndAfter = function(refNode) {};\n\n/**\n * @param {boolean} toStart\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-collapse\n */\nRange.prototype.collapse = function(toStart) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-selectNode\n */\nRange.prototype.selectNode = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-selectNodeContents\n */\nRange.prototype.selectNodeContents = function(refNode) {};\n\n/**\n * @param {number} how\n * @param {Range} sourceRange\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-compareBoundaryPoints\n */\nRange.prototype.compareBoundaryPoints = function(how, sourceRange) {};\n\n/**\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-deleteContents\n */\nRange.prototype.deleteContents = function() {};\n\n/**\n * @return {DocumentFragment}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-extractContents\n */\nRange.prototype.extractContents = function() {};\n\n/**\n * @return {DocumentFragment}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-cloneContents\n */\nRange.prototype.cloneContents = function() {};\n\n/**\n * @param {Node} newNode\n * @return {DocumentFragment}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-insertNode\n */\nRange.prototype.insertNode = function(newNode) {};\n\n/**\n * @param {Node} newParent\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-surroundContents\n */\nRange.prototype.surroundContents = function(newParent) {};\n\n/**\n * @return {Range}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-clone\n */\nRange.prototype.cloneRange = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-detach\n */\nRange.prototype.detach = function() {};\n\n// Introduced in DOM Level 2:\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-DocumentRange-idl\n */\nfunction DocumentRange() {}\n\n/**\n * @return {Range}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-DocumentRange-method-createRange\n */\nDocumentRange.prototype.createRange = function() {};\n', -+"externs/w3c_range.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s range specification.\n * This file depends on w3c_dom2.js.\n * The whole file has been fully type annotated.\n * Created from\n * http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n * @author stevey@9oo91e.qjz9zk (Steve Yegge)\n */\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Interface\n */\nfunction Range() {}\n\n// constants on the constructor\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.START_TO_START;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.START_TO_END;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.END_TO_END;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.END_TO_START;\n\n// constants repeated on the prototype\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.START_TO_START;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.START_TO_END;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.END_TO_END;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.END_TO_START;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-startParent\n */\nRange.prototype.startContainer;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-startOffset\n */\nRange.prototype.startOffset;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-endParent\n */\nRange.prototype.endContainer;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-endOffset\n */\nRange.prototype.endOffset;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-collapsed\n */\nRange.prototype.collapsed;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-commonParent\n */\nRange.prototype.commonAncestorContainer;\n\n/**\n * @param {Node} refNode\n * @param {number} offset\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setStart\n */\nRange.prototype.setStart = function(refNode, offset) {};\n\n/**\n * @param {Node} refNode\n * @param {number} offset\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setEnd\n */\nRange.prototype.setEnd = function(refNode, offset) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-setStartBefore\n */\nRange.prototype.setStartBefore = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setStartAfter\n */\nRange.prototype.setStartAfter = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setEndBefore\n */\nRange.prototype.setEndBefore = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setEndAfter\n */\nRange.prototype.setEndAfter = function(refNode) {};\n\n/**\n * @param {boolean} toStart\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-collapse\n */\nRange.prototype.collapse = function(toStart) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-selectNode\n */\nRange.prototype.selectNode = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-selectNodeContents\n */\nRange.prototype.selectNodeContents = function(refNode) {};\n\n/**\n * @param {number} how\n * @param {Range} sourceRange\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-compareBoundaryPoints\n */\nRange.prototype.compareBoundaryPoints = function(how, sourceRange) {};\n\n/**\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-deleteContents\n */\nRange.prototype.deleteContents = function() {};\n\n/**\n * @return {DocumentFragment}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-extractContents\n */\nRange.prototype.extractContents = function() {};\n\n/**\n * @return {DocumentFragment}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-cloneContents\n */\nRange.prototype.cloneContents = function() {};\n\n/**\n * @param {Node} newNode\n * @return {DocumentFragment}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-insertNode\n */\nRange.prototype.insertNode = function(newNode) {};\n\n/**\n * @param {Node} newParent\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-surroundContents\n */\nRange.prototype.surroundContents = function(newParent) {};\n\n/**\n * @return {Range}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-clone\n */\nRange.prototype.cloneRange = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-detach\n */\nRange.prototype.detach = function() {};\n\n// Introduced in DOM Level 2:\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-DocumentRange-idl\n */\nfunction DocumentRange() {}\n\n/**\n * @return {Range}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-DocumentRange-method-createRange\n */\nDocumentRange.prototype.createRange = function() {};\n', - "externs/w3c_referrer_policy.js":'/*\n * Copyright 2018 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s referrer policy specification.\n * @see https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-delivery\n * @externs\n */\n\n/** @type {string} */\nHTMLAnchorElement.prototype.referrerPolicy;\n\n/** @type {string} */\nHTMLAreaElement.prototype.referrerPolicy;\n\n/** @type {string} */\nHTMLImageElement.prototype.referrerPolicy;\n\n/** @type {string} */\nHTMLIFrameElement.prototype.referrerPolicy;\n\n/** @type {string} */\nHTMLLinkElement.prototype.referrerPolicy;\n', --"externs/w3c_rtc.js":'/*\n * Copyright 2012 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for components of the WebRTC browser API.\n * @see https://www.w3.org/TR/webrtc/\n * @see https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-19\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API\n * @see https://www.w3.org/TR/mediacapture-streams/\n *\n * @externs\n * @author bemasc@google.com (Benjamin M. Schwartz)\n */\n\n/**\n * @typedef {string}\n * @see {https://www.w3.org/TR/mediacapture-streams/\n * #idl-def-MediaStreamTrackState}\n * In WebIDL this is an enum with values \'live\', \'mute\', and \'ended\',\n * but there is no mechanism in Closure for describing a specialization of\n * the string type.\n */\nvar MediaStreamTrackState;\n\n/**\n * @interface\n */\nfunction SourceInfo() {}\n\n/** @const {string} */\nSourceInfo.prototype.kind;\n\n/** @const {string} */\nSourceInfo.prototype.id;\n\n/** @const {?string} */\nSourceInfo.prototype.label;\n\n/** @const {boolean} */\nSourceInfo.prototype.facing;\n\n/**\n * @interface\n * @see https://w3c.github.io/mediacapture-image/#mediasettingsrange-section\n */\nfunction MediaSettingsRange() {}\n\n/**\n * @const {number}\n */\nMediaSettingsRange.prototype.max;\n\n/**\n * @const {number}\n */\nMediaSettingsRange.prototype.min;\n\n/**\n * @const {number}\n */\nMediaSettingsRange.prototype.step;\n\n/**\n * @interface\n * @see https://www.w3.org/TR/mediacapture-streams/#idl-def-MediaTrackCapabilities\n * @see https://w3c.github.io/mediacapture-image/#mediatrackcapabilities-section\n */\nfunction MediaTrackCapabilities() {}\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.width;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.height;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.aspectRatio;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.frameRate;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.facingMode;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.volume;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.sampleRate;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.sampleSize;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.echoCancellation;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.latency;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.channelCount;\n\n/** @type {string} */\nMediaTrackCapabilities.prototype.deviceId;\n\n/** @type {string} */\nMediaTrackCapabilities.prototype.groupId;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.whiteBalanceMode;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.exposureMode;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.focusMode;\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.exposureCompensation;\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.colorTemperature\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.iso\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.brightness\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.contrast\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.saturation\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.sharpness\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.zoom\n\n/** @type {boolean} */\nMediaTrackCapabilities.prototype.torch\n\n/**\n * @interface\n * @see https://www.w3.org/TR/mediacapture-streams/#media-track-settings\n * @see https://w3c.github.io/mediacapture-image/#mediatracksettings-section\n */\nfunction MediaTrackSettings() {}\n\n/** @type {number} */\nMediaTrackSettings.prototype.width;\n\n/** @type {number} */\nMediaTrackSettings.prototype.height;\n\n/** @type {number} */\nMediaTrackSettings.prototype.aspectRatio;\n\n/** @type {number} */\nMediaTrackSettings.prototype.frameRate;\n\n/** @type {string} */\nMediaTrackSettings.prototype.facingMode;\n\n/** @type {number} */\nMediaTrackSettings.prototype.volume;\n\n/** @type {number} */\nMediaTrackSettings.prototype.sampleRate;\n\n/** @type {number} */\nMediaTrackSettings.prototype.sampleSize;\n\n/** @type {boolean} */\nMediaTrackSettings.prototype.echoCancellation;\n\n/** @type {number} */\nMediaTrackSettings.prototype.latency;\n\n/** @type {number} */\nMediaTrackSettings.prototype.channelCount;\n\n/** @type {string} */\nMediaTrackSettings.prototype.deviceId;\n\n/** @type {string} */\nMediaTrackSettings.prototype.groupId;\n\n/** @type {string} */\nMediaTrackSettings.prototype.whiteBalanceMode;\n\n/** @type {string} */\nMediaTrackSettings.prototype.exposureMode;\n\n/** @type {string} */\nMediaTrackSettings.prototype.focusMode;\n\n/** @type {!Array<{x: number, y: number}>} */\nMediaTrackSettings.prototype.pointsOfInterest;\n\n/** @type {number} */\nMediaTrackSettings.prototype.exposureCompensation;\n\n/** @type {number} */\nMediaTrackSettings.prototype.colorTemperature\n\n/** @type {number} */\nMediaTrackSettings.prototype.iso\n\n/** @type {number} */\nMediaTrackSettings.prototype.brightness\n\n/** @type {number} */\nMediaTrackSettings.prototype.contrast\n\n/** @type {number} */\nMediaTrackSettings.prototype.saturation\n\n/** @type {number} */\nMediaTrackSettings.prototype.sharpness\n\n/** @type {number} */\nMediaTrackSettings.prototype.zoom\n\n/** @type {boolean} */\nMediaTrackSettings.prototype.torch\n\n\n/**\n * @interface\n * @see https://w3c.github.io/mediacapture-main/#media-track-supported-constraints\n */\nfunction MediaTrackSupportedConstraints() {}\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.width;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.height;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.aspectRatio;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.frameRate;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.facingMode;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.volume;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.sampleRate;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.sampleSize;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.echoCancellation;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.autoGainControl;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.noiseSuppression;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.latency;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.channelCount;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.deviceId;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.groupId;\n\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediastreamtrack\n */\nfunction MediaStreamTrack() {}\n\n/**\n * @const {string}\n */\nMediaStreamTrack.prototype.kind;\n\n/**\n * @const {string}\n */\nMediaStreamTrack.prototype.id;\n\n/**\n * @const {string}\n */\nMediaStreamTrack.prototype.label;\n\n/**\n * @type {boolean}\n */\nMediaStreamTrack.prototype.enabled;\n\n/**\n * @const {boolean}\n */\nMediaStreamTrack.prototype.muted;\n\n/**\n * @type {string}\n * @see https://crbug.com/653531\n * @see https://wicg.github.io/mst-content-hint/\n */\nMediaStreamTrack.prototype.contentHint;\n\n/**\n * @const {boolean}\n */\nMediaStreamTrack.prototype.remote;\n\n/**\n * @type {MediaStreamTrackState}\n * Read only.\n */\nMediaStreamTrack.prototype.readyState;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onmute;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onunmute;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onended;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onoverconstrained;\n\n/**\n * Applies the specified set of constraints to the track, if any specified; or\n * if no constraints are specified, removes all constraints from the track.\n *\n * @param {MediaTrackConstraints=} constraints Constraints to apply to the\n * track.\n * @return {!Promise} A |Promise| that is resolved when the constraints\n * have been applied, or rejected if there was an error applying the\n * constraints.\n */\nMediaStreamTrack.prototype.applyConstraints = function(constraints) {};\n\n/**\n * @return {!MediaStreamTrack}\n */\nMediaStreamTrack.prototype.clone = function() {};\n\n/** @return {void} */\nMediaStreamTrack.prototype.stop = function() {};\n\n/** @return {!MediaTrackCapabilities} */\nMediaStreamTrack.prototype.getCapabilities = function() {};\n\n/** @return {!MediaTrackConstraints} */\nMediaStreamTrack.prototype.getConstraints = function() {};\n\n/** @return {!MediaTrackSettings} */\nMediaStreamTrack.prototype.getSettings = function() {};\n\n/**\n * @typedef {{track: MediaStreamTrack}}\n */\nvar MediaStreamTrackEventInit;\n\n\n/**\n * @param {string} type\n * @param {!MediaStreamTrackEventInit} eventInitDict\n * @constructor\n * @extends {Event}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediastreamtrackevent\n */\nfunction MediaStreamTrackEvent(type, eventInitDict) {}\n\n/**\n * @const {!MediaStreamTrack}\n */\nMediaStreamTrackEvent.prototype.track;\n\n/**\n * @param {!MediaStream|!Array=} streamOrTracks\n * @constructor\n * @implements {EventTarget}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediastream\n */\nfunction MediaStream(streamOrTracks) {}\n\n/**\n * @override\n */\nMediaStream.prototype.addEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n */\nMediaStream.prototype.removeEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nMediaStream.prototype.dispatchEvent = function(evt) {};\n\n/**\n * TODO(bemasc): Remove this property.\n * @deprecated\n * @const {string}\n */\nMediaStream.prototype.label;\n\n/**\n * @const {string}\n */\nMediaStream.prototype.id;\n\n/**\n * @return {!Array}\n */\nMediaStream.prototype.getAudioTracks = function() {};\n\n/**\n * @return {!Array}\n */\nMediaStream.prototype.getVideoTracks = function() {};\n\n/**\n * @return {!Array}\n */\nMediaStream.prototype.getTracks = function() {};\n\n/**\n * @param {string} trackId\n * @return {MediaStreamTrack}\n */\nMediaStream.prototype.getTrackById = function(trackId) {};\n\n/**\n * @param {!MediaStreamTrack} track\n * @return {undefined}\n */\nMediaStream.prototype.addTrack = function(track) {};\n\n/**\n * @param {!MediaStreamTrack} track\n * @return {undefined}\n */\nMediaStream.prototype.removeTrack = function(track) {};\n\n/**\n * @return {!MediaStream}\n */\nMediaStream.prototype.clone = function() {};\n\n/**\n * @deprecated\n * @type {boolean}\n */\nMediaStream.prototype.ended;\n\n/**\n * @deprecated\n * @type {?function(!Event)}\n */\nMediaStream.prototype.onended;\n\n/**\n * @type {boolean}\n */\nMediaStream.prototype.active;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStream.prototype.onactive;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStream.prototype.oninactive;\n\n/**\n * @type {?function(!MediaStreamTrackEvent)}\n */\nMediaStream.prototype.onaddtrack;\n\n/**\n * @type {?function(!MediaStreamTrackEvent)}\n */\nMediaStream.prototype.onremovetrack;\n\n/**\n * @deprecated\n * TODO(bemasc): Remove this method once browsers have updated to\n * MediaStreamTrack.stop().\n * @return {undefined}\n */\nMediaStream.prototype.stop = function() {};\n\n/**\n * @typedef {{tone: string}}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcdtmftonechangeeventinit\n */\nvar RTCDTMFToneChangeEventInit;\n\n\n/**\n * @param {string} type\n * @param {!RTCDTMFToneChangeEventInit} eventInitDict\n * @constructor\n * @extends {Event}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcdtmftonechangeevent\n */\nfunction RTCDTMFToneChangeEvent(type, eventInitDict) {}\n\n/**\n * @const {string}\n */\nRTCDTMFToneChangeEvent.prototype.tone;\n\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#rtcdtmfsender\n */\nfunction RTCDTMFSender() {}\n\n/**\n * @param {string} tones\n * @param {number=} opt_duration\n * @param {number=} opt_interToneGap\n */\nRTCDTMFSender.prototype.insertDTMF =\n function(tones, opt_duration, opt_interToneGap) {};\n\n/**\n * @type {?boolean}\n */\nRTCDTMFSender.prototype.canInsertDTMF;\n\n/**\n * @type {?function(!RTCDTMFToneChangeEvent)}\n */\nRTCDTMFSender.prototype.ontonechange;\n\n/**\n * @const {string}\n */\nRTCDTMFSender.prototype.toneBuffer;\n\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#rtcrtpsender-interface\n */\nfunction RTCRtpSender() {}\n\n/**\n * @const {!RTCDTMFSender}\n */\nRTCRtpSender.prototype.dtmf;\n\n/**\n * @const {!MediaStreamTrack}\n */\nRTCRtpSender.prototype.track;\n\n/**\n * @param {?MediaStreamTrack} track\n * @return {!Promise}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpsender\n */\nRTCRtpSender.prototype.replaceTrack = function(track) {};\n\n\n/**\n * @return {!RTCRtpSendParameters}\n */\nRTCRtpSender.prototype.getParameters = function() {};\n\n\n/**\n * @param {!RTCRtpSendParameters} params\n * @return {!Promise}\n */\nRTCRtpSender.prototype.setParameters = function(params) {};\n\n\n/**\n * @record\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpsendparameters\n */\nfunction RTCRtpSendParameters() {}\n\n/**\n * @type {string|undefined}\n */\nRTCRtpSendParameters.prototype.transactionId;\n\n/**\n * @type {!Array}\n */\nRTCRtpSendParameters.prototype.encodings;\n\n/**\n * Possible string values are "maintain-framerate", "maintain-resolution", and\n * "balanced".\n * @type {string|undefined}\n */\nRTCRtpSendParameters.prototype.degradationPreference;\n\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpcontributingsource\n */\nfunction RTCRtpContributingSource() {}\n\n/**\n * @type {?number}\n */\nRTCRtpContributingSource.prototype.source;\n\n/**\n * @type {?Date|number}\n */\nRTCRtpContributingSource.prototype.timestamp;\n\n/**\n * @type {number|undefined}\n */\nRTCRtpContributingSource.prototype.audioLevel;\n\n/**\n * This is a relatively new field and browsers may not yet be compliant to the\n * spec.\n * @type {?number}\n * @see https://w3c.github.io/webrtc-pc/#dom-rtcrtpcontributingsource-rtptimestamp\n */\nRTCRtpContributingSource.prototype.rtpTimestamp;\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#rtcrtpreceiver-interface\n */\nfunction RTCRtpReceiver() {}\n\n/**\n * @const {!MediaStreamTrack}\n */\nRTCRtpReceiver.prototype.track;\n\n/**\n * @return {!Array}\n */\nRTCRtpReceiver.prototype.getContributingSources = function() {};\n\n/**\n * @return {!Array}\n */\nRTCRtpReceiver.prototype.getSynchronizationSources = function() {};\n\n/**\n * Chrome extension to control jitter buffer delay.\n * @see https://github.com/henbos/webrtc-timing/issues/1\n * @type {?number|undefined}\n */\nRTCRtpReceiver.prototype.jitterBufferDelayHint;\n\n/**\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtptransceiverinit\n * @record\n */\nfunction RTCRtpTransceiverInit() {}\n\n/**\n * The direction of the `RTCRtpTransceiver`. Defaults to "sendrecv".\n * @type {?RTCRtpTransceiverDirection|undefined}\n */\nRTCRtpTransceiverInit.prototype.direction;\n\n/**\n * The streams to add to the tranceiver\'s sender.\n * @type {?Array|undefined}\n */\nRTCRtpTransceiverInit.prototype.streams;\n\n/**\n * @type {?Array|undefined}\n */\nRTCRtpTransceiverInit.prototype.sendEncodings;\n\n/**\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpencodingparameters\n * @record\n */\nfunction RTCRtpEncodingParameters() {}\n\n/**\n * @type {?number|undefined}\n */\nRTCRtpEncodingParameters.prototype.codecPayloadType;\n\n/**\n * Possible values are "disabled" and "enabled".\n * @type {?string|undefined}\n */\nRTCRtpEncodingParameters.prototype.dtx;\n\n/**\n * @type {?boolean|undefined}\n */\nRTCRtpEncodingParameters.prototype.active;\n\n/**\n * Possible values are "very-low", "low" (default), "medium", and "high".\n * @type {?string|undefined}\n */\nRTCRtpEncodingParameters.prototype.priority;\n\n/**\n * Possible values are "very-low", "low" (default), "medium", and "high".\n * @see https://w3c.github.io/webrtc-dscp-exp/\n * @type {?string|undefined}\n */\nRTCRtpEncodingParameters.prototype.networkPriority;\n\n/**\n * @type {?number|undefined}\n */\nRTCRtpEncodingParameters.prototype.ptime;\n\n/**\n * @type {?number|undefined}\n */\nRTCRtpEncodingParameters.prototype.maxBitrate;\n\n/**\n * @type {?number|undefined}\n */\nRTCRtpEncodingParameters.prototype.maxFramerate;\n\n/**\n * @type {?string|number}\n */\nRTCRtpEncodingParameters.prototype.rid;\n\n/**\n * @type {?number|number}\n */\nRTCRtpEncodingParameters.prototype.scaleResolutionDownBy;\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#rtcrtptransceiver-interface\n */\nfunction RTCRtpTransceiver() {}\n\n/**\n * @const {?string}\n */\nRTCRtpTransceiver.prototype.mid;\n\n/**\n * @const {boolean}\n */\nRTCRtpTransceiver.prototype.stopped;\n\n/**\n * @type {!RTCRtpTransceiverDirection}\n */\nRTCRtpTransceiver.prototype.direction;\n\n/**\n * @const {?RTCRtpTransceiverDirection}\n */\nRTCRtpTransceiver.prototype.currentDirection;\n\n/**\n * @param {!RTCRtpTransceiverDirection} direction\n */\nRTCRtpTransceiver.prototype.setDirection = function(direction) {};\n\n/**\n */\nRTCRtpTransceiver.prototype.stop = function() {};\n\n/**\n * @const {?RTCRtpSender}\n */\nRTCRtpTransceiver.prototype.sender;\n\n/**\n * @const {?RTCRtpReceiver}\n */\nRTCRtpTransceiver.prototype.receiver;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-longrange\n * @record\n */\nfunction LongRange() {}\n\n/**\n * @type {number|undefined}\n */\nLongRange.prototype.max;\n\n/**\n * @type {number|undefined}\n */\nLongRange.prototype.min;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-doublerange\n * @record\n */\nfunction DoubleRange() {}\n\n/**\n * @type {number|undefined}\n */\nDoubleRange.prototype.max;\n\n/**\n * @type {number|undefined}\n */\nDoubleRange.prototype.min;\n\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constrainbooleanparameters\n * @record\n */\nfunction ConstrainBooleanParameters() {}\n\n/**\n * @type {boolean|undefined}\n */\nConstrainBooleanParameters.prototype.exact;\n\n/**\n * @type {boolean|undefined}\n */\nConstrainBooleanParameters.prototype.ideal;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constraindomstringparameters\n * @record\n */\nfunction ConstrainDOMStringParameters() {}\n\n/**\n * @type {string|Array|undefined}\n */\nConstrainDOMStringParameters.prototype.exact;\n\n/**\n * @type {string|Array|undefined}\n */\nConstrainDOMStringParameters.prototype.ideal;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constraindoublerange\n * @record\n * @extends {DoubleRange}\n */\nfunction ConstrainDoubleRange() {}\n\n/**\n * @type {number|undefined}\n */\nConstrainDoubleRange.prototype.exact;\n\n/**\n * @type {number|undefined}\n */\nConstrainDoubleRange.prototype.ideal;\n\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constrainlongrange\n * @record\n * @extends {LongRange}\n */\nfunction ConstrainLongRange() {}\n\n/**\n * @type {number|undefined}\n */\nConstrainLongRange.prototype.exact;\n\n/**\n * @type {number|undefined}\n */\nConstrainLongRange.prototype.ideal;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constrainboolean\n * @typedef {boolean|ConstrainBooleanParameters}\n */\nvar ConstrainBoolean;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constraindomString\n * @typedef {string|Array|ConstrainDOMStringParameters}\n */\nvar ConstrainDOMString;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constraindouble\n * @typedef {number|ConstrainDoubleRange}\n */\nvar ConstrainDouble;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constrainlong\n * @typedef {number|ConstrainLongRange}\n */\nvar ConstrainLong;\n\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-mediatrackconstraintset\n * @record\n * @private\n */\nfunction MediaTrackConstraintSet() {}\n\n/**\n * @type {ConstrainBoolean|undefined}\n */\nMediaTrackConstraintSet.prototype.autoGainControl;\n\n/**\n * @type {ConstrainDouble|undefined}\n */\nMediaTrackConstraintSet.prototype.aspectRatio;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.channelCount;\n\n/**\n * @type {ConstrainDOMString|undefined}\n */\nMediaTrackConstraintSet.prototype.deviceId;\n\n/**\n * @type {ConstrainBoolean|undefined}\n */\nMediaTrackConstraintSet.prototype.echoCancellation;\n\n/**\n * @type {ConstrainDOMString|undefined}\n */\nMediaTrackConstraintSet.prototype.facingMode;\n\n/**\n * @type {ConstrainDouble|undefined}\n */\nMediaTrackConstraintSet.prototype.frameRate;\n\n/**\n * @type {ConstrainDOMString|undefined}\n */\nMediaTrackConstraintSet.prototype.groupId;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.height;\n\n/**\n * @type {ConstrainDouble|undefined}\n */\nMediaTrackConstraintSet.prototype.latency;\n\n/**\n * @type {ConstrainBoolean|undefined}\n */\nMediaTrackConstraintSet.prototype.noiseSuppression;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.sampleRate;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.sampleSize;\n\n/**\n * @type {ConstrainDouble|undefined}\n */\nMediaTrackConstraintSet.prototype.volume;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.width;\n\n\n/**\n * @record\n * @extends {MediaTrackConstraintSet}\n */\nfunction MediaTrackConstraints() {}\n\n/**\n * @type {Array|undefined}\n */\nMediaTrackConstraints.prototype.advanced;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#media-track-constraints\n * @record\n */\nfunction MediaStreamConstraints() {}\n\n/**\n * @type {boolean|MediaTrackConstraints|undefined}\n */\nMediaStreamConstraints.prototype.audio;\n\n/**\n * @type {boolean|MediaTrackConstraints|undefined}\n */\nMediaStreamConstraints.prototype.video;\n\n/**\n * @see {http://dev.w3.org/2011/webrtc/editor/getusermedia.html#\n * navigatorusermediaerror-and-navigatorusermediaerrorcallback}\n * @interface\n */\nfunction NavigatorUserMediaError() {}\n\n/**\n * @const {number}\n * @deprecated Removed from the standard and some browsers.\n */\nNavigatorUserMediaError.prototype.PERMISSION_DENIED;\n\n/**\n * @type {number}\n * @deprecated Removed from the standard and some browsers.\n * Read only.\n */\nNavigatorUserMediaError.prototype.code;\n\n/**\n * @type {string}\n * Read only.\n */\nNavigatorUserMediaError.prototype.name;\n\n/**\n * @type {?string}\n * Read only.\n */\nNavigatorUserMediaError.prototype.message;\n\n/**\n * @type {?string}\n * Read only.\n */\nNavigatorUserMediaError.prototype.constraintName;\n\n/**\n * @param {string} type\n * @param {!Object} eventInitDict\n * @constructor\n */\nfunction MediaStreamEvent(type, eventInitDict) {}\n\n/**\n * @const {?MediaStream}\n */\nMediaStreamEvent.prototype.stream;\n\n/**\n * @record\n * @see https://www.w3.org/TR/mediastream-recording/#dictdef-mediarecorderoptions\n */\nfunction MediaRecorderOptions() {}\n\n/** @type {(string|undefined)} */\nMediaRecorderOptions.prototype.mimeType\n\n/** @type {(number|undefined)} */\nMediaRecorderOptions.prototype.audioBitsPerSecond\n\n/** @type {(number|undefined)} */\nMediaRecorderOptions.prototype.videoBitsPerSecond\n\n/** @type {(number|undefined)} */\nMediaRecorderOptions.prototype.bitsPerSecond\n\n/**\n * @see https://www.w3.org/TR/mediastream-recording/#mediarecorder-api\n * @param {!MediaStream} stream\n * @param {MediaRecorderOptions=} options\n * @implements {EventTarget}\n * @constructor\n */\nfunction MediaRecorder(stream, options) {}\n\n/**\n * @override\n */\nMediaRecorder.prototype.addEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n */\nMediaRecorder.prototype.removeEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nMediaRecorder.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {!MediaStream}\n */\nMediaRecorder.prototype.stream;\n\n/**\n * @type {string}\n */\nMediaRecorder.prototype.mimeType;\n\n/**\n * @type {string}\n */\nMediaRecorder.prototype.state;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onstart;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onstop;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.ondataavailable;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onpause;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onresume;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onerror;\n\n/**\n * @type {number}\n */\nMediaRecorder.prototype.videoBitsPerSecond;\n\n/**\n * @type {number}\n */\nMediaRecorder.prototype.audioBitsPerSecond;\n\n/**\n * @param {number=} timeslice\n */\nMediaRecorder.prototype.start = function(timeslice) {};\n\n/** @return {void} */\nMediaRecorder.prototype.stop = function() {};\n\n/** @return {void} */\nMediaRecorder.prototype.pause = function() {};\n\n/** @return {void} */\nMediaRecorder.prototype.resume = function() {};\n\n/** @return {void} */\nMediaRecorder.prototype.requestData = function() {};\n\n/**\n * @param {string} type\n * @return {boolean}\n */\nMediaRecorder.isTypeSupported = function(type) {};\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {{data: !Blob, timecode: (number|undefined)}} eventInitDict\n * @see https://www.w3.org/TR/mediastream-recording/#blobevent-section\n */\nfunction BlobEvent(type, eventInitDict) {}\n\n/** @type {!Blob} */\nBlobEvent.prototype.data;\n\n/** @type {number} */\nBlobEvent.prototype.timecode;\n\n/**\n * @interface\n * @see https://w3c.github.io/mediacapture-image/##photosettings-section\n */\nfunction PhotoSettings() {}\n\n/**\n * @type {string}\n */\nPhotoSettings.prototype.fillLightMode;\n\n/**\n * @type {number}\n */\nPhotoSettings.prototype.imageHeight;\n\n/**\n * @type {number}\n */\nPhotoSettings.prototype.imageWidth;\n\n/**\n * @type {boolean}\n */\nPhotoSettings.prototype.redEyeReduction;\n\n/**\n * @interface\n * @see https://w3c.github.io/mediacapture-image/##photocapabilities-section\n */\nfunction PhotoCapabilities() {}\n\n/**\n * @const {string}\n */\nPhotoCapabilities.prototype.redEyeReduction;\n\n/**\n * @const {!MediaSettingsRange}\n */\nPhotoCapabilities.prototype.imageHeight;\n\n/**\n * @const {!MediaSettingsRange}\n */\nPhotoCapabilities.prototype.imageWidth;\n\n/**\n * @const {!Array}\n */\nPhotoCapabilities.prototype.fillLightMode;\n\n/**\n * @see https://w3c.github.io/mediacapture-image/\n * @param {!MediaStreamTrack} videoTrack\n * @constructor\n */\nfunction ImageCapture(videoTrack) {}\n\n/**\n * @param {!PhotoSettings=} photoSettings\n * @return {!Promise}\n */\nImageCapture.prototype.takePhoto = function(photoSettings) {};\n\n/**\n * @return {!Promise}\n */\nImageCapture.prototype.getPhotoCapabilities = function() {};\n\n/**\n * @return {!Promise}\n */\nImageCapture.prototype.grabFrame = function() {};\n\n/**\n * @const {!MediaStreamTrack}\n */\nImageCapture.prototype.track;\n\n/**\n * @see https://www.w3.org/TR/webrtc/#rtctrackevent\n * @param {string} type\n * @param {!Object} eventInitDict\n * @constructor\n */\nfunction RTCTrackEvent(type, eventInitDict) {}\n\n/**\n * @const {?RTCRtpReceiver}\n */\nRTCTrackEvent.prototype.receiver;\n\n/**\n * @const {?MediaStreamTrack}\n */\nRTCTrackEvent.prototype.track;\n\n/**\n * @const {?Array}\n */\nRTCTrackEvent.prototype.streams;\n\n/**\n * @const {?RTCRtpTransceiver}\n */\nRTCTrackEvent.prototype.transceiver;\n\n/**\n * @typedef {string}\n * @see https://www.w3.org/TR/mediacapture-streams/#idl-def-MediaDeviceKind\n * In WebIDL this is an enum with values \'audioinput\', \'audiooutput\', and\n * \'videoinput\', but there is no mechanism in Closure for describing a\n * specialization of the string type.\n */\nvar MediaDeviceKind;\n\n/**\n * Possible values are "sendrecv", "sendonly", "recvonly", and "inactive".\n * @typedef {string}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtptransceiverdirection\n */\nvar RTCRtpTransceiverDirection;\n\n/**\n * @interface\n */\nfunction MediaDeviceInfo() {}\n\n/** @const {string} */\nMediaDeviceInfo.prototype.deviceId;\n\n/** @const {!MediaDeviceKind} */\nMediaDeviceInfo.prototype.kind;\n\n/** @const {string} */\nMediaDeviceInfo.prototype.label;\n\n/** @const {string} */\nMediaDeviceInfo.prototype.groupId;\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediadevices\n */\nfunction MediaDevices() {}\n\n/**\n * @return {!Promise>}\n */\nMediaDevices.prototype.enumerateDevices = function() {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia\n * @param {!MediaStreamConstraints} constraints\n * @return {!Promise}\n */\nMediaDevices.prototype.getUserMedia = function(constraints) {}\n\n/**\n * @see https://w3c.github.io/mediacapture-screen-share/#dom-mediadevices-getdisplaymedia\n * @param {!MediaStreamConstraints=} constraints\n * @return {!Promise}\n */\nMediaDevices.prototype.getDisplayMedia = function(constraints) {}\n\n/**\n * @see https://w3c.github.io/mediacapture-main/#dom-mediadevices-getsupportedconstraints\n * @return {!MediaTrackSupportedConstraints}\n */\nMediaDevices.prototype.getSupportedConstraints = function() {}\n\n/** @const {!MediaDevices} */\nNavigator.prototype.mediaDevices;\n\n/**\n * @typedef {string}\n * @see https://www.w3.org/TR/webrtc/#rtcsdptype\n * In WebIDL this is an enum with values \'offer\', \'pranswer\', and \'answer\',\n * but there is no mechanism in Closure for describing a specialization of\n * the string type.\n */\nvar RTCSdpType;\n\n/**\n * @param {!Object=} descriptionInitDict The RTCSessionDescriptionInit\n * dictionary. This optional argument may have type\n * {type:RTCSdpType, sdp:string}, but neither of these keys are required to be\n * present, and other keys are ignored, so the closest Closure type is Object.\n * @constructor\n * @see https://www.w3.org/TR/webrtc/#rtcsessiondescription-class\n */\nfunction RTCSessionDescription(descriptionInitDict) {}\n\n/**\n * @type {?RTCSdpType}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcsessiondescription-type\n */\nRTCSessionDescription.prototype.type;\n\n/**\n * @type {?string}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcsessiondescription-sdp\n */\nRTCSessionDescription.prototype.sdp;\n\n/**\n * TODO(bemasc): Remove this definition once it is removed from the browser.\n * @param {string} label The label index (audio/video/data -> 0,1,2)\n * @param {string} sdp The ICE candidate in SDP text form\n * @constructor\n */\nfunction IceCandidate(label, sdp) {}\n\n/**\n * @return {string}\n */\nIceCandidate.prototype.toSdp = function() {};\n\n/**\n * @type {?string}\n */\nIceCandidate.prototype.label;\n\n/** @record */\nfunction RTCIceCandidateInit() {};\n\n/** @type {?string|undefined} */\nRTCIceCandidateInit.prototype.candidate;\n\n/** @type {(?string|undefined)} */\nRTCIceCandidateInit.prototype.sdpMid;\n\n/** @type {(?number|undefined)} */\nRTCIceCandidateInit.prototype.sdpMLineIndex;\n\n/** @type {(string|undefined)} */\nRTCIceCandidateInit.prototype.usernameFragment;\n\n/**\n * @param {!RTCIceCandidateInit=} candidateInitDict The RTCIceCandidateInit dictionary.\n * @constructor\n * @see https://www.w3.org/TR/webrtc/#rtcicecandidate-interface\n */\nfunction RTCIceCandidate(candidateInitDict) {}\n\n/**\n * @type {?string}\n */\nRTCIceCandidate.prototype.candidate;\n\n/**\n * @type {?string}\n */\nRTCIceCandidate.prototype.sdpMid;\n\n/**\n * @type {?number}\n */\nRTCIceCandidate.prototype.sdpMLineIndex;\n\n/**\n * @typedef {{urls: string}|{urls: !Array}}\n * @private\n * @see https://www.w3.org/TR/webrtc/#rtciceserver-dictionary\n * This dictionary type also has an optional key {credential: ?string}.\n */\nvar RTCIceServerRecord_;\n\n/**\n * @interface\n * @private\n */\nfunction RTCIceServerInterface_() {}\n\n/**\n * @type {string|!Array}\n */\nRTCIceServerInterface_.prototype.urls;\n\n/**\n * @type {?string}\n */\nRTCIceServerInterface_.prototype.username;\n\n/**\n * @type {?string}\n */\nRTCIceServerInterface_.prototype.credential;\n\n/**\n * This type, and several below it, are constructed as unions between records\n *\n * @typedef {RTCIceServerRecord_|RTCIceServerInterface_}\n * @private\n */\nvar RTCIceServer;\n\n/**\n * @typedef {{\n * iceServers: !Array,\n * sdpSemantics: (string|undefined)\n * }}\n * @private\n */\nvar RTCConfigurationRecord_;\n\n/**\n * @interface\n * @private\n */\nfunction RTCConfigurationInterface_() {}\n\n/**\n * @type {!Array}\n */\nRTCConfigurationInterface_.prototype.iceServers;\n\n/**\n * Allows specifying the SDP semantics. Valid values are "plan-b" and\n * "unified-plan".\n *\n * @see {@link https://webrtc.org/web-apis/chrome/unified-plan/}\n * @type {string|undefined}\n */\nRTCConfigurationInterface_.prototype.sdpSemantics;\n\n/**\n * @typedef {RTCConfigurationRecord_|RTCConfigurationInterface_}\n */\nvar RTCConfiguration;\n\n/**\n * @typedef {function(!RTCSessionDescription)}\n */\nvar RTCSessionDescriptionCallback;\n\n/**\n * @typedef {function(string)}\n */\nvar RTCPeerConnectionErrorCallback;\n\n/**\n * @typedef {function()}\n */\nvar RTCVoidCallback;\n\n/**\n * @typedef {string}\n */\nvar RTCSignalingState;\n\n/**\n * @typedef {string}\n */\nvar RTCIceConnectionState;\n\n/**\n * @typedef {string}\n */\nvar RTCIceGatheringState;\n\n/**\n * @param {string} type\n * @param {!Object} eventInitDict\n * @constructor\n */\nfunction RTCPeerConnectionIceEvent(type, eventInitDict) {}\n\n/**\n * @const {RTCIceCandidate}\n */\nRTCPeerConnectionIceEvent.prototype.candidate;\n\n// Note: The specification of RTCStats types is still under development.\n// Declarations here will be updated and removed to follow the development of\n// modern browsers, breaking compatibility with older versions as they become\n// obsolete.\n/**\n * @see https://www.w3.org/TR/webrtc/#dom-rtcstats\n * @interface\n */\nfunction RTCStats() {}\n\n/**\n * @const {?Date|number}\n */\nRTCStats.prototype.timestamp;\n\n/**\n * https://www.w3.org/TR/webrtc-stats/#rtcstatstype-str*\n * @const {string}\n */\nRTCStats.prototype.type;\n\n/**\n * @const {string}\n */\nRTCStats.prototype.id;\n\n/**\n * @see https://www.w3.org/TR/webrtc-stats/#dom-rtcrtpstreamstats\n * @interface\n * @extends {RTCStats}\n */\nfunction RTCStreamStats() {}\n\n/** @const {number} */\nRTCStreamStats.prototype.ssrc;\n\n/** @const {string} */\nRTCStreamStats.prototype.kind;\n\n/** @const {string} */\nRTCStreamStats.prototype.transportId;\n\n/** @const {string} */\nRTCStreamStats.prototype.codecId;\n\n/** @const {number} */\nRTCStreamStats.prototype.firCount;\n\n/** @const {number} */\nRTCStreamStats.prototype.pliCount;\n\n/** @const {number} */\nRTCStreamStats.prototype.nackCount;\n\n/** @const {number} */\nRTCStreamStats.prototype.sliCount;\n\n/** @const {number} */\nRTCStreamStats.prototype.qpSum;\n\n/**\n * @interface\n */\nfunction RTCStatsReport() {}\n\n/**\n * @const {?Date|number}\n */\nRTCStatsReport.prototype.timestamp;\n\n/**\n * @return {!Array}\n */\nRTCStatsReport.prototype.names = function() {};\n\n/**\n * @param {string} name\n * @return {string}\n */\nRTCStatsReport.prototype.stat = function(name) {};\n\n/**\n * @deprecated\n * @const {RTCStatsReport}\n */\nRTCStatsReport.prototype.local;\n\n/**\n * @deprecated\n * @const {RTCStatsReport}\n */\nRTCStatsReport.prototype.remote;\n\n/**\n * @const {string}\n */\nRTCStatsReport.prototype.type;\n\n/**\n * @const {string}\n */\nRTCStatsReport.prototype.id;\n\n// Note: Below are Map like methods supported by WebRTC statistics\n// specification-compliant RTCStatsReport. Currently only implemented by\n// Mozilla.\n// See https://www.w3.org/TR/webrtc/#rtcstatsreport-object for definition.\n/**\n * @param {function(this:SCOPE, !RTCStats, string, MAP)} callback\n * @param {SCOPE=} opt_thisObj The value of "this" inside callback function.\n * @this {MAP}\n * @template MAP,SCOPE\n */\nRTCStatsReport.prototype.forEach = function(callback, opt_thisObj) {};\n\n/**\n * @param {string} key\n * @return {!IteratorIterable>}\n */\nRTCStatsReport.prototype.entries = function(key) {};\n\n/**\n * @param {string} key\n * @return {!RTCStats}\n */\nRTCStatsReport.prototype.get = function(key) {};\n\n/**\n * @return {!IteratorIterable}\n */\nRTCStatsReport.prototype.keys = function() {};\n\n/**\n * @return {!IteratorIterable}\n */\nRTCStatsReport.prototype.values = function() {};\n\n/**\n * @param {string} key\n * @return {boolean}\n */\nRTCStatsReport.prototype.has = function(key) {};\n\n/**\n * @const {number}\n */\nRTCStatsReport.prototype.size;\n\n/**\n * @return {!Iterator>}\n */\nRTCStatsReport.prototype[Symbol.iterator] = function() {};\n\n\n/**\n * TODO(bemasc): Remove this type once it is no longer in use. It has already\n * been removed from the specification.\n * @typedef {RTCStatsReport}\n * @deprecated\n */\nvar RTCStatsElement;\n\n/**\n * @interface\n */\nfunction RTCStatsResponse() {}\n\n/**\n * @return {!Array}\n */\nRTCStatsResponse.prototype.result = function() {};\n\n/**\n * @typedef {function(!RTCStatsResponse, MediaStreamTrack=)}\n */\nvar RTCStatsCallback;\n\n/**\n * This type is not yet standardized, so the properties here only represent\n * the current capabilities of libjingle (and hence Chromium).\n * TODO(bemasc): Add a link to the relevant standard once MediaConstraint has a\n * standard definition.\n *\n * @interface\n * @private\n */\nfunction MediaConstraintSetInterface_() {}\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.OfferToReceiveAudio;\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.OfferToReceiveVideo;\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.DtlsSrtpKeyAgreement;\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.RtpDataChannels;\n\n/**\n * TODO(bemasc): Make this type public once it is defined in a standard.\n *\n * @typedef {Object|MediaConstraintSetInterface_}\n * @private\n */\nvar MediaConstraintSet_;\n\n/**\n * @interface\n * @private\n */\nfunction MediaConstraintsInterface_() {}\n\n/**\n * @type {?MediaConstraintSet_}\n */\nMediaConstraintsInterface_.prototype.mandatory;\n\n/**\n * @type {?Array}\n */\nMediaConstraintsInterface_.prototype.optional;\n\n/**\n * This type is used extensively in\n * {@see http://dev.w3.org/2011/webrtc/editor/webrtc.html} but is not yet\n * defined.\n *\n * @typedef {Object|MediaConstraintsInterface_}\n */\nvar MediaConstraints;\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://w3c.github.io/webrtc-pc/#dom-rtcdatachannel\n */\nfunction RTCDataChannel() {}\n\n/**\n * @const {string}\n */\nRTCDataChannel.prototype.label;\n\n/**\n * @const {boolean}\n */\nRTCDataChannel.prototype.reliable;\n\n/**\n * An enumerated string type (RTCDataChannelState) with values:\n * "connecting", "open", "closing", and "closed".\n * @type {string}\n * Read only.\n */\nRTCDataChannel.prototype.readyState;\n\n/**\n * @type {number}\n * Read only.\n */\nRTCDataChannel.prototype.bufferedAmount;\n\n/**\n * @type {number}\n */\nRTCDataChannel.prototype.bufferedAmountLowThreshold;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onopen;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onerror;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onclose;\n\nRTCDataChannel.prototype.close = function() {};\n\n/**\n * @type {?function(!MessageEvent<*>)}\n */\nRTCDataChannel.prototype.onmessage;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onbufferedamountlow;\n\n/**\n * @type {string}\n */\nRTCDataChannel.prototype.binaryType;\n\n/**\n * @param {string|!Blob|!ArrayBuffer|!ArrayBufferView} data\n * @return {undefined}\n */\nRTCDataChannel.prototype.send = function(data) {};\n\n/**\n * @constructor\n * @extends {Event}\n * @private\n */\nfunction RTCDataChannelEvent() {}\n\n/**\n * @type {!RTCDataChannel}\n * Read only.\n */\nRTCDataChannelEvent.prototype.channel;\n\n/**\n * @typedef {{reliable: boolean}}\n */\nvar RTCDataChannelInitRecord_;\n\n/**\n * @interface\n * @private\n */\nfunction RTCDataChannelInitInterface_() {}\n\n/**\n * @type {boolean}\n */\nRTCDataChannelInitInterface_.prototype.reliable;\n\n/**\n * @typedef {{\n * ordered: (boolean|undefined),\n * maxPacketLifeTime: (number|undefined),\n * maxRetransmits: (number|undefined),\n * protocol: (string|undefined),\n * negotiated: (boolean|undefined),\n * id: (number|undefined),\n * priority: (string|undefined),\n * }}\n * see https://www.w3.org/TR/webrtc/#dom-rtcdatachannelinit for documentation\n * Type inconsistencies due to Closure limitations:\n * maxPacketLifeTime should be UnsignedShort\n * maxRetransmits should be UnsignedShort\n * protocol should be USVString\n * id should be UnsignedShort\n * In WebIDL priority is an enum with values \'very-low\', \'low\',\n * \'medium\' and \'high\', but there is no mechanism in Closure for describing\n * a specialization of the string type.\n */\nvar RTCDataChannelInitDictionary_;\n\n/**\n * @typedef {RTCDataChannelInitInterface_|RTCDataChannelInitRecord_|RTCDataChannelInitDictionary_}\n */\nvar RTCDataChannelInit;\n\n/**\n * @typedef {{expires: number}}\n */\nvar RTCCertificate;\n\n/**\n * @param {RTCConfiguration} configuration\n * @param {!MediaConstraints=} constraints\n * @constructor\n * @implements {EventTarget}\n * @see https://www.w3.org/TR/webrtc/#interface-definition\n */\nfunction RTCPeerConnection(configuration, constraints) {}\n\n/**\n * @param {Object} keygenAlgorithm\n * @return {Promise}\n */\nRTCPeerConnection.generateCertificate = function (keygenAlgorithm) {};\n\n/**\n * @override\n */\nRTCPeerConnection.prototype.addEventListener = function(\n type, listener, opt_useCapture) {};\n\n/**\n * @override\n */\nRTCPeerConnection.prototype.removeEventListener = function(\n type, listener, opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nRTCPeerConnection.prototype.dispatchEvent = function(evt) {};\n\n\n// NB: Until closure annotations support overloading, many of the following\n// functions take odd unions of parameter types. This is to support the various\n// api differences between browsers. Generally, returning a promise means you\n// don\'t take callback function parameters and draw any further parameters\n// forward, and vice versa.\n\n/**\n * @param {(!RTCSessionDescriptionCallback|!MediaConstraints)=}\n * successCallbackOrConstraints\n * @param {!RTCPeerConnectionErrorCallback=} errorCallback\n * @param {!MediaConstraints=} constraints\n * @return {!Promise|undefined}\n */\nRTCPeerConnection.prototype.createOffer = function(successCallbackOrConstraints,\n errorCallback, constraints) {};\n\n/**\n * @param {(!RTCSessionDescriptionCallback|!MediaConstraints)=}\n * successCallbackOrConstraints\n * @param {!RTCPeerConnectionErrorCallback=} errorCallback\n * @param {!MediaConstraints=} constraints\n * @return {!Promise|undefined}\n */\nRTCPeerConnection.prototype.createAnswer =\n function(successCallbackOrConstraints, errorCallback, constraints) {};\n\n/**\n * @param {!RTCSessionDescription} description\n * @param {!RTCVoidCallback=} successCallback\n * @param {!RTCPeerConnectionErrorCallback=} errorCallback\n * @return {!Promise}\n */\nRTCPeerConnection.prototype.setLocalDescription = function(description,\n successCallback, errorCallback) {};\n\n/**\n * @param {!RTCSessionDescription} description\n * @param {!RTCVoidCallback=} successCallback\n * @param {!RTCPeerConnectionErrorCallback=} errorCallback\n * @return {!Promise}\n */\nRTCPeerConnection.prototype.setRemoteDescription = function(description,\n successCallback, errorCallback) {};\n\n/**\n * @type {?RTCSessionDescription}\n * Read only.\n */\nRTCPeerConnection.prototype.localDescription;\n\n/**\n * @type {?RTCSessionDescription}\n * Read only.\n */\nRTCPeerConnection.prototype.remoteDescription;\n\n/**\n * @type {RTCSignalingState}\n * Read only.\n */\nRTCPeerConnection.prototype.signalingState;\n\n/**\n * @param {?RTCConfiguration=} configuration\n * @param {?MediaConstraints=} constraints\n * @return {undefined}\n */\nRTCPeerConnection.prototype.updateIce = function(configuration, constraints) {};\n\n/**\n * Void in Chrome for now, a promise that you can then/catch in Firefox.\n * @param {!RTCIceCandidate} candidate\n * @param {!RTCVoidCallback=} successCallback\n * @param {function(DOMException)=} errorCallback\n * @return {!Promise|undefined}\n */\nRTCPeerConnection.prototype.addIceCandidate = function(candidate, successCallback, errorCallback) {};\n\n/**\n * @type {!RTCIceGatheringState}\n * Read only.\n */\nRTCPeerConnection.prototype.iceGatheringState;\n\n/**\n * @type {!RTCIceConnectionState}\n * Read only.\n */\nRTCPeerConnection.prototype.iceConnectionState;\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getLocalStreams = function() {};\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getRemoteStreams = function() {};\n\n/**\n * @param {string} streamId\n * @return {MediaStream}\n */\nRTCPeerConnection.prototype.getStreamById = function(streamId) {};\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getSenders = function() {};\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getReceivers = function() {};\n\n/**\n * @param {?string} label\n * @param {RTCDataChannelInit=} dataChannelDict\n * @return {!RTCDataChannel}\n */\nRTCPeerConnection.prototype.createDataChannel =\n function(label, dataChannelDict) {};\n/**\n * @param {!MediaStream} stream\n * @param {!MediaConstraints=} constraints\n * @return {undefined}\n */\nRTCPeerConnection.prototype.addStream = function(stream, constraints) {};\n\n/**\n * @param {!MediaStream} stream\n * @return {undefined}\n */\nRTCPeerConnection.prototype.removeStream = function(stream) {};\n\n/**\n * @param {!MediaStreamTrack} track\n * @param {!MediaStream} stream\n * @param {...MediaStream} var_args Additional streams.\n * @return {!RTCRtpSender}\n */\nRTCPeerConnection.prototype.addTrack = function(track, stream, var_args) {};\n\n/**\n * @param {!MediaStreamTrack|string} trackOrKind\n * @param {?RTCRtpTransceiverInit=} init\n * @return {!RTCRtpTransceiver}\n */\nRTCPeerConnection.prototype.addTransceiver = function(trackOrKind, init) {};\n\n/**\n * Returns the list of transceivers are currently attached to this peer.\n *\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getTransceivers = function() {};\n\n/**\n * @return {!RTCConfiguration}\n */\nRTCPeerConnection.prototype.getConfiguration = function() {};\n\n/**\n * @param {!RTCConfiguration} configuration\n * @return {undefined}\n */\nRTCPeerConnection.prototype.setConfiguration = function(configuration) {};\n\n/**\n * @param {!RTCRtpSender} sender\n * @return {undefined}\n */\nRTCPeerConnection.prototype.removeTrack = function(sender) {};\n\n// TODO(bemasc): Add identity provider stuff once implementations exist\n\n// TODO(rjogrady): Per w3c spec, getStats() should always return a Promise.\n// Remove RTCStatsReport from the return value once Firefox supports that.\n/**\n * Firefox\' getstats is synchronous and returns a much simpler\n * {!RTCStatsReport} Map-like object.\n * @param {!RTCStatsCallback=} successCallback\n * @param {MediaStreamTrack=} selector\n * @return {undefined|!RTCStatsReport|!Promise}\n */\nRTCPeerConnection.prototype.getStats = function(successCallback, selector) {};\n\nRTCPeerConnection.prototype.close = function() {};\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.onnegotiationneeded;\n\n/**\n * @type {?function(!RTCPeerConnectionIceEvent)}\n */\nRTCPeerConnection.prototype.onicecandidate;\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.onicegatheringstatechange;\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.onsignalingstatechange;\n\n/**\n * @type {?function(!MediaStreamEvent)}\n */\nRTCPeerConnection.prototype.onaddstream;\n\n/**\n * @type {?function(!RTCTrackEvent)}\n */\nRTCPeerConnection.prototype.ontrack;\n\n/**\n * @type {?function(!MediaStreamEvent)}\n */\nRTCPeerConnection.prototype.onremovestream;\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.oniceconnectionstatechange;\n\n/**\n * @type {?function(!RTCDataChannelEvent)}\n */\nRTCPeerConnection.prototype.ondatachannel;\n', -+"externs/w3c_rtc.js":'/*\n * Copyright 2012 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for components of the WebRTC browser API.\n * @see https://www.w3.org/TR/webrtc/\n * @see https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-19\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/WebRTC_API\n * @see https://www.w3.org/TR/mediacapture-streams/\n *\n * @externs\n * @author bemasc@9oo91e.qjz9zk (Benjamin M. Schwartz)\n */\n\n/**\n * @typedef {string}\n * @see {https://www.w3.org/TR/mediacapture-streams/\n * #idl-def-MediaStreamTrackState}\n * In WebIDL this is an enum with values \'live\', \'mute\', and \'ended\',\n * but there is no mechanism in Closure for describing a specialization of\n * the string type.\n */\nvar MediaStreamTrackState;\n\n/**\n * @interface\n */\nfunction SourceInfo() {}\n\n/** @const {string} */\nSourceInfo.prototype.kind;\n\n/** @const {string} */\nSourceInfo.prototype.id;\n\n/** @const {?string} */\nSourceInfo.prototype.label;\n\n/** @const {boolean} */\nSourceInfo.prototype.facing;\n\n/**\n * @interface\n * @see https://w3c.github.io/mediacapture-image/#mediasettingsrange-section\n */\nfunction MediaSettingsRange() {}\n\n/**\n * @const {number}\n */\nMediaSettingsRange.prototype.max;\n\n/**\n * @const {number}\n */\nMediaSettingsRange.prototype.min;\n\n/**\n * @const {number}\n */\nMediaSettingsRange.prototype.step;\n\n/**\n * @interface\n * @see https://www.w3.org/TR/mediacapture-streams/#idl-def-MediaTrackCapabilities\n * @see https://w3c.github.io/mediacapture-image/#mediatrackcapabilities-section\n */\nfunction MediaTrackCapabilities() {}\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.width;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.height;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.aspectRatio;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.frameRate;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.facingMode;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.volume;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.sampleRate;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.sampleSize;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.echoCancellation;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.latency;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.channelCount;\n\n/** @type {string} */\nMediaTrackCapabilities.prototype.deviceId;\n\n/** @type {string} */\nMediaTrackCapabilities.prototype.groupId;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.whiteBalanceMode;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.exposureMode;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.focusMode;\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.exposureCompensation;\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.colorTemperature\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.iso\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.brightness\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.contrast\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.saturation\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.sharpness\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.zoom\n\n/** @type {boolean} */\nMediaTrackCapabilities.prototype.torch\n\n/**\n * @interface\n * @see https://www.w3.org/TR/mediacapture-streams/#media-track-settings\n * @see https://w3c.github.io/mediacapture-image/#mediatracksettings-section\n */\nfunction MediaTrackSettings() {}\n\n/** @type {number} */\nMediaTrackSettings.prototype.width;\n\n/** @type {number} */\nMediaTrackSettings.prototype.height;\n\n/** @type {number} */\nMediaTrackSettings.prototype.aspectRatio;\n\n/** @type {number} */\nMediaTrackSettings.prototype.frameRate;\n\n/** @type {string} */\nMediaTrackSettings.prototype.facingMode;\n\n/** @type {number} */\nMediaTrackSettings.prototype.volume;\n\n/** @type {number} */\nMediaTrackSettings.prototype.sampleRate;\n\n/** @type {number} */\nMediaTrackSettings.prototype.sampleSize;\n\n/** @type {boolean} */\nMediaTrackSettings.prototype.echoCancellation;\n\n/** @type {number} */\nMediaTrackSettings.prototype.latency;\n\n/** @type {number} */\nMediaTrackSettings.prototype.channelCount;\n\n/** @type {string} */\nMediaTrackSettings.prototype.deviceId;\n\n/** @type {string} */\nMediaTrackSettings.prototype.groupId;\n\n/** @type {string} */\nMediaTrackSettings.prototype.whiteBalanceMode;\n\n/** @type {string} */\nMediaTrackSettings.prototype.exposureMode;\n\n/** @type {string} */\nMediaTrackSettings.prototype.focusMode;\n\n/** @type {!Array<{x: number, y: number}>} */\nMediaTrackSettings.prototype.pointsOfInterest;\n\n/** @type {number} */\nMediaTrackSettings.prototype.exposureCompensation;\n\n/** @type {number} */\nMediaTrackSettings.prototype.colorTemperature\n\n/** @type {number} */\nMediaTrackSettings.prototype.iso\n\n/** @type {number} */\nMediaTrackSettings.prototype.brightness\n\n/** @type {number} */\nMediaTrackSettings.prototype.contrast\n\n/** @type {number} */\nMediaTrackSettings.prototype.saturation\n\n/** @type {number} */\nMediaTrackSettings.prototype.sharpness\n\n/** @type {number} */\nMediaTrackSettings.prototype.zoom\n\n/** @type {boolean} */\nMediaTrackSettings.prototype.torch\n\n\n/**\n * @interface\n * @see https://w3c.github.io/mediacapture-main/#media-track-supported-constraints\n */\nfunction MediaTrackSupportedConstraints() {}\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.width;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.height;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.aspectRatio;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.frameRate;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.facingMode;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.volume;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.sampleRate;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.sampleSize;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.echoCancellation;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.autoGainControl;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.noiseSuppression;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.latency;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.channelCount;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.deviceId;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.groupId;\n\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediastreamtrack\n */\nfunction MediaStreamTrack() {}\n\n/**\n * @const {string}\n */\nMediaStreamTrack.prototype.kind;\n\n/**\n * @const {string}\n */\nMediaStreamTrack.prototype.id;\n\n/**\n * @const {string}\n */\nMediaStreamTrack.prototype.label;\n\n/**\n * @type {boolean}\n */\nMediaStreamTrack.prototype.enabled;\n\n/**\n * @const {boolean}\n */\nMediaStreamTrack.prototype.muted;\n\n/**\n * @type {string}\n * @see https://crbug.com/653531\n * @see https://wicg.github.io/mst-content-hint/\n */\nMediaStreamTrack.prototype.contentHint;\n\n/**\n * @const {boolean}\n */\nMediaStreamTrack.prototype.remote;\n\n/**\n * @type {MediaStreamTrackState}\n * Read only.\n */\nMediaStreamTrack.prototype.readyState;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onmute;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onunmute;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onended;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onoverconstrained;\n\n/**\n * Applies the specified set of constraints to the track, if any specified; or\n * if no constraints are specified, removes all constraints from the track.\n *\n * @param {MediaTrackConstraints=} constraints Constraints to apply to the\n * track.\n * @return {!Promise} A |Promise| that is resolved when the constraints\n * have been applied, or rejected if there was an error applying the\n * constraints.\n */\nMediaStreamTrack.prototype.applyConstraints = function(constraints) {};\n\n/**\n * @return {!MediaStreamTrack}\n */\nMediaStreamTrack.prototype.clone = function() {};\n\n/** @return {void} */\nMediaStreamTrack.prototype.stop = function() {};\n\n/** @return {!MediaTrackCapabilities} */\nMediaStreamTrack.prototype.getCapabilities = function() {};\n\n/** @return {!MediaTrackConstraints} */\nMediaStreamTrack.prototype.getConstraints = function() {};\n\n/** @return {!MediaTrackSettings} */\nMediaStreamTrack.prototype.getSettings = function() {};\n\n/**\n * @typedef {{track: MediaStreamTrack}}\n */\nvar MediaStreamTrackEventInit;\n\n\n/**\n * @param {string} type\n * @param {!MediaStreamTrackEventInit} eventInitDict\n * @constructor\n * @extends {Event}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediastreamtrackevent\n */\nfunction MediaStreamTrackEvent(type, eventInitDict) {}\n\n/**\n * @const {!MediaStreamTrack}\n */\nMediaStreamTrackEvent.prototype.track;\n\n/**\n * @param {!MediaStream|!Array=} streamOrTracks\n * @constructor\n * @implements {EventTarget}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediastream\n */\nfunction MediaStream(streamOrTracks) {}\n\n/**\n * @override\n */\nMediaStream.prototype.addEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n */\nMediaStream.prototype.removeEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nMediaStream.prototype.dispatchEvent = function(evt) {};\n\n/**\n * TODO(bemasc): Remove this property.\n * @deprecated\n * @const {string}\n */\nMediaStream.prototype.label;\n\n/**\n * @const {string}\n */\nMediaStream.prototype.id;\n\n/**\n * @return {!Array}\n */\nMediaStream.prototype.getAudioTracks = function() {};\n\n/**\n * @return {!Array}\n */\nMediaStream.prototype.getVideoTracks = function() {};\n\n/**\n * @return {!Array}\n */\nMediaStream.prototype.getTracks = function() {};\n\n/**\n * @param {string} trackId\n * @return {MediaStreamTrack}\n */\nMediaStream.prototype.getTrackById = function(trackId) {};\n\n/**\n * @param {!MediaStreamTrack} track\n * @return {undefined}\n */\nMediaStream.prototype.addTrack = function(track) {};\n\n/**\n * @param {!MediaStreamTrack} track\n * @return {undefined}\n */\nMediaStream.prototype.removeTrack = function(track) {};\n\n/**\n * @return {!MediaStream}\n */\nMediaStream.prototype.clone = function() {};\n\n/**\n * @deprecated\n * @type {boolean}\n */\nMediaStream.prototype.ended;\n\n/**\n * @deprecated\n * @type {?function(!Event)}\n */\nMediaStream.prototype.onended;\n\n/**\n * @type {boolean}\n */\nMediaStream.prototype.active;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStream.prototype.onactive;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStream.prototype.oninactive;\n\n/**\n * @type {?function(!MediaStreamTrackEvent)}\n */\nMediaStream.prototype.onaddtrack;\n\n/**\n * @type {?function(!MediaStreamTrackEvent)}\n */\nMediaStream.prototype.onremovetrack;\n\n/**\n * @deprecated\n * TODO(bemasc): Remove this method once browsers have updated to\n * MediaStreamTrack.stop().\n * @return {undefined}\n */\nMediaStream.prototype.stop = function() {};\n\n/**\n * @typedef {{tone: string}}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcdtmftonechangeeventinit\n */\nvar RTCDTMFToneChangeEventInit;\n\n\n/**\n * @param {string} type\n * @param {!RTCDTMFToneChangeEventInit} eventInitDict\n * @constructor\n * @extends {Event}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcdtmftonechangeevent\n */\nfunction RTCDTMFToneChangeEvent(type, eventInitDict) {}\n\n/**\n * @const {string}\n */\nRTCDTMFToneChangeEvent.prototype.tone;\n\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#rtcdtmfsender\n */\nfunction RTCDTMFSender() {}\n\n/**\n * @param {string} tones\n * @param {number=} opt_duration\n * @param {number=} opt_interToneGap\n */\nRTCDTMFSender.prototype.insertDTMF =\n function(tones, opt_duration, opt_interToneGap) {};\n\n/**\n * @type {?boolean}\n */\nRTCDTMFSender.prototype.canInsertDTMF;\n\n/**\n * @type {?function(!RTCDTMFToneChangeEvent)}\n */\nRTCDTMFSender.prototype.ontonechange;\n\n/**\n * @const {string}\n */\nRTCDTMFSender.prototype.toneBuffer;\n\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#rtcrtpsender-interface\n */\nfunction RTCRtpSender() {}\n\n/**\n * @const {!RTCDTMFSender}\n */\nRTCRtpSender.prototype.dtmf;\n\n/**\n * @const {!MediaStreamTrack}\n */\nRTCRtpSender.prototype.track;\n\n/**\n * @param {?MediaStreamTrack} track\n * @return {!Promise}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpsender\n */\nRTCRtpSender.prototype.replaceTrack = function(track) {};\n\n\n/**\n * @return {!RTCRtpSendParameters}\n */\nRTCRtpSender.prototype.getParameters = function() {};\n\n\n/**\n * @param {!RTCRtpSendParameters} params\n * @return {!Promise}\n */\nRTCRtpSender.prototype.setParameters = function(params) {};\n\n\n/**\n * @record\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpsendparameters\n */\nfunction RTCRtpSendParameters() {}\n\n/**\n * @type {string|undefined}\n */\nRTCRtpSendParameters.prototype.transactionId;\n\n/**\n * @type {!Array}\n */\nRTCRtpSendParameters.prototype.encodings;\n\n/**\n * Possible string values are "maintain-framerate", "maintain-resolution", and\n * "balanced".\n * @type {string|undefined}\n */\nRTCRtpSendParameters.prototype.degradationPreference;\n\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpcontributingsource\n */\nfunction RTCRtpContributingSource() {}\n\n/**\n * @type {?number}\n */\nRTCRtpContributingSource.prototype.source;\n\n/**\n * @type {?Date|number}\n */\nRTCRtpContributingSource.prototype.timestamp;\n\n/**\n * @type {number|undefined}\n */\nRTCRtpContributingSource.prototype.audioLevel;\n\n/**\n * This is a relatively new field and browsers may not yet be compliant to the\n * spec.\n * @type {?number}\n * @see https://w3c.github.io/webrtc-pc/#dom-rtcrtpcontributingsource-rtptimestamp\n */\nRTCRtpContributingSource.prototype.rtpTimestamp;\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#rtcrtpreceiver-interface\n */\nfunction RTCRtpReceiver() {}\n\n/**\n * @const {!MediaStreamTrack}\n */\nRTCRtpReceiver.prototype.track;\n\n/**\n * @return {!Array}\n */\nRTCRtpReceiver.prototype.getContributingSources = function() {};\n\n/**\n * @return {!Array}\n */\nRTCRtpReceiver.prototype.getSynchronizationSources = function() {};\n\n/**\n * Chrome extension to control jitter buffer delay.\n * @see https://github.com/henbos/webrtc-timing/issues/1\n * @type {?number|undefined}\n */\nRTCRtpReceiver.prototype.jitterBufferDelayHint;\n\n/**\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtptransceiverinit\n * @record\n */\nfunction RTCRtpTransceiverInit() {}\n\n/**\n * The direction of the `RTCRtpTransceiver`. Defaults to "sendrecv".\n * @type {?RTCRtpTransceiverDirection|undefined}\n */\nRTCRtpTransceiverInit.prototype.direction;\n\n/**\n * The streams to add to the tranceiver\'s sender.\n * @type {?Array|undefined}\n */\nRTCRtpTransceiverInit.prototype.streams;\n\n/**\n * @type {?Array|undefined}\n */\nRTCRtpTransceiverInit.prototype.sendEncodings;\n\n/**\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpencodingparameters\n * @record\n */\nfunction RTCRtpEncodingParameters() {}\n\n/**\n * @type {?number|undefined}\n */\nRTCRtpEncodingParameters.prototype.codecPayloadType;\n\n/**\n * Possible values are "disabled" and "enabled".\n * @type {?string|undefined}\n */\nRTCRtpEncodingParameters.prototype.dtx;\n\n/**\n * @type {?boolean|undefined}\n */\nRTCRtpEncodingParameters.prototype.active;\n\n/**\n * Possible values are "very-low", "low" (default), "medium", and "high".\n * @type {?string|undefined}\n */\nRTCRtpEncodingParameters.prototype.priority;\n\n/**\n * Possible values are "very-low", "low" (default), "medium", and "high".\n * @see https://w3c.github.io/webrtc-dscp-exp/\n * @type {?string|undefined}\n */\nRTCRtpEncodingParameters.prototype.networkPriority;\n\n/**\n * @type {?number|undefined}\n */\nRTCRtpEncodingParameters.prototype.ptime;\n\n/**\n * @type {?number|undefined}\n */\nRTCRtpEncodingParameters.prototype.maxBitrate;\n\n/**\n * @type {?number|undefined}\n */\nRTCRtpEncodingParameters.prototype.maxFramerate;\n\n/**\n * @type {?string|number}\n */\nRTCRtpEncodingParameters.prototype.rid;\n\n/**\n * @type {?number|number}\n */\nRTCRtpEncodingParameters.prototype.scaleResolutionDownBy;\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#rtcrtptransceiver-interface\n */\nfunction RTCRtpTransceiver() {}\n\n/**\n * @const {?string}\n */\nRTCRtpTransceiver.prototype.mid;\n\n/**\n * @const {boolean}\n */\nRTCRtpTransceiver.prototype.stopped;\n\n/**\n * @type {!RTCRtpTransceiverDirection}\n */\nRTCRtpTransceiver.prototype.direction;\n\n/**\n * @const {?RTCRtpTransceiverDirection}\n */\nRTCRtpTransceiver.prototype.currentDirection;\n\n/**\n * @param {!RTCRtpTransceiverDirection} direction\n */\nRTCRtpTransceiver.prototype.setDirection = function(direction) {};\n\n/**\n */\nRTCRtpTransceiver.prototype.stop = function() {};\n\n/**\n * @const {?RTCRtpSender}\n */\nRTCRtpTransceiver.prototype.sender;\n\n/**\n * @const {?RTCRtpReceiver}\n */\nRTCRtpTransceiver.prototype.receiver;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-longrange\n * @record\n */\nfunction LongRange() {}\n\n/**\n * @type {number|undefined}\n */\nLongRange.prototype.max;\n\n/**\n * @type {number|undefined}\n */\nLongRange.prototype.min;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-doublerange\n * @record\n */\nfunction DoubleRange() {}\n\n/**\n * @type {number|undefined}\n */\nDoubleRange.prototype.max;\n\n/**\n * @type {number|undefined}\n */\nDoubleRange.prototype.min;\n\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constrainbooleanparameters\n * @record\n */\nfunction ConstrainBooleanParameters() {}\n\n/**\n * @type {boolean|undefined}\n */\nConstrainBooleanParameters.prototype.exact;\n\n/**\n * @type {boolean|undefined}\n */\nConstrainBooleanParameters.prototype.ideal;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constraindomstringparameters\n * @record\n */\nfunction ConstrainDOMStringParameters() {}\n\n/**\n * @type {string|Array|undefined}\n */\nConstrainDOMStringParameters.prototype.exact;\n\n/**\n * @type {string|Array|undefined}\n */\nConstrainDOMStringParameters.prototype.ideal;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constraindoublerange\n * @record\n * @extends {DoubleRange}\n */\nfunction ConstrainDoubleRange() {}\n\n/**\n * @type {number|undefined}\n */\nConstrainDoubleRange.prototype.exact;\n\n/**\n * @type {number|undefined}\n */\nConstrainDoubleRange.prototype.ideal;\n\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constrainlongrange\n * @record\n * @extends {LongRange}\n */\nfunction ConstrainLongRange() {}\n\n/**\n * @type {number|undefined}\n */\nConstrainLongRange.prototype.exact;\n\n/**\n * @type {number|undefined}\n */\nConstrainLongRange.prototype.ideal;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constrainboolean\n * @typedef {boolean|ConstrainBooleanParameters}\n */\nvar ConstrainBoolean;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constraindomString\n * @typedef {string|Array|ConstrainDOMStringParameters}\n */\nvar ConstrainDOMString;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constraindouble\n * @typedef {number|ConstrainDoubleRange}\n */\nvar ConstrainDouble;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constrainlong\n * @typedef {number|ConstrainLongRange}\n */\nvar ConstrainLong;\n\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-mediatrackconstraintset\n * @record\n * @private\n */\nfunction MediaTrackConstraintSet() {}\n\n/**\n * @type {ConstrainBoolean|undefined}\n */\nMediaTrackConstraintSet.prototype.autoGainControl;\n\n/**\n * @type {ConstrainDouble|undefined}\n */\nMediaTrackConstraintSet.prototype.aspectRatio;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.channelCount;\n\n/**\n * @type {ConstrainDOMString|undefined}\n */\nMediaTrackConstraintSet.prototype.deviceId;\n\n/**\n * @type {ConstrainBoolean|undefined}\n */\nMediaTrackConstraintSet.prototype.echoCancellation;\n\n/**\n * @type {ConstrainDOMString|undefined}\n */\nMediaTrackConstraintSet.prototype.facingMode;\n\n/**\n * @type {ConstrainDouble|undefined}\n */\nMediaTrackConstraintSet.prototype.frameRate;\n\n/**\n * @type {ConstrainDOMString|undefined}\n */\nMediaTrackConstraintSet.prototype.groupId;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.height;\n\n/**\n * @type {ConstrainDouble|undefined}\n */\nMediaTrackConstraintSet.prototype.latency;\n\n/**\n * @type {ConstrainBoolean|undefined}\n */\nMediaTrackConstraintSet.prototype.noiseSuppression;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.sampleRate;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.sampleSize;\n\n/**\n * @type {ConstrainDouble|undefined}\n */\nMediaTrackConstraintSet.prototype.volume;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.width;\n\n\n/**\n * @record\n * @extends {MediaTrackConstraintSet}\n */\nfunction MediaTrackConstraints() {}\n\n/**\n * @type {Array|undefined}\n */\nMediaTrackConstraints.prototype.advanced;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#media-track-constraints\n * @record\n */\nfunction MediaStreamConstraints() {}\n\n/**\n * @type {boolean|MediaTrackConstraints|undefined}\n */\nMediaStreamConstraints.prototype.audio;\n\n/**\n * @type {boolean|MediaTrackConstraints|undefined}\n */\nMediaStreamConstraints.prototype.video;\n\n/**\n * @see {http://dev.w3.org/2011/webrtc/editor/getusermedia.html#\n * navigatorusermediaerror-and-navigatorusermediaerrorcallback}\n * @interface\n */\nfunction NavigatorUserMediaError() {}\n\n/**\n * @const {number}\n * @deprecated Removed from the standard and some browsers.\n */\nNavigatorUserMediaError.prototype.PERMISSION_DENIED;\n\n/**\n * @type {number}\n * @deprecated Removed from the standard and some browsers.\n * Read only.\n */\nNavigatorUserMediaError.prototype.code;\n\n/**\n * @type {string}\n * Read only.\n */\nNavigatorUserMediaError.prototype.name;\n\n/**\n * @type {?string}\n * Read only.\n */\nNavigatorUserMediaError.prototype.message;\n\n/**\n * @type {?string}\n * Read only.\n */\nNavigatorUserMediaError.prototype.constraintName;\n\n/**\n * @param {string} type\n * @param {!Object} eventInitDict\n * @constructor\n */\nfunction MediaStreamEvent(type, eventInitDict) {}\n\n/**\n * @const {?MediaStream}\n */\nMediaStreamEvent.prototype.stream;\n\n/**\n * @record\n * @see https://www.w3.org/TR/mediastream-recording/#dictdef-mediarecorderoptions\n */\nfunction MediaRecorderOptions() {}\n\n/** @type {(string|undefined)} */\nMediaRecorderOptions.prototype.mimeType\n\n/** @type {(number|undefined)} */\nMediaRecorderOptions.prototype.audioBitsPerSecond\n\n/** @type {(number|undefined)} */\nMediaRecorderOptions.prototype.videoBitsPerSecond\n\n/** @type {(number|undefined)} */\nMediaRecorderOptions.prototype.bitsPerSecond\n\n/**\n * @see https://www.w3.org/TR/mediastream-recording/#mediarecorder-api\n * @param {!MediaStream} stream\n * @param {MediaRecorderOptions=} options\n * @implements {EventTarget}\n * @constructor\n */\nfunction MediaRecorder(stream, options) {}\n\n/**\n * @override\n */\nMediaRecorder.prototype.addEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n */\nMediaRecorder.prototype.removeEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nMediaRecorder.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {!MediaStream}\n */\nMediaRecorder.prototype.stream;\n\n/**\n * @type {string}\n */\nMediaRecorder.prototype.mimeType;\n\n/**\n * @type {string}\n */\nMediaRecorder.prototype.state;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onstart;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onstop;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.ondataavailable;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onpause;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onresume;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onerror;\n\n/**\n * @type {number}\n */\nMediaRecorder.prototype.videoBitsPerSecond;\n\n/**\n * @type {number}\n */\nMediaRecorder.prototype.audioBitsPerSecond;\n\n/**\n * @param {number=} timeslice\n */\nMediaRecorder.prototype.start = function(timeslice) {};\n\n/** @return {void} */\nMediaRecorder.prototype.stop = function() {};\n\n/** @return {void} */\nMediaRecorder.prototype.pause = function() {};\n\n/** @return {void} */\nMediaRecorder.prototype.resume = function() {};\n\n/** @return {void} */\nMediaRecorder.prototype.requestData = function() {};\n\n/**\n * @param {string} type\n * @return {boolean}\n */\nMediaRecorder.isTypeSupported = function(type) {};\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {{data: !Blob, timecode: (number|undefined)}} eventInitDict\n * @see https://www.w3.org/TR/mediastream-recording/#blobevent-section\n */\nfunction BlobEvent(type, eventInitDict) {}\n\n/** @type {!Blob} */\nBlobEvent.prototype.data;\n\n/** @type {number} */\nBlobEvent.prototype.timecode;\n\n/**\n * @interface\n * @see https://w3c.github.io/mediacapture-image/##photosettings-section\n */\nfunction PhotoSettings() {}\n\n/**\n * @type {string}\n */\nPhotoSettings.prototype.fillLightMode;\n\n/**\n * @type {number}\n */\nPhotoSettings.prototype.imageHeight;\n\n/**\n * @type {number}\n */\nPhotoSettings.prototype.imageWidth;\n\n/**\n * @type {boolean}\n */\nPhotoSettings.prototype.redEyeReduction;\n\n/**\n * @interface\n * @see https://w3c.github.io/mediacapture-image/##photocapabilities-section\n */\nfunction PhotoCapabilities() {}\n\n/**\n * @const {string}\n */\nPhotoCapabilities.prototype.redEyeReduction;\n\n/**\n * @const {!MediaSettingsRange}\n */\nPhotoCapabilities.prototype.imageHeight;\n\n/**\n * @const {!MediaSettingsRange}\n */\nPhotoCapabilities.prototype.imageWidth;\n\n/**\n * @const {!Array}\n */\nPhotoCapabilities.prototype.fillLightMode;\n\n/**\n * @see https://w3c.github.io/mediacapture-image/\n * @param {!MediaStreamTrack} videoTrack\n * @constructor\n */\nfunction ImageCapture(videoTrack) {}\n\n/**\n * @param {!PhotoSettings=} photoSettings\n * @return {!Promise}\n */\nImageCapture.prototype.takePhoto = function(photoSettings) {};\n\n/**\n * @return {!Promise}\n */\nImageCapture.prototype.getPhotoCapabilities = function() {};\n\n/**\n * @return {!Promise}\n */\nImageCapture.prototype.grabFrame = function() {};\n\n/**\n * @const {!MediaStreamTrack}\n */\nImageCapture.prototype.track;\n\n/**\n * @see https://www.w3.org/TR/webrtc/#rtctrackevent\n * @param {string} type\n * @param {!Object} eventInitDict\n * @constructor\n */\nfunction RTCTrackEvent(type, eventInitDict) {}\n\n/**\n * @const {?RTCRtpReceiver}\n */\nRTCTrackEvent.prototype.receiver;\n\n/**\n * @const {?MediaStreamTrack}\n */\nRTCTrackEvent.prototype.track;\n\n/**\n * @const {?Array}\n */\nRTCTrackEvent.prototype.streams;\n\n/**\n * @const {?RTCRtpTransceiver}\n */\nRTCTrackEvent.prototype.transceiver;\n\n/**\n * @typedef {string}\n * @see https://www.w3.org/TR/mediacapture-streams/#idl-def-MediaDeviceKind\n * In WebIDL this is an enum with values \'audioinput\', \'audiooutput\', and\n * \'videoinput\', but there is no mechanism in Closure for describing a\n * specialization of the string type.\n */\nvar MediaDeviceKind;\n\n/**\n * Possible values are "sendrecv", "sendonly", "recvonly", and "inactive".\n * @typedef {string}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtptransceiverdirection\n */\nvar RTCRtpTransceiverDirection;\n\n/**\n * @interface\n */\nfunction MediaDeviceInfo() {}\n\n/** @const {string} */\nMediaDeviceInfo.prototype.deviceId;\n\n/** @const {!MediaDeviceKind} */\nMediaDeviceInfo.prototype.kind;\n\n/** @const {string} */\nMediaDeviceInfo.prototype.label;\n\n/** @const {string} */\nMediaDeviceInfo.prototype.groupId;\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediadevices\n */\nfunction MediaDevices() {}\n\n/**\n * @return {!Promise>}\n */\nMediaDevices.prototype.enumerateDevices = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/MediaDevices/getUserMedia\n * @param {!MediaStreamConstraints} constraints\n * @return {!Promise}\n */\nMediaDevices.prototype.getUserMedia = function(constraints) {}\n\n/**\n * @see https://w3c.github.io/mediacapture-screen-share/#dom-mediadevices-getdisplaymedia\n * @param {!MediaStreamConstraints=} constraints\n * @return {!Promise}\n */\nMediaDevices.prototype.getDisplayMedia = function(constraints) {}\n\n/**\n * @see https://w3c.github.io/mediacapture-main/#dom-mediadevices-getsupportedconstraints\n * @return {!MediaTrackSupportedConstraints}\n */\nMediaDevices.prototype.getSupportedConstraints = function() {}\n\n/** @const {!MediaDevices} */\nNavigator.prototype.mediaDevices;\n\n/**\n * @typedef {string}\n * @see https://www.w3.org/TR/webrtc/#rtcsdptype\n * In WebIDL this is an enum with values \'offer\', \'pranswer\', and \'answer\',\n * but there is no mechanism in Closure for describing a specialization of\n * the string type.\n */\nvar RTCSdpType;\n\n/**\n * @param {!Object=} descriptionInitDict The RTCSessionDescriptionInit\n * dictionary. This optional argument may have type\n * {type:RTCSdpType, sdp:string}, but neither of these keys are required to be\n * present, and other keys are ignored, so the closest Closure type is Object.\n * @constructor\n * @see https://www.w3.org/TR/webrtc/#rtcsessiondescription-class\n */\nfunction RTCSessionDescription(descriptionInitDict) {}\n\n/**\n * @type {?RTCSdpType}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcsessiondescription-type\n */\nRTCSessionDescription.prototype.type;\n\n/**\n * @type {?string}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcsessiondescription-sdp\n */\nRTCSessionDescription.prototype.sdp;\n\n/**\n * TODO(bemasc): Remove this definition once it is removed from the browser.\n * @param {string} label The label index (audio/video/data -> 0,1,2)\n * @param {string} sdp The ICE candidate in SDP text form\n * @constructor\n */\nfunction IceCandidate(label, sdp) {}\n\n/**\n * @return {string}\n */\nIceCandidate.prototype.toSdp = function() {};\n\n/**\n * @type {?string}\n */\nIceCandidate.prototype.label;\n\n/** @record */\nfunction RTCIceCandidateInit() {};\n\n/** @type {?string|undefined} */\nRTCIceCandidateInit.prototype.candidate;\n\n/** @type {(?string|undefined)} */\nRTCIceCandidateInit.prototype.sdpMid;\n\n/** @type {(?number|undefined)} */\nRTCIceCandidateInit.prototype.sdpMLineIndex;\n\n/** @type {(string|undefined)} */\nRTCIceCandidateInit.prototype.usernameFragment;\n\n/**\n * @param {!RTCIceCandidateInit=} candidateInitDict The RTCIceCandidateInit dictionary.\n * @constructor\n * @see https://www.w3.org/TR/webrtc/#rtcicecandidate-interface\n */\nfunction RTCIceCandidate(candidateInitDict) {}\n\n/**\n * @type {?string}\n */\nRTCIceCandidate.prototype.candidate;\n\n/**\n * @type {?string}\n */\nRTCIceCandidate.prototype.sdpMid;\n\n/**\n * @type {?number}\n */\nRTCIceCandidate.prototype.sdpMLineIndex;\n\n/**\n * @typedef {{urls: string}|{urls: !Array}}\n * @private\n * @see https://www.w3.org/TR/webrtc/#rtciceserver-dictionary\n * This dictionary type also has an optional key {credential: ?string}.\n */\nvar RTCIceServerRecord_;\n\n/**\n * @interface\n * @private\n */\nfunction RTCIceServerInterface_() {}\n\n/**\n * @type {string|!Array}\n */\nRTCIceServerInterface_.prototype.urls;\n\n/**\n * @type {?string}\n */\nRTCIceServerInterface_.prototype.username;\n\n/**\n * @type {?string}\n */\nRTCIceServerInterface_.prototype.credential;\n\n/**\n * This type, and several below it, are constructed as unions between records\n *\n * @typedef {RTCIceServerRecord_|RTCIceServerInterface_}\n * @private\n */\nvar RTCIceServer;\n\n/**\n * @typedef {{\n * iceServers: !Array,\n * sdpSemantics: (string|undefined)\n * }}\n * @private\n */\nvar RTCConfigurationRecord_;\n\n/**\n * @interface\n * @private\n */\nfunction RTCConfigurationInterface_() {}\n\n/**\n * @type {!Array}\n */\nRTCConfigurationInterface_.prototype.iceServers;\n\n/**\n * Allows specifying the SDP semantics. Valid values are "plan-b" and\n * "unified-plan".\n *\n * @see {@link https://webrtc.org/web-apis/chrome/unified-plan/}\n * @type {string|undefined}\n */\nRTCConfigurationInterface_.prototype.sdpSemantics;\n\n/**\n * @typedef {RTCConfigurationRecord_|RTCConfigurationInterface_}\n */\nvar RTCConfiguration;\n\n/**\n * @typedef {function(!RTCSessionDescription)}\n */\nvar RTCSessionDescriptionCallback;\n\n/**\n * @typedef {function(string)}\n */\nvar RTCPeerConnectionErrorCallback;\n\n/**\n * @typedef {function()}\n */\nvar RTCVoidCallback;\n\n/**\n * @typedef {string}\n */\nvar RTCSignalingState;\n\n/**\n * @typedef {string}\n */\nvar RTCIceConnectionState;\n\n/**\n * @typedef {string}\n */\nvar RTCIceGatheringState;\n\n/**\n * @param {string} type\n * @param {!Object} eventInitDict\n * @constructor\n */\nfunction RTCPeerConnectionIceEvent(type, eventInitDict) {}\n\n/**\n * @const {RTCIceCandidate}\n */\nRTCPeerConnectionIceEvent.prototype.candidate;\n\n// Note: The specification of RTCStats types is still under development.\n// Declarations here will be updated and removed to follow the development of\n// modern browsers, breaking compatibility with older versions as they become\n// obsolete.\n/**\n * @see https://www.w3.org/TR/webrtc/#dom-rtcstats\n * @interface\n */\nfunction RTCStats() {}\n\n/**\n * @const {?Date|number}\n */\nRTCStats.prototype.timestamp;\n\n/**\n * https://www.w3.org/TR/webrtc-stats/#rtcstatstype-str*\n * @const {string}\n */\nRTCStats.prototype.type;\n\n/**\n * @const {string}\n */\nRTCStats.prototype.id;\n\n/**\n * @see https://www.w3.org/TR/webrtc-stats/#dom-rtcrtpstreamstats\n * @interface\n * @extends {RTCStats}\n */\nfunction RTCStreamStats() {}\n\n/** @const {number} */\nRTCStreamStats.prototype.ssrc;\n\n/** @const {string} */\nRTCStreamStats.prototype.kind;\n\n/** @const {string} */\nRTCStreamStats.prototype.transportId;\n\n/** @const {string} */\nRTCStreamStats.prototype.codecId;\n\n/** @const {number} */\nRTCStreamStats.prototype.firCount;\n\n/** @const {number} */\nRTCStreamStats.prototype.pliCount;\n\n/** @const {number} */\nRTCStreamStats.prototype.nackCount;\n\n/** @const {number} */\nRTCStreamStats.prototype.sliCount;\n\n/** @const {number} */\nRTCStreamStats.prototype.qpSum;\n\n/**\n * @interface\n */\nfunction RTCStatsReport() {}\n\n/**\n * @const {?Date|number}\n */\nRTCStatsReport.prototype.timestamp;\n\n/**\n * @return {!Array}\n */\nRTCStatsReport.prototype.names = function() {};\n\n/**\n * @param {string} name\n * @return {string}\n */\nRTCStatsReport.prototype.stat = function(name) {};\n\n/**\n * @deprecated\n * @const {RTCStatsReport}\n */\nRTCStatsReport.prototype.local;\n\n/**\n * @deprecated\n * @const {RTCStatsReport}\n */\nRTCStatsReport.prototype.remote;\n\n/**\n * @const {string}\n */\nRTCStatsReport.prototype.type;\n\n/**\n * @const {string}\n */\nRTCStatsReport.prototype.id;\n\n// Note: Below are Map like methods supported by WebRTC statistics\n// specification-compliant RTCStatsReport. Currently only implemented by\n// Mozilla.\n// See https://www.w3.org/TR/webrtc/#rtcstatsreport-object for definition.\n/**\n * @param {function(this:SCOPE, !RTCStats, string, MAP)} callback\n * @param {SCOPE=} opt_thisObj The value of "this" inside callback function.\n * @this {MAP}\n * @template MAP,SCOPE\n */\nRTCStatsReport.prototype.forEach = function(callback, opt_thisObj) {};\n\n/**\n * @param {string} key\n * @return {!IteratorIterable>}\n */\nRTCStatsReport.prototype.entries = function(key) {};\n\n/**\n * @param {string} key\n * @return {!RTCStats}\n */\nRTCStatsReport.prototype.get = function(key) {};\n\n/**\n * @return {!IteratorIterable}\n */\nRTCStatsReport.prototype.keys = function() {};\n\n/**\n * @return {!IteratorIterable}\n */\nRTCStatsReport.prototype.values = function() {};\n\n/**\n * @param {string} key\n * @return {boolean}\n */\nRTCStatsReport.prototype.has = function(key) {};\n\n/**\n * @const {number}\n */\nRTCStatsReport.prototype.size;\n\n/**\n * @return {!Iterator>}\n */\nRTCStatsReport.prototype[Symbol.iterator] = function() {};\n\n\n/**\n * TODO(bemasc): Remove this type once it is no longer in use. It has already\n * been removed from the specification.\n * @typedef {RTCStatsReport}\n * @deprecated\n */\nvar RTCStatsElement;\n\n/**\n * @interface\n */\nfunction RTCStatsResponse() {}\n\n/**\n * @return {!Array}\n */\nRTCStatsResponse.prototype.result = function() {};\n\n/**\n * @typedef {function(!RTCStatsResponse, MediaStreamTrack=)}\n */\nvar RTCStatsCallback;\n\n/**\n * This type is not yet standardized, so the properties here only represent\n * the current capabilities of libjingle (and hence Chromium).\n * TODO(bemasc): Add a link to the relevant standard once MediaConstraint has a\n * standard definition.\n *\n * @interface\n * @private\n */\nfunction MediaConstraintSetInterface_() {}\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.OfferToReceiveAudio;\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.OfferToReceiveVideo;\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.DtlsSrtpKeyAgreement;\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.RtpDataChannels;\n\n/**\n * TODO(bemasc): Make this type public once it is defined in a standard.\n *\n * @typedef {Object|MediaConstraintSetInterface_}\n * @private\n */\nvar MediaConstraintSet_;\n\n/**\n * @interface\n * @private\n */\nfunction MediaConstraintsInterface_() {}\n\n/**\n * @type {?MediaConstraintSet_}\n */\nMediaConstraintsInterface_.prototype.mandatory;\n\n/**\n * @type {?Array}\n */\nMediaConstraintsInterface_.prototype.optional;\n\n/**\n * This type is used extensively in\n * {@see http://dev.w3.org/2011/webrtc/editor/webrtc.html} but is not yet\n * defined.\n *\n * @typedef {Object|MediaConstraintsInterface_}\n */\nvar MediaConstraints;\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://w3c.github.io/webrtc-pc/#dom-rtcdatachannel\n */\nfunction RTCDataChannel() {}\n\n/**\n * @const {string}\n */\nRTCDataChannel.prototype.label;\n\n/**\n * @const {boolean}\n */\nRTCDataChannel.prototype.reliable;\n\n/**\n * An enumerated string type (RTCDataChannelState) with values:\n * "connecting", "open", "closing", and "closed".\n * @type {string}\n * Read only.\n */\nRTCDataChannel.prototype.readyState;\n\n/**\n * @type {number}\n * Read only.\n */\nRTCDataChannel.prototype.bufferedAmount;\n\n/**\n * @type {number}\n */\nRTCDataChannel.prototype.bufferedAmountLowThreshold;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onopen;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onerror;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onclose;\n\nRTCDataChannel.prototype.close = function() {};\n\n/**\n * @type {?function(!MessageEvent<*>)}\n */\nRTCDataChannel.prototype.onmessage;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onbufferedamountlow;\n\n/**\n * @type {string}\n */\nRTCDataChannel.prototype.binaryType;\n\n/**\n * @param {string|!Blob|!ArrayBuffer|!ArrayBufferView} data\n * @return {undefined}\n */\nRTCDataChannel.prototype.send = function(data) {};\n\n/**\n * @constructor\n * @extends {Event}\n * @private\n */\nfunction RTCDataChannelEvent() {}\n\n/**\n * @type {!RTCDataChannel}\n * Read only.\n */\nRTCDataChannelEvent.prototype.channel;\n\n/**\n * @typedef {{reliable: boolean}}\n */\nvar RTCDataChannelInitRecord_;\n\n/**\n * @interface\n * @private\n */\nfunction RTCDataChannelInitInterface_() {}\n\n/**\n * @type {boolean}\n */\nRTCDataChannelInitInterface_.prototype.reliable;\n\n/**\n * @typedef {{\n * ordered: (boolean|undefined),\n * maxPacketLifeTime: (number|undefined),\n * maxRetransmits: (number|undefined),\n * protocol: (string|undefined),\n * negotiated: (boolean|undefined),\n * id: (number|undefined),\n * priority: (string|undefined),\n * }}\n * see https://www.w3.org/TR/webrtc/#dom-rtcdatachannelinit for documentation\n * Type inconsistencies due to Closure limitations:\n * maxPacketLifeTime should be UnsignedShort\n * maxRetransmits should be UnsignedShort\n * protocol should be USVString\n * id should be UnsignedShort\n * In WebIDL priority is an enum with values \'very-low\', \'low\',\n * \'medium\' and \'high\', but there is no mechanism in Closure for describing\n * a specialization of the string type.\n */\nvar RTCDataChannelInitDictionary_;\n\n/**\n * @typedef {RTCDataChannelInitInterface_|RTCDataChannelInitRecord_|RTCDataChannelInitDictionary_}\n */\nvar RTCDataChannelInit;\n\n/**\n * @typedef {{expires: number}}\n */\nvar RTCCertificate;\n\n/**\n * @param {RTCConfiguration} configuration\n * @param {!MediaConstraints=} constraints\n * @constructor\n * @implements {EventTarget}\n * @see https://www.w3.org/TR/webrtc/#interface-definition\n */\nfunction RTCPeerConnection(configuration, constraints) {}\n\n/**\n * @param {Object} keygenAlgorithm\n * @return {Promise}\n */\nRTCPeerConnection.generateCertificate = function (keygenAlgorithm) {};\n\n/**\n * @override\n */\nRTCPeerConnection.prototype.addEventListener = function(\n type, listener, opt_useCapture) {};\n\n/**\n * @override\n */\nRTCPeerConnection.prototype.removeEventListener = function(\n type, listener, opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nRTCPeerConnection.prototype.dispatchEvent = function(evt) {};\n\n\n// NB: Until closure annotations support overloading, many of the following\n// functions take odd unions of parameter types. This is to support the various\n// api differences between browsers. Generally, returning a promise means you\n// don\'t take callback function parameters and draw any further parameters\n// forward, and vice versa.\n\n/**\n * @param {(!RTCSessionDescriptionCallback|!MediaConstraints)=}\n * successCallbackOrConstraints\n * @param {!RTCPeerConnectionErrorCallback=} errorCallback\n * @param {!MediaConstraints=} constraints\n * @return {!Promise|undefined}\n */\nRTCPeerConnection.prototype.createOffer = function(successCallbackOrConstraints,\n errorCallback, constraints) {};\n\n/**\n * @param {(!RTCSessionDescriptionCallback|!MediaConstraints)=}\n * successCallbackOrConstraints\n * @param {!RTCPeerConnectionErrorCallback=} errorCallback\n * @param {!MediaConstraints=} constraints\n * @return {!Promise|undefined}\n */\nRTCPeerConnection.prototype.createAnswer =\n function(successCallbackOrConstraints, errorCallback, constraints) {};\n\n/**\n * @param {!RTCSessionDescription} description\n * @param {!RTCVoidCallback=} successCallback\n * @param {!RTCPeerConnectionErrorCallback=} errorCallback\n * @return {!Promise}\n */\nRTCPeerConnection.prototype.setLocalDescription = function(description,\n successCallback, errorCallback) {};\n\n/**\n * @param {!RTCSessionDescription} description\n * @param {!RTCVoidCallback=} successCallback\n * @param {!RTCPeerConnectionErrorCallback=} errorCallback\n * @return {!Promise}\n */\nRTCPeerConnection.prototype.setRemoteDescription = function(description,\n successCallback, errorCallback) {};\n\n/**\n * @type {?RTCSessionDescription}\n * Read only.\n */\nRTCPeerConnection.prototype.localDescription;\n\n/**\n * @type {?RTCSessionDescription}\n * Read only.\n */\nRTCPeerConnection.prototype.remoteDescription;\n\n/**\n * @type {RTCSignalingState}\n * Read only.\n */\nRTCPeerConnection.prototype.signalingState;\n\n/**\n * @param {?RTCConfiguration=} configuration\n * @param {?MediaConstraints=} constraints\n * @return {undefined}\n */\nRTCPeerConnection.prototype.updateIce = function(configuration, constraints) {};\n\n/**\n * Void in Chrome for now, a promise that you can then/catch in Firefox.\n * @param {!RTCIceCandidate} candidate\n * @param {!RTCVoidCallback=} successCallback\n * @param {function(DOMException)=} errorCallback\n * @return {!Promise|undefined}\n */\nRTCPeerConnection.prototype.addIceCandidate = function(candidate, successCallback, errorCallback) {};\n\n/**\n * @type {!RTCIceGatheringState}\n * Read only.\n */\nRTCPeerConnection.prototype.iceGatheringState;\n\n/**\n * @type {!RTCIceConnectionState}\n * Read only.\n */\nRTCPeerConnection.prototype.iceConnectionState;\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getLocalStreams = function() {};\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getRemoteStreams = function() {};\n\n/**\n * @param {string} streamId\n * @return {MediaStream}\n */\nRTCPeerConnection.prototype.getStreamById = function(streamId) {};\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getSenders = function() {};\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getReceivers = function() {};\n\n/**\n * @param {?string} label\n * @param {RTCDataChannelInit=} dataChannelDict\n * @return {!RTCDataChannel}\n */\nRTCPeerConnection.prototype.createDataChannel =\n function(label, dataChannelDict) {};\n/**\n * @param {!MediaStream} stream\n * @param {!MediaConstraints=} constraints\n * @return {undefined}\n */\nRTCPeerConnection.prototype.addStream = function(stream, constraints) {};\n\n/**\n * @param {!MediaStream} stream\n * @return {undefined}\n */\nRTCPeerConnection.prototype.removeStream = function(stream) {};\n\n/**\n * @param {!MediaStreamTrack} track\n * @param {!MediaStream} stream\n * @param {...MediaStream} var_args Additional streams.\n * @return {!RTCRtpSender}\n */\nRTCPeerConnection.prototype.addTrack = function(track, stream, var_args) {};\n\n/**\n * @param {!MediaStreamTrack|string} trackOrKind\n * @param {?RTCRtpTransceiverInit=} init\n * @return {!RTCRtpTransceiver}\n */\nRTCPeerConnection.prototype.addTransceiver = function(trackOrKind, init) {};\n\n/**\n * Returns the list of transceivers are currently attached to this peer.\n *\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getTransceivers = function() {};\n\n/**\n * @return {!RTCConfiguration}\n */\nRTCPeerConnection.prototype.getConfiguration = function() {};\n\n/**\n * @param {!RTCConfiguration} configuration\n * @return {undefined}\n */\nRTCPeerConnection.prototype.setConfiguration = function(configuration) {};\n\n/**\n * @param {!RTCRtpSender} sender\n * @return {undefined}\n */\nRTCPeerConnection.prototype.removeTrack = function(sender) {};\n\n// TODO(bemasc): Add identity provider stuff once implementations exist\n\n// TODO(rjogrady): Per w3c spec, getStats() should always return a Promise.\n// Remove RTCStatsReport from the return value once Firefox supports that.\n/**\n * Firefox\' getstats is synchronous and returns a much simpler\n * {!RTCStatsReport} Map-like object.\n * @param {!RTCStatsCallback=} successCallback\n * @param {MediaStreamTrack=} selector\n * @return {undefined|!RTCStatsReport|!Promise}\n */\nRTCPeerConnection.prototype.getStats = function(successCallback, selector) {};\n\nRTCPeerConnection.prototype.close = function() {};\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.onnegotiationneeded;\n\n/**\n * @type {?function(!RTCPeerConnectionIceEvent)}\n */\nRTCPeerConnection.prototype.onicecandidate;\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.onicegatheringstatechange;\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.onsignalingstatechange;\n\n/**\n * @type {?function(!MediaStreamEvent)}\n */\nRTCPeerConnection.prototype.onaddstream;\n\n/**\n * @type {?function(!RTCTrackEvent)}\n */\nRTCPeerConnection.prototype.ontrack;\n\n/**\n * @type {?function(!MediaStreamEvent)}\n */\nRTCPeerConnection.prototype.onremovestream;\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.oniceconnectionstatechange;\n\n/**\n * @type {?function(!RTCDataChannelEvent)}\n */\nRTCPeerConnection.prototype.ondatachannel;\n', - "externs/nonstandard_rtc.js":'/*\n * Copyright 2019 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Nonstandard definitions for components of the WebRTC browser\n * API.\n *\n * @externs\n */\n\n/**\n * @type {function(new: MediaStream,\n * (!MediaStream|!Array)=)}\n */\nvar webkitMediaStream;\n\n/**\n * @param {MediaStreamConstraints} constraints A MediaStreamConstraints object.\n * @param {function(!MediaStream)} successCallback\n * A NavigatorUserMediaSuccessCallback function.\n * @param {function(!NavigatorUserMediaError)=} errorCallback A\n * NavigatorUserMediaErrorCallback function.\n * @see http://dev.w3.org/2011/webrtc/editor/getusermedia.html\n * @see https://www.w3.org/TR/mediacapture-streams/\n * @return {undefined}\n */\nNavigator.prototype.webkitGetUserMedia = function(\n constraints, successCallback, errorCallback) {};\n\n/** @const */\nvar webkitRTCPeerConnection = RTCPeerConnection;\n', - "externs/w3c_screen_orientation.js":'/*\n * Copyright 2016 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Screen Orientation API.\n * @see https://w3c.github.io/screen-orientation/\n *\n * @externs\n */\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://w3c.github.io/screen-orientation/#screenorientation-interface\n */\nvar ScreenOrientation = function() {};\n\n/**\n * @param {string} orientation\n * @return {!Promise}\n */\nScreenOrientation.prototype.lock = function(orientation) {};\n\n/** @return {void} */\nScreenOrientation.prototype.unlock = function() {};\n\n/** @const {string} */\nScreenOrientation.prototype.type;\n\n/** @const {number} */\nScreenOrientation.prototype.angle;\n\n/** @type {?function(!Event)} */\nScreenOrientation.prototype.onchange;\n\n/**\n * @type {?ScreenOrientation}\n * @see https://w3c.github.io/screen-orientation/#extensions-to-the-screen-interface\n */\nScreen.prototype.orientation;\n', --"externs/w3c_selectors.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Selectors API.\n * This file depends on w3c_dom1.js.\n * @see http://www.w3.org/TR/selectors-api2/\n *\n * @externs\n * @author mihaip@google.com (Mihai Parparita)\n */\n\n/**\n * @param {string} selectors\n * @return {?Element}\n * @override\n * @nosideeffects\n */\nDocument.prototype.querySelector = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @return {!NodeList}\n * @override\n * @nosideeffects\n */\nDocument.prototype.querySelectorAll = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @return {?Element}\n * @override\n * @nosideeffects\n */\nElement.prototype.querySelector = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @return {!NodeList}\n * @override\n * @nosideeffects\n */\nElement.prototype.querySelectorAll = function(selectors) {};\n\n/**\n * https://dom.spec.whatwg.org/#dom-element-closest\n * https://developer.mozilla.org/en-US/docs/Web/API/Element.closest\n * @param {string} selectors\n * @return {?Element}\n * @nosideeffects\n */\nElement.prototype.closest = function(selectors) {};\n\n/**\n * https://dom.spec.whatwg.org/#dom-element-matches\n * https://developer.mozilla.org/en-US/docs/Web/API/Element.matches\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.matches = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @param {(Node|NodeList)=} refNodes\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.matchesSelector = function(selectors, refNodes) {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/Node.mozMatchesSelector\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.mozMatchesSelector = function(selectors) {};\n\n/**\n * @see http://developer.apple.com/library/safari/documentation/WebKit/Reference/ElementClassRef/Element/Element.html\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.webkitMatchesSelector = function(selectors) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ff975201.aspx\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.msMatchesSelector = function(selectors) {};\n\n/**\n * @see http://www.opera.com/docs/changelogs/windows/1150/\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.oMatchesSelector = function(selectors) {};\n', --"externs/w3c_serviceworker.js":"/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Externs for service worker.\n *\n * @see http://www.w3.org/TR/service-workers/\n * @externs\n */\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-interface\n * @constructor\n * @extends {Worker}\n */\nfunction ServiceWorker() {}\n\n/** @type {string} */\nServiceWorker.prototype.scriptURL;\n\n/** @type {ServiceWorkerState} */\nServiceWorker.prototype.state;\n\n/** @type {?function(!Event)} */\nServiceWorker.prototype.onstatechange;\n\n/**\n * Set of possible string values: 'installing', 'installed', 'activating',\n * 'activated', 'redundant'.\n * @typedef {string}\n */\nvar ServiceWorkerState;\n\n/**\n * @see https://w3c.github.io/ServiceWorker/#navigationpreloadmanager\n * @constructor\n */\nfunction NavigationPreloadManager() {}\n\n/** @return {!Promise} */\nNavigationPreloadManager.prototype.enable = function() {};\n\n/** @return {!Promise} */\nNavigationPreloadManager.prototype.disable = function() {};\n\n/**\n * @param {string=} value\n * @return {!Promise}\n */\nNavigationPreloadManager.prototype.setHeaderValue = function(value) {};\n\n/** @return {!Promise} */\nNavigationPreloadManager.prototype.getState = function() {};\n\n/**\n * @typedef {{\n * enabled: (boolean|undefined),\n * headerValue: (string|undefined)\n * }}\n */\nvar NavigationPreloadState;\n\n/** @record */\nfunction PushSubscriptionOptions() {}\n\n/** @type {ArrayBuffer|undefined} */\nPushSubscriptionOptions.prototype.applicationServerKey;\n\n/** @type {boolean|undefined} */\nPushSubscriptionOptions.prototype.userVisibleOnly;\n\n/** @record */\nfunction PushSubscriptionOptionsInit() {}\n\n/** @type {BufferSource|string|undefined} */\nPushSubscriptionOptionsInit.prototype.applicationServerKey;\n\n/** @type {boolean|undefined} */\nPushSubscriptionOptionsInit.prototype.userVisibleOnly;\n\n\n/**\n * @see https://w3c.github.io/push-api/\n * @constructor\n */\nfunction PushSubscription() {}\n\n/** @type {string} */\nPushSubscription.prototype.endpoint;\n\n/**\n * Please note there is an intent to deprecate this field in Chrome 43 or 44.\n * See https://www.chromestatus.com/feature/5283829761703936.\n * @type {string}\n */\nPushSubscription.prototype.subscriptionId;\n\n/** @type {!PushSubscriptionOptions} */\nPushSubscription.prototype.options;\n\n/** @return {!Promise} */\nPushSubscription.prototype.unsubscribe = function() {};\n\n/** @enum {string} */\n// This is commented out since it has not been implemented yet in Chrome beta.\n// Uncomment once it is available.\n// var PushPermissionStatus = {\n// GRANTED: 'granted',\n// DENIED: 'denied',\n// DEFAULT: 'default'\n//};\n\n/**\n * @see https://w3c.github.io/push-api/#idl-def-PushManager\n * @constructor\n */\nfunction PushManager() {}\n\n/**\n * @param {PushSubscriptionOptionsInit=} opt_options\n * @return {!Promise}\n */\nPushManager.prototype.subscribe = function(opt_options) {};\n\n/** @return {!Promise} */\nPushManager.prototype.getSubscription = function() {};\n\n/** @return {!Promise} */\n// This is commented out since it has not been implemented yet in Chrome beta.\n// Uncomment once it is available.\n// PushManager.prototype.hasPermission = function() {};\n\n/**\n * @see https://wicg.github.io/BackgroundSync/spec/#sync-manager-interface\n * @constructor\n */\nfunction SyncManager() {}\n\n/**\n * @param {string} tag\n * @return {!Promise}\n */\nSyncManager.prototype.register = function(tag) {}\n\n/**\n * @return {!Promise>}\n */\nSyncManager.prototype.getTags = function() {}\n\n/**\n * @see https://wicg.github.io/BackgroundSync/spec/#sync-event\n * @constructor\n * @extends{ExtendableEvent}\n */\nfunction SyncEvent() {}\n\n/** @type {string} */\nSyncEvent.prototype.tag;\n\n/** @type {boolean} */\nSyncEvent.prototype.lastChance;\n\n/**\n * @see http://www.w3.org/TR/push-api/#idl-def-PushMessageData\n * @constructor\n */\nfunction PushMessageData() {}\n\n/** @return {!ArrayBuffer} */\nPushMessageData.prototype.arrayBuffer = function() {};\n\n/** @return {!Blob} */\nPushMessageData.prototype.blob = function() {};\n\n/** @return {*} */\nPushMessageData.prototype.json = function() {};\n\n/** @return {string} */\nPushMessageData.prototype.text = function() {};\n\n\n/**\n * @see http://www.w3.org/TR/push-api/#idl-def-PushEvent\n * @constructor\n * @param {string} type\n * @param {!ExtendableEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction PushEvent(type, opt_eventInitDict) {}\n\n/** @type {?PushMessageData} */\nPushEvent.prototype.data;\n\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-registration-interface\n * @interface\n * @extends {EventTarget}\n */\nfunction ServiceWorkerRegistration() {}\n\n/** @type {ServiceWorker} */\nServiceWorkerRegistration.prototype.installing;\n\n/** @type {ServiceWorker} */\nServiceWorkerRegistration.prototype.waiting;\n\n/** @type {ServiceWorker} */\nServiceWorkerRegistration.prototype.active;\n\n/** @type {NavigationPreloadManager} */\nServiceWorkerRegistration.prototype.navigationPreload;\n\n/** @type {string} */\nServiceWorkerRegistration.prototype.scope;\n\n/** @return {!Promise} */\nServiceWorkerRegistration.prototype.unregister = function() {};\n\n/** @type {?function(!Event)} */\nServiceWorkerRegistration.prototype.onupdatefound;\n\n/** @return {!Promise} */\nServiceWorkerRegistration.prototype.update = function() {};\n\n/**\n * @see https://w3c.github.io/push-api/\n * @type {!PushManager}\n */\nServiceWorkerRegistration.prototype.pushManager;\n\n/**\n * @see https://notifications.spec.whatwg.org/#service-worker-api\n * @param {string} title\n * @param {NotificationOptions=} opt_options\n * @return {!Promise}\n */\nServiceWorkerRegistration.prototype.showNotification =\n function(title, opt_options) {};\n\n/**\n * @see https://notifications.spec.whatwg.org/#service-worker-api\n * @param {!GetNotificationOptions=} opt_filter\n * @return {!Promise>}\n */\nServiceWorkerRegistration.prototype.getNotifications = function(opt_filter) {};\n\n/**\n * @see https://wicg.github.io/BackgroundSync/spec/#service-worker-registration-extensions\n * @type {!SyncManager}\n */\nServiceWorkerRegistration.prototype.sync;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-container-interface\n * @interface\n * @extends {EventTarget}\n */\nfunction ServiceWorkerContainer() {}\n\n/** @type {?ServiceWorker} */\nServiceWorkerContainer.prototype.controller;\n\n/** @type {!Promise} */\nServiceWorkerContainer.prototype.ready;\n\n/**\n * @param {string} scriptURL\n * @param {RegistrationOptions=} opt_options\n * @return {!Promise}\n */\nServiceWorkerContainer.prototype.register = function(scriptURL, opt_options) {};\n\n/**\n * @param {string=} opt_documentURL\n * @return {!Promise}\n */\nServiceWorkerContainer.prototype.getRegistration = function(opt_documentURL) {};\n\n/**\n * @return {!Promise>}\n */\nServiceWorkerContainer.prototype.getRegistrations = function() {};\n\n/** @type {?function(!Event): void} */\nServiceWorkerContainer.prototype.oncontrollerchange;\n\n/** @type {?function(!ExtendableMessageEvent): void} */\nServiceWorkerContainer.prototype.onmessage;\n\n/** @type {?function(!ErrorEvent): void} */\nServiceWorkerContainer.prototype.onerror;\n\n/**\n * @typedef {{scope: (string|undefined), useCache: (boolean|undefined), updateViaCache: (string|undefined)}}\n */\nvar RegistrationOptions;\n\n/** @type {!ServiceWorkerContainer} */\nNavigator.prototype.serviceWorker;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-global-scope-interface\n * @interface\n * @extends {WorkerGlobalScope}\n */\nfunction ServiceWorkerGlobalScope() {}\n\n/** @type {!Cache} */\nServiceWorkerGlobalScope.prototype.scriptCache;\n\n/** @type {!CacheStorage} */\nServiceWorkerGlobalScope.prototype.caches;\n\n/** @type {!ServiceWorkerClients} */\nServiceWorkerGlobalScope.prototype.clients;\n\n/** @type {string} */\nServiceWorkerGlobalScope.prototype.scope;\n\n/** @type {!ServiceWorkerRegistration} */\nServiceWorkerGlobalScope.prototype.registration;\n\n/** @return {!Promise} */\nServiceWorkerGlobalScope.prototype.skipWaiting = function() {};\n\n/** @type {!Console} */\nServiceWorkerGlobalScope.prototype.console;\n\n/** @type {?function(!InstallEvent)} */\nServiceWorkerGlobalScope.prototype.oninstall;\n\n/** @type {?function(!ExtendableEvent)} */\nServiceWorkerGlobalScope.prototype.onactivate;\n\n/** @type {?function(!FetchEvent)} */\nServiceWorkerGlobalScope.prototype.onfetch;\n\n/**\n * TODO(mtragut): This handler should get a custom event in the future.\n * @type {?function(!Event)}\n */\nServiceWorkerGlobalScope.prototype.onbeforeevicted;\n\n/**\n * TODO(mtragut): This handler should get a custom event in the future.\n * @type {?function(!Event)}\n */\nServiceWorkerGlobalScope.prototype.onevicted;\n\n/** @type {?function(!MessageEvent)} */\nServiceWorkerGlobalScope.prototype.onmessage;\n\n/**\n * While not strictly correct, this should be effectively correct. Notification\n * is the Notification constructor but calling it from the Service Worker throws\n * (https://notifications.spec.whatwg.org/#constructors) so its only use is as\n * an object holding some static properties (note that requestPermission is only\n * exposed to window context - https://notifications.spec.whatwg.org/#api).\n *\n * @type {{\n * permission: string,\n * maxActions: number,\n * }}\n */\nServiceWorkerGlobalScope.prototype.Notification;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-client-interface\n * @constructor\n */\nfunction ServiceWorkerClient() {}\n\n/** @type {!Promise} */\nServiceWorkerClient.prototype.ready;\n\n/** @type {boolean} */\nServiceWorkerClient.prototype.hidden;\n\n/** @type {boolean} */\nServiceWorkerClient.prototype.focused;\n\n/** @type {VisibilityState} */\nServiceWorkerClient.prototype.visibilityState;\n\n/** @type {string} */\nServiceWorkerClient.prototype.url;\n\n/** @type {string} */\nServiceWorkerClient.prototype.id;\n\n/**\n * // TODO(mtragut): Possibly replace the type with enum ContextFrameType once\n * the enum is defined.\n * @type {string}\n */\nServiceWorkerClient.prototype.frameType;\n\n/**\n * @param {*} message\n * @param {(!Array|undefined)=} opt_transfer\n * @return {undefined}\n */\nServiceWorkerClient.prototype.postMessage = function(message, opt_transfer) {};\n\n/** @return {!Promise} */\nServiceWorkerClient.prototype.focus = function() {};\n\n/**\n * @param {string} url\n * @return {!Promise}\n */\nServiceWorkerClient.prototype.navigate = function(url) {};\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-clients-interface\n * @interface\n */\nfunction ServiceWorkerClients() {}\n\n/**\n * Deprecated in Chrome M43+, use matchAll instead. Reference:\n * https://github.com/slightlyoff/ServiceWorker/issues/610.\n * TODO(joeltine): Remove when getAll is fully deprecated.\n * @param {ServiceWorkerClientQueryOptions=} opt_options\n * @return {!Promise>}\n */\nServiceWorkerClients.prototype.getAll = function(opt_options) {};\n\n/**\n * @param {ServiceWorkerClientQueryOptions=} opt_options\n * @return {!Promise>}\n */\nServiceWorkerClients.prototype.matchAll = function(opt_options) {};\n\n/**\n * @return {!Promise}\n */\nServiceWorkerClients.prototype.claim = function() {};\n\n/**\n * @param {string} url\n * @return {!Promise}\n */\nServiceWorkerClients.prototype.openWindow = function(url) {};\n\n/**\n * @param {string} id\n * @return {!Promise}\n */\nServiceWorkerClients.prototype.get = function(id) {};\n\n/** @typedef {{includeUncontrolled: (boolean|undefined)}} */\nvar ServiceWorkerClientQueryOptions;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#cache-interface\n * @interface\n */\nfunction Cache() {}\n\n/**\n * @param {!RequestInfo} request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise}\n */\nCache.prototype.match = function(request, opt_options) {};\n\n/**\n * @param {RequestInfo=} opt_request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise>}\n */\nCache.prototype.matchAll = function(opt_request, opt_options) {};\n\n/**\n * @param {!RequestInfo} request\n * @return {!Promise}\n */\nCache.prototype.add = function(request) {};\n\n/**\n * @param {!Array} requests\n * @return {!Promise}\n */\nCache.prototype.addAll = function(requests) {};\n\n/**\n * @param {!RequestInfo} request\n * @param {!Response} response\n * @return {!Promise}\n */\nCache.prototype.put = function(request, response) {};\n\n/**\n * @param {!RequestInfo} request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise}\n */\nCache.prototype.delete = function(request, opt_options) {};\n\n/**\n * @param {RequestInfo=} opt_request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise>}\n */\nCache.prototype.keys = function(opt_request, opt_options) {};\n\n/**\n * @typedef {{\n * ignoreSearch: (boolean|undefined),\n * ignoreMethod: (boolean|undefined),\n * ignoreVary: (boolean|undefined),\n * prefixMatch: (boolean|undefined),\n * cacheName: (string|undefined)\n * }}\n */\nvar CacheQueryOptions;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#cache-storage-interface\n * @interface\n */\nfunction CacheStorage() {}\n\n/**\n * Window instances have a property called caches which implements CacheStorage\n * @see https://www.w3.org/TR/service-workers/#cache-objects\n * @type {!CacheStorage}\n */\nWindow.prototype.caches;\n\n/**\n * @param {!RequestInfo} request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise}\n */\nCacheStorage.prototype.match = function(request, opt_options) {};\n\n/**\n * @param {string} cacheName\n * @return {!Promise}\n */\nCacheStorage.prototype.has = function(cacheName) {};\n\n/**\n * @param {string} cacheName\n * @return {!Promise}\n */\nCacheStorage.prototype.open = function(cacheName) {};\n\n/**\n * @param {string} cacheName\n * @return {!Promise}\n */\nCacheStorage.prototype.delete = function(cacheName) {};\n\n/** @return {!Promise>} */\nCacheStorage.prototype.keys = function() {};\n\n/**\n * @see http://www.w3.org/TR/service-workers/#extendable-event-interface\n * @constructor\n * @param {string} type\n * @param {ExtendableEventInit=} opt_eventInitDict\n * @extends {Event}\n */\nfunction ExtendableEvent(type, opt_eventInitDict) {}\n\n/**\n * @param {IThenable} f\n * @return {undefined}\n */\nExtendableEvent.prototype.waitUntil = function(f) {};\n\n/**\n * @typedef {{\n * bubbles: (boolean|undefined),\n * cancelable: (boolean|undefined)\n * }}\n */\nvar ExtendableEventInit;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#install-event-interface\n * @constructor\n * @param {string} type\n * @param {InstallEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction InstallEvent(type, opt_eventInitDict) {}\n\n/** @type {ServiceWorker} */\nExtendableEvent.prototype.activeWorker;\n\n/**\n * @typedef {{\n * bubbles: (boolean|undefined),\n * cancelable: (boolean|undefined),\n * activeWorker: (!ServiceWorker|undefined)\n * }}\n */\nvar InstallEventInit;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#fetch-event-interface\n * @constructor\n * @param {string} type\n * @param {FetchEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction FetchEvent(type, opt_eventInitDict) {}\n\n/** @type {!Request} */\nFetchEvent.prototype.request;\n\n/**\n * @type {!Promise}\n */\nFetchEvent.prototype.preloadResponse;\n\n/**\n * @type {!ServiceWorkerClient}\n * @deprecated\n */\nFetchEvent.prototype.client;\n\n/** @type {?string} */\nFetchEvent.prototype.clientId;\n\n/** @type {boolean} */\nFetchEvent.prototype.isReload;\n\n/** @type {?string} */\nFetchEvent.prototype.resultingClientId;\n\n/**\n * @param {(Response|IThenable)} r\n * @return {undefined}\n */\nFetchEvent.prototype.respondWith = function(r) {};\n\n/**\n * @param {string} url\n * @return {!Promise}\n */\nFetchEvent.prototype.forwardTo = function(url) {};\n\n/**\n * @return {!Promise}\n */\nFetchEvent.prototype.default = function() {};\n\n/**\n * @typedef {{\n * bubbles: (boolean|undefined),\n * cancelable: (boolean|undefined),\n * request: (!Request|undefined),\n * preloadResponse: (!Promise),\n * client: (!ServiceWorkerClient|undefined),\n * isReload: (boolean|undefined)\n * }}\n */\nvar FetchEventInit;\n\n\n/**\n * @see https://www.w3.org/TR/service-workers/#extendablemessage-event-interface\n * @param {string} type\n * @param {!ExtendableMessageEventInit=} opt_eventInitDict\n * @constructor\n * @extends {ExtendableEvent}\n * @template T\n */\nfunction ExtendableMessageEvent(type, opt_eventInitDict) {};\n\n/** @type {T} */\nExtendableMessageEvent.prototype.data;\n\n/** @type {string} */\nExtendableMessageEvent.prototype.origin;\n\n/** @type {string} */\nExtendableMessageEvent.prototype.lastEventId;\n\n/** @type {?ServiceWorkerClient|?ServiceWorker|?MessagePort} */\nExtendableMessageEvent.prototype.source;\n\n/** @type {?Array} */\nExtendableMessageEvent.prototype.ports;\n\n\n/**\n * @see https://www.w3.org/TR/service-workers/#extendablemessage-event-init-dictionary\n * @record\n * @extends {ExtendableEventInit}\n * @template T\n */\nfunction ExtendableMessageEventInit() {};\n\n/** @type {T} */\nExtendableMessageEventInit.prototype.data;\n\n/** @type {string|undefined} */\nExtendableMessageEventInit.prototype.origin;\n\n/** @type {string|undefined} */\nExtendableMessageEventInit.prototype.lastEventId;\n\n/** @type {!ServiceWorkerClient|!ServiceWorker|!MessagePort|undefined} */\nExtendableMessageEventInit.prototype.source;\n\n/** @type {!Array|undefined} */\nExtendableMessageEventInit.prototype.ports;\n", --"externs/w3c_speech.js":'/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Speech Input 2010 draft API and the\n * 2012 Web Speech draft API (in progress).\n * 2010 Speech Input API:\n * http://www.w3.org/2005/Incubator/htmlspeech/2010/10/google-api-draft.html\n * 2012 Web Speech API:\n * http://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html\n * This file contains only those functions/properties that are actively\n * used in the Voice Search experiment. Because the draft is under discussion\n * and constantly evolving, this file does not attempt to stay in sync with it.\n *\n * @externs\n * @author manas@google.com (Manas Tungare)\n */\n\n// W3C Speech Input API implemented in Chrome M12\n/**\n * @constructor\n * @extends {UIEvent}\n */\nfunction SpeechInputEvent() {}\n\n/** @type {SpeechInputResultList} */\nSpeechInputEvent.prototype.results;\n\n\n/**\n * @constructor\n */\nfunction SpeechInputResultList() {}\n\n/** @type {number} */\nSpeechInputResultList.prototype.length;\n\n\n/**\n * @constructor\n */\nfunction SpeechInputResult() {}\n\n/** @type {string} */\nSpeechInputResult.prototype.utterance;\n\n/** @type {number} */\nSpeechInputResult.prototype.confidence;\n\n\n// HTMLInputElement\n/** @type {boolean} */\nHTMLInputElement.prototype.webkitspeech;\n\n/** @type {?function (Event)} */\nHTMLInputElement.prototype.onwebkitspeechchange;\n\n\n\n// W3C Web Speech API implemented in Chrome M23\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction SpeechRecognition() {}\n\n/** @override */\nSpeechRecognition.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSpeechRecognition.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSpeechRecognition.prototype.dispatchEvent = function(evt) {};\n\n/** @type {SpeechGrammarList} */\nSpeechRecognition.prototype.grammars;\n\n/** @type {string} */\nSpeechRecognition.prototype.lang;\n\n/** @type {boolean} */\nSpeechRecognition.prototype.continuous;\n\n/** @type {boolean} */\nSpeechRecognition.prototype.interimResults;\n\n/** @type {number} */\nSpeechRecognition.prototype.maxAlternatives;\n\n/** @type {string} */\nSpeechRecognition.prototype.serviceURI;\n\n/** @type {function()} */\nSpeechRecognition.prototype.start;\n\n/** @type {function()} */\nSpeechRecognition.prototype.stop;\n\n/** @type {function()} */\nSpeechRecognition.prototype.abort;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onaudiostart;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onsoundstart;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onspeechstart;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onspeechend;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onsoundend;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onaudioend;\n\n/** @type {?function(!SpeechRecognitionEvent)} */\nSpeechRecognition.prototype.onresult;\n\n/** @type {?function(!SpeechRecognitionEvent)} */\nSpeechRecognition.prototype.onnomatch;\n\n/** @type {?function(!SpeechRecognitionError)} */\nSpeechRecognition.prototype.onerror;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onstart;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onend;\n\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction SpeechRecognitionError() {}\n\n/** @type {string} */\nSpeechRecognitionError.prototype.error;\n\n/** @type {string} */\nSpeechRecognitionError.prototype.message;\n\n\n/**\n * @constructor\n */\nfunction SpeechRecognitionAlternative() {}\n\n/** @type {string} */\nSpeechRecognitionAlternative.prototype.transcript;\n\n/** @type {number} */\nSpeechRecognitionAlternative.prototype.confidence;\n\n\n/**\n * @constructor\n */\nfunction SpeechRecognitionResult() {}\n\n/**\n * @type {number}\n */\nSpeechRecognitionResult.prototype.length;\n\n/**\n * @type {function(number): SpeechRecognitionAlternative}\n */\nSpeechRecognitionResult.prototype.item = function(index) {};\n\n/**\n * @type {boolean}\n */\nSpeechRecognitionResult.prototype.isFinal;\n\n\n/**\n * @constructor\n */\nfunction SpeechRecognitionResultList() {}\n\n/**\n * @type {number}\n */\nSpeechRecognitionResultList.prototype.length;\n\n/**\n * @type {function(number): SpeechRecognitionResult}\n */\nSpeechRecognitionResultList.prototype.item = function(index) {};\n\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction SpeechRecognitionEvent() {}\n\n/** @type {number} */\nSpeechRecognitionEvent.prototype.resultIndex;\n\n/** @type {SpeechRecognitionResultList} */\nSpeechRecognitionEvent.prototype.results;\n\n/** @type {*} */\nSpeechRecognitionEvent.prototype.interpretation;\n\n/** @type {Document} */\nSpeechRecognitionEvent.prototype.emma;\n\n\n/**\n * @constructor\n */\nfunction SpeechGrammar() {}\n\n/** @type {string} */\nSpeechGrammar.prototype.src;\n\n/** @type {number} */\nSpeechGrammar.prototype.weight;\n\n\n/**\n * @constructor\n */\nfunction SpeechGrammarList() {}\n\n/**\n * @type {number}\n */\nSpeechGrammarList.prototype.length;\n\n/**\n * @type {function(number): SpeechGrammar}\n */\nSpeechGrammarList.prototype.item = function(index) {};\n\n/**\n * @type {function(string, number)}\n */\nSpeechGrammarList.prototype.addFromUri = function(src, weight) {};\n\n/**\n * @type {function(string, number)}\n */\nSpeechGrammarList.prototype.addFromString = function(str, weight) {};\n\n\n// Webkit implementations of Web Speech API\n/**\n * @constructor\n * @extends {SpeechGrammarList}\n */\nfunction webkitSpeechGrammarList() {}\n\n\n/**\n * @constructor\n * @extends {SpeechGrammar}\n */\nfunction webkitSpeechGrammar() {}\n\n\n/**\n * @constructor\n * @extends {SpeechRecognitionEvent}\n */\nfunction webkitSpeechRecognitionEvent() {}\n\n\n/**\n * @constructor\n * @extends {SpeechRecognitionError}\n */\nfunction webkitSpeechRecognitionError() {}\n\n\n/**\n * @constructor\n * @extends {SpeechRecognition}\n */\nfunction webkitSpeechRecognition() {}\n\n\n\n// W3C Web Speech Synthesis API is implemented in Chrome M33\n/**\n * @type {SpeechSynthesis}\n * @see https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section\n */\nvar speechSynthesis;\n\n\n/**\n * @constructor\n * @param {string} text\n */\nfunction SpeechSynthesisUtterance(text) {}\n\n/** @type {string} */\nSpeechSynthesisUtterance.prototype.text;\n\n/** @type {string} */\nSpeechSynthesisUtterance.prototype.lang;\n\n/** @type {number} */\nSpeechSynthesisUtterance.prototype.pitch;\n\n/** @type {number} */\nSpeechSynthesisUtterance.prototype.rate;\n\n/** @type {SpeechSynthesisVoice} */\nSpeechSynthesisUtterance.prototype.voice;\n\n/** @type {number} */\nSpeechSynthesisUtterance.prototype.volume;\n\n/**\n * @param {Event} event\n */\nSpeechSynthesisUtterance.prototype.onstart = function(event) {};\n\n/**\n * @param {Event} event\n */\nSpeechSynthesisUtterance.prototype.onend = function(event) {};\n\n/**\n * @param {Event} event\n */\nSpeechSynthesisUtterance.prototype.onerror = function(event) {};\n\n/**\n * @constructor\n */\nfunction SpeechSynthesisVoice() {}\n\n/** @type {string} */\nSpeechSynthesisVoice.prototype.voiceURI;\n\n/** @type {string} */\nSpeechSynthesisVoice.prototype.name;\n\n/** @type {string} */\nSpeechSynthesisVoice.prototype.lang;\n\n/** @type {boolean} */\nSpeechSynthesisVoice.prototype.localService;\n\n/** @type {boolean} */\nSpeechSynthesisVoice.prototype.default;\n\n\n/**\n * @constructor\n * @extends {Array}\n */\nfunction SpeechSynthesisVoiceList() {}\n\n\n/**\n * @interface\n * @extends {EventTarget}\n */\nfunction SpeechSynthesis() {}\n\n/**\n * @param {SpeechSynthesisUtterance} utterance\n * @return {undefined}\n */\nSpeechSynthesis.prototype.speak = function(utterance) {};\n\n/** @type {function()} */\nSpeechSynthesis.prototype.cancel;\n\n/** @type {function()} */\nSpeechSynthesis.prototype.pause;\n\n/** @type {function()} */\nSpeechSynthesis.prototype.resume;\n\n/**\n * @return {SpeechSynthesisVoiceList}\n */\nSpeechSynthesis.prototype.getVoices = function() {};\n\n/**\n * @param {Event} event\n * @see https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi-errata.html\n */\nSpeechSynthesis.prototype.onvoiceschanged = function(event) {};\n', -+"externs/w3c_selectors.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Selectors API.\n * This file depends on w3c_dom1.js.\n * @see http://www.w3.org/TR/selectors-api2/\n *\n * @externs\n * @author mihaip@9oo91e.qjz9zk (Mihai Parparita)\n */\n\n/**\n * @param {string} selectors\n * @return {?Element}\n * @override\n * @nosideeffects\n */\nDocument.prototype.querySelector = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @return {!NodeList}\n * @override\n * @nosideeffects\n */\nDocument.prototype.querySelectorAll = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @return {?Element}\n * @override\n * @nosideeffects\n */\nElement.prototype.querySelector = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @return {!NodeList}\n * @override\n * @nosideeffects\n */\nElement.prototype.querySelectorAll = function(selectors) {};\n\n/**\n * https://dom.spec.whatwg.org/#dom-element-closest\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Element.closest\n * @param {string} selectors\n * @return {?Element}\n * @nosideeffects\n */\nElement.prototype.closest = function(selectors) {};\n\n/**\n * https://dom.spec.whatwg.org/#dom-element-matches\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Element.matches\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.matches = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @param {(Node|NodeList)=} refNodes\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.matchesSelector = function(selectors, refNodes) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/Node.mozMatchesSelector\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.mozMatchesSelector = function(selectors) {};\n\n/**\n * @see http://developer.apple.com/library/safari/documentation/WebKit/Reference/ElementClassRef/Element/Element.html\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.webkitMatchesSelector = function(selectors) {};\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ff975201.aspx\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.msMatchesSelector = function(selectors) {};\n\n/**\n * @see http://www.opera.com/docs/changelogs/windows/1150/\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.oMatchesSelector = function(selectors) {};\n', -+"externs/w3c_serviceworker.js":"/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Externs for service worker.\n *\n * @see http://www.w3.org/TR/service-workers/\n * @externs\n */\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-interface\n * @constructor\n * @extends {Worker}\n */\nfunction ServiceWorker() {}\n\n/** @type {string} */\nServiceWorker.prototype.scriptURL;\n\n/** @type {ServiceWorkerState} */\nServiceWorker.prototype.state;\n\n/** @type {?function(!Event)} */\nServiceWorker.prototype.onstatechange;\n\n/**\n * Set of possible string values: 'installing', 'installed', 'activating',\n * 'activated', 'redundant'.\n * @typedef {string}\n */\nvar ServiceWorkerState;\n\n/**\n * @see https://w3c.github.io/ServiceWorker/#navigationpreloadmanager\n * @constructor\n */\nfunction NavigationPreloadManager() {}\n\n/** @return {!Promise} */\nNavigationPreloadManager.prototype.enable = function() {};\n\n/** @return {!Promise} */\nNavigationPreloadManager.prototype.disable = function() {};\n\n/**\n * @param {string=} value\n * @return {!Promise}\n */\nNavigationPreloadManager.prototype.setHeaderValue = function(value) {};\n\n/** @return {!Promise} */\nNavigationPreloadManager.prototype.getState = function() {};\n\n/**\n * @typedef {{\n * enabled: (boolean|undefined),\n * headerValue: (string|undefined)\n * }}\n */\nvar NavigationPreloadState;\n\n/** @record */\nfunction PushSubscriptionOptions() {}\n\n/** @type {ArrayBuffer|undefined} */\nPushSubscriptionOptions.prototype.applicationServerKey;\n\n/** @type {boolean|undefined} */\nPushSubscriptionOptions.prototype.userVisibleOnly;\n\n/** @record */\nfunction PushSubscriptionOptionsInit() {}\n\n/** @type {BufferSource|string|undefined} */\nPushSubscriptionOptionsInit.prototype.applicationServerKey;\n\n/** @type {boolean|undefined} */\nPushSubscriptionOptionsInit.prototype.userVisibleOnly;\n\n\n/**\n * @see https://w3c.github.io/push-api/\n * @constructor\n */\nfunction PushSubscription() {}\n\n/** @type {string} */\nPushSubscription.prototype.endpoint;\n\n/**\n * Please note there is an intent to deprecate this field in Chrome 43 or 44.\n * See https://www.ch40mestatus.qjz9zk/feature/5283829761703936.\n * @type {string}\n */\nPushSubscription.prototype.subscriptionId;\n\n/** @type {!PushSubscriptionOptions} */\nPushSubscription.prototype.options;\n\n/** @return {!Promise} */\nPushSubscription.prototype.unsubscribe = function() {};\n\n/** @enum {string} */\n// This is commented out since it has not been implemented yet in Chrome beta.\n// Uncomment once it is available.\n// var PushPermissionStatus = {\n// GRANTED: 'granted',\n// DENIED: 'denied',\n// DEFAULT: 'default'\n//};\n\n/**\n * @see https://w3c.github.io/push-api/#idl-def-PushManager\n * @constructor\n */\nfunction PushManager() {}\n\n/**\n * @param {PushSubscriptionOptionsInit=} opt_options\n * @return {!Promise}\n */\nPushManager.prototype.subscribe = function(opt_options) {};\n\n/** @return {!Promise} */\nPushManager.prototype.getSubscription = function() {};\n\n/** @return {!Promise} */\n// This is commented out since it has not been implemented yet in Chrome beta.\n// Uncomment once it is available.\n// PushManager.prototype.hasPermission = function() {};\n\n/**\n * @see https://wicg.github.io/BackgroundSync/spec/#sync-manager-interface\n * @constructor\n */\nfunction SyncManager() {}\n\n/**\n * @param {string} tag\n * @return {!Promise}\n */\nSyncManager.prototype.register = function(tag) {}\n\n/**\n * @return {!Promise>}\n */\nSyncManager.prototype.getTags = function() {}\n\n/**\n * @see https://wicg.github.io/BackgroundSync/spec/#sync-event\n * @constructor\n * @extends{ExtendableEvent}\n */\nfunction SyncEvent() {}\n\n/** @type {string} */\nSyncEvent.prototype.tag;\n\n/** @type {boolean} */\nSyncEvent.prototype.lastChance;\n\n/**\n * @see http://www.w3.org/TR/push-api/#idl-def-PushMessageData\n * @constructor\n */\nfunction PushMessageData() {}\n\n/** @return {!ArrayBuffer} */\nPushMessageData.prototype.arrayBuffer = function() {};\n\n/** @return {!Blob} */\nPushMessageData.prototype.blob = function() {};\n\n/** @return {*} */\nPushMessageData.prototype.json = function() {};\n\n/** @return {string} */\nPushMessageData.prototype.text = function() {};\n\n\n/**\n * @see http://www.w3.org/TR/push-api/#idl-def-PushEvent\n * @constructor\n * @param {string} type\n * @param {!ExtendableEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction PushEvent(type, opt_eventInitDict) {}\n\n/** @type {?PushMessageData} */\nPushEvent.prototype.data;\n\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-registration-interface\n * @interface\n * @extends {EventTarget}\n */\nfunction ServiceWorkerRegistration() {}\n\n/** @type {ServiceWorker} */\nServiceWorkerRegistration.prototype.installing;\n\n/** @type {ServiceWorker} */\nServiceWorkerRegistration.prototype.waiting;\n\n/** @type {ServiceWorker} */\nServiceWorkerRegistration.prototype.active;\n\n/** @type {NavigationPreloadManager} */\nServiceWorkerRegistration.prototype.navigationPreload;\n\n/** @type {string} */\nServiceWorkerRegistration.prototype.scope;\n\n/** @return {!Promise} */\nServiceWorkerRegistration.prototype.unregister = function() {};\n\n/** @type {?function(!Event)} */\nServiceWorkerRegistration.prototype.onupdatefound;\n\n/** @return {!Promise} */\nServiceWorkerRegistration.prototype.update = function() {};\n\n/**\n * @see https://w3c.github.io/push-api/\n * @type {!PushManager}\n */\nServiceWorkerRegistration.prototype.pushManager;\n\n/**\n * @see https://notifications.spec.whatwg.org/#service-worker-api\n * @param {string} title\n * @param {NotificationOptions=} opt_options\n * @return {!Promise}\n */\nServiceWorkerRegistration.prototype.showNotification =\n function(title, opt_options) {};\n\n/**\n * @see https://notifications.spec.whatwg.org/#service-worker-api\n * @param {!GetNotificationOptions=} opt_filter\n * @return {!Promise>}\n */\nServiceWorkerRegistration.prototype.getNotifications = function(opt_filter) {};\n\n/**\n * @see https://wicg.github.io/BackgroundSync/spec/#service-worker-registration-extensions\n * @type {!SyncManager}\n */\nServiceWorkerRegistration.prototype.sync;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-container-interface\n * @interface\n * @extends {EventTarget}\n */\nfunction ServiceWorkerContainer() {}\n\n/** @type {?ServiceWorker} */\nServiceWorkerContainer.prototype.controller;\n\n/** @type {!Promise} */\nServiceWorkerContainer.prototype.ready;\n\n/**\n * @param {string} scriptURL\n * @param {RegistrationOptions=} opt_options\n * @return {!Promise}\n */\nServiceWorkerContainer.prototype.register = function(scriptURL, opt_options) {};\n\n/**\n * @param {string=} opt_documentURL\n * @return {!Promise}\n */\nServiceWorkerContainer.prototype.getRegistration = function(opt_documentURL) {};\n\n/**\n * @return {!Promise>}\n */\nServiceWorkerContainer.prototype.getRegistrations = function() {};\n\n/** @type {?function(!Event): void} */\nServiceWorkerContainer.prototype.oncontrollerchange;\n\n/** @type {?function(!ExtendableMessageEvent): void} */\nServiceWorkerContainer.prototype.onmessage;\n\n/** @type {?function(!ErrorEvent): void} */\nServiceWorkerContainer.prototype.onerror;\n\n/**\n * @typedef {{scope: (string|undefined), useCache: (boolean|undefined), updateViaCache: (string|undefined)}}\n */\nvar RegistrationOptions;\n\n/** @type {!ServiceWorkerContainer} */\nNavigator.prototype.serviceWorker;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-global-scope-interface\n * @interface\n * @extends {WorkerGlobalScope}\n */\nfunction ServiceWorkerGlobalScope() {}\n\n/** @type {!Cache} */\nServiceWorkerGlobalScope.prototype.scriptCache;\n\n/** @type {!CacheStorage} */\nServiceWorkerGlobalScope.prototype.caches;\n\n/** @type {!ServiceWorkerClients} */\nServiceWorkerGlobalScope.prototype.clients;\n\n/** @type {string} */\nServiceWorkerGlobalScope.prototype.scope;\n\n/** @type {!ServiceWorkerRegistration} */\nServiceWorkerGlobalScope.prototype.registration;\n\n/** @return {!Promise} */\nServiceWorkerGlobalScope.prototype.skipWaiting = function() {};\n\n/** @type {!Console} */\nServiceWorkerGlobalScope.prototype.console;\n\n/** @type {?function(!InstallEvent)} */\nServiceWorkerGlobalScope.prototype.oninstall;\n\n/** @type {?function(!ExtendableEvent)} */\nServiceWorkerGlobalScope.prototype.onactivate;\n\n/** @type {?function(!FetchEvent)} */\nServiceWorkerGlobalScope.prototype.onfetch;\n\n/**\n * TODO(mtragut): This handler should get a custom event in the future.\n * @type {?function(!Event)}\n */\nServiceWorkerGlobalScope.prototype.onbeforeevicted;\n\n/**\n * TODO(mtragut): This handler should get a custom event in the future.\n * @type {?function(!Event)}\n */\nServiceWorkerGlobalScope.prototype.onevicted;\n\n/** @type {?function(!MessageEvent)} */\nServiceWorkerGlobalScope.prototype.onmessage;\n\n/**\n * While not strictly correct, this should be effectively correct. Notification\n * is the Notification constructor but calling it from the Service Worker throws\n * (https://notifications.spec.whatwg.org/#constructors) so its only use is as\n * an object holding some static properties (note that requestPermission is only\n * exposed to window context - https://notifications.spec.whatwg.org/#api).\n *\n * @type {{\n * permission: string,\n * maxActions: number,\n * }}\n */\nServiceWorkerGlobalScope.prototype.Notification;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-client-interface\n * @constructor\n */\nfunction ServiceWorkerClient() {}\n\n/** @type {!Promise} */\nServiceWorkerClient.prototype.ready;\n\n/** @type {boolean} */\nServiceWorkerClient.prototype.hidden;\n\n/** @type {boolean} */\nServiceWorkerClient.prototype.focused;\n\n/** @type {VisibilityState} */\nServiceWorkerClient.prototype.visibilityState;\n\n/** @type {string} */\nServiceWorkerClient.prototype.url;\n\n/** @type {string} */\nServiceWorkerClient.prototype.id;\n\n/**\n * // TODO(mtragut): Possibly replace the type with enum ContextFrameType once\n * the enum is defined.\n * @type {string}\n */\nServiceWorkerClient.prototype.frameType;\n\n/**\n * @param {*} message\n * @param {(!Array|undefined)=} opt_transfer\n * @return {undefined}\n */\nServiceWorkerClient.prototype.postMessage = function(message, opt_transfer) {};\n\n/** @return {!Promise} */\nServiceWorkerClient.prototype.focus = function() {};\n\n/**\n * @param {string} url\n * @return {!Promise}\n */\nServiceWorkerClient.prototype.navigate = function(url) {};\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-clients-interface\n * @interface\n */\nfunction ServiceWorkerClients() {}\n\n/**\n * Deprecated in Chrome M43+, use matchAll instead. Reference:\n * https://github.com/slightlyoff/ServiceWorker/issues/610.\n * TODO(joeltine): Remove when getAll is fully deprecated.\n * @param {ServiceWorkerClientQueryOptions=} opt_options\n * @return {!Promise>}\n */\nServiceWorkerClients.prototype.getAll = function(opt_options) {};\n\n/**\n * @param {ServiceWorkerClientQueryOptions=} opt_options\n * @return {!Promise>}\n */\nServiceWorkerClients.prototype.matchAll = function(opt_options) {};\n\n/**\n * @return {!Promise}\n */\nServiceWorkerClients.prototype.claim = function() {};\n\n/**\n * @param {string} url\n * @return {!Promise}\n */\nServiceWorkerClients.prototype.openWindow = function(url) {};\n\n/**\n * @param {string} id\n * @return {!Promise}\n */\nServiceWorkerClients.prototype.get = function(id) {};\n\n/** @typedef {{includeUncontrolled: (boolean|undefined)}} */\nvar ServiceWorkerClientQueryOptions;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#cache-interface\n * @interface\n */\nfunction Cache() {}\n\n/**\n * @param {!RequestInfo} request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise}\n */\nCache.prototype.match = function(request, opt_options) {};\n\n/**\n * @param {RequestInfo=} opt_request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise>}\n */\nCache.prototype.matchAll = function(opt_request, opt_options) {};\n\n/**\n * @param {!RequestInfo} request\n * @return {!Promise}\n */\nCache.prototype.add = function(request) {};\n\n/**\n * @param {!Array} requests\n * @return {!Promise}\n */\nCache.prototype.addAll = function(requests) {};\n\n/**\n * @param {!RequestInfo} request\n * @param {!Response} response\n * @return {!Promise}\n */\nCache.prototype.put = function(request, response) {};\n\n/**\n * @param {!RequestInfo} request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise}\n */\nCache.prototype.delete = function(request, opt_options) {};\n\n/**\n * @param {RequestInfo=} opt_request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise>}\n */\nCache.prototype.keys = function(opt_request, opt_options) {};\n\n/**\n * @typedef {{\n * ignoreSearch: (boolean|undefined),\n * ignoreMethod: (boolean|undefined),\n * ignoreVary: (boolean|undefined),\n * prefixMatch: (boolean|undefined),\n * cacheName: (string|undefined)\n * }}\n */\nvar CacheQueryOptions;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#cache-storage-interface\n * @interface\n */\nfunction CacheStorage() {}\n\n/**\n * Window instances have a property called caches which implements CacheStorage\n * @see https://www.w3.org/TR/service-workers/#cache-objects\n * @type {!CacheStorage}\n */\nWindow.prototype.caches;\n\n/**\n * @param {!RequestInfo} request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise}\n */\nCacheStorage.prototype.match = function(request, opt_options) {};\n\n/**\n * @param {string} cacheName\n * @return {!Promise}\n */\nCacheStorage.prototype.has = function(cacheName) {};\n\n/**\n * @param {string} cacheName\n * @return {!Promise}\n */\nCacheStorage.prototype.open = function(cacheName) {};\n\n/**\n * @param {string} cacheName\n * @return {!Promise}\n */\nCacheStorage.prototype.delete = function(cacheName) {};\n\n/** @return {!Promise>} */\nCacheStorage.prototype.keys = function() {};\n\n/**\n * @see http://www.w3.org/TR/service-workers/#extendable-event-interface\n * @constructor\n * @param {string} type\n * @param {ExtendableEventInit=} opt_eventInitDict\n * @extends {Event}\n */\nfunction ExtendableEvent(type, opt_eventInitDict) {}\n\n/**\n * @param {IThenable} f\n * @return {undefined}\n */\nExtendableEvent.prototype.waitUntil = function(f) {};\n\n/**\n * @typedef {{\n * bubbles: (boolean|undefined),\n * cancelable: (boolean|undefined)\n * }}\n */\nvar ExtendableEventInit;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#install-event-interface\n * @constructor\n * @param {string} type\n * @param {InstallEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction InstallEvent(type, opt_eventInitDict) {}\n\n/** @type {ServiceWorker} */\nExtendableEvent.prototype.activeWorker;\n\n/**\n * @typedef {{\n * bubbles: (boolean|undefined),\n * cancelable: (boolean|undefined),\n * activeWorker: (!ServiceWorker|undefined)\n * }}\n */\nvar InstallEventInit;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#fetch-event-interface\n * @constructor\n * @param {string} type\n * @param {FetchEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction FetchEvent(type, opt_eventInitDict) {}\n\n/** @type {!Request} */\nFetchEvent.prototype.request;\n\n/**\n * @type {!Promise}\n */\nFetchEvent.prototype.preloadResponse;\n\n/**\n * @type {!ServiceWorkerClient}\n * @deprecated\n */\nFetchEvent.prototype.client;\n\n/** @type {?string} */\nFetchEvent.prototype.clientId;\n\n/** @type {boolean} */\nFetchEvent.prototype.isReload;\n\n/** @type {?string} */\nFetchEvent.prototype.resultingClientId;\n\n/**\n * @param {(Response|IThenable)} r\n * @return {undefined}\n */\nFetchEvent.prototype.respondWith = function(r) {};\n\n/**\n * @param {string} url\n * @return {!Promise}\n */\nFetchEvent.prototype.forwardTo = function(url) {};\n\n/**\n * @return {!Promise}\n */\nFetchEvent.prototype.default = function() {};\n\n/**\n * @typedef {{\n * bubbles: (boolean|undefined),\n * cancelable: (boolean|undefined),\n * request: (!Request|undefined),\n * preloadResponse: (!Promise),\n * client: (!ServiceWorkerClient|undefined),\n * isReload: (boolean|undefined)\n * }}\n */\nvar FetchEventInit;\n\n\n/**\n * @see https://www.w3.org/TR/service-workers/#extendablemessage-event-interface\n * @param {string} type\n * @param {!ExtendableMessageEventInit=} opt_eventInitDict\n * @constructor\n * @extends {ExtendableEvent}\n * @template T\n */\nfunction ExtendableMessageEvent(type, opt_eventInitDict) {};\n\n/** @type {T} */\nExtendableMessageEvent.prototype.data;\n\n/** @type {string} */\nExtendableMessageEvent.prototype.origin;\n\n/** @type {string} */\nExtendableMessageEvent.prototype.lastEventId;\n\n/** @type {?ServiceWorkerClient|?ServiceWorker|?MessagePort} */\nExtendableMessageEvent.prototype.source;\n\n/** @type {?Array} */\nExtendableMessageEvent.prototype.ports;\n\n\n/**\n * @see https://www.w3.org/TR/service-workers/#extendablemessage-event-init-dictionary\n * @record\n * @extends {ExtendableEventInit}\n * @template T\n */\nfunction ExtendableMessageEventInit() {};\n\n/** @type {T} */\nExtendableMessageEventInit.prototype.data;\n\n/** @type {string|undefined} */\nExtendableMessageEventInit.prototype.origin;\n\n/** @type {string|undefined} */\nExtendableMessageEventInit.prototype.lastEventId;\n\n/** @type {!ServiceWorkerClient|!ServiceWorker|!MessagePort|undefined} */\nExtendableMessageEventInit.prototype.source;\n\n/** @type {!Array|undefined} */\nExtendableMessageEventInit.prototype.ports;\n", -+"externs/w3c_speech.js":'/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Speech Input 2010 draft API and the\n * 2012 Web Speech draft API (in progress).\n * 2010 Speech Input API:\n * http://www.w3.org/2005/Incubator/htmlspeech/2010/10/google-api-draft.html\n * 2012 Web Speech API:\n * http://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html\n * This file contains only those functions/properties that are actively\n * used in the Voice Search experiment. Because the draft is under discussion\n * and constantly evolving, this file does not attempt to stay in sync with it.\n *\n * @externs\n * @author manas@9oo91e.qjz9zk (Manas Tungare)\n */\n\n// W3C Speech Input API implemented in Chrome M12\n/**\n * @constructor\n * @extends {UIEvent}\n */\nfunction SpeechInputEvent() {}\n\n/** @type {SpeechInputResultList} */\nSpeechInputEvent.prototype.results;\n\n\n/**\n * @constructor\n */\nfunction SpeechInputResultList() {}\n\n/** @type {number} */\nSpeechInputResultList.prototype.length;\n\n\n/**\n * @constructor\n */\nfunction SpeechInputResult() {}\n\n/** @type {string} */\nSpeechInputResult.prototype.utterance;\n\n/** @type {number} */\nSpeechInputResult.prototype.confidence;\n\n\n// HTMLInputElement\n/** @type {boolean} */\nHTMLInputElement.prototype.webkitspeech;\n\n/** @type {?function (Event)} */\nHTMLInputElement.prototype.onwebkitspeechchange;\n\n\n\n// W3C Web Speech API implemented in Chrome M23\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction SpeechRecognition() {}\n\n/** @override */\nSpeechRecognition.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSpeechRecognition.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSpeechRecognition.prototype.dispatchEvent = function(evt) {};\n\n/** @type {SpeechGrammarList} */\nSpeechRecognition.prototype.grammars;\n\n/** @type {string} */\nSpeechRecognition.prototype.lang;\n\n/** @type {boolean} */\nSpeechRecognition.prototype.continuous;\n\n/** @type {boolean} */\nSpeechRecognition.prototype.interimResults;\n\n/** @type {number} */\nSpeechRecognition.prototype.maxAlternatives;\n\n/** @type {string} */\nSpeechRecognition.prototype.serviceURI;\n\n/** @type {function()} */\nSpeechRecognition.prototype.start;\n\n/** @type {function()} */\nSpeechRecognition.prototype.stop;\n\n/** @type {function()} */\nSpeechRecognition.prototype.abort;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onaudiostart;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onsoundstart;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onspeechstart;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onspeechend;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onsoundend;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onaudioend;\n\n/** @type {?function(!SpeechRecognitionEvent)} */\nSpeechRecognition.prototype.onresult;\n\n/** @type {?function(!SpeechRecognitionEvent)} */\nSpeechRecognition.prototype.onnomatch;\n\n/** @type {?function(!SpeechRecognitionError)} */\nSpeechRecognition.prototype.onerror;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onstart;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onend;\n\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction SpeechRecognitionError() {}\n\n/** @type {string} */\nSpeechRecognitionError.prototype.error;\n\n/** @type {string} */\nSpeechRecognitionError.prototype.message;\n\n\n/**\n * @constructor\n */\nfunction SpeechRecognitionAlternative() {}\n\n/** @type {string} */\nSpeechRecognitionAlternative.prototype.transcript;\n\n/** @type {number} */\nSpeechRecognitionAlternative.prototype.confidence;\n\n\n/**\n * @constructor\n */\nfunction SpeechRecognitionResult() {}\n\n/**\n * @type {number}\n */\nSpeechRecognitionResult.prototype.length;\n\n/**\n * @type {function(number): SpeechRecognitionAlternative}\n */\nSpeechRecognitionResult.prototype.item = function(index) {};\n\n/**\n * @type {boolean}\n */\nSpeechRecognitionResult.prototype.isFinal;\n\n\n/**\n * @constructor\n */\nfunction SpeechRecognitionResultList() {}\n\n/**\n * @type {number}\n */\nSpeechRecognitionResultList.prototype.length;\n\n/**\n * @type {function(number): SpeechRecognitionResult}\n */\nSpeechRecognitionResultList.prototype.item = function(index) {};\n\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction SpeechRecognitionEvent() {}\n\n/** @type {number} */\nSpeechRecognitionEvent.prototype.resultIndex;\n\n/** @type {SpeechRecognitionResultList} */\nSpeechRecognitionEvent.prototype.results;\n\n/** @type {*} */\nSpeechRecognitionEvent.prototype.interpretation;\n\n/** @type {Document} */\nSpeechRecognitionEvent.prototype.emma;\n\n\n/**\n * @constructor\n */\nfunction SpeechGrammar() {}\n\n/** @type {string} */\nSpeechGrammar.prototype.src;\n\n/** @type {number} */\nSpeechGrammar.prototype.weight;\n\n\n/**\n * @constructor\n */\nfunction SpeechGrammarList() {}\n\n/**\n * @type {number}\n */\nSpeechGrammarList.prototype.length;\n\n/**\n * @type {function(number): SpeechGrammar}\n */\nSpeechGrammarList.prototype.item = function(index) {};\n\n/**\n * @type {function(string, number)}\n */\nSpeechGrammarList.prototype.addFromUri = function(src, weight) {};\n\n/**\n * @type {function(string, number)}\n */\nSpeechGrammarList.prototype.addFromString = function(str, weight) {};\n\n\n// Webkit implementations of Web Speech API\n/**\n * @constructor\n * @extends {SpeechGrammarList}\n */\nfunction webkitSpeechGrammarList() {}\n\n\n/**\n * @constructor\n * @extends {SpeechGrammar}\n */\nfunction webkitSpeechGrammar() {}\n\n\n/**\n * @constructor\n * @extends {SpeechRecognitionEvent}\n */\nfunction webkitSpeechRecognitionEvent() {}\n\n\n/**\n * @constructor\n * @extends {SpeechRecognitionError}\n */\nfunction webkitSpeechRecognitionError() {}\n\n\n/**\n * @constructor\n * @extends {SpeechRecognition}\n */\nfunction webkitSpeechRecognition() {}\n\n\n\n// W3C Web Speech Synthesis API is implemented in Chrome M33\n/**\n * @type {SpeechSynthesis}\n * @see https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section\n */\nvar speechSynthesis;\n\n\n/**\n * @constructor\n * @param {string} text\n */\nfunction SpeechSynthesisUtterance(text) {}\n\n/** @type {string} */\nSpeechSynthesisUtterance.prototype.text;\n\n/** @type {string} */\nSpeechSynthesisUtterance.prototype.lang;\n\n/** @type {number} */\nSpeechSynthesisUtterance.prototype.pitch;\n\n/** @type {number} */\nSpeechSynthesisUtterance.prototype.rate;\n\n/** @type {SpeechSynthesisVoice} */\nSpeechSynthesisUtterance.prototype.voice;\n\n/** @type {number} */\nSpeechSynthesisUtterance.prototype.volume;\n\n/**\n * @param {Event} event\n */\nSpeechSynthesisUtterance.prototype.onstart = function(event) {};\n\n/**\n * @param {Event} event\n */\nSpeechSynthesisUtterance.prototype.onend = function(event) {};\n\n/**\n * @param {Event} event\n */\nSpeechSynthesisUtterance.prototype.onerror = function(event) {};\n\n/**\n * @constructor\n */\nfunction SpeechSynthesisVoice() {}\n\n/** @type {string} */\nSpeechSynthesisVoice.prototype.voiceURI;\n\n/** @type {string} */\nSpeechSynthesisVoice.prototype.name;\n\n/** @type {string} */\nSpeechSynthesisVoice.prototype.lang;\n\n/** @type {boolean} */\nSpeechSynthesisVoice.prototype.localService;\n\n/** @type {boolean} */\nSpeechSynthesisVoice.prototype.default;\n\n\n/**\n * @constructor\n * @extends {Array}\n */\nfunction SpeechSynthesisVoiceList() {}\n\n\n/**\n * @interface\n * @extends {EventTarget}\n */\nfunction SpeechSynthesis() {}\n\n/**\n * @param {SpeechSynthesisUtterance} utterance\n * @return {undefined}\n */\nSpeechSynthesis.prototype.speak = function(utterance) {};\n\n/** @type {function()} */\nSpeechSynthesis.prototype.cancel;\n\n/** @type {function()} */\nSpeechSynthesis.prototype.pause;\n\n/** @type {function()} */\nSpeechSynthesis.prototype.resume;\n\n/**\n * @return {SpeechSynthesisVoiceList}\n */\nSpeechSynthesis.prototype.getVoices = function() {};\n\n/**\n * @param {Event} event\n * @see https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi-errata.html\n */\nSpeechSynthesis.prototype.onvoiceschanged = function(event) {};\n', - "externs/w3c_touch_event.js":"/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's Touch Events specification.\n * @see http://www.w3.org/TR/touch-events/\n * @externs\n */\n\n/**\n * @typedef {{\n * identifier: number,\n * target: !EventTarget,\n * clientX: (number|undefined),\n * clientY: (number|undefined),\n * screenX: (number|undefined),\n * screenY: (number|undefined),\n * pageX: (number|undefined),\n * pageY: (number|undefined),\n * radiusX: (number|undefined),\n * radiusY: (number|undefined),\n * rotationAngle: (number|undefined),\n * force: (number|undefined)\n * }}\n */\nvar TouchInitDict;\n\n/**\n * The Touch class represents a single touch on the surface. A touch is the\n * presence or movement of a finger that is part of a unique multi-touch\n * sequence.\n * @see http://www.w3.org/TR/touch-events/#touch-interface\n * @param {!TouchInitDict} touchInitDict\n * @constructor\n */\nfunction Touch(touchInitDict) {}\n\n/**\n * The x-coordinate of the touch's location relative to the window's viewport.\n * @type {number}\n */\nTouch.prototype.clientX;\n\n/**\n * The y-coordinate of the touch's location relative to the window's viewport.\n * @type {number}\n */\nTouch.prototype.clientY;\n\n/**\n * The unique identifier for this touch object.\n * @type {number}\n */\nTouch.prototype.identifier;\n\n/**\n * The x-coordinate of the touch's location in page coordinates.\n * @type {number}\n */\nTouch.prototype.pageX;\n\n/**\n * The y-coordinate of the touch's location in page coordinates.\n * @type {number}\n */\nTouch.prototype.pageY;\n\n/**\n * The x-coordinate of the touch's location in screen coordinates.\n * @type {number}\n */\nTouch.prototype.screenX;\n\n/**\n * The y-coordinate of the touch's location in screen coordinates.\n * @type {number}\n */\nTouch.prototype.screenY;\n\n/**\n * The target of this touch.\n * @type {EventTarget}\n */\nTouch.prototype.target;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/touch-events-extensions/#widl-Touch-force\n */\nTouch.prototype.force;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/touch-events-extensions/#widl-Touch-radiusX\n */\nTouch.prototype.radiusX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/touch-events-extensions/#widl-Touch-radiusY\n */\nTouch.prototype.radiusY;\n\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2011/WD-touch-events-20110505/#widl-Touch-rotationAngle\n */\nTouch.prototype.rotationAngle;\n\n\n/**\n * Creates a new Touch object.\n * @see http://www.w3.org/TR/touch-events/#widl-Document-createTouch-Touch-WindowProxy-view-EventTarget-target-long-identifier-long-pageX-long-pageY-long-screenX-long-screenY\n * @param {Window} view\n * @param {EventTarget} target\n * @param {number} identifier\n * @param {number} pageX\n * @param {number} pageY\n * @param {number} screenX\n * @param {number} screenY\n * @return {Touch}\n */\nDocument.prototype.createTouch = function(view, target, identifier, pageX,\n pageY, screenX, screenY) {};\n\n\n/**\n * The TouchList class is used to represent a collection of Touch objects.\n * @see http://www.w3.org/TR/touch-events/#touchlist-interface\n * @constructor\n * @implements {IArrayLike}\n */\nfunction TouchList() {}\n\n/**\n * The number of Touch objects in this TouchList object.\n * @type {number}\n */\nTouchList.prototype.length;\n\n/**\n * Returns the Touch object at the given index.\n * @param {number} index\n * @return {?Touch}\n */\nTouchList.prototype.item = function(index) {};\n\n/**\n * @param {number} identifier\n * @return {?Touch}\n * @see http://www.w3.org/TR/touch-events-extensions/#widl-TouchList-identifiedTouch-Touch-long-identifier\n */\nTouchList.prototype.identifiedTouch = function(identifier) {};\n\n/**\n * Creates a new TouchList object.\n * @see http://www.w3.org/TR/touch-events/#widl-Document-createTouchList-TouchList-Touch-touches\n * @param {Array} touches\n * @return {TouchList}\n */\nDocument.prototype.createTouchList = function(touches) {};\n\n/**\n * @record\n * @extends {UIEventInit}\n */\nfunction TouchEventInit() {}\n\n/** @type {undefined|?EventTarget} */\nTouchEventInit.prototype.relatedTarget;\n\n/** @type {undefined|!Array} */\nTouchEventInit.prototype.touches;\n\n/** @type {undefined|!Array} */\nTouchEventInit.prototype.targetTouches;\n\n/** @type {undefined|!Array} */\nTouchEventInit.prototype.changedTouches;\n\n/**\n * The TouchEvent class encapsulates information about a touch event.\n *\n *

The system continually sends TouchEvent objects to an application as\n * fingers touch and move across a surface. A touch event provides a snapshot of\n * all touches during a multi-touch sequence, most importantly the touches that\n * are new or have changed for a particular target. A multi-touch sequence\n * begins when a finger first touches the surface. Other fingers may\n * subsequently touch the surface, and all fingers may move across the surface.\n * The sequence ends when the last of these fingers is lifted from the surface.\n * An application receives touch event objects during each phase of any touch.\n *

\n *\n *

The different types of TouchEvent objects that can occur are:\n *

    \n *
  • touchstart - Sent when a finger for a given event touches the surface.\n *
  • touchmove - Sent when a given event moves on the surface.\n *
  • touchend - Sent when a given event lifts from the surface.\n *
  • touchcancel - Sent when the system cancels tracking for the touch.\n *
\n * TouchEvent objects are combined together to form high-level GestureEvent\n * objects that are also sent during a multi-touch sequence.

\n *\n * @see http://www.w3.org/TR/touch-events/#touchevent-interface\n * @param {string} type\n * @param {!TouchEventInit=} opt_eventInitDict\n * @extends {UIEvent}\n * @constructor\n */\nfunction TouchEvent(type, opt_eventInitDict) {}\n\n/**\n * A collection of Touch objects representing all touches associated with this\n * target.\n * @type {TouchList}\n */\nTouchEvent.prototype.touches;\n\n/**\n * A collection of Touch objects representing all touches associated with this\n * target.\n * @type {TouchList}\n */\nTouchEvent.prototype.targetTouches;\n\n/**\n * A collection of Touch objects representing all touches that changed in this event.\n * @type {TouchList}\n */\nTouchEvent.prototype.changedTouches;\n\n/**\n * @type {boolean}\n */\nTouchEvent.prototype.altKey;\n\n/**\n * @type {boolean}\n */\nTouchEvent.prototype.metaKey;\n\n/**\n * @type {boolean}\n */\nTouchEvent.prototype.ctrlKey;\n\n/**\n * @type {boolean}\n */\nTouchEvent.prototype.shiftKey;\n\n\n/**\n * Specifies the JavaScript method to invoke when the system cancels tracking\n * for the touch.\n * @type {?function(!TouchEvent)}\n */\nElement.prototype.ontouchcancel;\n\n/**\n * Specifies the JavaScript method to invoke when a given event lifts from the\n * surface.\n * @type {?function(!TouchEvent)}\n */\nElement.prototype.ontouchend;\n\n/**\n * Specifies the JavaScript method to invoke when a finger for a given event\n * moves on the surface.\n * @type {?function(!TouchEvent)}\n */\nElement.prototype.ontouchmove;\n\n/**\n * Specifies the JavaScript method to invoke when a finger for a given event\n * touches the surface.\n * @type {?function(!TouchEvent)}\n */\nElement.prototype.ontouchstart;\n", --"externs/w3c_vibration.js":'/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for Vibration API based on "W3C Recommendation 18 October 2016"\n * @see https://www.w3.org/TR/2016/REC-vibration-20161018/\n *\n * @externs\n * @author vobruba.martin@gmail.com (Martin Vobruba)\n */\n\n\n/**\n * @typedef {number|!Array}\n * @see https://www.w3.org/TR/2016/REC-vibration-20161018/#idl-def-vibratepattern\n */\nvar VibratePattern;\n\n\n/**\n * @param {!VibratePattern} pattern\n * @return {boolean}\n * @see https://www.w3.org/TR/2016/REC-vibration-20161018/#idl-def-navigator-vibrate(vibratepattern)\n */\nNavigator.prototype.vibrate = function(pattern) {};\n', --"externs/w3c_webcrypto.js":'/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @fileoverview Definitions for W3C\'s Web Cryptography specification\n * http://www.w3.org/TR/webCryptoAPI\n * @externs\n * @author chrismoon@google.com (Chris Moon)\n * This file was created using the best practices as described in:\n * chrome_extensions.js\n */\n\n\n/**\n * @const\n * @see http://www.w3.org/TR/webCryptoAPI\n */\nvar webCrypto = {};\n\n\n/**\n * @typedef {?{\n * name: string\n * }}\n * @see http://www.w3.org/TR/WebCryptoAPI/#algorithm-dictionary\n */\nwebCrypto.Algorithm;\n\n\n/**\n * @typedef {string|!webCrypto.Algorithm}\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-AlgorithmIdentifier\n */\nwebCrypto.AlgorithmIdentifier;\n\n/**\n * @typedef {webCrypto.AlgorithmIdentifier}\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-HashAlgorithmIdentifier\n */\nwebCrypto.HashAlgorithmIdentifier;\n\n\n/**\n * @typedef {Uint8Array}\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-BigInteger\n */\nwebCrypto.BigInteger;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/webCryptoAPI/#dfn-CryptoKey\n */\nwebCrypto.CryptoKey = function() {};\n\n\n/**\n * @type {string} An enumerated value representing the type of the key, a secret\n * key (for symmetric algorithm), a public or a private key\n * (for an asymmetric algorithm).\n */\nwebCrypto.CryptoKey.prototype.type;\n\n\n/**\n * @type {boolean} Determines whether or not the raw keying material may be\n * exported by the application.\n */\nwebCrypto.CryptoKey.prototype.extractable;\n\n\n/**\n * @type {!Object} An opaque object representing a particular cipher the key\n * has to be used with.\n */\nwebCrypto.CryptoKey.prototype.algorithm;\n\n\n/**\n * @type {!Object} Returns the cached ECMAScript object associated with the\n * usages internal slot, which indicates which cryptographic operations are\n * permissible to be used with this key.\n */\nwebCrypto.CryptoKey.prototype.usages;\n\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/WebCryptoAPI/#keypair\n */\nwebCrypto.CryptoKeyPair = function() {};\n\n\n/**\n * @type {!webCrypto.CryptoKey}\n */\nwebCrypto.CryptoKeyPair.prototype.publicKey;\n\n\n/**\n * @type {!webCrypto.CryptoKey}\n */\nwebCrypto.CryptoKeyPair.prototype.privateKey;\n\n\n/**\n * @typedef {?{\n * name: string\n * }}\n * @see http://www.w3.org/TR/WebCryptoAPI/#key-algorithm-dictionary-members\n */\nwebCrypto.KeyAlgorithm;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-JsonWebKey\n * @see Section 3.1:\n * https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41\n */\nwebCrypto.JsonWebKey = function() {};\n\n\n/**\n * @type {string} Identifies the cryptographic algorithm family used with\n * the key, such as "RSA" or "EC".\n */\nwebCrypto.JsonWebKey.prototype.kty;\n\n\n/**\n * @type {string} Identifies the intended use of the public key.\n */\nwebCrypto.JsonWebKey.prototype.use;\n\n\n/**\n * @type {!Array} Identifies the operation(s) that the key is\n * intended to be used for.\n */\nwebCrypto.JsonWebKey.prototype.key_ops;\n\n\n/**\n * @type {string} Identifies the algorithm intended for use with the key.\n */\nwebCrypto.JsonWebKey.prototype.alg;\n\n\n/**\n * @type {boolean} Boolean to be used with kty values.\n */\nwebCrypto.JsonWebKey.prototype.ext;\n\n\n/**\n * @type {string} Identifies the cryptographic curve used with the key.\n */\nwebCrypto.JsonWebKey.prototype.crv;\n\n\n/**\n * @type {string} Contains the x coordinate for the elliptic curve point.\n */\nwebCrypto.JsonWebKey.prototype.x;\n\n\n/**\n * @type {string} Contains the y coordinate for the elliptic curve point.\n */\nwebCrypto.JsonWebKey.prototype.y;\n\n\n/**\n * @type {string} Contains the Elliptic Curve private key value.\n */\nwebCrypto.JsonWebKey.prototype.d;\n\n\n/**\n * @type {string} Contains the modulus value for the RSA public key.\n */\nwebCrypto.JsonWebKey.prototype.n;\n\n\n/**\n * @type {string} Contains the exponent value for the RSA public key.\n */\nwebCrypto.JsonWebKey.prototype.e;\n\n\n/**\n * @type {string} Contains the first prime factor.\n */\nwebCrypto.JsonWebKey.prototype.p;\n\n\n/**\n * @type {string} Contains the second prime factor.\n */\nwebCrypto.JsonWebKey.prototype.q;\n\n\n/**\n * @type {string} Contains the Chinese Remainder Theorem (CRT) exponent of\n * the first factor.\n */\nwebCrypto.JsonWebKey.prototype.dp;\n\n\n/**\n * @type {string} Contains the Chinese Remainder Theorem (CRT) exponent of\n * the second factor.\n */\nwebCrypto.JsonWebKey.prototype.dq;\n\n\n/**\n * @type {string} Contains the Chinese Remainder Theorem (CRT) coefficient\n * of the second factor.\n */\nwebCrypto.JsonWebKey.prototype.qi;\n\n\n/**\n * @type {!Array} Contains an array of\n * information about any third and subsequent primes, should they exist.\n */\nwebCrypto.JsonWebKey.prototype.oth;\n\n\n/**\n * @type {string} Contains the value of the symmetric (or other\n * single-valued) key.\n */\nwebCrypto.JsonWebKey.prototype.k;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-RsaOtherPrimesInfo\n * @see Section-6.3.2.7:\n * https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40\n */\nwebCrypto.RsaOtherPrimesInfo = function() {};\n\n\n/**\n * @type {string} Parameter within an "oth" array member represents the value\n * of a subsequent prime factor.\n */\nwebCrypto.RsaOtherPrimesInfo.prototype.r;\n\n\n/**\n * @type {string} Parameter within an "oth" array member represents the CRT\n * exponent of the corresponding prime factor.\n */\nwebCrypto.RsaOtherPrimesInfo.prototype.d;\n\n\n/**\n * @type {string} Parameter within an "oth" array member represents the CRT\n * coefficient of the corresponding prime factor.\n */\nwebCrypto.RsaOtherPrimesInfo.prototype.t;\n\n\n/**\n * @record\n * @extends webCrypto.Algorithm\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaKeyGenParams\n */\nwebCrypto.RsaKeyGenParams;\n/**\n * @type {number}\n */\nwebCrypto.RsaKeyGenParams.prototype.modulusLength;\n/**\n * @type {webCrypto.BigInteger}\n */\nwebCrypto.RsaKeyGenParams.prototype.publicExponent;\n\n\n/**\n * @record\n * @extends webCrypto.RsaKeyGenParams\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaHashedKeyGenParams\n */\nwebCrypto.RsaHashedKeyGenParams;\n/**\n * @type {webCrypto.HashAlgorithmIdentifier}\n */\nwebCrypto.RsaHashedKeyGenParams.prototype.hash;\n\n\n/**\n * @record\n * @extends webCrypto.KeyAlgorithm\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaKeyAlgorithm\n */\nwebCrypto.RsaKeyAlgorithm;\n/**\n * @type {number}\n */\nwebCrypto.RsaKeyAlgorithm.prototype.modulusLength;\n/**\n * @type {webCrypto.BigInteger}\n */\nwebCrypto.RsaKeyAlgorithm.prototype.publicExponent;\n\n\n/**\n * @record\n * @extends webCrypto.RsaKeyAlgorithm\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaHashedKeyAlgorithm\n */\nwebCrypto.RsaHashedKeyAlgorithm;\n/**\n * @type {webCrypto.KeyAlgorithm}\n */\nwebCrypto.RsaHashedKeyAlgorithm.prototype.hash;\n\n\n/**\n * @record\n * @extends webCrypto.Algorithm\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaHashedImportParams\n */\nwebCrypto.RsaHashedImportParams;\n/**\n * @type {webCrypto.HashAlgorithmIdentifier}\n */\nwebCrypto.RsaHashedImportParams.prototype.hash;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/WebCryptoAPI/#subtlecrypto-interface\n */\nwebCrypto.SubtleCrypto = function() {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: AES-CBC, AES-CTR, AES-GCM, and RSA-OAEP.\n * @param {!webCrypto.CryptoKey} key Key to be used for signing.\n * @param {!BufferSource} data Data to be encrypted (cleartext).\n * @return {!Promise} Ciphertext generated by the encryption of\n * the cleartext.\n */\nwebCrypto.SubtleCrypto.prototype.encrypt = function(algorithm, key,\n data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: AES-CBC, AES-CTR, AES-GCM, and RSA-OAEP.\n * @param {!webCrypto.CryptoKey} key Key to be used for signing.\n * @param {!BufferSource} data Data to be decrypted (ciphertext).\n * @return {!Promise} Cleartext generated by the decryption of the\n * ciphertext.\n */\nwebCrypto.SubtleCrypto.prototype.decrypt = function(algorithm, key,\n data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: HMAC, RSASSA-PKCS1-v1_5, and ECDSA.\n * @param {!webCrypto.CryptoKey} key Private key to be used for signing.\n * @param {!BufferSource} data Data to be signed.\n * @return {!Promise} Returns the signature on success.\n */\nwebCrypto.SubtleCrypto.prototype.sign = function(algorithm, key,\n data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: HMAC, RSASSA-PKCS1-v1_5, and ECDSA.\n * @param {!webCrypto.CryptoKey} key Private key to be used for signing.\n * @param {!BufferSource} signature Signature to verify.\n * @param {!BufferSource} data Data whose signature needs to be verified.\n * @return {!Promise} Returns if the signature operating has been\n * successful.\n */\nwebCrypto.SubtleCrypto.prototype.verify = function(algorithm, key,\n signature, data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: SHA-1, SHA-256, SHA-384, and SHA-512.\n * @param {!BufferSource} data Data to be hashed using the hashing algorithm.\n * @return {!Promise} returns the hash on success.\n */\nwebCrypto.SubtleCrypto.prototype.digest = function(algorithm, data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier|webCrypto.RsaHashedKeyGenParams}\n * algorithm Supported values are: SHA-1, SHA-256, SHA-384, and SHA-512.\n * @param {boolean} extractable If the key can be extracted from the CryptoKey\n * object at a later stage.\n * @param {!Array} keyUsages Indication of new key options i.e.\n * encrypt, decrypt, sign, verify, deriveKey, deriveBits, wrapKey,\n * unwrapKey.\n * @return {!Promise} returns the\n * generated key.\n */\nwebCrypto.SubtleCrypto.prototype.generateKey = function(algorithm,\n extractable, keyUsages) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm The key derivation\n * algorithm to use. Supported values are: ECDH, DH, PBKDF2, and HKDF-CTR.\n * @param {!webCrypto.CryptoKey} baseKey Key to be used by the key\n * derivation algorithm.\n * @param {!webCrypto.AlgorithmIdentifier} derivedKeyAlgo Defines the key\n * derivation algorithm to use.\n * @param {boolean} extractable Indicates if the key can be extracted from the\n * CryptoKey object at a later stage.\n * @param {!Array} keyUsages Indicates what can be done with the\n * derivated key.\n * @return {!Promise} returns the\n * generated key.\n */\nwebCrypto.SubtleCrypto.prototype.deriveKey = function(algorithm,\n baseKey, derivedKeyAlgo, extractable, keyUsages) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm The key derivation\n * algorithm to use.\n * @param {!webCrypto.CryptoKey} baseKey Key to be used by the key\n * derivation algorithm.\n * @param {number} length\n * @return {!Promise} returns the generated bits.\n */\nwebCrypto.SubtleCrypto.prototype.deriveBits = function(algorithm,\n baseKey, length) {};\n\n\n/**\n * @param {string} format Enumerated value describing the data\n * format of the key to imported.\n * @param {!BufferSource|!webCrypto.JsonWebKey} keyData The key\n * in the given format.\n * @param {!webCrypto.AlgorithmIdentifier|webCrypto.RsaHashedImportParams}\n * algorithm Supported values are: AES-CTR, AES-CBC, AES-GCM, RSA-OAEP,\n * AES-KW, HMAC, RSASSA-PKCS1-v1_5, ECDSA, ECDH, DH.\n * @param {boolean} extractable If the key can be extracted from the CryptoKey\n * object at a later stage.\n * @param {!Array} keyUsages Indication of new key options i.e.\n * encrypt, decrypt, sign, verify, deriveKey, deriveBits, wrapKey,\n * unwrapKey.\n * @return {!Promise} returns the generated key.\n */\nwebCrypto.SubtleCrypto.prototype.importKey = function(format, keyData,\n algorithm, extractable, keyUsages) {};\n\n\n/**\n * @param {string} format Enumerated value describing the data\n * format of the key to imported.\n * @param {!webCrypto.CryptoKey} key CryptoKey to export.\n * @return {!Promise} returns the key in the\n * requested format.\n */\nwebCrypto.SubtleCrypto.prototype.exportKey = function(format, key) {};\n\n\n/**\n * @param {string} format Value describing the data format in which the key must\n * be wrapped. It can be one of the following: raw, pkcs8, spki, jwk.\n * @param {!webCrypto.CryptoKey} key CryptoKey to wrap.\n * @param {!webCrypto.CryptoKey} wrappingKey CryptoKey used to perform\n * the wrapping.\n * @param {!webCrypto.AlgorithmIdentifier} wrapAlgorithm algorithm used\n * to perform the wrapping. It is one of the following: AES-CBC, AES-CTR,\n * AES-GCM, RSA-OAEP, and AES-KW.\n * @return {!Promise} returns the wrapped key in the requested\n * format.\n */\nwebCrypto.SubtleCrypto.prototype.wrapKey = function(format,\n key, wrappingKey, wrapAlgorithm) {};\n\n\n/**\n * @param {string} format Value describing the data format in which the key must\n * be wrapped. It can be one of the following: raw, pkcs8, spki, jwk.\n * @param {!BufferSource} wrappedKey Contains the wrapped key in the given\n * format.\n * @param {!webCrypto.CryptoKey} unwrappingKey CryptoKey used to perform\n * the unwrapping.\n * @param {!webCrypto.AlgorithmIdentifier} unwrapAlgorithm Algorithm\n * used to perform the unwrapping. It is one of the following: AES-CBC,\n * AES-CTR, AES-GCM, RSA-OAEP, and AES-KW.\n * @param {!webCrypto.AlgorithmIdentifier} unwrappedKeyAlgorithm\n * Represents the algorithm of the wrapped key.\n * @param {boolean} extractable Indicates if the key can be extracted from the\n * CryptoKey object at a later stage.\n * @param {!Array} keyUsages Indicates what can be done with the\n * derivated key.\n * @return {!Promise} returns the unwrapped key.\n */\nwebCrypto.SubtleCrypto.prototype.unwrapKey = function(format, wrappedKey,\n unwrappingKey, unwrapAlgorithm, unwrappedKeyAlgorithm, extractable,\n keyUsages) {};\n\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Crypto\n * @interface\n */\nwebCrypto.Crypto = function() {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.crypto.getRandomValues\n * @param {!ArrayBufferView} typedArray\n * @return {!ArrayBufferView}\n * @throws {Error}\n */\nwebCrypto.Crypto.prototype.getRandomValues = function(typedArray) {};\n\n/**\n * @type {?webCrypto.SubtleCrypto}\n * @see http://www.w3.org/TR/WebCryptoAPI/#Crypto-attribute-subtle\n */\nwebCrypto.Crypto.prototype.subtle;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.crypto\n * @type {!webCrypto.Crypto|undefined}\n */\nvar crypto;\n', --"externs/w3c_xml.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s XML related specifications.\n * This file depends on w3c_dom2.js.\n * The whole file has been fully type annotated.\n *\n * Provides the XML standards from W3C.\n * Includes:\n * XPath - Fully type annotated\n * XMLHttpRequest - Fully type annotated\n *\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html\n * @see https://xhr.spec.whatwg.org/\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n * @author stevey@google.com (Steve Yegge)\n */\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathException\n */\nfunction XPathException() {}\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#INVALID_EXPRESSION_ERR\n */\nXPathException.INVALID_EXPRESSION_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#TYPE_ERR\n */\nXPathException.TYPE_ERR;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#\n */\nXPathException.prototype.code;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator\n */\nfunction XPathEvaluator() {}\n\n/**\n * @param {string} expr\n * @param {?XPathNSResolver=} opt_resolver\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator-createExpression\n * @throws XPathException\n * @throws DOMException\n * @return {undefined}\n */\nXPathEvaluator.prototype.createExpression = function(expr, opt_resolver) {};\n\n/**\n * @param {Node} nodeResolver\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator-createNSResolver\n * @return {undefined}\n */\nXPathEvaluator.prototype.createNSResolver = function(nodeResolver) {};\n\n/**\n * @param {string} expr\n * @param {Node} contextNode\n * @param {?XPathNSResolver=} opt_resolver\n * @param {?number=} opt_type\n * @param {*=} opt_result\n * @return {XPathResult}\n * @throws XPathException\n * @throws DOMException\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator-evaluate\n */\nXPathEvaluator.prototype.evaluate = function(expr, contextNode, opt_resolver,\n opt_type, opt_result) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathExpression\n */\nfunction XPathExpression() {}\n\n/**\n * @param {Node} contextNode\n * @param {number=} opt_type\n * @param {*=} opt_result\n * @return {*}\n * @throws XPathException\n * @throws DOMException\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathExpression-evaluate\n */\nXPathExpression.prototype.evaluate = function(contextNode, opt_type,\n opt_result) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNSResolver\n */\nfunction XPathNSResolver() {}\n\n/**\n * @param {string} prefix\n * @return {?string}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNSResolver-lookupNamespaceURI\n */\nXPathNSResolver.prototype.lookupNamespaceURI = function(prefix) {};\n\n/**\n * From http://www.w3.org/TR/xpath\n *\n * XPath is a language for addressing parts of an XML document, designed to be\n * used by both XSLT and XPointer.\n *\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult\n */\nfunction XPathResult() {}\n\n/**\n * @type {boolean} {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-booleanValue\n */\nXPathResult.prototype.booleanValue;\n\n/**\n * @type {boolean} {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-invalid-iterator-state\n */\nXPathResult.prototype.invalidInteratorState;\n\n/**\n * @type {number}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-numberValue\n */\nXPathResult.prototype.numberValue;\n\n/**\n * @type {number}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-resultType\n */\nXPathResult.prototype.resultType;\n\n/**\n * @type {Node}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-singleNodeValue\n */\nXPathResult.prototype.singleNodeValue;\n\n/**\n * @type {number}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-snapshot-length\n */\nXPathResult.prototype.snapshotLength;\n\n/**\n * @type {string}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-stringValue\n */\nXPathResult.prototype.stringValue;\n\n/**\n * @return {Node}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @throws DOMException {@see DOMException.INVALID_STATE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-iterateNext\n */\nXPathResult.prototype.iterateNext = function() {};\n\n/**\n * @param {number} index\n * @return {Node}\n * @throws XPathException\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-snapshotItem\n */\nXPathResult.prototype.snapshotItem = function(index) {};\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ANY-TYPE\n */\nXPathResult.ANY_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-NUMBER-TYPE\n */\nXPathResult.NUMBER_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-STRING-TYPE\n */\nXPathResult.STRING_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-BOOLEAN-TYPE\n */\nXPathResult.BOOLEAN_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-UNORDERED-NODE-ITERATOR-TYPE\n */\nXPathResult.UNORDERED_NODE_ITERATOR_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ORDERED-NODE-ITERATOR-TYPE\n */\nXPathResult.ORDERED_NODE_ITERATOR_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-UNORDERED-NODE-SNAPSHOT-TYPE\n */\nXPathResult.UNORDERED_NODE_SNAPSHOT_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ORDERED-NODE-SNAPSHOT-TYPE\n */\nXPathResult.ORDERED_NODE_SNAPSHOT_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ANY-UNORDERED-NODE-TYPE\n */\nXPathResult.ANY_UNORDERED_NODE_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-FIRST-ORDERED-NODE-TYPE\n */\nXPathResult.FIRST_ORDERED_NODE_TYPE;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNamespace\n */\nfunction XPathNamespace() {}\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNamespace-ownerElement\n */\nXPathNamespace.prototype.ownerElement;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPATH_NAMESPACE_NODE\n */\nXPathNamespace.XPATH_NAMESPACE_NODE;\n\n/**\n * From https://xhr.spec.whatwg.org/#xmlhttprequest\n *\n * (Draft)\n *\n * The XMLHttpRequest Object specification defines an API that provides\n * scripted client functionality for transferring data between a client and a\n * server.\n *\n * @constructor\n * @implements {EventTarget}\n * @see https://xhr.spec.whatwg.org/#xmlhttprequest\n */\nfunction XMLHttpRequest() {}\n\n/** @override */\nXMLHttpRequest.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nXMLHttpRequest.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nXMLHttpRequest.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @param {string} method\n * @param {string} url\n * @param {?boolean=} opt_async\n * @param {?string=} opt_user\n * @param {?string=} opt_password\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#the-open()-method\n */\nXMLHttpRequest.prototype.open = function(method, url, opt_async, opt_user,\n opt_password) {};\n\n/**\n * @param {string} header\n * @param {string} value\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#the-setrequestheader()-method\n */\nXMLHttpRequest.prototype.setRequestHeader = function(header, value) {};\n\n/**\n * @param {ArrayBuffer|ArrayBufferView|Blob|Document|FormData|string=} opt_data\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#the-send()-method\n */\nXMLHttpRequest.prototype.send = function(opt_data) {};\n\n/**\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#the-abort()-method\n */\nXMLHttpRequest.prototype.abort = function() {};\n\n/**\n * @return {string}\n * @see https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method\n */\nXMLHttpRequest.prototype.getAllResponseHeaders = function() {};\n\n/**\n * @param {string} header\n * @return {string}\n * @see https://xhr.spec.whatwg.org/#the-getresponseheader()-method\n */\nXMLHttpRequest.prototype.getResponseHeader = function(header) {};\n\n/**\n * @type {string}\n * @see https://xhr.spec.whatwg.org/#the-responsetext-attribute\n */\nXMLHttpRequest.prototype.responseText;\n\n/**\n * This is not supported in any IE browser (as of August 2016).\n * @type {string}\n * @see https://xhr.spec.whatwg.org/#the-responseurl-attribute\n */\nXMLHttpRequest.prototype.responseURL;\n\n/**\n * @type {Document}\n * @see https://xhr.spec.whatwg.org/#the-responsexml-attribute\n */\nXMLHttpRequest.prototype.responseXML;\n\n/**\n * @type {number}\n * @see https://xhr.spec.whatwg.org/#dom-xmlhttprequest-readystate\n */\nXMLHttpRequest.prototype.readyState;\n\n/**\n * @type {number}\n * @see https://xhr.spec.whatwg.org/#the-status-attribute\n */\nXMLHttpRequest.prototype.status;\n\n/**\n * @type {string}\n * @see https://xhr.spec.whatwg.org/#the-statustext-attribute\n */\nXMLHttpRequest.prototype.statusText;\n\n/**\n * @type {number}\n * @see https://xhr.spec.whatwg.org/#the-timeout-attribute\n */\nXMLHttpRequest.prototype.timeout;\n\n/**\n * @type {?function(!Event)}\n * @see https://xhr.spec.whatwg.org/#event-handlers\n */\nXMLHttpRequest.prototype.onreadystatechange;\n\n/**\n * @type {?function(!Event)}\n * @see https://xhr.spec.whatwg.org/#event-handlers\n */\nXMLHttpRequest.prototype.onerror;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.UNSENT;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.OPENED;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.HEADERS_RECEIVED;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.LOADING;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.DONE;\n\n\n/**\n * @see https://xhr.spec.whatwg.org/#formdataentryvalue\n * @typedef {!File|string}\n */\nvar FormDataEntryValue;\n\n/**\n * The FormData object represents an ordered collection of entries. Each entry\n * has a name and value.\n *\n * @param {?Element=} form An optional form to use for constructing the form\n * data set.\n * @constructor\n * @implements {Iterable>}\n * @see https://xhr.spec.whatwg.org/#interface-formdata\n */\nfunction FormData(form) {}\n\n/**\n * @param {string} name\n * @param {?Blob|string} value\n * @param {string=} filename\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-append\n */\nFormData.prototype.append = function(name, value, filename) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-delete\n */\nFormData.prototype.delete = function(name) {};\n\n/**\n * @param {string} name\n * @return {?FormDataEntryValue}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-get\n */\nFormData.prototype.get = function(name) {};\n\n/**\n * @param {string} name\n * @return {!Array}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-getall\n */\nFormData.prototype.getAll = function(name) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-has\n */\nFormData.prototype.has = function(name) {};\n\n/**\n * @param {string} name\n * @param {!Blob|string} value\n * @param {string=} filename\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-set\n */\nFormData.prototype.set = function(name, value, filename) {};\n\n', --"externs/window.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview JavaScript Built-Ins for windows properties.\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n * @author stevey@google.com (Steve Yegge)\n */\n\n// Window properties\n// Only common properties are here. Others such as open()\n// should be used with an explicit Window object.\n\n/**\n * @const {!Window}\n * @see https://developer.mozilla.org/en/DOM/window.top\n */\nvar top;\n\n/**\n * @const {!Navigator}\n * @see https://developer.mozilla.org/en/DOM/window.navigator\n */\nvar navigator;\n\n/**\n * @const {!HTMLDocument}\n * @see https://developer.mozilla.org/en/DOM/window.document\n */\nvar document;\n\n/**\n * @const {!Location}\n * @see https://developer.mozilla.org/en/DOM/window.location\n * @suppress {duplicate}\n * @implicitCast\n */\nvar location;\n\n/**\n * @const {!Screen}\n * @see https://developer.mozilla.org/En/DOM/window.screen\n */\nvar screen;\n\n/**\n * @const {!Window}\n * @see https://developer.mozilla.org/En/DOM/Window.self\n */\nvar self;\n\n/**\n * @type {!Window}\n * @see https://developer.mozilla.org/en/DOM/window\n */\nvar window;\n\n/**\n * @const {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/isSecureContext\n */\nvar isSecureContext;\n\n/**\n * @const {!VisualViewport}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/visualViewport\n */\nvar visualViewport;\n\n/**\n * @param {*} message\n * @see https://developer.mozilla.org/en/DOM/window.alert\n * @return {undefined}\n */\nfunction alert(message) {}\n\n/**\n * @param {number=} immediateID\n * @see https://developer.mozilla.org/en-US/docs/DOM/window.clearImmediate\n * @see http://msdn.microsoft.com/en-us/library/ie/hh924825(v=vs.85).aspx\n * @return {undefined}\n */\nfunction clearImmediate(immediateID) {}\n\n/**\n * @param {?number|undefined} intervalID\n * @see https://developer.mozilla.org/en/DOM/window.clearInterval\n * @suppress {duplicate}\n * @return {undefined}\n */\nfunction clearInterval(intervalID) {}\n\n/**\n * @param {?number|undefined} timeoutID\n * @see https://developer.mozilla.org/en/DOM/window.clearTimeout\n * @suppress {duplicate}\n * @return {undefined}\n */\nfunction clearTimeout(timeoutID) {}\n\n/**\n * @param {*} message\n * @return {boolean}\n * @see https://developer.mozilla.org/en/DOM/window.confirm\n */\nfunction confirm(message) {}\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.dump\n * @param {*} x\n * @return {undefined}\n */\nfunction dump(x) {}\n\n/**\n * @param {string} message\n * @param {string=} opt_value\n * @return {?string}\n * @see https://developer.mozilla.org/en/DOM/window.prompt\n */\nfunction prompt(message, opt_value) {}\n\n/**\n * @param {function()} callback\n * @param {...?} callbackParams\n * @return {number}\n * @see https://developer.mozilla.org/en-US/docs/DOM/window.setImmediate\n * @see http://msdn.microsoft.com/en-us/library/ie/hh773176(v=vs.85).aspx\n */\nfunction setImmediate(callback, callbackParams) {}\n\n/**\n * @param {Function|!TrustedScript|string} callback\n * @param {number=} opt_delay\n * @param {...?} callbackParams\n * @return {number}\n * @see https://developer.mozilla.org/en/DOM/window.setInterval\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#timers\n */\nfunction setInterval(callback, opt_delay, callbackParams) {}\n\n/**\n * @param {Function|!TrustedScript|string} callback\n * @param {number=} opt_delay\n * @param {...*} callbackParams\n * @return {number}\n * @see https://developer.mozilla.org/en/DOM/window.setTimeout\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#timers\n */\nfunction setTimeout(callback, opt_delay, callbackParams) {}\n\n/**\n * Returns whether the object has a property with the specified name.\n *\n * @param {*} propertyName Implicitly cast to a string.\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty\n */\nfunction hasOwnProperty (propertyName) {}\n', -+"externs/w3c_vibration.js":'/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for Vibration API based on "W3C Recommendation 18 October 2016"\n * @see https://www.w3.org/TR/2016/REC-vibration-20161018/\n *\n * @externs\n * @author vobruba.martin@9ma1l.qjz9zk (Martin Vobruba)\n */\n\n\n/**\n * @typedef {number|!Array}\n * @see https://www.w3.org/TR/2016/REC-vibration-20161018/#idl-def-vibratepattern\n */\nvar VibratePattern;\n\n\n/**\n * @param {!VibratePattern} pattern\n * @return {boolean}\n * @see https://www.w3.org/TR/2016/REC-vibration-20161018/#idl-def-navigator-vibrate(vibratepattern)\n */\nNavigator.prototype.vibrate = function(pattern) {};\n', -+"externs/w3c_webcrypto.js":'/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @fileoverview Definitions for W3C\'s Web Cryptography specification\n * http://www.w3.org/TR/webCryptoAPI\n * @externs\n * @author chrismoon@9oo91e.qjz9zk (Chris Moon)\n * This file was created using the best practices as described in:\n * chrome_extensions.js\n */\n\n\n/**\n * @const\n * @see http://www.w3.org/TR/webCryptoAPI\n */\nvar webCrypto = {};\n\n\n/**\n * @typedef {?{\n * name: string\n * }}\n * @see http://www.w3.org/TR/WebCryptoAPI/#algorithm-dictionary\n */\nwebCrypto.Algorithm;\n\n\n/**\n * @typedef {string|!webCrypto.Algorithm}\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-AlgorithmIdentifier\n */\nwebCrypto.AlgorithmIdentifier;\n\n/**\n * @typedef {webCrypto.AlgorithmIdentifier}\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-HashAlgorithmIdentifier\n */\nwebCrypto.HashAlgorithmIdentifier;\n\n\n/**\n * @typedef {Uint8Array}\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-BigInteger\n */\nwebCrypto.BigInteger;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/webCryptoAPI/#dfn-CryptoKey\n */\nwebCrypto.CryptoKey = function() {};\n\n\n/**\n * @type {string} An enumerated value representing the type of the key, a secret\n * key (for symmetric algorithm), a public or a private key\n * (for an asymmetric algorithm).\n */\nwebCrypto.CryptoKey.prototype.type;\n\n\n/**\n * @type {boolean} Determines whether or not the raw keying material may be\n * exported by the application.\n */\nwebCrypto.CryptoKey.prototype.extractable;\n\n\n/**\n * @type {!Object} An opaque object representing a particular cipher the key\n * has to be used with.\n */\nwebCrypto.CryptoKey.prototype.algorithm;\n\n\n/**\n * @type {!Object} Returns the cached ECMAScript object associated with the\n * usages internal slot, which indicates which cryptographic operations are\n * permissible to be used with this key.\n */\nwebCrypto.CryptoKey.prototype.usages;\n\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/WebCryptoAPI/#keypair\n */\nwebCrypto.CryptoKeyPair = function() {};\n\n\n/**\n * @type {!webCrypto.CryptoKey}\n */\nwebCrypto.CryptoKeyPair.prototype.publicKey;\n\n\n/**\n * @type {!webCrypto.CryptoKey}\n */\nwebCrypto.CryptoKeyPair.prototype.privateKey;\n\n\n/**\n * @typedef {?{\n * name: string\n * }}\n * @see http://www.w3.org/TR/WebCryptoAPI/#key-algorithm-dictionary-members\n */\nwebCrypto.KeyAlgorithm;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-JsonWebKey\n * @see Section 3.1:\n * https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41\n */\nwebCrypto.JsonWebKey = function() {};\n\n\n/**\n * @type {string} Identifies the cryptographic algorithm family used with\n * the key, such as "RSA" or "EC".\n */\nwebCrypto.JsonWebKey.prototype.kty;\n\n\n/**\n * @type {string} Identifies the intended use of the public key.\n */\nwebCrypto.JsonWebKey.prototype.use;\n\n\n/**\n * @type {!Array} Identifies the operation(s) that the key is\n * intended to be used for.\n */\nwebCrypto.JsonWebKey.prototype.key_ops;\n\n\n/**\n * @type {string} Identifies the algorithm intended for use with the key.\n */\nwebCrypto.JsonWebKey.prototype.alg;\n\n\n/**\n * @type {boolean} Boolean to be used with kty values.\n */\nwebCrypto.JsonWebKey.prototype.ext;\n\n\n/**\n * @type {string} Identifies the cryptographic curve used with the key.\n */\nwebCrypto.JsonWebKey.prototype.crv;\n\n\n/**\n * @type {string} Contains the x coordinate for the elliptic curve point.\n */\nwebCrypto.JsonWebKey.prototype.x;\n\n\n/**\n * @type {string} Contains the y coordinate for the elliptic curve point.\n */\nwebCrypto.JsonWebKey.prototype.y;\n\n\n/**\n * @type {string} Contains the Elliptic Curve private key value.\n */\nwebCrypto.JsonWebKey.prototype.d;\n\n\n/**\n * @type {string} Contains the modulus value for the RSA public key.\n */\nwebCrypto.JsonWebKey.prototype.n;\n\n\n/**\n * @type {string} Contains the exponent value for the RSA public key.\n */\nwebCrypto.JsonWebKey.prototype.e;\n\n\n/**\n * @type {string} Contains the first prime factor.\n */\nwebCrypto.JsonWebKey.prototype.p;\n\n\n/**\n * @type {string} Contains the second prime factor.\n */\nwebCrypto.JsonWebKey.prototype.q;\n\n\n/**\n * @type {string} Contains the Chinese Remainder Theorem (CRT) exponent of\n * the first factor.\n */\nwebCrypto.JsonWebKey.prototype.dp;\n\n\n/**\n * @type {string} Contains the Chinese Remainder Theorem (CRT) exponent of\n * the second factor.\n */\nwebCrypto.JsonWebKey.prototype.dq;\n\n\n/**\n * @type {string} Contains the Chinese Remainder Theorem (CRT) coefficient\n * of the second factor.\n */\nwebCrypto.JsonWebKey.prototype.qi;\n\n\n/**\n * @type {!Array} Contains an array of\n * information about any third and subsequent primes, should they exist.\n */\nwebCrypto.JsonWebKey.prototype.oth;\n\n\n/**\n * @type {string} Contains the value of the symmetric (or other\n * single-valued) key.\n */\nwebCrypto.JsonWebKey.prototype.k;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-RsaOtherPrimesInfo\n * @see Section-6.3.2.7:\n * https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40\n */\nwebCrypto.RsaOtherPrimesInfo = function() {};\n\n\n/**\n * @type {string} Parameter within an "oth" array member represents the value\n * of a subsequent prime factor.\n */\nwebCrypto.RsaOtherPrimesInfo.prototype.r;\n\n\n/**\n * @type {string} Parameter within an "oth" array member represents the CRT\n * exponent of the corresponding prime factor.\n */\nwebCrypto.RsaOtherPrimesInfo.prototype.d;\n\n\n/**\n * @type {string} Parameter within an "oth" array member represents the CRT\n * coefficient of the corresponding prime factor.\n */\nwebCrypto.RsaOtherPrimesInfo.prototype.t;\n\n\n/**\n * @record\n * @extends webCrypto.Algorithm\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaKeyGenParams\n */\nwebCrypto.RsaKeyGenParams;\n/**\n * @type {number}\n */\nwebCrypto.RsaKeyGenParams.prototype.modulusLength;\n/**\n * @type {webCrypto.BigInteger}\n */\nwebCrypto.RsaKeyGenParams.prototype.publicExponent;\n\n\n/**\n * @record\n * @extends webCrypto.RsaKeyGenParams\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaHashedKeyGenParams\n */\nwebCrypto.RsaHashedKeyGenParams;\n/**\n * @type {webCrypto.HashAlgorithmIdentifier}\n */\nwebCrypto.RsaHashedKeyGenParams.prototype.hash;\n\n\n/**\n * @record\n * @extends webCrypto.KeyAlgorithm\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaKeyAlgorithm\n */\nwebCrypto.RsaKeyAlgorithm;\n/**\n * @type {number}\n */\nwebCrypto.RsaKeyAlgorithm.prototype.modulusLength;\n/**\n * @type {webCrypto.BigInteger}\n */\nwebCrypto.RsaKeyAlgorithm.prototype.publicExponent;\n\n\n/**\n * @record\n * @extends webCrypto.RsaKeyAlgorithm\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaHashedKeyAlgorithm\n */\nwebCrypto.RsaHashedKeyAlgorithm;\n/**\n * @type {webCrypto.KeyAlgorithm}\n */\nwebCrypto.RsaHashedKeyAlgorithm.prototype.hash;\n\n\n/**\n * @record\n * @extends webCrypto.Algorithm\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaHashedImportParams\n */\nwebCrypto.RsaHashedImportParams;\n/**\n * @type {webCrypto.HashAlgorithmIdentifier}\n */\nwebCrypto.RsaHashedImportParams.prototype.hash;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/WebCryptoAPI/#subtlecrypto-interface\n */\nwebCrypto.SubtleCrypto = function() {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: AES-CBC, AES-CTR, AES-GCM, and RSA-OAEP.\n * @param {!webCrypto.CryptoKey} key Key to be used for signing.\n * @param {!BufferSource} data Data to be encrypted (cleartext).\n * @return {!Promise} Ciphertext generated by the encryption of\n * the cleartext.\n */\nwebCrypto.SubtleCrypto.prototype.encrypt = function(algorithm, key,\n data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: AES-CBC, AES-CTR, AES-GCM, and RSA-OAEP.\n * @param {!webCrypto.CryptoKey} key Key to be used for signing.\n * @param {!BufferSource} data Data to be decrypted (ciphertext).\n * @return {!Promise} Cleartext generated by the decryption of the\n * ciphertext.\n */\nwebCrypto.SubtleCrypto.prototype.decrypt = function(algorithm, key,\n data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: HMAC, RSASSA-PKCS1-v1_5, and ECDSA.\n * @param {!webCrypto.CryptoKey} key Private key to be used for signing.\n * @param {!BufferSource} data Data to be signed.\n * @return {!Promise} Returns the signature on success.\n */\nwebCrypto.SubtleCrypto.prototype.sign = function(algorithm, key,\n data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: HMAC, RSASSA-PKCS1-v1_5, and ECDSA.\n * @param {!webCrypto.CryptoKey} key Private key to be used for signing.\n * @param {!BufferSource} signature Signature to verify.\n * @param {!BufferSource} data Data whose signature needs to be verified.\n * @return {!Promise} Returns if the signature operating has been\n * successful.\n */\nwebCrypto.SubtleCrypto.prototype.verify = function(algorithm, key,\n signature, data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: SHA-1, SHA-256, SHA-384, and SHA-512.\n * @param {!BufferSource} data Data to be hashed using the hashing algorithm.\n * @return {!Promise} returns the hash on success.\n */\nwebCrypto.SubtleCrypto.prototype.digest = function(algorithm, data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier|webCrypto.RsaHashedKeyGenParams}\n * algorithm Supported values are: SHA-1, SHA-256, SHA-384, and SHA-512.\n * @param {boolean} extractable If the key can be extracted from the CryptoKey\n * object at a later stage.\n * @param {!Array} keyUsages Indication of new key options i.e.\n * encrypt, decrypt, sign, verify, deriveKey, deriveBits, wrapKey,\n * unwrapKey.\n * @return {!Promise} returns the\n * generated key.\n */\nwebCrypto.SubtleCrypto.prototype.generateKey = function(algorithm,\n extractable, keyUsages) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm The key derivation\n * algorithm to use. Supported values are: ECDH, DH, PBKDF2, and HKDF-CTR.\n * @param {!webCrypto.CryptoKey} baseKey Key to be used by the key\n * derivation algorithm.\n * @param {!webCrypto.AlgorithmIdentifier} derivedKeyAlgo Defines the key\n * derivation algorithm to use.\n * @param {boolean} extractable Indicates if the key can be extracted from the\n * CryptoKey object at a later stage.\n * @param {!Array} keyUsages Indicates what can be done with the\n * derivated key.\n * @return {!Promise} returns the\n * generated key.\n */\nwebCrypto.SubtleCrypto.prototype.deriveKey = function(algorithm,\n baseKey, derivedKeyAlgo, extractable, keyUsages) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm The key derivation\n * algorithm to use.\n * @param {!webCrypto.CryptoKey} baseKey Key to be used by the key\n * derivation algorithm.\n * @param {number} length\n * @return {!Promise} returns the generated bits.\n */\nwebCrypto.SubtleCrypto.prototype.deriveBits = function(algorithm,\n baseKey, length) {};\n\n\n/**\n * @param {string} format Enumerated value describing the data\n * format of the key to imported.\n * @param {!BufferSource|!webCrypto.JsonWebKey} keyData The key\n * in the given format.\n * @param {!webCrypto.AlgorithmIdentifier|webCrypto.RsaHashedImportParams}\n * algorithm Supported values are: AES-CTR, AES-CBC, AES-GCM, RSA-OAEP,\n * AES-KW, HMAC, RSASSA-PKCS1-v1_5, ECDSA, ECDH, DH.\n * @param {boolean} extractable If the key can be extracted from the CryptoKey\n * object at a later stage.\n * @param {!Array} keyUsages Indication of new key options i.e.\n * encrypt, decrypt, sign, verify, deriveKey, deriveBits, wrapKey,\n * unwrapKey.\n * @return {!Promise} returns the generated key.\n */\nwebCrypto.SubtleCrypto.prototype.importKey = function(format, keyData,\n algorithm, extractable, keyUsages) {};\n\n\n/**\n * @param {string} format Enumerated value describing the data\n * format of the key to imported.\n * @param {!webCrypto.CryptoKey} key CryptoKey to export.\n * @return {!Promise} returns the key in the\n * requested format.\n */\nwebCrypto.SubtleCrypto.prototype.exportKey = function(format, key) {};\n\n\n/**\n * @param {string} format Value describing the data format in which the key must\n * be wrapped. It can be one of the following: raw, pkcs8, spki, jwk.\n * @param {!webCrypto.CryptoKey} key CryptoKey to wrap.\n * @param {!webCrypto.CryptoKey} wrappingKey CryptoKey used to perform\n * the wrapping.\n * @param {!webCrypto.AlgorithmIdentifier} wrapAlgorithm algorithm used\n * to perform the wrapping. It is one of the following: AES-CBC, AES-CTR,\n * AES-GCM, RSA-OAEP, and AES-KW.\n * @return {!Promise} returns the wrapped key in the requested\n * format.\n */\nwebCrypto.SubtleCrypto.prototype.wrapKey = function(format,\n key, wrappingKey, wrapAlgorithm) {};\n\n\n/**\n * @param {string} format Value describing the data format in which the key must\n * be wrapped. It can be one of the following: raw, pkcs8, spki, jwk.\n * @param {!BufferSource} wrappedKey Contains the wrapped key in the given\n * format.\n * @param {!webCrypto.CryptoKey} unwrappingKey CryptoKey used to perform\n * the unwrapping.\n * @param {!webCrypto.AlgorithmIdentifier} unwrapAlgorithm Algorithm\n * used to perform the unwrapping. It is one of the following: AES-CBC,\n * AES-CTR, AES-GCM, RSA-OAEP, and AES-KW.\n * @param {!webCrypto.AlgorithmIdentifier} unwrappedKeyAlgorithm\n * Represents the algorithm of the wrapped key.\n * @param {boolean} extractable Indicates if the key can be extracted from the\n * CryptoKey object at a later stage.\n * @param {!Array} keyUsages Indicates what can be done with the\n * derivated key.\n * @return {!Promise} returns the unwrapped key.\n */\nwebCrypto.SubtleCrypto.prototype.unwrapKey = function(format, wrappedKey,\n unwrappingKey, unwrapAlgorithm, unwrappedKeyAlgorithm, extractable,\n keyUsages) {};\n\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Crypto\n * @interface\n */\nwebCrypto.Crypto = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.crypto.getRandomValues\n * @param {!ArrayBufferView} typedArray\n * @return {!ArrayBufferView}\n * @throws {Error}\n */\nwebCrypto.Crypto.prototype.getRandomValues = function(typedArray) {};\n\n/**\n * @type {?webCrypto.SubtleCrypto}\n * @see http://www.w3.org/TR/WebCryptoAPI/#Crypto-attribute-subtle\n */\nwebCrypto.Crypto.prototype.subtle;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.crypto\n * @type {!webCrypto.Crypto|undefined}\n */\nvar crypto;\n', -+"externs/w3c_xml.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s XML related specifications.\n * This file depends on w3c_dom2.js.\n * The whole file has been fully type annotated.\n *\n * Provides the XML standards from W3C.\n * Includes:\n * XPath - Fully type annotated\n * XMLHttpRequest - Fully type annotated\n *\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html\n * @see https://xhr.spec.whatwg.org/\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n * @author stevey@9oo91e.qjz9zk (Steve Yegge)\n */\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathException\n */\nfunction XPathException() {}\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#INVALID_EXPRESSION_ERR\n */\nXPathException.INVALID_EXPRESSION_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#TYPE_ERR\n */\nXPathException.TYPE_ERR;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#\n */\nXPathException.prototype.code;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator\n */\nfunction XPathEvaluator() {}\n\n/**\n * @param {string} expr\n * @param {?XPathNSResolver=} opt_resolver\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator-createExpression\n * @throws XPathException\n * @throws DOMException\n * @return {undefined}\n */\nXPathEvaluator.prototype.createExpression = function(expr, opt_resolver) {};\n\n/**\n * @param {Node} nodeResolver\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator-createNSResolver\n * @return {undefined}\n */\nXPathEvaluator.prototype.createNSResolver = function(nodeResolver) {};\n\n/**\n * @param {string} expr\n * @param {Node} contextNode\n * @param {?XPathNSResolver=} opt_resolver\n * @param {?number=} opt_type\n * @param {*=} opt_result\n * @return {XPathResult}\n * @throws XPathException\n * @throws DOMException\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator-evaluate\n */\nXPathEvaluator.prototype.evaluate = function(expr, contextNode, opt_resolver,\n opt_type, opt_result) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathExpression\n */\nfunction XPathExpression() {}\n\n/**\n * @param {Node} contextNode\n * @param {number=} opt_type\n * @param {*=} opt_result\n * @return {*}\n * @throws XPathException\n * @throws DOMException\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathExpression-evaluate\n */\nXPathExpression.prototype.evaluate = function(contextNode, opt_type,\n opt_result) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNSResolver\n */\nfunction XPathNSResolver() {}\n\n/**\n * @param {string} prefix\n * @return {?string}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNSResolver-lookupNamespaceURI\n */\nXPathNSResolver.prototype.lookupNamespaceURI = function(prefix) {};\n\n/**\n * From http://www.w3.org/TR/xpath\n *\n * XPath is a language for addressing parts of an XML document, designed to be\n * used by both XSLT and XPointer.\n *\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult\n */\nfunction XPathResult() {}\n\n/**\n * @type {boolean} {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-booleanValue\n */\nXPathResult.prototype.booleanValue;\n\n/**\n * @type {boolean} {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-invalid-iterator-state\n */\nXPathResult.prototype.invalidInteratorState;\n\n/**\n * @type {number}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-numberValue\n */\nXPathResult.prototype.numberValue;\n\n/**\n * @type {number}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-resultType\n */\nXPathResult.prototype.resultType;\n\n/**\n * @type {Node}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-singleNodeValue\n */\nXPathResult.prototype.singleNodeValue;\n\n/**\n * @type {number}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-snapshot-length\n */\nXPathResult.prototype.snapshotLength;\n\n/**\n * @type {string}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-stringValue\n */\nXPathResult.prototype.stringValue;\n\n/**\n * @return {Node}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @throws DOMException {@see DOMException.INVALID_STATE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-iterateNext\n */\nXPathResult.prototype.iterateNext = function() {};\n\n/**\n * @param {number} index\n * @return {Node}\n * @throws XPathException\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-snapshotItem\n */\nXPathResult.prototype.snapshotItem = function(index) {};\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ANY-TYPE\n */\nXPathResult.ANY_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-NUMBER-TYPE\n */\nXPathResult.NUMBER_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-STRING-TYPE\n */\nXPathResult.STRING_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-BOOLEAN-TYPE\n */\nXPathResult.BOOLEAN_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-UNORDERED-NODE-ITERATOR-TYPE\n */\nXPathResult.UNORDERED_NODE_ITERATOR_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ORDERED-NODE-ITERATOR-TYPE\n */\nXPathResult.ORDERED_NODE_ITERATOR_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-UNORDERED-NODE-SNAPSHOT-TYPE\n */\nXPathResult.UNORDERED_NODE_SNAPSHOT_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ORDERED-NODE-SNAPSHOT-TYPE\n */\nXPathResult.ORDERED_NODE_SNAPSHOT_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ANY-UNORDERED-NODE-TYPE\n */\nXPathResult.ANY_UNORDERED_NODE_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-FIRST-ORDERED-NODE-TYPE\n */\nXPathResult.FIRST_ORDERED_NODE_TYPE;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNamespace\n */\nfunction XPathNamespace() {}\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNamespace-ownerElement\n */\nXPathNamespace.prototype.ownerElement;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPATH_NAMESPACE_NODE\n */\nXPathNamespace.XPATH_NAMESPACE_NODE;\n\n/**\n * From https://xhr.spec.whatwg.org/#xmlhttprequest\n *\n * (Draft)\n *\n * The XMLHttpRequest Object specification defines an API that provides\n * scripted client functionality for transferring data between a client and a\n * server.\n *\n * @constructor\n * @implements {EventTarget}\n * @see https://xhr.spec.whatwg.org/#xmlhttprequest\n */\nfunction XMLHttpRequest() {}\n\n/** @override */\nXMLHttpRequest.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nXMLHttpRequest.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nXMLHttpRequest.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @param {string} method\n * @param {string} url\n * @param {?boolean=} opt_async\n * @param {?string=} opt_user\n * @param {?string=} opt_password\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#the-open()-method\n */\nXMLHttpRequest.prototype.open = function(method, url, opt_async, opt_user,\n opt_password) {};\n\n/**\n * @param {string} header\n * @param {string} value\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#the-setrequestheader()-method\n */\nXMLHttpRequest.prototype.setRequestHeader = function(header, value) {};\n\n/**\n * @param {ArrayBuffer|ArrayBufferView|Blob|Document|FormData|string=} opt_data\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#the-send()-method\n */\nXMLHttpRequest.prototype.send = function(opt_data) {};\n\n/**\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#the-abort()-method\n */\nXMLHttpRequest.prototype.abort = function() {};\n\n/**\n * @return {string}\n * @see https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method\n */\nXMLHttpRequest.prototype.getAllResponseHeaders = function() {};\n\n/**\n * @param {string} header\n * @return {string}\n * @see https://xhr.spec.whatwg.org/#the-getresponseheader()-method\n */\nXMLHttpRequest.prototype.getResponseHeader = function(header) {};\n\n/**\n * @type {string}\n * @see https://xhr.spec.whatwg.org/#the-responsetext-attribute\n */\nXMLHttpRequest.prototype.responseText;\n\n/**\n * This is not supported in any IE browser (as of August 2016).\n * @type {string}\n * @see https://xhr.spec.whatwg.org/#the-responseurl-attribute\n */\nXMLHttpRequest.prototype.responseURL;\n\n/**\n * @type {Document}\n * @see https://xhr.spec.whatwg.org/#the-responsexml-attribute\n */\nXMLHttpRequest.prototype.responseXML;\n\n/**\n * @type {number}\n * @see https://xhr.spec.whatwg.org/#dom-xmlhttprequest-readystate\n */\nXMLHttpRequest.prototype.readyState;\n\n/**\n * @type {number}\n * @see https://xhr.spec.whatwg.org/#the-status-attribute\n */\nXMLHttpRequest.prototype.status;\n\n/**\n * @type {string}\n * @see https://xhr.spec.whatwg.org/#the-statustext-attribute\n */\nXMLHttpRequest.prototype.statusText;\n\n/**\n * @type {number}\n * @see https://xhr.spec.whatwg.org/#the-timeout-attribute\n */\nXMLHttpRequest.prototype.timeout;\n\n/**\n * @type {?function(!Event)}\n * @see https://xhr.spec.whatwg.org/#event-handlers\n */\nXMLHttpRequest.prototype.onreadystatechange;\n\n/**\n * @type {?function(!Event)}\n * @see https://xhr.spec.whatwg.org/#event-handlers\n */\nXMLHttpRequest.prototype.onerror;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.UNSENT;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.OPENED;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.HEADERS_RECEIVED;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.LOADING;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.DONE;\n\n\n/**\n * @see https://xhr.spec.whatwg.org/#formdataentryvalue\n * @typedef {!File|string}\n */\nvar FormDataEntryValue;\n\n/**\n * The FormData object represents an ordered collection of entries. Each entry\n * has a name and value.\n *\n * @param {?Element=} form An optional form to use for constructing the form\n * data set.\n * @constructor\n * @implements {Iterable>}\n * @see https://xhr.spec.whatwg.org/#interface-formdata\n */\nfunction FormData(form) {}\n\n/**\n * @param {string} name\n * @param {?Blob|string} value\n * @param {string=} filename\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-append\n */\nFormData.prototype.append = function(name, value, filename) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-delete\n */\nFormData.prototype.delete = function(name) {};\n\n/**\n * @param {string} name\n * @return {?FormDataEntryValue}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-get\n */\nFormData.prototype.get = function(name) {};\n\n/**\n * @param {string} name\n * @return {!Array}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-getall\n */\nFormData.prototype.getAll = function(name) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-has\n */\nFormData.prototype.has = function(name) {};\n\n/**\n * @param {string} name\n * @param {!Blob|string} value\n * @param {string=} filename\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-set\n */\nFormData.prototype.set = function(name, value, filename) {};\n\n', -+"externs/window.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview JavaScript Built-Ins for windows properties.\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n * @author stevey@9oo91e.qjz9zk (Steve Yegge)\n */\n\n// Window properties\n// Only common properties are here. Others such as open()\n// should be used with an explicit Window object.\n\n/**\n * @const {!Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.top\n */\nvar top;\n\n/**\n * @const {!Navigator}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.navigator\n */\nvar navigator;\n\n/**\n * @const {!HTMLDocument}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.document\n */\nvar document;\n\n/**\n * @const {!Location}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.location\n * @suppress {duplicate}\n * @implicitCast\n */\nvar location;\n\n/**\n * @const {!Screen}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/window.screen\n */\nvar screen;\n\n/**\n * @const {!Window}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/Window.self\n */\nvar self;\n\n/**\n * @type {!Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window\n */\nvar window;\n\n/**\n * @const {boolean}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Window/isSecureContext\n */\nvar isSecureContext;\n\n/**\n * @const {!VisualViewport}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Window/visualViewport\n */\nvar visualViewport;\n\n/**\n * @param {*} message\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.alert\n * @return {undefined}\n */\nfunction alert(message) {}\n\n/**\n * @param {number=} immediateID\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/DOM/window.clearImmediate\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/hh924825(v=vs.85).aspx\n * @return {undefined}\n */\nfunction clearImmediate(immediateID) {}\n\n/**\n * @param {?number|undefined} intervalID\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.clearInterval\n * @suppress {duplicate}\n * @return {undefined}\n */\nfunction clearInterval(intervalID) {}\n\n/**\n * @param {?number|undefined} timeoutID\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.clearTimeout\n * @suppress {duplicate}\n * @return {undefined}\n */\nfunction clearTimeout(timeoutID) {}\n\n/**\n * @param {*} message\n * @return {boolean}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.confirm\n */\nfunction confirm(message) {}\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.dump\n * @param {*} x\n * @return {undefined}\n */\nfunction dump(x) {}\n\n/**\n * @param {string} message\n * @param {string=} opt_value\n * @return {?string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.prompt\n */\nfunction prompt(message, opt_value) {}\n\n/**\n * @param {function()} callback\n * @param {...?} callbackParams\n * @return {number}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/DOM/window.setImmediate\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/hh773176(v=vs.85).aspx\n */\nfunction setImmediate(callback, callbackParams) {}\n\n/**\n * @param {Function|!TrustedScript|string} callback\n * @param {number=} opt_delay\n * @param {...?} callbackParams\n * @return {number}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.setInterval\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#timers\n */\nfunction setInterval(callback, opt_delay, callbackParams) {}\n\n/**\n * @param {Function|!TrustedScript|string} callback\n * @param {number=} opt_delay\n * @param {...*} callbackParams\n * @return {number}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.setTimeout\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#timers\n */\nfunction setTimeout(callback, opt_delay, callbackParams) {}\n\n/**\n * Returns whether the object has a property with the specified name.\n *\n * @param {*} propertyName Implicitly cast to a string.\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty\n */\nfunction hasOwnProperty (propertyName) {}\n', - "externs/web_animations.js":"/*\n * Copyright 2016 The Closure Compiler authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @fileoverview Basic externs for the Web Animations API. This is not\n * nessecarily exhaustive. For more information, see the spec-\n * https://w3c.github.io/web-animations\n * @externs\n */\n\n\n/**\n * @param {!Object} frames\n * @param {(number|KeyframeAnimationOptions)=} options\n * @return {!Animation}\n * @see https://www.w3.org/TR/web-animations/#the-animatable-interface-mixin\n */\nElement.prototype.animate = function(frames, options) {};\n\n/**\n * @return {!Array}\n */\nElement.prototype.getAnimations = function() {};\n\n\n/**\n * @constructor\n * @param {AnimationEffectReadOnly=} effect\n * @param {AnimationTimeline=} timeline\n * @implements {EventTarget}\n */\nvar Animation = function(effect, timeline) {};\n\n/** @override */\nAnimation.prototype.addEventListener = function(type, listener, options) {};\n\n/** @override */\nAnimation.prototype.removeEventListener = function(type, listener, options) {};\n\n/** @override */\nAnimation.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @return {undefined}\n */\nAnimation.prototype.cancel = function() {};\n\n/**\n * @return {undefined}\n */\nAnimation.prototype.finish = function() {};\n\n/**\n * @return {undefined}\n */\nAnimation.prototype.pause = function() {};\n\n/**\n * @return {undefined}\n */\nAnimation.prototype.play = function() {};\n\n/**\n * @return {undefined}\n */\nAnimation.prototype.reverse = function() {};\n\n/** @type {number} */\nAnimation.prototype.currentTime;\n\n/** @type {AnimationEffectReadOnly} */\nAnimation.prototype.effect;\n\n/** @type {!Promise} */\nAnimation.prototype.finished;\n\n/** @type {string} */\nAnimation.prototype.id;\n\n/** @type {?function(!Event)} */\nAnimation.prototype.oncancel;\n\n/** @type {?function(!Event)} */\nAnimation.prototype.onfinish;\n\n/** @type {number} */\nAnimation.prototype.playbackRate;\n\n/** @type {string} */\nAnimation.prototype.playState;\n\n/** @type {!Promise} */\nAnimation.prototype.ready;\n\n/** @type {number} */\nAnimation.prototype.startTime;\n\n/** @type {!AnimationTimeline} */\nAnimation.prototype.timeline;\n\n\n/**\n * @interface\n */\nvar AnimationEffectReadOnly = function() {};\n\n/**\n * @return {!ComputedTimingProperties}\n */\nAnimationEffectReadOnly.prototype.getComputedTiming = function() {};\n\n/** @type {!AnimationEffectTiming} */\nAnimationEffectReadOnly.prototype.timing;\n\n\n/**\n * @constructor\n * @param {Element} target\n * @param {(!Array>|!Object>)} frames\n * @param {(number|AnimationEffectTimingProperties)=} options\n * @implements {AnimationEffectReadOnly}\n */\nvar KeyframeEffectReadOnly = function(target, frames, options) {};\n\n/** @override */\nKeyframeEffectReadOnly.prototype.getComputedTiming = function() {};\n\n/** @override */\nKeyframeEffectReadOnly.prototype.timing;\n\n\n/**\n * @constructor\n * @param {Element} target\n * @param {(!Array>|!Object>)} frames\n * @param {(number|AnimationEffectTimingProperties)=} options\n * @extends {KeyframeEffectReadOnly}\n */\nvar KeyframeEffect = function(target, frames, options) {};\n\n\n/**\n * @record\n */\nvar AnimationEffectTimingProperties = function() {};\n\n/** @type {number|undefined} */\nAnimationEffectTimingProperties.prototype.delay;\n\n/** @type {number|undefined} */\nAnimationEffectTimingProperties.prototype.endDelay;\n\n/** @type {string|undefined} */\nAnimationEffectTimingProperties.prototype.fill;\n\n/** @type {number|undefined} */\nAnimationEffectTimingProperties.prototype.iterationStart;\n\n/** @type {number|undefined} */\nAnimationEffectTimingProperties.prototype.iterations;\n\n/** @type {number|string|undefined} */\nAnimationEffectTimingProperties.prototype.duration;\n\n/** @type {string|undefined} */\nAnimationEffectTimingProperties.prototype.direction;\n\n/** @type {string|undefined} */\nAnimationEffectTimingProperties.prototype.easing;\n\n/**\n * @record\n * @extends {AnimationEffectTimingProperties}\n */\nvar KeyframeEffectOptions = function() {};\n\n/**\n * Possible values: 'replace', 'accumulate'\n * @type {string|undefined}\n */\nKeyframeEffectOptions.prototype.iterationComposite;\n\n/**\n * Possible values: 'replace', 'add', 'accumulate'\n * @type {string|undefined}\n */\nKeyframeEffectOptions.prototype.composite;\n\n/**\n * @record\n * @extends {KeyframeEffectOptions}\n */\nvar KeyframeAnimationOptions = function() {};\n\n/** @type {string|undefined} */\nKeyframeAnimationOptions.prototype.id;\n\n\n/**\n * @record\n * @extends {AnimationEffectTimingProperties}\n */\nvar ComputedTimingProperties = function() {};\n\n/** @type {number} */\nComputedTimingProperties.prototype.endTime;\n\n/** @type {number} */\nComputedTimingProperties.prototype.activeDuration;\n\n/** @type {?number} */\nComputedTimingProperties.prototype.localTime;\n\n/** @type {?number} */\nComputedTimingProperties.prototype.progress;\n\n/** @type {?number} */\nComputedTimingProperties.prototype.currentIteration;\n\n\n/**\n * @interface\n */\nvar AnimationEffectTimingReadOnly = function() {};\n\n/** @type {number} */\nAnimationEffectTimingReadOnly.prototype.delay;\n\n/** @type {number} */\nAnimationEffectTimingReadOnly.prototype.endDelay;\n\n/** @type {string} */\nAnimationEffectTimingReadOnly.prototype.fill;\n\n/** @type {number} */\nAnimationEffectTimingReadOnly.prototype.iterationStart;\n\n/** @type {number} */\nAnimationEffectTimingReadOnly.prototype.iterations;\n\n/** @type {number|string} */\nAnimationEffectTimingReadOnly.prototype.duration;\n\n/** @type {string} */\nAnimationEffectTimingReadOnly.prototype.direction;\n\n/** @type {string} */\nAnimationEffectTimingReadOnly.prototype.easing;\n\n\n/**\n * @interface\n * @extends {AnimationEffectTimingReadOnly}\n */\nvar AnimationEffectTiming = function() {};\n\n\n/**\n * @interface\n */\nvar AnimationTimeline = function() {};\n\n/** @type {?number} */\nAnimationTimeline.prototype.currentTime;\n\n\n/**\n * @constructor\n * @implements {AnimationTimeline}\n */\nvar DocumentTimeline = function() {};\n\n/** @override */\nDocumentTimeline.prototype.currentTime;\n\n\n/** @type {!DocumentTimeline} */\nDocument.prototype.timeline;\n\n/**\n * Externs for the Web Animations API (Level 2 / Groups).\n *\n * This defines externs for the \"-next\" version of the Web Animations API\n * polyfill found online at:\n * https://github.com/web-animations/web-animations.js\n *\n * These features are NOT natively implemented in browsers and are not clearly\n * part of the official spec. This is NOT intended to be exhaustive, and\n * requires the base externs from web-animations.js.\n *\n */\n\n\n/** @type {Element} */\nKeyframeEffectReadOnly.prototype.target;\n\n/** @type {?function(number, !KeyframeEffect, !Animation)|undefined} */\nKeyframeEffectReadOnly.prototype.onsample;\n\n\n/**\n * @param {!AnimationEffectReadOnly} effect\n * @return {!Animation}\n */\nDocumentTimeline.prototype.play = function(effect) {};\n\n/**\n * @return {!Array}\n */\nDocumentTimeline.prototype.getAnimations = function() {};\n\n\n/**\n * @param {!Array} children\n * @param {AnimationEffectTimingProperties=} timing\n * @constructor\n * @implements {AnimationEffectReadOnly}\n */\nvar SequenceEffect = function(children, timing) {};\n\n/** @override */\nSequenceEffect.prototype.getComputedTiming = function() {};\n\n/** @override */\nSequenceEffect.prototype.timing;\n\n/** @type {!Array} */\nSequenceEffect.prototype.children;\n\n\n/**\n * @param {!Array} children\n * @param {AnimationEffectTimingProperties=} timing\n * @constructor\n * @implements {AnimationEffectReadOnly}\n */\nvar GroupEffect = function(children, timing) {};\n\n/** @override */\nGroupEffect.prototype.getComputedTiming = function() {};\n\n/** @override */\nGroupEffect.prototype.timing;\n\n/** @type {!Array} */\nGroupEffect.prototype.children;\n", --"externs/webkit_notifications.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for W3C\'s Notifications specification.\n * @externs\n * @author atwilson@google.com (Drew Wilson)\n */\n\n/**\n * @typedef {{\n * dir: (string|undefined),\n * lang: (string|undefined),\n * body: (string|undefined),\n * tag: (string|undefined),\n * image: (string|undefined),\n * icon: (string|undefined),\n * badge: (string|undefined),\n * vibrate: (!Array|undefined),\n * timestamp: (number|undefined),\n * renotify: (boolean|undefined),\n * silent: (boolean|undefined),\n * requireInteraction: (boolean|undefined),\n * data: (*|undefined),\n * actions: (!Array|undefined),\n * }}\n * TODO(rsk): change the type of data to a serializable object\n * (https://html.spec.whatwg.org/multipage/structured-data.html).\n *\n * @see http://notifications.spec.whatwg.org/#notification\n */\nvar NotificationOptions;\n\n/**\n * @typedef {{action: string, title: string, icon: (string|undefined)}}\n * @see https://notifications.spec.whatwg.org/#dictdef-notificationoptions\n */\nvar NotificationAction;\n\n/**\n * @typedef {{tag: (string|undefined)}}\n * @see https://notifications.spec.whatwg.org/#dictdef-getnotificationoptions\n */\nvar GetNotificationOptions;\n\n/** @interface */\nvar NotificationOptionsInterface_ = function() {}\n/** @type {string} */ NotificationOptionsInterface_.prototype.dir;\n/** @type {string} */ NotificationOptionsInterface_.prototype.lang;\n/** @type {string} */ NotificationOptionsInterface_.prototype.body;\n/** @type {string} */ NotificationOptionsInterface_.prototype.tag;\n/** @type {string} */ NotificationOptionsInterface_.prototype.icon;\n/** @type {boolean} */\n NotificationOptionsInterface_.prototype.requireInteraction;\n\n/**\n * @param {string} title\n * @param {NotificationOptions=} opt_options\n * @constructor\n * @implements {EventTarget}\n * @see http://notifications.spec.whatwg.org/#notification\n */\nfunction Notification(title, opt_options) {}\n\n/**\n * @type {string}\n */\nNotification.permission;\n\n/**\n * @param {NotificationPermissionCallback=} opt_callback\n * @return {!Promise}\n */\nNotification.requestPermission = function(opt_callback) {};\n\n/** @override */\nNotification.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nNotification.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nNotification.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {string}\n */\nNotification.prototype.title;\n\n/**\n * @type {string}\n */\nNotification.prototype.body;\n\n/**\n * @type {string}\n */\nNotification.prototype.icon;\n\n/**\n * The string used by clients to identify the notification.\n * @type {string}\n */\nNotification.prototype.tag;\n\n/**\n * The ID used by clients to uniquely identify notifications to eliminate\n * duplicate notifications.\n * @type {string}\n * @deprecated Use NotificationOptions.tag instead.\n */\nNotification.prototype.replaceId;\n\n/**\n * @type {*}\n */\nNotification.prototype.data;\n\n/**\n * The string used by clients to specify the directionality (rtl/ltr) of the\n * notification.\n * @type {string}\n * @deprecated Use NotificationOptions.titleDir and bodyDir instead.\n */\nNotification.prototype.dir;\n\n/**\n * Displays the notification.\n * @return {undefined}\n */\nNotification.prototype.show = function() {};\n\n/**\n * Prevents the notification from being displayed, or closes it if it is already\n * displayed.\n * @return {undefined}\n */\nNotification.prototype.cancel = function() {};\n\n/**\n * Prevents the notification from being displayed, or closes it if it is already\n * displayed.\n * @return {undefined}\n */\nNotification.prototype.close = function() {};\n\n/**\n * An event handler called when notification is closed.\n * @type {?function(Event)}\n */\nNotification.prototype.onclose;\n\n/**\n * An event handler called if the notification could not be displayed due to\n * an error (i.e. resource could not be loaded).\n * @type {?function(Event)}\n */\nNotification.prototype.onerror;\n\n/**\n * An event handler called when the notification has become visible.\n * @type {?function(Event)}\n * @deprecated Use onshow instead.\n */\nNotification.prototype.ondisplay;\n\n/**\n * An event handler called when the notification has become visible.\n * @type {?function(Event)}\n */\nNotification.prototype.onshow;\n\n/**\n * An event handler called when the notification has been clicked on.\n * @type {?function(Event)}\n */\nNotification.prototype.onclick;\n\n\n\n/**\n * @typedef {function(string)}\n * @see http://notifications.spec.whatwg.org/#notificationpermissioncallback\n */\nvar NotificationPermissionCallback;\n\n/**\n * @constructor\n * @see http://dev.w3.org/2006/webapi/WebNotifications/publish/#dialog-if\n * @deprecated Use Notification instead.\n */\nfunction NotificationCenter() {}\n\n/**\n * Creates a text+icon notification and displays it to the user.\n * @param {string} iconUrl\n * @param {string} title\n * @param {string} body\n * @return {Notification}\n */\nNotificationCenter.prototype.createNotification =\n function(iconUrl, title, body) {};\n\n/**\n * Creates an HTML notification and displays it to the user.\n * @param {string} url\n * @return {Notification}\n */\nNotificationCenter.prototype.createHTMLNotification = function(url) {};\n\n/**\n * Checks if the user has permission to display notifications.\n * @return {number}\n */\nNotificationCenter.prototype.checkPermission = function() {};\n\n/**\n * Requests permission from the user to display notifications.\n * @param {Function=} opt_callback\n * @return {void}\n */\nNotificationCenter.prototype.requestPermission = function(opt_callback) {};\n\n/**\n * WebKit browsers expose the NotificationCenter API through\n * window.webkitNotifications.\n * @type {NotificationCenter}\n */\nWindow.prototype.webkitNotifications;\n\n\n/**\n * @see https://notifications.spec.whatwg.org/#notificationevent\n * @constructor\n * @param {string} type\n * @param {!ExtendableEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction NotificationEvent(type, opt_eventInitDict) {}\n\n/** @type {!Notification} */\nNotificationEvent.prototype.notification;\n\n/** @type {string} */\nNotificationEvent.prototype.action;\n', -+"externs/webkit_notifications.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for W3C\'s Notifications specification.\n * @externs\n * @author atwilson@9oo91e.qjz9zk (Drew Wilson)\n */\n\n/**\n * @typedef {{\n * dir: (string|undefined),\n * lang: (string|undefined),\n * body: (string|undefined),\n * tag: (string|undefined),\n * image: (string|undefined),\n * icon: (string|undefined),\n * badge: (string|undefined),\n * vibrate: (!Array|undefined),\n * timestamp: (number|undefined),\n * renotify: (boolean|undefined),\n * silent: (boolean|undefined),\n * requireInteraction: (boolean|undefined),\n * data: (*|undefined),\n * actions: (!Array|undefined),\n * }}\n * TODO(rsk): change the type of data to a serializable object\n * (https://html.spec.whatwg.org/multipage/structured-data.html).\n *\n * @see http://notifications.spec.whatwg.org/#notification\n */\nvar NotificationOptions;\n\n/**\n * @typedef {{action: string, title: string, icon: (string|undefined)}}\n * @see https://notifications.spec.whatwg.org/#dictdef-notificationoptions\n */\nvar NotificationAction;\n\n/**\n * @typedef {{tag: (string|undefined)}}\n * @see https://notifications.spec.whatwg.org/#dictdef-getnotificationoptions\n */\nvar GetNotificationOptions;\n\n/** @interface */\nvar NotificationOptionsInterface_ = function() {}\n/** @type {string} */ NotificationOptionsInterface_.prototype.dir;\n/** @type {string} */ NotificationOptionsInterface_.prototype.lang;\n/** @type {string} */ NotificationOptionsInterface_.prototype.body;\n/** @type {string} */ NotificationOptionsInterface_.prototype.tag;\n/** @type {string} */ NotificationOptionsInterface_.prototype.icon;\n/** @type {boolean} */\n NotificationOptionsInterface_.prototype.requireInteraction;\n\n/**\n * @param {string} title\n * @param {NotificationOptions=} opt_options\n * @constructor\n * @implements {EventTarget}\n * @see http://notifications.spec.whatwg.org/#notification\n */\nfunction Notification(title, opt_options) {}\n\n/**\n * @type {string}\n */\nNotification.permission;\n\n/**\n * @param {NotificationPermissionCallback=} opt_callback\n * @return {!Promise}\n */\nNotification.requestPermission = function(opt_callback) {};\n\n/** @override */\nNotification.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nNotification.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nNotification.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {string}\n */\nNotification.prototype.title;\n\n/**\n * @type {string}\n */\nNotification.prototype.body;\n\n/**\n * @type {string}\n */\nNotification.prototype.icon;\n\n/**\n * The string used by clients to identify the notification.\n * @type {string}\n */\nNotification.prototype.tag;\n\n/**\n * The ID used by clients to uniquely identify notifications to eliminate\n * duplicate notifications.\n * @type {string}\n * @deprecated Use NotificationOptions.tag instead.\n */\nNotification.prototype.replaceId;\n\n/**\n * @type {*}\n */\nNotification.prototype.data;\n\n/**\n * The string used by clients to specify the directionality (rtl/ltr) of the\n * notification.\n * @type {string}\n * @deprecated Use NotificationOptions.titleDir and bodyDir instead.\n */\nNotification.prototype.dir;\n\n/**\n * Displays the notification.\n * @return {undefined}\n */\nNotification.prototype.show = function() {};\n\n/**\n * Prevents the notification from being displayed, or closes it if it is already\n * displayed.\n * @return {undefined}\n */\nNotification.prototype.cancel = function() {};\n\n/**\n * Prevents the notification from being displayed, or closes it if it is already\n * displayed.\n * @return {undefined}\n */\nNotification.prototype.close = function() {};\n\n/**\n * An event handler called when notification is closed.\n * @type {?function(Event)}\n */\nNotification.prototype.onclose;\n\n/**\n * An event handler called if the notification could not be displayed due to\n * an error (i.e. resource could not be loaded).\n * @type {?function(Event)}\n */\nNotification.prototype.onerror;\n\n/**\n * An event handler called when the notification has become visible.\n * @type {?function(Event)}\n * @deprecated Use onshow instead.\n */\nNotification.prototype.ondisplay;\n\n/**\n * An event handler called when the notification has become visible.\n * @type {?function(Event)}\n */\nNotification.prototype.onshow;\n\n/**\n * An event handler called when the notification has been clicked on.\n * @type {?function(Event)}\n */\nNotification.prototype.onclick;\n\n\n\n/**\n * @typedef {function(string)}\n * @see http://notifications.spec.whatwg.org/#notificationpermissioncallback\n */\nvar NotificationPermissionCallback;\n\n/**\n * @constructor\n * @see http://dev.w3.org/2006/webapi/WebNotifications/publish/#dialog-if\n * @deprecated Use Notification instead.\n */\nfunction NotificationCenter() {}\n\n/**\n * Creates a text+icon notification and displays it to the user.\n * @param {string} iconUrl\n * @param {string} title\n * @param {string} body\n * @return {Notification}\n */\nNotificationCenter.prototype.createNotification =\n function(iconUrl, title, body) {};\n\n/**\n * Creates an HTML notification and displays it to the user.\n * @param {string} url\n * @return {Notification}\n */\nNotificationCenter.prototype.createHTMLNotification = function(url) {};\n\n/**\n * Checks if the user has permission to display notifications.\n * @return {number}\n */\nNotificationCenter.prototype.checkPermission = function() {};\n\n/**\n * Requests permission from the user to display notifications.\n * @param {Function=} opt_callback\n * @return {void}\n */\nNotificationCenter.prototype.requestPermission = function(opt_callback) {};\n\n/**\n * WebKit browsers expose the NotificationCenter API through\n * window.webkitNotifications.\n * @type {NotificationCenter}\n */\nWindow.prototype.webkitNotifications;\n\n\n/**\n * @see https://notifications.spec.whatwg.org/#notificationevent\n * @constructor\n * @param {string} type\n * @param {!ExtendableEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction NotificationEvent(type, opt_eventInitDict) {}\n\n/** @type {!Notification} */\nNotificationEvent.prototype.notification;\n\n/** @type {string} */\nNotificationEvent.prototype.action;\n', - "externs/webkit_usercontent.js":'/*\n * Copyright 2016 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for WKWebView\'s User Content interface.\n * https://developer.apple.com/library/prerelease/ios/documentation/WebKit/Reference/WKUserContentController_Ref/\n * https://trac.webkit.org/browser/trunk/Source/WebCore/page/WebKitNamespace.h\n *\n * @externs\n */\n\n/** @constructor */\nfunction WebKitNamespace() {}\n\n\n/**\n * @type {!UserMessageHandlersNamespace}\n */\nWebKitNamespace.prototype.messageHandlers;\n\n\n/**\n * @constructor\n * @implements {IObject}\n */\nfunction UserMessageHandlersNamespace() {}\n\n\n/** @constructor */\nfunction UserMessageHandler() {}\n\n\n/**\n * @param {*} message\n * @return {undefined}\n */\nUserMessageHandler.prototype.postMessage = function(message) {};\n\n\n/**\n * @const {!WebKitNamespace}\n */\nvar webkit;\n', - "externs/webgl.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for WebGL functions as described at\n * http://www.khronos.org/registry/webgl/specs/latest/\n *\n * This file is current up to the WebGL 1.0.1 spec, including extensions.\n *\n * This relies on html5.js being included for Canvas and Typed Array support.\n *\n * This includes some extensions defined at\n * http://www.khronos.org/registry/webgl/extensions/\n *\n * @externs\n */\n\n\n/**\n * @typedef {ImageBitmap|ImageData|HTMLImageElement|HTMLCanvasElement|\n * HTMLVideoElement|OffscreenCanvas}\n */\nvar TexImageSource;\n\n/**\n * @constructor\n */\nfunction WebGLRenderingContext() {}\n\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_BUFFER_BIT;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BUFFER_BIT;\n\n/** @const {number} */\nWebGLRenderingContext.COLOR_BUFFER_BIT;\n\n/** @const {number} */\nWebGLRenderingContext.POINTS;\n\n/** @const {number} */\nWebGLRenderingContext.LINES;\n\n/** @const {number} */\nWebGLRenderingContext.LINE_LOOP;\n\n/** @const {number} */\nWebGLRenderingContext.LINE_STRIP;\n\n/** @const {number} */\nWebGLRenderingContext.TRIANGLES;\n\n/** @const {number} */\nWebGLRenderingContext.TRIANGLE_STRIP;\n\n/** @const {number} */\nWebGLRenderingContext.TRIANGLE_FAN;\n\n/** @const {number} */\nWebGLRenderingContext.ZERO;\n\n/** @const {number} */\nWebGLRenderingContext.ONE;\n\n/** @const {number} */\nWebGLRenderingContext.SRC_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.ONE_MINUS_SRC_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.SRC_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.ONE_MINUS_SRC_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.DST_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.ONE_MINUS_DST_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.DST_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.ONE_MINUS_DST_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.SRC_ALPHA_SATURATE;\n\n/** @const {number} */\nWebGLRenderingContext.FUNC_ADD;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND_EQUATION;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND_EQUATION_RGB;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND_EQUATION_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.FUNC_SUBTRACT;\n\n/** @const {number} */\nWebGLRenderingContext.FUNC_REVERSE_SUBTRACT;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND_DST_RGB;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND_SRC_RGB;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND_DST_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND_SRC_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.CONSTANT_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.ONE_MINUS_CONSTANT_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.CONSTANT_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.ONE_MINUS_CONSTANT_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.ARRAY_BUFFER;\n\n/** @const {number} */\nWebGLRenderingContext.ELEMENT_ARRAY_BUFFER;\n\n/** @const {number} */\nWebGLRenderingContext.ARRAY_BUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.ELEMENT_ARRAY_BUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.STREAM_DRAW;\n\n/** @const {number} */\nWebGLRenderingContext.STATIC_DRAW;\n\n/** @const {number} */\nWebGLRenderingContext.DYNAMIC_DRAW;\n\n/** @const {number} */\nWebGLRenderingContext.BUFFER_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.BUFFER_USAGE;\n\n/** @const {number} */\nWebGLRenderingContext.CURRENT_VERTEX_ATTRIB;\n\n/** @const {number} */\nWebGLRenderingContext.FRONT;\n\n/** @const {number} */\nWebGLRenderingContext.BACK;\n\n/** @const {number} */\nWebGLRenderingContext.FRONT_AND_BACK;\n\n/** @const {number} */\nWebGLRenderingContext.CULL_FACE;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND;\n\n/** @const {number} */\nWebGLRenderingContext.DITHER;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_TEST;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_TEST;\n\n/** @const {number} */\nWebGLRenderingContext.SCISSOR_TEST;\n\n/** @const {number} */\nWebGLRenderingContext.POLYGON_OFFSET_FILL;\n\n/** @const {number} */\nWebGLRenderingContext.SAMPLE_ALPHA_TO_COVERAGE;\n\n/** @const {number} */\nWebGLRenderingContext.SAMPLE_COVERAGE;\n\n/** @const {number} */\nWebGLRenderingContext.NO_ERROR;\n\n/** @const {number} */\nWebGLRenderingContext.INVALID_ENUM;\n\n/** @const {number} */\nWebGLRenderingContext.INVALID_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.INVALID_OPERATION;\n\n/** @const {number} */\nWebGLRenderingContext.OUT_OF_MEMORY;\n\n/** @const {number} */\nWebGLRenderingContext.CW;\n\n/** @const {number} */\nWebGLRenderingContext.CCW;\n\n/** @const {number} */\nWebGLRenderingContext.LINE_WIDTH;\n\n/** @const {number} */\nWebGLRenderingContext.ALIASED_POINT_SIZE_RANGE;\n\n/** @const {number} */\nWebGLRenderingContext.ALIASED_LINE_WIDTH_RANGE;\n\n/** @const {number} */\nWebGLRenderingContext.CULL_FACE_MODE;\n\n/** @const {number} */\nWebGLRenderingContext.FRONT_FACE;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_RANGE;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_WRITEMASK;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_CLEAR_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_FUNC;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_CLEAR_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_FUNC;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_FAIL;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_PASS_DEPTH_FAIL;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_PASS_DEPTH_PASS;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_REF;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_VALUE_MASK;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_WRITEMASK;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BACK_FUNC;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BACK_FAIL;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BACK_PASS_DEPTH_FAIL;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BACK_PASS_DEPTH_PASS;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BACK_REF;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BACK_VALUE_MASK;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BACK_WRITEMASK;\n\n/** @const {number} */\nWebGLRenderingContext.VIEWPORT;\n\n/** @const {number} */\nWebGLRenderingContext.SCISSOR_BOX;\n\n/** @const {number} */\nWebGLRenderingContext.COLOR_CLEAR_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.COLOR_WRITEMASK;\n\n/** @const {number} */\nWebGLRenderingContext.UNPACK_ALIGNMENT;\n\n/** @const {number} */\nWebGLRenderingContext.PACK_ALIGNMENT;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_TEXTURE_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_VIEWPORT_DIMS;\n\n/** @const {number} */\nWebGLRenderingContext.SUBPIXEL_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.RED_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.GREEN_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.BLUE_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.ALPHA_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.POLYGON_OFFSET_UNITS;\n\n/** @const {number} */\nWebGLRenderingContext.POLYGON_OFFSET_FACTOR;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_BINDING_2D;\n\n/** @const {number} */\nWebGLRenderingContext.SAMPLE_BUFFERS;\n\n/** @const {number} */\nWebGLRenderingContext.SAMPLES;\n\n/** @const {number} */\nWebGLRenderingContext.SAMPLE_COVERAGE_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.SAMPLE_COVERAGE_INVERT;\n\n/** @const {number} */\nWebGLRenderingContext.COMPRESSED_TEXTURE_FORMATS;\n\n/** @const {number} */\nWebGLRenderingContext.DONT_CARE;\n\n/** @const {number} */\nWebGLRenderingContext.FASTEST;\n\n/** @const {number} */\nWebGLRenderingContext.NICEST;\n\n/** @const {number} */\nWebGLRenderingContext.GENERATE_MIPMAP_HINT;\n\n/** @const {number} */\nWebGLRenderingContext.BYTE;\n\n/** @const {number} */\nWebGLRenderingContext.UNSIGNED_BYTE;\n\n/** @const {number} */\nWebGLRenderingContext.SHORT;\n\n/** @const {number} */\nWebGLRenderingContext.UNSIGNED_SHORT;\n\n/** @const {number} */\nWebGLRenderingContext.INT;\n\n/** @const {number} */\nWebGLRenderingContext.UNSIGNED_INT;\n\n/** @const {number} */\nWebGLRenderingContext.FLOAT;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_COMPONENT;\n\n/** @const {number} */\nWebGLRenderingContext.ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.RGB;\n\n/** @const {number} */\nWebGLRenderingContext.RGBA;\n\n/** @const {number} */\nWebGLRenderingContext.LUMINANCE;\n\n/** @const {number} */\nWebGLRenderingContext.LUMINANCE_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.UNSIGNED_SHORT_4_4_4_4;\n\n/** @const {number} */\nWebGLRenderingContext.UNSIGNED_SHORT_5_5_5_1;\n\n/** @const {number} */\nWebGLRenderingContext.UNSIGNED_SHORT_5_6_5;\n\n/** @const {number} */\nWebGLRenderingContext.FRAGMENT_SHADER;\n\n/** @const {number} */\nWebGLRenderingContext.VERTEX_SHADER;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_VERTEX_ATTRIBS;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_VERTEX_UNIFORM_VECTORS;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_VARYING_VECTORS;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_COMBINED_TEXTURE_IMAGE_UNITS;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_VERTEX_TEXTURE_IMAGE_UNITS;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_TEXTURE_IMAGE_UNITS;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_FRAGMENT_UNIFORM_VECTORS;\n\n/** @const {number} */\nWebGLRenderingContext.SHADER_TYPE;\n\n/** @const {number} */\nWebGLRenderingContext.DELETE_STATUS;\n\n/** @const {number} */\nWebGLRenderingContext.LINK_STATUS;\n\n/** @const {number} */\nWebGLRenderingContext.VALIDATE_STATUS;\n\n/** @const {number} */\nWebGLRenderingContext.ATTACHED_SHADERS;\n\n/** @const {number} */\nWebGLRenderingContext.ACTIVE_UNIFORMS;\n\n/** @const {number} */\nWebGLRenderingContext.ACTIVE_ATTRIBUTES;\n\n/** @const {number} */\nWebGLRenderingContext.SHADING_LANGUAGE_VERSION;\n\n/** @const {number} */\nWebGLRenderingContext.CURRENT_PROGRAM;\n\n/** @const {number} */\nWebGLRenderingContext.NEVER;\n\n/** @const {number} */\nWebGLRenderingContext.LESS;\n\n/** @const {number} */\nWebGLRenderingContext.EQUAL;\n\n/** @const {number} */\nWebGLRenderingContext.LEQUAL;\n\n/** @const {number} */\nWebGLRenderingContext.GREATER;\n\n/** @const {number} */\nWebGLRenderingContext.NOTEQUAL;\n\n/** @const {number} */\nWebGLRenderingContext.GEQUAL;\n\n/** @const {number} */\nWebGLRenderingContext.ALWAYS;\n\n/** @const {number} */\nWebGLRenderingContext.KEEP;\n\n/** @const {number} */\nWebGLRenderingContext.REPLACE;\n\n/** @const {number} */\nWebGLRenderingContext.INCR;\n\n/** @const {number} */\nWebGLRenderingContext.DECR;\n\n/** @const {number} */\nWebGLRenderingContext.INVERT;\n\n/** @const {number} */\nWebGLRenderingContext.INCR_WRAP;\n\n/** @const {number} */\nWebGLRenderingContext.DECR_WRAP;\n\n/** @const {number} */\nWebGLRenderingContext.VENDOR;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERER;\n\n/** @const {number} */\nWebGLRenderingContext.VERSION;\n\n/** @const {number} */\nWebGLRenderingContext.NEAREST;\n\n/** @const {number} */\nWebGLRenderingContext.LINEAR;\n\n/** @const {number} */\nWebGLRenderingContext.NEAREST_MIPMAP_NEAREST;\n\n/** @const {number} */\nWebGLRenderingContext.LINEAR_MIPMAP_NEAREST;\n\n/** @const {number} */\nWebGLRenderingContext.NEAREST_MIPMAP_LINEAR;\n\n/** @const {number} */\nWebGLRenderingContext.LINEAR_MIPMAP_LINEAR;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_MAG_FILTER;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_MIN_FILTER;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_WRAP_S;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_WRAP_T;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_2D;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_BINDING_CUBE_MAP;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP_POSITIVE_X;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_X;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP_POSITIVE_Y;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_Y;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP_POSITIVE_Z;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_Z;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_CUBE_MAP_TEXTURE_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE0;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE1;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE2;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE3;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE4;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE5;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE6;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE7;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE8;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE9;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE10;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE11;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE12;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE13;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE14;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE15;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE16;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE17;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE18;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE19;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE20;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE21;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE22;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE23;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE24;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE25;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE26;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE27;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE28;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE29;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE30;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE31;\n\n/** @const {number} */\nWebGLRenderingContext.ACTIVE_TEXTURE;\n\n/** @const {number} */\nWebGLRenderingContext.REPEAT;\n\n/** @const {number} */\nWebGLRenderingContext.CLAMP_TO_EDGE;\n\n/** @const {number} */\nWebGLRenderingContext.MIRRORED_REPEAT;\n\n/** @const {number} */\nWebGLRenderingContext.FLOAT_VEC2;\n\n/** @const {number} */\nWebGLRenderingContext.FLOAT_VEC3;\n\n/** @const {number} */\nWebGLRenderingContext.FLOAT_VEC4;\n\n/** @const {number} */\nWebGLRenderingContext.INT_VEC2;\n\n/** @const {number} */\nWebGLRenderingContext.INT_VEC3;\n\n/** @const {number} */\nWebGLRenderingContext.INT_VEC4;\n\n/** @const {number} */\nWebGLRenderingContext.BOOL;\n\n/** @const {number} */\nWebGLRenderingContext.BOOL_VEC2;\n\n/** @const {number} */\nWebGLRenderingContext.BOOL_VEC3;\n\n/** @const {number} */\nWebGLRenderingContext.BOOL_VEC4;\n\n/** @const {number} */\nWebGLRenderingContext.FLOAT_MAT2;\n\n/** @const {number} */\nWebGLRenderingContext.FLOAT_MAT3;\n\n/** @const {number} */\nWebGLRenderingContext.FLOAT_MAT4;\n\n/** @const {number} */\nWebGLRenderingContext.SAMPLER_2D;\n\n/** @const {number} */\nWebGLRenderingContext.SAMPLER_CUBE;\n\n/** @const {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_ENABLED;\n\n/** @const {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_STRIDE;\n\n/** @const {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_TYPE;\n\n/** @const {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_NORMALIZED;\n\n/** @const {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_POINTER;\n\n/** @const {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.IMPLEMENTATION_COLOR_READ_FORMAT;\n\n/** @const {number} */\nWebGLRenderingContext.IMPLEMENTATION_COLOR_READ_TYPE;\n\n/** @const {number} */\nWebGLRenderingContext.COMPILE_STATUS;\n\n/** @const {number} */\nWebGLRenderingContext.LOW_FLOAT;\n\n/** @const {number} */\nWebGLRenderingContext.MEDIUM_FLOAT;\n\n/** @const {number} */\nWebGLRenderingContext.HIGH_FLOAT;\n\n/** @const {number} */\nWebGLRenderingContext.LOW_INT;\n\n/** @const {number} */\nWebGLRenderingContext.MEDIUM_INT;\n\n/** @const {number} */\nWebGLRenderingContext.HIGH_INT;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER;\n\n/** @const {number} */\nWebGLRenderingContext.RGBA4;\n\n/** @const {number} */\nWebGLRenderingContext.RGB5_A1;\n\n/** @const {number} */\nWebGLRenderingContext.RGB565;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_COMPONENT16;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_INDEX;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_INDEX8;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_STENCIL;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_WIDTH;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_HEIGHT;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_INTERNAL_FORMAT;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_RED_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_GREEN_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_BLUE_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_ALPHA_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_DEPTH_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_STENCIL_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE;\n\n/** @const {number} */\nWebGLRenderingContext.COLOR_ATTACHMENT0;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_STENCIL_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.NONE;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_COMPLETE;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_INCOMPLETE_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_INCOMPLETE_DIMENSIONS;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_UNSUPPORTED;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_RENDERBUFFER_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.INVALID_FRAMEBUFFER_OPERATION;\n\n/** @const {number} */\nWebGLRenderingContext.UNPACK_FLIP_Y_WEBGL;\n\n/** @const {number} */\nWebGLRenderingContext.UNPACK_PREMULTIPLY_ALPHA_WEBGL;\n\n/** @const {number} */\nWebGLRenderingContext.CONTEXT_LOST_WEBGL;\n\n/** @const {number} */\nWebGLRenderingContext.UNPACK_COLORSPACE_CONVERSION_WEBGL;\n\n/** @const {number} */\nWebGLRenderingContext.BROWSER_DEFAULT_WEBGL;\n\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_BUFFER_BIT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BUFFER_BIT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.COLOR_BUFFER_BIT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.POINTS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LINES;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LINE_LOOP;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LINE_STRIP;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TRIANGLES;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TRIANGLE_STRIP;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TRIANGLE_FAN;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ZERO;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ONE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SRC_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ONE_MINUS_SRC_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SRC_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ONE_MINUS_SRC_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DST_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ONE_MINUS_DST_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DST_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ONE_MINUS_DST_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SRC_ALPHA_SATURATE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FUNC_ADD;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND_EQUATION;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND_EQUATION_RGB;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND_EQUATION_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FUNC_SUBTRACT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FUNC_REVERSE_SUBTRACT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND_DST_RGB;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND_SRC_RGB;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND_DST_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND_SRC_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CONSTANT_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ONE_MINUS_CONSTANT_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CONSTANT_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ONE_MINUS_CONSTANT_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ARRAY_BUFFER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ELEMENT_ARRAY_BUFFER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ARRAY_BUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ELEMENT_ARRAY_BUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STREAM_DRAW;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STATIC_DRAW;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DYNAMIC_DRAW;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BUFFER_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BUFFER_USAGE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CURRENT_VERTEX_ATTRIB;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRONT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BACK;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRONT_AND_BACK;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CULL_FACE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DITHER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_TEST;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_TEST;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SCISSOR_TEST;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.POLYGON_OFFSET_FILL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SAMPLE_ALPHA_TO_COVERAGE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SAMPLE_COVERAGE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.NO_ERROR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INVALID_ENUM;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INVALID_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INVALID_OPERATION;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.OUT_OF_MEMORY;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CW;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CCW;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LINE_WIDTH;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ALIASED_POINT_SIZE_RANGE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ALIASED_LINE_WIDTH_RANGE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CULL_FACE_MODE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRONT_FACE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_RANGE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_WRITEMASK;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_CLEAR_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_FUNC;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_CLEAR_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_FUNC;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_FAIL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_PASS_DEPTH_FAIL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_PASS_DEPTH_PASS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_REF;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_VALUE_MASK;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_WRITEMASK;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_FUNC;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_FAIL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_PASS_DEPTH_FAIL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_PASS_DEPTH_PASS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_REF;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_VALUE_MASK;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_WRITEMASK;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VIEWPORT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SCISSOR_BOX;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.COLOR_CLEAR_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.COLOR_WRITEMASK;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNPACK_ALIGNMENT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.PACK_ALIGNMENT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_TEXTURE_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_VIEWPORT_DIMS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SUBPIXEL_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RED_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.GREEN_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLUE_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ALPHA_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.POLYGON_OFFSET_UNITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.POLYGON_OFFSET_FACTOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_BINDING_2D;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SAMPLE_BUFFERS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SAMPLES;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SAMPLE_COVERAGE_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SAMPLE_COVERAGE_INVERT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.COMPRESSED_TEXTURE_FORMATS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DONT_CARE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FASTEST;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.NICEST;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.GENERATE_MIPMAP_HINT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BYTE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNSIGNED_BYTE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SHORT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNSIGNED_SHORT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNSIGNED_INT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FLOAT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_COMPONENT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RGB;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RGBA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LUMINANCE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LUMINANCE_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNSIGNED_SHORT_4_4_4_4;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNSIGNED_SHORT_5_5_5_1;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNSIGNED_SHORT_5_6_5;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAGMENT_SHADER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERTEX_SHADER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_VERTEX_ATTRIBS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_VERTEX_UNIFORM_VECTORS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_VARYING_VECTORS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_COMBINED_TEXTURE_IMAGE_UNITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_VERTEX_TEXTURE_IMAGE_UNITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_TEXTURE_IMAGE_UNITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_FRAGMENT_UNIFORM_VECTORS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SHADER_TYPE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DELETE_STATUS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LINK_STATUS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VALIDATE_STATUS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ATTACHED_SHADERS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ACTIVE_UNIFORMS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ACTIVE_ATTRIBUTES;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SHADING_LANGUAGE_VERSION;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CURRENT_PROGRAM;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.NEVER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LESS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.EQUAL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LEQUAL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.GREATER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.NOTEQUAL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.GEQUAL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ALWAYS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.KEEP;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.REPLACE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INCR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DECR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INVERT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INCR_WRAP;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DECR_WRAP;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VENDOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERSION;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.NEAREST;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LINEAR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.NEAREST_MIPMAP_NEAREST;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LINEAR_MIPMAP_NEAREST;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.NEAREST_MIPMAP_LINEAR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LINEAR_MIPMAP_LINEAR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_MAG_FILTER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_MIN_FILTER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_WRAP_S;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_WRAP_T;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_2D;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_BINDING_CUBE_MAP;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_POSITIVE_X;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_NEGATIVE_X;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_POSITIVE_Y;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_NEGATIVE_Y;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_POSITIVE_Z;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_NEGATIVE_Z;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_CUBE_MAP_TEXTURE_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE0;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE1;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE2;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE3;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE4;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE5;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE6;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE7;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE8;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE9;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE10;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE11;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE12;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE13;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE14;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE15;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE16;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE17;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE18;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE19;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE20;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE21;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE22;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE23;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE24;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE25;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE26;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE27;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE28;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE29;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE30;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE31;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ACTIVE_TEXTURE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.REPEAT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CLAMP_TO_EDGE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MIRRORED_REPEAT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FLOAT_VEC2;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FLOAT_VEC3;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FLOAT_VEC4;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INT_VEC2;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INT_VEC3;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INT_VEC4;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BOOL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BOOL_VEC2;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BOOL_VEC3;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BOOL_VEC4;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FLOAT_MAT2;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FLOAT_MAT3;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FLOAT_MAT4;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SAMPLER_2D;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SAMPLER_CUBE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_ENABLED;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_STRIDE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_TYPE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_NORMALIZED;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_POINTER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.COMPILE_STATUS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LOW_FLOAT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MEDIUM_FLOAT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.HIGH_FLOAT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LOW_INT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MEDIUM_INT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.HIGH_INT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RGBA4;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RGB5_A1;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RGB565;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_COMPONENT16;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_INDEX;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_INDEX8;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_STENCIL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_WIDTH;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_HEIGHT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_INTERNAL_FORMAT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_RED_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_GREEN_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_BLUE_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_ALPHA_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_DEPTH_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_STENCIL_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.COLOR_ATTACHMENT0;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_STENCIL_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.NONE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_COMPLETE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_INCOMPLETE_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_INCOMPLETE_DIMENSIONS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_UNSUPPORTED;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_RENDERBUFFER_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INVALID_FRAMEBUFFER_OPERATION;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNPACK_FLIP_Y_WEBGL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNPACK_PREMULTIPLY_ALPHA_WEBGL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CONTEXT_LOST_WEBGL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNPACK_COLORSPACE_CONVERSION_WEBGL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BROWSER_DEFAULT_WEBGL;\n\n\n/**\n * @type {!HTMLCanvasElement}\n */\nWebGLRenderingContext.prototype.canvas;\n\n/**\n * @type {number}\n */\nWebGLRenderingContext.prototype.drawingBufferWidth;\n\n/**\n * @type {number}\n */\nWebGLRenderingContext.prototype.drawingBufferHeight;\n\n/**\n * @return {!WebGLContextAttributes}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getContextAttributes = function() {};\n\n/**\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isContextLost = function() {};\n\n/**\n * @return {!Array}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getSupportedExtensions = function() {};\n\n/**\n * Note that this has side effects by enabling the extension even if the\n * result is not used.\n * @param {string} name\n * @return {Object}\n */\nWebGLRenderingContext.prototype.getExtension = function(name) {};\n\n/**\n * @param {number} texture\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.activeTexture = function(texture) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {WebGLShader} shader\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.attachShader = function(program, shader) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {number} index\n * @param {string} name\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bindAttribLocation = function(\n program, index, name) {};\n\n/**\n * @param {number} target\n * @param {WebGLBuffer} buffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bindBuffer = function(target, buffer) {};\n\n/**\n * @param {number} target\n * @param {WebGLFramebuffer} buffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bindFramebuffer = function(target, buffer) {};\n\n/**\n * @param {number} target\n * @param {WebGLRenderbuffer} buffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bindRenderbuffer = function(target, buffer) {};\n\n/**\n * @param {number} target\n * @param {WebGLTexture} texture\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bindTexture = function(target, texture) {};\n\n/**\n * @param {number} red\n * @param {number} green\n * @param {number} blue\n * @param {number} alpha\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.blendColor = function(\n red, green, blue, alpha) {};\n\n/**\n * @param {number} mode\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.blendEquation = function(mode) {};\n\n/**\n * @param {number} modeRGB\n * @param {number} modeAlpha\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.blendEquationSeparate = function(\n modeRGB, modeAlpha) {};\n\n/**\n * @param {number} sfactor\n * @param {number} dfactor\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.blendFunc = function(sfactor, dfactor) {};\n\n/**\n * @param {number} srcRGB\n * @param {number} dstRGB\n * @param {number} srcAlpha\n * @param {number} dstAlpha\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.blendFuncSeparate = function(\n srcRGB, dstRGB, srcAlpha, dstAlpha) {};\n\n/**\n * @param {number} target\n * @param {ArrayBufferView|ArrayBuffer|number} data\n * @param {number} usage\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bufferData = function(target, data, usage) {};\n\n/**\n * @param {number} target\n * @param {number} offset\n * @param {ArrayBufferView|ArrayBuffer} data\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bufferSubData = function(\n target, offset, data) {};\n\n/**\n * @param {number} target\n * @return {number}\n */\nWebGLRenderingContext.prototype.checkFramebufferStatus = function(target) {};\n\n/**\n * @param {number} mask\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.clear = function(mask) {};\n\n/**\n * @param {number} red\n * @param {number} green\n * @param {number} blue\n * @param {number} alpha\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.clearColor = function(\n red, green, blue, alpha) {};\n\n/**\n * @param {number} depth\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.clearDepth = function(depth) {};\n\n/**\n * @param {number} s\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.clearStencil = function(s) {};\n\n/**\n * @param {boolean} red\n * @param {boolean} green\n * @param {boolean} blue\n * @param {boolean} alpha\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.colorMask = function(\n red, green, blue, alpha) {};\n\n/**\n * @param {WebGLShader} shader\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.compileShader = function(shader) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @param {number} border\n * @param {ArrayBufferView} data\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.compressedTexImage2D = function(\n target, level, internalformat, width, height, border, data) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} width\n * @param {number} height\n * @param {number} format\n * @param {ArrayBufferView} data\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.compressedTexSubImage2D = function(\n target, level, xoffset, yoffset, width, height, format, data) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} format\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} border\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.copyTexImage2D = function(\n target, level, format, x, y, width, height, border) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.copyTexSubImage2D = function(\n target, level, xoffset, yoffset, x, y, width, height) {};\n\n/**\n * @return {!WebGLBuffer}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.createBuffer = function() {};\n\n/**\n * @return {!WebGLFramebuffer}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.createFramebuffer = function() {};\n\n/**\n * @return {!WebGLProgram}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.createProgram = function() {};\n\n/**\n * @return {!WebGLRenderbuffer}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.createRenderbuffer = function() {};\n\n/**\n * @param {number} type\n * @return {!WebGLShader}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.createShader = function(type) {};\n\n/**\n * @return {!WebGLTexture}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.createTexture = function() {};\n\n/**\n * @param {number} mode\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.cullFace = function(mode) {};\n\n/**\n * @param {WebGLBuffer} buffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.deleteBuffer = function(buffer) {};\n\n/**\n * @param {WebGLFramebuffer} buffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.deleteFramebuffer = function(buffer) {};\n\n/**\n * @param {WebGLProgram} program\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.deleteProgram = function(program) {};\n\n/**\n * @param {WebGLRenderbuffer} buffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.deleteRenderbuffer = function(buffer) {};\n\n/**\n * @param {WebGLShader} shader\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.deleteShader = function(shader) {};\n\n/**\n * @param {WebGLTexture} texture\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.deleteTexture = function(texture) {};\n\n/**\n * @param {number} func\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.depthFunc = function(func) {};\n\n/**\n * @param {boolean} flag\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.depthMask = function(flag) {};\n\n/**\n * @param {number} nearVal\n * @param {number} farVal\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.depthRange = function(nearVal, farVal) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {WebGLShader} shader\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.detachShader = function(program, shader) {};\n\n/**\n * @param {number} flags\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.disable = function(flags) {};\n\n/**\n * @param {number} index\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.disableVertexAttribArray = function(\n index) {};\n\n/**\n * @param {number} mode\n * @param {number} first\n * @param {number} count\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.drawArrays = function(mode, first, count) {};\n\n/**\n * @param {number} mode\n * @param {number} count\n * @param {number} type\n * @param {number} offset\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.drawElements = function(\n mode, count, type, offset) {};\n\n/**\n * @param {number} cap\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.enable = function(cap) {};\n\n/**\n * @param {number} index\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.enableVertexAttribArray = function(\n index) {};\n\nWebGLRenderingContext.prototype.finish = function() {};\n\nWebGLRenderingContext.prototype.flush = function() {};\n\n/**\n * @param {number} target\n * @param {number} attachment\n * @param {number} renderbuffertarget\n * @param {WebGLRenderbuffer} renderbuffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.framebufferRenderbuffer = function(\n target, attachment, renderbuffertarget, renderbuffer) {};\n\n/**\n * @param {number} target\n * @param {number} attachment\n * @param {number} textarget\n * @param {WebGLTexture} texture\n * @param {number} level\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.framebufferTexture2D = function(\n target, attachment, textarget, texture, level) {};\n\n/**\n * @param {number} mode\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.frontFace = function(mode) {};\n\n/**\n * @param {number} target\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.generateMipmap = function(target) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {number} index\n * @return {WebGLActiveInfo}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getActiveAttrib = function(program, index) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {number} index\n * @return {WebGLActiveInfo}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getActiveUniform = function(program, index) {};\n\n/**\n * @param {WebGLProgram} program\n * @return {!Array}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getAttachedShaders = function(program) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {string} name\n * @return {number}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getAttribLocation = function(program, name) {};\n\n/**\n * @param {number} target\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getBufferParameter = function(target, pname) {};\n\n/**\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getParameter = function(pname) {};\n\n/**\n * @return {number}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getError = function() {};\n\n/**\n * @param {number} target\n * @param {number} attachment\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getFramebufferAttachmentParameter = function(\n target, attachment, pname) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getProgramParameter = function(\n program, pname) {};\n\n/**\n * @param {WebGLProgram} program\n * @return {string}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getProgramInfoLog = function(program) {};\n\n/**\n * @param {number} target\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getRenderbufferParameter = function(\n target, pname) {};\n\n/**\n * @param {WebGLShader} shader\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getShaderParameter = function(shader, pname) {};\n\n/**\n * @param {number} shadertype\n * @param {number} precisiontype\n * @return {WebGLShaderPrecisionFormat}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getShaderPrecisionFormat = function(shadertype,\n precisiontype) {};\n\n/**\n * @param {WebGLShader} shader\n * @return {string}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getShaderInfoLog = function(shader) {};\n\n/**\n * @param {WebGLShader} shader\n * @return {string}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getShaderSource = function(shader) {};\n\n/**\n * @param {number} target\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getTexParameter = function(target, pname) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {WebGLUniformLocation} location\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getUniform = function(program, location) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {string} name\n * @return {WebGLUniformLocation}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getUniformLocation = function(program, name) {};\n\n/**\n * @param {number} index\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getVertexAttrib = function(index, pname) {};\n\n/**\n * @param {number} index\n * @param {number} pname\n * @return {number}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getVertexAttribOffset = function(\n index, pname) {};\n\n/**\n * @param {number} target\n * @param {number} mode\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.hint = function(target, mode) {};\n\n/**\n * @param {WebGLObject} buffer\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isBuffer = function(buffer) {};\n\n/**\n * @param {number} cap\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isEnabled = function(cap) {};\n\n/**\n * @param {WebGLObject} framebuffer\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isFramebuffer = function(framebuffer) {};\n\n/**\n * @param {WebGLObject} program\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isProgram = function(program) {};\n\n/**\n * @param {WebGLObject} renderbuffer\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isRenderbuffer = function(renderbuffer) {};\n\n/**\n * @param {WebGLObject} shader\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isShader = function(shader) {};\n\n/**\n * @param {WebGLObject} texture\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isTexture = function(texture) {};\n\n/**\n * @param {number} width\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.lineWidth = function(width) {};\n\n/**\n * @param {WebGLProgram} program\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.linkProgram = function(program) {};\n\n/**\n * @param {number} pname\n * @param {number|boolean} param\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.pixelStorei = function(pname, param) {};\n\n/**\n * @param {number} factor\n * @param {number} units\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.polygonOffset = function(factor, units) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} format\n * @param {number} type\n * @param {ArrayBufferView} pixels\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.readPixels = function(\n x, y, width, height, format, type, pixels) {};\n\n/**\n * @param {number} target\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.renderbufferStorage = function(\n target, internalformat, width, height) {};\n\n/**\n * @param {number} coverage\n * @param {boolean} invert\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.sampleCoverage = function(coverage, invert) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.scissor = function(x, y, width, height) {};\n\n/**\n * @param {WebGLShader} shader\n * @param {string} source\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.shaderSource = function(shader, source) {};\n\n/**\n * @param {number} func\n * @param {number} ref\n * @param {number} mask\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.stencilFunc = function(func, ref, mask) {};\n\n/**\n * @param {number} face\n * @param {number} func\n * @param {number} ref\n * @param {number} mask\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.stencilFuncSeparate = function(\n face, func, ref, mask) {};\n\n/**\n * @param {number} mask\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.stencilMask = function(mask) {};\n\n/**\n * @param {number} face\n * @param {number} mask\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.stencilMaskSeparate = function(face, mask) {};\n\n/**\n * @param {number} fail\n * @param {number} zfail\n * @param {number} zpass\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.stencilOp = function(fail, zfail, zpass) {};\n\n/**\n * @param {number} face\n * @param {number} fail\n * @param {number} zfail\n * @param {number} zpass\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.stencilOpSeparate = function(\n face, fail, zfail, zpass) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} internalformat\n * @param {number} format or width\n * @param {number} type or height\n * @param {?TexImageSource|number} img or border\n * @param {number=} opt_format\n * @param {number=} opt_type\n * @param {ArrayBufferView=} opt_pixels\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.texImage2D = function(\n target, level, internalformat, format, type, img, opt_format, opt_type,\n opt_pixels) {};\n\n/**\n * @param {number} target\n * @param {number} pname\n * @param {number} param\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.texParameterf = function(\n target, pname, param) {};\n\n/**\n * @param {number} target\n * @param {number} pname\n * @param {number} param\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.texParameteri = function(\n target, pname, param) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} format or width\n * @param {number} type or height\n * @param {?TexImageSource|number} data or format\n * @param {number=} opt_type\n * @param {ArrayBufferView=} opt_pixels\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.texSubImage2D = function(\n target, level, xoffset, yoffset, format, type, data, opt_type,\n opt_pixels) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform1f = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Float32Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform1fv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number|boolean} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform1i = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Int32Array|Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform1iv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number} value1\n * @param {number} value2\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform2f = function(\n location, value1, value2) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Float32Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform2fv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number|boolean} value1\n * @param {number|boolean} value2\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform2i = function(\n location, value1, value2) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Int32Array|Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform2iv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number} value1\n * @param {number} value2\n * @param {number} value3\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform3f = function(\n location, value1, value2, value3) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Float32Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform3fv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number|boolean} value1\n * @param {number|boolean} value2\n * @param {number|boolean} value3\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform3i = function(\n location, value1, value2, value3) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Int32Array|Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform3iv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number} value1\n * @param {number} value2\n * @param {number} value3\n * @param {number} value4\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform4f = function(\n location, value1, value2, value3, value4) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Float32Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform4fv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number|boolean} value1\n * @param {number|boolean} value2\n * @param {number|boolean} value3\n * @param {number|boolean} value4\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform4i = function(\n location, value1, value2, value3, value4) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Int32Array|Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform4iv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {Float32Array|Array} data\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniformMatrix2fv = function(\n location, transpose, data) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {Float32Array|Array} data\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniformMatrix3fv = function(\n location, transpose, data) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {Float32Array|Array} data\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniformMatrix4fv = function(\n location, transpose, data) {};\n\n/**\n * @param {WebGLProgram} program\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.useProgram = function(program) {};\n\n/**\n * @param {WebGLProgram} program\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.validateProgram = function(program) {};\n\n/**\n * @param {number} indx\n * @param {number} x\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib1f = function(indx, x) {};\n\n/**\n * @param {number} indx\n * @param {Float32Array|Array} values\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib1fv = function(indx, values) {};\n\n/**\n * @param {number} indx\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib2f = function(\n indx, x, y) {};\n\n/**\n * @param {number} indx\n * @param {Float32Array|Array} values\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib2fv = function(\n indx, values) {};\n\n/**\n * @param {number} indx\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib3f = function(\n indx, x, y, z) {};\n\n/**\n * @param {number} indx\n * @param {Float32Array|Array} values\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib3fv = function(indx, values) {};\n\n/**\n * @param {number} indx\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @param {number} w\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib4f = function(\n indx, x, y, z, w) {};\n\n/**\n * @param {number} indx\n * @param {Float32Array|Array} values\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib4fv = function(indx, values) {};\n\n/**\n * @param {number} indx\n * @param {number} size\n * @param {number} type\n * @param {boolean} normalized\n * @param {number} stride\n * @param {number} offset\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttribPointer = function(\n indx, size, type, normalized, stride, offset) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.viewport = function(x, y, width, height) {};\n\n\n/**\n * @constructor\n */\nfunction WebGLContextAttributes() {}\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.alpha;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.depth;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.stencil;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.antialias;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.premultipliedAlpha;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.preserveDrawingBuffer;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.preferLowPowerToHighPerformance;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.failIfMajorPerformanceCaveat;\n\n/**\n * @param {string} eventType\n * @constructor\n * @extends {Event}\n */\nfunction WebGLContextEvent(eventType) {}\n\n/**\n * @type {string}\n */\nWebGLContextEvent.prototype.statusMessage;\n\n\n/**\n * @constructor\n */\nfunction WebGLShaderPrecisionFormat() {}\n\n/**\n * @type {number}\n */\nWebGLShaderPrecisionFormat.prototype.rangeMin;\n\n/**\n * @type {number}\n */\nWebGLShaderPrecisionFormat.prototype.rangeMax;\n\n/**\n * @type {number}\n */\nWebGLShaderPrecisionFormat.prototype.precision;\n\n\n/**\n * @constructor\n */\nfunction WebGLObject() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLBuffer() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLFramebuffer() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLProgram() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLRenderbuffer() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLShader() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLTexture() {}\n\n\n/**\n * @constructor\n */\nfunction WebGLActiveInfo() {}\n\n/** @type {number} */\nWebGLActiveInfo.prototype.size;\n\n/** @type {number} */\nWebGLActiveInfo.prototype.type;\n\n/** @type {string} */\nWebGLActiveInfo.prototype.name;\n\n\n/**\n * @constructor\n */\nfunction WebGLUniformLocation() {}\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_texture_float/\n * @constructor\n */\nfunction OES_texture_float() {}\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_texture_half_float/\n * @constructor\n */\nfunction OES_texture_half_float() {}\n\n/** @type {number} */\nOES_texture_half_float.prototype.HALF_FLOAT_OES;\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/WEBGL_lose_context/\n * @constructor\n */\nfunction WEBGL_lose_context() {}\n\nWEBGL_lose_context.prototype.loseContext = function() {};\n\nWEBGL_lose_context.prototype.restoreContext = function() {};\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_standard_derivatives/\n * @constructor\n */\nfunction OES_standard_derivatives() {}\n\n/** @type {number} */\nOES_standard_derivatives.prototype.FRAGMENT_SHADER_DERIVATIVE_HINT_OES;\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_vertex_array_object/\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLVertexArrayObjectOES() {}\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_vertex_array_object/\n * @constructor\n */\nfunction OES_vertex_array_object() {}\n\n/** @type {number} */\nOES_vertex_array_object.prototype.VERTEX_ARRAY_BINDING_OES;\n\n/**\n * @return {WebGLVertexArrayObjectOES}\n * @nosideeffects\n */\nOES_vertex_array_object.prototype.createVertexArrayOES = function() {};\n\n/**\n * @param {WebGLVertexArrayObjectOES} arrayObject\n * @return {undefined}\n */\nOES_vertex_array_object.prototype.deleteVertexArrayOES =\n function(arrayObject) {};\n\n/**\n * @param {WebGLVertexArrayObjectOES} arrayObject\n * @return {boolean}\n * @nosideeffects\n */\nOES_vertex_array_object.prototype.isVertexArrayOES = function(arrayObject) {};\n\n/**\n * @param {WebGLVertexArrayObjectOES} arrayObject\n * @return {undefined}\n */\nOES_vertex_array_object.prototype.bindVertexArrayOES = function(arrayObject) {};\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/WEBGL_debug_renderer_info/\n * @constructor\n */\nfunction WEBGL_debug_renderer_info() {}\n\n/** @const {number} */\nWEBGL_debug_renderer_info.prototype.UNMASKED_VENDOR_WEBGL;\n\n/** @const {number} */\nWEBGL_debug_renderer_info.prototype.UNMASKED_RENDERER_WEBGL;\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/WEBGL_debug_shaders/\n * @constructor\n */\nfunction WEBGL_debug_shaders() {}\n\n/**\n * @param {WebGLShader} shader\n * @return {string}\n * @nosideeffects\n */\nWEBGL_debug_shaders.prototype.getTranslatedShaderSource = function(shader) {};\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/\n * @constructor\n */\nfunction WEBGL_compressed_texture_s3tc() {}\n\n/** @const {number} */\nWEBGL_compressed_texture_s3tc.prototype.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\n/** @const {number} */\nWEBGL_compressed_texture_s3tc.prototype.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\n/** @const {number} */\nWEBGL_compressed_texture_s3tc.prototype.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\n/** @const {number} */\nWEBGL_compressed_texture_s3tc.prototype.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_depth_texture/\n * @constructor\n */\nfunction OES_depth_texture() {}\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_element_index_uint/\n * @constructor\n */\nfunction OES_element_index_uint() {}\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/EXT_texture_filter_anisotropic/\n * @constructor\n */\nfunction EXT_texture_filter_anisotropic() {}\n\n/** @const {number} */\nEXT_texture_filter_anisotropic.prototype.TEXTURE_MAX_ANISOTROPY_EXT;\n\n/** @const {number} */\nEXT_texture_filter_anisotropic.prototype.MAX_TEXTURE_MAX_ANISOTROPY_EXT;\n\n\n/**\n * @see https://www.khronos.org/registry/webgl/extensions/WEBGL_draw_buffers/\n * @constructor\n */\nfunction WEBGL_draw_buffers() {}\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT0_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT1_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT2_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT3_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT4_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT5_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT6_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT7_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT8_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT9_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT10_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT11_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT12_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT13_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT14_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT15_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER0_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER1_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER2_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER3_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER4_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER5_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER6_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER7_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER8_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER9_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER10_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER11_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER12_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER13_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER14_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER15_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.MAX_COLOR_ATTACHMENTS_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.MAX_DRAW_BUFFERS_WEBGL;\n\n/**\n * @param {Array} buffers Draw buffers.\n * @return {undefined}\n */\nWEBGL_draw_buffers.prototype.drawBuffersWEBGL = function(buffers) {};\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/\n * @constructor\n */\nfunction ANGLE_instanced_arrays() {}\n\n\n/** @const {number} */\nANGLE_instanced_arrays.prototype.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE;\n\n\n/**\n * @param {number} mode Primitive type.\n * @param {number} first First vertex.\n * @param {number} count Number of vertices per instance.\n * @param {number} primcount Number of instances.\n * @return {undefined}\n */\nANGLE_instanced_arrays.prototype.drawArraysInstancedANGLE = function(\n mode, first, count, primcount) {};\n\n\n/**\n * @param {number} mode Primitive type.\n * @param {number} count Number of vertex indices per instance.\n * @param {number} type Type of a vertex index.\n * @param {number} offset Offset to the first vertex index.\n * @param {number} primcount Number of instances.\n * @return {undefined}\n */\nANGLE_instanced_arrays.prototype.drawElementsInstancedANGLE = function(\n mode, count, type, offset, primcount) {};\n\n\n/**\n * @param {number} index Attribute index.\n * @param {number} divisor Instance divisor.\n * @return {undefined}\n */\nANGLE_instanced_arrays.prototype.vertexAttribDivisorANGLE = function(\n index, divisor) {};\n\n', - "externs/webgl2.js":'/*\n * Copyright 2018 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for WebGL functions as described at\n * http://www.khronos.org/registry/webgl/specs/latest/\n *\n * This file is current up to the WebGL 2.0 spec.\n *\n * This relies on webgl.js and html5.js being included for WebGL1, Canvas and\n * Typed Array support.\n *\n * @externs\n */\n\n\n/**\n * @constructor\n * @extends {WebGLRenderingContext}\n */\nfunction WebGL2RenderingContext() {}\n\n\n\n/** @const {number} */\nWebGL2RenderingContext.UNPACK_ROW_LENGTH;\n\n/** @const {number} */\nWebGL2RenderingContext.UNPACK_SKIP_ROWS;\n\n/** @const {number} */\nWebGL2RenderingContext.UNPACK_SKIP_PIXELS;\n\n/** @const {number} */\nWebGL2RenderingContext.PACK_ROW_LENGTH;\n\n/** @const {number} */\nWebGL2RenderingContext.PACK_SKIP_ROWS;\n\n/** @const {number} */\nWebGL2RenderingContext.PACK_SKIP_PIXELS;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR;\n\n/** @const {number} */\nWebGL2RenderingContext.DEPTH;\n\n/** @const {number} */\nWebGL2RenderingContext.STENCIL;\n\n/** @const {number} */\nWebGL2RenderingContext.RED;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB8;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA8;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB10_A2;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_BINDING_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.UNPACK_SKIP_IMAGES;\n\n/** @const {number} */\nWebGL2RenderingContext.UNPACK_IMAGE_HEIGHT;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_WRAP_R;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_3D_TEXTURE_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_2_10_10_10_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_ELEMENTS_VERTICES;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_ELEMENTS_INDICES;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_MIN_LOD;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_MAX_LOD;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_BASE_LEVEL;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_MAX_LEVEL;\n\n/** @const {number} */\nWebGL2RenderingContext.MIN;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX;\n\n/** @const {number} */\nWebGL2RenderingContext.DEPTH_COMPONENT24;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_TEXTURE_LOD_BIAS;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_COMPARE_MODE;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_COMPARE_FUNC;\n\n/** @const {number} */\nWebGL2RenderingContext.CURRENT_QUERY;\n\n/** @const {number} */\nWebGL2RenderingContext.QUERY_RESULT;\n\n/** @const {number} */\nWebGL2RenderingContext.QUERY_RESULT_AVAILABLE;\n\n/** @const {number} */\nWebGL2RenderingContext.STREAM_READ;\n\n/** @const {number} */\nWebGL2RenderingContext.STREAM_COPY;\n\n/** @const {number} */\nWebGL2RenderingContext.STATIC_READ;\n\n/** @const {number} */\nWebGL2RenderingContext.STATIC_COPY;\n\n/** @const {number} */\nWebGL2RenderingContext.DYNAMIC_READ;\n\n/** @const {number} */\nWebGL2RenderingContext.DYNAMIC_COPY;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_DRAW_BUFFERS;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER0;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER1;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER2;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER3;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER4;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER5;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER6;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER7;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER8;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER9;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER10;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER11;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER12;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER13;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER14;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER15;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_FRAGMENT_UNIFORM_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_VERTEX_UNIFORM_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.SAMPLER_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.SAMPLER_2D_SHADOW;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAGMENT_SHADER_DERIVATIVE_HINT;\n\n/** @const {number} */\nWebGL2RenderingContext.PIXEL_PACK_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.PIXEL_UNPACK_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.PIXEL_PACK_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.PIXEL_UNPACK_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.FLOAT_MAT2x3;\n\n/** @const {number} */\nWebGL2RenderingContext.FLOAT_MAT2x4;\n\n/** @const {number} */\nWebGL2RenderingContext.FLOAT_MAT3x2;\n\n/** @const {number} */\nWebGL2RenderingContext.FLOAT_MAT3x4;\n\n/** @const {number} */\nWebGL2RenderingContext.FLOAT_MAT4x2;\n\n/** @const {number} */\nWebGL2RenderingContext.FLOAT_MAT4x3;\n\n/** @const {number} */\nWebGL2RenderingContext.SRGB;\n\n/** @const {number} */\nWebGL2RenderingContext.SRGB8;\n\n/** @const {number} */\nWebGL2RenderingContext.SRGB8_ALPHA8;\n\n/** @const {number} */\nWebGL2RenderingContext.COMPARE_REF_TO_TEXTURE;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA32F;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB32F;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA16F;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB16F;\n\n/** @const {number} */\nWebGL2RenderingContext.VERTEX_ATTRIB_ARRAY_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_ARRAY_TEXTURE_LAYERS;\n\n/** @const {number} */\nWebGL2RenderingContext.MIN_PROGRAM_TEXEL_OFFSET;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_PROGRAM_TEXEL_OFFSET;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_VARYING_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_BINDING_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.R11F_G11F_B10F;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_10F_11F_11F_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB9_E5;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_5_9_9_9_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_BUFFER_MODE;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_VARYINGS;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_BUFFER_START;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_BUFFER_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN;\n\n/** @const {number} */\nWebGL2RenderingContext.RASTERIZER_DISCARD;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS;\n\n/** @const {number} */\nWebGL2RenderingContext.INTERLEAVED_ATTRIBS;\n\n/** @const {number} */\nWebGL2RenderingContext.SEPARATE_ATTRIBS;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA32UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB32UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA16UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB16UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA8UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB8UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA32I;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB32I;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA16I;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB16I;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA8I;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB8I;\n\n/** @const {number} */\nWebGL2RenderingContext.RED_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.SAMPLER_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.SAMPLER_2D_ARRAY_SHADOW;\n\n/** @const {number} */\nWebGL2RenderingContext.SAMPLER_CUBE_SHADOW;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_VEC2;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_VEC3;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_VEC4;\n\n/** @const {number} */\nWebGL2RenderingContext.INT_SAMPLER_2D;\n\n/** @const {number} */\nWebGL2RenderingContext.INT_SAMPLER_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.INT_SAMPLER_CUBE;\n\n/** @const {number} */\nWebGL2RenderingContext.INT_SAMPLER_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_SAMPLER_2D;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_SAMPLER_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_SAMPLER_CUBE;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_SAMPLER_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.DEPTH_COMPONENT32F;\n\n/** @const {number} */\nWebGL2RenderingContext.DEPTH32F_STENCIL8;\n\n/** @const {number} */\nWebGL2RenderingContext.FLOAT_32_UNSIGNED_INT_24_8_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_RED_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_DEFAULT;\n\n/** @const {number} */\nWebGL2RenderingContext.DEPTH_STENCIL_ATTACHMENT;\n\n/** @const {number} */\nWebGL2RenderingContext.DEPTH_STENCIL;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_24_8;\n\n/** @const {number} */\nWebGL2RenderingContext.DEPTH24_STENCIL8;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_NORMALIZED;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_FRAMEBUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.READ_FRAMEBUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_FRAMEBUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.READ_FRAMEBUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.RENDERBUFFER_SAMPLES;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_COLOR_ATTACHMENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT1;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT2;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT3;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT4;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT5;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT6;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT7;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT8;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT9;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT10;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT11;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT12;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT13;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT14;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT15;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_SAMPLES;\n\n/** @const {number} */\nWebGL2RenderingContext.HALF_FLOAT;\n\n/** @const {number} */\nWebGL2RenderingContext.RG;\n\n/** @const {number} */\nWebGL2RenderingContext.RG_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.R8;\n\n/** @const {number} */\nWebGL2RenderingContext.RG8;\n\n/** @const {number} */\nWebGL2RenderingContext.R16F;\n\n/** @const {number} */\nWebGL2RenderingContext.R32F;\n\n/** @const {number} */\nWebGL2RenderingContext.RG16F;\n\n/** @const {number} */\nWebGL2RenderingContext.RG32F;\n\n/** @const {number} */\nWebGL2RenderingContext.R8I;\n\n/** @const {number} */\nWebGL2RenderingContext.R8UI;\n\n/** @const {number} */\nWebGL2RenderingContext.R16I;\n\n/** @const {number} */\nWebGL2RenderingContext.R16UI;\n\n/** @const {number} */\nWebGL2RenderingContext.R32I;\n\n/** @const {number} */\nWebGL2RenderingContext.R32UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RG8I;\n\n/** @const {number} */\nWebGL2RenderingContext.RG8UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RG16I;\n\n/** @const {number} */\nWebGL2RenderingContext.RG16UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RG32I;\n\n/** @const {number} */\nWebGL2RenderingContext.RG32UI;\n\n/** @const {number} */\nWebGL2RenderingContext.VERTEX_ARRAY_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.R8_SNORM;\n\n/** @const {number} */\nWebGL2RenderingContext.RG8_SNORM;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB8_SNORM;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA8_SNORM;\n\n/** @const {number} */\nWebGL2RenderingContext.SIGNED_NORMALIZED;\n\n/** @const {number} */\nWebGL2RenderingContext.COPY_READ_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.COPY_WRITE_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.COPY_READ_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.COPY_WRITE_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BUFFER_START;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BUFFER_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_VERTEX_UNIFORM_BLOCKS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_FRAGMENT_UNIFORM_BLOCKS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_COMBINED_UNIFORM_BLOCKS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_UNIFORM_BUFFER_BINDINGS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_UNIFORM_BLOCK_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BUFFER_OFFSET_ALIGNMENT;\n\n/** @const {number} */\nWebGL2RenderingContext.ACTIVE_UNIFORM_BLOCKS;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_TYPE;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BLOCK_INDEX;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_OFFSET;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_ARRAY_STRIDE;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_MATRIX_STRIDE;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_IS_ROW_MAJOR;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BLOCK_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BLOCK_DATA_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BLOCK_ACTIVE_UNIFORMS;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER;\n\n/** @const {number} */\nWebGL2RenderingContext.INVALID_INDEX;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_VERTEX_OUTPUT_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_FRAGMENT_INPUT_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_SERVER_WAIT_TIMEOUT;\n\n/** @const {number} */\nWebGL2RenderingContext.OBJECT_TYPE;\n\n/** @const {number} */\nWebGL2RenderingContext.SYNC_CONDITION;\n\n/** @const {number} */\nWebGL2RenderingContext.SYNC_STATUS;\n\n/** @const {number} */\nWebGL2RenderingContext.SYNC_FLAGS;\n\n/** @const {number} */\nWebGL2RenderingContext.SYNC_FENCE;\n\n/** @const {number} */\nWebGL2RenderingContext.SYNC_GPU_COMMANDS_COMPLETE;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNALED;\n\n/** @const {number} */\nWebGL2RenderingContext.SIGNALED;\n\n/** @const {number} */\nWebGL2RenderingContext.ALREADY_SIGNALED;\n\n/** @const {number} */\nWebGL2RenderingContext.TIMEOUT_EXPIRED;\n\n/** @const {number} */\nWebGL2RenderingContext.CONDITION_SATISFIED;\n\n/** @const {number} */\nWebGL2RenderingContext.WAIT_FAILED;\n\n/** @const {number} */\nWebGL2RenderingContext.SYNC_FLUSH_COMMANDS_BIT;\n\n/** @const {number} */\nWebGL2RenderingContext.VERTEX_ATTRIB_ARRAY_DIVISOR;\n\n/** @const {number} */\nWebGL2RenderingContext.ANY_SAMPLES_PASSED;\n\n/** @const {number} */\nWebGL2RenderingContext.ANY_SAMPLES_PASSED_CONSERVATIVE;\n\n/** @const {number} */\nWebGL2RenderingContext.SAMPLER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB10_A2UI;\n\n/** @const {number} */\nWebGL2RenderingContext.INT_2_10_10_10_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_PAUSED;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_ACTIVE;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_IMMUTABLE_FORMAT;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_ELEMENT_INDEX;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_IMMUTABLE_LEVELS;\n\n/** @const {number} */\nWebGL2RenderingContext.TIMEOUT_IGNORED;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_CLIENT_WAIT_TIMEOUT_WEBGL;\n\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNPACK_ROW_LENGTH;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNPACK_SKIP_ROWS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNPACK_SKIP_PIXELS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.PACK_ROW_LENGTH;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.PACK_SKIP_ROWS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.PACK_SKIP_PIXELS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DEPTH;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.STENCIL;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB10_A2;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_BINDING_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNPACK_SKIP_IMAGES;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNPACK_IMAGE_HEIGHT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_WRAP_R;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_3D_TEXTURE_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_2_10_10_10_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_ELEMENTS_VERTICES;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_ELEMENTS_INDICES;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_MIN_LOD;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_MAX_LOD;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_BASE_LEVEL;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_MAX_LEVEL;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MIN;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DEPTH_COMPONENT24;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_TEXTURE_LOD_BIAS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_COMPARE_MODE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_COMPARE_FUNC;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.CURRENT_QUERY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.QUERY_RESULT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.QUERY_RESULT_AVAILABLE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.STREAM_READ;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.STREAM_COPY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.STATIC_READ;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.STATIC_COPY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DYNAMIC_READ;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DYNAMIC_COPY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_DRAW_BUFFERS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER0;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER1;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER2;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER3;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER4;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER5;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER6;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER7;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER9;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER10;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER11;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER12;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER13;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER14;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER15;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_FRAGMENT_UNIFORM_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_VERTEX_UNIFORM_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SAMPLER_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SAMPLER_2D_SHADOW;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAGMENT_SHADER_DERIVATIVE_HINT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.PIXEL_PACK_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.PIXEL_UNPACK_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.PIXEL_PACK_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.PIXEL_UNPACK_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FLOAT_MAT2x3;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FLOAT_MAT2x4;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FLOAT_MAT3x2;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FLOAT_MAT3x4;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FLOAT_MAT4x2;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FLOAT_MAT4x3;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SRGB;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SRGB8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SRGB8_ALPHA8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COMPARE_REF_TO_TEXTURE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA32F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB32F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA16F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB16F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.VERTEX_ATTRIB_ARRAY_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_ARRAY_TEXTURE_LAYERS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MIN_PROGRAM_TEXEL_OFFSET;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_PROGRAM_TEXEL_OFFSET;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_VARYING_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_BINDING_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R11F_G11F_B10F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_10F_11F_11F_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB9_E5;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_5_9_9_9_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_BUFFER_MODE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_VARYINGS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_BUFFER_START;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_BUFFER_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RASTERIZER_DISCARD;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS =\n 0x8C8A;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.INTERLEAVED_ATTRIBS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SEPARATE_ATTRIBS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA32UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB32UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA16UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB16UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA8UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB8UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA32I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB32I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA16I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB16I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA8I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB8I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RED_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SAMPLER_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SAMPLER_2D_ARRAY_SHADOW;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SAMPLER_CUBE_SHADOW;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_VEC2;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_VEC3;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_VEC4;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.INT_SAMPLER_2D;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.INT_SAMPLER_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.INT_SAMPLER_CUBE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.INT_SAMPLER_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_SAMPLER_2D;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_SAMPLER_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_SAMPLER_CUBE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_SAMPLER_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DEPTH_COMPONENT32F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DEPTH32F_STENCIL8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FLOAT_32_UNSIGNED_INT_24_8_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_RED_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_DEFAULT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DEPTH_STENCIL_ATTACHMENT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DEPTH_STENCIL;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_24_8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DEPTH24_STENCIL8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_NORMALIZED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_FRAMEBUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.READ_FRAMEBUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_FRAMEBUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.READ_FRAMEBUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RENDERBUFFER_SAMPLES;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_COLOR_ATTACHMENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT1;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT2;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT3;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT4;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT5;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT6;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT7;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT9;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT10;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT11;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT12;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT13;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT14;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT15;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_SAMPLES;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.HALF_FLOAT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R16F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R32F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG16F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG32F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R8I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R8UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R16I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R16UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R32I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R32UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG8I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG8UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG16I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG16UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG32I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG32UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.VERTEX_ARRAY_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R8_SNORM;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG8_SNORM;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB8_SNORM;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA8_SNORM;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SIGNED_NORMALIZED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COPY_READ_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COPY_WRITE_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COPY_READ_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COPY_WRITE_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BUFFER_START;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BUFFER_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_VERTEX_UNIFORM_BLOCKS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_FRAGMENT_UNIFORM_BLOCKS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_COMBINED_UNIFORM_BLOCKS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_UNIFORM_BUFFER_BINDINGS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_UNIFORM_BLOCK_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BUFFER_OFFSET_ALIGNMENT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.ACTIVE_UNIFORM_BLOCKS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_TYPE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BLOCK_INDEX;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_OFFSET;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_ARRAY_STRIDE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_MATRIX_STRIDE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_IS_ROW_MAJOR;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BLOCK_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BLOCK_DATA_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BLOCK_ACTIVE_UNIFORMS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.INVALID_INDEX;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_VERTEX_OUTPUT_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_FRAGMENT_INPUT_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_SERVER_WAIT_TIMEOUT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.OBJECT_TYPE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SYNC_CONDITION;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SYNC_STATUS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SYNC_FLAGS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SYNC_FENCE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SYNC_GPU_COMMANDS_COMPLETE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNALED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SIGNALED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.ALREADY_SIGNALED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TIMEOUT_EXPIRED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.CONDITION_SATISFIED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.WAIT_FAILED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SYNC_FLUSH_COMMANDS_BIT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.VERTEX_ATTRIB_ARRAY_DIVISOR;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.ANY_SAMPLES_PASSED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.ANY_SAMPLES_PASSED_CONSERVATIVE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SAMPLER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB10_A2UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.INT_2_10_10_10_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_PAUSED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_ACTIVE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_IMMUTABLE_FORMAT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_ELEMENT_INDEX;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_IMMUTABLE_LEVELS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TIMEOUT_IGNORED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_CLIENT_WAIT_TIMEOUT_WEBGL;\n\n/* Buffer objects */\n\n/**\n * @param {number} target\n * @param {?ArrayBufferView|?ArrayBuffer|number} data\n * @param {number} usage\n * @param {number=} opt_srcOffset\n * @param {number=} opt_length\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.bufferData = function(\n target, data, usage, opt_srcOffset, opt_length) {};\n\n/**\n * @param {number} target\n * @param {number} offset\n * @param {?ArrayBufferView|?ArrayBuffer} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_length\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.bufferSubData = function(\n target, offset, data, opt_srcOffset, opt_length) {};\n\n/**\n * @param {number} readTarget\n * @param {number} writeTarget\n * @param {number} readOffset\n * @param {number} writeOffset\n * @param {number} size\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.copyBufferSubData = function(\n readTarget, writeTarget, readOffset, writeOffset, size) {};\n\n/**\n * @param {number} target\n * @param {number} srcByteOffset\n * @param {?ArrayBufferView|?ArrayBuffer} dstBuffer\n * @param {number=} opt_dstOffset\n * @param {number=} opt_length\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.getBufferSubData = function(\n target, srcByteOffset, dstBuffer, opt_dstOffset, opt_length) {};\n\n/* Framebuffer objects */\n\n/**\n * @param {number} srcX0\n * @param {number} srcY0\n * @param {number} srcX1\n * @param {number} srcY1\n * @param {number} dstX0\n * @param {number} dstY0\n * @param {number} dstX1\n * @param {number} dstY1\n * @param {number} mask\n * @param {number} filter\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.blitFramebuffer = function(\n srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter) {};\n\n/**\n * @param {number} target\n * @param {number} attachment\n * @param {?WebGLTexture} texture\n * @param {number} level\n * @param {number} layer\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.framebufferTextureLayer = function(\n target, attachment, texture, level, layer) {};\n\n/**\n * @param {number} target\n * @param {!Array} attachments\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.invalidateFramebuffer = function(\n target, attachments) {};\n\n/**\n * @param {number} target\n * @param {!Array} attachments\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.invalidateSubFramebuffer = function(\n target, attachments, x, y, width, height) {};\n\n/**\n * @param {number} src\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.readBuffer = function(src) {};\n\n/* Renderbuffer objects */\n\n/**\n * @param {number} target\n * @param {number} internalformat\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGL2RenderingContext.prototype.getInternalformatParameter = function(\n target, internalformat, pname) {};\n\n/**\n * @param {number} target\n * @param {number} samples\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.renderbufferStorageMultisample = function(\n target, samples, internalformat, width, height) {};\n\n/* Texture objects */\n\n/**\n * @param {number} target\n * @param {number} levels\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.texStorage2D = function(\n target, levels, internalformat, width, height) {};\n\n/**\n * @param {number} target\n * @param {number} levels\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @param {number} depth\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.texStorage3D = function(\n target, levels, internalformat, width, height, depth) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} internalformat\n * @param {number} formatOrWidth\n * @param {number} typeOrHeight\n * @param {?TexImageSource|number} imgOrBorder\n * @param {number=} opt_format\n * @param {number=} opt_type\n * @param {?ArrayBufferView|?TexImageSource|number=} opt_imgOrOffset\n * @param {number=} opt_srcOffset\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.texImage2D = function(\n target, level, internalformat, formatOrWidth, typeOrHeight, imgOrBorder,\n opt_format, opt_type, opt_imgOrOffset, opt_srcOffset) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} formatOrWidth\n * @param {number} typeOrHeight\n * @param {?TexImageSource|number} dataOrFormat\n * @param {number=} opt_type\n * @param {?ArrayBufferView|?TexImageSource|number=} opt_imgOrOffset\n * @param {number=} opt_srcOffset\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.texSubImage2D = function(\n target, level, xoffset, yoffset, formatOrWidth, typeOrHeight, dataOrFormat,\n opt_type, opt_imgOrOffset, opt_srcOffset) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @param {number} depth\n * @param {number} border\n * @param {number} format\n * @param {number} type\n * @param {?ArrayBufferView|?TexImageSource|number} srcData\n * @param {number=} opt_srcOffset\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.texImage3D = function(\n target, level, internalformat, width, height, depth, border, format, type,\n srcData, opt_srcOffset) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} zoffset\n * @param {number} width\n * @param {number} height\n * @param {number} depth\n * @param {number} format\n * @param {number} type\n * @param {?ArrayBufferView|?TexImageSource|number} srcData\n * @param {number=} opt_srcOffset\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.texSubImage3D = function(\n target, level, xoffset, yoffset, zoffset, width, height, depth, format,\n type, srcData, opt_srcOffset) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} zoffset\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.copyTexSubImage3D = function(\n target, level, xoffset, yoffset, zoffset, x, y, width, height) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @param {number} border\n * @param {?ArrayBufferView|number} srcDataOrSize\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLengthOverride\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.compressedTexImage2D = function(\n target, level, internalformat, width, height, border, srcDataOrSize,\n opt_srcOffset, opt_srcLengthOverride) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @param {number} depth\n * @param {number} border\n * @param {!ArrayBufferView|number} srcDataOrSize\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLengthOverride\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.compressedTexImage3D = function(\n target, level, internalformat, width, height, depth, border, srcDataOrSize,\n opt_srcOffset, opt_srcLengthOverride) {};\n\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} width\n * @param {number} height\n * @param {number} format\n * @param {?ArrayBufferView|number} srcDataOrSize\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLengthOverride\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.compressedTexSubImage2D = function(\n target, level, xoffset, yoffset, width, height, format, srcDataOrSize,\n opt_srcOffset, opt_srcLengthOverride) {};\n\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} zoffset\n * @param {number} width\n * @param {number} height\n * @param {number} depth\n * @param {number} format\n * @param {!ArrayBufferView|number} srcDataOrSize\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLengthOverride\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.compressedTexSubImage3D = function(\n target, level, xoffset, yoffset, zoffset, width, height, depth, format,\n srcDataOrSize, opt_srcOffset, opt_srcLengthOverride) {};\n\n/* Programs and shaders */\n\n/**\n * @param {!WebGLProgram} program\n * @param {string} name\n * @return {number}\n * @nosideeffects\n */\nWebGL2RenderingContext.prototype.getFragDataLocation = function(\n program, name) {};\n\n/* Uniforms */\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {number} v0\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniform1ui = function(location, v0) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {number} v0\n * @param {number} v1\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniform2ui = function(location, v0, v1) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {number} v0\n * @param {number} v1\n * @param {number} v2\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniform3ui = function(location, v0, v1, v2) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {number} v0\n * @param {number} v1\n * @param {number} v2\n * @param {number} v3\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniform4ui = function(\n location, v0, v1, v2, v3) {};\n\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {?Float32Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniform1fv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {?Float32Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniform2fv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {?Float32Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniform3fv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {?Float32Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniform4fv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {?Int32Array|?Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniform1iv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {?Int32Array|?Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniform2iv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {?Int32Array|?Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniform3iv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {?Int32Array|?Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniform4iv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {!Uint32Array|!Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniform1uiv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {!Uint32Array|!Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniform2uiv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {!Uint32Array|!Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniform3uiv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {!Uint32Array|!Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniform4uiv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {?Float32Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniformMatrix2fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {!Float32Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniformMatrix3x2fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {!Float32Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniformMatrix4x2fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {!Float32Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniformMatrix2x3fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {?Float32Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniformMatrix3fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {!Float32Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniformMatrix4x3fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {!Float32Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniformMatrix2x4fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {!Float32Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniformMatrix3x4fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {?Float32Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniformMatrix4fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/* Vertex attribs */\n\n/**\n * @param {number} index\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @param {number} w\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.vertexAttribI4i = function(\n index, x, y, z, w) {};\n\n/**\n * @param {number} index\n * @param {!Int32Array|!Array|!Array} values\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.vertexAttribI4iv = function(index, values) {};\n\n/**\n * @param {number} index\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @param {number} w\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.vertexAttribI4ui = function(\n index, x, y, z, w) {};\n\n/**\n * @param {number} index\n * @param {!Uint32Array|!Array|!Array} values\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.vertexAttribI4uiv = function(index, values) {};\n\n/**\n * @param {number} index\n * @param {number} size\n * @param {number} type\n * @param {number} stride\n * @param {number} offset\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.vertexAttribIPointer = function(\n index, size, type, stride, offset) {};\n\n/* Writing to the drawing buffer */\n\n/**\n * @param {number} index\n * @param {number} divisor\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.vertexAttribDivisor = function(\n index, divisor) {};\n\n/**\n * @param {number} mode\n * @param {number} first\n * @param {number} count\n * @param {number} instanceCount\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.drawArraysInstanced = function(\n mode, first, count, instanceCount) {};\n\n/**\n * @param {number} mode\n * @param {number} count\n * @param {number} type\n * @param {number} offset\n * @param {number} instanceCount\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.drawElementsInstanced = function(\n mode, count, type, offset, instanceCount) {};\n\n/**\n * @param {number} mode\n * @param {number} start\n * @param {number} end\n * @param {number} count\n * @param {number} type\n * @param {number} offset\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.drawRangeElements = function(\n mode, start, end, count, type, offset) {};\n\n/* Reading back pixels */\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} format\n * @param {number} type\n * @param {?ArrayBufferView|number} dstDataOrOffset\n * @param {number=} opt_dstOffset\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.readPixels = function(\n x, y, width, height, format, type, dstDataOrOffset, opt_dstOffset) {};\n\n/* Multiple Render Targets */\n\n/**\n * @param {!Array} buffers\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.drawBuffers = function(buffers) {};\n\n\n/**\n * @param {number} buffer\n * @param {number} drawbuffer\n * @param {!Float32Array|!Array} values\n * @param {number=} opt_srcOffset\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.clearBufferfv = function(\n buffer, drawbuffer, values, opt_srcOffset) {};\n\n/**\n * @param {number} buffer\n * @param {number} drawbuffer\n * @param {!Int32Array|!Array|!Array} values\n * @param {number=} opt_srcOffset\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.clearBufferiv = function(\n buffer, drawbuffer, values, opt_srcOffset) {};\n\n/**\n * @param {number} buffer\n * @param {number} drawbuffer\n * @param {!Uint32Array|!Array|!Array} values\n * @param {number=} opt_srcOffset\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.clearBufferuiv = function(\n buffer, drawbuffer, values, opt_srcOffset) {};\n\n/**\n * @param {number} buffer\n * @param {number} drawbuffer\n * @param {number} depth\n * @param {number} stencil\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.clearBufferfi = function(\n buffer, drawbuffer, depth, stencil) {};\n\n/* Query Objects */\n\n/**\n * @return {?WebGLQuery}\n */\nWebGL2RenderingContext.prototype.createQuery = function() {};\n\n/**\n * @param {?WebGLQuery} query\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.deleteQuery = function(query) {};\n\n/**\n * @param {?WebGLQuery} query\n * @return {boolean}\n */\nWebGL2RenderingContext.prototype.isQuery = function(query) {};\n\n/**\n * @param {number} target\n * @param {!WebGLQuery} query\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.beginQuery = function(target, query) {};\n\n/**\n * @param {number} target\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.endQuery = function(target) {};\n\n/**\n * @param {number} target\n * @param {number} pname\n * @return {?WebGLQuery}\n * @nosideeffects\n */\nWebGL2RenderingContext.prototype.getQuery = function(target, pname) {};\n\n/**\n * @param {!WebGLQuery} query\n * @param {number} pname\n * @return {*}\n */\nWebGL2RenderingContext.prototype.getQueryParameter = function(query, pname) {};\n\n/* Sampler Objects */\n\n/**\n * @return {?WebGLSampler}\n */\nWebGL2RenderingContext.prototype.createSampler = function() {};\n\n/**\n * @param {?WebGLSampler} sampler\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.deleteSampler = function(sampler) {};\n\n/**\n * @param {?WebGLSampler} sampler\n * @return {boolean}\n */\nWebGL2RenderingContext.prototype.isSampler = function(sampler) {};\n\n/**\n * @param {number} unit\n * @param {?WebGLSampler} sampler\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.bindSampler = function(unit, sampler) {};\n\n/**\n * @param {!WebGLSampler} sampler\n * @param {number} pname\n * @param {number} param\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.samplerParameteri = function(\n sampler, pname, param) {};\n\n/**\n * @param {!WebGLSampler} sampler\n * @param {number} pname\n * @param {number} param\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.samplerParameterf = function(\n sampler, pname, param) {};\n\n/**\n * @param {!WebGLSampler} sampler\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGL2RenderingContext.prototype.getSamplerParameter = function(\n sampler, pname) {};\n\n/* Sync objects */\n\n/**\n * @param {number} condition\n * @param {number} flags\n * @return {?WebGLSync}\n */\nWebGL2RenderingContext.prototype.fenceSync = function(condition, flags) {};\n\n/**\n * @param {?WebGLSync} sync\n * @return {boolean}\n */\nWebGL2RenderingContext.prototype.isSync = function(sync) {};\n\n/**\n * @param {?WebGLSync} sync\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.deleteSync = function(sync) {};\n\n/**\n * @param {!WebGLSync} sync\n * @param {number} flags\n * @param {number} timeout\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.clientWaitSync = function(\n sync, flags, timeout) {};\n\n/**\n * @param {!WebGLSync} sync\n * @param {number} flags\n * @param {number} timeout\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.waitSync = function(sync, flags, timeout) {};\n\n/**\n * @param {!WebGLSync} sync\n * @param {number} pname\n * @return {*}\n */\nWebGL2RenderingContext.prototype.getSyncParameter = function(sync, pname) {};\n\n/* Transform Feedback */\n\n/**\n * @return {?WebGLTransformFeedback}\n */\nWebGL2RenderingContext.prototype.createTransformFeedback = function() {};\n\n/**\n * @param {?WebGLTransformFeedback} tf\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.deleteTransformFeedback = function(tf) {};\n\n/**\n * @param {?WebGLTransformFeedback} tf\n * @return {boolean}\n */\nWebGL2RenderingContext.prototype.isTransformFeedback = function(tf) {};\n\n/**\n * @param {number} target\n * @param {?WebGLTransformFeedback} tf\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.bindTransformFeedback = function(\n target, tf) {};\n\n/**\n * @param {number} primitiveMode\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.beginTransformFeedback = function(\n primitiveMode) {};\n\n/**\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.endTransformFeedback = function() {};\n\n/**\n * @param {!WebGLProgram} program\n * @param {!Array} varyings\n * @param {number} bufferMode\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.transformFeedbackVaryings = function(\n program, varyings, bufferMode) {};\n\n/**\n * @param {!WebGLProgram} program\n * @param {number} index\n * @return {?WebGLActiveInfo}\n * @nosideeffects\n */\nWebGL2RenderingContext.prototype.getTransformFeedbackVarying = function(\n program, index) {};\n\n/**\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.pauseTransformFeedback = function() {};\n\n/**\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.resumeTransformFeedback = function() {};\n\n/* Uniform Buffer Objects and Transform Feedback Buffers */\n\n/**\n * @param {number} target\n * @param {number} index\n * @param {?WebGLBuffer} buffer\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.bindBufferBase = function(\n target, index, buffer) {};\n\n/**\n * @param {number} target\n * @param {number} index\n * @param {?WebGLBuffer} buffer\n * @param {number} offset\n * @param {number} size\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.bindBufferRange = function(\n target, index, buffer, offset, size) {};\n\n/**\n * @param {number} target\n * @param {number} index\n * @return {*}\n */\nWebGL2RenderingContext.prototype.getIndexedParameter = function(\n target, index) {};\n\n/**\n * @param {!WebGLProgram} program\n * @param {!Array} uniformNames\n * @return {!Array}\n */\nWebGL2RenderingContext.prototype.getUniformIndices = function(\n program, uniformNames) {};\n\n/**\n * @param {!WebGLProgram} program\n * @param {!Array} uniformIndices\n * @param {number} pname\n * @return {*}\n */\nWebGL2RenderingContext.prototype.getActiveUniforms = function(\n program, uniformIndices, pname) {};\n\n/**\n * @param {!WebGLProgram} program\n * @param {string} uniformBlockName\n * @return {number}\n * @nosideeffects\n */\nWebGL2RenderingContext.prototype.getUniformBlockIndex = function(\n program, uniformBlockName) {};\n\n/**\n * @param {!WebGLProgram} program\n * @param {number} uniformBlockIndex\n * @param {number} pname\n * @return {*}\n */\nWebGL2RenderingContext.prototype.getActiveUniformBlockParameter = function(\n program, uniformBlockIndex, pname) {};\n\n/**\n * @param {!WebGLProgram} program\n * @param {number} uniformBlockIndex\n * @return {?string}\n * @nosideeffects\n */\nWebGL2RenderingContext.prototype.getActiveUniformBlockName = function(\n program, uniformBlockIndex) {};\n\n/**\n * @param {!WebGLProgram} program\n * @param {number} uniformBlockIndex\n * @param {number} uniformBlockBinding\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniformBlockBinding = function(\n program, uniformBlockIndex, uniformBlockBinding) {};\n\n/* Vertex Array Objects */\n\n/**\n * @return {?WebGLVertexArrayObject}\n */\nWebGL2RenderingContext.prototype.createVertexArray = function() {};\n\n/**\n * @param {?WebGLVertexArrayObject} vertexArray\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.deleteVertexArray = function(vertexArray) {};\n\n/**\n * @param {?WebGLVertexArrayObject} vertexArray\n * @return {boolean}\n */\nWebGL2RenderingContext.prototype.isVertexArray = function(vertexArray) {};\n\n/**\n * @param {?WebGLVertexArrayObject} array\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.bindVertexArray = function(array) {};\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLQuery() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLSampler() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLSync() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLTransformFeedback() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLVertexArrayObject() {}\n', - "externs/fetchapi.js":"/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions of the fetch api.\n *\n * This api is still in development and not yet stable. Use at your\n * own risk.\n *\n * Based on Living Standard \u2014 Last Updated 17 August 2016\n *\n * @see https://fetch.spec.whatwg.org/\n * @externs\n */\n\n\n/**\n * @typedef {string}\n * @see https://w3c.github.io/webappsec-referrer-policy/#enumdef-referrerpolicy\n * Possible values: '', 'no-referrer', 'no-referrer-when-downgrade',\n * 'same-origin', 'origin', 'strict-origin', 'origin-when-cross-origin',\n * 'strict-origin-when-cross-origin', 'unsafe-url'\n */\nvar ReferrerPolicy;\n\n\n/**\n * @typedef {!Headers|!Array>|!Object}\n * @see https://fetch.spec.whatwg.org/#headersinit\n */\nvar HeadersInit;\n\n\n/**\n * @param {!HeadersInit=} opt_headersInit\n * @constructor\n * @implements {Iterable>}\n * @see https://fetch.spec.whatwg.org/#headers\n */\nfunction Headers(opt_headersInit) {}\n\n/**\n * @param {string} name\n * @param {string} value\n * @return {undefined}\n */\nHeaders.prototype.append = function(name, value) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n */\nHeaders.prototype.delete = function(name) {};\n\n/** @return {!IteratorIterable>} */\nHeaders.prototype.entries = function() {};\n\n/**\n * @param {string} name\n * @return {?string}\n */\nHeaders.prototype.get = function(name) {};\n\n/**\n * @param {string} name\n * @return {!Array}\n */\nHeaders.prototype.getAll = function(name) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n */\nHeaders.prototype.has = function(name) {};\n\n/** @return {!IteratorIterable} */\nHeaders.prototype.keys = function() {};\n\n/**\n * @param {string} name\n * @param {string} value\n * @return {undefined}\n */\nHeaders.prototype.set = function(name, value) {};\n\n/** @return {!Iterator} */\nHeaders.prototype.values = function() {};\n\n/** @return {!Iterator>} */\nHeaders.prototype[Symbol.iterator] = function() {};\n\n\n/**\n * @typedef {\n * !Blob|!BufferSource|!FormData|!URLSearchParams|!ReadableStream|string}\n * @see https://fetch.spec.whatwg.org/#bodyinit\n */\nvar BodyInit;\n\n\n/**\n * @typedef {!BodyInit|!ReadableStream}\n * @see https://fetch.spec.whatwg.org/#responsebodyinit\n */\nvar ResponseBodyInit;\n\n\n/**\n * @interface\n * @see https://fetch.spec.whatwg.org/#body\n */\nfunction Body() {};\n\n/** @type {boolean} */\nBody.prototype.bodyUsed;\n\n/** @return {!Promise} */\nBody.prototype.arrayBuffer = function() {};\n\n/** @return {!Promise} */\nBody.prototype.blob = function() {};\n\n/** @return {!Promise} */\nBody.prototype.formData = function() {};\n\n/** @return {!Promise<*>} */\nBody.prototype.json = function() {};\n\n/** @return {!Promise} */\nBody.prototype.text = function() {};\n\n\n/**\n * @typedef {!Request|string}\n * @see https://fetch.spec.whatwg.org/#requestinfo\n */\nvar RequestInfo;\n\n\n/**\n * @param {!RequestInfo} input\n * @param {!RequestInit=} opt_init\n * @constructor\n * @implements {Body}\n * @see https://fetch.spec.whatwg.org/#request\n */\nfunction Request(input, opt_init) {}\n\n/** @override */\nRequest.prototype.bodyUsed;\n\n/** @override */\nRequest.prototype.arrayBuffer = function() {};\n\n/** @override */\nRequest.prototype.blob = function() {};\n\n/** @override */\nRequest.prototype.formData = function() {};\n\n/** @override */\nRequest.prototype.json = function() {};\n\n/** @override */\nRequest.prototype.text = function() {};\n\n/** @type {string} */\nRequest.prototype.method;\n\n/** @type {string} */\nRequest.prototype.url;\n\n/** @type {!Headers} */\nRequest.prototype.headers;\n\n/** @type {!FetchRequestType} */\nRequest.prototype.type;\n\n/** @type {!RequestDestination} */\nRequest.prototype.destination;\n\n/** @type {string} */\nRequest.prototype.referrer;\n\n/** @type {!RequestMode} */\nRequest.prototype.mode;\n\n/** @type {!RequestCredentials} */\nRequest.prototype.credentials;\n\n/** @type {!RequestCache} */\nRequest.prototype.cache;\n\n/** @type {!RequestRedirect} */\nRequest.prototype.redirect;\n\n/** @type {string} */\nRequest.prototype.integrity;\n\n/** @type {boolean} */\nRequest.prototype.isHistoryNavigation;\n\n/** @type {(undefined|boolean)} */\nRequest.prototype.keepalive;\n\n/** @return {!Request} */\nRequest.prototype.clone = function() {};\n\n\n/**\n * @record\n * @see https://fetch.spec.whatwg.org/#requestinit\n */\nfunction RequestInit() {};\n\n/** @type {(undefined|string)} */\nRequestInit.prototype.method;\n\n/** @type {(undefined|!HeadersInit)} */\nRequestInit.prototype.headers;\n\n/** @type {(undefined|?BodyInit)} */\nRequestInit.prototype.body;\n\n/** @type {(undefined|string)} */\nRequestInit.prototype.referrer;\n\n/** @type {(undefined|!ReferrerPolicy)} */\nRequestInit.prototype.referrerPolicy;\n\n/** @type {(undefined|!RequestMode)} */\nRequestInit.prototype.mode;\n\n/** @type {(undefined|!RequestCredentials)} */\nRequestInit.prototype.credentials;\n\n/** @type {(undefined|!RequestCache)} */\nRequestInit.prototype.cache;\n\n/** @type {(undefined|!RequestRedirect)} */\nRequestInit.prototype.redirect;\n\n/** @type {(undefined|string)} */\nRequestInit.prototype.integrity;\n\n/** @type {(undefined|!AbortSignal)} */\nRequestInit.prototype.signal;\n\n/** @type {(undefined|boolean)} */\nRequestInit.prototype.keepalive;\n\n/** @type {(undefined|null)} */\nRequestInit.prototype.window;\n\n/**\n * @typedef {string}\n * @see https://fetch.spec.whatwg.org/#requesttype\n * Possible values: '', 'audio', 'font', 'image', 'script', 'style',\n * 'track', 'video'\n */\nvar FetchRequestType;\n\n\n/**\n * @typedef {string}\n * @see https://fetch.spec.whatwg.org/#requestdestination\n * Possible values: '', 'document', 'embed', 'font', 'image', 'manifest',\n * 'media', 'object', 'report', 'script', 'serviceworker', 'sharedworker',\n * 'style', 'worker', 'xslt'\n */\nvar RequestDestination;\n\n\n/**\n * @typedef {string}\n * @see https://fetch.spec.whatwg.org/#requestmode\n * Possible values: 'navigate', 'same-origin', 'no-cors', 'cors'\n */\nvar RequestMode ;\n\n\n/**\n * @typedef {string}\n * @see https://fetch.spec.whatwg.org/#requestcredentials\n * Possible values: 'omit', 'same-origin', 'include'\n */\nvar RequestCredentials;\n\n\n/**\n * @typedef {string}\n * @see https://fetch.spec.whatwg.org/#requestcache\n * Possible values: 'default', 'no-store', 'reload', 'no-cache', 'force-cache',\n * 'only-if-cached'\n */\nvar RequestCache;\n\n\n/**\n * @typedef {string}\n * @see https://fetch.spec.whatwg.org/#requestredirect\n * Possible values: 'follow', 'error', 'manual'\n */\nvar RequestRedirect;\n\n\n/**\n * @param {?ResponseBodyInit=} opt_body\n * @param {!ResponseInit=} opt_init\n * @constructor\n * @implements {Body}\n * @see https://fetch.spec.whatwg.org/#response\n */\nfunction Response(opt_body, opt_init) {}\n\n/** @return {!Response} */\nResponse.error = function() {};\n\n/**\n * @param {string} url\n * @param {number=} opt_status\n * @return {!Response}\n */\nResponse.redirect = function(url, opt_status) {};\n\n/** @override */\nResponse.prototype.bodyUsed;\n\n/** @override */\nResponse.prototype.arrayBuffer = function() {};\n\n/** @override */\nResponse.prototype.blob = function() {};\n\n/** @override */\nResponse.prototype.formData = function() {};\n\n/** @override */\nResponse.prototype.json = function() {};\n\n/** @override */\nResponse.prototype.text = function() {};\n\n/** @type {!ResponseType} */\nResponse.prototype.type;\n\n/** @type {string} */\nResponse.prototype.url;\n\n/** @type {boolean} */\nResponse.prototype.redirected;\n\n/** @type {number} */\nResponse.prototype.status;\n\n/** @type {boolean} */\nResponse.prototype.ok;\n\n/** @type {string} */\nResponse.prototype.statusText;\n\n/** @type {!Headers} */\nResponse.prototype.headers;\n\n/** @type {?ReadableStream} */\nResponse.prototype.body;\n\n/** @type {!Promise} */\nResponse.prototype.trailer;\n\n/** @return {!Response} */\nResponse.prototype.clone = function() {};\n\n\n/**\n * @record\n * @see https://fetch.spec.whatwg.org/#responseinit\n */\nfunction ResponseInit() {};\n\n/** @type {(undefined|number)} */\nResponseInit.prototype.status;\n\n/** @type {(undefined|string)} */\nResponseInit.prototype.statusText;\n\n/** @type {(undefined|!HeadersInit)} */\nResponseInit.prototype.headers;\n\n\n/**\n * @typedef {string}\n * @see https://fetch.spec.whatwg.org/#responsetype\n * Possible values: 'basic', 'cors', 'default', 'error', 'opaque',\n * 'opaqueredirect'\n */\nvar ResponseType;\n\n/**\n * @param {!RequestInfo} input\n * @param {!RequestInit=} opt_init\n * @return {!Promise}\n * @see https://fetch.spec.whatwg.org/#fetch-method\n */\nfunction fetch(input, opt_init) {}\n\n/**\n * @param {!RequestInfo} input\n * @param {!RequestInit=} opt_init\n * @return {!Promise}\n * @see https://fetch.spec.whatwg.org/#fetch-method\n */\nWindow.prototype.fetch = function(input, opt_init) {};\n\n/**\n * @param {!RequestInfo} input\n * @param {!RequestInit=} opt_init\n * @return {!Promise}\n * @see https://fetch.spec.whatwg.org/#fetch-method\n */\nWorkerGlobalScope.prototype.fetch = function(input, opt_init) {};\n\n/**\n * if WorkerOptions.type = 'module', it specifies how `scriptURL` is fetched.\n * WorkerOptions is defined in html5.js.\n * @type {!RequestCredentials|undefined}\n */\nWorkerOptions.prototype.credentials;\n", - "externs/streamsapi.js":'/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Streams API definitions\n *\n * Based on Living Standard \u2014 Last Updated 5 August 2016\n * https://streams.spec.whatwg.org/commit-snapshots/34ecaadbcce8df9943d7a2cdb7fca4dc25914df4/\n *\n * @see https://streams.spec.whatwg.org/\n * @externs\n */\n\n\n/** @typedef {{ value:*, done:boolean }} */\nvar IteratorResult;\n\n\n/**\n * @typedef {!CountQueuingStrategy|!ByteLengthQueuingStrategy|{\n * size: (undefined|function(*): number),\n * highWaterMark: (number|undefined),\n * }}\n */\nvar QueuingStrategy;\n\n/**\n * The TransformStreamDefaultController class has methods that allow\n * manipulation of the associated ReadableStream and WritableStream.\n *\n * This class cannot be directly constructed and is instead passed by the\n * TransformStream to the methods of its transformer.\n *\n * @interface\n * @see https://streams.spec.whatwg.org/#ts-default-controller-class\n */\nfunction TransformStreamDefaultController() {};\n\n/**\n * @type {number}\n * @see https://streams.spec.whatwg.org/#ts-default-controller-desired-size\n */\nTransformStreamDefaultController.prototype.desiredSize;\n\n/**\n * @param {*} chunk\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#ts-default-controller-enqueue\n */\nTransformStreamDefaultController.prototype.enqueue = function(chunk) {};\n\n/**\n * @param {*} reason\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#ts-default-controller-error\n */\nTransformStreamDefaultController.prototype.error = function(reason) {};\n\n/**\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#ts-default-controller-terminate\n */\nTransformStreamDefaultController.prototype.terminate = function() {};\n\n\n/**\n * @record\n * @see https://streams.spec.whatwg.org/#transformer-api\n */\nfunction TransformStreamTransformer() {};\n\n/**\n * @type {(undefined|\n * function(!TransformStreamDefaultController):(!IThenable<*>|undefined))}\n */\nTransformStreamTransformer.prototype.start;\n\n/**\n * @type {(undefined|\n * function(*,\n * !TransformStreamDefaultController):(!IThenable<*>|undefined))}\n */\nTransformStreamTransformer.prototype.transform;\n\n/**\n * @type {(undefined|\n * function(!TransformStreamDefaultController):(!IThenable<*>|undefined))}\n */\nTransformStreamTransformer.prototype.flush;\n\n\n/**\n * A transform stream (https://streams.spec.whatwg.org/#transform-stream).\n * @record\n */\nfunction ITransformStream() {};\n\n/** @type {!WritableStream} */\nITransformStream.prototype.writable;\n\n/** @type {!ReadableStream} */\nITransformStream.prototype.readable;\n\n/**\n * @param {!TransformStreamTransformer=} transformer\n * @param {!QueuingStrategy=} writableStrategy\n * @param {!QueuingStrategy=} readableStrategy\n * @constructor\n * @implements ITransformStream\n * @see https://streams.spec.whatwg.org/#ts-class\n */\nfunction TransformStream(transformer, writableStrategy, readableStrategy) {};\n\n/** @type {!WritableStream} */\nTransformStream.prototype.writable;\n\n/** @type {!ReadableStream} */\nTransformStream.prototype.readable;\n\n/**\n * @record\n */\nfunction PipeOptions() {};\n\n/** @type {undefined|boolean} */\nPipeOptions.prototype.preventClose;\n\n/** @type {undefined|boolean} */\nPipeOptions.prototype.preventAbort;\n\n/** @type {undefined|boolean} */\nPipeOptions.prototype.preventCancel;\n\n\n/**\n * @record\n */\nfunction ReadableStreamSource() {};\n\n/**\n * @type {(undefined|\n * function((!ReadableByteStreamController|!ReadableStreamDefaultController)):(!IThenable<*>|undefined))}\n */\nReadableStreamSource.prototype.start;\n\n/**\n * @type {(undefined|\n * function((!ReadableByteStreamController|!ReadableStreamDefaultController)):(!IThenable<*>|undefined))}\n */\nReadableStreamSource.prototype.pull;\n\n/** @type {(undefined|function(*):(!Promise<*>|undefined))} */\nReadableStreamSource.prototype.cancel;\n\n/** @type {(undefined|string)} */\nReadableStreamSource.prototype.type;\n\n/** @type {(undefined|number)} */\nReadableStreamSource.prototype.autoAllocateChunkSize;\n\n/**\n * @record\n */\nfunction ReadableStreamIteratorOptions() {};\n\n/** @type {undefined|boolean} */\nReadableStreamIteratorOptions.prototype.preventCancel;\n\n/**\n * @param {!ReadableStreamSource=} opt_underlyingSource\n * @param {!QueuingStrategy=} opt_queuingStrategy\n * @constructor\n * @see https://streams.spec.whatwg.org/#rs-class\n */\nfunction ReadableStream(opt_underlyingSource, opt_queuingStrategy) {};\n\n/**\n * @type {boolean}\n * @see https://streams.spec.whatwg.org/#rs-locked\n */\nReadableStream.prototype.locked;\n\n/**\n * @param {*} reason\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#rs-cancel\n */\nReadableStream.prototype.cancel = function(reason) {};\n\n/**\n * @param {!ReadableStreamIteratorOptions=} options\n * @return {!AsyncIterator}\n * @see https://streams.spec.whatwg.org/#rs-get-iterator\n */\nReadableStream.prototype.getIterator = function(options) {};\n\n/**\n * @param {{ mode:(undefined|string) }=} opt_options\n * @return {(!ReadableStreamDefaultReader|!ReadableStreamBYOBReader)}\n * @see https://streams.spec.whatwg.org/#rs-get-reader\n */\nReadableStream.prototype.getReader = function(opt_options) {};\n\n/**\n * @param {!ITransformStream} transform\n * @param {!PipeOptions=} opt_options\n * @return {!ReadableStream}\n * @see https://streams.spec.whatwg.org/#rs-pipe-through\n */\nReadableStream.prototype.pipeThrough = function(transform, opt_options) {};\n\n/**\n * @param {!WritableStream} dest\n * @param {!PipeOptions=} opt_options\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#rs-pipe-to\n */\nReadableStream.prototype.pipeTo = function(dest, opt_options) {};\n\n/**\n * @return {!Array}\n * @see https://streams.spec.whatwg.org/#rs-tee\n */\nReadableStream.prototype.tee = function() {};\n\n/**\n * @param {!ReadableStreamIteratorOptions=} options\n * @return {!AsyncIterator}\n * @see https://streams.spec.whatwg.org/#rs-asynciterator\n */\nReadableStream.prototype[Symbol.asyncIterator] = function(options) {};\n\n/**\n * The ReadableStreamDefaultReader constructor is generally not meant to be used directly;\n * instead, a stream\u2019s getReader() method should be used.\n *\n * @interface\n * @see https://streams.spec.whatwg.org/#default-reader-class\n */\nfunction ReadableStreamDefaultReader() {};\n\n/**\n * @type {!Promise}\n * @see https://streams.spec.whatwg.org/#default-reader-closed\n */\nReadableStreamDefaultReader.prototype.closed;\n\n/**\n * @param {*} reason\n * @return {!Promise<*>}\n * @see https://streams.spec.whatwg.org/#default-reader-cancel\n */\nReadableStreamDefaultReader.prototype.cancel = function(reason) {};\n\n/**\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#default-reader-read\n */\nReadableStreamDefaultReader.prototype.read = function() {};\n\n/**\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#default-reader-release-lock\n */\nReadableStreamDefaultReader.prototype.releaseLock = function() {};\n\n\n/**\n * The ReadableStreamBYOBReader constructor is generally not meant to be used\n * directly; instead, a stream\u2019s getReader() method should be used.\n *\n * @interface\n * @see https://streams.spec.whatwg.org/#byob-reader-class\n */\nfunction ReadableStreamBYOBReader() {};\n\n/**\n * @type {!Promise}\n * @see https://streams.spec.whatwg.org/#byob-reader-closed\n */\nReadableStreamBYOBReader.prototype.closed;\n\n/**\n * @param {*} reason\n * @return {!Promise<*>}\n * @see https://streams.spec.whatwg.org/#byob-reader-cancel\n */\nReadableStreamBYOBReader.prototype.cancel = function(reason) {};\n\n/**\n * @param {!ArrayBufferView} view\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#byob-reader-read\n */\nReadableStreamBYOBReader.prototype.read = function(view) {};\n\n/**\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#byob-reader-release-lock\n */\nReadableStreamBYOBReader.prototype.releaseLock = function() {};\n\n\n/**\n * The ReadableStreamDefaultController constructor cannot be used directly;\n * it only works on a ReadableStream that is in the middle of being constructed.\n *\n * @interface\n * @see https://streams.spec.whatwg.org/#rs-default-controller-class\n */\nfunction ReadableStreamDefaultController() {};\n\n/**\n * @type {number}\n * @see https://streams.spec.whatwg.org/#rs-default-controller-desired-size\n */\nReadableStreamDefaultController.prototype.desiredSize;\n\n/**\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rs-default-controller-close\n */\nReadableStreamDefaultController.prototype.close = function() {};\n\n/**\n * @param {*} chunk\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rs-default-controller-enqueue\n */\nReadableStreamDefaultController.prototype.enqueue = function(chunk) {};\n\n/**\n * @param {*} err\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rs-default-controller-error\n */\nReadableStreamDefaultController.prototype.error = function(err) {};\n\n\n/**\n * The ReadableByteStreamController constructor cannot be used directly;\n * it only works on a ReadableStream that is in the middle of being constructed.\n *\n * @interface\n * @see https://streams.spec.whatwg.org/#rbs-controller-class\n */\nfunction ReadableByteStreamController() {};\n\n/**\n * @type {!ReadableStreamBYOBRequest}\n * @see https://streams.spec.whatwg.org/#rbs-controller-byob-request\n */\nReadableByteStreamController.prototype.byobRequest;\n\n/**\n * @type {number}\n * @see https://streams.spec.whatwg.org/#rbs-controller-desired-size\n */\nReadableByteStreamController.prototype.desiredSize;\n\n/**\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rbs-controller-close\n */\nReadableByteStreamController.prototype.close = function() {};\n\n/**\n * @param {!ArrayBufferView} chunk\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rbs-controller-enqueue\n */\nReadableByteStreamController.prototype.enqueue = function(chunk) {};\n\n/**\n * @param {*} err\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rbs-controller-error\n */\nReadableByteStreamController.prototype.error = function(err) {};\n\n\n/**\n * @interface\n * @see https://streams.spec.whatwg.org/#rs-byob-request-class\n */\nfunction ReadableStreamBYOBRequest() {};\n\n/**\n * @type {!ArrayBufferView}\n * @see https://streams.spec.whatwg.org/#rs-byob-request-view\n */\nReadableStreamBYOBRequest.prototype.view;\n\n/**\n * @param {number} bytesWritten\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rs-byob-request-respond\n */\nReadableStreamBYOBRequest.prototype.respond = function(bytesWritten) {};\n\n/**\n * @param {!ArrayBufferView} view\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rs-byob-request-respond-with-new-view\n */\nReadableStreamBYOBRequest.prototype.respondWithNewView = function(view) {};\n\n\n/**\n * @record\n */\nfunction WritableStreamSink() {};\n\n/** @type {(undefined|function(!WritableStreamDefaultController):(!IThenable<*>|undefined))}*/\nWritableStreamSink.prototype.start;\n\n/** @type {(undefined|function(*, !WritableStreamDefaultController):(!IThenable<*>|undefined))}*/\nWritableStreamSink.prototype.write;\n\n/** @type {(undefined|function():(!IThenable<*>|undefined))} */\nWritableStreamSink.prototype.close;\n\n/** @type {(undefined|function(*):(!IThenable<*>|undefined))} */\nWritableStreamSink.prototype.abort;\n\n\n/**\n * @param {!WritableStreamSink=} opt_underlyingSink\n * @param {!QueuingStrategy=} opt_queuingStrategy\n * @constructor\n * @see https://streams.spec.whatwg.org/#ws-class\n */\nfunction WritableStream(opt_underlyingSink, opt_queuingStrategy) {};\n\n/**\n * @type {boolean}\n * @see https://streams.spec.whatwg.org/#ws-locked\n */\nWritableStream.prototype.locked;\n\n/**\n * @param {*} reason\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#ws-abort\n */\nWritableStream.prototype.abort = function(reason) {};\n\n/**\n * @return {!WritableStreamDefaultWriter}\n * @see https://streams.spec.whatwg.org/#ws-get-writer\n */\nWritableStream.prototype.getWriter = function() {};\n\n\n/**\n * @interface\n * @see https://streams.spec.whatwg.org/#default-writer-class\n */\nfunction WritableStreamDefaultWriter() {};\n\n/**\n * @type {!Promise}\n * @see https://streams.spec.whatwg.org/#default-writer-closed\n */\nWritableStreamDefaultWriter.prototype.closed;\n\n/**\n * @type {number}\n * @see https://streams.spec.whatwg.org/#default-writer-desiredSize\n */\nWritableStreamDefaultWriter.prototype.desiredSize;\n\n/**\n * @type {!Promise}\n * @see https://streams.spec.whatwg.org/#default-writer-ready\n */\nWritableStreamDefaultWriter.prototype.ready;\n\n/**\n * @param {*} reason\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#default-writer-abort\n */\nWritableStreamDefaultWriter.prototype.abort = function(reason) {};\n\n/**\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#default-writer-close\n */\nWritableStreamDefaultWriter.prototype.close = function() {};\n\n/**\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#default-writer-release-lock\n */\nWritableStreamDefaultWriter.prototype.releaseLock = function() {};\n\n/**\n * @param {*} chunk\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#default-writer-write\n */\nWritableStreamDefaultWriter.prototype.write = function(chunk) {};\n\n\n/**\n * The WritableStreamDefaultController constructor cannot be used directly;\n * it only works on a WritableStream that is in the middle of being constructed.\n *\n * @interface\n * @see https://streams.spec.whatwg.org/#ws-default-controller-class\n */\nfunction WritableStreamDefaultController() {};\n\n/**\n * @param {*} err\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#ws-default-controller-error\n */\nWritableStreamDefaultController.prototype.error = function(err) {};\n\n\n/**\n * @param {{ highWaterMark:number }} config\n * @constructor\n * @see https://streams.spec.whatwg.org/#blqs-class\n */\nfunction ByteLengthQueuingStrategy(config) {}\n\n/**\n * If we don\'t want to be strict we can define chunk as {*}\n * and return as {number|undefined}\n *\n * @param {{ byteLength:number }} chunk\n * @return {number}\n * @see https://streams.spec.whatwg.org/#blqs-size\n */\nByteLengthQueuingStrategy.prototype.size = function(chunk) {};\n\n\n/**\n * @param {{ highWaterMark:number }} config\n * @constructor\n * @see https://streams.spec.whatwg.org/#cqs-class\n */\nfunction CountQueuingStrategy(config) {}\n\n/**\n * @param {*} chunk\n * @return {number}\n * @see https://streams.spec.whatwg.org/#cqs-size\n */\nCountQueuingStrategy.prototype.size = function(chunk) {};\n', - "externs/whatwg_console.js":'/*\n * Copyright 2019 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for console debugging facilities.\n * https://console.spec.whatwg.org/\n * @externs\n */\n\n/**\n * @constructor\n * @see https://console.spec.whatwg.org/\n */\nfunction Console() {};\n\n/**\n * If condition is false, perform Logger("error", data).\n * @param {*} condition\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.assert = function(condition, var_data) {};\n\n/**\n * @return {undefined}\n */\nConsole.prototype.clear = function() {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.debug = function(var_data) {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.error = function(var_data) {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.info = function(var_data) {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.log = function(var_data) {};\n\n/**\n * @param {!Object} tabularData\n * @param {*=} properties\n * @return {undefined}\n */\nConsole.prototype.table = function(tabularData, properties) {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.trace = function(var_data) {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.warn = function(var_data) {};\n\n/**\n * @param {*} item\n * @return {undefined}\n */\nConsole.prototype.dir = function(item) {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.dirxml = function(var_data) {};\n\n/**\n * @param {string=} label\n * @return {undefined}\n */\nConsole.prototype.count = function(label) {};\n\n/**\n * @param {string=} label\n * @return {undefined}\n */\nConsole.prototype.countReset = function(label) {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.group = function(var_data) {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.groupCollapsed = function(var_data) {};\n\n/**\n * @return {undefined}\n */\nConsole.prototype.groupEnd = function() {};\n\n/**\n * @param {string} label\n * @return {undefined}\n */\nConsole.prototype.time = function(label) {};\n\n/**\n * @param {string} label\n * @param {...*} data\n * @return {undefined}\n */\nConsole.prototype.timeLog = function(label, data) {};\n\n/**\n * @param {string} label\n * @return {undefined}\n */\nConsole.prototype.timeEnd = function(label) {};\n\n/** @type {!Console} */\nWindow.prototype.console;\n\n/**\n * @type {!Console}\n * @suppress {duplicate}\n */\nvar console;\n', --"externs/nonstandard_console.js":'/*\n * Copyright 2019 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for console debugging facilities implemented in\n * various browsers but not part of https://console.spec.whatwg.org/.\n * @externs\n */\n\n/**\n * @constructor\n * @see https://cs.chromium.org/search/?q=%22interface+MemoryInfo%22+file:idl+file:WebKit+package:chromium&type=cs\n */\nfunction MemoryInfo() {};\n\n/** @type {number} */\nMemoryInfo.prototype.totalJSHeapSize;\n\n/** @type {number} */\nMemoryInfo.prototype.usedJSHeapSize;\n\n/** @type {number} */\nMemoryInfo.prototype.jsHeapSizeLimit;\n\n/**\n * @param {*} value\n * @return {undefined}\n */\nConsole.prototype.markTimeline = function(value) {};\n\n/**\n * @param {string=} title\n * @return {undefined}\n */\nConsole.prototype.profile = function(title) {};\n\n/** @type {Array} */\nConsole.prototype.profiles;\n\n/**\n * @param {string=} title\n * @return {undefined}\n */\nConsole.prototype.profileEnd = function(title) {};\n\n/**\n * @param {*} value\n * @return {undefined}\n */\nConsole.prototype.timeStamp = function(value) {};\n\n/** @type {MemoryInfo} */\nConsole.prototype.memory;\n', -+"externs/nonstandard_console.js":'/*\n * Copyright 2019 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for console debugging facilities implemented in\n * various browsers but not part of https://console.spec.whatwg.org/.\n * @externs\n */\n\n/**\n * @constructor\n * @see https://cs.ch40m1um.qjz9zk/search/?q=%22interface+MemoryInfo%22+file:idl+file:WebKit+package:chromium&type=cs\n */\nfunction MemoryInfo() {};\n\n/** @type {number} */\nMemoryInfo.prototype.totalJSHeapSize;\n\n/** @type {number} */\nMemoryInfo.prototype.usedJSHeapSize;\n\n/** @type {number} */\nMemoryInfo.prototype.jsHeapSizeLimit;\n\n/**\n * @param {*} value\n * @return {undefined}\n */\nConsole.prototype.markTimeline = function(value) {};\n\n/**\n * @param {string=} title\n * @return {undefined}\n */\nConsole.prototype.profile = function(title) {};\n\n/** @type {Array} */\nConsole.prototype.profiles;\n\n/**\n * @param {string=} title\n * @return {undefined}\n */\nConsole.prototype.profileEnd = function(title) {};\n\n/**\n * @param {*} value\n * @return {undefined}\n */\nConsole.prototype.timeStamp = function(value) {};\n\n/** @type {MemoryInfo} */\nConsole.prototype.memory;\n', - "js/base.js":'/*\n * Copyright 2012 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @fileoverview The base namespace for code injected by the compiler\n * at compile-time.\n */\n\n/** @const */\nvar $jscomp = $jscomp || {};\n\n/** @const Locals for goog.scope */\n$jscomp.scope = {};\n', - "js/es6/array.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Brings in all ES6 Array polyfills.\n * @suppress {uselessCode}\n */\n'require es6/array/copywithin';\n'require es6/array/entries';\n'require es6/array/fill';\n'require es6/array/find';\n'require es6/array/findindex';\n'require es6/array/flat';\n'require es6/array/flatmap';\n'require es6/array/from';\n'require es6/array/includes';\n'require es6/array/keys';\n'require es6/array/of';\n'require es6/array/values';\n", - "js/es6/array/copywithin.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.copyWithin', function(orig) {\n // requires strict mode to throw for invalid `this` or params\n 'use strict';\n\n if (orig) return orig;\n\n /**\n * Copies elements from one part of the array to another.\n *\n * @this {!IArrayLike}\n * @param {number} target Start index to copy elements to.\n * @param {number} start Start index to copy elements from.\n * @param {number=} opt_end Index from which to end copying.\n * @return {!IArrayLike} The array, with the copy performed in-place.\n * @template VALUE\n */\n var polyfill = function(target, start, opt_end) {\n var len = this.length;\n target = toInteger(target);\n start = toInteger(start);\n var end = opt_end === undefined ? len : toInteger(opt_end);\n var to = target < 0 ? Math.max(len + target, 0) : Math.min(target, len);\n var from = start < 0 ? Math.max(len + start, 0) : Math.min(start, len);\n var final = end < 0 ? Math.max(len + end, 0) : Math.min(end, len);\n if (to < from) {\n while (from < final) {\n if (from in this) {\n this[to++] = this[from++];\n } else {\n delete this[to++];\n from++;\n }\n }\n } else {\n final = Math.min(final, len + from - to);\n to += final - from;\n while (final > from) {\n if (--final in this) {\n this[--to] = this[final];\n } else {\n delete this[--to];\n }\n }\n }\n return this;\n };\n\n /**\n * @param {number} arg\n * @return {number}\n */\n function toInteger(arg) {\n var n = Number(arg);\n if (n === Infinity || n === -Infinity) {\n return n;\n }\n return n | 0;\n }\n\n return polyfill;\n}, 'es6', 'es3');\n", -@@ -870,13 +870,13 @@ var pra={"externs/es3.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n +@@ -1418,13 +1418,13 @@ var mXa={"js/base.js":'/*\n * Copyright 2012 The Closure Compiler Authors.\n *\n "js/es6/array/fill.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.fill', function(orig) {\n if (orig) return orig;\n\n /**\n * Fills elements of an array with a constant value.\n *\n * @this {!IArrayLike}\n * @param {VALUE} value Value to fill.\n * @param {number=} opt_start Start index, or zero if omitted.\n * @param {number=} opt_end End index, or length if omitted.\n * @return {!IArrayLike} The array, with the fill performed in-place.\n * @template VALUE\n * @suppress {reportUnknownTypes, strictPrimitiveOperators}\n */\n var polyfill = function(value, opt_start, opt_end) {\n var length = this.length || 0;\n if (opt_start < 0) {\n opt_start = Math.max(0, length + /** @type {number} */ (opt_start));\n }\n if (opt_end == null || opt_end > length) opt_end = length;\n opt_end = Number(opt_end);\n if (opt_end < 0) opt_end = Math.max(0, length + opt_end);\n for (var i = Number(opt_start || 0); i < opt_end; i++) {\n this[i] = value;\n }\n return this;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", "js/es6/array/find.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/findinternal';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.find', function(orig) {\n if (orig) return orig;\n\n /**\n * Finds and returns an element that satisfies the given predicate.\n *\n * @this {!IArrayLike}\n * @param {function(this: THIS, VALUE, number, !IArrayLike): *}\n * callback\n * @param {THIS=} opt_thisArg\n * @return {VALUE|undefined} The found value, or undefined.\n * @template VALUE, THIS\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(callback, opt_thisArg) {\n return $jscomp.findInternal(this, callback, opt_thisArg).v;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", "js/es6/array/findindex.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/findinternal';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.findIndex', function(orig) {\n if (orig) return orig;\n\n /**\n * Finds an element that satisfies the given predicate, returning its index.\n *\n * @this {!IArrayLike}\n * @param {function(this: THIS, VALUE, number, !IArrayLike): *}\n * callback\n * @param {THIS=} opt_thisArg\n * @return {number} The found value, or undefined.\n * @template VALUE, THIS\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(callback, opt_thisArg) {\n return $jscomp.findInternal(this, callback, opt_thisArg).i;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", @@ -34289,16 +34414,16 @@ diff --git a/third_party/google-closure-library/closure/goog/transpile.js b/thir "js/es6/array/of.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/array/from';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.of', function(orig) {\n if (orig) return orig;\n\n /**\n * Creates an array from a fixed set of arguments.\n *\n *

Polyfills the static function Array.of(). Does not support\n * constructor inheritance (i.e. (subclass of Array).of).\n *\n * @param {...T} var_args Elements to include in the array.\n * @return {!Array}\n * @template T\n */\n var polyfill = function(var_args) {\n return Array.from(arguments);\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", -"js/es6/array/values.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/util/iteratorfromarray';\n'require util/polyfill';\n\n// NOTE: Although Array.prototype.values was added to the 2015 edition of the\n// spec, we consider it an \"ES8\" feature because many browsers which are\n// otherwise ES6-compatible, have not implemented it due to web compatibility\n// issues. See https://bugs.chromium.org/p/chromium/issues/detail?id=615873\n$jscomp.polyfill('Array.prototype.values', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an iterator of values of the given array.\n *\n * @this {!IArrayLike}\n * @return {!IteratorIterable}\n * @template VALUE\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function() {\n return $jscomp.iteratorFromArray(this, function(k, v) { return v; });\n };\n\n return polyfill;\n}, 'es8', 'es3');\n", +"js/es6/array/values.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/util/iteratorfromarray';\n'require util/polyfill';\n\n// NOTE: Although Array.prototype.values was added to the 2015 edition of the\n// spec, we consider it an \"ES8\" feature because many browsers which are\n// otherwise ES6-compatible, have not implemented it due to web compatibility\n// issues. See https://bugs.ch40m1um.qjz9zk/p/chromium/issues/detail?id=615873\n$jscomp.polyfill('Array.prototype.values', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an iterator of values of the given array.\n *\n * @this {!IArrayLike}\n * @return {!IteratorIterable}\n * @template VALUE\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function() {\n return $jscomp.iteratorFromArray(this, function(k, v) { return v; });\n };\n\n return polyfill;\n}, 'es8', 'es3');\n", - "js/es6/async_generator_wrapper.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Runtime logic for transpiled Async Generators.\n * @suppress {uselessCode}\n */\n'require base';\n'require es6/promise/promise';\n'require es6/symbol';\n'require es6/util/makeasynciterator';\n\n\n/** @enum {number} */\n$jscomp.AsyncGeneratorWrapper$ActionEnum = {\n /** Yield the value from the wrapper generator */\n YIELD_VALUE: 0,\n /** Yield each value from a delegate generator */\n YIELD_STAR: 1,\n /** Resolve the value as a Promise and continue execution */\n AWAIT_VALUE: 2,\n};\n\n/**\n * @param {!$jscomp.AsyncGeneratorWrapper$ActionEnum} action\n * @param {VALUE} value\n * @constructor\n * @template VALUE\n * @struct\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper$ActionRecord = function(action, value) {\n /**\n * @public\n * @const\n * @type {!$jscomp.AsyncGeneratorWrapper$ActionEnum}\n */\n this.action = action;\n\n /**\n * @public\n * @const\n * @type {VALUE}\n */\n this.value = /** @type {VALUE} */ (value);\n};\n\n/** @enum {string} */\n$jscomp.AsyncGeneratorWrapper$GeneratorMethod = {\n NEXT: 'next', THROW: 'throw', RETURN: 'return',\n};\n\n/**\n * Records the details of a call to `next()`, `throw()`, or `return()`.\n *\n * One of these objects will be created for each call.\n *\n * @param {$jscomp.AsyncGeneratorWrapper$GeneratorMethod} method\n * Method to call on generator\n * @param {?} param\n * Parameter for method called on generator\n *\n * @param {function(!IIterableResult)} resolve\n * Function to resolve the Promise associated with this frame.\n * @param {function(?)} reject\n * Function to reject the Promise associated with this frame.\n *\n * @constructor\n * @private\n * @template VALUE\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionFrame_ = function(\n method, param, resolve, reject) {\n /** @type {$jscomp.AsyncGeneratorWrapper$GeneratorMethod} */\n this.method = method;\n /** @type {?} */\n this.param = param;\n /** @type {function(!IIterableResult)} */\n this.resolve = resolve;\n /** @type {function(?)} */\n this.reject = reject;\n};\n\n/**\n * @param {!$jscomp.AsyncGeneratorWrapper$ExecutionFrame_} frame\n * The frame at this position in the queue\n * @param {$jscomp.AsyncGeneratorWrapper$ExecutionNode_} next\n * The node containing the frame to be executed after this one completes\n *\n * @constructor\n * @private\n * @template VALUE\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionNode_ = function(frame, next) {\n /** @type {!$jscomp.AsyncGeneratorWrapper$ExecutionFrame_} */\n this.frame = frame;\n /** @type {$jscomp.AsyncGeneratorWrapper$ExecutionNode_} */\n this.next = next;\n};\n\n/**\n * A minimalistic queue backed by a linked-list.\n *\n * @constructor\n * @private\n * @template VALUE\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_ = function() {\n /**\n * @type {$jscomp.AsyncGeneratorWrapper$ExecutionNode_}\n * @private\n */\n this.head_ = null;\n\n /**\n *\n * @type {$jscomp.AsyncGeneratorWrapper$ExecutionNode_}\n * @private\n */\n this.tail_ = null;\n};\n\n/**\n * @return {boolean}\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_.prototype.isEmpty = function() {\n return this.head_ === null;\n};\n\n/**\n * Returns the current head frame if it exists, otherwise throws Error.\n *\n * @return {!$jscomp.AsyncGeneratorWrapper$ExecutionFrame_}\n * @throws {Error} if the queue is empty\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_.prototype.first = function() {\n if (this.head_) {\n return this.head_.frame;\n } else {\n throw new Error('no frames in executionQueue');\n }\n};\n\n/**\n * Drops the current head frame off the head of the queue. Performs same\n * operations as a theoretical \"pop\", but saves time by not storing or returning\n * the popped frame.\n *\n * If the queue is empty, no operation is performed.\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_.prototype.drop = function() {\n if (this.head_) {\n this.head_ = this.head_.next;\n if (!this.head_) {\n this.tail_ = null;\n }\n }\n};\n\n/**\n * @param {!$jscomp.AsyncGeneratorWrapper$ExecutionFrame_} newFrame\n * the new frame to be executed after all frames currently in the queue\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_.prototype.enqueue = function(\n newFrame) {\n var node = new $jscomp.AsyncGeneratorWrapper$ExecutionNode_(newFrame, null);\n if (this.tail_) {\n this.tail_.next = node;\n this.tail_ = node;\n } else {\n this.head_ = node;\n this.tail_ = node;\n }\n};\n\n/**\n * @constructor\n * @implements {AsyncGenerator}\n * @implements {AsyncIterable}\n * @template VALUE\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper = function(\n /** @type {!Generator<$jscomp.AsyncGeneratorWrapper$ActionRecord>} */\n generator) {\n /** @private */\n this.generator_ = generator;\n\n /**\n * @private\n * @type {AsyncIterator}\n */\n this.delegate_ = null;\n\n /**\n * @type {!$jscomp.AsyncGeneratorWrapper$ExecutionQueue_}\n * @private\n */\n this.executionQueue_ = new $jscomp.AsyncGeneratorWrapper$ExecutionQueue_();\n\n $jscomp.initSymbolAsyncIterator();\n\n /** @type {$jscomp.AsyncGeneratorWrapper} */\n this[Symbol.asyncIterator] =\n /** @return {$jscomp.AsyncGeneratorWrapper} */ function() {\n return this;\n };\n\n var self = this;\n\n /**\n * @this {undefined}\n * @param {!IIterableResult} record\n * @private\n */\n this.boundHandleDelegateResult_ = function(record) {\n self.handleDelegateResult_(record);\n };\n\n /**\n * @this {undefined}\n * @param {*} thrownError\n * @private\n */\n this.boundHandleDelegateError_ = function(thrownError) {\n self.handleDelegateError_(thrownError);\n };\n\n /**\n * @this {undefined}\n * @param {*} err\n * @private\n */\n this.boundRejectAndClose_ = function(err) {\n self.rejectAndClose_(err);\n };\n};\n\n/**\n * @param {!$jscomp.AsyncGeneratorWrapper$GeneratorMethod} method\n * @param {?} param\n * @return {!Promise>}\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.enqueueMethod_ = function(\n method, param) {\n var self = this;\n return new Promise(function(resolve, reject) {\n var wasEmpty = self.executionQueue_.isEmpty();\n self.executionQueue_.enqueue(\n new $jscomp.AsyncGeneratorWrapper$ExecutionFrame_(\n method, param, resolve, reject));\n if (wasEmpty) {\n self.runFrame_();\n }\n });\n};\n\n/**\n * @override\n * @param {?=} opt_value\n * @return {!Promise>}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.next = function(opt_value) {\n return this.enqueueMethod_(\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.NEXT, opt_value);\n};\n\n/**\n * @override\n * @param {VALUE} value\n * @return {!Promise>}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.return = function(value) {\n return this.enqueueMethod_(\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.RETURN,\n new $jscomp.AsyncGeneratorWrapper$ActionRecord(\n $jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE, value));\n};\n\n/**\n * @override\n * @param {*=} exception\n * @return {!Promise>}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.throw = function(exception) {\n return this.enqueueMethod_(\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.THROW, exception);\n};\n\n/**\n * Recursively executes all frames in the executionQueue until it is empty.\n * Frames that are added to the queue while execution is being performed will\n * be executed when they are reached.\n *\n * In order to guarantee each frame in the entire queue will be processed\n * exactly once, each branch in runDelegateFrame and runGeneratorFrame should\n * conclude with the following specification:\n *\n * If the frame is ready to be resolved/rejected:\n *\n * 1. Resolve or reject the frame.\n * 2. Drop the frame from the head of the queue.\n * 3. End with a call to runFrame.\n *\n * Otherwise, if another action must be performed:\n *\n * 1. Mutate the frame's method and param to reflect the next action.\n * 2. End with a call to runFrame.\n *\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.runFrame_ = function() {\n if (!this.executionQueue_.isEmpty()) {\n try {\n if (this.delegate_) {\n this.runDelegateFrame_();\n } else {\n this.runGeneratorFrame_();\n }\n } catch (err) {\n this.rejectAndClose_(err);\n }\n }\n};\n\n/**\n * For safety, all branches should meet invariants listed in runFrame.\n *\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.runGeneratorFrame_ = function() {\n var self = this;\n var frame = this.executionQueue_.first();\n try {\n var genRec = this.generator_[frame.method](frame.param);\n if (genRec.value instanceof $jscomp.AsyncGeneratorWrapper$ActionRecord) {\n switch (genRec.value.action) {\n case $jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE:\n Promise.resolve(genRec.value.value)\n .then(\n function(resolvedValue) {\n frame.resolve({value: resolvedValue, done: genRec.done});\n self.executionQueue_.drop();\n self.runFrame_();\n },\n function(e) {\n frame.reject(e);\n self.executionQueue_.drop();\n self.runFrame_();\n })\n .catch(this.boundRejectAndClose_);\n return;\n\n case $jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_STAR:\n self.delegate_ = $jscomp.makeAsyncIterator(genRec.value.value);\n frame.method = $jscomp.AsyncGeneratorWrapper$GeneratorMethod.NEXT;\n frame.param = undefined;\n self.runFrame_();\n return;\n\n case $jscomp.AsyncGeneratorWrapper$ActionEnum.AWAIT_VALUE:\n Promise.resolve(genRec.value.value)\n .then(\n function(resolvedValue) {\n frame.method =\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.NEXT;\n frame.param = resolvedValue;\n self.runFrame_();\n },\n function(thrownErr) {\n frame.method =\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.THROW;\n frame.param = thrownErr;\n self.runFrame_();\n })\n .catch(this.boundRejectAndClose_);\n return;\n\n default:\n throw new Error('Unrecognized AsyncGeneratorWrapper$ActionEnum');\n }\n }\n else {\n frame.resolve(genRec);\n self.executionQueue_.drop();\n self.runFrame_();\n }\n } catch (e) {\n frame.reject(e);\n self.executionQueue_.drop();\n self.runFrame_();\n }\n};\n\n\n/**\n * For safety, all branches should meet invariants listed in runFrame.\n *\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.runDelegateFrame_ = function() {\n if (!this.delegate_) {\n throw new Error(\"no delegate to perform execution\");\n }\n var frame = this.executionQueue_.first();\n if (frame.method in this.delegate_) {\n try {\n this.delegate_[frame.method](frame.param)\n .then(this.boundHandleDelegateResult_, this.boundHandleDelegateError_)\n .catch(this.boundRejectAndClose_);\n } catch (err) {\n this.handleDelegateError_(err);\n }\n } else {\n this.delegate_ = null;\n this.runFrame_();\n }\n};\n\n/**\n * @param {!IIterableResult} record\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.handleDelegateResult_ = function(\n record) {\n var frame = this.executionQueue_.first();\n if (record.done === true) {\n // Delegate is done. Its return value becomes the value of the `yield*`\n // expression. We must continue the async generator as if next() were called\n // with that value here.\n this.delegate_ = null;\n frame.method = $jscomp.AsyncGeneratorWrapper$GeneratorMethod.NEXT;\n frame.param = record.value;\n this.runFrame_();\n } else {\n frame.resolve({value: record.value, done: false});\n this.executionQueue_.drop();\n this.runFrame_();\n }\n};\n\n/**\n * @param {*} thrownError\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.handleDelegateError_ = function(\n thrownError) {\n var frame = this.executionQueue_.first();\n // The delegate threw an exception or rejected a promise, so we must continue\n // our generator as if the `yield *` threw the exception.\n this.delegate_ = null;\n frame.method = $jscomp.AsyncGeneratorWrapper$GeneratorMethod.THROW;\n frame.param = thrownError;\n this.runFrame_();\n};\n\n/**\n * Rejects the current frame and closes the generator.\n *\n * @param {*} err Error causing the rejection\n * @private\n */\n$jscomp.AsyncGeneratorWrapper.prototype.rejectAndClose_ = function(err) {\n if (!this.executionQueue_.isEmpty()) {\n this.executionQueue_.first().reject(err);\n this.executionQueue_.drop();\n }\n\n if (this.delegate_ && 'return' in this.delegate_) {\n this.delegate_['return'](undefined);\n this.delegate_ = null;\n }\n this.generator_['return'](undefined);\n\n // Keep processing all frames remaining in the queue.\n // Note: Some of these frames might be throw requests, but our backing\n // generator will handle these appropriately.\n this.runFrame_();\n};\n", + "js/es6/async_generator_wrapper.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Runtime logic for transpiled Async Generators.\n * @suppress {uselessCode}\n */\n'require base';\n'require es6/util/makeasynciterator';\n\n\n/** @enum {number} */\n$jscomp.AsyncGeneratorWrapper$ActionEnum = {\n /** Yield the value from the wrapper generator */\n YIELD_VALUE: 0,\n /** Yield each value from a delegate generator */\n YIELD_STAR: 1,\n /** Resolve the value as a Promise and continue execution */\n AWAIT_VALUE: 2,\n};\n\n/**\n * @param {!$jscomp.AsyncGeneratorWrapper$ActionEnum} action\n * @param {VALUE} value\n * @constructor\n * @template VALUE\n * @struct\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper$ActionRecord = function(action, value) {\n /**\n * @public\n * @const\n * @type {!$jscomp.AsyncGeneratorWrapper$ActionEnum}\n */\n this.action = action;\n\n /**\n * @public\n * @const\n * @type {VALUE}\n */\n this.value = /** @type {VALUE} */ (value);\n};\n\n/** @enum {string} */\n$jscomp.AsyncGeneratorWrapper$GeneratorMethod = {\n NEXT: 'next', THROW: 'throw', RETURN: 'return',\n};\n\n/**\n * Records the details of a call to `next()`, `throw()`, or `return()`.\n *\n * One of these objects will be created for each call.\n *\n * @param {$jscomp.AsyncGeneratorWrapper$GeneratorMethod} method\n * Method to call on generator\n * @param {?} param\n * Parameter for method called on generator\n *\n * @param {function(!IIterableResult)} resolve\n * Function to resolve the Promise associated with this frame.\n * @param {function(?)} reject\n * Function to reject the Promise associated with this frame.\n *\n * @constructor\n * @private\n * @template VALUE\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionFrame_ = function(\n method, param, resolve, reject) {\n /** @type {$jscomp.AsyncGeneratorWrapper$GeneratorMethod} */\n this.method = method;\n /** @type {?} */\n this.param = param;\n /** @type {function(!IIterableResult)} */\n this.resolve = resolve;\n /** @type {function(?)} */\n this.reject = reject;\n};\n\n/**\n * @param {!$jscomp.AsyncGeneratorWrapper$ExecutionFrame_} frame\n * The frame at this position in the queue\n * @param {$jscomp.AsyncGeneratorWrapper$ExecutionNode_} next\n * The node containing the frame to be executed after this one completes\n *\n * @constructor\n * @private\n * @template VALUE\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionNode_ = function(frame, next) {\n /** @type {!$jscomp.AsyncGeneratorWrapper$ExecutionFrame_} */\n this.frame = frame;\n /** @type {$jscomp.AsyncGeneratorWrapper$ExecutionNode_} */\n this.next = next;\n};\n\n/**\n * A minimalistic queue backed by a linked-list.\n *\n * @constructor\n * @private\n * @template VALUE\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_ = function() {\n /**\n * @type {$jscomp.AsyncGeneratorWrapper$ExecutionNode_}\n * @private\n */\n this.head_ = null;\n\n /**\n *\n * @type {$jscomp.AsyncGeneratorWrapper$ExecutionNode_}\n * @private\n */\n this.tail_ = null;\n};\n\n/**\n * @return {boolean}\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_.prototype.isEmpty = function() {\n return this.head_ === null;\n};\n\n/**\n * Returns the current head frame if it exists, otherwise throws Error.\n *\n * @return {!$jscomp.AsyncGeneratorWrapper$ExecutionFrame_}\n * @throws {Error} if the queue is empty\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_.prototype.first = function() {\n if (this.head_) {\n return this.head_.frame;\n } else {\n throw new Error('no frames in executionQueue');\n }\n};\n\n/**\n * Drops the current head frame off the head of the queue. Performs same\n * operations as a theoretical \"pop\", but saves time by not storing or returning\n * the popped frame.\n *\n * If the queue is empty, no operation is performed.\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_.prototype.drop = function() {\n if (this.head_) {\n this.head_ = this.head_.next;\n if (!this.head_) {\n this.tail_ = null;\n }\n }\n};\n\n/**\n * @param {!$jscomp.AsyncGeneratorWrapper$ExecutionFrame_} newFrame\n * the new frame to be executed after all frames currently in the queue\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_.prototype.enqueue = function(\n newFrame) {\n var node = new $jscomp.AsyncGeneratorWrapper$ExecutionNode_(newFrame, null);\n if (this.tail_) {\n this.tail_.next = node;\n this.tail_ = node;\n } else {\n this.head_ = node;\n this.tail_ = node;\n }\n};\n\n/**\n * @constructor\n * @implements {AsyncGenerator}\n * @implements {AsyncIterable}\n * @template VALUE\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper = function(\n /** @type {!Generator<$jscomp.AsyncGeneratorWrapper$ActionRecord>} */\n generator) {\n /** @private */\n this.generator_ = generator;\n\n /**\n * @private\n * @type {AsyncIterator}\n */\n this.delegate_ = null;\n\n /**\n * @type {!$jscomp.AsyncGeneratorWrapper$ExecutionQueue_}\n * @private\n */\n this.executionQueue_ = new $jscomp.AsyncGeneratorWrapper$ExecutionQueue_();\n\n /** @type {$jscomp.AsyncGeneratorWrapper} */\n this[Symbol.asyncIterator] =\n /** @return {$jscomp.AsyncGeneratorWrapper} */ function() {\n return this;\n };\n\n var self = this;\n\n /**\n * @this {undefined}\n * @param {!IIterableResult} record\n * @private\n */\n this.boundHandleDelegateResult_ = function(record) {\n self.handleDelegateResult_(record);\n };\n\n /**\n * @this {undefined}\n * @param {*} thrownError\n * @private\n */\n this.boundHandleDelegateError_ = function(thrownError) {\n self.handleDelegateError_(thrownError);\n };\n\n /**\n * @this {undefined}\n * @param {*} err\n * @private\n */\n this.boundRejectAndClose_ = function(err) {\n self.rejectAndClose_(err);\n };\n};\n\n/**\n * @param {!$jscomp.AsyncGeneratorWrapper$GeneratorMethod} method\n * @param {?} param\n * @return {!Promise>}\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.enqueueMethod_ = function(\n method, param) {\n var self = this;\n return new Promise(function(resolve, reject) {\n var wasEmpty = self.executionQueue_.isEmpty();\n self.executionQueue_.enqueue(\n new $jscomp.AsyncGeneratorWrapper$ExecutionFrame_(\n method, param, resolve, reject));\n if (wasEmpty) {\n self.runFrame_();\n }\n });\n};\n\n/**\n * @override\n * @param {?=} opt_value\n * @return {!Promise>}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.next = function(opt_value) {\n return this.enqueueMethod_(\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.NEXT, opt_value);\n};\n\n/**\n * @override\n * @param {VALUE} value\n * @return {!Promise>}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.return = function(value) {\n return this.enqueueMethod_(\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.RETURN,\n new $jscomp.AsyncGeneratorWrapper$ActionRecord(\n $jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE, value));\n};\n\n/**\n * @override\n * @param {*=} exception\n * @return {!Promise>}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.throw = function(exception) {\n return this.enqueueMethod_(\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.THROW, exception);\n};\n\n/**\n * Recursively executes all frames in the executionQueue until it is empty.\n * Frames that are added to the queue while execution is being performed will\n * be executed when they are reached.\n *\n * In order to guarantee each frame in the entire queue will be processed\n * exactly once, each branch in runDelegateFrame and runGeneratorFrame should\n * conclude with the following specification:\n *\n * If the frame is ready to be resolved/rejected:\n *\n * 1. Resolve or reject the frame.\n * 2. Drop the frame from the head of the queue.\n * 3. End with a call to runFrame.\n *\n * Otherwise, if another action must be performed:\n *\n * 1. Mutate the frame's method and param to reflect the next action.\n * 2. End with a call to runFrame.\n *\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.runFrame_ = function() {\n if (!this.executionQueue_.isEmpty()) {\n try {\n if (this.delegate_) {\n this.runDelegateFrame_();\n } else {\n this.runGeneratorFrame_();\n }\n } catch (err) {\n this.rejectAndClose_(err);\n }\n }\n};\n\n/**\n * For safety, all branches should meet invariants listed in runFrame.\n *\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.runGeneratorFrame_ = function() {\n var self = this;\n var frame = this.executionQueue_.first();\n try {\n var genRec = this.generator_[frame.method](frame.param);\n if (genRec.value instanceof $jscomp.AsyncGeneratorWrapper$ActionRecord) {\n switch (genRec.value.action) {\n case $jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE:\n Promise.resolve(genRec.value.value)\n .then(\n function(resolvedValue) {\n frame.resolve({value: resolvedValue, done: genRec.done});\n self.executionQueue_.drop();\n self.runFrame_();\n },\n function(e) {\n frame.reject(e);\n self.executionQueue_.drop();\n self.runFrame_();\n })\n .catch(this.boundRejectAndClose_);\n return;\n\n case $jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_STAR:\n self.delegate_ = $jscomp.makeAsyncIterator(genRec.value.value);\n frame.method = $jscomp.AsyncGeneratorWrapper$GeneratorMethod.NEXT;\n frame.param = undefined;\n self.runFrame_();\n return;\n\n case $jscomp.AsyncGeneratorWrapper$ActionEnum.AWAIT_VALUE:\n Promise.resolve(genRec.value.value)\n .then(\n function(resolvedValue) {\n frame.method =\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.NEXT;\n frame.param = resolvedValue;\n self.runFrame_();\n },\n function(thrownErr) {\n frame.method =\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.THROW;\n frame.param = thrownErr;\n self.runFrame_();\n })\n .catch(this.boundRejectAndClose_);\n return;\n\n default:\n throw new Error('Unrecognized AsyncGeneratorWrapper$ActionEnum');\n }\n }\n else {\n frame.resolve(genRec);\n self.executionQueue_.drop();\n self.runFrame_();\n }\n } catch (e) {\n frame.reject(e);\n self.executionQueue_.drop();\n self.runFrame_();\n }\n};\n\n\n/**\n * For safety, all branches should meet invariants listed in runFrame.\n *\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.runDelegateFrame_ = function() {\n if (!this.delegate_) {\n throw new Error(\"no delegate to perform execution\");\n }\n var frame = this.executionQueue_.first();\n if (frame.method in this.delegate_) {\n try {\n this.delegate_[frame.method](frame.param)\n .then(this.boundHandleDelegateResult_, this.boundHandleDelegateError_)\n .catch(this.boundRejectAndClose_);\n } catch (err) {\n this.handleDelegateError_(err);\n }\n } else {\n this.delegate_ = null;\n this.runFrame_();\n }\n};\n\n/**\n * @param {!IIterableResult} record\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.handleDelegateResult_ = function(\n record) {\n var frame = this.executionQueue_.first();\n if (record.done === true) {\n // Delegate is done. Its return value becomes the value of the `yield*`\n // expression. We must continue the async generator as if next() were called\n // with that value here.\n this.delegate_ = null;\n frame.method = $jscomp.AsyncGeneratorWrapper$GeneratorMethod.NEXT;\n frame.param = record.value;\n this.runFrame_();\n } else {\n frame.resolve({value: record.value, done: false});\n this.executionQueue_.drop();\n this.runFrame_();\n }\n};\n\n/**\n * @param {*} thrownError\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.handleDelegateError_ = function(\n thrownError) {\n var frame = this.executionQueue_.first();\n // The delegate threw an exception or rejected a promise, so we must continue\n // our generator as if the `yield *` threw the exception.\n this.delegate_ = null;\n frame.method = $jscomp.AsyncGeneratorWrapper$GeneratorMethod.THROW;\n frame.param = thrownError;\n this.runFrame_();\n};\n\n/**\n * Rejects the current frame and closes the generator.\n *\n * @param {*} err Error causing the rejection\n * @private\n */\n$jscomp.AsyncGeneratorWrapper.prototype.rejectAndClose_ = function(err) {\n if (!this.executionQueue_.isEmpty()) {\n this.executionQueue_.first().reject(err);\n this.executionQueue_.drop();\n }\n\n if (this.delegate_ && 'return' in this.delegate_) {\n this.delegate_['return'](undefined);\n this.delegate_ = null;\n }\n this.generator_['return'](undefined);\n\n // Keep processing all frames remaining in the queue.\n // Note: Some of these frames might be throw requests, but our backing\n // generator will handle these appropriately.\n this.runFrame_();\n};\n", "js/es6/conformance.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/global';\n\n\n/**\n * @fileoverview Check one of the most obscure features of ES6 as a proxy\n * for full conformance. If this is enabled, this test is used instead of\n * larger, more specific conformance tests.\n */\n\n/**\n * Check ES6 conformance by checking an obscure detail of Proxy that\n * wasn't implemented correctly until after all other ES6 features in\n * most browsers.\n * @return {boolean} Whether Proxy works correctly.\n * @suppress {reportUnknownTypes}\n */\n$jscomp.checkEs6ConformanceViaProxy = function() {\n try {\n var proxied = {};\n var proxy = Object.create(new $jscomp.global['Proxy'](proxied, {\n 'get': function (target, key, receiver) {\n return target == proxied && key == 'q' && receiver == proxy;\n }\n }));\n return proxy['q'] === true;\n } catch (err) {\n return false;\n }\n};\n\n/**\n * If this is true, assume that a runtime which implements Proxy also\n * implements the rest of the ECMAScript 2015 spec.\n * @define {boolean}\n */\n$jscomp.USE_PROXY_FOR_ES6_CONFORMANCE_CHECKS = false;\n\n/**\n * Whether the runtime implements the entire ECMAScript 2015 spec.\n * @const {boolean}\n */\n$jscomp.ES6_CONFORMANCE =\n $jscomp.USE_PROXY_FOR_ES6_CONFORMANCE_CHECKS &&\n $jscomp.checkEs6ConformanceViaProxy();\n", - "js/es6/execute_async_generator.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Runtime logic for transpiled async functions.\n * @suppress {uselessCode}\n */\n'require base';\n'require es6/promise/promise';\n'require es6/generator_engine';\n\n/**\n * Handles the execution of an async function.\n *\n * An async function, foo(a, b), will be rewritten as:\n *\n * ```\n * function foo(a, b) {\n * let $jscomp$async$this = this;\n * let $jscomp$async$arguments = arguments;\n * let $jscomp$async$super$get$x = () => super.x;\n * function* $jscomp$async$generator() {\n * // original body of foo() with:\n * // - await (x) replaced with yield (x)\n * // - arguments replaced with $jscomp$async$arguments\n * // - this replaced with $jscomp$async$this\n * // - super.x replaced with $jscomp$async$super$get$x()\n * // - super.x(5) replaced with $jscomp$async$super$get$x()\n * // .call($jscomp$async$this, 5)\n * }\n * return $jscomp.executeAsyncGenerator($jscomp$async$generator());\n * }\n * ```\n * @param {!Generator} generator\n * @return {!Promise}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.asyncExecutePromiseGenerator = function(generator) {\n function passValueToGenerator(value) {\n return generator.next(value);\n }\n\n function passErrorToGenerator(error) {\n return generator.throw(error);\n }\n\n return new Promise(function(resolve, reject) {\n function handleGeneratorRecord(/** !IIterableResult<*> */ genRec) {\n if (genRec.done) {\n resolve(genRec.value);\n } else {\n // One can await a non-promise, so genRec.value\n // might not already be a promise.\n Promise.resolve(genRec.value)\n .then(passValueToGenerator, passErrorToGenerator)\n .then(handleGeneratorRecord, reject);\n }\n }\n\n handleGeneratorRecord(generator.next());\n });\n};\n\n/**\n * Handles the execution of a generator function returning promises.\n *\n * An async function, foo(a, b), will be rewritten as:\n *\n * ```\n * function foo(a, b) {\n * let $jscomp$async$this = this;\n * let $jscomp$async$arguments = arguments;\n * let $jscomp$async$super$get$x = () => super.x;\n * return $jscomp.asyncExecutePromiseGeneratorFunction(\n * function* () {\n * // original body of foo() with:\n * // - await (x) replaced with yield (x)\n * // - arguments replaced with $jscomp$async$arguments\n * // - this replaced with $jscomp$async$this\n * // - super.x replaced with $jscomp$async$super$get$x()\n * // - super.x(5) replaced with $jscomp$async$super$get$x()\n * // .call($jscomp$async$this, 5)\n * });\n * }\n * ```\n * @param {function(): !Generator} generatorFunction\n * @return {!Promise}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.asyncExecutePromiseGeneratorFunction = function(generatorFunction) {\n return $jscomp.asyncExecutePromiseGenerator(generatorFunction());\n};\n\n/**\n * Handles the execution of a state machine program that represents transpiled\n * async function.\n *\n * @final\n * @param {function(!$jscomp.generator.Context): (void|{value: ?})} program\n * @return {!Promise}\n * @suppress {reportUnknownTypes, visibility}\n */\n$jscomp.asyncExecutePromiseGeneratorProgram = function(program) {\n return $jscomp.asyncExecutePromiseGenerator(\n new $jscomp.generator.Generator_(\n new $jscomp.generator.Engine_(\n program)));\n};\n", -@@ -912,30 +912,30 @@ var pra={"externs/es3.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n + "js/es6/execute_async_generator.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Runtime logic for transpiled async functions.\n * @suppress {uselessCode}\n */\n'require base';\n'require es6/generator_engine';\n\n/**\n * Handles the execution of an async function.\n *\n * An async function, foo(a, b), will be rewritten as:\n *\n * ```\n * function foo(a, b) {\n * let $jscomp$async$this = this;\n * let $jscomp$async$arguments = arguments;\n * let $jscomp$async$super$get$x = () => super.x;\n * function* $jscomp$async$generator() {\n * // original body of foo() with:\n * // - await (x) replaced with yield (x)\n * // - arguments replaced with $jscomp$async$arguments\n * // - this replaced with $jscomp$async$this\n * // - super.x replaced with $jscomp$async$super$get$x()\n * // - super.x(5) replaced with $jscomp$async$super$get$x()\n * // .call($jscomp$async$this, 5)\n * }\n * return $jscomp.executeAsyncGenerator($jscomp$async$generator());\n * }\n * ```\n * @param {!Generator} generator\n * @return {!Promise}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.asyncExecutePromiseGenerator = function(generator) {\n function passValueToGenerator(value) {\n return generator.next(value);\n }\n\n function passErrorToGenerator(error) {\n return generator.throw(error);\n }\n\n return new Promise(function(resolve, reject) {\n function handleGeneratorRecord(/** !IIterableResult<*> */ genRec) {\n if (genRec.done) {\n resolve(genRec.value);\n } else {\n // One can await a non-promise, so genRec.value\n // might not already be a promise.\n Promise.resolve(genRec.value)\n .then(passValueToGenerator, passErrorToGenerator)\n .then(handleGeneratorRecord, reject);\n }\n }\n\n handleGeneratorRecord(generator.next());\n });\n};\n\n/**\n * Handles the execution of a generator function returning promises.\n *\n * An async function, foo(a, b), will be rewritten as:\n *\n * ```\n * function foo(a, b) {\n * let $jscomp$async$this = this;\n * let $jscomp$async$arguments = arguments;\n * let $jscomp$async$super$get$x = () => super.x;\n * return $jscomp.asyncExecutePromiseGeneratorFunction(\n * function* () {\n * // original body of foo() with:\n * // - await (x) replaced with yield (x)\n * // - arguments replaced with $jscomp$async$arguments\n * // - this replaced with $jscomp$async$this\n * // - super.x replaced with $jscomp$async$super$get$x()\n * // - super.x(5) replaced with $jscomp$async$super$get$x()\n * // .call($jscomp$async$this, 5)\n * });\n * }\n * ```\n * @param {function(): !Generator} generatorFunction\n * @return {!Promise}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.asyncExecutePromiseGeneratorFunction = function(generatorFunction) {\n return $jscomp.asyncExecutePromiseGenerator(generatorFunction());\n};\n\n/**\n * Handles the execution of a state machine program that represents transpiled\n * async function.\n *\n * @final\n * @param {function(!$jscomp.generator.Context): (void|{value: ?})} program\n * @return {!Promise}\n * @suppress {reportUnknownTypes, visibility}\n */\n$jscomp.asyncExecutePromiseGeneratorProgram = function(program) {\n return $jscomp.asyncExecutePromiseGenerator(\n new $jscomp.generator.Generator_(\n new $jscomp.generator.Engine_(\n program)));\n};\n", +@@ -1461,13 +1461,13 @@ var mXa={"js/base.js":'/*\n * Copyright 2012 The Closure Compiler Authors.\n *\n "js/es6/number/parseint.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Number.parseInt', function(orig) {\n return orig || parseInt;\n}, 'es6', 'es3');\n", "js/es6/object.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Brings in all ES6 Object polyfills.\n * @suppress {uselessCode}\n */\n'require es6/object/assign';\n'require es6/object/entries';\n'require es6/object/fromentries';\n'require es6/object/getownpropertydescriptors';\n'require es6/object/getownpropertysymbols';\n'require es6/object/is';\n'require es6/object/setprototypeof';\n'require es6/object/values';\n", "js/es6/object/assign.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require es6/util/assign';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.assign', function(orig) {\n return orig || $jscomp.assign;\n}, 'es6', 'es3');\n", -"js/es6/object/entries.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.entries', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an array of [key, value] arrays, one for each entry\n * in the given object.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n *\n * @param {!Object} obj\n * @return {!Array>}\n * @template KEY, VALUE\n */\n var entries = function(obj) {\n var result = [];\n for (var key in obj) {\n if ($jscomp.owns(obj, key)) {\n result.push([key, obj[key]]);\n }\n }\n return result;\n };\n\n return entries;\n}, 'es8', 'es3');\n", +"js/es6/object/entries.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.entries', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an array of [key, value] arrays, one for each entry\n * in the given object.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n *\n * @param {!Object} obj\n * @return {!Array>}\n * @template KEY, VALUE\n */\n var entries = function(obj) {\n var result = [];\n for (var key in obj) {\n if ($jscomp.owns(obj, key)) {\n result.push([key, obj[key]]);\n }\n }\n return result;\n };\n\n return entries;\n}, 'es8', 'es3');\n", - "js/es6/object/fromentries.js":"/*\n * Copyright 2019 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require es6/symbol';\n'require util/defineproperty';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.fromEntries', function(orig) {\n if (orig) {\n return orig;\n }\n\n /**\n * @param {!Iterable<*>} iter\n * @return {!Object}\n * @see https://github.com/tc39/proposal-object-from-entries/blob/master/polyfill.js\n */\n function fromEntries(iter) {\n var obj = {};\n\n $jscomp.initSymbolIterator();\n\n if (!(Symbol.iterator in iter)) {\n throw new TypeError('' + iter + ' is not iterable');\n }\n\n var iteratorFn = (/** @type {function(): !Iterator>} */ (\n iter[Symbol.iterator]));\n var iterator = iteratorFn.call(iter);\n\n for (var result = iterator.next(); !result.done; result = iterator.next()) {\n var pair = result.value;\n\n if (Object(pair) !== pair) {\n throw new TypeError('iterable for fromEntries should yield objects');\n }\n\n var key = pair[0];\n var val = pair[1];\n obj[key] = val;\n }\n\n return obj;\n }\n\n return fromEntries;\n}, 'es_2019', 'es3');\n", + "js/es6/object/fromentries.js":"/*\n * Copyright 2019 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require es6/symbol';\n'require util/defineproperty';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.fromEntries', function(orig) {\n if (orig) {\n return orig;\n }\n\n /**\n * @param {!Iterable<*>} iter\n * @return {!Object}\n * @see https://github.com/tc39/proposal-object-from-entries/blob/master/polyfill.js\n */\n function fromEntries(iter) {\n var obj = {};\n\n if (!(Symbol.iterator in iter)) {\n throw new TypeError('' + iter + ' is not iterable');\n }\n\n var iteratorFn = (/** @type {function(): !Iterator>} */ (\n iter[Symbol.iterator]));\n var iterator = iteratorFn.call(iter);\n\n for (var result = iterator.next(); !result.done; result = iterator.next()) {\n var pair = result.value;\n\n if (Object(pair) !== pair) {\n throw new TypeError('iterable for fromEntries should yield objects');\n }\n\n var key = pair[0];\n var val = pair[1];\n obj[key] = val;\n }\n\n return obj;\n }\n\n return fromEntries;\n}, 'es_2019', 'es3');\n", -"js/es6/object/getownpropertydescriptors.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/ownkeys';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.getOwnPropertyDescriptors', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Object.getOwnPropertyDescriptors.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n *\n * @param {!Object} obj\n * @return {!Object}\n */\n var getOwnPropertyDescriptors = function(obj) {\n var result = {};\n var keys = Reflect.ownKeys(obj);\n for (var i = 0; i < keys.length; i++) {\n result[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return result;\n };\n\n return getOwnPropertyDescriptors;\n}, 'es8', 'es5');\n", +"js/es6/object/getownpropertydescriptors.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/ownkeys';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.getOwnPropertyDescriptors', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Object.getOwnPropertyDescriptors.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n *\n * @param {!Object} obj\n * @return {!Object}\n */\n var getOwnPropertyDescriptors = function(obj) {\n var result = {};\n var keys = Reflect.ownKeys(obj);\n for (var i = 0; i < keys.length; i++) {\n result[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return result;\n };\n\n return getOwnPropertyDescriptors;\n}, 'es8', 'es5');\n", "js/es6/object/getownpropertysymbols.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Object.getOwnPropertySymbols', function(orig) {\n if (orig) return orig;\n\n // NOTE: The symbol polyfill is a string, so symbols show up in\n // Object.getOwnProperytyNames instead. It's been decided that\n // the trade-off of \"fixing\" this behavior is not worth the costs\n // in (a) code size, (b) brittleness, and (c) complexity.\n return function() { return []; };\n}, 'es6', 'es5'); // Same as Object.getOwnPropertyNames\n", @@ -34307,84 +34432,88 @@ diff --git a/third_party/google-closure-library/closure/goog/transpile.js b/thir "js/es6/object/setprototypeof.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/polyfill';\n'require es6/util/setprototypeof';\n\n\n$jscomp.polyfill('Object.setPrototypeOf', function(orig) {\n // Note that $jscomp.setPrototypeOf will be `null` if it isn't possible to\n // implement this method.\n return orig || $jscomp.setPrototypeOf;\n}, 'es6', 'es5');\n", -"js/es6/object/values.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.values', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an array of values from the given object.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values\n *\n * @param {!Object} obj\n * @return {!Array}\n * @template KEY, VALUE\n */\n var values = function(obj) {\n var result = [];\n for (var key in obj) {\n if ($jscomp.owns(obj, key)) {\n result.push(obj[key]);\n }\n }\n return result;\n };\n\n return values;\n}, 'es8', 'es3');\n", +"js/es6/object/values.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.values', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an array of values from the given object.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values\n *\n * @param {!Object} obj\n * @return {!Array}\n * @template KEY, VALUE\n */\n var values = function(obj) {\n var result = [];\n for (var key in obj) {\n if ($jscomp.owns(obj, key)) {\n result.push(obj[key]);\n }\n }\n return result;\n };\n\n return values;\n}, 'es8', 'es3');\n", - "js/es6/promise.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Brings in all Promise polyfills.\n * @suppress {uselessCode}\n */\n'require es6/promise/promise';\n'require es6/promise/allSettled';\n'require es6/promise/finally';\n", - "js/es6/promise/allSettled.js":"/*\n * Copyright 2019 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/polyfill';\n'require es6/promise/promise';\n'require es6/array/from';\n\n$jscomp.polyfill('Promise.allSettled', function(orig) {\n if (orig) return orig;\n\n /**\n * @param {*} value\n * @return {{status: string, value: *}}\n */\n function fulfilledResult(value) {\n return {status: 'fulfilled', value: value};\n }\n\n /**\n * @param {*} reason\n * @return {{status: string, reason: *}}\n */\n function rejectedResult(reason) {\n return {status: 'rejected', reason: reason};\n }\n\n /**\n * These types are weaker than they could be, but they're strong enough for\n * this context.\n * @this {typeof Promise}\n * @param {!Iterable<*>} thenablesOrValues\n * @return {!Promise>}\n */\n var polyfill = function(thenablesOrValues) {\n // The spec requires allSettled to be called directly on the Promise\n // constructor, which is consistent with its requirement for Promise.all().\n /** @type {typeof Promise} */\n var PromiseConstructor = this;\n\n /**\n * @param {*} maybeThenable\n * @return {!Promise<*>}\n */\n function convertToAllSettledResult(maybeThenable) {\n return PromiseConstructor.resolve(maybeThenable)\n .then(fulfilledResult, rejectedResult);\n }\n\n // Create an array of promises that resolve to the appropriate result\n // objects and never reject.\n var wrappedResults =\n Array.from(thenablesOrValues, convertToAllSettledResult);\n return PromiseConstructor.all(wrappedResults);\n };\n return polyfill;\n}, 'es_next', 'es3');\n", + "js/es6/promise.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Brings in all Promise polyfills.\n * @suppress {uselessCode}\n */\n'require es6/promise/promise';\n'require es6/promise/allSettled';\n'require es6/promise/finally';\n'require es6/promise/any';\n'require es6/promise/aggregateerror';\n", + "js/es6/promise/aggregateerror.js":"/*\n * Copyright 2021 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/polyfill';\n'require es6/promise/promise';\n'require es6/util/inherits';\n\n$jscomp.polyfill('AggregateError', function(orig) {\n if (orig) return orig;\n\n /**\n * @constructor\n * @extends {Error}\n * @param {!Iterable<*>} errors\n * @param {string} message\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(errors, message) {\n // Create a new error object just so we can copy its stack trace into ours,\n // if appropriate. Include the message, because v8 & possibly other engines\n // include the message in the stack trace they create.\n var $jscomp$tmp$error = Error(message);\n if ('stack' in $jscomp$tmp$error) {\n // Old versions of IE Don't set stack until the object is thrown, and\n // won't set it then if it already exists on the object. Hence,\n // conditionally setting it here.\n this.stack = $jscomp$tmp$error.stack;\n }\n this.errors = errors;\n this.message = $jscomp$tmp$error.message;\n };\n $jscomp.inherits(polyfill, Error);\n // Error name, defaults to AggregateError.\n polyfill.prototype.name = 'AggregateError';\n return polyfill;\n}, 'es_2021', 'es3');\n", + "js/es6/promise/allSettled.js":"/*\n * Copyright 2019 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/polyfill';\n'require es6/promise/promise';\n'require es6/array/from';\n\n$jscomp.polyfill('Promise.allSettled', function(orig) {\n if (orig) return orig;\n\n /**\n * @param {*} value\n * @return {{status: string, value: *}}\n */\n function fulfilledResult(value) {\n return {status: 'fulfilled', value: value};\n }\n\n /**\n * @param {*} reason\n * @return {{status: string, reason: *}}\n */\n function rejectedResult(reason) {\n return {status: 'rejected', reason: reason};\n }\n\n /**\n * These types are weaker than they could be, but they're strong enough for\n * this context.\n * @this {typeof Promise}\n * @param {!Iterable<*>} thenablesOrValues\n * @return {!Promise>}\n */\n var polyfill = function(thenablesOrValues) {\n // The spec requires allSettled to be called directly on the Promise\n // constructor, which is consistent with its requirement for Promise.all().\n /** @type {typeof Promise} */\n var PromiseConstructor = this;\n\n /**\n * @param {*} maybeThenable\n * @return {!Promise<*>}\n */\n function convertToAllSettledResult(maybeThenable) {\n return PromiseConstructor.resolve(maybeThenable)\n .then(fulfilledResult, rejectedResult);\n }\n\n // Create an array of promises that resolve to the appropriate result\n // objects and never reject.\n var wrappedResults =\n Array.from(thenablesOrValues, convertToAllSettledResult);\n return PromiseConstructor.all(wrappedResults);\n };\n return polyfill;\n}, 'es_2020', 'es3');\n", +@@ -1475,19 +1475,19 @@ var mXa={"js/base.js":'/*\n * Copyright 2012 The Closure Compiler Authors.\n *\n "js/es6/promise/finally.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/promise/promise';\n\n$jscomp.polyfill('Promise.prototype.finally', function(orig) {\n if (orig) return orig;\n\n /**\n * @this {!Promise}\n * @param {function():?} onFinally\n * @return {!Promise}\n * @template VALUE\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(onFinally) {\n return this.then(\n function(value) {\n var promise = Promise.resolve(onFinally());\n return promise.then(function () { return value; });\n },\n function(reason) {\n var promise = Promise.resolve(onFinally());\n return promise.then(function () { throw reason; });\n });\n };\n\n return polyfill;\n}, 'es9', 'es3');\n", - "js/es6/promise/promise.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require base';\n'require es6/util/makeiterator';\n'require util/global';\n'require util/polyfill';\n\n/**\n * Should we unconditionally override a native Promise implementation with our\n * own?\n * @define {boolean}\n */\n$jscomp.FORCE_POLYFILL_PROMISE = false;\n\n\n$jscomp.polyfill('Promise',\n /**\n * @param {*} NativePromise\n * @return {*}\n * @suppress {reportUnknownTypes}\n */\n function(NativePromise) {\n // TODO(bradfordcsmith): Do we need to add checks for standards conformance?\n // e.g. The version of FireFox we currently use for testing has a Promise\n // that fails to reject attempts to fulfill it with itself, but that\n // isn't reasonably testable here.\n if (NativePromise && !$jscomp.FORCE_POLYFILL_PROMISE) {\n return NativePromise;\n }\n\n /**\n * Schedules code to be executed asynchronously.\n * @constructor\n * @struct\n */\n function AsyncExecutor() {\n /**\n * Batch of functions to execute.\n *\n * Will be `null` initially and immediately after a batch finishes\n * executing.\n * @private {?Array}\n */\n this.batch_ = null;\n }\n\n /**\n * Schedule a function to execute asynchronously.\n *\n * - The function will execute:\n * - After the current call stack has completed executing.\n * - After any functions previously scheduled using this object.\n * - The return value will be ignored.\n * - An exception thrown by the method will be caught and asynchronously\n * rethrown when it cannot interrupt any other code. This class provides\n * no way to catch such exceptions.\n * @param {function():?} f\n */\n AsyncExecutor.prototype.asyncExecute = function(f) {\n if (this.batch_ == null) {\n // no batch created yet, or last batch was fully executed\n this.batch_ = [];\n var self = this;\n this.asyncExecuteFunction(function() { self.executeBatch_(); });\n }\n this.batch_.push(f);\n };\n\n // NOTE: We want to make sure AsyncExecutor will work as expected even if\n // testing code should override setTimeout()\n /** @const {function(!Function, number)} */\n var nativeSetTimeout = $jscomp.global['setTimeout'];\n\n /**\n * Schedule a function to execute asynchronously as soon as possible.\n *\n * NOTE: May be overridden for testing.\n * @package\n * @param {function()} f\n */\n AsyncExecutor.prototype.asyncExecuteFunction = function(f) {\n nativeSetTimeout(f, 0);\n };\n\n /**\n * Execute scheduled jobs in a batch until all are executed or the batch\n * execution time limit has been reached.\n * @private\n */\n AsyncExecutor.prototype.executeBatch_ = function() {\n while (this.batch_ && this.batch_.length) {\n var /** !Array */ executingBatch = this.batch_;\n // Executions scheduled while executing this batch go into a new one to\n // avoid the batch array getting too big.\n this.batch_ = [];\n for (var i = 0; i < executingBatch.length; ++i) {\n var f = /** @type {function()} */ (executingBatch[i]);\n executingBatch[i] = null; // free memory\n try {\n f();\n } catch (error) {\n this.asyncThrow_(error);\n }\n }\n }\n // All jobs finished executing, so force scheduling a new batch next\n // time asyncExecute() is called.\n this.batch_ = null;\n };\n\n /**\n * @private\n * @param {*} exception\n */\n AsyncExecutor.prototype.asyncThrow_ = function(exception) {\n this.asyncExecuteFunction(function() { throw exception; });\n };\n\n /**\n * @enum {number}\n */\n var PromiseState = {\n /** The Promise is waiting for resolution. */\n PENDING: 0,\n\n /** The Promise has been resolved with a fulfillment value. */\n FULFILLED: 1,\n\n /** The Promise has been resolved with a rejection reason. */\n REJECTED: 2\n };\n\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {function(\n * function((TYPE|IThenable|Thenable|null)=),\n * function(*=))} executor\n * @constructor\n * @extends {Promise}\n * @template TYPE\n */\n var PolyfillPromise = function(executor) {\n /** @private {PromiseState} */\n this.state_ = PromiseState.PENDING;\n\n /**\n * The settled result of the Promise. Immutable once set with either a\n * fulfillment value or rejection reason.\n * @private {*}\n */\n this.result_ = undefined;\n\n /**\n * These functions must be asynchronously executed when this promise\n * settles.\n * @private {?Array}\n */\n this.onSettledCallbacks_ = [];\n\n var resolveAndReject = this.createResolveAndReject_();\n try {\n executor(resolveAndReject.resolve, resolveAndReject.reject);\n } catch (e) {\n resolveAndReject.reject(e);\n }\n };\n\n\n /**\n * Create a pair of functions for resolving or rejecting this Promise.\n *\n *

After the resolve or reject function has been called once, later calls\n * do nothing.\n * @private\n * @return {{\n * resolve: function((TYPE|IThenable|Thenable|null)=),\n * reject: function(*=)\n * }}\n */\n PolyfillPromise.prototype.createResolveAndReject_ = function() {\n var thisPromise = this;\n var alreadyCalled = false;\n /**\n * @param {function(this:PolyfillPromise, T=)} method\n * @return {function(T=)}\n * @template T\n */\n function firstCallWins(method) {\n return function(/** T= */ x) {\n if (!alreadyCalled) {\n alreadyCalled = true;\n method.call(thisPromise, x);\n }\n };\n }\n return {\n resolve: firstCallWins(this.resolveTo_),\n reject: firstCallWins(this.reject_)\n };\n };\n\n\n /**\n * @private\n * @param {*=} value\n */\n PolyfillPromise.prototype.resolveTo_ = function(value) {\n if (value === this) {\n this.reject_(new TypeError('A Promise cannot resolve to itself'));\n } else if (value instanceof PolyfillPromise) {\n this.settleSameAsPromise_(/** @type {!PolyfillPromise} */ (value));\n } else if (isObject(value)) {\n this.resolveToNonPromiseObj_(/** @type {!Object} */ (value));\n } else {\n this.fulfill_(value);\n }\n };\n\n\n /**\n * @private\n * @param {!Object} obj\n * @suppress {strictMissingProperties} obj.then\n */\n PolyfillPromise.prototype.resolveToNonPromiseObj_ = function(obj) {\n var thenMethod = undefined;\n\n try {\n thenMethod = obj.then;\n } catch (error) {\n this.reject_(error);\n return;\n }\n if (typeof thenMethod == 'function') {\n this.settleSameAsThenable_(thenMethod, /** @type {!Thenable} */ (obj));\n } else {\n this.fulfill_(obj);\n }\n };\n\n\n /**\n * @param {*} value anything\n * @return {boolean}\n */\n function isObject(value) {\n switch (typeof value) {\n case 'object':\n return value != null;\n case 'function':\n return true;\n default:\n return false;\n }\n }\n\n /**\n * Reject this promise for the given reason.\n * @private\n * @param {*=} reason\n * @throws {!Error} if this promise is already fulfilled or rejected.\n */\n PolyfillPromise.prototype.reject_ = function(reason) {\n this.settle_(PromiseState.REJECTED, reason);\n };\n\n /**\n * Fulfill this promise with the given value.\n * @private\n * @param {!TYPE} value\n * @throws {!Error} when this promise is already fulfilled or rejected.\n */\n PolyfillPromise.prototype.fulfill_ = function(value) {\n this.settle_(PromiseState.FULFILLED, value);\n };\n\n /**\n * Fulfill or reject this promise with the given value/reason.\n * @private\n * @param {!PromiseState} settledState (FULFILLED or REJECTED)\n * @param {*} valueOrReason\n * @throws {!Error} when this promise is already fulfilled or rejected.\n */\n PolyfillPromise.prototype.settle_ = function(settledState, valueOrReason) {\n if (this.state_ != PromiseState.PENDING) {\n throw new Error(\n 'Cannot settle(' + settledState + ', ' + valueOrReason +\n '): Promise already settled in state' + this.state_);\n }\n this.state_ = settledState;\n this.result_ = valueOrReason;\n this.executeOnSettledCallbacks_();\n };\n\n PolyfillPromise.prototype.executeOnSettledCallbacks_ = function() {\n if (this.onSettledCallbacks_ != null) {\n for (var i = 0; i < this.onSettledCallbacks_.length; ++i) {\n asyncExecutor.asyncExecute(this.onSettledCallbacks_[i]);\n }\n this.onSettledCallbacks_ = null; // free memory\n }\n };\n\n /**\n * All promise async execution is managed by a single executor for the\n * sake of efficiency.\n * @const {!AsyncExecutor}\n */\n var asyncExecutor = new AsyncExecutor();\n\n /**\n * Arrange to settle this promise in the same way as the given thenable.\n * @private\n * @param {!PolyfillPromise} promise\n */\n PolyfillPromise.prototype.settleSameAsPromise_ = function(promise) {\n var methods = this.createResolveAndReject_();\n\n // Calling then() would create an unnecessary extra promise.\n promise.callWhenSettled_(methods.resolve, methods.reject);\n };\n\n /**\n * Arrange to settle this promise in the same way as the given thenable.\n * @private\n * @param {function(\n * function((TYPE|IThenable|Thenable|null)=),\n * function(*=))\n * } thenMethod\n * @param {!Thenable} thenable\n */\n PolyfillPromise.prototype.settleSameAsThenable_ = function(\n thenMethod, thenable) {\n var methods = this.createResolveAndReject_();\n\n // Don't trust an unknown thenable implementation not to throw exceptions.\n try {\n thenMethod.call(thenable, methods.resolve, methods.reject);\n } catch (error) {\n methods.reject(error);\n }\n };\n\n /** @override */\n PolyfillPromise.prototype.then = function(onFulfilled, onRejected) {\n var resolveChild;\n var rejectChild;\n var childPromise = new PolyfillPromise(function(resolve, reject) {\n resolveChild = resolve;\n rejectChild = reject;\n });\n function createCallback(paramF, defaultF) {\n // The spec says to ignore non-function values for onFulfilled and\n // onRejected\n if (typeof paramF == 'function') {\n return function(x) {\n try {\n resolveChild(paramF(x));\n } catch (error) {\n rejectChild(error);\n }\n };\n } else {\n return defaultF;\n }\n }\n\n this.callWhenSettled_(\n createCallback(onFulfilled, resolveChild),\n createCallback(onRejected, rejectChild));\n return childPromise;\n };\n\n /** @override */\n PolyfillPromise.prototype.catch = function(onRejected) {\n return this.then(undefined, onRejected);\n };\n\n\n PolyfillPromise.prototype.callWhenSettled_ = function(\n onFulfilled, onRejected) {\n var /** !PolyfillPromise */ thisPromise = this;\n function callback() {\n switch (thisPromise.state_) {\n case PromiseState.FULFILLED:\n onFulfilled(thisPromise.result_);\n break;\n case PromiseState.REJECTED:\n onRejected(thisPromise.result_);\n break;\n default:\n throw new Error('Unexpected state: ' + thisPromise.state_);\n }\n }\n if (this.onSettledCallbacks_ == null) {\n // we've already settled\n asyncExecutor.asyncExecute(callback);\n } else {\n this.onSettledCallbacks_.push(callback);\n }\n };\n\n // called locally, so give it a name\n function resolvingPromise(opt_value) {\n if (opt_value instanceof PolyfillPromise) {\n return opt_value;\n } else {\n return new PolyfillPromise(function(resolve, reject) {\n resolve(opt_value);\n });\n }\n }\n PolyfillPromise['resolve'] = resolvingPromise;\n\n\n PolyfillPromise['reject'] = function(opt_reason) {\n return new PolyfillPromise(function(resolve, reject) {\n reject(opt_reason);\n });\n };\n\n\n PolyfillPromise['race'] = function(thenablesOrValues) {\n return new PolyfillPromise(function(resolve, reject) {\n var /** !Iterator<*> */ iterator =\n $jscomp.makeIterator(thenablesOrValues);\n for (var /** !IIterableResult<*> */ iterRec = iterator.next();\n !iterRec.done;\n iterRec = iterator.next()) {\n // Using resolvingPromise() allows us to treat all elements the same\n // way.\n // NOTE: resolvingPromise(promise) always returns the argument\n // unchanged.\n // Using .callWhenSettled_() instead of .then() avoids creating an\n // unnecessary extra promise.\n resolvingPromise(iterRec.value).callWhenSettled_(resolve, reject);\n }\n });\n };\n\n\n PolyfillPromise['all'] = function(thenablesOrValues) {\n var /** !Iterator<*> */ iterator = $jscomp.makeIterator(thenablesOrValues);\n var /** !IIterableResult<*> */ iterRec = iterator.next();\n\n if (iterRec.done) {\n return resolvingPromise([]);\n } else {\n return new PolyfillPromise(function(resolveAll, rejectAll) {\n var resultsArray = [];\n var unresolvedCount = 0;\n\n function onFulfilled(i) {\n return function(ithResult) {\n resultsArray[i] = ithResult;\n unresolvedCount--;\n if (unresolvedCount == 0) {\n resolveAll(resultsArray);\n }\n };\n }\n\n do {\n resultsArray.push(undefined);\n unresolvedCount++;\n // Using resolvingPromise() allows us to treat all elements the same\n // way.\n // NOTE: resolvingPromise(promise) always returns the argument\n // unchanged. Using .callWhenSettled_() instead of .then() avoids\n // creating an unnecessary extra promise.\n resolvingPromise(iterRec.value)\n .callWhenSettled_(\n onFulfilled(resultsArray.length - 1), rejectAll);\n iterRec = iterator.next();\n } while (!iterRec.done);\n });\n }\n };\n\n return PolyfillPromise;\n}, 'es6', 'es3');\n", + "js/es6/promise/promise.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require base';\n'require es6/util/makeiterator';\n'require util/defines';\n'require util/global';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Promise',\n /**\n * @param {*} NativePromise\n * @return {*}\n * @suppress {reportUnknownTypes}\n */\n function(NativePromise) {\n function platformSupportsPromiseRejectionEvents() {\n return typeof $jscomp.global['PromiseRejectionEvent'] !== 'undefined';\n }\n\n function globalPromiseIsNative() {\n return $jscomp.global['Promise'] &&\n $jscomp.global['Promise'].toString().indexOf('[native code]') !== -1;\n }\n\n function shouldForcePolyfillPromise() {\n // Only force polyfill if the global promise is native.\n return ($jscomp.FORCE_POLYFILL_PROMISE ||\n $jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION &&\n !platformSupportsPromiseRejectionEvents()) && globalPromiseIsNative();\n }\n\n // TODO(bradfordcsmith): Do we need to add checks for standards conformance?\n // e.g. The version of FireFox we currently use for testing has a Promise\n // that fails to reject attempts to fulfill it with itself, but that\n // isn't reasonably testable here.\n if (NativePromise && !shouldForcePolyfillPromise()) {\n return NativePromise;\n }\n\n /**\n * Schedules code to be executed asynchronously.\n * @constructor\n * @struct\n */\n function AsyncExecutor() {\n /**\n * Batch of functions to execute.\n *\n * Will be `null` initially and immediately after a batch finishes\n * executing.\n * @private {?Array}\n */\n this.batch_ = null;\n }\n\n /**\n * Schedule a function to execute asynchronously.\n *\n * - The function will execute:\n * - After the current call stack has completed executing.\n * - After any functions previously scheduled using this object.\n * - The return value will be ignored.\n * - An exception thrown by the method will be caught and asynchronously\n * rethrown when it cannot interrupt any other code. This class provides\n * no way to catch such exceptions.\n * @param {function():?} f\n */\n AsyncExecutor.prototype.asyncExecute = function(f) {\n if (this.batch_ == null) {\n // no batch created yet, or last batch was fully executed\n this.batch_ = [];\n var self = this;\n this.asyncExecuteFunction(function() { self.executeBatch_(); });\n }\n this.batch_.push(f);\n };\n\n // NOTE: We want to make sure AsyncExecutor will work as expected even if\n // testing code should override setTimeout()\n /** @const {function(!Function, number)} */\n var nativeSetTimeout = $jscomp.global['setTimeout'];\n\n /**\n * Schedule a function to execute asynchronously as soon as possible.\n *\n * NOTE: May be overridden for testing.\n * @package\n * @param {function()} f\n */\n AsyncExecutor.prototype.asyncExecuteFunction = function(f) {\n nativeSetTimeout(f, 0);\n };\n\n /**\n * Execute scheduled jobs in a batch until all are executed or the batch\n * execution time limit has been reached.\n * @private\n */\n AsyncExecutor.prototype.executeBatch_ = function() {\n while (this.batch_ && this.batch_.length) {\n var /** !Array */ executingBatch = this.batch_;\n // Executions scheduled while executing this batch go into a new one to\n // avoid the batch array getting too big.\n this.batch_ = [];\n for (var i = 0; i < executingBatch.length; ++i) {\n var f = /** @type {function()} */ (executingBatch[i]);\n executingBatch[i] = null; // free memory\n try {\n f();\n } catch (error) {\n this.asyncThrow_(error);\n }\n }\n }\n // All jobs finished executing, so force scheduling a new batch next\n // time asyncExecute() is called.\n this.batch_ = null;\n };\n\n /**\n * @private\n * @param {*} exception\n */\n AsyncExecutor.prototype.asyncThrow_ = function(exception) {\n this.asyncExecuteFunction(function() { throw exception; });\n };\n\n /**\n * @enum {number}\n */\n var PromiseState = {\n /** The Promise is waiting for resolution. */\n PENDING: 0,\n\n /** The Promise has been resolved with a fulfillment value. */\n FULFILLED: 1,\n\n /** The Promise has been resolved with a rejection reason. */\n REJECTED: 2\n };\n\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {function(\n * function((TYPE|IThenable|Thenable|null)=),\n * function(*=))} executor\n * @constructor\n * @extends {Promise}\n * @template TYPE\n */\n var PolyfillPromise = function(executor) {\n /** @private {PromiseState} */\n this.state_ = PromiseState.PENDING;\n\n /**\n * The settled result of the Promise. Immutable once set with either a\n * fulfillment value or rejection reason.\n * @private {*}\n */\n this.result_ = undefined;\n\n /**\n * These functions must be asynchronously executed when this promise\n * settles.\n * @private {?Array}\n */\n this.onSettledCallbacks_ = [];\n\n /**\n * Whether the rejection has any handler when the promise is rejected.\n * @private {boolean}\n */\n this.isRejectionHandled_ = false;\n\n var resolveAndReject = this.createResolveAndReject_();\n try {\n executor(resolveAndReject.resolve, resolveAndReject.reject);\n } catch (e) {\n resolveAndReject.reject(e);\n }\n };\n\n\n /**\n * Create a pair of functions for resolving or rejecting this Promise.\n *\n *

After the resolve or reject function has been called once, later calls\n * do nothing.\n * @private\n * @return {{\n * resolve: function((TYPE|IThenable|Thenable|null)=),\n * reject: function(*=)\n * }}\n */\n PolyfillPromise.prototype.createResolveAndReject_ = function() {\n var thisPromise = this;\n var alreadyCalled = false;\n /**\n * @param {function(this:PolyfillPromise, T=)} method\n * @return {function(T=)}\n * @template T\n */\n function firstCallWins(method) {\n return function(/** T= */ x) {\n if (!alreadyCalled) {\n alreadyCalled = true;\n method.call(thisPromise, x);\n }\n };\n }\n return {\n resolve: firstCallWins(this.resolveTo_),\n reject: firstCallWins(this.reject_)\n };\n };\n\n\n /**\n * @private\n * @param {*=} value\n */\n PolyfillPromise.prototype.resolveTo_ = function(value) {\n if (value === this) {\n this.reject_(new TypeError('A Promise cannot resolve to itself'));\n } else if (value instanceof PolyfillPromise) {\n this.settleSameAsPromise_(/** @type {!PolyfillPromise} */ (value));\n } else if (isObject(value)) {\n this.resolveToNonPromiseObj_(/** @type {!Object} */ (value));\n } else {\n this.fulfill_(value);\n }\n };\n\n\n /**\n * @private\n * @param {!Object} obj\n * @suppress {strictMissingProperties} obj.then\n */\n PolyfillPromise.prototype.resolveToNonPromiseObj_ = function(obj) {\n var thenMethod = undefined;\n\n try {\n thenMethod = obj.then;\n } catch (error) {\n this.reject_(error);\n return;\n }\n if (typeof thenMethod == 'function') {\n this.settleSameAsThenable_(thenMethod, /** @type {!Thenable} */ (obj));\n } else {\n this.fulfill_(obj);\n }\n };\n\n\n /**\n * @param {*} value anything\n * @return {boolean}\n */\n function isObject(value) {\n switch (typeof value) {\n case 'object':\n return value != null;\n case 'function':\n return true;\n default:\n return false;\n }\n }\n\n /**\n * Reject this promise for the given reason.\n * @private\n * @param {*=} reason\n * @throws {!Error} if this promise is already fulfilled or rejected.\n */\n PolyfillPromise.prototype.reject_ = function(reason) {\n this.settle_(PromiseState.REJECTED, reason);\n };\n\n /**\n * Fulfill this promise with the given value.\n * @private\n * @param {!TYPE} value\n * @throws {!Error} when this promise is already fulfilled or rejected.\n */\n PolyfillPromise.prototype.fulfill_ = function(value) {\n this.settle_(PromiseState.FULFILLED, value);\n };\n\n /**\n * Fulfill or reject this promise with the given value/reason.\n * @private\n * @param {!PromiseState} settledState (FULFILLED or REJECTED)\n * @param {*} valueOrReason\n * @throws {!Error} when this promise is already fulfilled or rejected.\n */\n PolyfillPromise.prototype.settle_ = function(settledState, valueOrReason) {\n if (this.state_ != PromiseState.PENDING) {\n throw new Error(\n 'Cannot settle(' + settledState + ', ' + valueOrReason +\n '): Promise already settled in state' + this.state_);\n }\n this.state_ = settledState;\n this.result_ = valueOrReason;\n if (this.state_ === PromiseState.REJECTED) {\n this.scheduleUnhandledRejectionCheck_();\n }\n this.executeOnSettledCallbacks_();\n };\n\n PolyfillPromise.prototype.scheduleUnhandledRejectionCheck_ = function() {\n var self = this;\n nativeSetTimeout(function() {\n if (self.notifyUnhandledRejection_()) {\n // console may not exist on IE 9.\n var nativeConsole = $jscomp.global['console'];\n if (typeof nativeConsole !== 'undefined') {\n nativeConsole.error(self.result_);\n }\n }\n }, 1);\n };\n\n /**\n * Dispatches `unhandledrejection` event if the rejection is unhandled.\n * @return {boolean} False means the fallback handler does not need to run. It\n * is either because rejection handlers are detected or one of the\n * `unhandledjrection` event handlers call `preventDefault()`.\n * True otherwise.\n * @private\n * @suppress {missingProperties}\n */\n PolyfillPromise.prototype.notifyUnhandledRejection_ = function() {\n if (this.isRejectionHandled_) {\n return false;\n }\n var NativeCustomEvent = $jscomp.global['CustomEvent'];\n var NativeEvent = $jscomp.global['Event'];\n var nativeDispatchEvent = $jscomp.global['dispatchEvent'];\n if (typeof nativeDispatchEvent === 'undefined') {\n return true;\n }\n\n var event;\n if (typeof NativeCustomEvent === 'function') {\n event =\n new NativeCustomEvent('unhandledrejection', {cancelable: true});\n } else if (typeof NativeEvent === 'function') {\n // CustomEvent is not available in FireFox < 48 in workers.\n // https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent\n event = new NativeEvent('unhandledrejection', {cancelable: true});\n } else {\n // IE does not support CustomEvent constructor.\n event = $jscomp.global['document'].createEvent('CustomEvent');\n event.initCustomEvent(\n 'unhandledrejection', /** canBubbleArg */ false,\n /** cancelableArg */ true, event);\n }\n event.promise = this;\n event.reason = this.result_;\n\n return nativeDispatchEvent(event);\n };\n\n PolyfillPromise.prototype.executeOnSettledCallbacks_ = function() {\n if (this.onSettledCallbacks_ != null) {\n for (var i = 0; i < this.onSettledCallbacks_.length; ++i) {\n asyncExecutor.asyncExecute(this.onSettledCallbacks_[i]);\n }\n this.onSettledCallbacks_ = null; // free memory\n }\n };\n\n /**\n * All promise async execution is managed by a single executor for the\n * sake of efficiency.\n * @const {!AsyncExecutor}\n */\n var asyncExecutor = new AsyncExecutor();\n\n /**\n * Arrange to settle this promise in the same way as the given thenable.\n * @private\n * @param {!PolyfillPromise} promise\n */\n PolyfillPromise.prototype.settleSameAsPromise_ = function(promise) {\n var methods = this.createResolveAndReject_();\n\n // Calling then() would create an unnecessary extra promise.\n promise.callWhenSettled_(methods.resolve, methods.reject);\n };\n\n /**\n * Arrange to settle this promise in the same way as the given thenable.\n * @private\n * @param {function(\n * function((TYPE|IThenable|Thenable|null)=),\n * function(*=))\n * } thenMethod\n * @param {!Thenable} thenable\n */\n PolyfillPromise.prototype.settleSameAsThenable_ = function(\n thenMethod, thenable) {\n var methods = this.createResolveAndReject_();\n\n // Don't trust an unknown thenable implementation not to throw exceptions.\n try {\n thenMethod.call(thenable, methods.resolve, methods.reject);\n } catch (error) {\n methods.reject(error);\n }\n };\n\n /** @override */\n PolyfillPromise.prototype.then = function(onFulfilled, onRejected) {\n var resolveChild;\n var rejectChild;\n var childPromise = new PolyfillPromise(function(resolve, reject) {\n resolveChild = resolve;\n rejectChild = reject;\n });\n function createCallback(paramF, defaultF) {\n // The spec says to ignore non-function values for onFulfilled and\n // onRejected\n if (typeof paramF == 'function') {\n return function(x) {\n try {\n resolveChild(paramF(x));\n } catch (error) {\n rejectChild(error);\n }\n };\n } else {\n return defaultF;\n }\n }\n\n this.callWhenSettled_(\n createCallback(onFulfilled, resolveChild),\n createCallback(onRejected, rejectChild));\n return childPromise;\n };\n\n /** @override */\n PolyfillPromise.prototype.catch = function(onRejected) {\n return this.then(undefined, onRejected);\n };\n\n\n PolyfillPromise.prototype.callWhenSettled_ = function(\n onFulfilled, onRejected) {\n var /** !PolyfillPromise */ thisPromise = this;\n function callback() {\n switch (thisPromise.state_) {\n case PromiseState.FULFILLED:\n onFulfilled(thisPromise.result_);\n break;\n case PromiseState.REJECTED:\n onRejected(thisPromise.result_);\n break;\n default:\n throw new Error('Unexpected state: ' + thisPromise.state_);\n }\n }\n if (this.onSettledCallbacks_ == null) {\n // we've already settled\n asyncExecutor.asyncExecute(callback);\n } else {\n this.onSettledCallbacks_.push(callback);\n }\n this.isRejectionHandled_ = true;\n };\n\n // called locally, so give it a name\n function resolvingPromise(opt_value) {\n if (opt_value instanceof PolyfillPromise) {\n return opt_value;\n } else {\n return new PolyfillPromise(function(resolve, reject) {\n resolve(opt_value);\n });\n }\n }\n PolyfillPromise['resolve'] = resolvingPromise;\n\n\n PolyfillPromise['reject'] = function(opt_reason) {\n return new PolyfillPromise(function(resolve, reject) {\n reject(opt_reason);\n });\n };\n\n\n PolyfillPromise['race'] = function(thenablesOrValues) {\n return new PolyfillPromise(function(resolve, reject) {\n var /** !Iterator<*> */ iterator =\n $jscomp.makeIterator(thenablesOrValues);\n for (var /** !IIterableResult<*> */ iterRec = iterator.next();\n !iterRec.done;\n iterRec = iterator.next()) {\n // Using resolvingPromise() allows us to treat all elements the same\n // way.\n // NOTE: resolvingPromise(promise) always returns the argument\n // unchanged.\n // Using .callWhenSettled_() instead of .then() avoids creating an\n // unnecessary extra promise.\n resolvingPromise(iterRec.value).callWhenSettled_(resolve, reject);\n }\n });\n };\n\n\n PolyfillPromise['all'] = function(thenablesOrValues) {\n var /** !Iterator<*> */ iterator = $jscomp.makeIterator(thenablesOrValues);\n var /** !IIterableResult<*> */ iterRec = iterator.next();\n\n if (iterRec.done) {\n return resolvingPromise([]);\n } else {\n return new PolyfillPromise(function(resolveAll, rejectAll) {\n var resultsArray = [];\n var unresolvedCount = 0;\n\n function onFulfilled(i) {\n return function(ithResult) {\n resultsArray[i] = ithResult;\n unresolvedCount--;\n if (unresolvedCount == 0) {\n resolveAll(resultsArray);\n }\n };\n }\n\n do {\n resultsArray.push(undefined);\n unresolvedCount++;\n // Using resolvingPromise() allows us to treat all elements the same\n // way.\n // NOTE: resolvingPromise(promise) always returns the argument\n // unchanged. Using .callWhenSettled_() instead of .then() avoids\n // creating an unnecessary extra promise.\n resolvingPromise(iterRec.value)\n .callWhenSettled_(\n onFulfilled(resultsArray.length - 1), rejectAll);\n iterRec = iterator.next();\n } while (!iterRec.done);\n });\n }\n };\n\n return PolyfillPromise;\n}, 'es6', 'es3');\n", "js/es6/reflect.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Rolls together all ES6 Reflect polyfills.\n */\n'require es6/reflect/apply';\n'require es6/reflect/construct';\n'require es6/reflect/defineproperty';\n'require es6/reflect/deleteproperty';\n'require es6/reflect/get';\n'require es6/reflect/getownpropertydescriptor';\n'require es6/reflect/getprototypeof';\n'require es6/reflect/has';\n'require es6/reflect/isextensible';\n'require es6/reflect/ownkeys';\n'require es6/reflect/preventextensions';\n'require es6/reflect/set';\n'require es6/reflect/setprototypeof';\n", --"js/es6/reflect/apply.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.apply', function(orig) {\n if (orig) return orig;\n var apply = Function.prototype.apply;\n\n /**\n * Polyfill for Reflect.apply() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/apply\n *\n * Calls a target function with arguments as specified, just\n * as Function.prototype.apply.\n *\n * @param {function(this: THIS, ...*): RESULT} target The function to call.\n * @param {THIS} thisArg The 'this' argument.\n * @param {!Array} argList The arguments as a list.\n * @return {RESULT} The result of the function call.\n * @template THIS, RESULT\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(target, thisArg, argList) {\n return apply.call(target, thisArg, argList);\n };\n return polyfill;\n}, 'es6', 'es3');\n", -+"js/es6/reflect/apply.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.apply', function(orig) {\n if (orig) return orig;\n var apply = Function.prototype.apply;\n\n /**\n * Polyfill for Reflect.apply() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/apply\n *\n * Calls a target function with arguments as specified, just\n * as Function.prototype.apply.\n *\n * @param {function(this: THIS, ...*): RESULT} target The function to call.\n * @param {THIS} thisArg The 'this' argument.\n * @param {!Array} argList The arguments as a list.\n * @return {RESULT} The result of the function call.\n * @template THIS, RESULT\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(target, thisArg, argList) {\n return apply.call(target, thisArg, argList);\n };\n return polyfill;\n}, 'es6', 'es3');\n", - "js/es6/reflect/construct.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n\n'require es6/util/construct';\n'require util/polyfill';\n\n$jscomp.polyfill('Reflect.construct', function(orig) {\n // NOTE: This is just Reflect.construct if it's present and functional.\n return $jscomp.construct;\n}, 'es6', 'es3');\n", --"js/es6/reflect/defineproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.defineProperty', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.defineProperty() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty\n *\n * Version of Object.defineProperty that returns a boolean.\n *\n * @param {!Object} target Target on which to define the property.\n * @param {string} propertyKey Name of the property to define.\n * @param {!ObjectPropertyDescriptor} attributes Property attributes.\n * @return {boolean} Whether the property was defined.\n */\n var polyfill = function(target, propertyKey, attributes) {\n try {\n Object.defineProperty(target, propertyKey, attributes);\n var desc = Object.getOwnPropertyDescriptor(target, propertyKey);\n if (!desc) return false;\n return desc.configurable === (attributes.configurable || false) &&\n desc.enumerable === (attributes.enumerable || false) &&\n ('value' in desc ?\n desc.value === attributes.value &&\n desc.writable === (attributes.writable || false) :\n desc.get === attributes.get &&\n desc.set === attributes.set);\n } catch (err) {\n return false;\n }\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: Requires Object.defineProperty\n", --"js/es6/reflect/deleteproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.deleteProperty', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.deleteProperty() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty\n *\n * Applies the 'delete' operator as a function.\n *\n * @param {!Object} target Target on which to delete the property.\n * @param {string} propertyKey Name of the property to delete.\n * @return {boolean} Whether the property was deleted.\n */\n var polyfill = function(target, propertyKey) {\n if (!$jscomp.owns(target, propertyKey)) {\n return true;\n }\n try {\n return delete target[propertyKey];\n } catch (err) {\n return false;\n }\n };\n return polyfill;\n}, 'es6', 'es3');\n", --"js/es6/reflect/get.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/finddescriptor';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.get', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.get() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get\n *\n * Applies the 'getprop' operator as a function.\n *\n * @param {!Object} target Target on which to get the property.\n * @param {string} propertyKey Name of the property to get.\n * @param {!Object=} opt_receiver An optional 'this' to use for a getter.\n * @return {*} The value of the property.\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(target, propertyKey, opt_receiver) {\n if (arguments.length <= 2) {\n return target[propertyKey];\n }\n var property = $jscomp.findDescriptor(target, propertyKey);\n if (property) {\n return property.get ? property.get.call(opt_receiver) : property.value;\n }\n return undefined;\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: findDescriptor requires getPrototypeOf\n", -+"js/es6/reflect/defineproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.defineProperty', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.defineProperty() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty\n *\n * Version of Object.defineProperty that returns a boolean.\n *\n * @param {!Object} target Target on which to define the property.\n * @param {string} propertyKey Name of the property to define.\n * @param {!ObjectPropertyDescriptor} attributes Property attributes.\n * @return {boolean} Whether the property was defined.\n */\n var polyfill = function(target, propertyKey, attributes) {\n try {\n Object.defineProperty(target, propertyKey, attributes);\n var desc = Object.getOwnPropertyDescriptor(target, propertyKey);\n if (!desc) return false;\n return desc.configurable === (attributes.configurable || false) &&\n desc.enumerable === (attributes.enumerable || false) &&\n ('value' in desc ?\n desc.value === attributes.value &&\n desc.writable === (attributes.writable || false) :\n desc.get === attributes.get &&\n desc.set === attributes.set);\n } catch (err) {\n return false;\n }\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: Requires Object.defineProperty\n", -+"js/es6/reflect/deleteproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.deleteProperty', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.deleteProperty() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty\n *\n * Applies the 'delete' operator as a function.\n *\n * @param {!Object} target Target on which to delete the property.\n * @param {string} propertyKey Name of the property to delete.\n * @return {boolean} Whether the property was deleted.\n */\n var polyfill = function(target, propertyKey) {\n if (!$jscomp.owns(target, propertyKey)) {\n return true;\n }\n try {\n return delete target[propertyKey];\n } catch (err) {\n return false;\n }\n };\n return polyfill;\n}, 'es6', 'es3');\n", -+"js/es6/reflect/get.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/finddescriptor';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.get', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.get() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get\n *\n * Applies the 'getprop' operator as a function.\n *\n * @param {!Object} target Target on which to get the property.\n * @param {string} propertyKey Name of the property to get.\n * @param {!Object=} opt_receiver An optional 'this' to use for a getter.\n * @return {*} The value of the property.\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(target, propertyKey, opt_receiver) {\n if (arguments.length <= 2) {\n return target[propertyKey];\n }\n var property = $jscomp.findDescriptor(target, propertyKey);\n if (property) {\n return property.get ? property.get.call(opt_receiver) : property.value;\n }\n return undefined;\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: findDescriptor requires getPrototypeOf\n", - "js/es6/reflect/getownpropertydescriptor.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.getOwnPropertyDescriptor', function(orig) {\n // NOTE: We don't make guarantees about correct throwing behavior.\n // Non-object arguments should be prevented by the type checker.\n return orig || Object.getOwnPropertyDescriptor;\n}, 'es6', 'es5'); // ES5: Requires Object.getOwnPropertyDescriptor\n", - "js/es6/reflect/getprototypeof.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.getPrototypeOf', function(orig) {\n // NOTE: We don't make guarantees about correct throwing behavior.\n // Non-object arguments should be prevented by the type checker.\n return orig || Object.getPrototypeOf;\n}, 'es6', 'es5'); // ES5: Requires Object.getPrototypeOf\n", --"js/es6/reflect/has.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.has', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.has() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/has\n *\n * Applies the 'in' operator as a function.\n *\n * @param {!Object} target\n * @param {*} propertyKey\n * @return {boolean}\n */\n var polyfill = function(target, propertyKey) {\n return propertyKey in target;\n };\n return polyfill;\n}, 'es6', 'es3');\n", -+"js/es6/reflect/has.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.has', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.has() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/has\n *\n * Applies the 'in' operator as a function.\n *\n * @param {!Object} target\n * @param {*} propertyKey\n * @return {boolean}\n */\n var polyfill = function(target, propertyKey) {\n return propertyKey in target;\n };\n return polyfill;\n}, 'es6', 'es3');\n", - "js/es6/reflect/isextensible.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/defines';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.isExtensible', function(orig) {\n if (orig) return orig;\n if ($jscomp.ASSUME_ES5 || typeof Object.isExtensible == 'function') {\n return Object.isExtensible;\n }\n return function() { return true; };\n}, 'es6', 'es3');\n", --"js/es6/reflect/ownkeys.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/object/getownpropertysymbols';\n\n\n$jscomp.polyfill('Reflect.ownKeys',\n /**\n * @param {*} orig\n * @return {*}\n * @suppress {reportUnknownTypes}\n */\n function(orig) {\n if (orig) return orig;\n\n var symbolPrefix = 'jscomp_symbol_';\n function isSymbol(key) {\n return key.substring(0, symbolPrefix.length) == symbolPrefix;\n }\n\n /**\n * Polyfill for Reflect.ownKeys() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys\n *\n * Returns an array of the object's own property keys.\n *\n * @param {!Object} target\n * @return {!Array<(string|symbol)>}\n */\n var polyfill = function(target) {\n var keys = [];\n var names = Object.getOwnPropertyNames(target);\n var symbols = Object.getOwnPropertySymbols(target);\n for (var i = 0; i < names.length; i++) {\n (isSymbol(names[i]) ? symbols : keys).push(names[i]);\n }\n return keys.concat(symbols);\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: Requires Object.getOwnPropertyNames\n", --"js/es6/reflect/preventextensions.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/defines';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.preventExtensions', function(orig) {\n if (orig) return orig;\n\n if (!($jscomp.ASSUME_ES5 || typeof Object.preventExtensions == 'function')) {\n return function() { return false; };\n }\n\n /**\n * Polyfill for Reflect.preventExtensions() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions\n *\n * Same function as Object.preventExtensions (the spec says\n * to throw if the input is not an object, but jscompiler will\n * fail to typecheck, so there's no reason to distinguish here).\n *\n * @param {!Object} target\n * @return {boolean}\n */\n var polyfill = function(target) {\n Object.preventExtensions(target);\n return !Object.isExtensible(target);\n };\n return polyfill;\n}, 'es6', 'es3');\n", --"js/es6/reflect/set.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/isextensible';\n'require util/finddescriptor';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.set', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.set() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set\n *\n * Applies the 'setprop' operator as a function.\n *\n * @param {!Object} target Target on which to get the property.\n * @param {string} propertyKey Name of the property to get.\n * @param {*} value Value to set.\n * @param {!Object=} opt_receiver An optional 'this' to use for a setter.\n * @return {boolean} Whether setting was successful.\n */\n var polyfill = function(target, propertyKey, value, opt_receiver) {\n var property = $jscomp.findDescriptor(target, propertyKey);\n if (!property) {\n if (Reflect.isExtensible(target)) {\n target[propertyKey] = value;\n return true;\n }\n return false;\n }\n if (property.set) {\n property.set.call(arguments.length > 3 ? opt_receiver : target, value);\n return true;\n } else if (property.writable && !Object.isFrozen(target)) {\n target[propertyKey] = value;\n return true;\n }\n return false;\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: findDescriptor requires getPrototypeOf\n", -+"js/es6/reflect/ownkeys.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/object/getownpropertysymbols';\n\n\n$jscomp.polyfill('Reflect.ownKeys',\n /**\n * @param {*} orig\n * @return {*}\n * @suppress {reportUnknownTypes}\n */\n function(orig) {\n if (orig) return orig;\n\n var symbolPrefix = 'jscomp_symbol_';\n function isSymbol(key) {\n return key.substring(0, symbolPrefix.length) == symbolPrefix;\n }\n\n /**\n * Polyfill for Reflect.ownKeys() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys\n *\n * Returns an array of the object's own property keys.\n *\n * @param {!Object} target\n * @return {!Array<(string|symbol)>}\n */\n var polyfill = function(target) {\n var keys = [];\n var names = Object.getOwnPropertyNames(target);\n var symbols = Object.getOwnPropertySymbols(target);\n for (var i = 0; i < names.length; i++) {\n (isSymbol(names[i]) ? symbols : keys).push(names[i]);\n }\n return keys.concat(symbols);\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: Requires Object.getOwnPropertyNames\n", -+"js/es6/reflect/preventextensions.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/defines';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.preventExtensions', function(orig) {\n if (orig) return orig;\n\n if (!($jscomp.ASSUME_ES5 || typeof Object.preventExtensions == 'function')) {\n return function() { return false; };\n }\n\n /**\n * Polyfill for Reflect.preventExtensions() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions\n *\n * Same function as Object.preventExtensions (the spec says\n * to throw if the input is not an object, but jscompiler will\n * fail to typecheck, so there's no reason to distinguish here).\n *\n * @param {!Object} target\n * @return {boolean}\n */\n var polyfill = function(target) {\n Object.preventExtensions(target);\n return !Object.isExtensible(target);\n };\n return polyfill;\n}, 'es6', 'es3');\n", -+"js/es6/reflect/set.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/isextensible';\n'require util/finddescriptor';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.set', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.set() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set\n *\n * Applies the 'setprop' operator as a function.\n *\n * @param {!Object} target Target on which to get the property.\n * @param {string} propertyKey Name of the property to get.\n * @param {*} value Value to set.\n * @param {!Object=} opt_receiver An optional 'this' to use for a setter.\n * @return {boolean} Whether setting was successful.\n */\n var polyfill = function(target, propertyKey, value, opt_receiver) {\n var property = $jscomp.findDescriptor(target, propertyKey);\n if (!property) {\n if (Reflect.isExtensible(target)) {\n target[propertyKey] = value;\n return true;\n }\n return false;\n }\n if (property.set) {\n property.set.call(arguments.length > 3 ? opt_receiver : target, value);\n return true;\n } else if (property.writable && !Object.isFrozen(target)) {\n target[propertyKey] = value;\n return true;\n }\n return false;\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: findDescriptor requires getPrototypeOf\n", - "js/es6/reflect/setprototypeof.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/polyfill';\n'require es6/util/setprototypeof';\n\n\n$jscomp.polyfill(\n 'Reflect.setPrototypeOf',\n /**\n * These annotations are intended to match the signature of\n * $jscomp.polyfill(). Being more specific makes the compiler unhappy.\n * @suppress {reportUnknownTypes}\n * @param {?*} orig\n * @return {*}\n */\n function(orig) {\n if (orig) {\n return orig;\n } else if ($jscomp.setPrototypeOf) {\n /** @const {!function(!Object,?Object):!Object} */\n var setPrototypeOf = $jscomp.setPrototypeOf;\n /**\n * @param {!Object} target\n * @param {?Object} proto\n * @return {boolean}\n */\n var polyfill = function(target, proto) {\n try {\n setPrototypeOf(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n };\n return polyfill;\n } else {\n // it isn't possible to implement this method\n return null;\n }\n },\n 'es6', 'es5');\n", - "js/es6/set.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/conformance';\n'require es6/map';\n'require es6/symbol';\n'require util/defines';\n'require util/polyfill';\n\n$jscomp.polyfill('Set',\n /**\n * @param {*} NativeSet\n * @return {*}\n * @suppress {reportUnknownTypes}\n */\n function(NativeSet) {\n\n /**\n * Checks conformance of the existing Set.\n * @return {boolean} True if the browser's implementation conforms.\n * @suppress {missingProperties} \"entries\" unknown prototype\n */\n function isConformant() {\n if ($jscomp.ASSUME_NO_NATIVE_SET ||\n !NativeSet ||\n typeof NativeSet != \"function\" ||\n !NativeSet.prototype.entries ||\n typeof Object.seal != 'function') {\n return false;\n }\n // Some implementations don't support constructor arguments.\n try {\n NativeSet = /** @type {function(new: Set, !Iterator=)} */ (NativeSet);\n var value = Object.seal({x: 4});\n var set = new NativeSet($jscomp.makeIterator([value]));\n if (!set.has(value) || set.size != 1 || set.add(value) != set ||\n set.size != 1 || set.add({x: 4}) != set || set.size != 2) {\n return false;\n }\n var iter = set.entries();\n var item = iter.next();\n if (item.done || item.value[0] != value || item.value[1] != value) {\n return false;\n }\n item = iter.next();\n if (item.done || item.value[0] == value || item.value[0].x != 4 ||\n item.value[1] != item.value[0]) {\n return false;\n }\n return iter.next().done;\n } catch (err) { // This should hopefully never happen, but let's be safe.\n return false;\n }\n }\n\n if ($jscomp.USE_PROXY_FOR_ES6_CONFORMANCE_CHECKS) {\n if (NativeSet && $jscomp.ES6_CONFORMANCE) return NativeSet;\n } else {\n if (isConformant()) return NativeSet;\n }\n\n // We depend on Symbol.iterator, so ensure it's loaded.\n $jscomp.initSymbolIterator();\n\n\n\n /**\n * Polyfill for the global Map data type.\n * @constructor\n * @struct\n * @extends {Set}\n * @implements {Iterable}\n * @template KEY, VALUE\n * @param {!Iterable|!Array|null=} opt_iterable\n * Optional data to populate the set.\n */\n // TODO(sdh): fix param type if heterogeneous arrays ever supported.\n var PolyfillSet = function(opt_iterable) {\n /** @private @const {!Map} */\n this.map_ = new Map();\n if (opt_iterable) {\n var iter = $jscomp.makeIterator(opt_iterable);\n var entry;\n while (!(entry = iter.next()).done) {\n var item = /** @type {!IIterableResult} */ (entry).value;\n this.add(item);\n }\n }\n // Note: this property should not be changed. If we're willing to give up\n // ES3 support, we could define it as a property directly. It should be\n // marked readonly if such an annotation ever comes into existence.\n this.size = this.map_.size;\n };\n\n\n /** @override */\n PolyfillSet.prototype.add = function(value) {\n // normalize -0/+0 to +0\n value = value === 0 ? 0 : value;\n this.map_.set(value, value);\n this.size = this.map_.size;\n return this;\n };\n\n\n /** @override */\n PolyfillSet.prototype.delete = function(value) {\n var result = this.map_.delete(value);\n this.size = this.map_.size;\n return result;\n };\n\n\n /** @override */\n PolyfillSet.prototype.clear = function() {\n this.map_.clear();\n this.size = 0;\n };\n\n\n /** @override */\n PolyfillSet.prototype.has = function(value) {\n return this.map_.has(value);\n };\n\n\n /** @override */\n PolyfillSet.prototype.entries = function() {\n return this.map_.entries();\n };\n\n\n /** @override */\n PolyfillSet.prototype.values = function() {\n return this.map_.values();\n };\n\n\n /** @override */\n PolyfillSet.prototype.keys = PolyfillSet.prototype.values;\n\n\n /** @type {?} */ (PolyfillSet.prototype)[Symbol.iterator] =\n PolyfillSet.prototype.values;\n\n\n /** @override */\n PolyfillSet.prototype.forEach = function(callback, opt_thisArg) {\n var set = this;\n this.map_.forEach(function(value) {\n return callback.call(/** @type {?} */ (opt_thisArg), value, value, set);\n });\n };\n\n\n return PolyfillSet;\n}, 'es6', 'es3');\n", - "js/es6/string.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Brings in all ES6 String polyfills.\n * @suppress {uselessCode}\n */\n'require es6/string/codepointat';\n'require es6/string/endswith';\n'require es6/string/fromcodepoint';\n'require es6/string/includes';\n'require es6/string/padend';\n'require es6/string/padstart';\n'require es6/string/repeat';\n'require es6/string/startswith';\n'require es6/string/trimend';\n'require es6/string/trimstart';\n", -@@ -943,8 +943,8 @@ var pra={"externs/es3.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n - "js/es6/string/endswith.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.endsWith', function(orig) {\n if (orig) return orig;\n\n /**\n * Tests whether the string ends with a given substring.\n *\n *

Polyfills the instance method String.prototype.endsWith().\n *\n * @this {string}\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n */\n var polyfill = function(searchString, opt_position) {\n 'use strict';\n var string = $jscomp.checkStringArgs(this, searchString, 'endsWith');\n searchString = searchString + '';\n if (opt_position === void 0) opt_position = string.length;\n var i = Math.max(0, Math.min(opt_position | 0, string.length));\n var j = searchString.length;\n while (j > 0 && i > 0) {\n if (string[--i] != searchString[--j]) return false;\n }\n return j <= 0;\n };\nreturn polyfill;\n}, 'es6', 'es3');\n", +-"js/es6/reflect/apply.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.apply', function(orig) {\n if (orig) return orig;\n var apply = Function.prototype.apply;\n\n /**\n * Polyfill for Reflect.apply() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/apply\n *\n * Calls a target function with arguments as specified, just\n * as Function.prototype.apply.\n *\n * @param {function(this: THIS, ...*): RESULT} target The function to call.\n * @param {THIS} thisArg The 'this' argument.\n * @param {!Array} argList The arguments as a list.\n * @return {RESULT} The result of the function call.\n * @template THIS, RESULT\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(target, thisArg, argList) {\n return apply.call(target, thisArg, argList);\n };\n return polyfill;\n}, 'es6', 'es3');\n", ++"js/es6/reflect/apply.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.apply', function(orig) {\n if (orig) return orig;\n var apply = Function.prototype.apply;\n\n /**\n * Polyfill for Reflect.apply() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/apply\n *\n * Calls a target function with arguments as specified, just\n * as Function.prototype.apply.\n *\n * @param {function(this: THIS, ...*): RESULT} target The function to call.\n * @param {THIS} thisArg The 'this' argument.\n * @param {!Array} argList The arguments as a list.\n * @return {RESULT} The result of the function call.\n * @template THIS, RESULT\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(target, thisArg, argList) {\n return apply.call(target, thisArg, argList);\n };\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/reflect/construct.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n\n'require es6/util/construct';\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n$jscomp.polyfill('Reflect.construct', function(orig) {\n // NOTE: This is just Reflect.construct if it's present and functional.\n return $jscomp.construct;\n}, 'es6', 'es3');\n", +-"js/es6/reflect/defineproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.defineProperty', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.defineProperty() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty\n *\n * Version of Object.defineProperty that returns a boolean.\n *\n * @param {!Object} target Target on which to define the property.\n * @param {string} propertyKey Name of the property to define.\n * @param {!ObjectPropertyDescriptor} attributes Property attributes.\n * @return {boolean} Whether the property was defined.\n */\n var polyfill = function(target, propertyKey, attributes) {\n try {\n Object.defineProperty(target, propertyKey, attributes);\n var desc = Object.getOwnPropertyDescriptor(target, propertyKey);\n if (!desc) return false;\n return desc.configurable === (attributes.configurable || false) &&\n desc.enumerable === (attributes.enumerable || false) &&\n ('value' in desc ?\n desc.value === attributes.value &&\n desc.writable === (attributes.writable || false) :\n desc.get === attributes.get &&\n desc.set === attributes.set);\n } catch (err) {\n return false;\n }\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: Requires Object.defineProperty\n", +-"js/es6/reflect/deleteproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.deleteProperty', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.deleteProperty() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty\n *\n * Applies the 'delete' operator as a function.\n *\n * @param {!Object} target Target on which to delete the property.\n * @param {string} propertyKey Name of the property to delete.\n * @return {boolean} Whether the property was deleted.\n */\n var polyfill = function(target, propertyKey) {\n if (!$jscomp.owns(target, propertyKey)) {\n return true;\n }\n try {\n return delete target[propertyKey];\n } catch (err) {\n return false;\n }\n };\n return polyfill;\n}, 'es6', 'es3');\n", +-"js/es6/reflect/get.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/finddescriptor';\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.get', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.get() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get\n *\n * Applies the 'getprop' operator as a function.\n *\n * @param {!Object} target Target on which to get the property.\n * @param {string} propertyKey Name of the property to get.\n * @param {!Object=} opt_receiver An optional 'this' to use for a getter.\n * @return {*} The value of the property.\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(target, propertyKey, opt_receiver) {\n if (arguments.length <= 2) {\n return target[propertyKey];\n }\n var property = $jscomp.findDescriptor(target, propertyKey);\n if (property) {\n return property.get ? property.get.call(opt_receiver) : property.value;\n }\n return undefined;\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: findDescriptor requires getPrototypeOf\n", ++"js/es6/reflect/defineproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.defineProperty', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.defineProperty() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty\n *\n * Version of Object.defineProperty that returns a boolean.\n *\n * @param {!Object} target Target on which to define the property.\n * @param {string} propertyKey Name of the property to define.\n * @param {!ObjectPropertyDescriptor} attributes Property attributes.\n * @return {boolean} Whether the property was defined.\n */\n var polyfill = function(target, propertyKey, attributes) {\n try {\n Object.defineProperty(target, propertyKey, attributes);\n var desc = Object.getOwnPropertyDescriptor(target, propertyKey);\n if (!desc) return false;\n return desc.configurable === (attributes.configurable || false) &&\n desc.enumerable === (attributes.enumerable || false) &&\n ('value' in desc ?\n desc.value === attributes.value &&\n desc.writable === (attributes.writable || false) :\n desc.get === attributes.get &&\n desc.set === attributes.set);\n } catch (err) {\n return false;\n }\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: Requires Object.defineProperty\n", ++"js/es6/reflect/deleteproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.deleteProperty', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.deleteProperty() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty\n *\n * Applies the 'delete' operator as a function.\n *\n * @param {!Object} target Target on which to delete the property.\n * @param {string} propertyKey Name of the property to delete.\n * @return {boolean} Whether the property was deleted.\n */\n var polyfill = function(target, propertyKey) {\n if (!$jscomp.owns(target, propertyKey)) {\n return true;\n }\n try {\n return delete target[propertyKey];\n } catch (err) {\n return false;\n }\n };\n return polyfill;\n}, 'es6', 'es3');\n", ++"js/es6/reflect/get.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/finddescriptor';\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.get', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.get() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get\n *\n * Applies the 'getprop' operator as a function.\n *\n * @param {!Object} target Target on which to get the property.\n * @param {string} propertyKey Name of the property to get.\n * @param {!Object=} opt_receiver An optional 'this' to use for a getter.\n * @return {*} The value of the property.\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(target, propertyKey, opt_receiver) {\n if (arguments.length <= 2) {\n return target[propertyKey];\n }\n var property = $jscomp.findDescriptor(target, propertyKey);\n if (property) {\n return property.get ? property.get.call(opt_receiver) : property.value;\n }\n return undefined;\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: findDescriptor requires getPrototypeOf\n", + "js/es6/reflect/getownpropertydescriptor.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.getOwnPropertyDescriptor', function(orig) {\n // NOTE: We don't make guarantees about correct throwing behavior.\n // Non-object arguments should be prevented by the type checker.\n return orig || Object.getOwnPropertyDescriptor;\n}, 'es6', 'es5'); // ES5: Requires Object.getOwnPropertyDescriptor\n", + "js/es6/reflect/getprototypeof.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.getPrototypeOf', function(orig) {\n // NOTE: We don't make guarantees about correct throwing behavior.\n // Non-object arguments should be prevented by the type checker.\n return orig || Object.getPrototypeOf;\n}, 'es6', 'es5'); // ES5: Requires Object.getPrototypeOf\n", +-"js/es6/reflect/has.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.has', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.has() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/has\n *\n * Applies the 'in' operator as a function.\n *\n * @param {!Object} target\n * @param {*} propertyKey\n * @return {boolean}\n */\n var polyfill = function(target, propertyKey) {\n return propertyKey in target;\n };\n return polyfill;\n}, 'es6', 'es3');\n", ++"js/es6/reflect/has.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.has', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.has() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/has\n *\n * Applies the 'in' operator as a function.\n *\n * @param {!Object} target\n * @param {*} propertyKey\n * @return {boolean}\n */\n var polyfill = function(target, propertyKey) {\n return propertyKey in target;\n };\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/reflect/isextensible.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/defines';\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.isExtensible', function(orig) {\n if (orig) return orig;\n if ($jscomp.ASSUME_ES5 || typeof Object.isExtensible == 'function') {\n return Object.isExtensible;\n }\n return function() { return true; };\n}, 'es6', 'es3');\n", +-"js/es6/reflect/ownkeys.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/reflect/reflect';\n'require es6/object/getownpropertysymbols';\n\n\n$jscomp.polyfill('Reflect.ownKeys',\n /**\n * @param {*} orig\n * @return {*}\n * @suppress {reportUnknownTypes}\n */\n function(orig) {\n if (orig) return orig;\n\n var symbolPrefix = 'jscomp_symbol_';\n function isSymbol(key) {\n return key.substring(0, symbolPrefix.length) == symbolPrefix;\n }\n\n /**\n * Polyfill for Reflect.ownKeys() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys\n *\n * Returns an array of the object's own property keys.\n *\n * @param {!Object} target\n * @return {!Array<(string|symbol)>}\n */\n var polyfill = function(target) {\n var keys = [];\n var names = Object.getOwnPropertyNames(target);\n var symbols = Object.getOwnPropertySymbols(target);\n for (var i = 0; i < names.length; i++) {\n (isSymbol(names[i]) ? symbols : keys).push(names[i]);\n }\n return keys.concat(symbols);\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: Requires Object.getOwnPropertyNames\n", +-"js/es6/reflect/preventextensions.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/defines';\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.preventExtensions', function(orig) {\n if (orig) return orig;\n\n if (!($jscomp.ASSUME_ES5 || typeof Object.preventExtensions == 'function')) {\n return function() { return false; };\n }\n\n /**\n * Polyfill for Reflect.preventExtensions() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions\n *\n * Same function as Object.preventExtensions (the spec says\n * to throw if the input is not an object, but jscompiler will\n * fail to typecheck, so there's no reason to distinguish here).\n *\n * @param {!Object} target\n * @return {boolean}\n */\n var polyfill = function(target) {\n Object.preventExtensions(target);\n return !Object.isExtensible(target);\n };\n return polyfill;\n}, 'es6', 'es3');\n", ++"js/es6/reflect/ownkeys.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/reflect/reflect';\n'require es6/object/getownpropertysymbols';\n\n\n$jscomp.polyfill('Reflect.ownKeys',\n /**\n * @param {*} orig\n * @return {*}\n * @suppress {reportUnknownTypes}\n */\n function(orig) {\n if (orig) return orig;\n\n var symbolPrefix = 'jscomp_symbol_';\n function isSymbol(key) {\n return key.substring(0, symbolPrefix.length) == symbolPrefix;\n }\n\n /**\n * Polyfill for Reflect.ownKeys() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys\n *\n * Returns an array of the object's own property keys.\n *\n * @param {!Object} target\n * @return {!Array<(string|symbol)>}\n */\n var polyfill = function(target) {\n var keys = [];\n var names = Object.getOwnPropertyNames(target);\n var symbols = Object.getOwnPropertySymbols(target);\n for (var i = 0; i < names.length; i++) {\n (isSymbol(names[i]) ? symbols : keys).push(names[i]);\n }\n return keys.concat(symbols);\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: Requires Object.getOwnPropertyNames\n", ++"js/es6/reflect/preventextensions.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/defines';\n'require util/polyfill';\n'require es6/reflect/reflect';\n\n\n$jscomp.polyfill('Reflect.preventExtensions', function(orig) {\n if (orig) return orig;\n\n if (!($jscomp.ASSUME_ES5 || typeof Object.preventExtensions == 'function')) {\n return function() { return false; };\n }\n\n /**\n * Polyfill for Reflect.preventExtensions() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions\n *\n * Same function as Object.preventExtensions (the spec says\n * to throw if the input is not an object, but jscompiler will\n * fail to typecheck, so there's no reason to distinguish here).\n *\n * @param {!Object} target\n * @return {boolean}\n */\n var polyfill = function(target) {\n Object.preventExtensions(target);\n return !Object.isExtensible(target);\n };\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/reflect/reflect.js":"/*\n * Copyright 2020 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n// This must execute before any Reflect.* static method polyfills.\n$jscomp.polyfill('Reflect', function(orig) {\n if (orig) return orig;\n return {};\n}, 'es6', 'es3');\n", +-"js/es6/reflect/set.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/isextensible';\n'require es6/reflect/reflect';\n'require util/finddescriptor';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.set', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.set() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set\n *\n * Applies the 'setprop' operator as a function.\n *\n * @param {!Object} target Target on which to get the property.\n * @param {string} propertyKey Name of the property to get.\n * @param {*} value Value to set.\n * @param {!Object=} opt_receiver An optional 'this' to use for a setter.\n * @return {boolean} Whether setting was successful.\n */\n var polyfill = function(target, propertyKey, value, opt_receiver) {\n var property = $jscomp.findDescriptor(target, propertyKey);\n if (!property) {\n if (Reflect.isExtensible(target)) {\n target[propertyKey] = value;\n return true;\n }\n return false;\n }\n if (property.set) {\n property.set.call(arguments.length > 3 ? opt_receiver : target, value);\n return true;\n } else if (property.writable && !Object.isFrozen(target)) {\n target[propertyKey] = value;\n return true;\n }\n return false;\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: findDescriptor requires getPrototypeOf\n", ++"js/es6/reflect/set.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/isextensible';\n'require es6/reflect/reflect';\n'require util/finddescriptor';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.set', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.set() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set\n *\n * Applies the 'setprop' operator as a function.\n *\n * @param {!Object} target Target on which to get the property.\n * @param {string} propertyKey Name of the property to get.\n * @param {*} value Value to set.\n * @param {!Object=} opt_receiver An optional 'this' to use for a setter.\n * @return {boolean} Whether setting was successful.\n */\n var polyfill = function(target, propertyKey, value, opt_receiver) {\n var property = $jscomp.findDescriptor(target, propertyKey);\n if (!property) {\n if (Reflect.isExtensible(target)) {\n target[propertyKey] = value;\n return true;\n }\n return false;\n }\n if (property.set) {\n property.set.call(arguments.length > 3 ? opt_receiver : target, value);\n return true;\n } else if (property.writable && !Object.isFrozen(target)) {\n target[propertyKey] = value;\n return true;\n }\n return false;\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: findDescriptor requires getPrototypeOf\n", + "js/es6/reflect/setprototypeof.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/polyfill';\n'require es6/reflect/reflect';\n'require es6/util/setprototypeof';\n\n\n$jscomp.polyfill(\n 'Reflect.setPrototypeOf',\n /**\n * These annotations are intended to match the signature of\n * $jscomp.polyfill(). Being more specific makes the compiler unhappy.\n * @suppress {reportUnknownTypes}\n * @param {?*} orig\n * @return {*}\n */\n function(orig) {\n if (orig) {\n return orig;\n } else if ($jscomp.setPrototypeOf) {\n /** @const {!function(!Object,?Object):!Object} */\n var setPrototypeOf = $jscomp.setPrototypeOf;\n /**\n * @param {!Object} target\n * @param {?Object} proto\n * @return {boolean}\n */\n var polyfill = function(target, proto) {\n try {\n setPrototypeOf(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n };\n return polyfill;\n } else {\n // it isn't possible to implement this method\n return null;\n }\n },\n 'es6', 'es5');\n", + "js/es6/set.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/conformance';\n'require es6/map';\n'require es6/symbol';\n'require util/defines';\n'require util/polyfill';\n\n$jscomp.polyfill('Set',\n /**\n * @param {*} NativeSet\n * @return {*}\n * @suppress {reportUnknownTypes}\n */\n function(NativeSet) {\n\n /**\n * Checks conformance of the existing Set.\n * @return {boolean} True if the browser's implementation conforms.\n * @suppress {missingProperties} \"entries\" unknown prototype\n */\n function isConformant() {\n if ($jscomp.ASSUME_NO_NATIVE_SET ||\n !NativeSet ||\n typeof NativeSet != \"function\" ||\n !NativeSet.prototype.entries ||\n typeof Object.seal != 'function') {\n return false;\n }\n // Some implementations don't support constructor arguments.\n try {\n NativeSet = /** @type {function(new: Set, !Iterator=)} */ (NativeSet);\n var value = Object.seal({x: 4});\n var set = new NativeSet($jscomp.makeIterator([value]));\n if (!set.has(value) || set.size != 1 || set.add(value) != set ||\n set.size != 1 || set.add({x: 4}) != set || set.size != 2) {\n return false;\n }\n var iter = set.entries();\n var item = iter.next();\n if (item.done || item.value[0] != value || item.value[1] != value) {\n return false;\n }\n item = iter.next();\n if (item.done || item.value[0] == value || item.value[0].x != 4 ||\n item.value[1] != item.value[0]) {\n return false;\n }\n return iter.next().done;\n } catch (err) { // This should hopefully never happen, but let's be safe.\n return false;\n }\n }\n\n if ($jscomp.USE_PROXY_FOR_ES6_CONFORMANCE_CHECKS) {\n if (NativeSet && $jscomp.ES6_CONFORMANCE) return NativeSet;\n } else {\n if (isConformant()) return NativeSet;\n }\n\n /**\n * Polyfill for the global Map data type.\n * @constructor\n * @struct\n * @extends {Set}\n * @implements {Iterable}\n * @template KEY, VALUE\n * @param {!Iterable|!Array|null=} opt_iterable\n * Optional data to populate the set.\n */\n // TODO(sdh): fix param type if heterogeneous arrays ever supported.\n var PolyfillSet = function(opt_iterable) {\n /** @private @const {!Map} */\n this.map_ = new Map();\n if (opt_iterable) {\n var iter = $jscomp.makeIterator(opt_iterable);\n var entry;\n while (!(entry = iter.next()).done) {\n var item = /** @type {!IIterableResult} */ (entry).value;\n this.add(item);\n }\n }\n // Note: this property should not be changed. If we're willing to give up\n // ES3 support, we could define it as a property directly. It should be\n // marked readonly if such an annotation ever comes into existence.\n this.size = this.map_.size;\n };\n\n\n /** @override */\n PolyfillSet.prototype.add = function(value) {\n // normalize -0/+0 to +0\n value = value === 0 ? 0 : value;\n this.map_.set(value, value);\n this.size = this.map_.size;\n return this;\n };\n\n\n /** @override */\n PolyfillSet.prototype.delete = function(value) {\n var result = this.map_.delete(value);\n this.size = this.map_.size;\n return result;\n };\n\n\n /** @override */\n PolyfillSet.prototype.clear = function() {\n this.map_.clear();\n this.size = 0;\n };\n\n\n /** @override */\n PolyfillSet.prototype.has = function(value) {\n return this.map_.has(value);\n };\n\n\n /** @override */\n PolyfillSet.prototype.entries = function() {\n return this.map_.entries();\n };\n\n\n /** @override */\n PolyfillSet.prototype.values = function() {\n return this.map_.values();\n };\n\n\n /** @override */\n PolyfillSet.prototype.keys = PolyfillSet.prototype.values;\n\n\n /** @type {?} */ (PolyfillSet.prototype)[Symbol.iterator] =\n PolyfillSet.prototype.values;\n\n\n /** @override */\n PolyfillSet.prototype.forEach = function(callback, opt_thisArg) {\n var set = this;\n this.map_.forEach(function(value) {\n return callback.call(/** @type {?} */ (opt_thisArg), value, value, set);\n });\n };\n\n\n return PolyfillSet;\n}, 'es6', 'es3');\n", + "js/es6/string.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Brings in all ES6 String polyfills.\n * @suppress {uselessCode}\n */\n'require es6/string/codepointat';\n'require es6/string/endswith';\n'require es6/string/fromcodepoint';\n'require es6/string/includes';\n'require es6/string/matchall';\n'require es6/string/padend';\n'require es6/string/padstart';\n'require es6/string/raw';\n'require es6/string/repeat';\n'require es6/string/replaceall';\n'require es6/string/startswith';\n'require es6/string/trimend';\n'require es6/string/trimstart';\n", +@@ -1496,9 +1496,9 @@ var mXa={"js/base.js":'/*\n * Copyright 2012 The Closure Compiler Authors.\n *\n "js/es6/string/fromcodepoint.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('String.fromCodePoint', function(orig) {\n if (orig) return orig;\n\n /**\n * Creates a new string from the given codepoints.\n *\n *

Polyfills the static function String.fromCodePoint().\n *\n * @param {...number} var_args\n * @return {string}\n */\n var polyfill = function(var_args) {\n // Note: this is taken from v8's harmony-string.js StringFromCodePoint.\n var result = '';\n for (var i = 0; i < arguments.length; i++) {\n var code = Number(arguments[i]);\n if (code < 0 || code > 0x10FFFF || code !== Math.floor(code)) {\n throw new RangeError('invalid_code_point ' + code);\n }\n if (code <= 0xFFFF) {\n result += String.fromCharCode(code);\n } else {\n code -= 0x10000;\n result += String.fromCharCode((code >>> 10) & 0x3FF | 0xD800);\n result += String.fromCharCode(code & 0x3FF | 0xDC00);\n }\n }\n return result;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", "js/es6/string/includes.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.includes', function(orig) {\n if (orig) return orig;\n\n /**\n * Searches for a substring, starting at the given position.\n *\n *

Polyfills the instance method String.prototype.includes().\n *\n * @this {string}\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n */\n var polyfill = function(searchString, opt_position) {\n 'use strict';\n var string = $jscomp.checkStringArgs(this, searchString, 'includes');\n return string.indexOf(searchString, opt_position || 0) !== -1;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/string/matchall.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require es6/symbol';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.matchAll', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an iterator of all results matching a string against a\n * regular expression, including capturing groups.\n *\n * Polyfills the instance method String.prototype.matchAll().\n *\n * The spec calls for any non-RegExp object to be automatically converted,\n * so we accept anything here, even though our externs only allow\n * RegExp|string.\n *\n * @this {string}\n * @param {*} regexp\n * A regular expression object. If a non-RegExp object obj is passed,\n * it is implicitly converted to a RegExp with a global tag by using\n * new RegExp(obj).\n * @return {!IteratorIterable}\n */\n var polyfill = function(regexp) {\n if (regexp instanceof RegExp && !regexp.global) {\n throw new TypeError('RegExp passed into String.prototype.matchAll() must have global tag.');\n }\n var /** !RegExp */ regexCopy =\n new RegExp(regexp, regexp instanceof RegExp ? undefined : 'g');\n var matchString = this;\n var /** boolean */ finished = false;\n var matchAllIterator = {\n next: function() {\n if (finished) {\n return {value: undefined, done: true};\n }\n\n var match = regexCopy.exec(matchString);\n if (!match) {\n finished = true;\n return {value: undefined, done: true};\n }\n if (match[0] === '') {\n /**\n * See https://262.ecma-international.org/10.0/#sec-advancestringindex\n * and\n * https://github.com/ljharb/String.prototype.matchAll/blob/5e1a234e65d03e5312ea1d3cb617444f4ffa6e23/helpers/RegExpStringIterator.js#L71\n *\n * matchAll() is not allowed to get \"stuck\" returning an empty\n * string match infinitely, so we must make sure lastIndex always\n * increases.\n *\n * Also assume that `fullUnicode === false`. Any browser that supports\n * unicode regexes should not need this polyfill.\n */\n regexCopy.lastIndex += 1;\n }\n\n return {value: match, done: false};\n }\n };\n matchAllIterator[Symbol.iterator] = function() { return matchAllIterator; };\n return /**@type {!IteratorIterable}> */ (matchAllIterator);\n };\n return polyfill;\n}, 'es_2020', 'es3');\n", -"js/es6/string/padend.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/stringpadding';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.padEnd', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills String.prototype.padEnd.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd\n *\n * @this {string}\n * @param {number} targetLength\n * @param {string=} opt_padString\n * @return {string}\n */\n var padEnd = function(targetLength, opt_padString) {\n var string = $jscomp.checkStringArgs(this, null, 'padStart');\n var padLength = targetLength - string.length;\n return string + $jscomp.stringPadding(opt_padString, padLength);\n };\n\n return padEnd;\n}, 'es8', 'es3');\n", -"js/es6/string/padstart.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n'require util/stringpadding';\n\n$jscomp.polyfill('String.prototype.padStart', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills String.prototype.padStart.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart\n *\n * @this {string}\n * @param {number} targetLength\n * @param {string=} opt_padString\n * @return {string}\n */\n var padStart = function(targetLength, opt_padString) {\n var string = $jscomp.checkStringArgs(this, null, 'padStart');\n var padLength = targetLength - string.length;\n return $jscomp.stringPadding(opt_padString, padLength) + string;\n };\n\n return padStart;\n}, 'es8', 'es3');\n", +-"js/es6/string/raw.js":"/*\n * Copyright 2021 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview String.raw polyfill.\n * @suppress {uselessCode}\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('String.raw', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills String.raw.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw\n *\n * @param {!ITemplateArray} strings List of string fragments to concatenate.\n * @param {...*} var_args Values to go between string fragments.\n * @return {string}\n */\n const stringRaw = function(strings, var_args) {\n if (strings == null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n const raw = strings.raw;\n const rawlen = raw.length;\n let result = \"\";\n for (let i = 0; i < rawlen; ++i) {\n result += raw[i];\n if ((i + 1) < rawlen && (i + 1) < arguments.length) {\n result += String(arguments[i+1]);\n }\n }\n return result;\n };\n\n return stringRaw;\n}, 'es6', 'es3');\n", +"js/es6/string/padend.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/stringpadding';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.padEnd', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills String.prototype.padEnd.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd\n *\n * @this {string}\n * @param {number} targetLength\n * @param {string=} opt_padString\n * @return {string}\n */\n var padEnd = function(targetLength, opt_padString) {\n var string = $jscomp.checkStringArgs(this, null, 'padStart');\n var padLength = targetLength - string.length;\n return string + $jscomp.stringPadding(opt_padString, padLength);\n };\n\n return padEnd;\n}, 'es8', 'es3');\n", +"js/es6/string/padstart.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n'require util/stringpadding';\n\n$jscomp.polyfill('String.prototype.padStart', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills String.prototype.padStart.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart\n *\n * @this {string}\n * @param {number} targetLength\n * @param {string=} opt_padString\n * @return {string}\n */\n var padStart = function(targetLength, opt_padString) {\n var string = $jscomp.checkStringArgs(this, null, 'padStart');\n var padLength = targetLength - string.length;\n return $jscomp.stringPadding(opt_padString, padLength) + string;\n };\n\n return padStart;\n}, 'es8', 'es3');\n", ++"js/es6/string/raw.js":"/*\n * Copyright 2021 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview String.raw polyfill.\n * @suppress {uselessCode}\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('String.raw', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills String.raw.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw\n *\n * @param {!ITemplateArray} strings List of string fragments to concatenate.\n * @param {...*} var_args Values to go between string fragments.\n * @return {string}\n */\n const stringRaw = function(strings, var_args) {\n if (strings == null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n const raw = strings.raw;\n const rawlen = raw.length;\n let result = \"\";\n for (let i = 0; i < rawlen; ++i) {\n result += raw[i];\n if ((i + 1) < rawlen && (i + 1) < arguments.length) {\n result += String(arguments[i+1]);\n }\n }\n return result;\n };\n\n return stringRaw;\n}, 'es6', 'es3');\n", "js/es6/string/repeat.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.repeat', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns a new string repeated the given number of times.\n *\n *

Polyfills the instance method String.prototype.repeat().\n *\n * @this {string}\n * @param {number} copies\n * @return {string}\n */\n var polyfill = function(copies) {\n 'use strict';\n var string = $jscomp.checkStringArgs(this, null, 'repeat');\n if (copies < 0 || copies > 0x4FFFFFFF) { // impose a 1GB limit\n throw new RangeError('Invalid count value');\n }\n copies = copies | 0; // cast to a signed integer.\n var result = '';\n while (copies) {\n if (copies & 1) result += string;\n if ((copies >>>= 1)) string += string;\n }\n return result;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/string/replaceall.js":"/*\n * Copyright 2021 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Creates polyfill for `String.prototype.replaceAll` being\n * added with ES2021. https://tc39.es/ecma262/#sec-string.prototype.replaceall\n * @suppress {uselessCode}\n */\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.replaceAll', function(orig) {\n if (orig) return orig;\n\n /**\n * Escapes characters in the string that are not safe to use in a RegExp.\n * @param {string|null} s\n * @return {string}\n */\n function regExpEscape(s) {\n return String(s)\n .replace(/([-()\\[\\]{}+?*.$\\^|,:#Polyfills the instance method String.prototype.startsWith().\n *\n * @this {string}\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n */\n var polyfill = function(searchString, opt_position) {\n 'use strict';\n var string = $jscomp.checkStringArgs(this, searchString, 'startsWith');\n searchString = searchString + '';\n var strLen = string.length;\n var searchLen = searchString.length;\n var i = Math.max(\n 0,\n Math.min(/** @type {number} */ (opt_position) | 0, string.length));\n var j = 0;\n while (j < searchLen && i < strLen) {\n if (string[i++] != searchString[j++]) return false;\n }\n return j >= searchLen;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", - "js/es6/string/trimend.js":"/*\n * Copyright 2019 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/polyfill';\n\n// Most browsers implemented trimRight around ES5-time-frame, but it wasn't\n// officially part of the language specification until ES_2019, so we have\n// to provide a polyfill for it.\n// IE11 doesn't have it, of course...\n$jscomp.polyfill('String.prototype.trimRight', function(orig) {\n /**\n * @this {string}\n * @return {string}\n */\n function polyfill() {\n return this.replace(/[\\s\\xa0]+$/, '');\n }\n return orig || polyfill;\n}, 'es_2019', 'es3');\n\n$jscomp.polyfill('String.prototype.trimEnd', function(orig) {\n return orig || String.prototype.trimRight;\n}, 'es_2019', 'es3');\n", -@@ -953,8 +953,8 @@ var pra={"externs/es3.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n +@@ -1511,7 +1511,7 @@ var mXa={"js/base.js":'/*\n * Copyright 2012 The Closure Compiler Authors.\n *\n "js/es6/util/arrayfromiterable.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Polyfill for array destructuring.\n */\n'require es6/util/makeiterator';\n'require es6/util/arrayfromiterator';\n\n\n/**\n * Copies the values from an Iterable into an Array.\n * @param {string|!Array|!Iterable|!Arguments} iterable\n * @return {!Array}\n * @template T\n */\n$jscomp.arrayFromIterable = function(iterable) {\n if (iterable instanceof Array) {\n return iterable;\n } else {\n return $jscomp.arrayFromIterator($jscomp.makeIterator(iterable));\n }\n};\n", "js/es6/util/arrayfromiterator.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Polyfill for array destructuring.\n */\n'require base';\n\n\n/**\n * Copies the values from an Iterator into an Array. The important difference\n * between this and $jscomp.arrayFromIterable is that if the iterator's\n * next() method has already been called one or more times, this method returns\n * only the values that haven't been yielded yet.\n * @param {!Iterator} iterator\n * @return {!Array}\n * @template T\n * @suppress {reportUnknownTypes}\n */\n$jscomp.arrayFromIterator = function(iterator) {\n var i;\n var arr = [];\n while (!(i = iterator.next()).done) {\n arr.push(i.value);\n }\n return arr;\n};\n", - "js/es6/util/arrayiterator.js":'/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Utility method for creating an iterator for Arrays.\n */\n\'require base\';\n\n/**\n * Returns an internal iterator from the given array.\n * @param {!Array} array\n * @return {function():!IIterableResult}\n * @template T\n */\n$jscomp.arrayIteratorImpl = function(array) {\n var index = 0;\n return function() {\n if (index < array.length) {\n return {\n done: false,\n value: array[index++],\n };\n } else {\n return {done: true};\n }\n };\n};\n\n/**\n * Returns an internal iterator from the given array.\n * @param {!Array} array\n * @return {!Iterator}\n * @template T\n */\n$jscomp.arrayIterator = function(array) {\n return /** @type {!Iterator} */ ({next: $jscomp.arrayIteratorImpl(array)});\n};\n\n', --"js/es6/util/assign.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/owns';\n\n/**\n * Equivalent to the Object.assign() method, but guaranteed to be available for use in code\n * generated by the compiler.\n *\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n *\n * Copies values of all enumerable own properties from one or more\n * sources to the given target object, and returns the target.\n *\n * @final\n * @param {!Object} target The target object onto which to copy.\n * @param {...?Object} var_args The source objects.\n * @return {!Object} The target object is returned.\n */\n$jscomp.assign = (typeof Object.assign == 'function') ?\n Object.assign :\n /**\n * @param {!Object} target\n * @param {...?Object} var_args\n * @return {!Object}\n * @suppress {reportUnknownTypes}\n */\n function(target, var_args) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n if (!source) continue;\n for (var key in source) {\n if ($jscomp.owns(source, key)) target[key] = source[key];\n }\n }\n return target;\n };\n", --"js/es6/util/construct.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n\n'require util/objectcreate';\n\n/**\n * Polyfill for Reflect.construct() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/construct\n *\n * Calls a constructor as with the 'new' operator.\n * TODO(sdh): how to type 'target' with (new: TARGET) if opt_newTarget missing?\n *\n * @param {function(new: ?, ...?)} target The constructor to call.\n * @param {!Array} argList The arguments as a list.\n * @param {function(new: TARGET, ...?)=} opt_newTarget The constructor to instantiate.\n * @return {TARGET} The result of the function call.\n * @template TARGET\n */\n$jscomp.construct = /** @type {function(): !Function} */ (function() {\n\n // Check for https://github.com/Microsoft/ChakraCore/issues/3217\n /** @return {boolean} */\n function reflectConstructWorks() {\n /** @constructor */ function Base() {}\n /** @constructor */ function Derived() {}\n new Base();\n Reflect.construct(Base, [], Derived);\n return new Base() instanceof Base;\n }\n\n if (typeof Reflect != 'undefined' && Reflect.construct) {\n if (reflectConstructWorks()) return Reflect.construct;\n var brokenConstruct = Reflect.construct;\n /**\n * @param {function(new: ?, ...?)} target The constructor to call.\n * @param {!Array} argList The arguments as a list.\n * @param {function(new: TARGET, ...?)=} opt_newTarget The constructor to instantiate.\n * @return {TARGET} The result of the function call.\n * @template TARGET\n * @suppress {reportUnknownTypes}\n */\n var patchedConstruct = function(target, argList, opt_newTarget) {\n var out = brokenConstruct(target, argList);\n if (opt_newTarget) Reflect.setPrototypeOf(out, opt_newTarget.prototype);\n return out;\n };\n return patchedConstruct;\n }\n\n /**\n * @param {function(new: ?, ...?)} target The constructor to call.\n * @param {!Array} argList The arguments as a list.\n * @param {function(new: TARGET, ...?)=} opt_newTarget The constructor to instantiate.\n * @return {TARGET} The result of the function call.\n * @template TARGET\n * @suppress {reportUnknownTypes}\n */\n function construct(target, argList, opt_newTarget) {\n if (opt_newTarget === undefined) opt_newTarget = target;\n var proto = opt_newTarget.prototype || Object.prototype;\n var obj = $jscomp.objectCreate(proto);\n var apply = Function.prototype.apply;\n var out = apply.call(target, obj, argList);\n return out || obj;\n }\n return construct;\n})();\n", -+"js/es6/util/assign.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/owns';\n\n/**\n * Equivalent to the Object.assign() method, but guaranteed to be available for use in code\n * generated by the compiler.\n *\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n *\n * Copies values of all enumerable own properties from one or more\n * sources to the given target object, and returns the target.\n *\n * @final\n * @param {!Object} target The target object onto which to copy.\n * @param {...?Object} var_args The source objects.\n * @return {!Object} The target object is returned.\n */\n$jscomp.assign = (typeof Object.assign == 'function') ?\n Object.assign :\n /**\n * @param {!Object} target\n * @param {...?Object} var_args\n * @return {!Object}\n * @suppress {reportUnknownTypes}\n */\n function(target, var_args) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n if (!source) continue;\n for (var key in source) {\n if ($jscomp.owns(source, key)) target[key] = source[key];\n }\n }\n return target;\n };\n", -+"js/es6/util/construct.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n\n'require util/objectcreate';\n\n/**\n * Polyfill for Reflect.construct() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/construct\n *\n * Calls a constructor as with the 'new' operator.\n * TODO(sdh): how to type 'target' with (new: TARGET) if opt_newTarget missing?\n *\n * @param {function(new: ?, ...?)} target The constructor to call.\n * @param {!Array} argList The arguments as a list.\n * @param {function(new: TARGET, ...?)=} opt_newTarget The constructor to instantiate.\n * @return {TARGET} The result of the function call.\n * @template TARGET\n */\n$jscomp.construct = /** @type {function(): !Function} */ (function() {\n\n // Check for https://github.com/Microsoft/ChakraCore/issues/3217\n /** @return {boolean} */\n function reflectConstructWorks() {\n /** @constructor */ function Base() {}\n /** @constructor */ function Derived() {}\n new Base();\n Reflect.construct(Base, [], Derived);\n return new Base() instanceof Base;\n }\n\n if (typeof Reflect != 'undefined' && Reflect.construct) {\n if (reflectConstructWorks()) return Reflect.construct;\n var brokenConstruct = Reflect.construct;\n /**\n * @param {function(new: ?, ...?)} target The constructor to call.\n * @param {!Array} argList The arguments as a list.\n * @param {function(new: TARGET, ...?)=} opt_newTarget The constructor to instantiate.\n * @return {TARGET} The result of the function call.\n * @template TARGET\n * @suppress {reportUnknownTypes}\n */\n var patchedConstruct = function(target, argList, opt_newTarget) {\n var out = brokenConstruct(target, argList);\n if (opt_newTarget) Reflect.setPrototypeOf(out, opt_newTarget.prototype);\n return out;\n };\n return patchedConstruct;\n }\n\n /**\n * @param {function(new: ?, ...?)} target The constructor to call.\n * @param {!Array} argList The arguments as a list.\n * @param {function(new: TARGET, ...?)=} opt_newTarget The constructor to instantiate.\n * @return {TARGET} The result of the function call.\n * @template TARGET\n * @suppress {reportUnknownTypes}\n */\n function construct(target, argList, opt_newTarget) {\n if (opt_newTarget === undefined) opt_newTarget = target;\n var proto = opt_newTarget.prototype || Object.prototype;\n var obj = $jscomp.objectCreate(proto);\n var apply = Function.prototype.apply;\n var out = apply.call(target, obj, argList);\n return out || obj;\n }\n return construct;\n})();\n", + "js/es6/util/arrayiterator.js":'/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Utility method for creating an iterator for Arrays.\n */\n\'require base\';\n\n/**\n * Returns an internal iterator from the given array.\n * @param {!IArrayLike} array\n * @return {function():!IIterableResult}\n * @template T\n */\n$jscomp.arrayIteratorImpl = function(array) {\n var index = 0;\n return function() {\n if (index < array.length) {\n return {\n done: false,\n value: array[index++],\n };\n } else {\n return {done: true};\n }\n };\n};\n\n/**\n * Returns an internal iterator from the given array.\n * @param {!Array} array\n * @return {!Iterator}\n * @template T\n */\n$jscomp.arrayIterator = function(array) {\n return /** @type {!Iterator} */ ({next: $jscomp.arrayIteratorImpl(array)});\n};\n\n', +-"js/es6/util/assign.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/owns';\n'require util/polyfill';\n'require util/shouldpolyfill';\n\n/**\n * Equivalent to the Object.assign() method, but guaranteed to be available for use in code\n * generated by the compiler.\n *\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n *\n * Copies values of all enumerable own properties from one or more\n * sources to the given target object, and returns the target.\n *\n * @final\n * @param {!Object} target The target object onto which to copy.\n * @param {...?Object} var_args The source objects.\n * @return {!Object} The target object is returned.\n */\n$jscomp.assign =\n ($jscomp.TRUST_ES6_POLYFILLS && typeof Object.assign == 'function') ?\n Object.assign :\n /**\n * @param {!Object} target\n * @param {...?Object} var_args\n * @return {!Object}\n * @suppress {reportUnknownTypes}\n */\n function(target, var_args) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n if (!source) continue;\n for (var key in source) {\n if ($jscomp.owns(source, key)) target[key] = source[key];\n }\n }\n return target;\n };\n", ++"js/es6/util/assign.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/owns';\n'require util/polyfill';\n'require util/shouldpolyfill';\n\n/**\n * Equivalent to the Object.assign() method, but guaranteed to be available for use in code\n * generated by the compiler.\n *\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n *\n * Copies values of all enumerable own properties from one or more\n * sources to the given target object, and returns the target.\n *\n * @final\n * @param {!Object} target The target object onto which to copy.\n * @param {...?Object} var_args The source objects.\n * @return {!Object} The target object is returned.\n */\n$jscomp.assign =\n ($jscomp.TRUST_ES6_POLYFILLS && typeof Object.assign == 'function') ?\n Object.assign :\n /**\n * @param {!Object} target\n * @param {...?Object} var_args\n * @return {!Object}\n * @suppress {reportUnknownTypes}\n */\n function(target, var_args) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n if (!source) continue;\n for (var key in source) {\n if ($jscomp.owns(source, key)) target[key] = source[key];\n }\n }\n return target;\n };\n", + "js/es6/util/construct.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n\n'require util/objectcreate';\n'require util/polyfill';\n'require util/shouldpolyfill';\n\n/**\n * Find or create a method that implements the behavior of `Reflect.construct`.\n *\n * @return {!Function}\n */\n$jscomp.getConstructImplementation = function() {\n // Check for https://github.com/Microsoft/ChakraCore/issues/3217\n /** @return {boolean} */\n function reflectConstructWorks() {\n /** @constructor */ function Base() {}\n /** @constructor */ function Derived() {}\n new Base();\n Reflect.construct(Base, [], Derived);\n return new Base() instanceof Base;\n }\n\n if ($jscomp.TRUST_ES6_POLYFILLS && typeof Reflect != 'undefined' &&\n Reflect.construct) {\n if (reflectConstructWorks()) return Reflect.construct;\n var brokenConstruct = Reflect.construct;\n /**\n * @param {function(new: ?, ...?)} target The constructor to call.\n * @param {!Array} argList The arguments as a list.\n * @param {function(new: TARGET, ...?)=} opt_newTarget The constructor to\n * instantiate.\n * @return {TARGET} The result of the function call.\n * @template TARGET\n * @suppress {reportUnknownTypes}\n */\n var patchedConstruct = function(target, argList, opt_newTarget) {\n var out = brokenConstruct(target, argList);\n if (opt_newTarget) Reflect.setPrototypeOf(out, opt_newTarget.prototype);\n return out;\n };\n return patchedConstruct;\n }\n\n /**\n * @param {function(new: ?, ...?)} target The constructor to call.\n * @param {!Array} argList The arguments as a list.\n * @param {function(new: TARGET, ...?)=} opt_newTarget The constructor to\n * instantiate.\n * @return {TARGET} The result of the function call.\n * @template TARGET\n * @suppress {reportUnknownTypes}\n */\n function construct(target, argList, opt_newTarget) {\n if (opt_newTarget === undefined) opt_newTarget = target;\n var proto = opt_newTarget.prototype || Object.prototype;\n var obj = $jscomp.objectCreate(proto);\n var apply = Function.prototype.apply;\n var out = apply.call(target, obj, argList);\n return out || obj;\n }\n return construct;\n};\n\n/**\n * Polyfill for Reflect.construct() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/construct\n *\n * The call to `$jscomp.getConstructImplementation()` is wrapped up as an object\n * literal `valueOf()` call in order to hide the (meaningless) side-effects\n * it contains that would otherwise prevent its definition from being removed,\n * even when nothing refers to `$jscomp.construct`.\n * @const\n */\n$jscomp.construct =\n /** @type {typeof Reflect.construct} */ (\n {valueOf: $jscomp.getConstructImplementation}.valueOf());\n", + "js/es6/util/createtemplatetagfirstarg.js":'/*\n * Copyright 2020 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Polyfill for a tagged template\'s argument\n * @suppress {uselessCode}\n */\n\'require base\';\n\n/**\n * Simply accepts an ITemplateArray and returns it after setting its raw\n * property\n * @param {!ITemplateArray} arrayStrings\n * @return {!ITemplateArray}\n * @noinline\n */\n$jscomp.createTemplateTagFirstArg = function(arrayStrings) {\n arrayStrings.raw = arrayStrings;\n return /** @type {!ITemplateArray} */ (arrayStrings);\n};\n\n/**\n * Simply accepts an ITemplateArray and returns it after setting its raw\n * property\n * @param {!ITemplateArray} arrayStrings\n * @param {!ITemplateArray} rawArrayStrings raw string values of arrayString\n * @return {!ITemplateArray}\n * @noinline\n */\n$jscomp.createTemplateTagFirstArgWithRaw = function(\n arrayStrings, rawArrayStrings) {\n arrayStrings.raw = rawArrayStrings;\n return /** @type {!ITemplateArray} */ (arrayStrings);\n};\n', "js/es6/util/inherits.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Polyfill for ES6 extends keyword.\n * @suppress {uselessCode}\n */\n'require base';\n'require util/objectcreate';\n'require es6/util/setprototypeof';\n\n\n/**\n * Inherit the prototype methods and static methods from one constructor\n * into another.\n *\n * This wires up the prototype chain (like goog.inherits) and copies static\n * properties, for ES6-to-ES{3,5} transpilation.\n *\n * Usage:\n *

\n *   function ParentClass() {}\n *\n *   // Regular method.\n *   ParentClass.prototype.foo = function(a) {};\n *\n *   // Static method.\n *   ParentClass.bar = function() {};\n *\n *   function ChildClass() {\n *     ParentClass.call(this);\n *   }\n *   $jscomp.inherits(ChildClass, ParentClass);\n *\n *   var child = new ChildClass();\n *   child.foo();\n *   ChildClass.bar();  // Static inheritance.\n * 
\n *\n * @param {!Function} childCtor Child class.\n * @param {!Function} parentCtor Parent class.\n * @suppress {strictMissingProperties} 'superClass_' is not defined on Function\n */\n$jscomp.inherits = function(childCtor, parentCtor) {\n childCtor.prototype = $jscomp.objectCreate(parentCtor.prototype);\n /** @override */ childCtor.prototype.constructor = childCtor;\n if ($jscomp.setPrototypeOf) {\n // avoid null dereference warning\n /** @const {!Function} */\n var setPrototypeOf = $jscomp.setPrototypeOf;\n setPrototypeOf(childCtor, parentCtor);\n } else {\n // setPrototypeOf is not available so we need to copy the static\n // methods to the child\n for (var p in parentCtor) {\n if (p == 'prototype') {\n // Don't copy parentCtor.prototype to childCtor.\n continue;\n }\n if (Object.defineProperties) {\n var descriptor = Object.getOwnPropertyDescriptor(parentCtor, p);\n if (descriptor) {\n Object.defineProperty(childCtor, p, descriptor);\n }\n } else {\n // Pre-ES5 browser. Just copy with an assignment.\n childCtor[p] = parentCtor[p];\n }\n }\n }\n\n childCtor.superClass_ = parentCtor.prototype;\n};\n", - "js/es6/util/iteratorfromarray.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Utilities for iterator-returning methods.\n */\n'require es6/symbol';\n\n\n/**\n * Creates an iterator from an array-like, with a transformation function.\n * @param {!IArrayLike} array\n * @param {function(number, INPUT): OUTPUT} transform\n * @return {!IteratorIterable}\n * @template INPUT, OUTPUT\n * @suppress {checkTypes|reportUnknownTypes}\n */\n$jscomp.iteratorFromArray = function(array, transform) {\n $jscomp.initSymbolIterator();\n // NOTE: IE8 doesn't support indexing from boxed Strings.\n if (array instanceof String) array = array + '';\n var i = 0;\n var iter = {\n next: function() {\n if (i < array.length) {\n var index = i++;\n return {value: transform(index, array[index]), done: false};\n }\n iter.next = function() { return {done: true, value: void 0}; };\n return iter.next();\n }\n };\n iter[Symbol.iterator] = function() { return iter; };\n return iter;\n};\n", - "js/es6/util/makeasynciterator.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Polyfill for for-of loops.\n */\n'require es6/symbol';\n'require es6/util/makeiterator';\n\n/**\n * Creates an iterator for the given iterable.\n *\n * @param {string|!AsyncIterable|!Iterable|!Iterator|!Arguments} iterable\n * @return {!AsyncIteratorIterable}\n * @template T\n * @suppress {reportUnknownTypes}\n */\n$jscomp.makeAsyncIterator = function(iterable) {\n $jscomp.initSymbolAsyncIterator();\n var asyncIteratorFunction = (iterable)[Symbol.asyncIterator];\n if (asyncIteratorFunction !== undefined) {\n return asyncIteratorFunction.call(iterable);\n }\n return new $jscomp.AsyncIteratorFromSyncWrapper($jscomp.makeIterator(\n /** @type {string|!Iterable|!Iterator|!Arguments} */\n (iterable)));\n};\n\n/**\n *\n * @param {!Iterator} iterator\n * @constructor\n * @implements {AsyncIteratorIterable}\n * @template T\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncIteratorFromSyncWrapper = function(iterator) {\n /**\n * @return {!AsyncIterator}\n */\n this[Symbol.asyncIterator] = function() {\n return this;\n };\n\n /**\n * @return {!Iterator>>}\n */\n this[Symbol.iterator] = function() {\n return iterator;\n };\n\n /**\n * @param {?=} param\n * @return {!Promise>}\n */\n this.next = function(param) {\n return Promise.resolve(iterator.next(param));\n };\n\n if (iterator['throw'] !== undefined) {\n /**\n * @param {?} param\n * @return {!Promise>}\n */\n this['throw'] = function(param) {\n return Promise.resolve(iterator['throw'](param));\n };\n }\n\n if (iterator['return'] !== undefined) {\n /**\n * @param {T} param\n * @return {!Promise>}\n */\n this['return'] = function(param) {\n return Promise.resolve(iterator['return'](param));\n };\n }\n};\n", -@@ -967,19 +967,19 @@ var pra={"externs/es3.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n +@@ -1526,12 +1526,12 @@ var mXa={"js/base.js":'/*\n * Copyright 2012 The Closure Compiler Authors.\n *\n "js/modules.js":'/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n\n\'require es6/modules/runtime\';\n', "js/runtime_type_check.js":"/*\n * Copyright 2010 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @fileoverview Provides the boilerplate code for run-time type checking.\n *\n *\n * @suppress {uselessCode} The require statements below are not useless.\n */\n'require base';\n\n/** @const */\n$jscomp.typecheck = {};\n\n/**\n * A state variable to suspend checking, to avoid infinite calls\n * caused by calling checked code from the checking functions.\n *\n * @type {boolean}\n */\n$jscomp.typecheck.suspendChecking = false;\n\n\n/**\n * Log and possibly format the run-time type check warning. This\n * function is customized at compile-time.\n *\n * @param {string} warning the warning to log.\n * @param {*} expr the faulty expression.\n */\n$jscomp.typecheck.log = function(warning, expr) {};\n\n/**\n * Checks that the given expression matches one of the given checkers,\n * logging if not, and returning the expression regardless.\n *\n * @param {*} expr the expression to check.\n * @param {!Array} checkers the checkers to\n * use in checking, one of these has to match for checking to succeed.\n * @return {*} the given expression back.\n */\n$jscomp.typecheck.checkType = function(expr, checkers) {\n if ($jscomp.typecheck.suspendChecking) {\n return expr;\n }\n $jscomp.typecheck.suspendChecking = true;\n\n for (var i = 0; i < checkers.length; i++) {\n var checker = checkers[i];\n var ok = checker.check(expr);\n if (ok) {\n $jscomp.typecheck.suspendChecking = false;\n return expr;\n }\n }\n\n var warning = $jscomp.typecheck.prettify_(expr) + ' not in ' +\n checkers.join(' ');\n\n $jscomp.typecheck.log(warning, expr);\n\n $jscomp.typecheck.suspendChecking = false;\n return expr;\n};\n\n\n/**\n * Prettify the given expression for printing.\n *\n * @param {*} expr the expression.\n * @return {string} a string representation of the given expression.\n * @private\n */\n$jscomp.typecheck.prettify_ = function(expr) {\n var className = $jscomp.typecheck.getClassName_(expr);\n if (className) {\n return className;\n }\n try {\n return String(expr);\n }\n catch (e) {}\n return '';\n};\n\n/**\n * Gets the class name if the given expression is an object.\n *\n * @param {*} expr the expression.\n * @return {string|undefined} the class name or undefined if the\n * expression is not an object.\n * @private\n * @suppress {strictMissingProperties}\n */\n$jscomp.typecheck.getClassName_ = function(expr) {\n var className = void 0;\n if (typeof expr == 'object' && expr && expr.constructor) {\n className = expr.constructor.name;\n if (!className) {\n var funNameRe = /function (.{1,})\\(/;\n var m = (funNameRe).exec(expr.constructor.toString());\n className = m && m.length > 1 ? m[1] : void 0;\n }\n }\n return className;\n};\n\n/**\n * Interface for all checkers.\n *\n * @interface\n */\n$jscomp.typecheck.Checker = function() {};\n\n\n/**\n * Checks the given expression.\n *\n * @param {*} expr the expression to check.\n * @return {boolean} whether the given expression matches this checker.\n */\n$jscomp.typecheck.Checker.prototype.check = function(expr) {};\n\n\n\n/**\n * A class for all value checkers, except the null checker.\n *\n * @param {string} type the value type (e.g. 'number') of this checker.\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.ValueChecker_ = function(type) {\n /**\n * The value type of this checker.\n * @type {string}\n * @private\n */\n this.type_ = type;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ValueChecker_.prototype.check = function(expr) {\n return typeof(expr) == this.type_;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ValueChecker_.prototype.toString = function() {\n return 'value(' + this.type_ + ')';\n};\n\n\n\n/**\n * A checker class for null values.\n *\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.NullChecker_ = function() {};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.NullChecker_.prototype.check = function(expr) {\n return expr === null;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.NullChecker_.prototype.toString = function() {\n return 'value(null)';\n};\n\n\n/**\n * A checker class for a class defined in externs, including built-in\n * JS types.\n *\n *

If the class type is undefined, then checking is suspended to\n * avoid spurious warnings. This is necessary because some externs\n * types are not defined in all browsers. For example, Window is not\n * defined Chrome, as window has the type DOMWindow.\n *\n *

Another subtlety is that a built-in type may be referenced in a\n * different frame than the one in which it was created. This causes\n * instanceOf to return false even though the object is of the correct\n * type. We work around this by checking as many windows as possible,\n * redefining open on top and window to keep track of them.\n *\n * @param {string} className the name of the extern class to check.\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.ExternClassChecker_ = function(className) {\n /**\n * The name of the extern class to check.\n * @type {string}\n * @private\n */\n this.className_ = className;\n};\n\n\n/**\n * A list of (hopefully all) open windows.\n *\n * @type {!Array}\n */\n$jscomp.typecheck.ExternClassChecker_.windows = [];\n\n\n/**\n * A list of the original open methods that have been redefined.\n *\n * @type {!Array}\n */\n$jscomp.typecheck.ExternClassChecker_.oldOpenFuns = [];\n\n\n/**\n * Redefines the open method on the given window, adding tracking.\n *\n * @param {!Window} win the window to track.\n * @suppress {uselessCode}\n */\n$jscomp.typecheck.ExternClassChecker_.trackOpenOnWindow = function(win) {\n // Declare the property we add to the window object.\n // NOTE: we add a declaration in a \"if (false) ...\" to ensure we\n // don't reference \"Window\" on platforms that don't have a global\n // Window object (node, service workers, etc).\n if (false) {\n /** @type {boolean} */\n Window.prototype.tracked;\n }\n\n if (win.tracked) {\n return;\n }\n\n win.tracked = true;\n\n var key = $jscomp.typecheck.ExternClassChecker_.oldOpenFuns.length;\n\n $jscomp.typecheck.ExternClassChecker_.oldOpenFuns.push(win.open);\n $jscomp.typecheck.ExternClassChecker_.windows.push(win);\n\n win.open = function() {\n var w = $jscomp.typecheck.ExternClassChecker_.oldOpenFuns[key].apply(\n this, arguments);\n $jscomp.typecheck.ExternClassChecker_.trackOpenOnWindow(w);\n return w;\n };\n};\n\n\n/**\n * Returns the global 'this' object. This will normally be the same as 'window'\n * but when running in a worker thread, the DOM is not available.\n *\n * This does not work when strict mode is enabled.\n *\n * @return {!Window}\n * @private\n */\n$jscomp.typecheck.ExternClassChecker_.getGlobalThis_ = function() {\n return (function() { return this; }).call(null);\n};\n\n\n// Install listeners on the global 'this' object.\n(function() {\n var globalThis = $jscomp.typecheck.ExternClassChecker_.getGlobalThis_();\n $jscomp.typecheck.ExternClassChecker_.trackOpenOnWindow(globalThis);\n\n var theTop = globalThis['top'];\n if (theTop) {\n $jscomp.typecheck.ExternClassChecker_.trackOpenOnWindow(theTop);\n }\n})();\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ExternClassChecker_.prototype.check = function(expr) {\n var classTypeDefined = [ false ];\n for (var i = 0; i < $jscomp.typecheck.ExternClassChecker_.windows.length;\n i++) {\n var w = $jscomp.typecheck.ExternClassChecker_.windows[i];\n if (this.checkWindow_(w, expr, classTypeDefined)) {\n return true;\n }\n }\n return !classTypeDefined[0];\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ExternClassChecker_.prototype.toString = function() {\n return 'ext_class(' + this.className_ + ')';\n};\n\n\n/**\n * Checks whether the given expression is an instance of this extern\n * class in this window or any of its frames and subframes.\n *\n * @param {!Window} w the window to start checking from.\n * @param {*} expr the expression to check.\n * @param {!Array} classTypeDefined a wrapped boolean\n * updated to indicate whether the class type was seen in any frame.\n * @return {boolean} true if the given expression is an instance of this class.\n * @private\n */\n$jscomp.typecheck.ExternClassChecker_.prototype.checkWindow_ =\n function(w, expr, classTypeDefined) {\n var classType = /** @type {function(new: ?)} */ (w[this.className_]);\n classTypeDefined[0] = classTypeDefined[0] || !!classType;\n if (classType && expr instanceof classType) {\n return true;\n }\n for (var i = 0; i < w.length; i++) {\n if (this.checkWindow_(w.frames[i], expr, classTypeDefined)) {\n return true;\n }\n }\n return false;\n};\n\n\n\n/**\n * A class for all checkers of user-defined classes.\n *\n * @param {string} className name of the class to check.\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.ClassChecker_ = function(className) {\n\n /**\n * The name of the class to check.\n * @type {string}\n * @private\n */\n this.className_ = className;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ClassChecker_.prototype.check = function(expr) {\n return !!(expr && expr['instance_of__' + this.className_]);\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ClassChecker_.prototype.toString = function() {\n return 'class(' + this.className_ + ')';\n};\n\n\n\n/**\n * A class for all checkers of user-defined interfaces.\n *\n * @param {string} interfaceName name of the interface to check.\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.InterfaceChecker_ = function(interfaceName) {\n\n /**\n * The name of the interface to check.\n * @type {string}\n * @private\n */\n this.interfaceName_ = interfaceName;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.InterfaceChecker_.prototype.check = function(expr) {\n return !!(expr && expr['implements__' + this.interfaceName_]);\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.InterfaceChecker_.prototype.toString = function() {\n return 'interface(' + this.interfaceName_ + ')';\n};\n\n\n\n/**\n * A checker for object types (possibly with non-standard prototype: might not\n * inherit from Object).\n *\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.ObjectChecker_ = function() {};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ObjectChecker_.prototype.check = function(expr) {\n return (typeof(expr) == 'object' || typeof(expr) == 'function') && !!expr;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ObjectChecker_.prototype.toString = function() {\n return 'value(object)';\n};\n\n\n\n/**\n * A checker for null values.\n *\n * @type {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.nullChecker = new $jscomp.typecheck.NullChecker_();\n\n\n/**\n * Creates a checker for the given value type (excluding the null type).\n *\n * @param {string} type the value type.\n * @return {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.valueChecker = function(type) {\n return new $jscomp.typecheck.ValueChecker_(type);\n};\n\n\n/**\n * Creates a checker for the given extern class name.\n *\n * @param {string} className the class name.\n * @return {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.externClassChecker = function(className) {\n return new $jscomp.typecheck.ExternClassChecker_(className);\n};\n\n\n/**\n * Creates a checker for the given user-defined class.\n *\n * @param {string} className the class name.\n * @return {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.classChecker = function(className) {\n return new $jscomp.typecheck.ClassChecker_(className);\n};\n\n\n/**\n * Creates a checker for the given user-defined interface.\n *\n * @param {string} interfaceName the interface name.\n * @return {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.interfaceChecker = function(interfaceName) {\n return new $jscomp.typecheck.InterfaceChecker_(interfaceName);\n};\n\n\n/**\n * A checker for objects.\n *\n * @type {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.objectChecker = new $jscomp.typecheck.ObjectChecker_();\n", "js/util/checkstringargs.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require base';\n\n\n/**\n * Throws if the argument is a RegExp, or if thisArg is undefined.\n * @param {?} thisArg The 'this' arg, which must be defined.\n * @param {*} arg The first argument of the function, which mustn't be a RegExp.\n * @param {string} func Name of the function, for reporting.\n * @return {string} The thisArg, coerced to a string.\n * @suppress {reportUnknownTypes}\n */\n$jscomp.checkStringArgs = function(thisArg, arg, func) {\n if (thisArg == null) {\n throw new TypeError(\n \"The 'this' value for String.prototype.\" + func +\n ' must not be null or undefined');\n }\n if (arg instanceof RegExp) {\n throw new TypeError(\n 'First argument to String.prototype.' + func +\n ' must not be a regular expression');\n }\n return thisArg + '';\n};\n", --"js/util/defineproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides methods to polyfill native objects.\n * @suppress {reportUnknownTypes}\n */\n'require util/defines';\n\n\n/**\n * Polyfill for Object.defineProperty() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty\n *\n * Refuses to define properties on Array.prototype and Object.prototype,\n * since we can't make them non-enumerable and this messes up peoples' for\n * loops. Beyond this, we simply assign values and not worry\n * about enumerability or writeability.\n * @param {?} target\n * @param {string} property\n * @param {?} descriptor\n * @suppress {reportUnknownTypes}\n */\n$jscomp.defineProperty =\n $jscomp.ASSUME_ES5 || typeof Object.defineProperties == 'function' ?\n Object.defineProperty :\n function(target, property, descriptor) {\n descriptor = /** @type {!ObjectPropertyDescriptor} */ (descriptor);\n // NOTE: This is currently never called with a descriptor outside\n // the control of the compiler. If we ever decide to polyfill either\n // Object.defineProperty or Reflect.defineProperty for ES3, we should\n // explicitly check for `get` or `set` on the descriptor and throw a\n // TypeError, since it's impossible to properly polyfill it.\n if (target == Array.prototype || target == Object.prototype) return;\n target[property] = descriptor.value;\n };\n", -+"js/util/defineproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides methods to polyfill native objects.\n * @suppress {reportUnknownTypes}\n */\n'require util/defines';\n\n\n/**\n * Polyfill for Object.defineProperty() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty\n *\n * Refuses to define properties on Array.prototype and Object.prototype,\n * since we can't make them non-enumerable and this messes up peoples' for\n * loops. Beyond this, we simply assign values and not worry\n * about enumerability or writeability.\n * @param {?} target\n * @param {string} property\n * @param {?} descriptor\n * @suppress {reportUnknownTypes}\n */\n$jscomp.defineProperty =\n $jscomp.ASSUME_ES5 || typeof Object.defineProperties == 'function' ?\n Object.defineProperty :\n function(target, property, descriptor) {\n descriptor = /** @type {!ObjectPropertyDescriptor} */ (descriptor);\n // NOTE: This is currently never called with a descriptor outside\n // the control of the compiler. If we ever decide to polyfill either\n // Object.defineProperty or Reflect.defineProperty for ES3, we should\n // explicitly check for `get` or `set` on the descriptor and throw a\n // TypeError, since it's impossible to properly polyfill it.\n if (target == Array.prototype || target == Object.prototype) return;\n target[property] = descriptor.value;\n };\n", - "js/util/defines.js":'/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\'require base\';\n\n\n/**\n * Whether to assume ES5 is available. This enables removing several\n * internal polyfills, which must otherwise be detected at runtime.\n * @define {boolean}\n */\n$jscomp.ASSUME_ES5 = false;\n\n/**\n * Whether to skip the conformance check and simply use the polyfill always.\n * @define {boolean}\n */\n$jscomp.ASSUME_NO_NATIVE_MAP = false;\n\n/**\n * Whether to skip the conformance check and simply use the polyfill always.\n * @define {boolean}\n */\n$jscomp.ASSUME_NO_NATIVE_SET = false;\n\n/**\n * Whether to provide an incorrect but tiny Math.fround polyfill that just\n * returns the number given. This is usually okay to do, particularly if\n * `Math.fround` is only used to allow the JavaScript engine to use faster\n * 32-bit float operations, but could cause problems if program logic is\n * dependent on floats being truncated consistently.\n * @define {boolean}\n */\n$jscomp.SIMPLE_FROUND_POLYFILL = false;\n', +-"js/util/defineproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides methods to polyfill native objects.\n * @suppress {reportUnknownTypes}\n */\n'require util/defines';\n\n\n/**\n * Polyfill for Object.defineProperty() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty\n *\n * Refuses to define properties on Array.prototype and Object.prototype,\n * since we can't make them non-enumerable and this messes up peoples' for\n * loops. Beyond this, we simply assign values and not worry\n * about enumerability or writeability.\n *\n * @type {(typeof Object.defineProperty)}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.defineProperty =\n $jscomp.ASSUME_ES5 || typeof Object.defineProperties == 'function' ?\n Object.defineProperty :\n function(target, property, descriptor) {\n if (target == Array.prototype ||\n // b/155133192\n /** @type {?} */ (target) == Object.prototype) {\n return target;\n }\n\n /**\n * NOTE: This is currently never called with a descriptor outside\n * the control of the compiler. If we ever decide to polyfill either\n * Object.defineProperty or Reflect.defineProperty for ES3, we should\n * explicitly check for `get` or `set` on the descriptor and throw a\n * TypeError, since it's impossible to properly polyfill it.\n */\n target[property] = descriptor.value;\n return target;\n };\n", ++"js/util/defineproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides methods to polyfill native objects.\n * @suppress {reportUnknownTypes}\n */\n'require util/defines';\n\n\n/**\n * Polyfill for Object.defineProperty() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty\n *\n * Refuses to define properties on Array.prototype and Object.prototype,\n * since we can't make them non-enumerable and this messes up peoples' for\n * loops. Beyond this, we simply assign values and not worry\n * about enumerability or writeability.\n *\n * @type {(typeof Object.defineProperty)}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.defineProperty =\n $jscomp.ASSUME_ES5 || typeof Object.defineProperties == 'function' ?\n Object.defineProperty :\n function(target, property, descriptor) {\n if (target == Array.prototype ||\n // b/155133192\n /** @type {?} */ (target) == Object.prototype) {\n return target;\n }\n\n /**\n * NOTE: This is currently never called with a descriptor outside\n * the control of the compiler. If we ever decide to polyfill either\n * Object.defineProperty or Reflect.defineProperty for ES3, we should\n * explicitly check for `get` or `set` on the descriptor and throw a\n * TypeError, since it's impossible to properly polyfill it.\n */\n target[property] = descriptor.value;\n return target;\n };\n", + "js/util/defines.js":'/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\'require base\';\n\n\n/**\n * Whether to assume ES5 is available. This enables removing several\n * internal polyfills, which must otherwise be detected at runtime.\n * @define {boolean}\n */\n$jscomp.ASSUME_ES5 = false;\n\n/**\n * Whether to skip the conformance check and simply use the polyfill always.\n * @define {boolean}\n */\n$jscomp.ASSUME_NO_NATIVE_MAP = false;\n\n/**\n * Whether to skip the conformance check and simply use the polyfill always.\n * @define {boolean}\n */\n$jscomp.ASSUME_NO_NATIVE_SET = false;\n\n/**\n * Whether to provide an incorrect but tiny Math.fround polyfill that just\n * returns the number given. This is usually okay to do, particularly if\n * `Math.fround` is only used to allow the JavaScript engine to use faster\n * 32-bit float operations, but could cause problems if program logic is\n * dependent on floats being truncated consistently.\n * @define {boolean}\n */\n$jscomp.SIMPLE_FROUND_POLYFILL = false;\n\n/**\n * Whether to isolate all injected polyfills from global state. This is not\n * on by default, as it bloats code size, but is useful when code needs to\n * operate on untrusted third_party sites. It relies on a compiler pass to\n * rewrite potential polyfill accesses.\n * @define {boolean}\n */\n$jscomp.ISOLATE_POLYFILLS = false;\n\n/**\n * Should we unconditionally override a native Promise implementation with our\n * own?\n * @define {boolean}\n */\n$jscomp.FORCE_POLYFILL_PROMISE = false;\n\n/**\n * Override the native Promise implementation if unhandledrejection event is not\n * supported.\n * @define {boolean}\n */\n$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION = false;\n', "js/util/finddescriptor.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/getownpropertydescriptor';\n'require es6/reflect/getprototypeof';\n\n\n/**\n * Helper function to find a descriptor.\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {!ObjectPropertyDescriptor|undefined}\n */\n$jscomp.findDescriptor = function(target, propertyKey) {\n var /** ?Object */ obj = target;\n while (obj) {\n var property = Reflect.getOwnPropertyDescriptor(obj, propertyKey);\n if (property) {\n return property;\n }\n obj = Reflect.getPrototypeOf(obj);\n }\n return undefined;\n};\n", "js/util/findinternal.js":'/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Utility for Array methods that find elements.\n */\n\'require base\';\n\n// TODO(sdh): would be nice to template on the ARRAY type as well,\n// so that the third arg type of callback can be refined to be\n// exactly the same as the array type, but then there\'s no way to\n// enforce that it must, in fact, be an array.\n/**\n * Internal implementation of find.\n * @param {!IArrayLike} array\n * @param {function(this: THIS, VALUE, number, !IArrayLike): *} callback\n * @param {THIS} thisArg\n * @return {{i: number, v: (VALUE|undefined)}}\n * @template THIS, VALUE\n * @suppress {reportUnknownTypes}\n */\n$jscomp.findInternal = function(array, callback, thisArg) {\n if (array instanceof String) {\n array = /** @type {!IArrayLike} */ (String(array));\n }\n var len = array.length;\n for (var i = 0; i < len; i++) {\n var value = array[i];\n if (callback.call(thisArg, value, i, array)) return {i: i, v: value};\n }\n return {i: -1, v: void 0};\n};\n', - "js/util/global.js":'/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Runtime code to store the global object.\n */\n\'require base\';\n\n\n/**\n * @param {!Object} maybeGlobal\n * @return {!Object} The global object.\n * @suppress {undefinedVars|reportUnknownTypes}\n */\n$jscomp.getGlobal = function(maybeGlobal) {\n // This logic can be simplified to be made more optimizable.\n return (typeof window != \'undefined\' && window === maybeGlobal) ?\n maybeGlobal :\n (typeof global != \'undefined\' && global != null) ?\n /** @type {!Object} */ (global) :\n maybeGlobal;\n};\n\n\n// TODO(sdh): This should be typed as "the global object" now that the type\n// of "Global" has landed in the type system.\n/**\n * The global object. For browsers we could just use `this` but in Node that\n * doesn\'t work.\n * @const {?}\n */\n$jscomp.global = $jscomp.getGlobal(this);\n', + "js/util/global.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Runtime code to store the global object.\n * @suppress {uselessCode}\n */\n'require base';\n\n/**\n * Locate and return a reference to the global object.\n *\n * NOTE: This method is marked with `noinline`, because `RemoveUnusedCode` has\n * trouble removing the loop it contains if it gets inlined into the global\n * scope.\n * @param {?Object} passedInThis\n * @return {!Global} The global object.\n * @suppress {undefinedVars|reportUnknownTypes}\n * @noinline\n */\n$jscomp.getGlobal = function(passedInThis) {\n var possibleGlobals = [\n // Web Audio Worklets do not have any way to refer to their global object\n // other than `globalThis`.\n // This use of `globalThis` does not prevent removal of the `globalThis`\n // polyfill, because the usage is guarded by a typeof check.\n 'object' == typeof globalThis && globalThis,\n // Rhino (used by older Google Docs Script projects) has no `window` or\n // `self`, but `this` from the global scope is the global object. Also,\n // some GWT tests running on Rhino do have a `window` and `self` but, for\n // unknown reasons, see runtime exceptions when we return `window` instead\n // of `passedInThis`.\n // NOTE: If the compiler's output is wrapped in a strict-mode function,\n // this file's code won't actually be executing in global scope, so this\n // value will be undefined.\n passedInThis,\n // Browser windows always have `window`\n 'object' == typeof window && window,\n // WebWorkers have `self`\n 'object' == typeof self && self,\n // NodeJS has `global`\n 'object' == typeof global && global,\n ];\n for (var i = 0; i < possibleGlobals.length; ++i) {\n var maybeGlobal = possibleGlobals[i];\n // It can happen that an environment has, for example, both `global` and\n // `window` defined in the global scope, but one of them isn't actually\n // the global object, so check that it really seems to be the global object.\n // We use `Math` to check for this because it's only 4 characters long,\n // exists in all possible JS environments, and doesn't have the problematic\n // equality behavior of `NaN`.\n if (maybeGlobal && maybeGlobal['Math'] == Math) {\n return /** @type {!Global} */ (maybeGlobal);\n }\n }\n // Throw an exception if we cannot find the global object.\n // We have to be sneaky about it, otherwise the compiler will think this code\n // has a side effect (throwing an exception) that prevents it from being\n // removed, even when all usages of `$jscomp.global` get removed.\n // Casting through unknown is necessary to keep the compiler from rejecting\n // this code.\n return /** @type {!Global} */ (\n /** @type {?} */ ({\n valueOf: function() {\n throw new Error('Cannot find global object');\n }\n }.valueOf()));\n};\n\n\n/**\n * The global object.\n * @const {!Global}\n */\n$jscomp.global = $jscomp.getGlobal(this);\n", -"js/util/objectcreate.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides a partial internal polyfill for Object.create.\n */\n'require util/defines';\n\n\n/**\n * Polyfill for Object.create() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create\n *\n * Does not implement the second argument.\n * @param {!Object} prototype\n * @return {!Object}\n */\n$jscomp.objectCreate =\n ($jscomp.ASSUME_ES5 || typeof Object.create == 'function') ?\n Object.create :\n function(prototype) {\n /** @constructor */\n var ctor = function() {};\n ctor.prototype = prototype;\n return new ctor();\n };\n", +"js/util/objectcreate.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides a partial internal polyfill for Object.create.\n */\n'require util/defines';\n\n\n/**\n * Polyfill for Object.create() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create\n *\n * Does not implement the second argument.\n * @param {!Object} prototype\n * @return {!Object}\n */\n$jscomp.objectCreate =\n ($jscomp.ASSUME_ES5 || typeof Object.create == 'function') ?\n Object.create :\n function(prototype) {\n /** @constructor */\n var ctor = function() {};\n ctor.prototype = prototype;\n return new ctor();\n };\n", "js/util/owns.js":'/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\'require base\';\n\n/**\n * Synonym for Object.prototype.hasOwnProperty.call(obj, prop).\n * @param {!Object} obj\n * @param {string} prop\n * @return {boolean}\n */\n$jscomp.owns = function(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n};\n', - "js/util/polyfill.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides methods to polyfill native objects.\n */\n'require util/defineproperty';\n'require util/global';\n\n\n/**\n * @param {string} target Qualified name of the class or method to polyfill,\n * e.g. 'Array.prototype.includes' or 'Map'.\n * @param {?function(*): *} polyfill A function that takes the current browser\n * implementation of the target and returns an optional new polyfill\n * implementation. If null is returned, then no polyfill will be added. A\n * null argument for this parameter indicates that the function will not be\n * polyfilled, and is only useful for `build_polyfill_table.js` bookkeeping.\n * @param {string} fromLang The language level in which the target is expected\n * to already be present in the browser. The compiler requires that\n * `languageOut < fromLang` before injecting a polyfill (i.e. if the\n * specified output language already includes the feature then there's no\n * need to polyfill it).\n * @param {string} toLang The language level required by the polyfill\n * implementation. The compiler will issue an error if a polyfill is\n * required, but `languageOut < toLang`. Additionally, the\n * `build_polyfill_table.js` script audits the polyfill dependency tree to\n * ensure that no polyfill with a lower `toLang` depends on one with a\n * higher `toLang`.\n * @suppress {reportUnknownTypes}\n * @noinline\n * NOTE: We prevent inlining so RemoveUnusedPolyfills can always recognize this\n * call.\n */\n$jscomp.polyfill = function(target, polyfill, fromLang, toLang) {\n if (!polyfill) return;\n var obj = $jscomp.global;\n var split = target.split('.');\n for (var i = 0; i < split.length - 1; i++) {\n var key = split[i];\n if (!(key in obj)) obj[key] = {}; // Might want to be defineProperty.\n obj = obj[key];\n }\n var property = split[split.length - 1];\n var orig = obj[property];\n var impl = polyfill(orig);\n if (impl == orig || impl == null) return;\n $jscomp.defineProperty(\n obj, property, {configurable: true, writable: true, value: impl});\n};\n", + "js/util/polyfill.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides methods to polyfill native objects.\n * @suppress {uselessCode}\n */\n'require util/defineproperty';\n'require util/defines';\n'require util/global';\n'require util/shouldpolyfill';\n\n/** @const {!Object} map from classes (Map) to polyfills */\n$jscomp.polyfills = {};\n\n/**\n * Maps a property to an obfuscated look-up string for that property. Only used\n * when `$jscomp.ISOLATE_POLYFILLS is enabled.\n *\n * When compiling with polyfill isolation enabled, to polyfill an\n * `owner.prototype.method` the `$jscomp.polyfill` library function:\n *

    \n *
  1. creates an obfuscated string for `method`\n *
  2. adds the obfuscated string as a new property on the `owner` object\n *
  3. assigns the polyfill implementation of `method` to this new obfuscated\n * property on the `owner` object.
  4. \n *
\n *\n * This maps the original property name `method` to the new obfuscated property\n * name.\n * @const {!Object}\n */\n$jscomp.propertyToPolyfillSymbol = {};\n\n/** @const {string} */\n$jscomp.POLYFILL_PREFIX = '$jscp$';\n\n/**\n * Returns the polyfill function of the given property if present, otherwise\n * returns the actual property.\n *\n * This is a variable instead of a $jscomp.* property to make it simpler for\n * the compiler to avoid prematurely deleting it during optimizations.\n *\n * @param {*} target the receiver for the property access, e.g. `my.str` in\n * `my.str.includes`\n * @param {string} property the name of the property, e.g. `includes` in\n * `my.str.includes`\n * @return {?} if an obfuscated symbol for the property was added onto the\n * target, then this function returns the polyfill for the property.\n * Otherwise simply looks up the property on the target and returns it as\n * `target[key]`.\n * @noinline prevent inlining so IsolatePolyfills can find this declaration.\n * @suppress {reportUnknownTypes}\n */\nvar $jscomp$lookupPolyfilledValue = function(target, property) {\n /** @const */\n var obfuscatedName = $jscomp.propertyToPolyfillSymbol[property];\n if (obfuscatedName == null) {\n return target[property];\n }\n\n // NOTE: this will throw if `target` is null or undefined.\n /** @const */\n var polyfill = target[obfuscatedName];\n\n // Checking `polyfill !== undefined` is sufficient because $jscomp.polyfill\n // never installs nullish polyfills. Otherwise we'd have to check something\n // like `key in target`.\n return polyfill !== undefined ? polyfill : target[property];\n};\n\n/**\n * @param {string} target Qualified name of the class or method to polyfill,\n * e.g. 'Array.prototype.includes' or 'Map'.\n * @param {?function(*): *} polyfill A function that takes the current browser\n * implementation of the target and returns an optional new polyfill\n * implementation. If null is returned, then no polyfill will be added. A\n * null argument for this parameter indicates that the function will not be\n * polyfilled, and is only useful for `build_polyfill_table.js` bookkeeping.\n * @param {string} fromLang The language level in which the target is expected\n * to already be present in the browser. The compiler requires that\n * `languageOut < fromLang` before injecting a polyfill (i.e. if the\n * specified output language already includes the feature then there's no\n * need to polyfill it).\n * @param {string} toLang The language level required by the polyfill\n * implementation. The compiler will issue an error if a polyfill is\n * required, but `languageOut < toLang`. Additionally, the\n * `build_polyfill_table.js` script audits the polyfill dependency tree to\n * ensure that no polyfill with a lower `toLang` depends on one with a\n * higher `toLang`.\n * @noinline\n * NOTE: We prevent inlining so RemoveUnusedPolyfills can always recognize this\n * call.\n */\n$jscomp.polyfill = function(target, polyfill, fromLang, toLang) {\n if (!polyfill) return;\n if ($jscomp.ISOLATE_POLYFILLS) {\n $jscomp.polyfillIsolated(target, polyfill, fromLang, toLang);\n } else {\n $jscomp.polyfillUnisolated(target, polyfill, fromLang, toLang);\n }\n};\n\n/**\n * @param {string} target Qualified name of the class or method to polyfill,\n * @param {function(*): *} polyfill A function that takes the current browser\n * implementation of the target and returns an optional new polyfill\n * implementation.\n * @param {string} fromLang The language level in which the target is expected\n * to already be present in the browser.\n * @param {string} toLang The language level required by the polyfill\n * implementation.\n * @suppress {reportUnknownTypes}\n * @see $jscomp.polyfill for more documentation\n */\n$jscomp.polyfillUnisolated = function(target, polyfill, fromLang, toLang) {\n var obj = $jscomp.global;\n var split = target.split('.');\n for (var i = 0; i < split.length - 1; i++) {\n var key = split[i];\n if (!(key in obj)) return;\n obj = obj[key];\n }\n var property = split[split.length - 1];\n var orig = obj[property];\n var impl = polyfill(orig);\n if (impl == orig || impl == null) return;\n $jscomp.defineProperty(\n obj, property, {configurable: true, writable: true, value: impl});\n};\n\n/**\n * Defines a polyfill for the given class or method under an obfuscated name.\n *\n * The main differences between this method and $jscomp.polyfillUnisolated are:\n * - classes are defined on $jscomp.polyfills, not window.\n * - methods (Array.prototype.includes) are defined on Array.prototype under\n * an obfuscated name Array.prototype.$jscp$907312$includes or a Symbol, if\n * native.\n * - this method installs our polyfill even when an existing implementation is\n * found, as it might be an untrusted polyfill. The exception is that if\n * Symbol is detected to be native, we assume any implementations of ES6\n * classes/methods are also native and not polyfills.\n *\n * @param {string} target Qualified name of the class or method to polyfill,\n * @param {function(*): *} polyfill A function that takes the current browser\n * implementation of the target and returns an optional new polyfill\n * implementation.\n * @param {string} fromLang The language level in which the target is expected\n * to already be present in the browser.\n * @param {string} toLang The language level required by the polyfill\n * implementation.\n * @suppress {reportUnknownTypes}\n * @see $jscomp.polyfill for more parameter documentation\n */\n$jscomp.polyfillIsolated = function(target, polyfill, fromLang, toLang) {\n var split = target.split('.');\n var isSimpleName = split.length === 1;\n var root = split[0];\n\n // Look up the parent object. For classes this is just $jscomp.global.\n // For methods/properties this may be a polyfill (Promise) or may a native\n // object (Array.prototype).\n var ownerObject;\n if (!isSimpleName && root in $jscomp.polyfills) {\n // Handle Symbol.asyncIterator and Promise.prototype.finally\n ownerObject = $jscomp.polyfills;\n } else {\n // Handle Promise, Array.of, and String.prototype.startsWith\n ownerObject = $jscomp.global;\n }\n\n for (var i = 0; i < split.length - 1; i++) {\n var key = split[i];\n if (!(key in ownerObject)) return;\n ownerObject = ownerObject[key];\n }\n\n var property = split[split.length - 1];\n // If Symbol is native and the target is in the ES6 spec, use the native imp.\n // We assume the method/class was not polyfilled since polyfills typically\n // back off in the presence of an existing implementation.\n var nativeImpl = $jscomp.IS_SYMBOL_NATIVE && fromLang === 'es6' ?\n ownerObject[property] :\n null;\n var impl = polyfill(nativeImpl);\n\n if (impl == null) {\n return;\n }\n\n if (isSimpleName) {\n // Note: `impl` may be the actual native class instead of a\n // polyfill. Add it to $jscomp.polyfills anyway. The IsolatePolyfills pass\n // unconditionally replaces `Symbol` with `$jscomp.polyfills['Symbol']`.\n\n // Use $jscomp.polyfills instead of ownerObject. For simple names like\n // Promise and Symbol, ownerObject is the global object, and we want to\n // avoid adding new global variables.\n $jscomp.defineProperty(\n $jscomp.polyfills, property,\n {configurable: true, writable: true, value: impl});\n } else if (impl !== nativeImpl) {\n // Skip installing an obfuscated property if we have found a native version\n // of the method we're polyfilling. $jscomp$lookupPolyfilledValue will fall\n // back to the native version anyway.\n if ($jscomp.propertyToPolyfillSymbol[property] === undefined) {\n var BIN_ID = (Math.random() * 1e9) >>> 0;\n $jscomp.propertyToPolyfillSymbol[property] = $jscomp.IS_SYMBOL_NATIVE ?\n // use bracket access to avoid injecting the Symbol polyfill\n $jscomp.global['Symbol'](property) :\n $jscomp.POLYFILL_PREFIX + BIN_ID + '$' + property;\n }\n\n /** @const {symbol} */\n var obfuscatedName = $jscomp.propertyToPolyfillSymbol[property];\n\n // Define the polyfilled method on its owner but under an obfuscated\n // name to avoid collisions. The owner will be a native class like `Promise`\n // or a native class's prototype like `Array.prototype`.\n $jscomp.defineProperty(\n ownerObject, obfuscatedName,\n {configurable: true, writable: true, value: impl});\n }\n};\n", "js/util/reflectobject.js":'/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\'require base\';\n\n/**\n * Definition for object reflection.\n *\n * Internal compiler version of closure library goog.reflect.object.\n *\n * Use this if you have an object literal whose keys need to have the same names\n * as the properties of some class even after they are renamed by the compiler.\n *\n * @param {?Object} type class, interface, or record\n * @param {T} object Object literal whose properties must be renamed\n * consistently with type\n * @return {T} The object literal.\n * @template T\n */\n$jscomp.reflectObject = function(type, object) {\n return object;\n};\n\n/**\n * Definition for object property reflection.\n *\n * Internal compiler version of closure library goog.reflect.objectProperty.\n *\n * Use this if you have a string that needs renamed as if it were an unquoted\n * property of a class.\n *\n * @param {string} propName\n * @param {?Object} type class, interface, or record\n * @return {string}\n */\n$jscomp.reflectProperty = function(propName, type) {\n return propName;\n};\n', - "js/util/stringpadding.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/string/repeat';\n\n/**\n * Repeats the given string as necessary to reach the given length,\n * truncating any extra characters.\n * @param {string|undefined} padString\n * @param {number} padLength\n * @return {string}\n */\n$jscomp.stringPadding = function(padString, padLength) {\n var padding = padString !== undefined ? String(padString) : ' ';\n if (!(padLength > 0) || !padding) return '';\n var repeats = Math.ceil(padLength / padding.length);\n return padding.repeat(repeats).substring(0, padLength);\n};\n", - "js/polyfills.txt":"Array.from es6 es3 es6/array/from\nArray.of es6 es3 es6/array/of\nArray.prototype.copyWithin es6 es3 es6/array/copywithin\nArray.prototype.entries es6 es3 es6/array/entries\nArray.prototype.fill es6 es3 es6/array/fill\nArray.prototype.find es6 es3 es6/array/find\nArray.prototype.findIndex es6 es3 es6/array/findindex\nArray.prototype.flat es9 es5 es6/array/flat\nArray.prototype.flatMap es9 es5 es6/array/flatmap\nArray.prototype.includes es7 es3 es6/array/includes\nArray.prototype.keys es6 es3 es6/array/keys\nArray.prototype.values es8 es3 es6/array/values\nMap es6 es3 es6/map\nMath.acosh es6 es3 es6/math/acosh\nMath.asinh es6 es3 es6/math/asinh\nMath.atanh es6 es3 es6/math/atanh\nMath.cbrt es6 es3 es6/math/cbrt\nMath.clz32 es6 es3 es6/math/clz32\nMath.cosh es6 es3 es6/math/cosh\nMath.expm1 es6 es3 es6/math/expm1\nMath.fround es6 es3 es6/math/fround\nMath.hypot es6 es3 es6/math/hypot\nMath.imul es6 es3 es6/math/imul\nMath.log10 es6 es3 es6/math/log10\nMath.log1p es6 es3 es6/math/log1p\nMath.log2 es6 es3 es6/math/log2\nMath.sign es6 es3 es6/math/sign\nMath.sinh es6 es3 es6/math/sinh\nMath.tanh es6 es3 es6/math/tanh\nMath.trunc es6 es3 es6/math/trunc\nNumber.EPSILON es6 es3 es6/number/constants\nNumber.MAX_SAFE_INTEGER es6 es3 es6/number/constants\nNumber.MIN_SAFE_INTEGER es6 es3 es6/number/constants\nNumber.isFinite es6 es3 es6/number/isfinite\nNumber.isInteger es6 es3 es6/number/isinteger\nNumber.isNaN es6 es3 es6/number/isnan\nNumber.isSafeInteger es6 es3 es6/number/issafeinteger\nNumber.parseFloat es6 es3 es6/number/parsefloat\nNumber.parseInt es6 es3 es6/number/parseint\nObject.assign es6 es3 es6/object/assign\nObject.entries es8 es3 es6/object/entries\nObject.fromEntries es_2019 es3 es6/object/fromentries\nObject.getOwnPropertyDescriptors es8 es5 es6/object/getownpropertydescriptors\nObject.getOwnPropertySymbols es6 es5 es6/object/getownpropertysymbols\nObject.is es6 es3 es6/object/is\nObject.setPrototypeOf es6 es5 es6/object/setprototypeof\nObject.values es8 es3 es6/object/values\nPromise es6 es3 es6/promise/promise\nPromise.allSettled es_next es3 es6/promise/allSettled\nPromise.prototype.finally es9 es3 es6/promise/finally\nProxy es6 es6\nReflect.apply es6 es3 es6/reflect/apply\nReflect.construct es6 es3 es6/reflect/construct\nReflect.defineProperty es6 es5 es6/reflect/defineproperty\nReflect.deleteProperty es6 es3 es6/reflect/deleteproperty\nReflect.get es6 es5 es6/reflect/get\nReflect.getOwnPropertyDescriptor es6 es5 es6/reflect/getownpropertydescriptor\nReflect.getPrototypeOf es6 es5 es6/reflect/getprototypeof\nReflect.has es6 es3 es6/reflect/has\nReflect.isExtensible es6 es3 es6/reflect/isextensible\nReflect.ownKeys es6 es5 es6/reflect/ownkeys\nReflect.preventExtensions es6 es3 es6/reflect/preventextensions\nReflect.set es6 es5 es6/reflect/set\nReflect.setPrototypeOf es6 es5 es6/reflect/setprototypeof\nSet es6 es3 es6/set\nString.fromCodePoint es6 es3 es6/string/fromcodepoint\nString.prototype.codePointAt es6 es3 es6/string/codepointat\nString.prototype.endsWith es6 es3 es6/string/endswith\nString.prototype.includes es6 es3 es6/string/includes\nString.prototype.normalize es6 es6\nString.prototype.padEnd es8 es3 es6/string/padend\nString.prototype.padStart es8 es3 es6/string/padstart\nString.prototype.repeat es6 es3 es6/string/repeat\nString.prototype.startsWith es6 es3 es6/string/startswith\nString.prototype.trimEnd es_2019 es3 es6/string/trimend\nString.prototype.trimLeft es_2019 es3 es6/string/trimstart\nString.prototype.trimRight es_2019 es3 es6/string/trimend\nString.prototype.trimStart es_2019 es3 es6/string/trimstart\nString.raw es6 es6\nWeakMap es6 es3 es6/weakmap\nWeakSet es6 es3 es6/weakset\n", - "parsing/ParserConfig.properties":"# Copyright 2009 The Closure Compiler Authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Configuration options for the Parser.\n#\n# Allows us to update the allowed JSDoc annotations independently of the\n# Compiler binary, so we can add new JSDoc annotations to old binaries.\n\n# The version of the compiler that we're currently building.\n# Should be formatted as:\n# Version# (Revision XXX)\ncompiler.version = ${compiler.version}\n\n# The datestamp of the compiler that we're currently building.\ncompiler.date = ${compiler.date}\n\n# A comma-delimited list.\n# Some of these are not used by JSCompiler, but appear in third-party JS code.\n# http://usejsdoc.org/\n# It's not strictly necessary for the natively-supported annotations to be\n# listed here, but it's nice to have them all in one place.\njsdoc.annotations =\\\n addon,\\\n alias,\\\n animations,\\\n appliesMixin,\\\n augments,\\\n author,\\\n base,\\\n borrows,\\\n bug,\\\n channel, \\\n class,\\\n classdesc,\\\n closurePrimitive,\\\n codepen,\\\n config,\\\n constructor,\\\n constructs,\\\n copyright,\\\n default,\\\n delegate,\\\n demo,\\\n deprecated,\\\n desc,\\\n description,\\\n dict,\\\n docsNotRequired,\\\n docs-private,\\\n element,\\\n enhance,\\\n enhanceable,\\\n enum,\\\n event,\\\n eventOf,\\\n eventType,\\\n example,\\\n exception,\\\n exec,\\\n export,\\\n exportDoc,\\\n exportInterface,\\\n expose,\\\n externs,\\\n field,\\\n file,\\\n fires,\\\n function,\\\n global,\\\n hassoydelcall,\\\n hassoydeltemplate,\\\n hideconstructor, \\\n id,\\\n idGenerator,\\\n ignore,\\\n inner,\\\n instance,\\\n kind,\\\n lends,\\\n link,\\\n meaning,\\\n member,\\\n memberOf,\\\n memberof,\\\n method,\\\n methodOf,\\\n mixes,\\\n mixin,\\\n modName,\\\n moddedBy,\\\n model,\\\n modifies,\\\n mods,\\\n module,\\\n multiElement,\\\n name,\\\n namespace,\\\n ngInject,\\\n ngdoc,\\\n nocompile,\\\n package,\\\n param,\\\n parent,\\\n pintomodule,\\\n preserveTry,\\\n priority,\\\n private,\\\n property,\\\n propertyOf,\\\n protected,\\\n provideGoog,\\\n pseudoElement,\\\n public,\\\n readonly,\\\n requirecss,\\\n requires,\\\n requireExtern,\\\n restrict,\\\n returns,\\\n scope,\\\n see,\\\n since,\\\n static,\\\n struct,\\\n summary,\\\n supported,\\\n this,\\\n throws,\\\n todo,\\\n transaction,\\\n tutorial,\\\n type,\\\n typedef,\\\n typeSummary,\\\n url,\\\n usage,\\\n version,\\\n virtual,\\\n visibility,\\\n wizSupportsSymbolicLookup,\\\n wizaction,\\\n wizmodule\n\n# Comma-delimited list of valid suppressions.\n# This should be a subset of the list of DiagnosticGroups.\njsdoc.suppressions =\\\n accessControls,\\\n checkDebuggerStatement,\\\n checkPrototypalTypes,\\\n checkRegExp,\\\n checkTypes,\\\n checkVars,\\\n closureDepMethodUsageChecks,\\\n const,\\\n constantProperty,\\\n deprecated,\\\n duplicate,\\\n es5Strict,\\\n externsValidation,\\\n extraProvide,\\\n extraRequire,\\\n fileoverviewTags,\\\n globalThis,\\\n invalidCasts,\\\n legacyGoogScopeRequire,\\\n lateProvide,\\\n lintChecks,\\\n messageConventions,\\\n misplacedTypeAnnotation,\\\n missingOverride, \\\n missingPolyfill, \\\n missingProperties,\\\n missingProvide,\\\n missingRequire,\\\n missingReturn,\\\n missingSourcesWarnings,\\\n moduleLoad,\\\n newCheckTypes,\\\n newCheckTypesAllChecks,\\\n nonStandardJsDocs,\\\n partialAlias,\\\n polymer,\\\n reportUnknownTypes,\\\n strictCheckTypes,\\\n strictMissingProperties,\\\n strictModuleDepCheck,\\\n strictPrimitiveOperators,\\\n suspiciousCode,\\\n transitionalSuspiciousCodeWarnings,\\\n undefinedNames,\\\n undefinedVars,\\\n underscore,\\\n unknownDefines,\\\n unusedLocalVariables,\\\n unusedPrivateMembers,\\\n uselessCode,\\\n visibility,\\\n with\n\n# A comma-delimited list of valid closure primitive ids.\n# This correspond to the ClosurePrimitive enum once normalized (see ClosurePrimitive.fromStringId)\njsdoc.primitives =\\\n asserts.fail,\\\n asserts.matchesReturn,\\\n asserts.truthy,\\\n\n# A comma-delimited list of reserved words that we should not rename variables\n# to. Used when an extension is released that steps on globals.\n# This prevents the compiler from renaming variables to these names, but not\n# from allowing externs for these names.\n#\n# i,j - common loop variables often overwritten by browser extensions\n# s \u2013 commonly defined by browser extensions when injecting scripts.\n# $j,$ - common jquery aliases often overwritten by browser extensions\n# o - overwritten by Norton Identity Protection's Chrome extension.\n# ga,_gaq - global variable names used by Google Analytics.\n# sun,java - May cause issues in older browsers with remnants of Java support.\n# XR - extern added by the webXR platform API.\n# TODO(tbreisacher): Remove 'ga' and '_gaq' if/when we enable\n# --isolation_mode=IIFE by default.\ncompiler.reserved.vars = i,j,s,$,$j,o,ga,_gaq,sun,XR,java\n", --"rhino/Messages.properties":'#\n# Default JavaScript messages file.\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Version: MPL 1.1/GPL 2.0\n#\n# The contents of this file are subject to the Mozilla Public License Version\n# 1.1 (the "License"); you may not use this file except in compliance with\n# the License. You may obtain a copy of the License at\n# http://www.mozilla.org/MPL/\n#\n# Software distributed under the License is distributed on an "AS IS" basis,\n# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License\n# for the specific language governing rights and limitations under the\n# License.\n#\n# The Original Code is Rhino code, released\n# May 6, 1999.\n#\n# The Initial Developer of the Original Code is\n# Netscape Communications Corporation.\n# Portions created by the Initial Developer are Copyright (C) 1997-1999\n# the Initial Developer. All Rights Reserved.\n#\n# Contributor(s):\n# Norris Boyd\n# Bob Jervis\n# Pascal-Louis Perez\n#\n# Alternatively, the contents of this file may be used under the terms of\n# the GNU General Public License Version 2 or later (the "GPL"), in which\n# case the provisions of the GPL are applicable instead of those above. If\n# you wish to allow use of your version of this file only under the terms of\n# the GPL and not to allow others to use your version of this file under the\n# MPL, indicate your decision by deleting the provisions above and replacing\n# them with the notice and other provisions required by the GPL. If you do\n# not delete the provisions above, a recipient may use your version of this\n# file under either the MPL or the GPL.\n#\n# ***** END LICENSE BLOCK *****\n\n# This is replaced during jar assembly from property string\n# and should not be translated\nimplementation.version = @IMPLEMENTATION.VERSION@\n\n#\n# To add JavaScript error messages for a particular locale, create a\n# new Messages_[locale].properties file, where [locale] is the Java\n# string abbreviation for that locale. For example, JavaScript\n# messages for the Polish locale should be located in\n# Messages_pl.properties, and messages for the Italian Swiss locale\n# should be located in Messages_it_CH.properties. Message properties\n# files should be accessible through the classpath under\n# org.mozilla.javascript.resources\n#\n# See:\n# java.util.ResourceBundle\n# java.text.MessageFormat\n#\n\n# SomeJavaClassWhereUsed\n\n# Codegen\nmsg.dup.parms =\\\n Duplicate parameter name "{0}".\n\nmsg.unexpected.eof =\\\n Unexpected end of file\n\nmsg.extra.trailing.comma =\\\n Trailing comma is not legal in an ECMA-262 object initializer\n\nmsg.end.annotation.expected =\\\n expected end of line or comment.\n\nmsg.bad.jsdoc.tag =\\\n illegal use of unknown JSDoc tag "{0}"; ignoring it\n\nmsg.bad.fileoverview.visibility.annotation =\\\n {0} visibility not allowed in @fileoverview block\n\nmsg.missing.variable.name =\\\n expecting a variable name in a @param tag.\n\nmsg.dup.variable.name =\\\n duplicate variable name "{0}"\n\nmsg.invalid.variable.name =\\\n invalid param name "{0}"\n\nmsg.jsdoc.incompat.type =\\\n type annotation incompatible with other annotations.\n\nmsg.jsdoc.type.syntax =\\\n type not recognized due to syntax error.\n\nmsg.jsdoc.name.syntax =\\\n name not recognized due to syntax error.\n\nmsg.jsdoc.override =\\\n extra @override/@inheritDoc tag.\n\nmsg.jsdoc.final =\\\n extra @final tag.\n\nmsg.jsdoc.extra.visibility=\\\n extra visibility tag\n\nmsg.jsdoc.idgen.duplicate =\\\n extra @idGenerator tag\n\nmsg.jsdoc.idgen.bad =\\\n malformed @idGenerator tag\n\nmsg.jsdoc.wizaction =\\\n extra @wizaction tag\n\nmsg.jsdoc.idgen.unknown =\\\n unknown @idGenerator parameter: {0}\n\nmsg.jsdoc.hidden =\\\n extra @hidden tag\n\nmsg.jsdoc.const =\\\n conflicting @const tag\n\nmsg.jsdoc.desc.extra =\\\n extra @desc tag\n\nmsg.jsdoc.meaning.extra =\\\n extra @meaning tag\n\nmsg.jsdoc.fileoverview.extra =\\\n extra @fileoverview tag\n\nmsg.jsdoc.lends.incompatible =\\\n @lends tag incompatible with other annotations.\n\nmsg.jsdoc.lends.missing =\\\n missing object name in @lends tag.\n\nmsg.jsdoc.closurePrimitive.extra =\\\n conflicting @closurePrimitive tag\n\nmsg.jsdoc.closurePrimitive.invalid =\\\n invalid id in @closurePrimitive tag.\n\nmsg.jsdoc.closurePrimitive.missing =\\\n missing id in @closurePrimitive tag.\n\nmsg.jsdoc.preserve.nobuilder =\\\n @preserve or @license annotation without file to associate it with\n\nmsg.jsdoc.missing.lc =\\\n missing opening \'{\'\n\nmsg.jsdoc.missing.lp =\\\n missing opening (\n\nmsg.jsdoc.missing.braces =\\\n Type annotations should have curly braces.\n\nmsg.jsdoc.missing.rc =\\\n expected closing }\n\nmsg.jsdoc.missing.rp =\\\n missing closing )\n\nmsg.jsdoc.missing.gt =\\\n missing closing >\n\nmsg.jsdoc.missing.rb =\\\n missing closing ]\n\nmsg.jsdoc.missing.colon =\\\n expecting colon after this\n\nmsg.jsdoc.function.this =\\\n expecting this but {0} found\n\nmsg.jsdoc.function.newnotobject =\\\n constructed type must be an object type\n\nmsg.jsdoc.function.varargs =\\\n variable length argument must be last.\n\nmsg.jsdoc.type.union =\\\n union type element with bad syntax\n\nmsg.jsdoc.type.record.duplicate =\\\n Duplicate record field {0}.\n\nmsg.jsdoc.enum =\\\n conflicting @enum tag\n\nmsg.jsdoc.constructor =\\\n conflicting @constructor tag\n\nmsg.jsdoc.deprecated =\\\n extra @deprecated tag\n\nmsg.jsdoc.interface =\\\n extra @interface tag\n\nmsg.jsdoc.interface.constructor =\\\n cannot be both an interface and a constructor.\n\nmsg.jsdoc.record =\\\n conflicting @record tag.\n\nmsg.jsdoc.implements.duplicate =\\\n duplicate @implements tag.\n\nmsg.jsdoc.implements.extraqualifier =\\\n @implements/@extends requires a bare interface/record name without ! or ?.\n\nmsg.jsdoc.nosideeffects =\\\n conflicting @nosideeffects tag\n\nmsg.jsdoc.implicitcast =\\\n extra @implicitCast tag.\n\nmsg.jsdoc.this =\\\n conflicting @this tag\n\nmsg.jsdoc.this.object =\\\n @this must specify an object type\n\nmsg.jsdoc.type =\\\n conflicting @type tag\n\nmsg.jsdoc.define =\\\n conflicting @define tag\n\nmsg.jsdoc.define.badtype =\\\n @define tag only permits literal types\n\nmsg.jsdoc.extends =\\\n conflicting @extends tag\n\nmsg.jsdoc.extends.duplicate =\\\n duplicate @extends tag\n\nmsg.jsdoc.export =\\\n extra @export tag\n\nmsg.jsdoc.expose =\\\n extra @expose tag\n\nmsg.jsdoc.externs =\\\n extra @externs tag\n\nmsg.jsdoc.typesummary =\\\n extra @typeSummary tag\n\nmsg.jsdoc.nocompile =\\\n extra @nocompile tag\n\nmsg.jsdoc.nocollapse =\\\n extra @nocollapse tag\n\nmsg.jsdoc.noinline =\\\n extra @noinline tag\n\nmsg.jsdoc.seemissing =\\\n @see tag missing description\n\nmsg.jsdoc.authormissing =\\\n @author tag missing author\n\nmsg.jsdoc.versionmissing =\\\n @version tag missing version information\n\nmsg.jsdoc.extraversion =\\\n conflicting @version tag\n\nmsg.jsdoc.suppress =\\\n malformed @suppress tag\n\nmsg.jsdoc.suppress.unknown =\\\n unknown @suppress parameter: {0}\n\nmsg.jsdoc.modifies =\\\n malformed @modifies tag\n\nmsg.jsdoc.modifies.duplicate =\\\n conflicting @modifies tag\n\nmsg.jsdoc.modifies.unknown =\\\n unknown @modifies parameter: {0}\n\nmsg.jsdoc.polymerBehavior.extra =\\\n extra @polymerBehavior tag\n\nmsg.jsdoc.polymer.extra =\\\n extra @polymer tag\n\nmsg.jsdoc.customElement.extra =\\\n extra @customElement tag\n\nmsg.jsdoc.mixinClass.extra =\\\n extra @mixinClass tag\n\nmsg.jsdoc.mixinFunction.extra =\\\n extra @mixinFunction tag\n\nmsg.jsdoc.disposeparameter.missing =\\\n @disposes tag missing parameter name.\n\nmsg.jsdoc.disposeparameter.error =\\\n @disposes parameter unknown or parameter specified multiple times.\n\nmsg.jsdoc.nginject.extra =\\\n extra @ngInject tag\n\nmsg.no.type.name =\\\n expecting a type name.\n\n\nmsg.jsdoc.template.boundedgenerics.used =\\\n Bounded generic semantics are currently still in development\n\nmsg.jsdoc.template.name.missing =\\\n @template tag missing type name.\n\nmsg.jsdoc.template.name.redeclaration =\\\n Type name(s) for @template annotation declared twice.\n\nmsg.jsdoc.template.multipleDeclaration =\\\n Multiple template names cannot be declared with bounds or TTL.\n\nmsg.jsdoc.template.boundsWithTTL =\\\n Template types cannot combine bounds and TTL.\n\nmsg.jsdoc.template.typetransformation.missingDelimiter =\\\n Expected end delimiter for a type transformation.\n\nmsg.jsdoc.template.typetransformation.expressionMissing =\\\n Missing type transformation expression.\n\n\nmsg.jsdoc.typetransformation.invalid =\\\n Invalid {0}\n\nmsg.jsdoc.typetransformation.invalid.expression =\\\n Invalid {0} expression\n\nmsg.jsdoc.typetransformation.missing.param =\\\n Missing parameter in {0}\n\nmsg.jsdoc.typetransformation.extra.param =\\\n Found extra parameter in {0}\n\nmsg.jsdoc.typetransformation.invalid.inside =\\\n Invalid expression inside {0}\n\nmsg.jsdoc.import =\\\n Import in typedef is not supported.'}; -+"rhino/Messages.properties":'#\n# Default JavaScript messages file.\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Version: MPL 1.1/GPL 2.0\n#\n# The contents of this file are subject to the Mozilla Public License Version\n# 1.1 (the "License"); you may not use this file except in compliance with\n# the License. You may obtain a copy of the License at\n# http://www.m0z111a.qjz9zk/MPL/\n#\n# Software distributed under the License is distributed on an "AS IS" basis,\n# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License\n# for the specific language governing rights and limitations under the\n# License.\n#\n# The Original Code is Rhino code, released\n# May 6, 1999.\n#\n# The Initial Developer of the Original Code is\n# Netscape Communications Corporation.\n# Portions created by the Initial Developer are Copyright (C) 1997-1999\n# the Initial Developer. All Rights Reserved.\n#\n# Contributor(s):\n# Norris Boyd\n# Bob Jervis\n# Pascal-Louis Perez\n#\n# Alternatively, the contents of this file may be used under the terms of\n# the GNU General Public License Version 2 or later (the "GPL"), in which\n# case the provisions of the GPL are applicable instead of those above. If\n# you wish to allow use of your version of this file only under the terms of\n# the GPL and not to allow others to use your version of this file under the\n# MPL, indicate your decision by deleting the provisions above and replacing\n# them with the notice and other provisions required by the GPL. If you do\n# not delete the provisions above, a recipient may use your version of this\n# file under either the MPL or the GPL.\n#\n# ***** END LICENSE BLOCK *****\n\n# This is replaced during jar assembly from property string\n# and should not be translated\nimplementation.version = @IMPLEMENTATION.VERSION@\n\n#\n# To add JavaScript error messages for a particular locale, create a\n# new Messages_[locale].properties file, where [locale] is the Java\n# string abbreviation for that locale. For example, JavaScript\n# messages for the Polish locale should be located in\n# Messages_pl.properties, and messages for the Italian Swiss locale\n# should be located in Messages_it_CH.properties. Message properties\n# files should be accessible through the classpath under\n# org.mozilla.javascript.resources\n#\n# See:\n# java.util.ResourceBundle\n# java.text.MessageFormat\n#\n\n# SomeJavaClassWhereUsed\n\n# Codegen\nmsg.dup.parms =\\\n Duplicate parameter name "{0}".\n\nmsg.unexpected.eof =\\\n Unexpected end of file\n\nmsg.extra.trailing.comma =\\\n Trailing comma is not legal in an ECMA-262 object initializer\n\nmsg.end.annotation.expected =\\\n expected end of line or comment.\n\nmsg.bad.jsdoc.tag =\\\n illegal use of unknown JSDoc tag "{0}"; ignoring it\n\nmsg.bad.fileoverview.visibility.annotation =\\\n {0} visibility not allowed in @fileoverview block\n\nmsg.missing.variable.name =\\\n expecting a variable name in a @param tag.\n\nmsg.dup.variable.name =\\\n duplicate variable name "{0}"\n\nmsg.invalid.variable.name =\\\n invalid param name "{0}"\n\nmsg.jsdoc.incompat.type =\\\n type annotation incompatible with other annotations.\n\nmsg.jsdoc.type.syntax =\\\n type not recognized due to syntax error.\n\nmsg.jsdoc.name.syntax =\\\n name not recognized due to syntax error.\n\nmsg.jsdoc.override =\\\n extra @override/@inheritDoc tag.\n\nmsg.jsdoc.final =\\\n extra @final tag.\n\nmsg.jsdoc.extra.visibility=\\\n extra visibility tag\n\nmsg.jsdoc.idgen.duplicate =\\\n extra @idGenerator tag\n\nmsg.jsdoc.idgen.bad =\\\n malformed @idGenerator tag\n\nmsg.jsdoc.wizaction =\\\n extra @wizaction tag\n\nmsg.jsdoc.idgen.unknown =\\\n unknown @idGenerator parameter: {0}\n\nmsg.jsdoc.hidden =\\\n extra @hidden tag\n\nmsg.jsdoc.const =\\\n conflicting @const tag\n\nmsg.jsdoc.desc.extra =\\\n extra @desc tag\n\nmsg.jsdoc.meaning.extra =\\\n extra @meaning tag\n\nmsg.jsdoc.fileoverview.extra =\\\n extra @fileoverview tag\n\nmsg.jsdoc.lends.incompatible =\\\n @lends tag incompatible with other annotations.\n\nmsg.jsdoc.lends.missing =\\\n missing object name in @lends tag.\n\nmsg.jsdoc.closurePrimitive.extra =\\\n conflicting @closurePrimitive tag\n\nmsg.jsdoc.closurePrimitive.invalid =\\\n invalid id in @closurePrimitive tag.\n\nmsg.jsdoc.closurePrimitive.missing =\\\n missing id in @closurePrimitive tag.\n\nmsg.jsdoc.preserve.nobuilder =\\\n @preserve or @license annotation without file to associate it with\n\nmsg.jsdoc.missing.lc =\\\n missing opening \'{\'\n\nmsg.jsdoc.missing.lp =\\\n missing opening (\n\nmsg.jsdoc.missing.braces =\\\n Type annotations should have curly braces.\n\nmsg.jsdoc.missing.rc =\\\n expected closing }\n\nmsg.jsdoc.missing.rp =\\\n missing closing )\n\nmsg.jsdoc.missing.gt =\\\n missing closing >\n\nmsg.jsdoc.missing.rb =\\\n missing closing ]\n\nmsg.jsdoc.missing.colon =\\\n expecting colon after this\n\nmsg.jsdoc.function.this =\\\n expecting this but {0} found\n\nmsg.jsdoc.function.newnotobject =\\\n constructed type must be an object type\n\nmsg.jsdoc.function.varargs =\\\n variable length argument must be last.\n\nmsg.jsdoc.type.union =\\\n union type element with bad syntax\n\nmsg.jsdoc.type.record.duplicate =\\\n Duplicate record field {0}.\n\nmsg.jsdoc.enum =\\\n conflicting @enum tag\n\nmsg.jsdoc.constructor =\\\n conflicting @constructor tag\n\nmsg.jsdoc.deprecated =\\\n extra @deprecated tag\n\nmsg.jsdoc.interface =\\\n extra @interface tag\n\nmsg.jsdoc.interface.constructor =\\\n cannot be both an interface and a constructor.\n\nmsg.jsdoc.record =\\\n conflicting @record tag.\n\nmsg.jsdoc.implements.duplicate =\\\n duplicate @implements tag.\n\nmsg.jsdoc.implements.extraqualifier =\\\n @implements/@extends requires a bare interface/record name without ! or ?.\n\nmsg.jsdoc.nosideeffects =\\\n conflicting @nosideeffects tag\n\nmsg.jsdoc.implicitcast =\\\n extra @implicitCast tag.\n\nmsg.jsdoc.this =\\\n conflicting @this tag\n\nmsg.jsdoc.this.object =\\\n @this must specify an object type\n\nmsg.jsdoc.type =\\\n conflicting @type tag\n\nmsg.jsdoc.define =\\\n conflicting @define tag\n\nmsg.jsdoc.define.badtype =\\\n @define tag only permits literal types\n\nmsg.jsdoc.extends =\\\n conflicting @extends tag\n\nmsg.jsdoc.extends.duplicate =\\\n duplicate @extends tag\n\nmsg.jsdoc.export =\\\n extra @export tag\n\nmsg.jsdoc.expose =\\\n extra @expose tag\n\nmsg.jsdoc.externs =\\\n extra @externs tag\n\nmsg.jsdoc.typesummary =\\\n extra @typeSummary tag\n\nmsg.jsdoc.nocompile =\\\n extra @nocompile tag\n\nmsg.jsdoc.nocollapse =\\\n extra @nocollapse tag\n\nmsg.jsdoc.noinline =\\\n extra @noinline tag\n\nmsg.jsdoc.seemissing =\\\n @see tag missing description\n\nmsg.jsdoc.authormissing =\\\n @author tag missing author\n\nmsg.jsdoc.versionmissing =\\\n @version tag missing version information\n\nmsg.jsdoc.extraversion =\\\n conflicting @version tag\n\nmsg.jsdoc.suppress =\\\n malformed @suppress tag\n\nmsg.jsdoc.suppress.unknown =\\\n unknown @suppress parameter: {0}\n\nmsg.jsdoc.modifies =\\\n malformed @modifies tag\n\nmsg.jsdoc.modifies.duplicate =\\\n conflicting @modifies tag\n\nmsg.jsdoc.modifies.unknown =\\\n unknown @modifies parameter: {0}\n\nmsg.jsdoc.polymerBehavior.extra =\\\n extra @polymerBehavior tag\n\nmsg.jsdoc.polymer.extra =\\\n extra @polymer tag\n\nmsg.jsdoc.customElement.extra =\\\n extra @customElement tag\n\nmsg.jsdoc.mixinClass.extra =\\\n extra @mixinClass tag\n\nmsg.jsdoc.mixinFunction.extra =\\\n extra @mixinFunction tag\n\nmsg.jsdoc.disposeparameter.missing =\\\n @disposes tag missing parameter name.\n\nmsg.jsdoc.disposeparameter.error =\\\n @disposes parameter unknown or parameter specified multiple times.\n\nmsg.jsdoc.nginject.extra =\\\n extra @ngInject tag\n\nmsg.no.type.name =\\\n expecting a type name.\n\n\nmsg.jsdoc.template.boundedgenerics.used =\\\n Bounded generic semantics are currently still in development\n\nmsg.jsdoc.template.name.missing =\\\n @template tag missing type name.\n\nmsg.jsdoc.template.name.redeclaration =\\\n Type name(s) for @template annotation declared twice.\n\nmsg.jsdoc.template.multipleDeclaration =\\\n Multiple template names cannot be declared with bounds or TTL.\n\nmsg.jsdoc.template.boundsWithTTL =\\\n Template types cannot combine bounds and TTL.\n\nmsg.jsdoc.template.typetransformation.missingDelimiter =\\\n Expected end delimiter for a type transformation.\n\nmsg.jsdoc.template.typetransformation.expressionMissing =\\\n Missing type transformation expression.\n\n\nmsg.jsdoc.typetransformation.invalid =\\\n Invalid {0}\n\nmsg.jsdoc.typetransformation.invalid.expression =\\\n Invalid {0} expression\n\nmsg.jsdoc.typetransformation.missing.param =\\\n Missing parameter in {0}\n\nmsg.jsdoc.typetransformation.extra.param =\\\n Found extra parameter in {0}\n\nmsg.jsdoc.typetransformation.invalid.inside =\\\n Invalid expression inside {0}\n\nmsg.jsdoc.import =\\\n Import in typedef is not supported.'}; - function qra(a){if(a in pra)return pra[a];throw Ia("Resource not found: "+r(a)).s;}function rra(){}var sra;l(rra,n);function ky(a,b){a=a.a.a.get(b);if(null==a)throw a=new Mr,sa(a,"no key found"),a.f=b,a.a(Error(a)),a.s;return a} - function tra(a){ura();if("com.google.javascript.rhino.Messages"===a)a="rhino/Messages.properties";else if("com.google.javascript.jscomp.parsing.ParserConfig"===a)a="parsing/ParserConfig.properties";else throw Ia("ResourceBundle not available: "+r(a)).s;var b=sra.get(a);if(!b){b=qra(a);b=ri(b,"\r?\n",0);for(var c=gl(),d=0;d" @@ -41323,6 +41500,18 @@ diff --git a/tools/traffic_annotation/scripts/auditor/auditor.py b/tools/traffic auditor_ui = AuditorUI(build_path, args.path_filters, args.no_filtering, args.test_only, args.limit, args.annotations_file, args.skip_compdb) +diff --git a/tools/traffic_annotation/scripts/test_data/extractor_outputs/good_partial_annotation.txt b/tools/traffic_annotation/scripts/test_data/extractor_outputs/good_partial_annotation.txt +--- a/tools/traffic_annotation/scripts/test_data/extractor_outputs/good_partial_annotation.txt ++++ b/tools/traffic_annotation/scripts/test_data/extractor_outputs/good_partial_annotation.txt +@@ -6,7 +6,7 @@ web_history_service + + semantics { + description: +- "If history sync is enabled, this queries history.google.com to " ++ "If history sync is enabled, this queries history.9oo91e.qjz9zk to " + "determine if there is any synced history. This information is " + "displayed in the Clear Browsing Data dialog." + trigger: diff --git a/tools/traffic_annotation/scripts/update_annotations_doc.py b/tools/traffic_annotation/scripts/update_annotations_doc.py --- a/tools/traffic_annotation/scripts/update_annotations_doc.py +++ b/tools/traffic_annotation/scripts/update_annotations_doc.py @@ -41685,10 +41874,10 @@ diff --git a/ui/accessibility/extensions/strings/accessibility_extensions_string diff --git a/ui/base/clipboard/clipboard_test_template.h b/ui/base/clipboard/clipboard_test_template.h --- a/ui/base/clipboard/clipboard_test_template.h +++ b/ui/base/clipboard/clipboard_test_template.h -@@ -521,7 +521,7 @@ TYPED_TEST(ClipboardTest, MAYBE_MultiFormatTest) { - } +@@ -578,7 +578,7 @@ TYPED_TEST(ClipboardTest, URLTest) { + } + #endif // OS_MAC - TYPED_TEST(ClipboardTest, URLTest) { - std::u16string url(u"http://www.google.com/"); + std::u16string url(u"http://www.9oo91e.qjz9zk/"); @@ -41819,6 +42008,18 @@ diff --git a/ui/file_manager/file_manager/foreground/elements/icons.html b/ui/fi --> +diff --git a/ui/file_manager/file_manager/foreground/js/file_transfer_controller.js b/ui/file_manager/file_manager/foreground/js/file_transfer_controller.js +--- a/ui/file_manager/file_manager/foreground/js/file_transfer_controller.js ++++ b/ui/file_manager/file_manager/foreground/js/file_transfer_controller.js +@@ -464,7 +464,7 @@ export class FileTransferController { + text: 'Learn more', + callback: () => { + util.visitURL( +- 'https://support.google.com/chrome/a/?p=chromeos_datacontrols'); ++ 'https://support.9oo91e.qjz9zk/chrome/a/?p=chromeos_datacontrols'); + } + }); + throw new Error('ABORT'); diff --git a/ui/file_manager/file_manager/manifest.json b/ui/file_manager/file_manager/manifest.json --- a/ui/file_manager/file_manager/manifest.json +++ b/ui/file_manager/file_manager/manifest.json @@ -41837,7 +42038,7 @@ diff --git a/ui/file_manager/file_manager/manifest.json b/ui/file_manager/file_m "metricsPrivate", "notifications", "power", -@@ -233,6 +233,6 @@ +@@ -235,6 +235,6 @@ "page": "background.html" }, // chrome-extension://pmfjbimdmchhbnneeidfognadeopoehp is the image loader extension. @@ -41859,7 +42060,7 @@ diff --git a/ui/file_manager/image_loader/piex/Makefile b/ui/file_manager/image_ diff --git a/ui/gl/gl_image_io_surface_egl.mm b/ui/gl/gl_image_io_surface_egl.mm --- a/ui/gl/gl_image_io_surface_egl.mm +++ b/ui/gl/gl_image_io_surface_egl.mm -@@ -178,7 +178,7 @@ void GLImageIOSurfaceEGL::ReleaseTexImage(unsigned target) { +@@ -181,7 +181,7 @@ void GLImageIOSurfaceEGL::ReleaseTexImage(unsigned target) { bool GLImageIOSurfaceEGL::BindTexImageImpl(unsigned target, unsigned internalformat) { @@ -41934,7 +42135,7 @@ diff --git a/ui/strings/ui_strings.grd b/ui/strings/ui_strings.grd for more details. Note that all output references are relative to the output directory which is specified at build time. --> -@@ -1174,7 +1174,7 @@ need to be translated for each locale.--> +@@ -1177,7 +1177,7 @@ need to be translated for each locale.--> {DAYS, plural, =0 {Active today} =1 {Active 1 day ago} other {Active # days ago}} @@ -42020,18 +42221,6 @@ diff --git a/url/third_party/mozilla/LICENSE.txt b/url/third_party/mozilla/LICEN The Initial Developer of the Original Code is Netscape Communications Corporation. -diff --git a/weblayer/browser/default_search_engine.cc b/weblayer/browser/default_search_engine.cc ---- a/weblayer/browser/default_search_engine.cc -+++ b/weblayer/browser/default_search_engine.cc -@@ -15,7 +15,7 @@ namespace weblayer { - - const url::Origin& GetDseOrigin() { - static const base::NoDestructor kOrigin( -- url::Origin::Create(GURL("https://www.google.com"))); -+ url::Origin::Create(GURL("https://www.9oo91e.qjz9zk"))); - return *kOrigin; - } - diff --git a/weblayer/browser/weblayer_security_blocking_page_factory.cc b/weblayer/browser/weblayer_security_blocking_page_factory.cc --- a/weblayer/browser/weblayer_security_blocking_page_factory.cc +++ b/weblayer/browser/weblayer_security_blocking_page_factory.cc @@ -42056,6 +42245,3 @@ diff --git a/weblayer/shell/app/shell_main_params.cc b/weblayer/shell/app/shell_ #if defined(OS_WIN) GURL url(base::WideToUTF16(args[0])); --- -2.20.1 -