mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-09 12:51:09 +02:00
Move major DevTools files to new directories using the following steps: hg mv browser/devtools devtools/client hg mv toolkit/devtools/server devtools/server hg mv toolkit/devtools devtools/shared No other changes are made. --HG-- rename : browser/devtools/.eslintignore => devtools/client/.eslintignore rename : browser/devtools/.eslintrc => devtools/client/.eslintrc rename : browser/devtools/.eslintrc.mochitests => devtools/client/.eslintrc.mochitests rename : browser/devtools/.eslintrc.xpcshell => devtools/client/.eslintrc.xpcshell rename : browser/devtools/animationinspector/animation-controller.js => devtools/client/animationinspector/animation-controller.js rename : browser/devtools/animationinspector/animation-inspector.xhtml => devtools/client/animationinspector/animation-inspector.xhtml rename : browser/devtools/animationinspector/animation-panel.js => devtools/client/animationinspector/animation-panel.js rename : browser/devtools/animationinspector/components.js => devtools/client/animationinspector/components.js rename : browser/devtools/animationinspector/moz.build => devtools/client/animationinspector/moz.build rename : browser/devtools/animationinspector/test/.eslintrc => devtools/client/animationinspector/test/.eslintrc rename : browser/devtools/animationinspector/test/browser.ini => devtools/client/animationinspector/test/browser.ini rename : browser/devtools/animationinspector/test/browser_animation_controller_exposes_document_currentTime.js => devtools/client/animationinspector/test/browser_animation_controller_exposes_document_currentTime.js rename : browser/devtools/animationinspector/test/browser_animation_empty_on_invalid_nodes.js => devtools/client/animationinspector/test/browser_animation_empty_on_invalid_nodes.js rename : browser/devtools/animationinspector/test/browser_animation_mutations_with_same_names.js => devtools/client/animationinspector/test/browser_animation_mutations_with_same_names.js rename : browser/devtools/animationinspector/test/browser_animation_panel_exists.js => devtools/client/animationinspector/test/browser_animation_panel_exists.js rename : browser/devtools/animationinspector/test/browser_animation_participate_in_inspector_update.js => devtools/client/animationinspector/test/browser_animation_participate_in_inspector_update.js rename : browser/devtools/animationinspector/test/browser_animation_playerFronts_are_refreshed.js => devtools/client/animationinspector/test/browser_animation_playerFronts_are_refreshed.js rename : browser/devtools/animationinspector/test/browser_animation_playerWidgets_appear_on_panel_init.js => devtools/client/animationinspector/test/browser_animation_playerWidgets_appear_on_panel_init.js rename : browser/devtools/animationinspector/test/browser_animation_playerWidgets_target_nodes.js => devtools/client/animationinspector/test/browser_animation_playerWidgets_target_nodes.js rename : browser/devtools/animationinspector/test/browser_animation_refresh_on_added_animation.js => devtools/client/animationinspector/test/browser_animation_refresh_on_added_animation.js rename : browser/devtools/animationinspector/test/browser_animation_refresh_on_removed_animation.js => devtools/client/animationinspector/test/browser_animation_refresh_on_removed_animation.js rename : browser/devtools/animationinspector/test/browser_animation_refresh_when_active.js => devtools/client/animationinspector/test/browser_animation_refresh_when_active.js rename : browser/devtools/animationinspector/test/browser_animation_same_nb_of_playerWidgets_and_playerFronts.js => devtools/client/animationinspector/test/browser_animation_same_nb_of_playerWidgets_and_playerFronts.js rename : browser/devtools/animationinspector/test/browser_animation_shows_player_on_valid_node.js => devtools/client/animationinspector/test/browser_animation_shows_player_on_valid_node.js rename : browser/devtools/animationinspector/test/browser_animation_target_highlight_select.js => devtools/client/animationinspector/test/browser_animation_target_highlight_select.js rename : browser/devtools/animationinspector/test/browser_animation_timeline_header.js => devtools/client/animationinspector/test/browser_animation_timeline_header.js rename : browser/devtools/animationinspector/test/browser_animation_timeline_pause_button.js => devtools/client/animationinspector/test/browser_animation_timeline_pause_button.js rename : browser/devtools/animationinspector/test/browser_animation_timeline_scrubber_exists.js => devtools/client/animationinspector/test/browser_animation_timeline_scrubber_exists.js rename : browser/devtools/animationinspector/test/browser_animation_timeline_scrubber_movable.js => devtools/client/animationinspector/test/browser_animation_timeline_scrubber_movable.js rename : browser/devtools/animationinspector/test/browser_animation_timeline_scrubber_moves.js => devtools/client/animationinspector/test/browser_animation_timeline_scrubber_moves.js rename : browser/devtools/animationinspector/test/browser_animation_timeline_shows_delay.js => devtools/client/animationinspector/test/browser_animation_timeline_shows_delay.js rename : browser/devtools/animationinspector/test/browser_animation_timeline_shows_iterations.js => devtools/client/animationinspector/test/browser_animation_timeline_shows_iterations.js rename : browser/devtools/animationinspector/test/browser_animation_timeline_shows_time_info.js => devtools/client/animationinspector/test/browser_animation_timeline_shows_time_info.js rename : browser/devtools/animationinspector/test/browser_animation_timeline_takes_rate_into_account.js => devtools/client/animationinspector/test/browser_animation_timeline_takes_rate_into_account.js rename : browser/devtools/animationinspector/test/browser_animation_timeline_ui.js => devtools/client/animationinspector/test/browser_animation_timeline_ui.js rename : browser/devtools/animationinspector/test/browser_animation_toggle_button_resets_on_navigate.js => devtools/client/animationinspector/test/browser_animation_toggle_button_resets_on_navigate.js rename : browser/devtools/animationinspector/test/browser_animation_toggle_button_toggles_animations.js => devtools/client/animationinspector/test/browser_animation_toggle_button_toggles_animations.js rename : browser/devtools/animationinspector/test/browser_animation_toolbar_exists.js => devtools/client/animationinspector/test/browser_animation_toolbar_exists.js rename : browser/devtools/animationinspector/test/browser_animation_ui_updates_when_animation_data_changes.js => devtools/client/animationinspector/test/browser_animation_ui_updates_when_animation_data_changes.js rename : browser/devtools/animationinspector/test/doc_body_animation.html => devtools/client/animationinspector/test/doc_body_animation.html rename : browser/devtools/animationinspector/test/doc_frame_script.js => devtools/client/animationinspector/test/doc_frame_script.js rename : browser/devtools/animationinspector/test/doc_modify_playbackRate.html => devtools/client/animationinspector/test/doc_modify_playbackRate.html rename : browser/devtools/animationinspector/test/doc_negative_animation.html => devtools/client/animationinspector/test/doc_negative_animation.html rename : browser/devtools/animationinspector/test/doc_simple_animation.html => devtools/client/animationinspector/test/doc_simple_animation.html rename : browser/devtools/animationinspector/test/head.js => devtools/client/animationinspector/test/head.js rename : browser/devtools/animationinspector/test/unit/.eslintrc => devtools/client/animationinspector/test/unit/.eslintrc rename : browser/devtools/animationinspector/test/unit/test_findOptimalTimeInterval.js => devtools/client/animationinspector/test/unit/test_findOptimalTimeInterval.js rename : browser/devtools/animationinspector/test/unit/test_timeScale.js => devtools/client/animationinspector/test/unit/test_timeScale.js rename : browser/devtools/animationinspector/test/unit/xpcshell.ini => devtools/client/animationinspector/test/unit/xpcshell.ini rename : browser/devtools/animationinspector/utils.js => devtools/client/animationinspector/utils.js rename : browser/devtools/app-manager/app-projects.js => devtools/client/app-manager/app-projects.js rename : browser/devtools/app-manager/app-validator.js => devtools/client/app-manager/app-validator.js rename : browser/devtools/app-manager/builtin-adb-store.js => devtools/client/app-manager/builtin-adb-store.js rename : browser/devtools/app-manager/connection-store.js => devtools/client/app-manager/connection-store.js rename : browser/devtools/app-manager/content/connection-footer.js => devtools/client/app-manager/content/connection-footer.js rename : browser/devtools/app-manager/content/connection-footer.xhtml => devtools/client/app-manager/content/connection-footer.xhtml rename : browser/devtools/app-manager/content/device.js => devtools/client/app-manager/content/device.js rename : browser/devtools/app-manager/content/device.xhtml => devtools/client/app-manager/content/device.xhtml rename : browser/devtools/app-manager/content/help.xhtml => devtools/client/app-manager/content/help.xhtml rename : browser/devtools/app-manager/content/index.js => devtools/client/app-manager/content/index.js rename : browser/devtools/app-manager/content/index.xul => devtools/client/app-manager/content/index.xul rename : browser/devtools/app-manager/content/manifest-editor.js => devtools/client/app-manager/content/manifest-editor.js rename : browser/devtools/app-manager/content/projects.js => devtools/client/app-manager/content/projects.js rename : browser/devtools/app-manager/content/projects.xhtml => devtools/client/app-manager/content/projects.xhtml rename : browser/devtools/app-manager/content/template.js => devtools/client/app-manager/content/template.js rename : browser/devtools/app-manager/content/utils.js => devtools/client/app-manager/content/utils.js rename : browser/devtools/app-manager/device-store.js => devtools/client/app-manager/device-store.js rename : browser/devtools/app-manager/moz.build => devtools/client/app-manager/moz.build rename : browser/devtools/app-manager/simulators-store.js => devtools/client/app-manager/simulators-store.js rename : browser/devtools/app-manager/test/.eslintrc => devtools/client/app-manager/test/.eslintrc rename : browser/devtools/app-manager/test/browser.ini => devtools/client/app-manager/test/browser.ini rename : browser/devtools/app-manager/test/browser_manifest_editor.js => devtools/client/app-manager/test/browser_manifest_editor.js rename : browser/devtools/app-manager/test/chrome.ini => devtools/client/app-manager/test/chrome.ini rename : browser/devtools/app-manager/test/head.js => devtools/client/app-manager/test/head.js rename : browser/devtools/app-manager/test/hosted_app.manifest => devtools/client/app-manager/test/hosted_app.manifest rename : browser/devtools/app-manager/test/manifest.webapp => devtools/client/app-manager/test/manifest.webapp rename : browser/devtools/app-manager/test/test_app_validator.html => devtools/client/app-manager/test/test_app_validator.html rename : browser/devtools/app-manager/test/test_connection_store.html => devtools/client/app-manager/test/test_connection_store.html rename : browser/devtools/app-manager/test/test_device_store.html => devtools/client/app-manager/test/test_device_store.html rename : browser/devtools/app-manager/test/test_projects_store.html => devtools/client/app-manager/test/test_projects_store.html rename : browser/devtools/app-manager/test/test_remain_connected.html => devtools/client/app-manager/test/test_remain_connected.html rename : browser/devtools/app-manager/test/test_template.html => devtools/client/app-manager/test/test_template.html rename : browser/devtools/app-manager/test/validator/no-name-or-icon/home.html => devtools/client/app-manager/test/validator/no-name-or-icon/home.html rename : browser/devtools/app-manager/test/validator/no-name-or-icon/manifest.webapp => devtools/client/app-manager/test/validator/no-name-or-icon/manifest.webapp rename : browser/devtools/app-manager/test/validator/non-absolute-path/manifest.webapp => devtools/client/app-manager/test/validator/non-absolute-path/manifest.webapp rename : browser/devtools/app-manager/test/validator/valid/alsoValid/manifest.webapp => devtools/client/app-manager/test/validator/valid/alsoValid/manifest.webapp rename : browser/devtools/app-manager/test/validator/valid/home.html => devtools/client/app-manager/test/validator/valid/home.html rename : browser/devtools/app-manager/test/validator/valid/icon.png => devtools/client/app-manager/test/validator/valid/icon.png rename : browser/devtools/app-manager/test/validator/valid/manifest.webapp => devtools/client/app-manager/test/validator/valid/manifest.webapp rename : browser/devtools/app-manager/test/validator/wrong-launch-path/icon.png => devtools/client/app-manager/test/validator/wrong-launch-path/icon.png rename : browser/devtools/app-manager/test/validator/wrong-launch-path/manifest.webapp => devtools/client/app-manager/test/validator/wrong-launch-path/manifest.webapp rename : browser/devtools/app-manager/webapps-store.js => devtools/client/app-manager/webapps-store.js rename : browser/devtools/canvasdebugger/callslist.js => devtools/client/canvasdebugger/callslist.js rename : browser/devtools/canvasdebugger/canvasdebugger.js => devtools/client/canvasdebugger/canvasdebugger.js rename : browser/devtools/canvasdebugger/canvasdebugger.xul => devtools/client/canvasdebugger/canvasdebugger.xul rename : browser/devtools/canvasdebugger/moz.build => devtools/client/canvasdebugger/moz.build rename : browser/devtools/canvasdebugger/panel.js => devtools/client/canvasdebugger/panel.js rename : browser/devtools/canvasdebugger/snapshotslist.js => devtools/client/canvasdebugger/snapshotslist.js rename : browser/devtools/canvasdebugger/test/.eslintrc => devtools/client/canvasdebugger/test/.eslintrc rename : browser/devtools/canvasdebugger/test/browser.ini => devtools/client/canvasdebugger/test/browser.ini rename : browser/devtools/canvasdebugger/test/browser_canvas-actor-test-01.js => devtools/client/canvasdebugger/test/browser_canvas-actor-test-01.js rename : browser/devtools/canvasdebugger/test/browser_canvas-actor-test-02.js => devtools/client/canvasdebugger/test/browser_canvas-actor-test-02.js rename : browser/devtools/canvasdebugger/test/browser_canvas-actor-test-03.js => devtools/client/canvasdebugger/test/browser_canvas-actor-test-03.js rename : browser/devtools/canvasdebugger/test/browser_canvas-actor-test-04.js => devtools/client/canvasdebugger/test/browser_canvas-actor-test-04.js rename : browser/devtools/canvasdebugger/test/browser_canvas-actor-test-05.js => devtools/client/canvasdebugger/test/browser_canvas-actor-test-05.js rename : browser/devtools/canvasdebugger/test/browser_canvas-actor-test-06.js => devtools/client/canvasdebugger/test/browser_canvas-actor-test-06.js rename : browser/devtools/canvasdebugger/test/browser_canvas-actor-test-07.js => devtools/client/canvasdebugger/test/browser_canvas-actor-test-07.js rename : browser/devtools/canvasdebugger/test/browser_canvas-actor-test-08.js => devtools/client/canvasdebugger/test/browser_canvas-actor-test-08.js rename : browser/devtools/canvasdebugger/test/browser_canvas-actor-test-09.js => devtools/client/canvasdebugger/test/browser_canvas-actor-test-09.js rename : browser/devtools/canvasdebugger/test/browser_canvas-actor-test-10.js => devtools/client/canvasdebugger/test/browser_canvas-actor-test-10.js rename : browser/devtools/canvasdebugger/test/browser_canvas-actor-test-11.js => devtools/client/canvasdebugger/test/browser_canvas-actor-test-11.js rename : browser/devtools/canvasdebugger/test/browser_canvas-actor-test-12.js => devtools/client/canvasdebugger/test/browser_canvas-actor-test-12.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-highlight.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-call-highlight.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-list.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-call-list.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-search.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-call-search.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-stack-01.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-call-stack-01.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-stack-02.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-call-stack-02.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-stack-03.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-call-stack-03.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-clear.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-clear.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-img-screenshots.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-img-screenshots.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-img-thumbnails-01.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-img-thumbnails-01.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-img-thumbnails-02.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-img-thumbnails-02.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-open.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-open.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-record-01.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-record-01.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-record-02.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-record-02.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-record-03.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-record-03.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-record-04.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-record-04.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-reload-01.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-reload-01.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-reload-02.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-reload-02.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-slider-01.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-slider-01.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-slider-02.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-slider-02.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-snapshot-select-01.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-snapshot-select-01.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-snapshot-select-02.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-snapshot-select-02.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-stepping.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-stepping.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-stop-01.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-stop-01.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-stop-02.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-stop-02.js rename : browser/devtools/canvasdebugger/test/browser_canvas-frontend-stop-03.js => devtools/client/canvasdebugger/test/browser_canvas-frontend-stop-03.js rename : browser/devtools/canvasdebugger/test/browser_profiling-canvas.js => devtools/client/canvasdebugger/test/browser_profiling-canvas.js rename : browser/devtools/canvasdebugger/test/browser_profiling-webgl.js => devtools/client/canvasdebugger/test/browser_profiling-webgl.js rename : browser/devtools/canvasdebugger/test/doc_no-canvas.html => devtools/client/canvasdebugger/test/doc_no-canvas.html rename : browser/devtools/canvasdebugger/test/doc_raf-begin.html => devtools/client/canvasdebugger/test/doc_raf-begin.html rename : browser/devtools/canvasdebugger/test/doc_raf-no-canvas.html => devtools/client/canvasdebugger/test/doc_raf-no-canvas.html rename : browser/devtools/canvasdebugger/test/doc_settimeout.html => devtools/client/canvasdebugger/test/doc_settimeout.html rename : browser/devtools/canvasdebugger/test/doc_simple-canvas-bitmasks.html => devtools/client/canvasdebugger/test/doc_simple-canvas-bitmasks.html rename : browser/devtools/canvasdebugger/test/doc_simple-canvas-deep-stack.html => devtools/client/canvasdebugger/test/doc_simple-canvas-deep-stack.html rename : browser/devtools/canvasdebugger/test/doc_simple-canvas-transparent.html => devtools/client/canvasdebugger/test/doc_simple-canvas-transparent.html rename : browser/devtools/canvasdebugger/test/doc_simple-canvas.html => devtools/client/canvasdebugger/test/doc_simple-canvas.html rename : browser/devtools/canvasdebugger/test/doc_webgl-bindings.html => devtools/client/canvasdebugger/test/doc_webgl-bindings.html rename : browser/devtools/canvasdebugger/test/doc_webgl-enum.html => devtools/client/canvasdebugger/test/doc_webgl-enum.html rename : browser/devtools/canvasdebugger/test/head.js => devtools/client/canvasdebugger/test/head.js rename : browser/devtools/commandline/commandline.css => devtools/client/commandline/commandline.css rename : browser/devtools/commandline/commandlineoutput.xhtml => devtools/client/commandline/commandlineoutput.xhtml rename : browser/devtools/commandline/commandlinetooltip.xhtml => devtools/client/commandline/commandlinetooltip.xhtml rename : browser/devtools/commandline/moz.build => devtools/client/commandline/moz.build rename : browser/devtools/commandline/test/.eslintrc => devtools/client/commandline/test/.eslintrc rename : browser/devtools/commandline/test/browser.ini => devtools/client/commandline/test/browser.ini rename : browser/devtools/commandline/test/browser_cmd_addon.js => devtools/client/commandline/test/browser_cmd_addon.js rename : browser/devtools/commandline/test/browser_cmd_appcache_invalid.js => devtools/client/commandline/test/browser_cmd_appcache_invalid.js rename : browser/devtools/commandline/test/browser_cmd_appcache_invalid_appcache.appcache => devtools/client/commandline/test/browser_cmd_appcache_invalid_appcache.appcache rename : browser/devtools/commandline/test/browser_cmd_appcache_invalid_appcache.appcache^headers^ => devtools/client/commandline/test/browser_cmd_appcache_invalid_appcache.appcache^headers^ rename : browser/devtools/commandline/test/browser_cmd_appcache_invalid_index.html => devtools/client/commandline/test/browser_cmd_appcache_invalid_index.html rename : browser/devtools/commandline/test/browser_cmd_appcache_invalid_page1.html => devtools/client/commandline/test/browser_cmd_appcache_invalid_page1.html rename : browser/devtools/commandline/test/browser_cmd_appcache_invalid_page2.html => devtools/client/commandline/test/browser_cmd_appcache_invalid_page2.html rename : browser/devtools/commandline/test/browser_cmd_appcache_invalid_page3.html => devtools/client/commandline/test/browser_cmd_appcache_invalid_page3.html rename : browser/devtools/commandline/test/browser_cmd_appcache_invalid_page3.html^headers^ => devtools/client/commandline/test/browser_cmd_appcache_invalid_page3.html^headers^ rename : browser/devtools/commandline/test/browser_cmd_appcache_valid.js => devtools/client/commandline/test/browser_cmd_appcache_valid.js rename : browser/devtools/commandline/test/browser_cmd_appcache_valid_appcache.appcache => devtools/client/commandline/test/browser_cmd_appcache_valid_appcache.appcache rename : browser/devtools/commandline/test/browser_cmd_appcache_valid_appcache.appcache^headers^ => devtools/client/commandline/test/browser_cmd_appcache_valid_appcache.appcache^headers^ rename : browser/devtools/commandline/test/browser_cmd_appcache_valid_index.html => devtools/client/commandline/test/browser_cmd_appcache_valid_index.html rename : browser/devtools/commandline/test/browser_cmd_appcache_valid_page1.html => devtools/client/commandline/test/browser_cmd_appcache_valid_page1.html rename : browser/devtools/commandline/test/browser_cmd_appcache_valid_page2.html => devtools/client/commandline/test/browser_cmd_appcache_valid_page2.html rename : browser/devtools/commandline/test/browser_cmd_appcache_valid_page3.html => devtools/client/commandline/test/browser_cmd_appcache_valid_page3.html rename : browser/devtools/commandline/test/browser_cmd_calllog.js => devtools/client/commandline/test/browser_cmd_calllog.js rename : browser/devtools/commandline/test/browser_cmd_calllog_chrome.js => devtools/client/commandline/test/browser_cmd_calllog_chrome.js rename : browser/devtools/commandline/test/browser_cmd_commands.js => devtools/client/commandline/test/browser_cmd_commands.js rename : browser/devtools/commandline/test/browser_cmd_cookie.html => devtools/client/commandline/test/browser_cmd_cookie.html rename : browser/devtools/commandline/test/browser_cmd_cookie.js => devtools/client/commandline/test/browser_cmd_cookie.js rename : browser/devtools/commandline/test/browser_cmd_cookie_host.js => devtools/client/commandline/test/browser_cmd_cookie_host.js rename : browser/devtools/commandline/test/browser_cmd_csscoverage_oneshot.js => devtools/client/commandline/test/browser_cmd_csscoverage_oneshot.js rename : browser/devtools/commandline/test/browser_cmd_csscoverage_page1.html => devtools/client/commandline/test/browser_cmd_csscoverage_page1.html rename : browser/devtools/commandline/test/browser_cmd_csscoverage_page2.html => devtools/client/commandline/test/browser_cmd_csscoverage_page2.html rename : browser/devtools/commandline/test/browser_cmd_csscoverage_page3.html => devtools/client/commandline/test/browser_cmd_csscoverage_page3.html rename : browser/devtools/commandline/test/browser_cmd_csscoverage_sheetA.css => devtools/client/commandline/test/browser_cmd_csscoverage_sheetA.css rename : browser/devtools/commandline/test/browser_cmd_csscoverage_sheetB.css => devtools/client/commandline/test/browser_cmd_csscoverage_sheetB.css rename : browser/devtools/commandline/test/browser_cmd_csscoverage_sheetC.css => devtools/client/commandline/test/browser_cmd_csscoverage_sheetC.css rename : browser/devtools/commandline/test/browser_cmd_csscoverage_sheetD.css => devtools/client/commandline/test/browser_cmd_csscoverage_sheetD.css rename : browser/devtools/commandline/test/browser_cmd_csscoverage_startstop.js => devtools/client/commandline/test/browser_cmd_csscoverage_startstop.js rename : browser/devtools/commandline/test/browser_cmd_csscoverage_util.js => devtools/client/commandline/test/browser_cmd_csscoverage_util.js rename : browser/devtools/commandline/test/browser_cmd_folder.js => devtools/client/commandline/test/browser_cmd_folder.js rename : browser/devtools/commandline/test/browser_cmd_highlight_01.js => devtools/client/commandline/test/browser_cmd_highlight_01.js rename : browser/devtools/commandline/test/browser_cmd_highlight_02.js => devtools/client/commandline/test/browser_cmd_highlight_02.js rename : browser/devtools/commandline/test/browser_cmd_inject.html => devtools/client/commandline/test/browser_cmd_inject.html rename : browser/devtools/commandline/test/browser_cmd_inject.js => devtools/client/commandline/test/browser_cmd_inject.js rename : browser/devtools/commandline/test/browser_cmd_jsb.js => devtools/client/commandline/test/browser_cmd_jsb.js rename : browser/devtools/commandline/test/browser_cmd_jsb_script.jsi => devtools/client/commandline/test/browser_cmd_jsb_script.jsi rename : browser/devtools/commandline/test/browser_cmd_listen.js => devtools/client/commandline/test/browser_cmd_listen.js rename : browser/devtools/commandline/test/browser_cmd_media.html => devtools/client/commandline/test/browser_cmd_media.html rename : browser/devtools/commandline/test/browser_cmd_media.js => devtools/client/commandline/test/browser_cmd_media.js rename : browser/devtools/commandline/test/browser_cmd_pagemod_export.html => devtools/client/commandline/test/browser_cmd_pagemod_export.html rename : browser/devtools/commandline/test/browser_cmd_pagemod_export.js => devtools/client/commandline/test/browser_cmd_pagemod_export.js rename : browser/devtools/commandline/test/browser_cmd_paintflashing.js => devtools/client/commandline/test/browser_cmd_paintflashing.js rename : browser/devtools/commandline/test/browser_cmd_pref1.js => devtools/client/commandline/test/browser_cmd_pref1.js rename : browser/devtools/commandline/test/browser_cmd_pref2.js => devtools/client/commandline/test/browser_cmd_pref2.js rename : browser/devtools/commandline/test/browser_cmd_pref3.js => devtools/client/commandline/test/browser_cmd_pref3.js rename : browser/devtools/commandline/test/browser_cmd_restart.js => devtools/client/commandline/test/browser_cmd_restart.js rename : browser/devtools/commandline/test/browser_cmd_rulers.js => devtools/client/commandline/test/browser_cmd_rulers.js rename : browser/devtools/commandline/test/browser_cmd_screenshot.html => devtools/client/commandline/test/browser_cmd_screenshot.html rename : browser/devtools/commandline/test/browser_cmd_screenshot.js => devtools/client/commandline/test/browser_cmd_screenshot.js rename : browser/devtools/commandline/test/browser_cmd_settings.js => devtools/client/commandline/test/browser_cmd_settings.js rename : browser/devtools/commandline/test/browser_gcli_async.js => devtools/client/commandline/test/browser_gcli_async.js rename : browser/devtools/commandline/test/browser_gcli_canon.js => devtools/client/commandline/test/browser_gcli_canon.js rename : browser/devtools/commandline/test/browser_gcli_cli1.js => devtools/client/commandline/test/browser_gcli_cli1.js rename : browser/devtools/commandline/test/browser_gcli_cli2.js => devtools/client/commandline/test/browser_gcli_cli2.js rename : browser/devtools/commandline/test/browser_gcli_completion1.js => devtools/client/commandline/test/browser_gcli_completion1.js rename : browser/devtools/commandline/test/browser_gcli_completion2.js => devtools/client/commandline/test/browser_gcli_completion2.js rename : browser/devtools/commandline/test/browser_gcli_context.js => devtools/client/commandline/test/browser_gcli_context.js rename : browser/devtools/commandline/test/browser_gcli_date.js => devtools/client/commandline/test/browser_gcli_date.js rename : browser/devtools/commandline/test/browser_gcli_exec.js => devtools/client/commandline/test/browser_gcli_exec.js rename : browser/devtools/commandline/test/browser_gcli_fail.js => devtools/client/commandline/test/browser_gcli_fail.js rename : browser/devtools/commandline/test/browser_gcli_file.js => devtools/client/commandline/test/browser_gcli_file.js rename : browser/devtools/commandline/test/browser_gcli_fileparser.js => devtools/client/commandline/test/browser_gcli_fileparser.js rename : browser/devtools/commandline/test/browser_gcli_filesystem.js => devtools/client/commandline/test/browser_gcli_filesystem.js rename : browser/devtools/commandline/test/browser_gcli_focus.js => devtools/client/commandline/test/browser_gcli_focus.js rename : browser/devtools/commandline/test/browser_gcli_history.js => devtools/client/commandline/test/browser_gcli_history.js rename : browser/devtools/commandline/test/browser_gcli_incomplete.js => devtools/client/commandline/test/browser_gcli_incomplete.js rename : browser/devtools/commandline/test/browser_gcli_inputter.js => devtools/client/commandline/test/browser_gcli_inputter.js rename : browser/devtools/commandline/test/browser_gcli_intro.js => devtools/client/commandline/test/browser_gcli_intro.js rename : browser/devtools/commandline/test/browser_gcli_js.js => devtools/client/commandline/test/browser_gcli_js.js rename : browser/devtools/commandline/test/browser_gcli_keyboard1.js => devtools/client/commandline/test/browser_gcli_keyboard1.js rename : browser/devtools/commandline/test/browser_gcli_keyboard2.js => devtools/client/commandline/test/browser_gcli_keyboard2.js rename : browser/devtools/commandline/test/browser_gcli_keyboard3.js => devtools/client/commandline/test/browser_gcli_keyboard3.js rename : browser/devtools/commandline/test/browser_gcli_keyboard4.js => devtools/client/commandline/test/browser_gcli_keyboard4.js rename : browser/devtools/commandline/test/browser_gcli_keyboard5.js => devtools/client/commandline/test/browser_gcli_keyboard5.js rename : browser/devtools/commandline/test/browser_gcli_keyboard6.js => devtools/client/commandline/test/browser_gcli_keyboard6.js rename : browser/devtools/commandline/test/browser_gcli_menu.js => devtools/client/commandline/test/browser_gcli_menu.js rename : browser/devtools/commandline/test/browser_gcli_node.js => devtools/client/commandline/test/browser_gcli_node.js rename : browser/devtools/commandline/test/browser_gcli_pref1.js => devtools/client/commandline/test/browser_gcli_pref1.js rename : browser/devtools/commandline/test/browser_gcli_pref2.js => devtools/client/commandline/test/browser_gcli_pref2.js rename : browser/devtools/commandline/test/browser_gcli_remotews.js => devtools/client/commandline/test/browser_gcli_remotews.js rename : browser/devtools/commandline/test/browser_gcli_remotexhr.js => devtools/client/commandline/test/browser_gcli_remotexhr.js rename : browser/devtools/commandline/test/browser_gcli_resource.js => devtools/client/commandline/test/browser_gcli_resource.js rename : browser/devtools/commandline/test/browser_gcli_short.js => devtools/client/commandline/test/browser_gcli_short.js rename : browser/devtools/commandline/test/browser_gcli_spell.js => devtools/client/commandline/test/browser_gcli_spell.js rename : browser/devtools/commandline/test/browser_gcli_split.js => devtools/client/commandline/test/browser_gcli_split.js rename : browser/devtools/commandline/test/browser_gcli_string.js => devtools/client/commandline/test/browser_gcli_string.js rename : browser/devtools/commandline/test/browser_gcli_tokenize.js => devtools/client/commandline/test/browser_gcli_tokenize.js rename : browser/devtools/commandline/test/browser_gcli_tooltip.js => devtools/client/commandline/test/browser_gcli_tooltip.js rename : browser/devtools/commandline/test/browser_gcli_types.js => devtools/client/commandline/test/browser_gcli_types.js rename : browser/devtools/commandline/test/browser_gcli_union.js => devtools/client/commandline/test/browser_gcli_union.js rename : browser/devtools/commandline/test/browser_gcli_url.js => devtools/client/commandline/test/browser_gcli_url.js rename : browser/devtools/commandline/test/head.js => devtools/client/commandline/test/head.js rename : browser/devtools/commandline/test/helpers.js => devtools/client/commandline/test/helpers.js rename : browser/devtools/commandline/test/mockCommands.js => devtools/client/commandline/test/mockCommands.js rename : browser/devtools/debugger/content/actions/event-listeners.js => devtools/client/debugger/content/actions/event-listeners.js rename : browser/devtools/debugger/content/constants.js => devtools/client/debugger/content/constants.js rename : browser/devtools/debugger/content/globalActions.js => devtools/client/debugger/content/globalActions.js rename : browser/devtools/debugger/content/reducers/event-listeners.js => devtools/client/debugger/content/reducers/event-listeners.js rename : browser/devtools/debugger/content/reducers/index.js => devtools/client/debugger/content/reducers/index.js rename : browser/devtools/debugger/content/utils.js => devtools/client/debugger/content/utils.js rename : browser/devtools/debugger/content/views/event-listeners-view.js => devtools/client/debugger/content/views/event-listeners-view.js rename : browser/devtools/debugger/debugger-commands.js => devtools/client/debugger/debugger-commands.js rename : browser/devtools/debugger/debugger-controller.js => devtools/client/debugger/debugger-controller.js rename : browser/devtools/debugger/debugger-view.js => devtools/client/debugger/debugger-view.js rename : browser/devtools/debugger/debugger.css => devtools/client/debugger/debugger.css rename : browser/devtools/debugger/debugger.xul => devtools/client/debugger/debugger.xul rename : browser/devtools/debugger/moz.build => devtools/client/debugger/moz.build rename : browser/devtools/debugger/panel.js => devtools/client/debugger/panel.js rename : browser/devtools/debugger/test/.eslintrc => devtools/client/debugger/test/.eslintrc rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon3/lib/main.js => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon3/lib/main.js rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon3/package.json => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon3/package.json rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon4/bootstrap.js => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon4/bootstrap.js rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon4/chrome.manifest => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon4/chrome.manifest rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon4/install.rdf => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon4/install.rdf rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon4/test.jsm => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon4/test.jsm rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon4/test.xul => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon4/test.xul rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon4/test2.jsm => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon4/test2.jsm rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon4/test2.xul => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon4/test2.xul rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon4/testxul.js => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon4/testxul.js rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon4/testxul2.js => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon4/testxul2.js rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon5/bootstrap.js => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon5/bootstrap.js rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon5/chrome.manifest => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon5/chrome.manifest rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon5/install.rdf => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon5/install.rdf rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon5/test.jsm => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon5/test.jsm rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon5/test.xul => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon5/test.xul rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon5/test2.jsm => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon5/test2.jsm rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon5/test2.xul => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon5/test2.xul rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon5/testxul.js => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon5/testxul.js rename : browser/devtools/debugger/test/mochitest/addon-source/browser_dbg_addon5/testxul2.js => devtools/client/debugger/test/mochitest/addon-source/browser_dbg_addon5/testxul2.js rename : browser/devtools/debugger/test/mochitest/addon1.xpi => devtools/client/debugger/test/mochitest/addon1.xpi rename : browser/devtools/debugger/test/mochitest/addon2.xpi => devtools/client/debugger/test/mochitest/addon2.xpi rename : browser/devtools/debugger/test/mochitest/addon3.xpi => devtools/client/debugger/test/mochitest/addon3.xpi rename : browser/devtools/debugger/test/mochitest/addon4.xpi => devtools/client/debugger/test/mochitest/addon4.xpi rename : browser/devtools/debugger/test/mochitest/addon5.xpi => devtools/client/debugger/test/mochitest/addon5.xpi rename : browser/devtools/debugger/test/mochitest/browser.ini => devtools/client/debugger/test/mochitest/browser.ini rename : browser/devtools/debugger/test/mochitest/browser_dbg_WorkerActor.attach.js => devtools/client/debugger/test/mochitest/browser_dbg_WorkerActor.attach.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_WorkerActor.attachThread.js => devtools/client/debugger/test/mochitest/browser_dbg_WorkerActor.attachThread.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_aaa_run_first_leaktest.js => devtools/client/debugger/test/mochitest/browser_dbg_aaa_run_first_leaktest.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_addon-console.js => devtools/client/debugger/test/mochitest/browser_dbg_addon-console.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_addon-modules-unpacked.js => devtools/client/debugger/test/mochitest/browser_dbg_addon-modules-unpacked.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_addon-modules.js => devtools/client/debugger/test/mochitest/browser_dbg_addon-modules.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_addon-panels.js => devtools/client/debugger/test/mochitest/browser_dbg_addon-panels.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_addon-sources.js => devtools/client/debugger/test/mochitest/browser_dbg_addon-sources.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_addonactor.js => devtools/client/debugger/test/mochitest/browser_dbg_addonactor.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_auto-pretty-print-01.js => devtools/client/debugger/test/mochitest/browser_dbg_auto-pretty-print-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_auto-pretty-print-02.js => devtools/client/debugger/test/mochitest/browser_dbg_auto-pretty-print-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_bfcache.js => devtools/client/debugger/test/mochitest/browser_dbg_bfcache.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_blackboxing-01.js => devtools/client/debugger/test/mochitest/browser_dbg_blackboxing-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_blackboxing-02.js => devtools/client/debugger/test/mochitest/browser_dbg_blackboxing-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_blackboxing-03.js => devtools/client/debugger/test/mochitest/browser_dbg_blackboxing-03.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_blackboxing-04.js => devtools/client/debugger/test/mochitest/browser_dbg_blackboxing-04.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_blackboxing-05.js => devtools/client/debugger/test/mochitest/browser_dbg_blackboxing-05.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_blackboxing-06.js => devtools/client/debugger/test/mochitest/browser_dbg_blackboxing-06.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_breadcrumbs-access.js => devtools/client/debugger/test/mochitest/browser_dbg_breadcrumbs-access.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-in-anon.js => devtools/client/debugger/test/mochitest/browser_dbg_break-in-anon.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-dom-01.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-dom-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-dom-02.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-dom-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-dom-03.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-dom-03.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-dom-04.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-dom-04.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-dom-05.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-dom-05.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-dom-06.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-dom-06.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-dom-07.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-dom-07.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-dom-08.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-dom-08.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-dom-event-01.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-dom-event-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-dom-event-02.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-dom-event-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-dom-event-03.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-dom-event-03.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-next-console.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-next-console.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_break-on-next.js => devtools/client/debugger/test/mochitest/browser_dbg_break-on-next.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-actual-location.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-actual-location.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-actual-location2.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-actual-location2.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-break-on-last-line-of-script-on-reload.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-break-on-last-line-of-script-on-reload.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-button-01.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-button-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-button-02.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-button-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-condition-thrown-message.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-condition-thrown-message.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-contextmenu-add.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-contextmenu-add.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-contextmenu.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-contextmenu.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-disabled-reload.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-disabled-reload.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-editor.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-editor.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-eval.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-eval.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-highlight.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-highlight.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-new-script.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-new-script.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-other-tabs.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-other-tabs.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-pane.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-pane.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_breakpoints-reload.js => devtools/client/debugger/test/mochitest/browser_dbg_breakpoints-reload.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_bug-896139.js => devtools/client/debugger/test/mochitest/browser_dbg_bug-896139.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_chrome-create.js => devtools/client/debugger/test/mochitest/browser_dbg_chrome-create.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_chrome-debugging.js => devtools/client/debugger/test/mochitest/browser_dbg_chrome-debugging.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_clean-exit-window.js => devtools/client/debugger/test/mochitest/browser_dbg_clean-exit-window.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_clean-exit.js => devtools/client/debugger/test/mochitest/browser_dbg_clean-exit.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_closure-inspection.js => devtools/client/debugger/test/mochitest/browser_dbg_closure-inspection.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_cmd-blackbox.js => devtools/client/debugger/test/mochitest/browser_dbg_cmd-blackbox.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_cmd-break.js => devtools/client/debugger/test/mochitest/browser_dbg_cmd-break.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_cmd-dbg.js => devtools/client/debugger/test/mochitest/browser_dbg_cmd-dbg.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_conditional-breakpoints-01.js => devtools/client/debugger/test/mochitest/browser_dbg_conditional-breakpoints-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_conditional-breakpoints-02.js => devtools/client/debugger/test/mochitest/browser_dbg_conditional-breakpoints-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_conditional-breakpoints-03.js => devtools/client/debugger/test/mochitest/browser_dbg_conditional-breakpoints-03.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_conditional-breakpoints-04.js => devtools/client/debugger/test/mochitest/browser_dbg_conditional-breakpoints-04.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_conditional-breakpoints-05.js => devtools/client/debugger/test/mochitest/browser_dbg_conditional-breakpoints-05.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_console-eval.js => devtools/client/debugger/test/mochitest/browser_dbg_console-eval.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_console-named-eval.js => devtools/client/debugger/test/mochitest/browser_dbg_console-named-eval.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_controller-evaluate-01.js => devtools/client/debugger/test/mochitest/browser_dbg_controller-evaluate-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_controller-evaluate-02.js => devtools/client/debugger/test/mochitest/browser_dbg_controller-evaluate-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_debugger-statement.js => devtools/client/debugger/test/mochitest/browser_dbg_debugger-statement.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_editor-contextmenu.js => devtools/client/debugger/test/mochitest/browser_dbg_editor-contextmenu.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_editor-mode.js => devtools/client/debugger/test/mochitest/browser_dbg_editor-mode.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_event-listeners-01.js => devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_event-listeners-02.js => devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_event-listeners-03.js => devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-03.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_event-listeners-04.js => devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-04.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_file-reload.js => devtools/client/debugger/test/mochitest/browser_dbg_file-reload.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_function-display-name.js => devtools/client/debugger/test/mochitest/browser_dbg_function-display-name.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_global-method-override.js => devtools/client/debugger/test/mochitest/browser_dbg_global-method-override.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_globalactor.js => devtools/client/debugger/test/mochitest/browser_dbg_globalactor.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_hide-toolbar-buttons.js => devtools/client/debugger/test/mochitest/browser_dbg_hide-toolbar-buttons.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_host-layout.js => devtools/client/debugger/test/mochitest/browser_dbg_host-layout.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_iframes.js => devtools/client/debugger/test/mochitest/browser_dbg_iframes.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_instruments-pane-collapse.js => devtools/client/debugger/test/mochitest/browser_dbg_instruments-pane-collapse.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_interrupts.js => devtools/client/debugger/test/mochitest/browser_dbg_interrupts.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_listaddons.js => devtools/client/debugger/test/mochitest/browser_dbg_listaddons.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_listtabs-01.js => devtools/client/debugger/test/mochitest/browser_dbg_listtabs-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_listtabs-02.js => devtools/client/debugger/test/mochitest/browser_dbg_listtabs-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_listtabs-03.js => devtools/client/debugger/test/mochitest/browser_dbg_listtabs-03.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_listworkers.js => devtools/client/debugger/test/mochitest/browser_dbg_listworkers.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_location-changes-01-simple.js => devtools/client/debugger/test/mochitest/browser_dbg_location-changes-01-simple.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_location-changes-02-blank.js => devtools/client/debugger/test/mochitest/browser_dbg_location-changes-02-blank.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_location-changes-03-new.js => devtools/client/debugger/test/mochitest/browser_dbg_location-changes-03-new.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_location-changes-04-breakpoint.js => devtools/client/debugger/test/mochitest/browser_dbg_location-changes-04-breakpoint.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_multiple-windows.js => devtools/client/debugger/test/mochitest/browser_dbg_multiple-windows.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_navigation.js => devtools/client/debugger/test/mochitest/browser_dbg_navigation.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_no-page-sources.js => devtools/client/debugger/test/mochitest/browser_dbg_no-page-sources.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_on-pause-highlight.js => devtools/client/debugger/test/mochitest/browser_dbg_on-pause-highlight.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_on-pause-raise.js => devtools/client/debugger/test/mochitest/browser_dbg_on-pause-raise.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_optimized-out-vars.js => devtools/client/debugger/test/mochitest/browser_dbg_optimized-out-vars.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_panel-size.js => devtools/client/debugger/test/mochitest/browser_dbg_panel-size.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_parser-01.js => devtools/client/debugger/test/mochitest/browser_dbg_parser-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_parser-02.js => devtools/client/debugger/test/mochitest/browser_dbg_parser-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_parser-03.js => devtools/client/debugger/test/mochitest/browser_dbg_parser-03.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_parser-04.js => devtools/client/debugger/test/mochitest/browser_dbg_parser-04.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_parser-05.js => devtools/client/debugger/test/mochitest/browser_dbg_parser-05.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_parser-06.js => devtools/client/debugger/test/mochitest/browser_dbg_parser-06.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_parser-07.js => devtools/client/debugger/test/mochitest/browser_dbg_parser-07.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_parser-08.js => devtools/client/debugger/test/mochitest/browser_dbg_parser-08.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_parser-09.js => devtools/client/debugger/test/mochitest/browser_dbg_parser-09.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_parser-10.js => devtools/client/debugger/test/mochitest/browser_dbg_parser-10.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_pause-exceptions-01.js => devtools/client/debugger/test/mochitest/browser_dbg_pause-exceptions-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_pause-exceptions-02.js => devtools/client/debugger/test/mochitest/browser_dbg_pause-exceptions-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_pause-no-step.js => devtools/client/debugger/test/mochitest/browser_dbg_pause-no-step.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_pause-resume.js => devtools/client/debugger/test/mochitest/browser_dbg_pause-resume.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_pause-warning.js => devtools/client/debugger/test/mochitest/browser_dbg_pause-warning.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_paused-keybindings.js => devtools/client/debugger/test/mochitest/browser_dbg_paused-keybindings.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-01.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-02.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-03.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-03.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-04.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-04.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-05.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-05.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-06.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-06.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-07.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-07.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-08.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-08.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-09.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-09.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-10.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-10.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-11.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-11.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-12.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-12.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-13.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-13.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_pretty-print-on-paused.js => devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-on-paused.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_progress-listener-bug.js => devtools/client/debugger/test/mochitest/browser_dbg_progress-listener-bug.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_promises-allocation-stack.js => devtools/client/debugger/test/mochitest/browser_dbg_promises-allocation-stack.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_promises-chrome-allocation-stack.js => devtools/client/debugger/test/mochitest/browser_dbg_promises-chrome-allocation-stack.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_promises-fulfillment-stack.js => devtools/client/debugger/test/mochitest/browser_dbg_promises-fulfillment-stack.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_promises-rejection-stack.js => devtools/client/debugger/test/mochitest/browser_dbg_promises-rejection-stack.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_reload-preferred-script-01.js => devtools/client/debugger/test/mochitest/browser_dbg_reload-preferred-script-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_reload-preferred-script-02.js => devtools/client/debugger/test/mochitest/browser_dbg_reload-preferred-script-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_reload-preferred-script-03.js => devtools/client/debugger/test/mochitest/browser_dbg_reload-preferred-script-03.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_reload-same-script.js => devtools/client/debugger/test/mochitest/browser_dbg_reload-same-script.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_scripts-switching-01.js => devtools/client/debugger/test/mochitest/browser_dbg_scripts-switching-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_scripts-switching-02.js => devtools/client/debugger/test/mochitest/browser_dbg_scripts-switching-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_scripts-switching-03.js => devtools/client/debugger/test/mochitest/browser_dbg_scripts-switching-03.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-autofill-identifier.js => devtools/client/debugger/test/mochitest/browser_dbg_search-autofill-identifier.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-basic-01.js => devtools/client/debugger/test/mochitest/browser_dbg_search-basic-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-basic-02.js => devtools/client/debugger/test/mochitest/browser_dbg_search-basic-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-basic-03.js => devtools/client/debugger/test/mochitest/browser_dbg_search-basic-03.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-basic-04.js => devtools/client/debugger/test/mochitest/browser_dbg_search-basic-04.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-global-01.js => devtools/client/debugger/test/mochitest/browser_dbg_search-global-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-global-02.js => devtools/client/debugger/test/mochitest/browser_dbg_search-global-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-global-03.js => devtools/client/debugger/test/mochitest/browser_dbg_search-global-03.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-global-04.js => devtools/client/debugger/test/mochitest/browser_dbg_search-global-04.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-global-05.js => devtools/client/debugger/test/mochitest/browser_dbg_search-global-05.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-global-06.js => devtools/client/debugger/test/mochitest/browser_dbg_search-global-06.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-popup-jank.js => devtools/client/debugger/test/mochitest/browser_dbg_search-popup-jank.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-sources-01.js => devtools/client/debugger/test/mochitest/browser_dbg_search-sources-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-sources-02.js => devtools/client/debugger/test/mochitest/browser_dbg_search-sources-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-sources-03.js => devtools/client/debugger/test/mochitest/browser_dbg_search-sources-03.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_search-symbols.js => devtools/client/debugger/test/mochitest/browser_dbg_search-symbols.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_searchbox-help-popup-01.js => devtools/client/debugger/test/mochitest/browser_dbg_searchbox-help-popup-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_searchbox-help-popup-02.js => devtools/client/debugger/test/mochitest/browser_dbg_searchbox-help-popup-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_searchbox-parse.js => devtools/client/debugger/test/mochitest/browser_dbg_searchbox-parse.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_server-conditional-bp-01.js => devtools/client/debugger/test/mochitest/browser_dbg_server-conditional-bp-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_server-conditional-bp-02.js => devtools/client/debugger/test/mochitest/browser_dbg_server-conditional-bp-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_server-conditional-bp-03.js => devtools/client/debugger/test/mochitest/browser_dbg_server-conditional-bp-03.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_server-conditional-bp-04.js => devtools/client/debugger/test/mochitest/browser_dbg_server-conditional-bp-04.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_server-conditional-bp-05.js => devtools/client/debugger/test/mochitest/browser_dbg_server-conditional-bp-05.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_source-maps-01.js => devtools/client/debugger/test/mochitest/browser_dbg_source-maps-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_source-maps-02.js => devtools/client/debugger/test/mochitest/browser_dbg_source-maps-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_source-maps-03.js => devtools/client/debugger/test/mochitest/browser_dbg_source-maps-03.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_source-maps-04.js => devtools/client/debugger/test/mochitest/browser_dbg_source-maps-04.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_sources-bookmarklet.js => devtools/client/debugger/test/mochitest/browser_dbg_sources-bookmarklet.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_sources-cache.js => devtools/client/debugger/test/mochitest/browser_dbg_sources-cache.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_sources-contextmenu-01.js => devtools/client/debugger/test/mochitest/browser_dbg_sources-contextmenu-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_sources-contextmenu-02.js => devtools/client/debugger/test/mochitest/browser_dbg_sources-contextmenu-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_sources-eval-01.js => devtools/client/debugger/test/mochitest/browser_dbg_sources-eval-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_sources-eval-02.js => devtools/client/debugger/test/mochitest/browser_dbg_sources-eval-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_sources-keybindings.js => devtools/client/debugger/test/mochitest/browser_dbg_sources-keybindings.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_sources-labels.js => devtools/client/debugger/test/mochitest/browser_dbg_sources-labels.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_sources-sorting.js => devtools/client/debugger/test/mochitest/browser_dbg_sources-sorting.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_split-console-paused-reload.js => devtools/client/debugger/test/mochitest/browser_dbg_split-console-paused-reload.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_stack-01.js => devtools/client/debugger/test/mochitest/browser_dbg_stack-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_stack-02.js => devtools/client/debugger/test/mochitest/browser_dbg_stack-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_stack-03.js => devtools/client/debugger/test/mochitest/browser_dbg_stack-03.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_stack-04.js => devtools/client/debugger/test/mochitest/browser_dbg_stack-04.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_stack-05.js => devtools/client/debugger/test/mochitest/browser_dbg_stack-05.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_stack-06.js => devtools/client/debugger/test/mochitest/browser_dbg_stack-06.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_stack-07.js => devtools/client/debugger/test/mochitest/browser_dbg_stack-07.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_step-out.js => devtools/client/debugger/test/mochitest/browser_dbg_step-out.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_tabactor-01.js => devtools/client/debugger/test/mochitest/browser_dbg_tabactor-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_tabactor-02.js => devtools/client/debugger/test/mochitest/browser_dbg_tabactor-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_terminate-on-tab-close.js => devtools/client/debugger/test/mochitest/browser_dbg_terminate-on-tab-close.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-01.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-02.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-03.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-03.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-04.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-04.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-05.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-05.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-06.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-06.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-accessibility.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-accessibility.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-data.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-data.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-edit-cancel.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-edit-cancel.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-edit-click.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-edit-click.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-edit-getset-01.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-edit-getset-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-edit-getset-02.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-edit-getset-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-edit-value.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-edit-value.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-edit-watch.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-edit-watch.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-filter-01.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-filter-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-filter-02.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-filter-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-filter-03.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-filter-03.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-filter-04.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-filter-04.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-filter-05.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-filter-05.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-filter-pref.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-filter-pref.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-filter-searchbox.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-filter-searchbox.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-frame-parameters-01.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-frame-parameters-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-frame-parameters-02.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-frame-parameters-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-frame-parameters-03.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-frame-parameters-03.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-frame-with.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-frame-with.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-frozen-sealed-nonext.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-frozen-sealed-nonext.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-hide-non-enums.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-hide-non-enums.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-large-array-buffer.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-large-array-buffer.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-override-01.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-override-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-override-02.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-override-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-01.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-02.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-03.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-03.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-04.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-04.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-05.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-05.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-06.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-06.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-07.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-07.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-08.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-08.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-09.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-09.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-10.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-10.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-11.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-11.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-12.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-12.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-13.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-13.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-14.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-14.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-15.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-15.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-popup-16.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-popup-16.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-reexpand-01.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-reexpand-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-reexpand-02.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-reexpand-02.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-reexpand-03.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-reexpand-03.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_variables-view-webidl.js => devtools/client/debugger/test/mochitest/browser_dbg_variables-view-webidl.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_watch-expressions-01.js => devtools/client/debugger/test/mochitest/browser_dbg_watch-expressions-01.js rename : browser/devtools/debugger/test/mochitest/browser_dbg_watch-expressions-02.js => devtools/client/debugger/test/mochitest/browser_dbg_watch-expressions-02.js rename : browser/devtools/debugger/test/mochitest/code_WorkerActor.attach-worker1.js => devtools/client/debugger/test/mochitest/code_WorkerActor.attach-worker1.js rename : browser/devtools/debugger/test/mochitest/code_WorkerActor.attach-worker2.js => devtools/client/debugger/test/mochitest/code_WorkerActor.attach-worker2.js rename : browser/devtools/debugger/test/mochitest/code_WorkerActor.attachThread-worker.js => devtools/client/debugger/test/mochitest/code_WorkerActor.attachThread-worker.js rename : browser/devtools/debugger/test/mochitest/code_binary_search.coffee => devtools/client/debugger/test/mochitest/code_binary_search.coffee rename : browser/devtools/debugger/test/mochitest/code_binary_search.js => devtools/client/debugger/test/mochitest/code_binary_search.js rename : browser/devtools/debugger/test/mochitest/code_binary_search.map => devtools/client/debugger/test/mochitest/code_binary_search.map rename : browser/devtools/debugger/test/mochitest/code_blackboxing_blackboxme.js => devtools/client/debugger/test/mochitest/code_blackboxing_blackboxme.js rename : browser/devtools/debugger/test/mochitest/code_blackboxing_one.js => devtools/client/debugger/test/mochitest/code_blackboxing_one.js rename : browser/devtools/debugger/test/mochitest/code_blackboxing_three.js => devtools/client/debugger/test/mochitest/code_blackboxing_three.js rename : browser/devtools/debugger/test/mochitest/code_blackboxing_two.js => devtools/client/debugger/test/mochitest/code_blackboxing_two.js rename : browser/devtools/debugger/test/mochitest/code_breakpoints-break-on-last-line-of-script-on-reload.js => devtools/client/debugger/test/mochitest/code_breakpoints-break-on-last-line-of-script-on-reload.js rename : browser/devtools/debugger/test/mochitest/code_breakpoints-other-tabs.js => devtools/client/debugger/test/mochitest/code_breakpoints-other-tabs.js rename : browser/devtools/debugger/test/mochitest/code_bug-896139.js => devtools/client/debugger/test/mochitest/code_bug-896139.js rename : browser/devtools/debugger/test/mochitest/code_frame-script.js => devtools/client/debugger/test/mochitest/code_frame-script.js rename : browser/devtools/debugger/test/mochitest/code_function-search-01.js => devtools/client/debugger/test/mochitest/code_function-search-01.js rename : browser/devtools/debugger/test/mochitest/code_function-search-02.js => devtools/client/debugger/test/mochitest/code_function-search-02.js rename : browser/devtools/debugger/test/mochitest/code_function-search-03.js => devtools/client/debugger/test/mochitest/code_function-search-03.js rename : browser/devtools/debugger/test/mochitest/code_listworkers-worker1.js => devtools/client/debugger/test/mochitest/code_listworkers-worker1.js rename : browser/devtools/debugger/test/mochitest/code_listworkers-worker2.js => devtools/client/debugger/test/mochitest/code_listworkers-worker2.js rename : browser/devtools/debugger/test/mochitest/code_location-changes.js => devtools/client/debugger/test/mochitest/code_location-changes.js rename : browser/devtools/debugger/test/mochitest/code_math.js => devtools/client/debugger/test/mochitest/code_math.js rename : browser/devtools/debugger/test/mochitest/code_math.map => devtools/client/debugger/test/mochitest/code_math.map rename : browser/devtools/debugger/test/mochitest/code_math.min.js => devtools/client/debugger/test/mochitest/code_math.min.js rename : browser/devtools/debugger/test/mochitest/code_math_bogus_map.js => devtools/client/debugger/test/mochitest/code_math_bogus_map.js rename : browser/devtools/debugger/test/mochitest/code_same-line-functions.js => devtools/client/debugger/test/mochitest/code_same-line-functions.js rename : browser/devtools/debugger/test/mochitest/code_script-eval.js => devtools/client/debugger/test/mochitest/code_script-eval.js rename : browser/devtools/debugger/test/mochitest/code_script-switching-01.js => devtools/client/debugger/test/mochitest/code_script-switching-01.js rename : browser/devtools/debugger/test/mochitest/code_script-switching-02.js => devtools/client/debugger/test/mochitest/code_script-switching-02.js rename : browser/devtools/debugger/test/mochitest/code_test-editor-mode => devtools/client/debugger/test/mochitest/code_test-editor-mode rename : browser/devtools/debugger/test/mochitest/code_ugly-2.js => devtools/client/debugger/test/mochitest/code_ugly-2.js rename : browser/devtools/debugger/test/mochitest/code_ugly-3.js => devtools/client/debugger/test/mochitest/code_ugly-3.js rename : browser/devtools/debugger/test/mochitest/code_ugly-4.js => devtools/client/debugger/test/mochitest/code_ugly-4.js rename : browser/devtools/debugger/test/mochitest/code_ugly-5.js => devtools/client/debugger/test/mochitest/code_ugly-5.js rename : browser/devtools/debugger/test/mochitest/code_ugly-6.js => devtools/client/debugger/test/mochitest/code_ugly-6.js rename : browser/devtools/debugger/test/mochitest/code_ugly-7.js => devtools/client/debugger/test/mochitest/code_ugly-7.js rename : browser/devtools/debugger/test/mochitest/code_ugly-8 => devtools/client/debugger/test/mochitest/code_ugly-8 rename : browser/devtools/debugger/test/mochitest/code_ugly-8^headers^ => devtools/client/debugger/test/mochitest/code_ugly-8^headers^ rename : browser/devtools/debugger/test/mochitest/code_ugly.js => devtools/client/debugger/test/mochitest/code_ugly.js rename : browser/devtools/debugger/test/mochitest/code_workeractor-worker.js => devtools/client/debugger/test/mochitest/code_workeractor-worker.js rename : browser/devtools/debugger/test/mochitest/doc_WorkerActor.attach-tab1.html => devtools/client/debugger/test/mochitest/doc_WorkerActor.attach-tab1.html rename : browser/devtools/debugger/test/mochitest/doc_WorkerActor.attach-tab2.html => devtools/client/debugger/test/mochitest/doc_WorkerActor.attach-tab2.html rename : browser/devtools/debugger/test/mochitest/doc_WorkerActor.attachThread-tab.html => devtools/client/debugger/test/mochitest/doc_WorkerActor.attachThread-tab.html rename : browser/devtools/debugger/test/mochitest/doc_auto-pretty-print-01.html => devtools/client/debugger/test/mochitest/doc_auto-pretty-print-01.html rename : browser/devtools/debugger/test/mochitest/doc_auto-pretty-print-02.html => devtools/client/debugger/test/mochitest/doc_auto-pretty-print-02.html rename : browser/devtools/debugger/test/mochitest/doc_binary_search.html => devtools/client/debugger/test/mochitest/doc_binary_search.html rename : browser/devtools/debugger/test/mochitest/doc_blackboxing.html => devtools/client/debugger/test/mochitest/doc_blackboxing.html rename : browser/devtools/debugger/test/mochitest/doc_breakpoint-move.html => devtools/client/debugger/test/mochitest/doc_breakpoint-move.html rename : browser/devtools/debugger/test/mochitest/doc_breakpoints-break-on-last-line-of-script-on-reload.html => devtools/client/debugger/test/mochitest/doc_breakpoints-break-on-last-line-of-script-on-reload.html rename : browser/devtools/debugger/test/mochitest/doc_breakpoints-other-tabs.html => devtools/client/debugger/test/mochitest/doc_breakpoints-other-tabs.html rename : browser/devtools/debugger/test/mochitest/doc_breakpoints-reload.html => devtools/client/debugger/test/mochitest/doc_breakpoints-reload.html rename : browser/devtools/debugger/test/mochitest/doc_bug-896139.html => devtools/client/debugger/test/mochitest/doc_bug-896139.html rename : browser/devtools/debugger/test/mochitest/doc_closure-optimized-out.html => devtools/client/debugger/test/mochitest/doc_closure-optimized-out.html rename : browser/devtools/debugger/test/mochitest/doc_closures.html => devtools/client/debugger/test/mochitest/doc_closures.html rename : browser/devtools/debugger/test/mochitest/doc_cmd-break.html => devtools/client/debugger/test/mochitest/doc_cmd-break.html rename : browser/devtools/debugger/test/mochitest/doc_cmd-dbg.html => devtools/client/debugger/test/mochitest/doc_cmd-dbg.html rename : browser/devtools/debugger/test/mochitest/doc_conditional-breakpoints.html => devtools/client/debugger/test/mochitest/doc_conditional-breakpoints.html rename : browser/devtools/debugger/test/mochitest/doc_domnode-variables.html => devtools/client/debugger/test/mochitest/doc_domnode-variables.html rename : browser/devtools/debugger/test/mochitest/doc_editor-mode.html => devtools/client/debugger/test/mochitest/doc_editor-mode.html rename : browser/devtools/debugger/test/mochitest/doc_empty-tab-01.html => devtools/client/debugger/test/mochitest/doc_empty-tab-01.html rename : browser/devtools/debugger/test/mochitest/doc_empty-tab-02.html => devtools/client/debugger/test/mochitest/doc_empty-tab-02.html rename : browser/devtools/debugger/test/mochitest/doc_event-listeners-01.html => devtools/client/debugger/test/mochitest/doc_event-listeners-01.html rename : browser/devtools/debugger/test/mochitest/doc_event-listeners-02.html => devtools/client/debugger/test/mochitest/doc_event-listeners-02.html rename : browser/devtools/debugger/test/mochitest/doc_event-listeners-03.html => devtools/client/debugger/test/mochitest/doc_event-listeners-03.html rename : browser/devtools/debugger/test/mochitest/doc_event-listeners-04.html => devtools/client/debugger/test/mochitest/doc_event-listeners-04.html rename : browser/devtools/debugger/test/mochitest/doc_frame-parameters.html => devtools/client/debugger/test/mochitest/doc_frame-parameters.html rename : browser/devtools/debugger/test/mochitest/doc_function-display-name.html => devtools/client/debugger/test/mochitest/doc_function-display-name.html rename : browser/devtools/debugger/test/mochitest/doc_function-search.html => devtools/client/debugger/test/mochitest/doc_function-search.html rename : browser/devtools/debugger/test/mochitest/doc_global-method-override.html => devtools/client/debugger/test/mochitest/doc_global-method-override.html rename : browser/devtools/debugger/test/mochitest/doc_iframes.html => devtools/client/debugger/test/mochitest/doc_iframes.html rename : browser/devtools/debugger/test/mochitest/doc_included-script.html => devtools/client/debugger/test/mochitest/doc_included-script.html rename : browser/devtools/debugger/test/mochitest/doc_inline-debugger-statement.html => devtools/client/debugger/test/mochitest/doc_inline-debugger-statement.html rename : browser/devtools/debugger/test/mochitest/doc_inline-script.html => devtools/client/debugger/test/mochitest/doc_inline-script.html rename : browser/devtools/debugger/test/mochitest/doc_large-array-buffer.html => devtools/client/debugger/test/mochitest/doc_large-array-buffer.html rename : browser/devtools/debugger/test/mochitest/doc_listworkers-tab.html => devtools/client/debugger/test/mochitest/doc_listworkers-tab.html rename : browser/devtools/debugger/test/mochitest/doc_minified.html => devtools/client/debugger/test/mochitest/doc_minified.html rename : browser/devtools/debugger/test/mochitest/doc_minified_bogus_map.html => devtools/client/debugger/test/mochitest/doc_minified_bogus_map.html rename : browser/devtools/debugger/test/mochitest/doc_native-event-handler.html => devtools/client/debugger/test/mochitest/doc_native-event-handler.html rename : browser/devtools/debugger/test/mochitest/doc_no-page-sources.html => devtools/client/debugger/test/mochitest/doc_no-page-sources.html rename : browser/devtools/debugger/test/mochitest/doc_pause-exceptions.html => devtools/client/debugger/test/mochitest/doc_pause-exceptions.html rename : browser/devtools/debugger/test/mochitest/doc_pretty-print-2.html => devtools/client/debugger/test/mochitest/doc_pretty-print-2.html rename : browser/devtools/debugger/test/mochitest/doc_pretty-print-3.html => devtools/client/debugger/test/mochitest/doc_pretty-print-3.html rename : browser/devtools/debugger/test/mochitest/doc_pretty-print-on-paused.html => devtools/client/debugger/test/mochitest/doc_pretty-print-on-paused.html rename : browser/devtools/debugger/test/mochitest/doc_pretty-print.html => devtools/client/debugger/test/mochitest/doc_pretty-print.html rename : browser/devtools/debugger/test/mochitest/doc_promise-get-allocation-stack.html => devtools/client/debugger/test/mochitest/doc_promise-get-allocation-stack.html rename : browser/devtools/debugger/test/mochitest/doc_promise-get-fulfillment-stack.html => devtools/client/debugger/test/mochitest/doc_promise-get-fulfillment-stack.html rename : browser/devtools/debugger/test/mochitest/doc_promise-get-rejection-stack.html => devtools/client/debugger/test/mochitest/doc_promise-get-rejection-stack.html rename : browser/devtools/debugger/test/mochitest/doc_promise.html => devtools/client/debugger/test/mochitest/doc_promise.html rename : browser/devtools/debugger/test/mochitest/doc_random-javascript.html => devtools/client/debugger/test/mochitest/doc_random-javascript.html rename : browser/devtools/debugger/test/mochitest/doc_recursion-stack.html => devtools/client/debugger/test/mochitest/doc_recursion-stack.html rename : browser/devtools/debugger/test/mochitest/doc_scope-variable-2.html => devtools/client/debugger/test/mochitest/doc_scope-variable-2.html rename : browser/devtools/debugger/test/mochitest/doc_scope-variable-3.html => devtools/client/debugger/test/mochitest/doc_scope-variable-3.html rename : browser/devtools/debugger/test/mochitest/doc_scope-variable-4.html => devtools/client/debugger/test/mochitest/doc_scope-variable-4.html rename : browser/devtools/debugger/test/mochitest/doc_scope-variable.html => devtools/client/debugger/test/mochitest/doc_scope-variable.html rename : browser/devtools/debugger/test/mochitest/doc_script-bookmarklet.html => devtools/client/debugger/test/mochitest/doc_script-bookmarklet.html rename : browser/devtools/debugger/test/mochitest/doc_script-eval.html => devtools/client/debugger/test/mochitest/doc_script-eval.html rename : browser/devtools/debugger/test/mochitest/doc_script-switching-01.html => devtools/client/debugger/test/mochitest/doc_script-switching-01.html rename : browser/devtools/debugger/test/mochitest/doc_script-switching-02.html => devtools/client/debugger/test/mochitest/doc_script-switching-02.html rename : browser/devtools/debugger/test/mochitest/doc_split-console-paused-reload.html => devtools/client/debugger/test/mochitest/doc_split-console-paused-reload.html rename : browser/devtools/debugger/test/mochitest/doc_step-out.html => devtools/client/debugger/test/mochitest/doc_step-out.html rename : browser/devtools/debugger/test/mochitest/doc_terminate-on-tab-close.html => devtools/client/debugger/test/mochitest/doc_terminate-on-tab-close.html rename : browser/devtools/debugger/test/mochitest/doc_watch-expression-button.html => devtools/client/debugger/test/mochitest/doc_watch-expression-button.html rename : browser/devtools/debugger/test/mochitest/doc_watch-expressions.html => devtools/client/debugger/test/mochitest/doc_watch-expressions.html rename : browser/devtools/debugger/test/mochitest/doc_with-frame.html => devtools/client/debugger/test/mochitest/doc_with-frame.html rename : browser/devtools/debugger/test/mochitest/head.js => devtools/client/debugger/test/mochitest/head.js rename : browser/devtools/debugger/test/mochitest/sjs_random-javascript.sjs => devtools/client/debugger/test/mochitest/sjs_random-javascript.sjs rename : browser/devtools/debugger/test/mochitest/testactors.js => devtools/client/debugger/test/mochitest/testactors.js rename : browser/devtools/debugger/utils.js => devtools/client/debugger/utils.js rename : browser/devtools/debugger/views/filter-view.js => devtools/client/debugger/views/filter-view.js rename : browser/devtools/debugger/views/global-search-view.js => devtools/client/debugger/views/global-search-view.js rename : browser/devtools/debugger/views/options-view.js => devtools/client/debugger/views/options-view.js rename : browser/devtools/debugger/views/sources-view.js => devtools/client/debugger/views/sources-view.js rename : browser/devtools/debugger/views/stack-frames-classic-view.js => devtools/client/debugger/views/stack-frames-classic-view.js rename : browser/devtools/debugger/views/stack-frames-view.js => devtools/client/debugger/views/stack-frames-view.js rename : browser/devtools/debugger/views/toolbar-view.js => devtools/client/debugger/views/toolbar-view.js rename : browser/devtools/debugger/views/variable-bubble-view.js => devtools/client/debugger/views/variable-bubble-view.js rename : browser/devtools/debugger/views/watch-expressions-view.js => devtools/client/debugger/views/watch-expressions-view.js rename : browser/devtools/debugger/views/workers-view.js => devtools/client/debugger/views/workers-view.js rename : browser/devtools/definitions.js => devtools/client/definitions.js rename : browser/devtools/devtools-clhandler.js => devtools/client/devtools-clhandler.js rename : browser/devtools/devtools-clhandler.manifest => devtools/client/devtools-clhandler.manifest rename : browser/devtools/eyedropper/commands.js => devtools/client/eyedropper/commands.js rename : browser/devtools/eyedropper/crosshairs.css => devtools/client/eyedropper/crosshairs.css rename : browser/devtools/eyedropper/eyedropper-child.js => devtools/client/eyedropper/eyedropper-child.js rename : browser/devtools/eyedropper/eyedropper.js => devtools/client/eyedropper/eyedropper.js rename : browser/devtools/eyedropper/eyedropper.xul => devtools/client/eyedropper/eyedropper.xul rename : browser/devtools/eyedropper/moz.build => devtools/client/eyedropper/moz.build rename : browser/devtools/eyedropper/nocursor.css => devtools/client/eyedropper/nocursor.css rename : browser/devtools/eyedropper/test/.eslintrc => devtools/client/eyedropper/test/.eslintrc rename : browser/devtools/eyedropper/test/browser.ini => devtools/client/eyedropper/test/browser.ini rename : browser/devtools/eyedropper/test/browser_eyedropper_basic.js => devtools/client/eyedropper/test/browser_eyedropper_basic.js rename : browser/devtools/eyedropper/test/browser_eyedropper_cmd.js => devtools/client/eyedropper/test/browser_eyedropper_cmd.js rename : browser/devtools/eyedropper/test/color-block.html => devtools/client/eyedropper/test/color-block.html rename : browser/devtools/eyedropper/test/head.js => devtools/client/eyedropper/test/head.js rename : browser/devtools/fontinspector/font-inspector.css => devtools/client/fontinspector/font-inspector.css rename : browser/devtools/fontinspector/font-inspector.js => devtools/client/fontinspector/font-inspector.js rename : browser/devtools/fontinspector/font-inspector.xhtml => devtools/client/fontinspector/font-inspector.xhtml rename : browser/devtools/fontinspector/moz.build => devtools/client/fontinspector/moz.build rename : browser/devtools/fontinspector/test/.eslintrc => devtools/client/fontinspector/test/.eslintrc rename : browser/devtools/fontinspector/test/OstrichLicense.txt => devtools/client/fontinspector/test/OstrichLicense.txt rename : browser/devtools/fontinspector/test/browser.ini => devtools/client/fontinspector/test/browser.ini rename : browser/devtools/fontinspector/test/browser_fontinspector.html => devtools/client/fontinspector/test/browser_fontinspector.html rename : browser/devtools/fontinspector/test/browser_fontinspector.js => devtools/client/fontinspector/test/browser_fontinspector.js rename : browser/devtools/fontinspector/test/browser_fontinspector_edit-previews-show-all.js => devtools/client/fontinspector/test/browser_fontinspector_edit-previews-show-all.js rename : browser/devtools/fontinspector/test/browser_fontinspector_edit-previews.js => devtools/client/fontinspector/test/browser_fontinspector_edit-previews.js rename : browser/devtools/fontinspector/test/browser_fontinspector_theme-change.js => devtools/client/fontinspector/test/browser_fontinspector_theme-change.js rename : browser/devtools/fontinspector/test/head.js => devtools/client/fontinspector/test/head.js rename : browser/devtools/fontinspector/test/ostrich-black.ttf => devtools/client/fontinspector/test/ostrich-black.ttf rename : browser/devtools/fontinspector/test/ostrich-regular.ttf => devtools/client/fontinspector/test/ostrich-regular.ttf rename : browser/devtools/fontinspector/test/test_iframe.html => devtools/client/fontinspector/test/test_iframe.html rename : browser/devtools/framework/ToolboxProcess.jsm => devtools/client/framework/ToolboxProcess.jsm rename : browser/devtools/framework/connect/connect.css => devtools/client/framework/connect/connect.css rename : browser/devtools/framework/connect/connect.js => devtools/client/framework/connect/connect.js rename : browser/devtools/framework/connect/connect.xhtml => devtools/client/framework/connect/connect.xhtml rename : browser/devtools/framework/dev-edition-promo/dev-edition-logo.png => devtools/client/framework/dev-edition-promo/dev-edition-logo.png rename : browser/devtools/framework/dev-edition-promo/dev-edition-promo.css => devtools/client/framework/dev-edition-promo/dev-edition-promo.css rename : browser/devtools/framework/dev-edition-promo/dev-edition-promo.xul => devtools/client/framework/dev-edition-promo/dev-edition-promo.xul rename : browser/devtools/framework/gDevTools.jsm => devtools/client/framework/gDevTools.jsm rename : browser/devtools/framework/moz.build => devtools/client/framework/moz.build rename : browser/devtools/framework/options-panel.css => devtools/client/framework/options-panel.css rename : browser/devtools/framework/selection.js => devtools/client/framework/selection.js rename : browser/devtools/framework/sidebar.js => devtools/client/framework/sidebar.js rename : browser/devtools/framework/target.js => devtools/client/framework/target.js rename : browser/devtools/framework/test/.eslintrc => devtools/client/framework/test/.eslintrc rename : browser/devtools/framework/test/browser.ini => devtools/client/framework/test/browser.ini rename : browser/devtools/framework/test/browser_devtools_api.js => devtools/client/framework/test/browser_devtools_api.js rename : browser/devtools/framework/test/browser_devtools_api_destroy.js => devtools/client/framework/test/browser_devtools_api_destroy.js rename : browser/devtools/framework/test/browser_dynamic_tool_enabling.js => devtools/client/framework/test/browser_dynamic_tool_enabling.js rename : browser/devtools/framework/test/browser_ignore_toolbox_network_requests.js => devtools/client/framework/test/browser_ignore_toolbox_network_requests.js rename : browser/devtools/framework/test/browser_keybindings_01.js => devtools/client/framework/test/browser_keybindings_01.js rename : browser/devtools/framework/test/browser_keybindings_02.js => devtools/client/framework/test/browser_keybindings_02.js rename : browser/devtools/framework/test/browser_keybindings_03.js => devtools/client/framework/test/browser_keybindings_03.js rename : browser/devtools/framework/test/browser_new_activation_workflow.js => devtools/client/framework/test/browser_new_activation_workflow.js rename : browser/devtools/framework/test/browser_target_events.js => devtools/client/framework/test/browser_target_events.js rename : browser/devtools/framework/test/browser_target_remote.js => devtools/client/framework/test/browser_target_remote.js rename : browser/devtools/framework/test/browser_target_support.js => devtools/client/framework/test/browser_target_support.js rename : browser/devtools/framework/test/browser_toolbox_custom_host.js => devtools/client/framework/test/browser_toolbox_custom_host.js rename : browser/devtools/framework/test/browser_toolbox_dynamic_registration.js => devtools/client/framework/test/browser_toolbox_dynamic_registration.js rename : browser/devtools/framework/test/browser_toolbox_getpanelwhenready.js => devtools/client/framework/test/browser_toolbox_getpanelwhenready.js rename : browser/devtools/framework/test/browser_toolbox_highlight.js => devtools/client/framework/test/browser_toolbox_highlight.js rename : browser/devtools/framework/test/browser_toolbox_hosts.js => devtools/client/framework/test/browser_toolbox_hosts.js rename : browser/devtools/framework/test/browser_toolbox_hosts_size.js => devtools/client/framework/test/browser_toolbox_hosts_size.js rename : browser/devtools/framework/test/browser_toolbox_minimize.js => devtools/client/framework/test/browser_toolbox_minimize.js rename : browser/devtools/framework/test/browser_toolbox_options.js => devtools/client/framework/test/browser_toolbox_options.js rename : browser/devtools/framework/test/browser_toolbox_options_disable_buttons.js => devtools/client/framework/test/browser_toolbox_options_disable_buttons.js rename : browser/devtools/framework/test/browser_toolbox_options_disable_cache-01.js => devtools/client/framework/test/browser_toolbox_options_disable_cache-01.js rename : browser/devtools/framework/test/browser_toolbox_options_disable_cache-02.js => devtools/client/framework/test/browser_toolbox_options_disable_cache-02.js rename : browser/devtools/framework/test/browser_toolbox_options_disable_cache.sjs => devtools/client/framework/test/browser_toolbox_options_disable_cache.sjs rename : browser/devtools/framework/test/browser_toolbox_options_disable_js.html => devtools/client/framework/test/browser_toolbox_options_disable_js.html rename : browser/devtools/framework/test/browser_toolbox_options_disable_js.js => devtools/client/framework/test/browser_toolbox_options_disable_js.js rename : browser/devtools/framework/test/browser_toolbox_options_disable_js_iframe.html => devtools/client/framework/test/browser_toolbox_options_disable_js_iframe.html rename : browser/devtools/framework/test/browser_toolbox_options_enable_serviceworkers_testing.html => devtools/client/framework/test/browser_toolbox_options_enable_serviceworkers_testing.html rename : browser/devtools/framework/test/browser_toolbox_options_enable_serviceworkers_testing.js => devtools/client/framework/test/browser_toolbox_options_enable_serviceworkers_testing.js rename : browser/devtools/framework/test/browser_toolbox_options_enable_serviceworkers_testing_frame_script.js => devtools/client/framework/test/browser_toolbox_options_enable_serviceworkers_testing_frame_script.js rename : browser/devtools/framework/test/browser_toolbox_raise.js => devtools/client/framework/test/browser_toolbox_raise.js rename : browser/devtools/framework/test/browser_toolbox_ready.js => devtools/client/framework/test/browser_toolbox_ready.js rename : browser/devtools/framework/test/browser_toolbox_select_event.js => devtools/client/framework/test/browser_toolbox_select_event.js rename : browser/devtools/framework/test/browser_toolbox_selected_tool_unavailable.js => devtools/client/framework/test/browser_toolbox_selected_tool_unavailable.js rename : browser/devtools/framework/test/browser_toolbox_sidebar.js => devtools/client/framework/test/browser_toolbox_sidebar.js rename : browser/devtools/framework/test/browser_toolbox_sidebar_events.js => devtools/client/framework/test/browser_toolbox_sidebar_events.js rename : browser/devtools/framework/test/browser_toolbox_sidebar_existing_tabs.js => devtools/client/framework/test/browser_toolbox_sidebar_existing_tabs.js rename : browser/devtools/framework/test/browser_toolbox_sidebar_overflow_menu.js => devtools/client/framework/test/browser_toolbox_sidebar_overflow_menu.js rename : browser/devtools/framework/test/browser_toolbox_sidebar_tool.xul => devtools/client/framework/test/browser_toolbox_sidebar_tool.xul rename : browser/devtools/framework/test/browser_toolbox_tabsswitch_shortcuts.js => devtools/client/framework/test/browser_toolbox_tabsswitch_shortcuts.js rename : browser/devtools/framework/test/browser_toolbox_textbox_context_menu.js => devtools/client/framework/test/browser_toolbox_textbox_context_menu.js rename : browser/devtools/framework/test/browser_toolbox_theme_registration.js => devtools/client/framework/test/browser_toolbox_theme_registration.js rename : browser/devtools/framework/test/browser_toolbox_toggle.js => devtools/client/framework/test/browser_toolbox_toggle.js rename : browser/devtools/framework/test/browser_toolbox_tool_ready.js => devtools/client/framework/test/browser_toolbox_tool_ready.js rename : browser/devtools/framework/test/browser_toolbox_tool_remote_reopen.js => devtools/client/framework/test/browser_toolbox_tool_remote_reopen.js rename : browser/devtools/framework/test/browser_toolbox_transport_events.js => devtools/client/framework/test/browser_toolbox_transport_events.js rename : browser/devtools/framework/test/browser_toolbox_view_source_01.js => devtools/client/framework/test/browser_toolbox_view_source_01.js rename : browser/devtools/framework/test/browser_toolbox_view_source_02.js => devtools/client/framework/test/browser_toolbox_view_source_02.js rename : browser/devtools/framework/test/browser_toolbox_view_source_03.js => devtools/client/framework/test/browser_toolbox_view_source_03.js rename : browser/devtools/framework/test/browser_toolbox_view_source_04.js => devtools/client/framework/test/browser_toolbox_view_source_04.js rename : browser/devtools/framework/test/browser_toolbox_window_reload_target.js => devtools/client/framework/test/browser_toolbox_window_reload_target.js rename : browser/devtools/framework/test/browser_toolbox_window_shortcuts.js => devtools/client/framework/test/browser_toolbox_window_shortcuts.js rename : browser/devtools/framework/test/browser_toolbox_window_title_changes.js => devtools/client/framework/test/browser_toolbox_window_title_changes.js rename : browser/devtools/framework/test/browser_toolbox_zoom.js => devtools/client/framework/test/browser_toolbox_zoom.js rename : browser/devtools/framework/test/browser_two_tabs.js => devtools/client/framework/test/browser_two_tabs.js rename : browser/devtools/framework/test/code_math.js => devtools/client/framework/test/code_math.js rename : browser/devtools/framework/test/doc_theme.css => devtools/client/framework/test/doc_theme.css rename : browser/devtools/framework/test/doc_viewsource.html => devtools/client/framework/test/doc_viewsource.html rename : browser/devtools/framework/test/head.js => devtools/client/framework/test/head.js rename : browser/devtools/framework/test/helper_disable_cache.js => devtools/client/framework/test/helper_disable_cache.js rename : browser/devtools/framework/test/serviceworker.js => devtools/client/framework/test/serviceworker.js rename : browser/devtools/framework/test/shared-head.js => devtools/client/framework/test/shared-head.js rename : browser/devtools/framework/toolbox-highlighter-utils.js => devtools/client/framework/toolbox-highlighter-utils.js rename : browser/devtools/framework/toolbox-hosts.js => devtools/client/framework/toolbox-hosts.js rename : browser/devtools/framework/toolbox-options.js => devtools/client/framework/toolbox-options.js rename : browser/devtools/framework/toolbox-options.xul => devtools/client/framework/toolbox-options.xul rename : browser/devtools/framework/toolbox-process-window.js => devtools/client/framework/toolbox-process-window.js rename : browser/devtools/framework/toolbox-process-window.xul => devtools/client/framework/toolbox-process-window.xul rename : browser/devtools/framework/toolbox-window.xul => devtools/client/framework/toolbox-window.xul rename : browser/devtools/framework/toolbox.js => devtools/client/framework/toolbox.js rename : browser/devtools/framework/toolbox.xul => devtools/client/framework/toolbox.xul rename : browser/devtools/inspector/breadcrumbs.js => devtools/client/inspector/breadcrumbs.js rename : browser/devtools/inspector/inspector-commands.js => devtools/client/inspector/inspector-commands.js rename : browser/devtools/inspector/inspector-panel.js => devtools/client/inspector/inspector-panel.js rename : browser/devtools/inspector/inspector.css => devtools/client/inspector/inspector.css rename : browser/devtools/inspector/inspector.xul => devtools/client/inspector/inspector.xul rename : browser/devtools/inspector/moz.build => devtools/client/inspector/moz.build rename : browser/devtools/inspector/selector-search.js => devtools/client/inspector/selector-search.js rename : browser/devtools/inspector/test/.eslintrc => devtools/client/inspector/test/.eslintrc rename : browser/devtools/inspector/test/browser.ini => devtools/client/inspector/test/browser.ini rename : browser/devtools/inspector/test/browser_inspector_breadcrumbs.js => devtools/client/inspector/test/browser_inspector_breadcrumbs.js rename : browser/devtools/inspector/test/browser_inspector_breadcrumbs_highlight_hover.js => devtools/client/inspector/test/browser_inspector_breadcrumbs_highlight_hover.js rename : browser/devtools/inspector/test/browser_inspector_breadcrumbs_keybinding.js => devtools/client/inspector/test/browser_inspector_breadcrumbs_keybinding.js rename : browser/devtools/inspector/test/browser_inspector_breadcrumbs_menu.js => devtools/client/inspector/test/browser_inspector_breadcrumbs_menu.js rename : browser/devtools/inspector/test/browser_inspector_breadcrumbs_mutations.js => devtools/client/inspector/test/browser_inspector_breadcrumbs_mutations.js rename : browser/devtools/inspector/test/browser_inspector_delete-selected-node-01.js => devtools/client/inspector/test/browser_inspector_delete-selected-node-01.js rename : browser/devtools/inspector/test/browser_inspector_delete-selected-node-02.js => devtools/client/inspector/test/browser_inspector_delete-selected-node-02.js rename : browser/devtools/inspector/test/browser_inspector_delete-selected-node-03.js => devtools/client/inspector/test/browser_inspector_delete-selected-node-03.js rename : browser/devtools/inspector/test/browser_inspector_destroy-after-navigation.js => devtools/client/inspector/test/browser_inspector_destroy-after-navigation.js rename : browser/devtools/inspector/test/browser_inspector_destroy-before-ready.js => devtools/client/inspector/test/browser_inspector_destroy-before-ready.js rename : browser/devtools/inspector/test/browser_inspector_gcli-inspect-command.js => devtools/client/inspector/test/browser_inspector_gcli-inspect-command.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-01.js => devtools/client/inspector/test/browser_inspector_highlighter-01.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-02.js => devtools/client/inspector/test/browser_inspector_highlighter-02.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-03.js => devtools/client/inspector/test/browser_inspector_highlighter-03.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-04.js => devtools/client/inspector/test/browser_inspector_highlighter-04.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-by-type.js => devtools/client/inspector/test/browser_inspector_highlighter-by-type.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-comments.js => devtools/client/inspector/test/browser_inspector_highlighter-comments.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-csstransform_01.js => devtools/client/inspector/test/browser_inspector_highlighter-csstransform_01.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-csstransform_02.js => devtools/client/inspector/test/browser_inspector_highlighter-csstransform_02.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-geometry_01.js => devtools/client/inspector/test/browser_inspector_highlighter-geometry_01.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-geometry_02.js => devtools/client/inspector/test/browser_inspector_highlighter-geometry_02.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-geometry_03.js => devtools/client/inspector/test/browser_inspector_highlighter-geometry_03.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-geometry_04.js => devtools/client/inspector/test/browser_inspector_highlighter-geometry_04.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-geometry_05.js => devtools/client/inspector/test/browser_inspector_highlighter-geometry_05.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-hover_01.js => devtools/client/inspector/test/browser_inspector_highlighter-hover_01.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-hover_02.js => devtools/client/inspector/test/browser_inspector_highlighter-hover_02.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-hover_03.js => devtools/client/inspector/test/browser_inspector_highlighter-hover_03.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-iframes.js => devtools/client/inspector/test/browser_inspector_highlighter-iframes.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-inline.js => devtools/client/inspector/test/browser_inspector_highlighter-inline.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-keybinding_01.js => devtools/client/inspector/test/browser_inspector_highlighter-keybinding_01.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-keybinding_02.js => devtools/client/inspector/test/browser_inspector_highlighter-keybinding_02.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-keybinding_03.js => devtools/client/inspector/test/browser_inspector_highlighter-keybinding_03.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-keybinding_04.js => devtools/client/inspector/test/browser_inspector_highlighter-keybinding_04.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-options.js => devtools/client/inspector/test/browser_inspector_highlighter-options.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-rect_01.js => devtools/client/inspector/test/browser_inspector_highlighter-rect_01.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-rect_02.js => devtools/client/inspector/test/browser_inspector_highlighter-rect_02.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-rulers_01.js => devtools/client/inspector/test/browser_inspector_highlighter-rulers_01.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-rulers_02.js => devtools/client/inspector/test/browser_inspector_highlighter-rulers_02.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-selector_01.js => devtools/client/inspector/test/browser_inspector_highlighter-selector_01.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-selector_02.js => devtools/client/inspector/test/browser_inspector_highlighter-selector_02.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-xbl.js => devtools/client/inspector/test/browser_inspector_highlighter-xbl.js rename : browser/devtools/inspector/test/browser_inspector_highlighter-zoom.js => devtools/client/inspector/test/browser_inspector_highlighter-zoom.js rename : browser/devtools/inspector/test/browser_inspector_iframe-navigation.js => devtools/client/inspector/test/browser_inspector_iframe-navigation.js rename : browser/devtools/inspector/test/browser_inspector_infobar_01.js => devtools/client/inspector/test/browser_inspector_infobar_01.js rename : browser/devtools/inspector/test/browser_inspector_initialization.js => devtools/client/inspector/test/browser_inspector_initialization.js rename : browser/devtools/inspector/test/browser_inspector_inspect-object-element.js => devtools/client/inspector/test/browser_inspector_inspect-object-element.js rename : browser/devtools/inspector/test/browser_inspector_invalidate.js => devtools/client/inspector/test/browser_inspector_invalidate.js rename : browser/devtools/inspector/test/browser_inspector_keyboard-shortcuts-copy-outerhtml.js => devtools/client/inspector/test/browser_inspector_keyboard-shortcuts-copy-outerhtml.js rename : browser/devtools/inspector/test/browser_inspector_keyboard-shortcuts.js => devtools/client/inspector/test/browser_inspector_keyboard-shortcuts.js rename : browser/devtools/inspector/test/browser_inspector_menu-01-sensitivity.js => devtools/client/inspector/test/browser_inspector_menu-01-sensitivity.js rename : browser/devtools/inspector/test/browser_inspector_menu-02-copy-items.js => devtools/client/inspector/test/browser_inspector_menu-02-copy-items.js rename : browser/devtools/inspector/test/browser_inspector_menu-03-paste-items.js => devtools/client/inspector/test/browser_inspector_menu-03-paste-items.js rename : browser/devtools/inspector/test/browser_inspector_menu-04-use-in-console.js => devtools/client/inspector/test/browser_inspector_menu-04-use-in-console.js rename : browser/devtools/inspector/test/browser_inspector_menu-05-other.js => devtools/client/inspector/test/browser_inspector_menu-05-other.js rename : browser/devtools/inspector/test/browser_inspector_navigation.js => devtools/client/inspector/test/browser_inspector_navigation.js rename : browser/devtools/inspector/test/browser_inspector_pane-toggle-01.js => devtools/client/inspector/test/browser_inspector_pane-toggle-01.js rename : browser/devtools/inspector/test/browser_inspector_pane-toggle-02.js => devtools/client/inspector/test/browser_inspector_pane-toggle-02.js rename : browser/devtools/inspector/test/browser_inspector_pane-toggle-03.js => devtools/client/inspector/test/browser_inspector_pane-toggle-03.js rename : browser/devtools/inspector/test/browser_inspector_picker-stop-on-destroy.js => devtools/client/inspector/test/browser_inspector_picker-stop-on-destroy.js rename : browser/devtools/inspector/test/browser_inspector_picker-stop-on-tool-change.js => devtools/client/inspector/test/browser_inspector_picker-stop-on-tool-change.js rename : browser/devtools/inspector/test/browser_inspector_pseudoclass-lock.js => devtools/client/inspector/test/browser_inspector_pseudoclass-lock.js rename : browser/devtools/inspector/test/browser_inspector_pseudoclass-menu.js => devtools/client/inspector/test/browser_inspector_pseudoclass-menu.js rename : browser/devtools/inspector/test/browser_inspector_reload-01.js => devtools/client/inspector/test/browser_inspector_reload-01.js rename : browser/devtools/inspector/test/browser_inspector_reload-02.js => devtools/client/inspector/test/browser_inspector_reload-02.js rename : browser/devtools/inspector/test/browser_inspector_remove-iframe-during-load.js => devtools/client/inspector/test/browser_inspector_remove-iframe-during-load.js rename : browser/devtools/inspector/test/browser_inspector_scrolling.js => devtools/client/inspector/test/browser_inspector_scrolling.js rename : browser/devtools/inspector/test/browser_inspector_search-01.js => devtools/client/inspector/test/browser_inspector_search-01.js rename : browser/devtools/inspector/test/browser_inspector_search-02.js => devtools/client/inspector/test/browser_inspector_search-02.js rename : browser/devtools/inspector/test/browser_inspector_search-03.js => devtools/client/inspector/test/browser_inspector_search-03.js rename : browser/devtools/inspector/test/browser_inspector_search-04.js => devtools/client/inspector/test/browser_inspector_search-04.js rename : browser/devtools/inspector/test/browser_inspector_search-05.js => devtools/client/inspector/test/browser_inspector_search-05.js rename : browser/devtools/inspector/test/browser_inspector_search-06.js => devtools/client/inspector/test/browser_inspector_search-06.js rename : browser/devtools/inspector/test/browser_inspector_search-navigation.js => devtools/client/inspector/test/browser_inspector_search-navigation.js rename : browser/devtools/inspector/test/browser_inspector_search-reserved.js => devtools/client/inspector/test/browser_inspector_search-reserved.js rename : browser/devtools/inspector/test/browser_inspector_search-suggests-ids-and-classes.js => devtools/client/inspector/test/browser_inspector_search-suggests-ids-and-classes.js rename : browser/devtools/inspector/test/browser_inspector_select-docshell.js => devtools/client/inspector/test/browser_inspector_select-docshell.js rename : browser/devtools/inspector/test/browser_inspector_select-last-selected.js => devtools/client/inspector/test/browser_inspector_select-last-selected.js rename : browser/devtools/inspector/test/browser_inspector_sidebarstate.js => devtools/client/inspector/test/browser_inspector_sidebarstate.js rename : browser/devtools/inspector/test/browser_inspector_switch-to-inspector-on-pick.js => devtools/client/inspector/test/browser_inspector_switch-to-inspector-on-pick.js rename : browser/devtools/inspector/test/doc_inspector_breadcrumbs.html => devtools/client/inspector/test/doc_inspector_breadcrumbs.html rename : browser/devtools/inspector/test/doc_inspector_delete-selected-node-01.html => devtools/client/inspector/test/doc_inspector_delete-selected-node-01.html rename : browser/devtools/inspector/test/doc_inspector_delete-selected-node-02.html => devtools/client/inspector/test/doc_inspector_delete-selected-node-02.html rename : browser/devtools/inspector/test/doc_inspector_gcli-inspect-command.html => devtools/client/inspector/test/doc_inspector_gcli-inspect-command.html rename : browser/devtools/inspector/test/doc_inspector_highlight_after_transition.html => devtools/client/inspector/test/doc_inspector_highlight_after_transition.html rename : browser/devtools/inspector/test/doc_inspector_highlighter-comments.html => devtools/client/inspector/test/doc_inspector_highlighter-comments.html rename : browser/devtools/inspector/test/doc_inspector_highlighter-geometry_01.html => devtools/client/inspector/test/doc_inspector_highlighter-geometry_01.html rename : browser/devtools/inspector/test/doc_inspector_highlighter-geometry_02.html => devtools/client/inspector/test/doc_inspector_highlighter-geometry_02.html rename : browser/devtools/inspector/test/doc_inspector_highlighter.html => devtools/client/inspector/test/doc_inspector_highlighter.html rename : browser/devtools/inspector/test/doc_inspector_highlighter_csstransform.html => devtools/client/inspector/test/doc_inspector_highlighter_csstransform.html rename : browser/devtools/inspector/test/doc_inspector_highlighter_dom.html => devtools/client/inspector/test/doc_inspector_highlighter_dom.html rename : browser/devtools/inspector/test/doc_inspector_highlighter_inline.html => devtools/client/inspector/test/doc_inspector_highlighter_inline.html rename : browser/devtools/inspector/test/doc_inspector_highlighter_rect.html => devtools/client/inspector/test/doc_inspector_highlighter_rect.html rename : browser/devtools/inspector/test/doc_inspector_highlighter_rect_iframe.html => devtools/client/inspector/test/doc_inspector_highlighter_rect_iframe.html rename : browser/devtools/inspector/test/doc_inspector_highlighter_xbl.xul => devtools/client/inspector/test/doc_inspector_highlighter_xbl.xul rename : browser/devtools/inspector/test/doc_inspector_infobar.html => devtools/client/inspector/test/doc_inspector_infobar.html rename : browser/devtools/inspector/test/doc_inspector_infobar_01.html => devtools/client/inspector/test/doc_inspector_infobar_01.html rename : browser/devtools/inspector/test/doc_inspector_infobar_02.html => devtools/client/inspector/test/doc_inspector_infobar_02.html rename : browser/devtools/inspector/test/doc_inspector_menu.html => devtools/client/inspector/test/doc_inspector_menu.html rename : browser/devtools/inspector/test/doc_inspector_outerhtml.html => devtools/client/inspector/test/doc_inspector_outerhtml.html rename : browser/devtools/inspector/test/doc_inspector_remove-iframe-during-load.html => devtools/client/inspector/test/doc_inspector_remove-iframe-during-load.html rename : browser/devtools/inspector/test/doc_inspector_search-reserved.html => devtools/client/inspector/test/doc_inspector_search-reserved.html rename : browser/devtools/inspector/test/doc_inspector_search-suggestions.html => devtools/client/inspector/test/doc_inspector_search-suggestions.html rename : browser/devtools/inspector/test/doc_inspector_search.html => devtools/client/inspector/test/doc_inspector_search.html rename : browser/devtools/inspector/test/doc_inspector_select-last-selected-01.html => devtools/client/inspector/test/doc_inspector_select-last-selected-01.html rename : browser/devtools/inspector/test/doc_inspector_select-last-selected-02.html => devtools/client/inspector/test/doc_inspector_select-last-selected-02.html rename : browser/devtools/inspector/test/head.js => devtools/client/inspector/test/head.js rename : browser/devtools/jar.mn => devtools/client/jar.mn rename : browser/devtools/layoutview/moz.build => devtools/client/layoutview/moz.build rename : browser/devtools/layoutview/test/.eslintrc => devtools/client/layoutview/test/.eslintrc rename : browser/devtools/layoutview/test/browser.ini => devtools/client/layoutview/test/browser.ini rename : browser/devtools/layoutview/test/browser_layoutview.js => devtools/client/layoutview/test/browser_layoutview.js rename : browser/devtools/layoutview/test/browser_layoutview_editablemodel.js => devtools/client/layoutview/test/browser_layoutview_editablemodel.js rename : browser/devtools/layoutview/test/browser_layoutview_editablemodel_allproperties.js => devtools/client/layoutview/test/browser_layoutview_editablemodel_allproperties.js rename : browser/devtools/layoutview/test/browser_layoutview_editablemodel_border.js => devtools/client/layoutview/test/browser_layoutview_editablemodel_border.js rename : browser/devtools/layoutview/test/browser_layoutview_editablemodel_stylerules.js => devtools/client/layoutview/test/browser_layoutview_editablemodel_stylerules.js rename : browser/devtools/layoutview/test/browser_layoutview_guides.js => devtools/client/layoutview/test/browser_layoutview_guides.js rename : browser/devtools/layoutview/test/browser_layoutview_rotate-labels-on-sides.js => devtools/client/layoutview/test/browser_layoutview_rotate-labels-on-sides.js rename : browser/devtools/layoutview/test/browser_layoutview_tooltips.js => devtools/client/layoutview/test/browser_layoutview_tooltips.js rename : browser/devtools/layoutview/test/browser_layoutview_update-after-navigation.js => devtools/client/layoutview/test/browser_layoutview_update-after-navigation.js rename : browser/devtools/layoutview/test/browser_layoutview_update-after-reload.js => devtools/client/layoutview/test/browser_layoutview_update-after-reload.js rename : browser/devtools/layoutview/test/browser_layoutview_update-in-iframes.js => devtools/client/layoutview/test/browser_layoutview_update-in-iframes.js rename : browser/devtools/layoutview/test/doc_layoutview_iframe1.html => devtools/client/layoutview/test/doc_layoutview_iframe1.html rename : browser/devtools/layoutview/test/doc_layoutview_iframe2.html => devtools/client/layoutview/test/doc_layoutview_iframe2.html rename : browser/devtools/layoutview/test/head.js => devtools/client/layoutview/test/head.js rename : browser/devtools/layoutview/view.js => devtools/client/layoutview/view.js rename : browser/devtools/layoutview/view.xhtml => devtools/client/layoutview/view.xhtml rename : browser/devtools/main.js => devtools/client/main.js rename : browser/devtools/markupview/html-editor.js => devtools/client/markupview/html-editor.js rename : browser/devtools/markupview/markup-view.css => devtools/client/markupview/markup-view.css rename : browser/devtools/markupview/markup-view.js => devtools/client/markupview/markup-view.js rename : browser/devtools/markupview/markup-view.xhtml => devtools/client/markupview/markup-view.xhtml rename : browser/devtools/markupview/moz.build => devtools/client/markupview/moz.build rename : browser/devtools/markupview/test/.eslintrc => devtools/client/markupview/test/.eslintrc rename : browser/devtools/markupview/test/actor_events_form.js => devtools/client/markupview/test/actor_events_form.js rename : browser/devtools/markupview/test/browser.ini => devtools/client/markupview/test/browser.ini rename : browser/devtools/markupview/test/browser_markupview_anonymous_01.js => devtools/client/markupview/test/browser_markupview_anonymous_01.js rename : browser/devtools/markupview/test/browser_markupview_anonymous_02.js => devtools/client/markupview/test/browser_markupview_anonymous_02.js rename : browser/devtools/markupview/test/browser_markupview_anonymous_03.js => devtools/client/markupview/test/browser_markupview_anonymous_03.js rename : browser/devtools/markupview/test/browser_markupview_anonymous_04.js => devtools/client/markupview/test/browser_markupview_anonymous_04.js rename : browser/devtools/markupview/test/browser_markupview_copy_image_data.js => devtools/client/markupview/test/browser_markupview_copy_image_data.js rename : browser/devtools/markupview/test/browser_markupview_css_completion_style_attribute.js => devtools/client/markupview/test/browser_markupview_css_completion_style_attribute.js rename : browser/devtools/markupview/test/browser_markupview_dragdrop_autoscroll.js => devtools/client/markupview/test/browser_markupview_dragdrop_autoscroll.js rename : browser/devtools/markupview/test/browser_markupview_dragdrop_dragRootNode.js => devtools/client/markupview/test/browser_markupview_dragdrop_dragRootNode.js rename : browser/devtools/markupview/test/browser_markupview_dragdrop_escapeKeyPress.js => devtools/client/markupview/test/browser_markupview_dragdrop_escapeKeyPress.js rename : browser/devtools/markupview/test/browser_markupview_dragdrop_invalidNodes.js => devtools/client/markupview/test/browser_markupview_dragdrop_invalidNodes.js rename : browser/devtools/markupview/test/browser_markupview_dragdrop_isDragging.js => devtools/client/markupview/test/browser_markupview_dragdrop_isDragging.js rename : browser/devtools/markupview/test/browser_markupview_dragdrop_reorder.js => devtools/client/markupview/test/browser_markupview_dragdrop_reorder.js rename : browser/devtools/markupview/test/browser_markupview_dragdrop_textSelection.js => devtools/client/markupview/test/browser_markupview_dragdrop_textSelection.js rename : browser/devtools/markupview/test/browser_markupview_events-overflow.js => devtools/client/markupview/test/browser_markupview_events-overflow.js rename : browser/devtools/markupview/test/browser_markupview_events.js => devtools/client/markupview/test/browser_markupview_events.js rename : browser/devtools/markupview/test/browser_markupview_events_form.js => devtools/client/markupview/test/browser_markupview_events_form.js rename : browser/devtools/markupview/test/browser_markupview_events_jquery_1.0.js => devtools/client/markupview/test/browser_markupview_events_jquery_1.0.js rename : browser/devtools/markupview/test/browser_markupview_events_jquery_1.1.js => devtools/client/markupview/test/browser_markupview_events_jquery_1.1.js rename : browser/devtools/markupview/test/browser_markupview_events_jquery_1.11.1.js => devtools/client/markupview/test/browser_markupview_events_jquery_1.11.1.js rename : browser/devtools/markupview/test/browser_markupview_events_jquery_1.2.js => devtools/client/markupview/test/browser_markupview_events_jquery_1.2.js rename : browser/devtools/markupview/test/browser_markupview_events_jquery_1.3.js => devtools/client/markupview/test/browser_markupview_events_jquery_1.3.js rename : browser/devtools/markupview/test/browser_markupview_events_jquery_1.4.js => devtools/client/markupview/test/browser_markupview_events_jquery_1.4.js rename : browser/devtools/markupview/test/browser_markupview_events_jquery_1.6.js => devtools/client/markupview/test/browser_markupview_events_jquery_1.6.js rename : browser/devtools/markupview/test/browser_markupview_events_jquery_1.7.js => devtools/client/markupview/test/browser_markupview_events_jquery_1.7.js rename : browser/devtools/markupview/test/browser_markupview_events_jquery_2.1.1.js => devtools/client/markupview/test/browser_markupview_events_jquery_2.1.1.js rename : browser/devtools/markupview/test/browser_markupview_html_edit_01.js => devtools/client/markupview/test/browser_markupview_html_edit_01.js rename : browser/devtools/markupview/test/browser_markupview_html_edit_02.js => devtools/client/markupview/test/browser_markupview_html_edit_02.js rename : browser/devtools/markupview/test/browser_markupview_html_edit_03.js => devtools/client/markupview/test/browser_markupview_html_edit_03.js rename : browser/devtools/markupview/test/browser_markupview_image_tooltip.js => devtools/client/markupview/test/browser_markupview_image_tooltip.js rename : browser/devtools/markupview/test/browser_markupview_image_tooltip_mutations.js => devtools/client/markupview/test/browser_markupview_image_tooltip_mutations.js rename : browser/devtools/markupview/test/browser_markupview_keybindings_01.js => devtools/client/markupview/test/browser_markupview_keybindings_01.js rename : browser/devtools/markupview/test/browser_markupview_keybindings_02.js => devtools/client/markupview/test/browser_markupview_keybindings_02.js rename : browser/devtools/markupview/test/browser_markupview_keybindings_03.js => devtools/client/markupview/test/browser_markupview_keybindings_03.js rename : browser/devtools/markupview/test/browser_markupview_keybindings_04.js => devtools/client/markupview/test/browser_markupview_keybindings_04.js rename : browser/devtools/markupview/test/browser_markupview_links_01.js => devtools/client/markupview/test/browser_markupview_links_01.js rename : browser/devtools/markupview/test/browser_markupview_links_02.js => devtools/client/markupview/test/browser_markupview_links_02.js rename : browser/devtools/markupview/test/browser_markupview_links_03.js => devtools/client/markupview/test/browser_markupview_links_03.js rename : browser/devtools/markupview/test/browser_markupview_links_04.js => devtools/client/markupview/test/browser_markupview_links_04.js rename : browser/devtools/markupview/test/browser_markupview_links_05.js => devtools/client/markupview/test/browser_markupview_links_05.js rename : browser/devtools/markupview/test/browser_markupview_links_06.js => devtools/client/markupview/test/browser_markupview_links_06.js rename : browser/devtools/markupview/test/browser_markupview_links_07.js => devtools/client/markupview/test/browser_markupview_links_07.js rename : browser/devtools/markupview/test/browser_markupview_load_01.js => devtools/client/markupview/test/browser_markupview_load_01.js rename : browser/devtools/markupview/test/browser_markupview_mutation_01.js => devtools/client/markupview/test/browser_markupview_mutation_01.js rename : browser/devtools/markupview/test/browser_markupview_mutation_02.js => devtools/client/markupview/test/browser_markupview_mutation_02.js rename : browser/devtools/markupview/test/browser_markupview_navigation.js => devtools/client/markupview/test/browser_markupview_navigation.js rename : browser/devtools/markupview/test/browser_markupview_node_not_displayed_01.js => devtools/client/markupview/test/browser_markupview_node_not_displayed_01.js rename : browser/devtools/markupview/test/browser_markupview_node_not_displayed_02.js => devtools/client/markupview/test/browser_markupview_node_not_displayed_02.js rename : browser/devtools/markupview/test/browser_markupview_pagesize_01.js => devtools/client/markupview/test/browser_markupview_pagesize_01.js rename : browser/devtools/markupview/test/browser_markupview_pagesize_02.js => devtools/client/markupview/test/browser_markupview_pagesize_02.js rename : browser/devtools/markupview/test/browser_markupview_remove_xul_attributes.js => devtools/client/markupview/test/browser_markupview_remove_xul_attributes.js rename : browser/devtools/markupview/test/browser_markupview_search_01.js => devtools/client/markupview/test/browser_markupview_search_01.js rename : browser/devtools/markupview/test/browser_markupview_tag_edit_01.js => devtools/client/markupview/test/browser_markupview_tag_edit_01.js rename : browser/devtools/markupview/test/browser_markupview_tag_edit_02.js => devtools/client/markupview/test/browser_markupview_tag_edit_02.js rename : browser/devtools/markupview/test/browser_markupview_tag_edit_03.js => devtools/client/markupview/test/browser_markupview_tag_edit_03.js rename : browser/devtools/markupview/test/browser_markupview_tag_edit_04.js => devtools/client/markupview/test/browser_markupview_tag_edit_04.js rename : browser/devtools/markupview/test/browser_markupview_tag_edit_05.js => devtools/client/markupview/test/browser_markupview_tag_edit_05.js rename : browser/devtools/markupview/test/browser_markupview_tag_edit_06.js => devtools/client/markupview/test/browser_markupview_tag_edit_06.js rename : browser/devtools/markupview/test/browser_markupview_tag_edit_07.js => devtools/client/markupview/test/browser_markupview_tag_edit_07.js rename : browser/devtools/markupview/test/browser_markupview_tag_edit_08.js => devtools/client/markupview/test/browser_markupview_tag_edit_08.js rename : browser/devtools/markupview/test/browser_markupview_tag_edit_09.js => devtools/client/markupview/test/browser_markupview_tag_edit_09.js rename : browser/devtools/markupview/test/browser_markupview_tag_edit_10.js => devtools/client/markupview/test/browser_markupview_tag_edit_10.js rename : browser/devtools/markupview/test/browser_markupview_tag_edit_11.js => devtools/client/markupview/test/browser_markupview_tag_edit_11.js rename : browser/devtools/markupview/test/browser_markupview_tag_edit_12.js => devtools/client/markupview/test/browser_markupview_tag_edit_12.js rename : browser/devtools/markupview/test/browser_markupview_textcontent_edit_01.js => devtools/client/markupview/test/browser_markupview_textcontent_edit_01.js rename : browser/devtools/markupview/test/browser_markupview_toggle_01.js => devtools/client/markupview/test/browser_markupview_toggle_01.js rename : browser/devtools/markupview/test/browser_markupview_toggle_02.js => devtools/client/markupview/test/browser_markupview_toggle_02.js rename : browser/devtools/markupview/test/browser_markupview_toggle_03.js => devtools/client/markupview/test/browser_markupview_toggle_03.js rename : browser/devtools/markupview/test/browser_markupview_update-on-navigtion.js => devtools/client/markupview/test/browser_markupview_update-on-navigtion.js rename : browser/devtools/markupview/test/doc_markup_anonymous.html => devtools/client/markupview/test/doc_markup_anonymous.html rename : browser/devtools/markupview/test/doc_markup_dragdrop.html => devtools/client/markupview/test/doc_markup_dragdrop.html rename : browser/devtools/markupview/test/doc_markup_dragdrop_autoscroll.html => devtools/client/markupview/test/doc_markup_dragdrop_autoscroll.html rename : browser/devtools/markupview/test/doc_markup_edit.html => devtools/client/markupview/test/doc_markup_edit.html rename : browser/devtools/markupview/test/doc_markup_events-overflow.html => devtools/client/markupview/test/doc_markup_events-overflow.html rename : browser/devtools/markupview/test/doc_markup_events.html => devtools/client/markupview/test/doc_markup_events.html rename : browser/devtools/markupview/test/doc_markup_events_form.html => devtools/client/markupview/test/doc_markup_events_form.html rename : browser/devtools/markupview/test/doc_markup_events_jquery.html => devtools/client/markupview/test/doc_markup_events_jquery.html rename : browser/devtools/markupview/test/doc_markup_flashing.html => devtools/client/markupview/test/doc_markup_flashing.html rename : browser/devtools/markupview/test/doc_markup_links.html => devtools/client/markupview/test/doc_markup_links.html rename : browser/devtools/markupview/test/doc_markup_mutation.html => devtools/client/markupview/test/doc_markup_mutation.html rename : browser/devtools/markupview/test/doc_markup_navigation.html => devtools/client/markupview/test/doc_markup_navigation.html rename : browser/devtools/markupview/test/doc_markup_not_displayed.html => devtools/client/markupview/test/doc_markup_not_displayed.html rename : browser/devtools/markupview/test/doc_markup_pagesize_01.html => devtools/client/markupview/test/doc_markup_pagesize_01.html rename : browser/devtools/markupview/test/doc_markup_pagesize_02.html => devtools/client/markupview/test/doc_markup_pagesize_02.html rename : browser/devtools/markupview/test/doc_markup_search.html => devtools/client/markupview/test/doc_markup_search.html rename : browser/devtools/markupview/test/doc_markup_svg_attributes.html => devtools/client/markupview/test/doc_markup_svg_attributes.html rename : browser/devtools/markupview/test/doc_markup_toggle.html => devtools/client/markupview/test/doc_markup_toggle.html rename : browser/devtools/markupview/test/doc_markup_tooltip.png => devtools/client/markupview/test/doc_markup_tooltip.png rename : browser/devtools/markupview/test/doc_markup_xul.xul => devtools/client/markupview/test/doc_markup_xul.xul rename : browser/devtools/markupview/test/frame-script-utils.js => devtools/client/markupview/test/frame-script-utils.js rename : browser/devtools/markupview/test/head.js => devtools/client/markupview/test/head.js rename : browser/devtools/markupview/test/helper_attributes_test_runner.js => devtools/client/markupview/test/helper_attributes_test_runner.js rename : browser/devtools/markupview/test/helper_events_test_runner.js => devtools/client/markupview/test/helper_events_test_runner.js rename : browser/devtools/markupview/test/helper_outerhtml_test_runner.js => devtools/client/markupview/test/helper_outerhtml_test_runner.js rename : browser/devtools/markupview/test/lib_jquery_1.0.js => devtools/client/markupview/test/lib_jquery_1.0.js rename : browser/devtools/markupview/test/lib_jquery_1.1.js => devtools/client/markupview/test/lib_jquery_1.1.js rename : browser/devtools/markupview/test/lib_jquery_1.11.1_min.js => devtools/client/markupview/test/lib_jquery_1.11.1_min.js rename : browser/devtools/markupview/test/lib_jquery_1.2_min.js => devtools/client/markupview/test/lib_jquery_1.2_min.js rename : browser/devtools/markupview/test/lib_jquery_1.3_min.js => devtools/client/markupview/test/lib_jquery_1.3_min.js rename : browser/devtools/markupview/test/lib_jquery_1.4_min.js => devtools/client/markupview/test/lib_jquery_1.4_min.js rename : browser/devtools/markupview/test/lib_jquery_1.6_min.js => devtools/client/markupview/test/lib_jquery_1.6_min.js rename : browser/devtools/markupview/test/lib_jquery_1.7_min.js => devtools/client/markupview/test/lib_jquery_1.7_min.js rename : browser/devtools/markupview/test/lib_jquery_2.1.1_min.js => devtools/client/markupview/test/lib_jquery_2.1.1_min.js rename : browser/devtools/memory/controller.js => devtools/client/memory/controller.js rename : browser/devtools/memory/memory.xhtml => devtools/client/memory/memory.xhtml rename : browser/devtools/memory/modules/census-view.js => devtools/client/memory/modules/census-view.js rename : browser/devtools/memory/moz.build => devtools/client/memory/moz.build rename : browser/devtools/memory/panel.js => devtools/client/memory/panel.js rename : browser/devtools/memory/test/mochitest/chrome.ini => devtools/client/memory/test/mochitest/chrome.ini rename : browser/devtools/memory/test/mochitest/head.js => devtools/client/memory/test/mochitest/head.js rename : browser/devtools/memory/test/mochitest/test_census-view-01.html => devtools/client/memory/test/mochitest/test_census-view-01.html rename : browser/devtools/moz.build => devtools/client/moz.build rename : browser/devtools/netmonitor/har/har-automation.js => devtools/client/netmonitor/har/har-automation.js rename : browser/devtools/netmonitor/har/har-builder.js => devtools/client/netmonitor/har/har-builder.js rename : browser/devtools/netmonitor/har/har-collector.js => devtools/client/netmonitor/har/har-collector.js rename : browser/devtools/netmonitor/har/har-exporter.js => devtools/client/netmonitor/har/har-exporter.js rename : browser/devtools/netmonitor/har/har-utils.js => devtools/client/netmonitor/har/har-utils.js rename : browser/devtools/netmonitor/har/moz.build => devtools/client/netmonitor/har/moz.build rename : browser/devtools/netmonitor/har/test/browser.ini => devtools/client/netmonitor/har/test/browser.ini rename : browser/devtools/netmonitor/har/test/browser_net_har_copy_all_as_har.js => devtools/client/netmonitor/har/test/browser_net_har_copy_all_as_har.js rename : browser/devtools/netmonitor/har/test/browser_net_har_post_data.js => devtools/client/netmonitor/har/test/browser_net_har_post_data.js rename : browser/devtools/netmonitor/har/test/head.js => devtools/client/netmonitor/har/test/head.js rename : browser/devtools/netmonitor/har/test/html_har_post-data-test-page.html => devtools/client/netmonitor/har/test/html_har_post-data-test-page.html rename : browser/devtools/netmonitor/har/toolbox-overlay.js => devtools/client/netmonitor/har/toolbox-overlay.js rename : browser/devtools/netmonitor/moz.build => devtools/client/netmonitor/moz.build rename : browser/devtools/netmonitor/netmonitor-controller.js => devtools/client/netmonitor/netmonitor-controller.js rename : browser/devtools/netmonitor/netmonitor-view.js => devtools/client/netmonitor/netmonitor-view.js rename : browser/devtools/netmonitor/netmonitor.css => devtools/client/netmonitor/netmonitor.css rename : browser/devtools/netmonitor/netmonitor.xul => devtools/client/netmonitor/netmonitor.xul rename : browser/devtools/netmonitor/panel.js => devtools/client/netmonitor/panel.js rename : browser/devtools/netmonitor/test/.eslintrc => devtools/client/netmonitor/test/.eslintrc rename : browser/devtools/netmonitor/test/browser.ini => devtools/client/netmonitor/test/browser.ini rename : browser/devtools/netmonitor/test/browser_net_aaa_leaktest.js => devtools/client/netmonitor/test/browser_net_aaa_leaktest.js rename : browser/devtools/netmonitor/test/browser_net_accessibility-01.js => devtools/client/netmonitor/test/browser_net_accessibility-01.js rename : browser/devtools/netmonitor/test/browser_net_accessibility-02.js => devtools/client/netmonitor/test/browser_net_accessibility-02.js rename : browser/devtools/netmonitor/test/browser_net_api-calls.js => devtools/client/netmonitor/test/browser_net_api-calls.js rename : browser/devtools/netmonitor/test/browser_net_autoscroll.js => devtools/client/netmonitor/test/browser_net_autoscroll.js rename : browser/devtools/netmonitor/test/browser_net_cached-status.js => devtools/client/netmonitor/test/browser_net_cached-status.js rename : browser/devtools/netmonitor/test/browser_net_charts-01.js => devtools/client/netmonitor/test/browser_net_charts-01.js rename : browser/devtools/netmonitor/test/browser_net_charts-02.js => devtools/client/netmonitor/test/browser_net_charts-02.js rename : browser/devtools/netmonitor/test/browser_net_charts-03.js => devtools/client/netmonitor/test/browser_net_charts-03.js rename : browser/devtools/netmonitor/test/browser_net_charts-04.js => devtools/client/netmonitor/test/browser_net_charts-04.js rename : browser/devtools/netmonitor/test/browser_net_charts-05.js => devtools/client/netmonitor/test/browser_net_charts-05.js rename : browser/devtools/netmonitor/test/browser_net_charts-06.js => devtools/client/netmonitor/test/browser_net_charts-06.js rename : browser/devtools/netmonitor/test/browser_net_charts-07.js => devtools/client/netmonitor/test/browser_net_charts-07.js rename : browser/devtools/netmonitor/test/browser_net_clear.js => devtools/client/netmonitor/test/browser_net_clear.js rename : browser/devtools/netmonitor/test/browser_net_complex-params.js => devtools/client/netmonitor/test/browser_net_complex-params.js rename : browser/devtools/netmonitor/test/browser_net_content-type.js => devtools/client/netmonitor/test/browser_net_content-type.js rename : browser/devtools/netmonitor/test/browser_net_copy_as_curl.js => devtools/client/netmonitor/test/browser_net_copy_as_curl.js rename : browser/devtools/netmonitor/test/browser_net_copy_headers.js => devtools/client/netmonitor/test/browser_net_copy_headers.js rename : browser/devtools/netmonitor/test/browser_net_copy_image_as_data_uri.js => devtools/client/netmonitor/test/browser_net_copy_image_as_data_uri.js rename : browser/devtools/netmonitor/test/browser_net_copy_params.js => devtools/client/netmonitor/test/browser_net_copy_params.js rename : browser/devtools/netmonitor/test/browser_net_copy_response.js => devtools/client/netmonitor/test/browser_net_copy_response.js rename : browser/devtools/netmonitor/test/browser_net_copy_url.js => devtools/client/netmonitor/test/browser_net_copy_url.js rename : browser/devtools/netmonitor/test/browser_net_curl-utils.js => devtools/client/netmonitor/test/browser_net_curl-utils.js rename : browser/devtools/netmonitor/test/browser_net_cyrillic-01.js => devtools/client/netmonitor/test/browser_net_cyrillic-01.js rename : browser/devtools/netmonitor/test/browser_net_cyrillic-02.js => devtools/client/netmonitor/test/browser_net_cyrillic-02.js rename : browser/devtools/netmonitor/test/browser_net_details-no-duplicated-content.js => devtools/client/netmonitor/test/browser_net_details-no-duplicated-content.js rename : browser/devtools/netmonitor/test/browser_net_filter-01.js => devtools/client/netmonitor/test/browser_net_filter-01.js rename : browser/devtools/netmonitor/test/browser_net_filter-02.js => devtools/client/netmonitor/test/browser_net_filter-02.js rename : browser/devtools/netmonitor/test/browser_net_filter-03.js => devtools/client/netmonitor/test/browser_net_filter-03.js rename : browser/devtools/netmonitor/test/browser_net_filter-04.js => devtools/client/netmonitor/test/browser_net_filter-04.js rename : browser/devtools/netmonitor/test/browser_net_footer-summary.js => devtools/client/netmonitor/test/browser_net_footer-summary.js rename : browser/devtools/netmonitor/test/browser_net_html-preview.js => devtools/client/netmonitor/test/browser_net_html-preview.js rename : browser/devtools/netmonitor/test/browser_net_icon-preview.js => devtools/client/netmonitor/test/browser_net_icon-preview.js rename : browser/devtools/netmonitor/test/browser_net_image-tooltip.js => devtools/client/netmonitor/test/browser_net_image-tooltip.js rename : browser/devtools/netmonitor/test/browser_net_json-long.js => devtools/client/netmonitor/test/browser_net_json-long.js rename : browser/devtools/netmonitor/test/browser_net_json-malformed.js => devtools/client/netmonitor/test/browser_net_json-malformed.js rename : browser/devtools/netmonitor/test/browser_net_json_custom_mime.js => devtools/client/netmonitor/test/browser_net_json_custom_mime.js rename : browser/devtools/netmonitor/test/browser_net_json_text_mime.js => devtools/client/netmonitor/test/browser_net_json_text_mime.js rename : browser/devtools/netmonitor/test/browser_net_jsonp.js => devtools/client/netmonitor/test/browser_net_jsonp.js rename : browser/devtools/netmonitor/test/browser_net_large-response.js => devtools/client/netmonitor/test/browser_net_large-response.js rename : browser/devtools/netmonitor/test/browser_net_open_request_in_tab.js => devtools/client/netmonitor/test/browser_net_open_request_in_tab.js rename : browser/devtools/netmonitor/test/browser_net_page-nav.js => devtools/client/netmonitor/test/browser_net_page-nav.js rename : browser/devtools/netmonitor/test/browser_net_pane-collapse.js => devtools/client/netmonitor/test/browser_net_pane-collapse.js rename : browser/devtools/netmonitor/test/browser_net_pane-toggle.js => devtools/client/netmonitor/test/browser_net_pane-toggle.js rename : browser/devtools/netmonitor/test/browser_net_persistent_logs.js => devtools/client/netmonitor/test/browser_net_persistent_logs.js rename : browser/devtools/netmonitor/test/browser_net_post-data-01.js => devtools/client/netmonitor/test/browser_net_post-data-01.js rename : browser/devtools/netmonitor/test/browser_net_post-data-02.js => devtools/client/netmonitor/test/browser_net_post-data-02.js rename : browser/devtools/netmonitor/test/browser_net_post-data-03.js => devtools/client/netmonitor/test/browser_net_post-data-03.js rename : browser/devtools/netmonitor/test/browser_net_prefs-and-l10n.js => devtools/client/netmonitor/test/browser_net_prefs-and-l10n.js rename : browser/devtools/netmonitor/test/browser_net_prefs-reload.js => devtools/client/netmonitor/test/browser_net_prefs-reload.js rename : browser/devtools/netmonitor/test/browser_net_raw_headers.js => devtools/client/netmonitor/test/browser_net_raw_headers.js rename : browser/devtools/netmonitor/test/browser_net_reload-button.js => devtools/client/netmonitor/test/browser_net_reload-button.js rename : browser/devtools/netmonitor/test/browser_net_req-resp-bodies.js => devtools/client/netmonitor/test/browser_net_req-resp-bodies.js rename : browser/devtools/netmonitor/test/browser_net_resend.js => devtools/client/netmonitor/test/browser_net_resend.js rename : browser/devtools/netmonitor/test/browser_net_security-details.js => devtools/client/netmonitor/test/browser_net_security-details.js rename : browser/devtools/netmonitor/test/browser_net_security-error.js => devtools/client/netmonitor/test/browser_net_security-error.js rename : browser/devtools/netmonitor/test/browser_net_security-icon-click.js => devtools/client/netmonitor/test/browser_net_security-icon-click.js rename : browser/devtools/netmonitor/test/browser_net_security-redirect.js => devtools/client/netmonitor/test/browser_net_security-redirect.js rename : browser/devtools/netmonitor/test/browser_net_security-state.js => devtools/client/netmonitor/test/browser_net_security-state.js rename : browser/devtools/netmonitor/test/browser_net_security-tab-deselect.js => devtools/client/netmonitor/test/browser_net_security-tab-deselect.js rename : browser/devtools/netmonitor/test/browser_net_security-tab-visibility.js => devtools/client/netmonitor/test/browser_net_security-tab-visibility.js rename : browser/devtools/netmonitor/test/browser_net_security-warnings.js => devtools/client/netmonitor/test/browser_net_security-warnings.js rename : browser/devtools/netmonitor/test/browser_net_send-beacon-other-tab.js => devtools/client/netmonitor/test/browser_net_send-beacon-other-tab.js rename : browser/devtools/netmonitor/test/browser_net_send-beacon.js => devtools/client/netmonitor/test/browser_net_send-beacon.js rename : browser/devtools/netmonitor/test/browser_net_simple-init.js => devtools/client/netmonitor/test/browser_net_simple-init.js rename : browser/devtools/netmonitor/test/browser_net_simple-request-data.js => devtools/client/netmonitor/test/browser_net_simple-request-data.js rename : browser/devtools/netmonitor/test/browser_net_simple-request-details.js => devtools/client/netmonitor/test/browser_net_simple-request-details.js rename : browser/devtools/netmonitor/test/browser_net_simple-request.js => devtools/client/netmonitor/test/browser_net_simple-request.js rename : browser/devtools/netmonitor/test/browser_net_sort-01.js => devtools/client/netmonitor/test/browser_net_sort-01.js rename : browser/devtools/netmonitor/test/browser_net_sort-02.js => devtools/client/netmonitor/test/browser_net_sort-02.js rename : browser/devtools/netmonitor/test/browser_net_sort-03.js => devtools/client/netmonitor/test/browser_net_sort-03.js rename : browser/devtools/netmonitor/test/browser_net_statistics-01.js => devtools/client/netmonitor/test/browser_net_statistics-01.js rename : browser/devtools/netmonitor/test/browser_net_statistics-02.js => devtools/client/netmonitor/test/browser_net_statistics-02.js rename : browser/devtools/netmonitor/test/browser_net_statistics-03.js => devtools/client/netmonitor/test/browser_net_statistics-03.js rename : browser/devtools/netmonitor/test/browser_net_status-codes.js => devtools/client/netmonitor/test/browser_net_status-codes.js rename : browser/devtools/netmonitor/test/browser_net_timeline_ticks.js => devtools/client/netmonitor/test/browser_net_timeline_ticks.js rename : browser/devtools/netmonitor/test/browser_net_timing-division.js => devtools/client/netmonitor/test/browser_net_timing-division.js rename : browser/devtools/netmonitor/test/head.js => devtools/client/netmonitor/test/head.js rename : browser/devtools/netmonitor/test/html_api-calls-test-page.html => devtools/client/netmonitor/test/html_api-calls-test-page.html rename : browser/devtools/netmonitor/test/html_content-type-test-page.html => devtools/client/netmonitor/test/html_content-type-test-page.html rename : browser/devtools/netmonitor/test/html_content-type-without-cache-test-page.html => devtools/client/netmonitor/test/html_content-type-without-cache-test-page.html rename : browser/devtools/netmonitor/test/html_copy-as-curl.html => devtools/client/netmonitor/test/html_copy-as-curl.html rename : browser/devtools/netmonitor/test/html_curl-utils.html => devtools/client/netmonitor/test/html_curl-utils.html rename : browser/devtools/netmonitor/test/html_custom-get-page.html => devtools/client/netmonitor/test/html_custom-get-page.html rename : browser/devtools/netmonitor/test/html_cyrillic-test-page.html => devtools/client/netmonitor/test/html_cyrillic-test-page.html rename : browser/devtools/netmonitor/test/html_filter-test-page.html => devtools/client/netmonitor/test/html_filter-test-page.html rename : browser/devtools/netmonitor/test/html_har_post-data-test-page.html => devtools/client/netmonitor/test/html_har_post-data-test-page.html rename : browser/devtools/netmonitor/test/html_infinite-get-page.html => devtools/client/netmonitor/test/html_infinite-get-page.html rename : browser/devtools/netmonitor/test/html_json-custom-mime-test-page.html => devtools/client/netmonitor/test/html_json-custom-mime-test-page.html rename : browser/devtools/netmonitor/test/html_json-long-test-page.html => devtools/client/netmonitor/test/html_json-long-test-page.html rename : browser/devtools/netmonitor/test/html_json-malformed-test-page.html => devtools/client/netmonitor/test/html_json-malformed-test-page.html rename : browser/devtools/netmonitor/test/html_json-text-mime-test-page.html => devtools/client/netmonitor/test/html_json-text-mime-test-page.html rename : browser/devtools/netmonitor/test/html_jsonp-test-page.html => devtools/client/netmonitor/test/html_jsonp-test-page.html rename : browser/devtools/netmonitor/test/html_navigate-test-page.html => devtools/client/netmonitor/test/html_navigate-test-page.html rename : browser/devtools/netmonitor/test/html_params-test-page.html => devtools/client/netmonitor/test/html_params-test-page.html rename : browser/devtools/netmonitor/test/html_post-data-test-page.html => devtools/client/netmonitor/test/html_post-data-test-page.html rename : browser/devtools/netmonitor/test/html_post-raw-test-page.html => devtools/client/netmonitor/test/html_post-raw-test-page.html rename : browser/devtools/netmonitor/test/html_post-raw-with-headers-test-page.html => devtools/client/netmonitor/test/html_post-raw-with-headers-test-page.html rename : browser/devtools/netmonitor/test/html_send-beacon.html => devtools/client/netmonitor/test/html_send-beacon.html rename : browser/devtools/netmonitor/test/html_simple-test-page.html => devtools/client/netmonitor/test/html_simple-test-page.html rename : browser/devtools/netmonitor/test/html_single-get-page.html => devtools/client/netmonitor/test/html_single-get-page.html rename : browser/devtools/netmonitor/test/html_sorting-test-page.html => devtools/client/netmonitor/test/html_sorting-test-page.html rename : browser/devtools/netmonitor/test/html_statistics-test-page.html => devtools/client/netmonitor/test/html_statistics-test-page.html rename : browser/devtools/netmonitor/test/html_status-codes-test-page.html => devtools/client/netmonitor/test/html_status-codes-test-page.html rename : browser/devtools/netmonitor/test/sjs_content-type-test-server.sjs => devtools/client/netmonitor/test/sjs_content-type-test-server.sjs rename : browser/devtools/netmonitor/test/sjs_cors-test-server.sjs => devtools/client/netmonitor/test/sjs_cors-test-server.sjs rename : browser/devtools/netmonitor/test/sjs_https-redirect-test-server.sjs => devtools/client/netmonitor/test/sjs_https-redirect-test-server.sjs rename : browser/devtools/netmonitor/test/sjs_simple-test-server.sjs => devtools/client/netmonitor/test/sjs_simple-test-server.sjs rename : browser/devtools/netmonitor/test/sjs_sorting-test-server.sjs => devtools/client/netmonitor/test/sjs_sorting-test-server.sjs rename : browser/devtools/netmonitor/test/sjs_status-codes-test-server.sjs => devtools/client/netmonitor/test/sjs_status-codes-test-server.sjs rename : browser/devtools/netmonitor/test/test-image.png => devtools/client/netmonitor/test/test-image.png rename : browser/devtools/performance/docs/markers.md => devtools/client/performance/docs/markers.md rename : browser/devtools/performance/events.js => devtools/client/performance/events.js rename : browser/devtools/performance/modules/global.js => devtools/client/performance/modules/global.js rename : browser/devtools/performance/modules/logic/frame-utils.js => devtools/client/performance/modules/logic/frame-utils.js rename : browser/devtools/performance/modules/logic/jit.js => devtools/client/performance/modules/logic/jit.js rename : browser/devtools/performance/modules/logic/marker-utils.js => devtools/client/performance/modules/logic/marker-utils.js rename : browser/devtools/performance/modules/logic/telemetry.js => devtools/client/performance/modules/logic/telemetry.js rename : browser/devtools/performance/modules/logic/tree-model.js => devtools/client/performance/modules/logic/tree-model.js rename : browser/devtools/performance/modules/logic/waterfall-utils.js => devtools/client/performance/modules/logic/waterfall-utils.js rename : browser/devtools/performance/modules/markers.js => devtools/client/performance/modules/markers.js rename : browser/devtools/performance/modules/widgets/graphs.js => devtools/client/performance/modules/widgets/graphs.js rename : browser/devtools/performance/modules/widgets/marker-details.js => devtools/client/performance/modules/widgets/marker-details.js rename : browser/devtools/performance/modules/widgets/marker-view.js => devtools/client/performance/modules/widgets/marker-view.js rename : browser/devtools/performance/modules/widgets/markers-overview.js => devtools/client/performance/modules/widgets/markers-overview.js rename : browser/devtools/performance/modules/widgets/tree-view.js => devtools/client/performance/modules/widgets/tree-view.js rename : browser/devtools/performance/modules/widgets/waterfall-ticks.js => devtools/client/performance/modules/widgets/waterfall-ticks.js rename : browser/devtools/performance/moz.build => devtools/client/performance/moz.build rename : browser/devtools/performance/panel.js => devtools/client/performance/panel.js rename : browser/devtools/performance/performance-controller.js => devtools/client/performance/performance-controller.js rename : browser/devtools/performance/performance-view.js => devtools/client/performance/performance-view.js rename : browser/devtools/performance/performance.xul => devtools/client/performance/performance.xul rename : browser/devtools/performance/test/.eslintrc => devtools/client/performance/test/.eslintrc rename : browser/devtools/performance/test/browser.ini => devtools/client/performance/test/browser.ini rename : browser/devtools/performance/test/browser_aaa-run-first-leaktest.js => devtools/client/performance/test/browser_aaa-run-first-leaktest.js rename : browser/devtools/performance/test/browser_perf-categories-js-calltree.js => devtools/client/performance/test/browser_perf-categories-js-calltree.js rename : browser/devtools/performance/test/browser_perf-clear-01.js => devtools/client/performance/test/browser_perf-clear-01.js rename : browser/devtools/performance/test/browser_perf-clear-02.js => devtools/client/performance/test/browser_perf-clear-02.js rename : browser/devtools/performance/test/browser_perf-columns-js-calltree.js => devtools/client/performance/test/browser_perf-columns-js-calltree.js rename : browser/devtools/performance/test/browser_perf-columns-memory-calltree.js => devtools/client/performance/test/browser_perf-columns-memory-calltree.js rename : browser/devtools/performance/test/browser_perf-console-record-01.js => devtools/client/performance/test/browser_perf-console-record-01.js rename : browser/devtools/performance/test/browser_perf-console-record-02.js => devtools/client/performance/test/browser_perf-console-record-02.js rename : browser/devtools/performance/test/browser_perf-console-record-03.js => devtools/client/performance/test/browser_perf-console-record-03.js rename : browser/devtools/performance/test/browser_perf-console-record-04.js => devtools/client/performance/test/browser_perf-console-record-04.js rename : browser/devtools/performance/test/browser_perf-console-record-05.js => devtools/client/performance/test/browser_perf-console-record-05.js rename : browser/devtools/performance/test/browser_perf-console-record-06.js => devtools/client/performance/test/browser_perf-console-record-06.js rename : browser/devtools/performance/test/browser_perf-console-record-07.js => devtools/client/performance/test/browser_perf-console-record-07.js rename : browser/devtools/performance/test/browser_perf-console-record-08.js => devtools/client/performance/test/browser_perf-console-record-08.js rename : browser/devtools/performance/test/browser_perf-console-record-09.js => devtools/client/performance/test/browser_perf-console-record-09.js rename : browser/devtools/performance/test/browser_perf-details-01.js => devtools/client/performance/test/browser_perf-details-01.js rename : browser/devtools/performance/test/browser_perf-details-02.js => devtools/client/performance/test/browser_perf-details-02.js rename : browser/devtools/performance/test/browser_perf-details-03.js => devtools/client/performance/test/browser_perf-details-03.js rename : browser/devtools/performance/test/browser_perf-details-04.js => devtools/client/performance/test/browser_perf-details-04.js rename : browser/devtools/performance/test/browser_perf-details-05.js => devtools/client/performance/test/browser_perf-details-05.js rename : browser/devtools/performance/test/browser_perf-details-06.js => devtools/client/performance/test/browser_perf-details-06.js rename : browser/devtools/performance/test/browser_perf-details-07.js => devtools/client/performance/test/browser_perf-details-07.js rename : browser/devtools/performance/test/browser_perf-details-calltree-render.js => devtools/client/performance/test/browser_perf-details-calltree-render.js rename : browser/devtools/performance/test/browser_perf-details-flamegraph-render.js => devtools/client/performance/test/browser_perf-details-flamegraph-render.js rename : browser/devtools/performance/test/browser_perf-details-memory-calltree-render.js => devtools/client/performance/test/browser_perf-details-memory-calltree-render.js rename : browser/devtools/performance/test/browser_perf-details-memory-flamegraph-render.js => devtools/client/performance/test/browser_perf-details-memory-flamegraph-render.js rename : browser/devtools/performance/test/browser_perf-details-waterfall-gc-snap.js => devtools/client/performance/test/browser_perf-details-waterfall-gc-snap.js rename : browser/devtools/performance/test/browser_perf-details-waterfall-render.js => devtools/client/performance/test/browser_perf-details-waterfall-render.js rename : browser/devtools/performance/test/browser_perf-events-calltree.js => devtools/client/performance/test/browser_perf-events-calltree.js rename : browser/devtools/performance/test/browser_perf-highlighted.js => devtools/client/performance/test/browser_perf-highlighted.js rename : browser/devtools/performance/test/browser_perf-jit-view-01.js => devtools/client/performance/test/browser_perf-jit-view-01.js rename : browser/devtools/performance/test/browser_perf-jit-view-02.js => devtools/client/performance/test/browser_perf-jit-view-02.js rename : browser/devtools/performance/test/browser_perf-legacy-front-01.js => devtools/client/performance/test/browser_perf-legacy-front-01.js rename : browser/devtools/performance/test/browser_perf-legacy-front-02.js => devtools/client/performance/test/browser_perf-legacy-front-02.js rename : browser/devtools/performance/test/browser_perf-legacy-front-03.js => devtools/client/performance/test/browser_perf-legacy-front-03.js rename : browser/devtools/performance/test/browser_perf-legacy-front-04.js => devtools/client/performance/test/browser_perf-legacy-front-04.js rename : browser/devtools/performance/test/browser_perf-legacy-front-05.js => devtools/client/performance/test/browser_perf-legacy-front-05.js rename : browser/devtools/performance/test/browser_perf-legacy-front-06.js => devtools/client/performance/test/browser_perf-legacy-front-06.js rename : browser/devtools/performance/test/browser_perf-loading-01.js => devtools/client/performance/test/browser_perf-loading-01.js rename : browser/devtools/performance/test/browser_perf-loading-02.js => devtools/client/performance/test/browser_perf-loading-02.js rename : browser/devtools/performance/test/browser_perf-marker-details-01.js => devtools/client/performance/test/browser_perf-marker-details-01.js rename : browser/devtools/performance/test/browser_perf-options-01.js => devtools/client/performance/test/browser_perf-options-01.js rename : browser/devtools/performance/test/browser_perf-options-02.js => devtools/client/performance/test/browser_perf-options-02.js rename : browser/devtools/performance/test/browser_perf-options-03.js => devtools/client/performance/test/browser_perf-options-03.js rename : browser/devtools/performance/test/browser_perf-options-allocations.js => devtools/client/performance/test/browser_perf-options-allocations.js rename : browser/devtools/performance/test/browser_perf-options-enable-framerate.js => devtools/client/performance/test/browser_perf-options-enable-framerate.js rename : browser/devtools/performance/test/browser_perf-options-enable-memory-01.js => devtools/client/performance/test/browser_perf-options-enable-memory-01.js rename : browser/devtools/performance/test/browser_perf-options-enable-memory-02.js => devtools/client/performance/test/browser_perf-options-enable-memory-02.js rename : browser/devtools/performance/test/browser_perf-options-flatten-tree-recursion-01.js => devtools/client/performance/test/browser_perf-options-flatten-tree-recursion-01.js rename : browser/devtools/performance/test/browser_perf-options-flatten-tree-recursion-02.js => devtools/client/performance/test/browser_perf-options-flatten-tree-recursion-02.js rename : browser/devtools/performance/test/browser_perf-options-invert-call-tree-01.js => devtools/client/performance/test/browser_perf-options-invert-call-tree-01.js rename : browser/devtools/performance/test/browser_perf-options-invert-call-tree-02.js => devtools/client/performance/test/browser_perf-options-invert-call-tree-02.js rename : browser/devtools/performance/test/browser_perf-options-invert-flame-graph-01.js => devtools/client/performance/test/browser_perf-options-invert-flame-graph-01.js rename : browser/devtools/performance/test/browser_perf-options-invert-flame-graph-02.js => devtools/client/performance/test/browser_perf-options-invert-flame-graph-02.js rename : browser/devtools/performance/test/browser_perf-options-profiler.js => devtools/client/performance/test/browser_perf-options-profiler.js rename : browser/devtools/performance/test/browser_perf-options-show-idle-blocks-01.js => devtools/client/performance/test/browser_perf-options-show-idle-blocks-01.js rename : browser/devtools/performance/test/browser_perf-options-show-idle-blocks-02.js => devtools/client/performance/test/browser_perf-options-show-idle-blocks-02.js rename : browser/devtools/performance/test/browser_perf-options-show-platform-data-01.js => devtools/client/performance/test/browser_perf-options-show-platform-data-01.js rename : browser/devtools/performance/test/browser_perf-options-show-platform-data-02.js => devtools/client/performance/test/browser_perf-options-show-platform-data-02.js rename : browser/devtools/performance/test/browser_perf-overview-render-01.js => devtools/client/performance/test/browser_perf-overview-render-01.js rename : browser/devtools/performance/test/browser_perf-overview-render-02.js => devtools/client/performance/test/browser_perf-overview-render-02.js rename : browser/devtools/performance/test/browser_perf-overview-render-03.js => devtools/client/performance/test/browser_perf-overview-render-03.js rename : browser/devtools/performance/test/browser_perf-overview-render-04.js => devtools/client/performance/test/browser_perf-overview-render-04.js rename : browser/devtools/performance/test/browser_perf-overview-selection-01.js => devtools/client/performance/test/browser_perf-overview-selection-01.js rename : browser/devtools/performance/test/browser_perf-overview-selection-02.js => devtools/client/performance/test/browser_perf-overview-selection-02.js rename : browser/devtools/performance/test/browser_perf-overview-selection-03.js => devtools/client/performance/test/browser_perf-overview-selection-03.js rename : browser/devtools/performance/test/browser_perf-overview-time-interval.js => devtools/client/performance/test/browser_perf-overview-time-interval.js rename : browser/devtools/performance/test/browser_perf-range-changed-render.js => devtools/client/performance/test/browser_perf-range-changed-render.js rename : browser/devtools/performance/test/browser_perf-recording-notices-01.js => devtools/client/performance/test/browser_perf-recording-notices-01.js rename : browser/devtools/performance/test/browser_perf-recording-notices-02.js => devtools/client/performance/test/browser_perf-recording-notices-02.js rename : browser/devtools/performance/test/browser_perf-recording-notices-03.js => devtools/client/performance/test/browser_perf-recording-notices-03.js rename : browser/devtools/performance/test/browser_perf-recording-notices-04.js => devtools/client/performance/test/browser_perf-recording-notices-04.js rename : browser/devtools/performance/test/browser_perf-recording-notices-05.js => devtools/client/performance/test/browser_perf-recording-notices-05.js rename : browser/devtools/performance/test/browser_perf-recording-selected-01.js => devtools/client/performance/test/browser_perf-recording-selected-01.js rename : browser/devtools/performance/test/browser_perf-recording-selected-02.js => devtools/client/performance/test/browser_perf-recording-selected-02.js rename : browser/devtools/performance/test/browser_perf-recording-selected-03.js => devtools/client/performance/test/browser_perf-recording-selected-03.js rename : browser/devtools/performance/test/browser_perf-recording-selected-04.js => devtools/client/performance/test/browser_perf-recording-selected-04.js rename : browser/devtools/performance/test/browser_perf-recordings-io-01.js => devtools/client/performance/test/browser_perf-recordings-io-01.js rename : browser/devtools/performance/test/browser_perf-recordings-io-02.js => devtools/client/performance/test/browser_perf-recordings-io-02.js rename : browser/devtools/performance/test/browser_perf-recordings-io-03.js => devtools/client/performance/test/browser_perf-recordings-io-03.js rename : browser/devtools/performance/test/browser_perf-recordings-io-04.js => devtools/client/performance/test/browser_perf-recordings-io-04.js rename : browser/devtools/performance/test/browser_perf-recordings-io-05.js => devtools/client/performance/test/browser_perf-recordings-io-05.js rename : browser/devtools/performance/test/browser_perf-recordings-io-06.js => devtools/client/performance/test/browser_perf-recordings-io-06.js rename : browser/devtools/performance/test/browser_perf-refresh.js => devtools/client/performance/test/browser_perf-refresh.js rename : browser/devtools/performance/test/browser_perf-states.js => devtools/client/performance/test/browser_perf-states.js rename : browser/devtools/performance/test/browser_perf-telemetry.js => devtools/client/performance/test/browser_perf-telemetry.js rename : browser/devtools/performance/test/browser_perf-theme-toggle-01.js => devtools/client/performance/test/browser_perf-theme-toggle-01.js rename : browser/devtools/performance/test/browser_perf-ui-recording.js => devtools/client/performance/test/browser_perf-ui-recording.js rename : browser/devtools/performance/test/browser_profiler_tree-abstract-01.js => devtools/client/performance/test/browser_profiler_tree-abstract-01.js rename : browser/devtools/performance/test/browser_profiler_tree-abstract-02.js => devtools/client/performance/test/browser_profiler_tree-abstract-02.js rename : browser/devtools/performance/test/browser_profiler_tree-abstract-03.js => devtools/client/performance/test/browser_profiler_tree-abstract-03.js rename : browser/devtools/performance/test/browser_profiler_tree-abstract-04.js => devtools/client/performance/test/browser_profiler_tree-abstract-04.js rename : browser/devtools/performance/test/browser_profiler_tree-view-01.js => devtools/client/performance/test/browser_profiler_tree-view-01.js rename : browser/devtools/performance/test/browser_profiler_tree-view-02.js => devtools/client/performance/test/browser_profiler_tree-view-02.js rename : browser/devtools/performance/test/browser_profiler_tree-view-03.js => devtools/client/performance/test/browser_profiler_tree-view-03.js rename : browser/devtools/performance/test/browser_profiler_tree-view-04.js => devtools/client/performance/test/browser_profiler_tree-view-04.js rename : browser/devtools/performance/test/browser_profiler_tree-view-05.js => devtools/client/performance/test/browser_profiler_tree-view-05.js rename : browser/devtools/performance/test/browser_profiler_tree-view-06.js => devtools/client/performance/test/browser_profiler_tree-view-06.js rename : browser/devtools/performance/test/browser_profiler_tree-view-07.js => devtools/client/performance/test/browser_profiler_tree-view-07.js rename : browser/devtools/performance/test/browser_profiler_tree-view-08.js => devtools/client/performance/test/browser_profiler_tree-view-08.js rename : browser/devtools/performance/test/browser_profiler_tree-view-09.js => devtools/client/performance/test/browser_profiler_tree-view-09.js rename : browser/devtools/performance/test/browser_profiler_tree-view-10.js => devtools/client/performance/test/browser_profiler_tree-view-10.js rename : browser/devtools/performance/test/browser_profiler_tree-view-11.js => devtools/client/performance/test/browser_profiler_tree-view-11.js rename : browser/devtools/performance/test/browser_timeline-filters-01.js => devtools/client/performance/test/browser_timeline-filters-01.js rename : browser/devtools/performance/test/browser_timeline-filters-02.js => devtools/client/performance/test/browser_timeline-filters-02.js rename : browser/devtools/performance/test/browser_timeline-waterfall-background.js => devtools/client/performance/test/browser_timeline-waterfall-background.js rename : browser/devtools/performance/test/browser_timeline-waterfall-generic.js => devtools/client/performance/test/browser_timeline-waterfall-generic.js rename : browser/devtools/performance/test/browser_timeline-waterfall-rerender.js => devtools/client/performance/test/browser_timeline-waterfall-rerender.js rename : browser/devtools/performance/test/browser_timeline-waterfall-sidebar.js => devtools/client/performance/test/browser_timeline-waterfall-sidebar.js rename : browser/devtools/performance/test/doc_allocs.html => devtools/client/performance/test/doc_allocs.html rename : browser/devtools/performance/test/doc_innerHTML.html => devtools/client/performance/test/doc_innerHTML.html rename : browser/devtools/performance/test/doc_markers.html => devtools/client/performance/test/doc_markers.html rename : browser/devtools/performance/test/doc_simple-test.html => devtools/client/performance/test/doc_simple-test.html rename : browser/devtools/performance/test/head.js => devtools/client/performance/test/head.js rename : browser/devtools/performance/test/unit/head.js => devtools/client/performance/test/unit/head.js rename : browser/devtools/performance/test/unit/test_frame-utils-01.js => devtools/client/performance/test/unit/test_frame-utils-01.js rename : browser/devtools/performance/test/unit/test_frame-utils-02.js => devtools/client/performance/test/unit/test_frame-utils-02.js rename : browser/devtools/performance/test/unit/test_jit-graph-data.js => devtools/client/performance/test/unit/test_jit-graph-data.js rename : browser/devtools/performance/test/unit/test_jit-model-01.js => devtools/client/performance/test/unit/test_jit-model-01.js rename : browser/devtools/performance/test/unit/test_jit-model-02.js => devtools/client/performance/test/unit/test_jit-model-02.js rename : browser/devtools/performance/test/unit/test_marker-blueprint.js => devtools/client/performance/test/unit/test_marker-blueprint.js rename : browser/devtools/performance/test/unit/test_marker-utils.js => devtools/client/performance/test/unit/test_marker-utils.js rename : browser/devtools/performance/test/unit/test_perf-utils-allocations-to-samples.js => devtools/client/performance/test/unit/test_perf-utils-allocations-to-samples.js rename : browser/devtools/performance/test/unit/test_profiler-categories.js => devtools/client/performance/test/unit/test_profiler-categories.js rename : browser/devtools/performance/test/unit/test_tree-model-01.js => devtools/client/performance/test/unit/test_tree-model-01.js rename : browser/devtools/performance/test/unit/test_tree-model-02.js => devtools/client/performance/test/unit/test_tree-model-02.js rename : browser/devtools/performance/test/unit/test_tree-model-03.js => devtools/client/performance/test/unit/test_tree-model-03.js rename : browser/devtools/performance/test/unit/test_tree-model-04.js => devtools/client/performance/test/unit/test_tree-model-04.js rename : browser/devtools/performance/test/unit/test_tree-model-05.js => devtools/client/performance/test/unit/test_tree-model-05.js rename : browser/devtools/performance/test/unit/test_tree-model-06.js => devtools/client/performance/test/unit/test_tree-model-06.js rename : browser/devtools/performance/test/unit/test_tree-model-07.js => devtools/client/performance/test/unit/test_tree-model-07.js rename : browser/devtools/performance/test/unit/test_tree-model-08.js => devtools/client/performance/test/unit/test_tree-model-08.js rename : browser/devtools/performance/test/unit/test_tree-model-09.js => devtools/client/performance/test/unit/test_tree-model-09.js rename : browser/devtools/performance/test/unit/test_tree-model-10.js => devtools/client/performance/test/unit/test_tree-model-10.js rename : browser/devtools/performance/test/unit/test_tree-model-11.js => devtools/client/performance/test/unit/test_tree-model-11.js rename : browser/devtools/performance/test/unit/test_tree-model-12.js => devtools/client/performance/test/unit/test_tree-model-12.js rename : browser/devtools/performance/test/unit/test_tree-model-13.js => devtools/client/performance/test/unit/test_tree-model-13.js rename : browser/devtools/performance/test/unit/test_tree-model-allocations-01.js => devtools/client/performance/test/unit/test_tree-model-allocations-01.js rename : browser/devtools/performance/test/unit/test_tree-model-allocations-02.js => devtools/client/performance/test/unit/test_tree-model-allocations-02.js rename : browser/devtools/performance/test/unit/test_waterfall-utils-collapse-01.js => devtools/client/performance/test/unit/test_waterfall-utils-collapse-01.js rename : browser/devtools/performance/test/unit/test_waterfall-utils-collapse-02.js => devtools/client/performance/test/unit/test_waterfall-utils-collapse-02.js rename : browser/devtools/performance/test/unit/test_waterfall-utils-collapse-03.js => devtools/client/performance/test/unit/test_waterfall-utils-collapse-03.js rename : browser/devtools/performance/test/unit/test_waterfall-utils-collapse-04.js => devtools/client/performance/test/unit/test_waterfall-utils-collapse-04.js rename : browser/devtools/performance/test/unit/xpcshell.ini => devtools/client/performance/test/unit/xpcshell.ini rename : browser/devtools/performance/views/details-abstract-subview.js => devtools/client/performance/views/details-abstract-subview.js rename : browser/devtools/performance/views/details-js-call-tree.js => devtools/client/performance/views/details-js-call-tree.js rename : browser/devtools/performance/views/details-js-flamegraph.js => devtools/client/performance/views/details-js-flamegraph.js rename : browser/devtools/performance/views/details-memory-call-tree.js => devtools/client/performance/views/details-memory-call-tree.js rename : browser/devtools/performance/views/details-memory-flamegraph.js => devtools/client/performance/views/details-memory-flamegraph.js rename : browser/devtools/performance/views/details-waterfall.js => devtools/client/performance/views/details-waterfall.js rename : browser/devtools/performance/views/details.js => devtools/client/performance/views/details.js rename : browser/devtools/performance/views/optimizations-list.js => devtools/client/performance/views/optimizations-list.js rename : browser/devtools/performance/views/overview.js => devtools/client/performance/views/overview.js rename : browser/devtools/performance/views/recordings.js => devtools/client/performance/views/recordings.js rename : browser/devtools/performance/views/toolbar.js => devtools/client/performance/views/toolbar.js rename : browser/devtools/projecteditor/chrome/content/projecteditor-loader.js => devtools/client/projecteditor/chrome/content/projecteditor-loader.js rename : browser/devtools/projecteditor/chrome/content/projecteditor-loader.xul => devtools/client/projecteditor/chrome/content/projecteditor-loader.xul rename : browser/devtools/projecteditor/chrome/content/projecteditor-test.xul => devtools/client/projecteditor/chrome/content/projecteditor-test.xul rename : browser/devtools/projecteditor/chrome/content/projecteditor.xul => devtools/client/projecteditor/chrome/content/projecteditor.xul rename : browser/devtools/projecteditor/lib/editors.js => devtools/client/projecteditor/lib/editors.js rename : browser/devtools/projecteditor/lib/helpers/event.js => devtools/client/projecteditor/lib/helpers/event.js rename : browser/devtools/projecteditor/lib/helpers/file-picker.js => devtools/client/projecteditor/lib/helpers/file-picker.js rename : browser/devtools/projecteditor/lib/helpers/l10n.js => devtools/client/projecteditor/lib/helpers/l10n.js rename : browser/devtools/projecteditor/lib/helpers/prompts.js => devtools/client/projecteditor/lib/helpers/prompts.js rename : browser/devtools/projecteditor/lib/helpers/readdir.js => devtools/client/projecteditor/lib/helpers/readdir.js rename : browser/devtools/projecteditor/lib/plugins/app-manager/app-project-editor.js => devtools/client/projecteditor/lib/plugins/app-manager/app-project-editor.js rename : browser/devtools/projecteditor/lib/plugins/app-manager/plugin.js => devtools/client/projecteditor/lib/plugins/app-manager/plugin.js rename : browser/devtools/projecteditor/lib/plugins/core.js => devtools/client/projecteditor/lib/plugins/core.js rename : browser/devtools/projecteditor/lib/plugins/delete/delete.js => devtools/client/projecteditor/lib/plugins/delete/delete.js rename : browser/devtools/projecteditor/lib/plugins/dirty/dirty.js => devtools/client/projecteditor/lib/plugins/dirty/dirty.js rename : browser/devtools/projecteditor/lib/plugins/image-view/image-editor.js => devtools/client/projecteditor/lib/plugins/image-view/image-editor.js rename : browser/devtools/projecteditor/lib/plugins/image-view/plugin.js => devtools/client/projecteditor/lib/plugins/image-view/plugin.js rename : browser/devtools/projecteditor/lib/plugins/logging/logging.js => devtools/client/projecteditor/lib/plugins/logging/logging.js rename : browser/devtools/projecteditor/lib/plugins/new/new.js => devtools/client/projecteditor/lib/plugins/new/new.js rename : browser/devtools/projecteditor/lib/plugins/rename/rename.js => devtools/client/projecteditor/lib/plugins/rename/rename.js rename : browser/devtools/projecteditor/lib/plugins/save/save.js => devtools/client/projecteditor/lib/plugins/save/save.js rename : browser/devtools/projecteditor/lib/plugins/status-bar/plugin.js => devtools/client/projecteditor/lib/plugins/status-bar/plugin.js rename : browser/devtools/projecteditor/lib/project.js => devtools/client/projecteditor/lib/project.js rename : browser/devtools/projecteditor/lib/projecteditor.js => devtools/client/projecteditor/lib/projecteditor.js rename : browser/devtools/projecteditor/lib/shells.js => devtools/client/projecteditor/lib/shells.js rename : browser/devtools/projecteditor/lib/stores/base.js => devtools/client/projecteditor/lib/stores/base.js rename : browser/devtools/projecteditor/lib/stores/local.js => devtools/client/projecteditor/lib/stores/local.js rename : browser/devtools/projecteditor/lib/stores/resource.js => devtools/client/projecteditor/lib/stores/resource.js rename : browser/devtools/projecteditor/lib/tree.js => devtools/client/projecteditor/lib/tree.js rename : browser/devtools/projecteditor/moz.build => devtools/client/projecteditor/moz.build rename : browser/devtools/projecteditor/test/.eslintrc => devtools/client/projecteditor/test/.eslintrc rename : browser/devtools/projecteditor/test/browser.ini => devtools/client/projecteditor/test/browser.ini rename : browser/devtools/projecteditor/test/browser_projecteditor_app_options.js => devtools/client/projecteditor/test/browser_projecteditor_app_options.js rename : browser/devtools/projecteditor/test/browser_projecteditor_confirm_unsaved.js => devtools/client/projecteditor/test/browser_projecteditor_confirm_unsaved.js rename : browser/devtools/projecteditor/test/browser_projecteditor_contextmenu_01.js => devtools/client/projecteditor/test/browser_projecteditor_contextmenu_01.js rename : browser/devtools/projecteditor/test/browser_projecteditor_contextmenu_02.js => devtools/client/projecteditor/test/browser_projecteditor_contextmenu_02.js rename : browser/devtools/projecteditor/test/browser_projecteditor_delete_file.js => devtools/client/projecteditor/test/browser_projecteditor_delete_file.js rename : browser/devtools/projecteditor/test/browser_projecteditor_editing_01.js => devtools/client/projecteditor/test/browser_projecteditor_editing_01.js rename : browser/devtools/projecteditor/test/browser_projecteditor_editors_image.js => devtools/client/projecteditor/test/browser_projecteditor_editors_image.js rename : browser/devtools/projecteditor/test/browser_projecteditor_external_change.js => devtools/client/projecteditor/test/browser_projecteditor_external_change.js rename : browser/devtools/projecteditor/test/browser_projecteditor_immediate_destroy.js => devtools/client/projecteditor/test/browser_projecteditor_immediate_destroy.js rename : browser/devtools/projecteditor/test/browser_projecteditor_init.js => devtools/client/projecteditor/test/browser_projecteditor_init.js rename : browser/devtools/projecteditor/test/browser_projecteditor_menubar_01.js => devtools/client/projecteditor/test/browser_projecteditor_menubar_01.js rename : browser/devtools/projecteditor/test/browser_projecteditor_menubar_02.js => devtools/client/projecteditor/test/browser_projecteditor_menubar_02.js rename : browser/devtools/projecteditor/test/browser_projecteditor_new_file.js => devtools/client/projecteditor/test/browser_projecteditor_new_file.js rename : browser/devtools/projecteditor/test/browser_projecteditor_rename_file.js => devtools/client/projecteditor/test/browser_projecteditor_rename_file.js rename : browser/devtools/projecteditor/test/browser_projecteditor_stores.js => devtools/client/projecteditor/test/browser_projecteditor_stores.js rename : browser/devtools/projecteditor/test/browser_projecteditor_tree_selection_01.js => devtools/client/projecteditor/test/browser_projecteditor_tree_selection_01.js rename : browser/devtools/projecteditor/test/browser_projecteditor_tree_selection_02.js => devtools/client/projecteditor/test/browser_projecteditor_tree_selection_02.js rename : browser/devtools/projecteditor/test/head.js => devtools/client/projecteditor/test/head.js rename : browser/devtools/projecteditor/test/helper_edits.js => devtools/client/projecteditor/test/helper_edits.js rename : browser/devtools/projecteditor/test/helper_homepage.html => devtools/client/projecteditor/test/helper_homepage.html rename : browser/devtools/promisedebugger/moz.build => devtools/client/promisedebugger/moz.build rename : browser/devtools/promisedebugger/promise-controller.js => devtools/client/promisedebugger/promise-controller.js rename : browser/devtools/promisedebugger/promise-debugger.xhtml => devtools/client/promisedebugger/promise-debugger.xhtml rename : browser/devtools/promisedebugger/promise-panel.js => devtools/client/promisedebugger/promise-panel.js rename : browser/devtools/promisedebugger/test/.eslintrc => devtools/client/promisedebugger/test/.eslintrc rename : browser/devtools/promisedebugger/test/browser.ini => devtools/client/promisedebugger/test/browser.ini rename : browser/devtools/promisedebugger/test/head.js => devtools/client/promisedebugger/test/head.js rename : browser/devtools/responsivedesign/moz.build => devtools/client/responsivedesign/moz.build rename : browser/devtools/responsivedesign/resize-commands.js => devtools/client/responsivedesign/resize-commands.js rename : browser/devtools/responsivedesign/responsivedesign-child.js => devtools/client/responsivedesign/responsivedesign-child.js rename : browser/devtools/responsivedesign/responsivedesign.jsm => devtools/client/responsivedesign/responsivedesign.jsm rename : browser/devtools/responsivedesign/test/.eslintrc => devtools/client/responsivedesign/test/.eslintrc rename : browser/devtools/responsivedesign/test/browser.ini => devtools/client/responsivedesign/test/browser.ini rename : browser/devtools/responsivedesign/test/browser_responsive_cmd.js => devtools/client/responsivedesign/test/browser_responsive_cmd.js rename : browser/devtools/responsivedesign/test/browser_responsive_devicewidth.js => devtools/client/responsivedesign/test/browser_responsive_devicewidth.js rename : browser/devtools/responsivedesign/test/browser_responsivecomputedview.js => devtools/client/responsivedesign/test/browser_responsivecomputedview.js rename : browser/devtools/responsivedesign/test/browser_responsiveruleview.js => devtools/client/responsivedesign/test/browser_responsiveruleview.js rename : browser/devtools/responsivedesign/test/browser_responsiveui.js => devtools/client/responsivedesign/test/browser_responsiveui.js rename : browser/devtools/responsivedesign/test/browser_responsiveui_touch.js => devtools/client/responsivedesign/test/browser_responsiveui_touch.js rename : browser/devtools/responsivedesign/test/browser_responsiveuiaddcustompreset.js => devtools/client/responsivedesign/test/browser_responsiveuiaddcustompreset.js rename : browser/devtools/responsivedesign/test/head.js => devtools/client/responsivedesign/test/head.js rename : browser/devtools/responsivedesign/test/touch.html => devtools/client/responsivedesign/test/touch.html rename : browser/devtools/scratchpad/moz.build => devtools/client/scratchpad/moz.build rename : browser/devtools/scratchpad/scratchpad-commands.js => devtools/client/scratchpad/scratchpad-commands.js rename : browser/devtools/scratchpad/scratchpad-manager.jsm => devtools/client/scratchpad/scratchpad-manager.jsm rename : browser/devtools/scratchpad/scratchpad-panel.js => devtools/client/scratchpad/scratchpad-panel.js rename : browser/devtools/scratchpad/scratchpad.js => devtools/client/scratchpad/scratchpad.js rename : browser/devtools/scratchpad/scratchpad.xul => devtools/client/scratchpad/scratchpad.xul rename : browser/devtools/scratchpad/test/.eslintrc => devtools/client/scratchpad/test/.eslintrc rename : browser/devtools/scratchpad/test/NS_ERROR_ILLEGAL_INPUT.txt => devtools/client/scratchpad/test/NS_ERROR_ILLEGAL_INPUT.txt rename : browser/devtools/scratchpad/test/browser.ini => devtools/client/scratchpad/test/browser.ini rename : browser/devtools/scratchpad/test/browser_scratchpad_autocomplete.js => devtools/client/scratchpad/test/browser_scratchpad_autocomplete.js rename : browser/devtools/scratchpad/test/browser_scratchpad_browser_last_window_closing.js => devtools/client/scratchpad/test/browser_scratchpad_browser_last_window_closing.js rename : browser/devtools/scratchpad/test/browser_scratchpad_chrome_context_pref.js => devtools/client/scratchpad/test/browser_scratchpad_chrome_context_pref.js rename : browser/devtools/scratchpad/test/browser_scratchpad_close_toolbox.js => devtools/client/scratchpad/test/browser_scratchpad_close_toolbox.js rename : browser/devtools/scratchpad/test/browser_scratchpad_confirm_close.js => devtools/client/scratchpad/test/browser_scratchpad_confirm_close.js rename : browser/devtools/scratchpad/test/browser_scratchpad_contexts.js => devtools/client/scratchpad/test/browser_scratchpad_contexts.js rename : browser/devtools/scratchpad/test/browser_scratchpad_disable_view_menu_items.js => devtools/client/scratchpad/test/browser_scratchpad_disable_view_menu_items.js rename : browser/devtools/scratchpad/test/browser_scratchpad_display_non_error_exceptions.js => devtools/client/scratchpad/test/browser_scratchpad_display_non_error_exceptions.js rename : browser/devtools/scratchpad/test/browser_scratchpad_display_outputs_errors.js => devtools/client/scratchpad/test/browser_scratchpad_display_outputs_errors.js rename : browser/devtools/scratchpad/test/browser_scratchpad_edit_ui_updates.js => devtools/client/scratchpad/test/browser_scratchpad_edit_ui_updates.js rename : browser/devtools/scratchpad/test/browser_scratchpad_eval_func.js => devtools/client/scratchpad/test/browser_scratchpad_eval_func.js rename : browser/devtools/scratchpad/test/browser_scratchpad_execute_print.js => devtools/client/scratchpad/test/browser_scratchpad_execute_print.js rename : browser/devtools/scratchpad/test/browser_scratchpad_falsy.js => devtools/client/scratchpad/test/browser_scratchpad_falsy.js rename : browser/devtools/scratchpad/test/browser_scratchpad_files.js => devtools/client/scratchpad/test/browser_scratchpad_files.js rename : browser/devtools/scratchpad/test/browser_scratchpad_goto_line_ui.js => devtools/client/scratchpad/test/browser_scratchpad_goto_line_ui.js rename : browser/devtools/scratchpad/test/browser_scratchpad_help_key.js => devtools/client/scratchpad/test/browser_scratchpad_help_key.js rename : browser/devtools/scratchpad/test/browser_scratchpad_initialization.js => devtools/client/scratchpad/test/browser_scratchpad_initialization.js rename : browser/devtools/scratchpad/test/browser_scratchpad_inspect.js => devtools/client/scratchpad/test/browser_scratchpad_inspect.js rename : browser/devtools/scratchpad/test/browser_scratchpad_inspect_primitives.js => devtools/client/scratchpad/test/browser_scratchpad_inspect_primitives.js rename : browser/devtools/scratchpad/test/browser_scratchpad_long_string.js => devtools/client/scratchpad/test/browser_scratchpad_long_string.js rename : browser/devtools/scratchpad/test/browser_scratchpad_modeline.js => devtools/client/scratchpad/test/browser_scratchpad_modeline.js rename : browser/devtools/scratchpad/test/browser_scratchpad_open.js => devtools/client/scratchpad/test/browser_scratchpad_open.js rename : browser/devtools/scratchpad/test/browser_scratchpad_open_error_console.js => devtools/client/scratchpad/test/browser_scratchpad_open_error_console.js rename : browser/devtools/scratchpad/test/browser_scratchpad_pprint-02.js => devtools/client/scratchpad/test/browser_scratchpad_pprint-02.js rename : browser/devtools/scratchpad/test/browser_scratchpad_pprint.js => devtools/client/scratchpad/test/browser_scratchpad_pprint.js rename : browser/devtools/scratchpad/test/browser_scratchpad_pprint_error_goto_line.js => devtools/client/scratchpad/test/browser_scratchpad_pprint_error_goto_line.js rename : browser/devtools/scratchpad/test/browser_scratchpad_recent_files.js => devtools/client/scratchpad/test/browser_scratchpad_recent_files.js rename : browser/devtools/scratchpad/test/browser_scratchpad_reload_and_run.js => devtools/client/scratchpad/test/browser_scratchpad_reload_and_run.js rename : browser/devtools/scratchpad/test/browser_scratchpad_remember_view_options.js => devtools/client/scratchpad/test/browser_scratchpad_remember_view_options.js rename : browser/devtools/scratchpad/test/browser_scratchpad_reset_undo.js => devtools/client/scratchpad/test/browser_scratchpad_reset_undo.js rename : browser/devtools/scratchpad/test/browser_scratchpad_restore.js => devtools/client/scratchpad/test/browser_scratchpad_restore.js rename : browser/devtools/scratchpad/test/browser_scratchpad_revert_to_saved.js => devtools/client/scratchpad/test/browser_scratchpad_revert_to_saved.js rename : browser/devtools/scratchpad/test/browser_scratchpad_run_error_goto_line.js => devtools/client/scratchpad/test/browser_scratchpad_run_error_goto_line.js rename : browser/devtools/scratchpad/test/browser_scratchpad_tab.js => devtools/client/scratchpad/test/browser_scratchpad_tab.js rename : browser/devtools/scratchpad/test/browser_scratchpad_tab_switch.js => devtools/client/scratchpad/test/browser_scratchpad_tab_switch.js rename : browser/devtools/scratchpad/test/browser_scratchpad_throw_output.js => devtools/client/scratchpad/test/browser_scratchpad_throw_output.js rename : browser/devtools/scratchpad/test/browser_scratchpad_ui.js => devtools/client/scratchpad/test/browser_scratchpad_ui.js rename : browser/devtools/scratchpad/test/browser_scratchpad_unsaved.js => devtools/client/scratchpad/test/browser_scratchpad_unsaved.js rename : browser/devtools/scratchpad/test/browser_scratchpad_wrong_window_focus.js => devtools/client/scratchpad/test/browser_scratchpad_wrong_window_focus.js rename : browser/devtools/scratchpad/test/head.js => devtools/client/scratchpad/test/head.js rename : browser/devtools/shadereditor/moz.build => devtools/client/shadereditor/moz.build rename : browser/devtools/shadereditor/panel.js => devtools/client/shadereditor/panel.js rename : browser/devtools/shadereditor/shadereditor.js => devtools/client/shadereditor/shadereditor.js rename : browser/devtools/shadereditor/shadereditor.xul => devtools/client/shadereditor/shadereditor.xul rename : browser/devtools/shadereditor/test/.eslintrc => devtools/client/shadereditor/test/.eslintrc rename : browser/devtools/shadereditor/test/browser.ini => devtools/client/shadereditor/test/browser.ini rename : browser/devtools/shadereditor/test/browser_se_aaa_run_first_leaktest.js => devtools/client/shadereditor/test/browser_se_aaa_run_first_leaktest.js rename : browser/devtools/shadereditor/test/browser_se_bfcache.js => devtools/client/shadereditor/test/browser_se_bfcache.js rename : browser/devtools/shadereditor/test/browser_se_editors-contents.js => devtools/client/shadereditor/test/browser_se_editors-contents.js rename : browser/devtools/shadereditor/test/browser_se_editors-error-gutter.js => devtools/client/shadereditor/test/browser_se_editors-error-gutter.js rename : browser/devtools/shadereditor/test/browser_se_editors-error-tooltip.js => devtools/client/shadereditor/test/browser_se_editors-error-tooltip.js rename : browser/devtools/shadereditor/test/browser_se_editors-lazy-init.js => devtools/client/shadereditor/test/browser_se_editors-lazy-init.js rename : browser/devtools/shadereditor/test/browser_se_first-run.js => devtools/client/shadereditor/test/browser_se_first-run.js rename : browser/devtools/shadereditor/test/browser_se_navigation.js => devtools/client/shadereditor/test/browser_se_navigation.js rename : browser/devtools/shadereditor/test/browser_se_programs-blackbox-01.js => devtools/client/shadereditor/test/browser_se_programs-blackbox-01.js rename : browser/devtools/shadereditor/test/browser_se_programs-blackbox-02.js => devtools/client/shadereditor/test/browser_se_programs-blackbox-02.js rename : browser/devtools/shadereditor/test/browser_se_programs-cache.js => devtools/client/shadereditor/test/browser_se_programs-cache.js rename : browser/devtools/shadereditor/test/browser_se_programs-highlight-01.js => devtools/client/shadereditor/test/browser_se_programs-highlight-01.js rename : browser/devtools/shadereditor/test/browser_se_programs-highlight-02.js => devtools/client/shadereditor/test/browser_se_programs-highlight-02.js rename : browser/devtools/shadereditor/test/browser_se_programs-list.js => devtools/client/shadereditor/test/browser_se_programs-list.js rename : browser/devtools/shadereditor/test/browser_se_shaders-edit-01.js => devtools/client/shadereditor/test/browser_se_shaders-edit-01.js rename : browser/devtools/shadereditor/test/browser_se_shaders-edit-02.js => devtools/client/shadereditor/test/browser_se_shaders-edit-02.js rename : browser/devtools/shadereditor/test/browser_se_shaders-edit-03.js => devtools/client/shadereditor/test/browser_se_shaders-edit-03.js rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-01.js => devtools/client/shadereditor/test/browser_webgl-actor-test-01.js rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-02.js => devtools/client/shadereditor/test/browser_webgl-actor-test-02.js rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-03.js => devtools/client/shadereditor/test/browser_webgl-actor-test-03.js rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-04.js => devtools/client/shadereditor/test/browser_webgl-actor-test-04.js rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-05.js => devtools/client/shadereditor/test/browser_webgl-actor-test-05.js rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-06.js => devtools/client/shadereditor/test/browser_webgl-actor-test-06.js rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-07.js => devtools/client/shadereditor/test/browser_webgl-actor-test-07.js rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-08.js => devtools/client/shadereditor/test/browser_webgl-actor-test-08.js rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-09.js => devtools/client/shadereditor/test/browser_webgl-actor-test-09.js rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-10.js => devtools/client/shadereditor/test/browser_webgl-actor-test-10.js rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-11.js => devtools/client/shadereditor/test/browser_webgl-actor-test-11.js rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-12.js => devtools/client/shadereditor/test/browser_webgl-actor-test-12.js rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-13.js => devtools/client/shadereditor/test/browser_webgl-actor-test-13.js rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-14.js => devtools/client/shadereditor/test/browser_webgl-actor-test-14.js rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-15.js => devtools/client/shadereditor/test/browser_webgl-actor-test-15.js rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-16.js => devtools/client/shadereditor/test/browser_webgl-actor-test-16.js rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-17.js => devtools/client/shadereditor/test/browser_webgl-actor-test-17.js rename : browser/devtools/shadereditor/test/browser_webgl-actor-test-18.js => devtools/client/shadereditor/test/browser_webgl-actor-test-18.js rename : browser/devtools/shadereditor/test/doc_blended-geometry.html => devtools/client/shadereditor/test/doc_blended-geometry.html rename : browser/devtools/shadereditor/test/doc_multiple-contexts.html => devtools/client/shadereditor/test/doc_multiple-contexts.html rename : browser/devtools/shadereditor/test/doc_overlapping-geometry.html => devtools/client/shadereditor/test/doc_overlapping-geometry.html rename : browser/devtools/shadereditor/test/doc_shader-order.html => devtools/client/shadereditor/test/doc_shader-order.html rename : browser/devtools/shadereditor/test/doc_simple-canvas.html => devtools/client/shadereditor/test/doc_simple-canvas.html rename : browser/devtools/shadereditor/test/head.js => devtools/client/shadereditor/test/head.js rename : browser/devtools/shared/AppCacheUtils.jsm => devtools/client/shared/AppCacheUtils.jsm rename : browser/devtools/shared/Curl.jsm => devtools/client/shared/Curl.jsm rename : browser/devtools/shared/DOMHelpers.jsm => devtools/client/shared/DOMHelpers.jsm rename : browser/devtools/shared/DeveloperToolbar.jsm => devtools/client/shared/DeveloperToolbar.jsm rename : browser/devtools/shared/Jsbeautify.jsm => devtools/client/shared/Jsbeautify.jsm rename : browser/devtools/shared/Parser.jsm => devtools/client/shared/Parser.jsm rename : browser/devtools/shared/SplitView.jsm => devtools/client/shared/SplitView.jsm rename : browser/devtools/shared/autocomplete-popup.js => devtools/client/shared/autocomplete-popup.js rename : browser/devtools/shared/browser-loader.js => devtools/client/shared/browser-loader.js rename : browser/devtools/shared/devices.js => devtools/client/shared/devices.js rename : browser/devtools/shared/doorhanger.js => devtools/client/shared/doorhanger.js rename : browser/devtools/shared/frame-script-utils.js => devtools/client/shared/frame-script-utils.js rename : browser/devtools/shared/getjson.js => devtools/client/shared/getjson.js rename : browser/devtools/shared/inplace-editor.js => devtools/client/shared/inplace-editor.js rename : browser/devtools/shared/moz.build => devtools/client/shared/moz.build rename : browser/devtools/shared/node-attribute-parser.js => devtools/client/shared/node-attribute-parser.js rename : browser/devtools/shared/observable-object.js => devtools/client/shared/observable-object.js rename : browser/devtools/shared/options-view.js => devtools/client/shared/options-view.js rename : browser/devtools/shared/poller.js => devtools/client/shared/poller.js rename : browser/devtools/shared/redux/create-store.js => devtools/client/shared/redux/create-store.js rename : browser/devtools/shared/redux/middleware/log.js => devtools/client/shared/redux/middleware/log.js rename : browser/devtools/shared/redux/middleware/thunk.js => devtools/client/shared/redux/middleware/thunk.js rename : browser/devtools/shared/redux/middleware/wait-service.js => devtools/client/shared/redux/middleware/wait-service.js rename : browser/devtools/shared/redux/moz.build => devtools/client/shared/redux/moz.build rename : browser/devtools/shared/redux/reducers.js => devtools/client/shared/redux/reducers.js rename : browser/devtools/shared/source-utils.js => devtools/client/shared/source-utils.js rename : browser/devtools/shared/splitview.css => devtools/client/shared/splitview.css rename : browser/devtools/shared/telemetry.js => devtools/client/shared/telemetry.js rename : browser/devtools/shared/test/.eslintrc => devtools/client/shared/test/.eslintrc rename : browser/devtools/shared/test/browser.ini => devtools/client/shared/test/browser.ini rename : browser/devtools/shared/test/browser_css_color.js => devtools/client/shared/test/browser_css_color.js rename : browser/devtools/shared/test/browser_cubic-bezier-01.js => devtools/client/shared/test/browser_cubic-bezier-01.js rename : browser/devtools/shared/test/browser_cubic-bezier-02.js => devtools/client/shared/test/browser_cubic-bezier-02.js rename : browser/devtools/shared/test/browser_cubic-bezier-03.js => devtools/client/shared/test/browser_cubic-bezier-03.js rename : browser/devtools/shared/test/browser_cubic-bezier-04.js => devtools/client/shared/test/browser_cubic-bezier-04.js rename : browser/devtools/shared/test/browser_cubic-bezier-05.js => devtools/client/shared/test/browser_cubic-bezier-05.js rename : browser/devtools/shared/test/browser_cubic-bezier-06.js => devtools/client/shared/test/browser_cubic-bezier-06.js rename : browser/devtools/shared/test/browser_devices.js => devtools/client/shared/test/browser_devices.js rename : browser/devtools/shared/test/browser_devices.json => devtools/client/shared/test/browser_devices.json rename : browser/devtools/shared/test/browser_filter-editor-01.js => devtools/client/shared/test/browser_filter-editor-01.js rename : browser/devtools/shared/test/browser_filter-editor-02.js => devtools/client/shared/test/browser_filter-editor-02.js rename : browser/devtools/shared/test/browser_filter-editor-03.js => devtools/client/shared/test/browser_filter-editor-03.js rename : browser/devtools/shared/test/browser_filter-editor-04.js => devtools/client/shared/test/browser_filter-editor-04.js rename : browser/devtools/shared/test/browser_filter-editor-05.js => devtools/client/shared/test/browser_filter-editor-05.js rename : browser/devtools/shared/test/browser_filter-editor-06.js => devtools/client/shared/test/browser_filter-editor-06.js rename : browser/devtools/shared/test/browser_filter-editor-07.js => devtools/client/shared/test/browser_filter-editor-07.js rename : browser/devtools/shared/test/browser_filter-editor-08.js => devtools/client/shared/test/browser_filter-editor-08.js rename : browser/devtools/shared/test/browser_filter-editor-09.js => devtools/client/shared/test/browser_filter-editor-09.js rename : browser/devtools/shared/test/browser_filter-editor-10.js => devtools/client/shared/test/browser_filter-editor-10.js rename : browser/devtools/shared/test/browser_filter-presets-01.js => devtools/client/shared/test/browser_filter-presets-01.js rename : browser/devtools/shared/test/browser_filter-presets-02.js => devtools/client/shared/test/browser_filter-presets-02.js rename : browser/devtools/shared/test/browser_filter-presets-03.js => devtools/client/shared/test/browser_filter-presets-03.js rename : browser/devtools/shared/test/browser_flame-graph-01.js => devtools/client/shared/test/browser_flame-graph-01.js rename : browser/devtools/shared/test/browser_flame-graph-02.js => devtools/client/shared/test/browser_flame-graph-02.js rename : browser/devtools/shared/test/browser_flame-graph-03a.js => devtools/client/shared/test/browser_flame-graph-03a.js rename : browser/devtools/shared/test/browser_flame-graph-03b.js => devtools/client/shared/test/browser_flame-graph-03b.js rename : browser/devtools/shared/test/browser_flame-graph-03c.js => devtools/client/shared/test/browser_flame-graph-03c.js rename : browser/devtools/shared/test/browser_flame-graph-04.js => devtools/client/shared/test/browser_flame-graph-04.js rename : browser/devtools/shared/test/browser_flame-graph-utils-01.js => devtools/client/shared/test/browser_flame-graph-utils-01.js rename : browser/devtools/shared/test/browser_flame-graph-utils-02.js => devtools/client/shared/test/browser_flame-graph-utils-02.js rename : browser/devtools/shared/test/browser_flame-graph-utils-03.js => devtools/client/shared/test/browser_flame-graph-utils-03.js rename : browser/devtools/shared/test/browser_flame-graph-utils-04.js => devtools/client/shared/test/browser_flame-graph-utils-04.js rename : browser/devtools/shared/test/browser_flame-graph-utils-05.js => devtools/client/shared/test/browser_flame-graph-utils-05.js rename : browser/devtools/shared/test/browser_flame-graph-utils-06.js => devtools/client/shared/test/browser_flame-graph-utils-06.js rename : browser/devtools/shared/test/browser_flame-graph-utils-hash.js => devtools/client/shared/test/browser_flame-graph-utils-hash.js rename : browser/devtools/shared/test/browser_graphs-01.js => devtools/client/shared/test/browser_graphs-01.js rename : browser/devtools/shared/test/browser_graphs-02.js => devtools/client/shared/test/browser_graphs-02.js rename : browser/devtools/shared/test/browser_graphs-03.js => devtools/client/shared/test/browser_graphs-03.js rename : browser/devtools/shared/test/browser_graphs-04.js => devtools/client/shared/test/browser_graphs-04.js rename : browser/devtools/shared/test/browser_graphs-05.js => devtools/client/shared/test/browser_graphs-05.js rename : browser/devtools/shared/test/browser_graphs-06.js => devtools/client/shared/test/browser_graphs-06.js rename : browser/devtools/shared/test/browser_graphs-07a.js => devtools/client/shared/test/browser_graphs-07a.js rename : browser/devtools/shared/test/browser_graphs-07b.js => devtools/client/shared/test/browser_graphs-07b.js rename : browser/devtools/shared/test/browser_graphs-07c.js => devtools/client/shared/test/browser_graphs-07c.js rename : browser/devtools/shared/test/browser_graphs-07d.js => devtools/client/shared/test/browser_graphs-07d.js rename : browser/devtools/shared/test/browser_graphs-07e.js => devtools/client/shared/test/browser_graphs-07e.js rename : browser/devtools/shared/test/browser_graphs-08.js => devtools/client/shared/test/browser_graphs-08.js rename : browser/devtools/shared/test/browser_graphs-09a.js => devtools/client/shared/test/browser_graphs-09a.js rename : browser/devtools/shared/test/browser_graphs-09b.js => devtools/client/shared/test/browser_graphs-09b.js rename : browser/devtools/shared/test/browser_graphs-09c.js => devtools/client/shared/test/browser_graphs-09c.js rename : browser/devtools/shared/test/browser_graphs-09d.js => devtools/client/shared/test/browser_graphs-09d.js rename : browser/devtools/shared/test/browser_graphs-09e.js => devtools/client/shared/test/browser_graphs-09e.js rename : browser/devtools/shared/test/browser_graphs-09f.js => devtools/client/shared/test/browser_graphs-09f.js rename : browser/devtools/shared/test/browser_graphs-10a.js => devtools/client/shared/test/browser_graphs-10a.js rename : browser/devtools/shared/test/browser_graphs-10b.js => devtools/client/shared/test/browser_graphs-10b.js rename : browser/devtools/shared/test/browser_graphs-10c.js => devtools/client/shared/test/browser_graphs-10c.js rename : browser/devtools/shared/test/browser_graphs-11a.js => devtools/client/shared/test/browser_graphs-11a.js rename : browser/devtools/shared/test/browser_graphs-11b.js => devtools/client/shared/test/browser_graphs-11b.js rename : browser/devtools/shared/test/browser_graphs-12.js => devtools/client/shared/test/browser_graphs-12.js rename : browser/devtools/shared/test/browser_graphs-13.js => devtools/client/shared/test/browser_graphs-13.js rename : browser/devtools/shared/test/browser_graphs-14.js => devtools/client/shared/test/browser_graphs-14.js rename : browser/devtools/shared/test/browser_graphs-15.js => devtools/client/shared/test/browser_graphs-15.js rename : browser/devtools/shared/test/browser_graphs-16.js => devtools/client/shared/test/browser_graphs-16.js rename : browser/devtools/shared/test/browser_inplace-editor-01.js => devtools/client/shared/test/browser_inplace-editor-01.js rename : browser/devtools/shared/test/browser_inplace-editor-02.js => devtools/client/shared/test/browser_inplace-editor-02.js rename : browser/devtools/shared/test/browser_layoutHelpers-getBoxQuads.html => devtools/client/shared/test/browser_layoutHelpers-getBoxQuads.html rename : browser/devtools/shared/test/browser_layoutHelpers-getBoxQuads.js => devtools/client/shared/test/browser_layoutHelpers-getBoxQuads.js rename : browser/devtools/shared/test/browser_layoutHelpers.html => devtools/client/shared/test/browser_layoutHelpers.html rename : browser/devtools/shared/test/browser_layoutHelpers.js => devtools/client/shared/test/browser_layoutHelpers.js rename : browser/devtools/shared/test/browser_mdn-docs-01.js => devtools/client/shared/test/browser_mdn-docs-01.js rename : browser/devtools/shared/test/browser_mdn-docs-02.js => devtools/client/shared/test/browser_mdn-docs-02.js rename : browser/devtools/shared/test/browser_mdn-docs-03.js => devtools/client/shared/test/browser_mdn-docs-03.js rename : browser/devtools/shared/test/browser_num-l10n.js => devtools/client/shared/test/browser_num-l10n.js rename : browser/devtools/shared/test/browser_observableobject.js => devtools/client/shared/test/browser_observableobject.js rename : browser/devtools/shared/test/browser_options-view-01.js => devtools/client/shared/test/browser_options-view-01.js rename : browser/devtools/shared/test/browser_outputparser.js => devtools/client/shared/test/browser_outputparser.js rename : browser/devtools/shared/test/browser_poller.js => devtools/client/shared/test/browser_poller.js rename : browser/devtools/shared/test/browser_prefs-01.js => devtools/client/shared/test/browser_prefs-01.js rename : browser/devtools/shared/test/browser_prefs-02.js => devtools/client/shared/test/browser_prefs-02.js rename : browser/devtools/shared/test/browser_spectrum.js => devtools/client/shared/test/browser_spectrum.js rename : browser/devtools/shared/test/browser_tableWidget_basic.js => devtools/client/shared/test/browser_tableWidget_basic.js rename : browser/devtools/shared/test/browser_tableWidget_keyboard_interaction.js => devtools/client/shared/test/browser_tableWidget_keyboard_interaction.js rename : browser/devtools/shared/test/browser_tableWidget_mouse_interaction.js => devtools/client/shared/test/browser_tableWidget_mouse_interaction.js rename : browser/devtools/shared/test/browser_telemetry_button_eyedropper.js => devtools/client/shared/test/browser_telemetry_button_eyedropper.js rename : browser/devtools/shared/test/browser_telemetry_button_paintflashing.js => devtools/client/shared/test/browser_telemetry_button_paintflashing.js rename : browser/devtools/shared/test/browser_telemetry_button_responsive.js => devtools/client/shared/test/browser_telemetry_button_responsive.js rename : browser/devtools/shared/test/browser_telemetry_button_scratchpad.js => devtools/client/shared/test/browser_telemetry_button_scratchpad.js rename : browser/devtools/shared/test/browser_telemetry_button_tilt.js => devtools/client/shared/test/browser_telemetry_button_tilt.js rename : browser/devtools/shared/test/browser_telemetry_sidebar.js => devtools/client/shared/test/browser_telemetry_sidebar.js rename : browser/devtools/shared/test/browser_telemetry_toolbox.js => devtools/client/shared/test/browser_telemetry_toolbox.js rename : browser/devtools/shared/test/browser_telemetry_toolboxtabs_canvasdebugger.js => devtools/client/shared/test/browser_telemetry_toolboxtabs_canvasdebugger.js rename : browser/devtools/shared/test/browser_telemetry_toolboxtabs_inspector.js => devtools/client/shared/test/browser_telemetry_toolboxtabs_inspector.js rename : browser/devtools/shared/test/browser_telemetry_toolboxtabs_jsdebugger.js => devtools/client/shared/test/browser_telemetry_toolboxtabs_jsdebugger.js rename : browser/devtools/shared/test/browser_telemetry_toolboxtabs_jsprofiler.js => devtools/client/shared/test/browser_telemetry_toolboxtabs_jsprofiler.js rename : browser/devtools/shared/test/browser_telemetry_toolboxtabs_netmonitor.js => devtools/client/shared/test/browser_telemetry_toolboxtabs_netmonitor.js rename : browser/devtools/shared/test/browser_telemetry_toolboxtabs_options.js => devtools/client/shared/test/browser_telemetry_toolboxtabs_options.js rename : browser/devtools/shared/test/browser_telemetry_toolboxtabs_shadereditor.js => devtools/client/shared/test/browser_telemetry_toolboxtabs_shadereditor.js rename : browser/devtools/shared/test/browser_telemetry_toolboxtabs_storage.js => devtools/client/shared/test/browser_telemetry_toolboxtabs_storage.js rename : browser/devtools/shared/test/browser_telemetry_toolboxtabs_styleeditor.js => devtools/client/shared/test/browser_telemetry_toolboxtabs_styleeditor.js rename : browser/devtools/shared/test/browser_telemetry_toolboxtabs_webaudioeditor.js => devtools/client/shared/test/browser_telemetry_toolboxtabs_webaudioeditor.js rename : browser/devtools/shared/test/browser_telemetry_toolboxtabs_webconsole.js => devtools/client/shared/test/browser_telemetry_toolboxtabs_webconsole.js rename : browser/devtools/shared/test/browser_templater_basic.html => devtools/client/shared/test/browser_templater_basic.html rename : browser/devtools/shared/test/browser_templater_basic.js => devtools/client/shared/test/browser_templater_basic.js rename : browser/devtools/shared/test/browser_theme.js => devtools/client/shared/test/browser_theme.js rename : browser/devtools/shared/test/browser_toolbar_basic.html => devtools/client/shared/test/browser_toolbar_basic.html rename : browser/devtools/shared/test/browser_toolbar_basic.js => devtools/client/shared/test/browser_toolbar_basic.js rename : browser/devtools/shared/test/browser_toolbar_tooltip.js => devtools/client/shared/test/browser_toolbar_tooltip.js rename : browser/devtools/shared/test/browser_toolbar_webconsole_errors_count.html => devtools/client/shared/test/browser_toolbar_webconsole_errors_count.html rename : browser/devtools/shared/test/browser_toolbar_webconsole_errors_count.js => devtools/client/shared/test/browser_toolbar_webconsole_errors_count.js rename : browser/devtools/shared/test/browser_treeWidget_basic.js => devtools/client/shared/test/browser_treeWidget_basic.js rename : browser/devtools/shared/test/browser_treeWidget_keyboard_interaction.js => devtools/client/shared/test/browser_treeWidget_keyboard_interaction.js rename : browser/devtools/shared/test/browser_treeWidget_mouse_interaction.js => devtools/client/shared/test/browser_treeWidget_mouse_interaction.js rename : browser/devtools/shared/test/doc_options-view.xul => devtools/client/shared/test/doc_options-view.xul rename : browser/devtools/shared/test/head.js => devtools/client/shared/test/head.js rename : browser/devtools/shared/test/html-mdn-css-basic-testing.html => devtools/client/shared/test/html-mdn-css-basic-testing.html rename : browser/devtools/shared/test/html-mdn-css-no-summary-or-syntax.html => devtools/client/shared/test/html-mdn-css-no-summary-or-syntax.html rename : browser/devtools/shared/test/html-mdn-css-no-summary.html => devtools/client/shared/test/html-mdn-css-no-summary.html rename : browser/devtools/shared/test/html-mdn-css-no-syntax.html => devtools/client/shared/test/html-mdn-css-no-syntax.html rename : browser/devtools/shared/test/html-mdn-css-syntax-old-style.html => devtools/client/shared/test/html-mdn-css-syntax-old-style.html rename : browser/devtools/shared/test/leakhunt.js => devtools/client/shared/test/leakhunt.js rename : browser/devtools/shared/test/test-actor-registry.js => devtools/client/shared/test/test-actor-registry.js rename : browser/devtools/shared/test/test-actor.js => devtools/client/shared/test/test-actor.js rename : browser/devtools/shared/test/unit/.eslintrc => devtools/client/shared/test/unit/.eslintrc rename : browser/devtools/shared/test/unit/test_VariablesView_filtering-without-controller.js => devtools/client/shared/test/unit/test_VariablesView_filtering-without-controller.js rename : browser/devtools/shared/test/unit/test_VariablesView_getString_promise.js => devtools/client/shared/test/unit/test_VariablesView_getString_promise.js rename : browser/devtools/shared/test/unit/test_advanceValidate.js => devtools/client/shared/test/unit/test_advanceValidate.js rename : browser/devtools/shared/test/unit/test_attribute-parsing-01.js => devtools/client/shared/test/unit/test_attribute-parsing-01.js rename : browser/devtools/shared/test/unit/test_attribute-parsing-02.js => devtools/client/shared/test/unit/test_attribute-parsing-02.js rename : browser/devtools/shared/test/unit/test_bezierCanvas.js => devtools/client/shared/test/unit/test_bezierCanvas.js rename : browser/devtools/shared/test/unit/test_cubicBezier.js => devtools/client/shared/test/unit/test_cubicBezier.js rename : browser/devtools/shared/test/unit/test_undoStack.js => devtools/client/shared/test/unit/test_undoStack.js rename : browser/devtools/shared/test/unit/xpcshell.ini => devtools/client/shared/test/unit/xpcshell.ini rename : browser/devtools/shared/theme-switching.js => devtools/client/shared/theme-switching.js rename : browser/devtools/shared/theme.js => devtools/client/shared/theme.js rename : browser/devtools/shared/undo.js => devtools/client/shared/undo.js rename : browser/devtools/shared/vendor/D3_LICENSE => devtools/client/shared/vendor/D3_LICENSE rename : browser/devtools/shared/vendor/DAGRE_D3_LICENSE => devtools/client/shared/vendor/DAGRE_D3_LICENSE rename : browser/devtools/shared/vendor/REDUX_LICENSE => devtools/client/shared/vendor/REDUX_LICENSE rename : browser/devtools/shared/vendor/d3.js => devtools/client/shared/vendor/d3.js rename : browser/devtools/shared/vendor/dagre-d3.js => devtools/client/shared/vendor/dagre-d3.js rename : browser/devtools/shared/vendor/moz.build => devtools/client/shared/vendor/moz.build rename : browser/devtools/shared/vendor/react-dev.js => devtools/client/shared/vendor/react-dev.js rename : browser/devtools/shared/vendor/react.js => devtools/client/shared/vendor/react.js rename : browser/devtools/shared/vendor/redux.js => devtools/client/shared/vendor/redux.js rename : browser/devtools/shared/widgets/AbstractTreeItem.jsm => devtools/client/shared/widgets/AbstractTreeItem.jsm rename : browser/devtools/shared/widgets/BarGraphWidget.js => devtools/client/shared/widgets/BarGraphWidget.js rename : browser/devtools/shared/widgets/BreadcrumbsWidget.jsm => devtools/client/shared/widgets/BreadcrumbsWidget.jsm rename : browser/devtools/shared/widgets/Chart.jsm => devtools/client/shared/widgets/Chart.jsm rename : browser/devtools/shared/widgets/CubicBezierPresets.js => devtools/client/shared/widgets/CubicBezierPresets.js rename : browser/devtools/shared/widgets/CubicBezierWidget.js => devtools/client/shared/widgets/CubicBezierWidget.js rename : browser/devtools/shared/widgets/FastListWidget.js => devtools/client/shared/widgets/FastListWidget.js rename : browser/devtools/shared/widgets/FilterWidget.js => devtools/client/shared/widgets/FilterWidget.js rename : browser/devtools/shared/widgets/FlameGraph.js => devtools/client/shared/widgets/FlameGraph.js rename : browser/devtools/shared/widgets/Graphs.js => devtools/client/shared/widgets/Graphs.js rename : browser/devtools/shared/widgets/GraphsWorker.js => devtools/client/shared/widgets/GraphsWorker.js rename : browser/devtools/shared/widgets/LineGraphWidget.js => devtools/client/shared/widgets/LineGraphWidget.js rename : browser/devtools/shared/widgets/MdnDocsWidget.js => devtools/client/shared/widgets/MdnDocsWidget.js rename : browser/devtools/shared/widgets/MountainGraphWidget.js => devtools/client/shared/widgets/MountainGraphWidget.js rename : browser/devtools/shared/widgets/SideMenuWidget.jsm => devtools/client/shared/widgets/SideMenuWidget.jsm rename : browser/devtools/shared/widgets/SimpleListWidget.jsm => devtools/client/shared/widgets/SimpleListWidget.jsm rename : browser/devtools/shared/widgets/Spectrum.js => devtools/client/shared/widgets/Spectrum.js rename : browser/devtools/shared/widgets/TableWidget.js => devtools/client/shared/widgets/TableWidget.js rename : browser/devtools/shared/widgets/Tooltip.js => devtools/client/shared/widgets/Tooltip.js rename : browser/devtools/shared/widgets/TreeWidget.js => devtools/client/shared/widgets/TreeWidget.js rename : browser/devtools/shared/widgets/VariablesView.jsm => devtools/client/shared/widgets/VariablesView.jsm rename : browser/devtools/shared/widgets/VariablesView.xul => devtools/client/shared/widgets/VariablesView.xul rename : browser/devtools/shared/widgets/VariablesViewController.jsm => devtools/client/shared/widgets/VariablesViewController.jsm rename : browser/devtools/shared/widgets/ViewHelpers.jsm => devtools/client/shared/widgets/ViewHelpers.jsm rename : browser/devtools/shared/widgets/cubic-bezier-frame.xhtml => devtools/client/shared/widgets/cubic-bezier-frame.xhtml rename : browser/devtools/shared/widgets/cubic-bezier.css => devtools/client/shared/widgets/cubic-bezier.css rename : browser/devtools/shared/widgets/filter-frame.xhtml => devtools/client/shared/widgets/filter-frame.xhtml rename : browser/devtools/shared/widgets/filter-widget.css => devtools/client/shared/widgets/filter-widget.css rename : browser/devtools/shared/widgets/graphs-frame.xhtml => devtools/client/shared/widgets/graphs-frame.xhtml rename : browser/devtools/shared/widgets/mdn-docs-frame.xhtml => devtools/client/shared/widgets/mdn-docs-frame.xhtml rename : browser/devtools/shared/widgets/mdn-docs.css => devtools/client/shared/widgets/mdn-docs.css rename : browser/devtools/shared/widgets/spectrum-frame.xhtml => devtools/client/shared/widgets/spectrum-frame.xhtml rename : browser/devtools/shared/widgets/spectrum.css => devtools/client/shared/widgets/spectrum.css rename : browser/devtools/shared/widgets/widgets.css => devtools/client/shared/widgets/widgets.css rename : browser/devtools/sourceeditor/autocomplete.js => devtools/client/sourceeditor/autocomplete.js rename : browser/devtools/sourceeditor/codemirror/LICENSE => devtools/client/sourceeditor/codemirror/LICENSE rename : browser/devtools/sourceeditor/codemirror/README => devtools/client/sourceeditor/codemirror/README rename : browser/devtools/sourceeditor/codemirror/codemirror.css => devtools/client/sourceeditor/codemirror/codemirror.css rename : browser/devtools/sourceeditor/codemirror/codemirror.js => devtools/client/sourceeditor/codemirror/codemirror.js rename : browser/devtools/sourceeditor/codemirror/comment/comment.js => devtools/client/sourceeditor/codemirror/comment/comment.js rename : browser/devtools/sourceeditor/codemirror/comment/continuecomment.js => devtools/client/sourceeditor/codemirror/comment/continuecomment.js rename : browser/devtools/sourceeditor/codemirror/dialog/dialog.css => devtools/client/sourceeditor/codemirror/dialog/dialog.css rename : browser/devtools/sourceeditor/codemirror/dialog/dialog.js => devtools/client/sourceeditor/codemirror/dialog/dialog.js rename : browser/devtools/sourceeditor/codemirror/edit/closebrackets.js => devtools/client/sourceeditor/codemirror/edit/closebrackets.js rename : browser/devtools/sourceeditor/codemirror/edit/closetag.js => devtools/client/sourceeditor/codemirror/edit/closetag.js rename : browser/devtools/sourceeditor/codemirror/edit/continuelist.js => devtools/client/sourceeditor/codemirror/edit/continuelist.js rename : browser/devtools/sourceeditor/codemirror/edit/matchbrackets.js => devtools/client/sourceeditor/codemirror/edit/matchbrackets.js rename : browser/devtools/sourceeditor/codemirror/edit/matchtags.js => devtools/client/sourceeditor/codemirror/edit/matchtags.js rename : browser/devtools/sourceeditor/codemirror/edit/trailingspace.js => devtools/client/sourceeditor/codemirror/edit/trailingspace.js rename : browser/devtools/sourceeditor/codemirror/fold/brace-fold.js => devtools/client/sourceeditor/codemirror/fold/brace-fold.js rename : browser/devtools/sourceeditor/codemirror/fold/comment-fold.js => devtools/client/sourceeditor/codemirror/fold/comment-fold.js rename : browser/devtools/sourceeditor/codemirror/fold/foldcode.js => devtools/client/sourceeditor/codemirror/fold/foldcode.js rename : browser/devtools/sourceeditor/codemirror/fold/foldgutter.css => devtools/client/sourceeditor/codemirror/fold/foldgutter.css rename : browser/devtools/sourceeditor/codemirror/fold/foldgutter.js => devtools/client/sourceeditor/codemirror/fold/foldgutter.js rename : browser/devtools/sourceeditor/codemirror/fold/indent-fold.js => devtools/client/sourceeditor/codemirror/fold/indent-fold.js rename : browser/devtools/sourceeditor/codemirror/fold/markdown-fold.js => devtools/client/sourceeditor/codemirror/fold/markdown-fold.js rename : browser/devtools/sourceeditor/codemirror/fold/xml-fold.js => devtools/client/sourceeditor/codemirror/fold/xml-fold.js rename : browser/devtools/sourceeditor/codemirror/hint/show-hint.js => devtools/client/sourceeditor/codemirror/hint/show-hint.js rename : browser/devtools/sourceeditor/codemirror/keymap/emacs.js => devtools/client/sourceeditor/codemirror/keymap/emacs.js rename : browser/devtools/sourceeditor/codemirror/keymap/sublime.js => devtools/client/sourceeditor/codemirror/keymap/sublime.js rename : browser/devtools/sourceeditor/codemirror/keymap/vim.js => devtools/client/sourceeditor/codemirror/keymap/vim.js rename : browser/devtools/sourceeditor/codemirror/mode/clike.js => devtools/client/sourceeditor/codemirror/mode/clike.js rename : browser/devtools/sourceeditor/codemirror/mode/css.js => devtools/client/sourceeditor/codemirror/mode/css.js rename : browser/devtools/sourceeditor/codemirror/mode/htmlmixed.js => devtools/client/sourceeditor/codemirror/mode/htmlmixed.js rename : browser/devtools/sourceeditor/codemirror/mode/javascript.js => devtools/client/sourceeditor/codemirror/mode/javascript.js rename : browser/devtools/sourceeditor/codemirror/mode/xml.js => devtools/client/sourceeditor/codemirror/mode/xml.js rename : browser/devtools/sourceeditor/codemirror/mozilla.css => devtools/client/sourceeditor/codemirror/mozilla.css rename : browser/devtools/sourceeditor/codemirror/search/match-highlighter.js => devtools/client/sourceeditor/codemirror/search/match-highlighter.js rename : browser/devtools/sourceeditor/codemirror/search/search.js => devtools/client/sourceeditor/codemirror/search/search.js rename : browser/devtools/sourceeditor/codemirror/search/searchcursor.js => devtools/client/sourceeditor/codemirror/search/searchcursor.js rename : browser/devtools/sourceeditor/codemirror/selection/active-line.js => devtools/client/sourceeditor/codemirror/selection/active-line.js rename : browser/devtools/sourceeditor/codemirror/selection/mark-selection.js => devtools/client/sourceeditor/codemirror/selection/mark-selection.js rename : browser/devtools/sourceeditor/codemirror/tern/tern.css => devtools/client/sourceeditor/codemirror/tern/tern.css rename : browser/devtools/sourceeditor/codemirror/tern/tern.js => devtools/client/sourceeditor/codemirror/tern/tern.js rename : browser/devtools/sourceeditor/css-autocompleter.js => devtools/client/sourceeditor/css-autocompleter.js rename : browser/devtools/sourceeditor/css-tokenizer.js => devtools/client/sourceeditor/css-tokenizer.js rename : browser/devtools/sourceeditor/debugger.js => devtools/client/sourceeditor/debugger.js rename : browser/devtools/sourceeditor/editor.js => devtools/client/sourceeditor/editor.js rename : browser/devtools/sourceeditor/moz.build => devtools/client/sourceeditor/moz.build rename : browser/devtools/sourceeditor/test/.eslintrc => devtools/client/sourceeditor/test/.eslintrc rename : browser/devtools/sourceeditor/test/browser.ini => devtools/client/sourceeditor/test/browser.ini rename : browser/devtools/sourceeditor/test/browser_codemirror.js => devtools/client/sourceeditor/test/browser_codemirror.js rename : browser/devtools/sourceeditor/test/browser_css_autocompletion.js => devtools/client/sourceeditor/test/browser_css_autocompletion.js rename : browser/devtools/sourceeditor/test/browser_css_getInfo.js => devtools/client/sourceeditor/test/browser_css_getInfo.js rename : browser/devtools/sourceeditor/test/browser_css_statemachine.js => devtools/client/sourceeditor/test/browser_css_statemachine.js rename : browser/devtools/sourceeditor/test/browser_detectindent.js => devtools/client/sourceeditor/test/browser_detectindent.js rename : browser/devtools/sourceeditor/test/browser_editor_addons.js => devtools/client/sourceeditor/test/browser_editor_addons.js rename : browser/devtools/sourceeditor/test/browser_editor_autocomplete_basic.js => devtools/client/sourceeditor/test/browser_editor_autocomplete_basic.js rename : browser/devtools/sourceeditor/test/browser_editor_autocomplete_events.js => devtools/client/sourceeditor/test/browser_editor_autocomplete_events.js rename : browser/devtools/sourceeditor/test/browser_editor_autocomplete_js.js => devtools/client/sourceeditor/test/browser_editor_autocomplete_js.js rename : browser/devtools/sourceeditor/test/browser_editor_basic.js => devtools/client/sourceeditor/test/browser_editor_basic.js rename : browser/devtools/sourceeditor/test/browser_editor_cursor.js => devtools/client/sourceeditor/test/browser_editor_cursor.js rename : browser/devtools/sourceeditor/test/browser_editor_find_again.js => devtools/client/sourceeditor/test/browser_editor_find_again.js rename : browser/devtools/sourceeditor/test/browser_editor_goto_line.js => devtools/client/sourceeditor/test/browser_editor_goto_line.js rename : browser/devtools/sourceeditor/test/browser_editor_history.js => devtools/client/sourceeditor/test/browser_editor_history.js rename : browser/devtools/sourceeditor/test/browser_editor_markers.js => devtools/client/sourceeditor/test/browser_editor_markers.js rename : browser/devtools/sourceeditor/test/browser_editor_movelines.js => devtools/client/sourceeditor/test/browser_editor_movelines.js rename : browser/devtools/sourceeditor/test/browser_editor_prefs.js => devtools/client/sourceeditor/test/browser_editor_prefs.js rename : browser/devtools/sourceeditor/test/browser_editor_script_injection.js => devtools/client/sourceeditor/test/browser_editor_script_injection.js rename : browser/devtools/sourceeditor/test/browser_vimemacs.js => devtools/client/sourceeditor/test/browser_vimemacs.js rename : browser/devtools/sourceeditor/test/cm_comment_test.js => devtools/client/sourceeditor/test/cm_comment_test.js rename : browser/devtools/sourceeditor/test/cm_doc_test.js => devtools/client/sourceeditor/test/cm_doc_test.js rename : browser/devtools/sourceeditor/test/cm_driver.js => devtools/client/sourceeditor/test/cm_driver.js rename : browser/devtools/sourceeditor/test/cm_emacs_test.js => devtools/client/sourceeditor/test/cm_emacs_test.js rename : browser/devtools/sourceeditor/test/cm_mode_javascript_test.js => devtools/client/sourceeditor/test/cm_mode_javascript_test.js rename : browser/devtools/sourceeditor/test/cm_mode_ruby.js => devtools/client/sourceeditor/test/cm_mode_ruby.js rename : browser/devtools/sourceeditor/test/cm_mode_test.css => devtools/client/sourceeditor/test/cm_mode_test.css rename : browser/devtools/sourceeditor/test/cm_mode_test.js => devtools/client/sourceeditor/test/cm_mode_test.js rename : browser/devtools/sourceeditor/test/cm_multi_test.js => devtools/client/sourceeditor/test/cm_multi_test.js rename : browser/devtools/sourceeditor/test/cm_script_injection_test.js => devtools/client/sourceeditor/test/cm_script_injection_test.js rename : browser/devtools/sourceeditor/test/cm_search_test.js => devtools/client/sourceeditor/test/cm_search_test.js rename : browser/devtools/sourceeditor/test/cm_sublime_test.js => devtools/client/sourceeditor/test/cm_sublime_test.js rename : browser/devtools/sourceeditor/test/cm_test.js => devtools/client/sourceeditor/test/cm_test.js rename : browser/devtools/sourceeditor/test/cm_vim_test.js => devtools/client/sourceeditor/test/cm_vim_test.js rename : browser/devtools/sourceeditor/test/codemirror.html => devtools/client/sourceeditor/test/codemirror.html rename : browser/devtools/sourceeditor/test/css_autocompletion_tests.json => devtools/client/sourceeditor/test/css_autocompletion_tests.json rename : browser/devtools/sourceeditor/test/css_statemachine_testcases.css => devtools/client/sourceeditor/test/css_statemachine_testcases.css rename : browser/devtools/sourceeditor/test/css_statemachine_tests.json => devtools/client/sourceeditor/test/css_statemachine_tests.json rename : browser/devtools/sourceeditor/test/head.js => devtools/client/sourceeditor/test/head.js rename : browser/devtools/sourceeditor/test/helper_codemirror_runner.js => devtools/client/sourceeditor/test/helper_codemirror_runner.js rename : browser/devtools/sourceeditor/test/vimemacs.html => devtools/client/sourceeditor/test/vimemacs.html rename : browser/devtools/storage/moz.build => devtools/client/storage/moz.build rename : browser/devtools/storage/panel.js => devtools/client/storage/panel.js rename : browser/devtools/storage/storage.xul => devtools/client/storage/storage.xul rename : browser/devtools/storage/test/.eslintrc => devtools/client/storage/test/.eslintrc rename : browser/devtools/storage/test/browser.ini => devtools/client/storage/test/browser.ini rename : browser/devtools/storage/test/browser_storage_basic.js => devtools/client/storage/test/browser_storage_basic.js rename : browser/devtools/storage/test/browser_storage_dynamic_updates.js => devtools/client/storage/test/browser_storage_dynamic_updates.js rename : browser/devtools/storage/test/browser_storage_sidebar.js => devtools/client/storage/test/browser_storage_sidebar.js rename : browser/devtools/storage/test/browser_storage_values.js => devtools/client/storage/test/browser_storage_values.js rename : browser/devtools/storage/test/head.js => devtools/client/storage/test/head.js rename : browser/devtools/storage/test/storage-complex-values.html => devtools/client/storage/test/storage-complex-values.html rename : browser/devtools/storage/test/storage-listings.html => devtools/client/storage/test/storage-listings.html rename : browser/devtools/storage/test/storage-secured-iframe.html => devtools/client/storage/test/storage-secured-iframe.html rename : browser/devtools/storage/test/storage-unsecured-iframe.html => devtools/client/storage/test/storage-unsecured-iframe.html rename : browser/devtools/storage/test/storage-updates.html => devtools/client/storage/test/storage-updates.html rename : browser/devtools/storage/ui.js => devtools/client/storage/ui.js rename : browser/devtools/styleeditor/StyleEditorUI.jsm => devtools/client/styleeditor/StyleEditorUI.jsm rename : browser/devtools/styleeditor/StyleEditorUtil.jsm => devtools/client/styleeditor/StyleEditorUtil.jsm rename : browser/devtools/styleeditor/StyleSheetEditor.jsm => devtools/client/styleeditor/StyleSheetEditor.jsm rename : browser/devtools/styleeditor/moz.build => devtools/client/styleeditor/moz.build rename : browser/devtools/styleeditor/styleeditor-commands.js => devtools/client/styleeditor/styleeditor-commands.js rename : browser/devtools/styleeditor/styleeditor-panel.js => devtools/client/styleeditor/styleeditor-panel.js rename : browser/devtools/styleeditor/styleeditor.css => devtools/client/styleeditor/styleeditor.css rename : browser/devtools/styleeditor/styleeditor.xul => devtools/client/styleeditor/styleeditor.xul rename : browser/devtools/styleeditor/test/.eslintrc => devtools/client/styleeditor/test/.eslintrc rename : browser/devtools/styleeditor/test/autocomplete.html => devtools/client/styleeditor/test/autocomplete.html rename : browser/devtools/styleeditor/test/browser.ini => devtools/client/styleeditor/test/browser.ini rename : browser/devtools/styleeditor/test/browser_styleeditor_autocomplete-disabled.js => devtools/client/styleeditor/test/browser_styleeditor_autocomplete-disabled.js rename : browser/devtools/styleeditor/test/browser_styleeditor_autocomplete.js => devtools/client/styleeditor/test/browser_styleeditor_autocomplete.js rename : browser/devtools/styleeditor/test/browser_styleeditor_bug_740541_iframes.js => devtools/client/styleeditor/test/browser_styleeditor_bug_740541_iframes.js rename : browser/devtools/styleeditor/test/browser_styleeditor_bug_851132_middle_click.js => devtools/client/styleeditor/test/browser_styleeditor_bug_851132_middle_click.js rename : browser/devtools/styleeditor/test/browser_styleeditor_bug_870339.js => devtools/client/styleeditor/test/browser_styleeditor_bug_870339.js rename : browser/devtools/styleeditor/test/browser_styleeditor_cmd_edit.html => devtools/client/styleeditor/test/browser_styleeditor_cmd_edit.html rename : browser/devtools/styleeditor/test/browser_styleeditor_cmd_edit.js => devtools/client/styleeditor/test/browser_styleeditor_cmd_edit.js rename : browser/devtools/styleeditor/test/browser_styleeditor_enabled.js => devtools/client/styleeditor/test/browser_styleeditor_enabled.js rename : browser/devtools/styleeditor/test/browser_styleeditor_fetch-from-cache.js => devtools/client/styleeditor/test/browser_styleeditor_fetch-from-cache.js rename : browser/devtools/styleeditor/test/browser_styleeditor_filesave.js => devtools/client/styleeditor/test/browser_styleeditor_filesave.js rename : browser/devtools/styleeditor/test/browser_styleeditor_highlight-selector.js => devtools/client/styleeditor/test/browser_styleeditor_highlight-selector.js rename : browser/devtools/styleeditor/test/browser_styleeditor_import.js => devtools/client/styleeditor/test/browser_styleeditor_import.js rename : browser/devtools/styleeditor/test/browser_styleeditor_import_rule.js => devtools/client/styleeditor/test/browser_styleeditor_import_rule.js rename : browser/devtools/styleeditor/test/browser_styleeditor_init.js => devtools/client/styleeditor/test/browser_styleeditor_init.js rename : browser/devtools/styleeditor/test/browser_styleeditor_inline_friendly_names.js => devtools/client/styleeditor/test/browser_styleeditor_inline_friendly_names.js rename : browser/devtools/styleeditor/test/browser_styleeditor_loading.js => devtools/client/styleeditor/test/browser_styleeditor_loading.js rename : browser/devtools/styleeditor/test/browser_styleeditor_media_sidebar.js => devtools/client/styleeditor/test/browser_styleeditor_media_sidebar.js rename : browser/devtools/styleeditor/test/browser_styleeditor_media_sidebar_sourcemaps.js => devtools/client/styleeditor/test/browser_styleeditor_media_sidebar_sourcemaps.js rename : browser/devtools/styleeditor/test/browser_styleeditor_missing_stylesheet.js => devtools/client/styleeditor/test/browser_styleeditor_missing_stylesheet.js rename : browser/devtools/styleeditor/test/browser_styleeditor_navigate.js => devtools/client/styleeditor/test/browser_styleeditor_navigate.js rename : browser/devtools/styleeditor/test/browser_styleeditor_new.js => devtools/client/styleeditor/test/browser_styleeditor_new.js rename : browser/devtools/styleeditor/test/browser_styleeditor_nostyle.js => devtools/client/styleeditor/test/browser_styleeditor_nostyle.js rename : browser/devtools/styleeditor/test/browser_styleeditor_opentab.js => devtools/client/styleeditor/test/browser_styleeditor_opentab.js rename : browser/devtools/styleeditor/test/browser_styleeditor_pretty.js => devtools/client/styleeditor/test/browser_styleeditor_pretty.js rename : browser/devtools/styleeditor/test/browser_styleeditor_private_perwindowpb.js => devtools/client/styleeditor/test/browser_styleeditor_private_perwindowpb.js rename : browser/devtools/styleeditor/test/browser_styleeditor_reload.js => devtools/client/styleeditor/test/browser_styleeditor_reload.js rename : browser/devtools/styleeditor/test/browser_styleeditor_scroll.js => devtools/client/styleeditor/test/browser_styleeditor_scroll.js rename : browser/devtools/styleeditor/test/browser_styleeditor_selectstylesheet.js => devtools/client/styleeditor/test/browser_styleeditor_selectstylesheet.js rename : browser/devtools/styleeditor/test/browser_styleeditor_sourcemap_large.js => devtools/client/styleeditor/test/browser_styleeditor_sourcemap_large.js rename : browser/devtools/styleeditor/test/browser_styleeditor_sourcemap_watching.js => devtools/client/styleeditor/test/browser_styleeditor_sourcemap_watching.js rename : browser/devtools/styleeditor/test/browser_styleeditor_sourcemaps.js => devtools/client/styleeditor/test/browser_styleeditor_sourcemaps.js rename : browser/devtools/styleeditor/test/browser_styleeditor_sv_keynav.js => devtools/client/styleeditor/test/browser_styleeditor_sv_keynav.js rename : browser/devtools/styleeditor/test/browser_styleeditor_sv_resize.js => devtools/client/styleeditor/test/browser_styleeditor_sv_resize.js rename : browser/devtools/styleeditor/test/browser_styleeditor_transition_rule.js => devtools/client/styleeditor/test/browser_styleeditor_transition_rule.js rename : browser/devtools/styleeditor/test/browser_styleeditor_xul.js => devtools/client/styleeditor/test/browser_styleeditor_xul.js rename : browser/devtools/styleeditor/test/doc_long.css => devtools/client/styleeditor/test/doc_long.css rename : browser/devtools/styleeditor/test/doc_uncached.css => devtools/client/styleeditor/test/doc_uncached.css rename : browser/devtools/styleeditor/test/doc_uncached.html => devtools/client/styleeditor/test/doc_uncached.html rename : browser/devtools/styleeditor/test/doc_xulpage.xul => devtools/client/styleeditor/test/doc_xulpage.xul rename : browser/devtools/styleeditor/test/four.html => devtools/client/styleeditor/test/four.html rename : browser/devtools/styleeditor/test/head.js => devtools/client/styleeditor/test/head.js rename : browser/devtools/styleeditor/test/import.css => devtools/client/styleeditor/test/import.css rename : browser/devtools/styleeditor/test/import.html => devtools/client/styleeditor/test/import.html rename : browser/devtools/styleeditor/test/import2.css => devtools/client/styleeditor/test/import2.css rename : browser/devtools/styleeditor/test/inline-1.html => devtools/client/styleeditor/test/inline-1.html rename : browser/devtools/styleeditor/test/inline-2.html => devtools/client/styleeditor/test/inline-2.html rename : browser/devtools/styleeditor/test/longload.html => devtools/client/styleeditor/test/longload.html rename : browser/devtools/styleeditor/test/media-rules-sourcemaps.html => devtools/client/styleeditor/test/media-rules-sourcemaps.html rename : browser/devtools/styleeditor/test/media-rules.css => devtools/client/styleeditor/test/media-rules.css rename : browser/devtools/styleeditor/test/media-rules.html => devtools/client/styleeditor/test/media-rules.html rename : browser/devtools/styleeditor/test/media-small.css => devtools/client/styleeditor/test/media-small.css rename : browser/devtools/styleeditor/test/media.html => devtools/client/styleeditor/test/media.html rename : browser/devtools/styleeditor/test/minified.html => devtools/client/styleeditor/test/minified.html rename : browser/devtools/styleeditor/test/missing.html => devtools/client/styleeditor/test/missing.html rename : browser/devtools/styleeditor/test/nostyle.html => devtools/client/styleeditor/test/nostyle.html rename : browser/devtools/styleeditor/test/pretty.css => devtools/client/styleeditor/test/pretty.css rename : browser/devtools/styleeditor/test/resources_inpage.jsi => devtools/client/styleeditor/test/resources_inpage.jsi rename : browser/devtools/styleeditor/test/resources_inpage1.css => devtools/client/styleeditor/test/resources_inpage1.css rename : browser/devtools/styleeditor/test/resources_inpage2.css => devtools/client/styleeditor/test/resources_inpage2.css rename : browser/devtools/styleeditor/test/simple.css => devtools/client/styleeditor/test/simple.css rename : browser/devtools/styleeditor/test/simple.css.gz => devtools/client/styleeditor/test/simple.css.gz rename : browser/devtools/styleeditor/test/simple.css.gz^headers^ => devtools/client/styleeditor/test/simple.css.gz^headers^ rename : browser/devtools/styleeditor/test/simple.gz.html => devtools/client/styleeditor/test/simple.gz.html rename : browser/devtools/styleeditor/test/simple.html => devtools/client/styleeditor/test/simple.html rename : browser/devtools/styleeditor/test/sourcemap-css/contained.css => devtools/client/styleeditor/test/sourcemap-css/contained.css rename : browser/devtools/styleeditor/test/sourcemap-css/media-rules.css => devtools/client/styleeditor/test/sourcemap-css/media-rules.css rename : browser/devtools/styleeditor/test/sourcemap-css/media-rules.css.map => devtools/client/styleeditor/test/sourcemap-css/media-rules.css.map rename : browser/devtools/styleeditor/test/sourcemap-css/sourcemaps.css => devtools/client/styleeditor/test/sourcemap-css/sourcemaps.css rename : browser/devtools/styleeditor/test/sourcemap-css/sourcemaps.css.map => devtools/client/styleeditor/test/sourcemap-css/sourcemaps.css.map rename : browser/devtools/styleeditor/test/sourcemap-css/test-bootstrap-scss.css => devtools/client/styleeditor/test/sourcemap-css/test-bootstrap-scss.css rename : browser/devtools/styleeditor/test/sourcemap-css/test-stylus.css => devtools/client/styleeditor/test/sourcemap-css/test-stylus.css rename : browser/devtools/styleeditor/test/sourcemap-sass/media-rules.scss => devtools/client/styleeditor/test/sourcemap-sass/media-rules.scss rename : browser/devtools/styleeditor/test/sourcemap-sass/sourcemaps.scss => devtools/client/styleeditor/test/sourcemap-sass/sourcemaps.scss rename : browser/devtools/styleeditor/test/sourcemap-styl/test-stylus.styl => devtools/client/styleeditor/test/sourcemap-styl/test-stylus.styl rename : browser/devtools/styleeditor/test/sourcemaps-large.html => devtools/client/styleeditor/test/sourcemaps-large.html rename : browser/devtools/styleeditor/test/sourcemaps-watching.html => devtools/client/styleeditor/test/sourcemaps-watching.html rename : browser/devtools/styleeditor/test/sourcemaps.html => devtools/client/styleeditor/test/sourcemaps.html rename : browser/devtools/styleeditor/test/test_private.css => devtools/client/styleeditor/test/test_private.css rename : browser/devtools/styleeditor/test/test_private.html => devtools/client/styleeditor/test/test_private.html rename : browser/devtools/styleeditor/utils.js => devtools/client/styleeditor/utils.js rename : browser/devtools/styleinspector/computed-view.js => devtools/client/styleinspector/computed-view.js rename : browser/devtools/styleinspector/computedview.xhtml => devtools/client/styleinspector/computedview.xhtml rename : browser/devtools/styleinspector/css-parsing-utils.js => devtools/client/styleinspector/css-parsing-utils.js rename : browser/devtools/styleinspector/cssruleview.xhtml => devtools/client/styleinspector/cssruleview.xhtml rename : browser/devtools/styleinspector/moz.build => devtools/client/styleinspector/moz.build rename : browser/devtools/styleinspector/rule-view.js => devtools/client/styleinspector/rule-view.js rename : browser/devtools/styleinspector/ruleview.css => devtools/client/styleinspector/ruleview.css rename : browser/devtools/styleinspector/style-inspector-menu.js => devtools/client/styleinspector/style-inspector-menu.js rename : browser/devtools/styleinspector/style-inspector-overlays.js => devtools/client/styleinspector/style-inspector-overlays.js rename : browser/devtools/styleinspector/style-inspector.js => devtools/client/styleinspector/style-inspector.js rename : browser/devtools/styleinspector/test/.eslintrc => devtools/client/styleinspector/test/.eslintrc rename : browser/devtools/styleinspector/test/browser.ini => devtools/client/styleinspector/test/browser.ini rename : browser/devtools/styleinspector/test/browser_computedview_browser-styles.js => devtools/client/styleinspector/test/browser_computedview_browser-styles.js rename : browser/devtools/styleinspector/test/browser_computedview_cycle_color.js => devtools/client/styleinspector/test/browser_computedview_cycle_color.js rename : browser/devtools/styleinspector/test/browser_computedview_getNodeInfo.js => devtools/client/styleinspector/test/browser_computedview_getNodeInfo.js rename : browser/devtools/styleinspector/test/browser_computedview_keybindings_01.js => devtools/client/styleinspector/test/browser_computedview_keybindings_01.js rename : browser/devtools/styleinspector/test/browser_computedview_keybindings_02.js => devtools/client/styleinspector/test/browser_computedview_keybindings_02.js rename : browser/devtools/styleinspector/test/browser_computedview_matched-selectors-toggle.js => devtools/client/styleinspector/test/browser_computedview_matched-selectors-toggle.js rename : browser/devtools/styleinspector/test/browser_computedview_matched-selectors_01.js => devtools/client/styleinspector/test/browser_computedview_matched-selectors_01.js rename : browser/devtools/styleinspector/test/browser_computedview_matched-selectors_02.js => devtools/client/styleinspector/test/browser_computedview_matched-selectors_02.js rename : browser/devtools/styleinspector/test/browser_computedview_media-queries.js => devtools/client/styleinspector/test/browser_computedview_media-queries.js rename : browser/devtools/styleinspector/test/browser_computedview_no-results-placeholder.js => devtools/client/styleinspector/test/browser_computedview_no-results-placeholder.js rename : browser/devtools/styleinspector/test/browser_computedview_original-source-link.js => devtools/client/styleinspector/test/browser_computedview_original-source-link.js rename : browser/devtools/styleinspector/test/browser_computedview_pseudo-element_01.js => devtools/client/styleinspector/test/browser_computedview_pseudo-element_01.js rename : browser/devtools/styleinspector/test/browser_computedview_refresh-on-style-change_01.js => devtools/client/styleinspector/test/browser_computedview_refresh-on-style-change_01.js rename : browser/devtools/styleinspector/test/browser_computedview_search-filter.js => devtools/client/styleinspector/test/browser_computedview_search-filter.js rename : browser/devtools/styleinspector/test/browser_computedview_search-filter_clear.js => devtools/client/styleinspector/test/browser_computedview_search-filter_clear.js rename : browser/devtools/styleinspector/test/browser_computedview_search-filter_context-menu.js => devtools/client/styleinspector/test/browser_computedview_search-filter_context-menu.js rename : browser/devtools/styleinspector/test/browser_computedview_search-filter_escape-keypress.js => devtools/client/styleinspector/test/browser_computedview_search-filter_escape-keypress.js rename : browser/devtools/styleinspector/test/browser_computedview_select-and-copy-styles.js => devtools/client/styleinspector/test/browser_computedview_select-and-copy-styles.js rename : browser/devtools/styleinspector/test/browser_computedview_style-editor-link.js => devtools/client/styleinspector/test/browser_computedview_style-editor-link.js rename : browser/devtools/styleinspector/test/browser_ruleview_add-property-and-reselect.js => devtools/client/styleinspector/test/browser_ruleview_add-property-and-reselect.js rename : browser/devtools/styleinspector/test/browser_ruleview_add-property-cancel_01.js => devtools/client/styleinspector/test/browser_ruleview_add-property-cancel_01.js rename : browser/devtools/styleinspector/test/browser_ruleview_add-property-cancel_02.js => devtools/client/styleinspector/test/browser_ruleview_add-property-cancel_02.js rename : browser/devtools/styleinspector/test/browser_ruleview_add-property-cancel_03.js => devtools/client/styleinspector/test/browser_ruleview_add-property-cancel_03.js rename : browser/devtools/styleinspector/test/browser_ruleview_add-property-svg.js => devtools/client/styleinspector/test/browser_ruleview_add-property-svg.js rename : browser/devtools/styleinspector/test/browser_ruleview_add-property_01.js => devtools/client/styleinspector/test/browser_ruleview_add-property_01.js rename : browser/devtools/styleinspector/test/browser_ruleview_add-property_02.js => devtools/client/styleinspector/test/browser_ruleview_add-property_02.js rename : browser/devtools/styleinspector/test/browser_ruleview_add-rule_01.js => devtools/client/styleinspector/test/browser_ruleview_add-rule_01.js rename : browser/devtools/styleinspector/test/browser_ruleview_add-rule_02.js => devtools/client/styleinspector/test/browser_ruleview_add-rule_02.js rename : browser/devtools/styleinspector/test/browser_ruleview_add-rule_03.js => devtools/client/styleinspector/test/browser_ruleview_add-rule_03.js rename : browser/devtools/styleinspector/test/browser_ruleview_add-rule_04.js => devtools/client/styleinspector/test/browser_ruleview_add-rule_04.js rename : browser/devtools/styleinspector/test/browser_ruleview_add-rule_pseudo_class.js => devtools/client/styleinspector/test/browser_ruleview_add-rule_pseudo_class.js rename : browser/devtools/styleinspector/test/browser_ruleview_colorpicker-and-image-tooltip_01.js => devtools/client/styleinspector/test/browser_ruleview_colorpicker-and-image-tooltip_01.js rename : browser/devtools/styleinspector/test/browser_ruleview_colorpicker-and-image-tooltip_02.js => devtools/client/styleinspector/test/browser_ruleview_colorpicker-and-image-tooltip_02.js rename : browser/devtools/styleinspector/test/browser_ruleview_colorpicker-appears-on-swatch-click.js => devtools/client/styleinspector/test/browser_ruleview_colorpicker-appears-on-swatch-click.js rename : browser/devtools/styleinspector/test/browser_ruleview_colorpicker-commit-on-ENTER.js => devtools/client/styleinspector/test/browser_ruleview_colorpicker-commit-on-ENTER.js rename : browser/devtools/styleinspector/test/browser_ruleview_colorpicker-edit-gradient.js => devtools/client/styleinspector/test/browser_ruleview_colorpicker-edit-gradient.js rename : browser/devtools/styleinspector/test/browser_ruleview_colorpicker-hides-on-tooltip.js => devtools/client/styleinspector/test/browser_ruleview_colorpicker-hides-on-tooltip.js rename : browser/devtools/styleinspector/test/browser_ruleview_colorpicker-multiple-changes.js => devtools/client/styleinspector/test/browser_ruleview_colorpicker-multiple-changes.js rename : browser/devtools/styleinspector/test/browser_ruleview_colorpicker-release-outside-frame.js => devtools/client/styleinspector/test/browser_ruleview_colorpicker-release-outside-frame.js rename : browser/devtools/styleinspector/test/browser_ruleview_colorpicker-revert-on-ESC.js => devtools/client/styleinspector/test/browser_ruleview_colorpicker-revert-on-ESC.js rename : browser/devtools/styleinspector/test/browser_ruleview_colorpicker-swatch-displayed.js => devtools/client/styleinspector/test/browser_ruleview_colorpicker-swatch-displayed.js rename : browser/devtools/styleinspector/test/browser_ruleview_completion-existing-property_01.js => devtools/client/styleinspector/test/browser_ruleview_completion-existing-property_01.js rename : browser/devtools/styleinspector/test/browser_ruleview_completion-existing-property_02.js => devtools/client/styleinspector/test/browser_ruleview_completion-existing-property_02.js rename : browser/devtools/styleinspector/test/browser_ruleview_completion-new-property_01.js => devtools/client/styleinspector/test/browser_ruleview_completion-new-property_01.js rename : browser/devtools/styleinspector/test/browser_ruleview_completion-new-property_02.js => devtools/client/styleinspector/test/browser_ruleview_completion-new-property_02.js rename : browser/devtools/styleinspector/test/browser_ruleview_completion-popup-hidden-after-navigation.js => devtools/client/styleinspector/test/browser_ruleview_completion-popup-hidden-after-navigation.js rename : browser/devtools/styleinspector/test/browser_ruleview_computed-lists_01.js => devtools/client/styleinspector/test/browser_ruleview_computed-lists_01.js rename : browser/devtools/styleinspector/test/browser_ruleview_computed-lists_02.js => devtools/client/styleinspector/test/browser_ruleview_computed-lists_02.js rename : browser/devtools/styleinspector/test/browser_ruleview_content_01.js => devtools/client/styleinspector/test/browser_ruleview_content_01.js rename : browser/devtools/styleinspector/test/browser_ruleview_content_02.js => devtools/client/styleinspector/test/browser_ruleview_content_02.js rename : browser/devtools/styleinspector/test/browser_ruleview_context-menu-show-mdn-docs-01.js => devtools/client/styleinspector/test/browser_ruleview_context-menu-show-mdn-docs-01.js rename : browser/devtools/styleinspector/test/browser_ruleview_context-menu-show-mdn-docs-02.js => devtools/client/styleinspector/test/browser_ruleview_context-menu-show-mdn-docs-02.js rename : browser/devtools/styleinspector/test/browser_ruleview_context-menu-show-mdn-docs-03.js => devtools/client/styleinspector/test/browser_ruleview_context-menu-show-mdn-docs-03.js rename : browser/devtools/styleinspector/test/browser_ruleview_copy_styles.js => devtools/client/styleinspector/test/browser_ruleview_copy_styles.js rename : browser/devtools/styleinspector/test/browser_ruleview_cubicbezier-appears-on-swatch-click.js => devtools/client/styleinspector/test/browser_ruleview_cubicbezier-appears-on-swatch-click.js rename : browser/devtools/styleinspector/test/browser_ruleview_cubicbezier-commit-on-ENTER.js => devtools/client/styleinspector/test/browser_ruleview_cubicbezier-commit-on-ENTER.js rename : browser/devtools/styleinspector/test/browser_ruleview_cubicbezier-revert-on-ESC.js => devtools/client/styleinspector/test/browser_ruleview_cubicbezier-revert-on-ESC.js rename : browser/devtools/styleinspector/test/browser_ruleview_custom.js => devtools/client/styleinspector/test/browser_ruleview_custom.js rename : browser/devtools/styleinspector/test/browser_ruleview_cycle-color.js => devtools/client/styleinspector/test/browser_ruleview_cycle-color.js rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property-cancel.js => devtools/client/styleinspector/test/browser_ruleview_edit-property-cancel.js rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property-commit.js => devtools/client/styleinspector/test/browser_ruleview_edit-property-commit.js rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property-computed.js => devtools/client/styleinspector/test/browser_ruleview_edit-property-computed.js rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property-increments.js => devtools/client/styleinspector/test/browser_ruleview_edit-property-increments.js rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property-order.js => devtools/client/styleinspector/test/browser_ruleview_edit-property-order.js rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property-remove_01.js => devtools/client/styleinspector/test/browser_ruleview_edit-property-remove_01.js rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property-remove_02.js => devtools/client/styleinspector/test/browser_ruleview_edit-property-remove_02.js rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property-remove_03.js => devtools/client/styleinspector/test/browser_ruleview_edit-property-remove_03.js rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property_01.js => devtools/client/styleinspector/test/browser_ruleview_edit-property_01.js rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property_02.js => devtools/client/styleinspector/test/browser_ruleview_edit-property_02.js rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property_03.js => devtools/client/styleinspector/test/browser_ruleview_edit-property_03.js rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property_04.js => devtools/client/styleinspector/test/browser_ruleview_edit-property_04.js rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property_05.js => devtools/client/styleinspector/test/browser_ruleview_edit-property_05.js rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property_06.js => devtools/client/styleinspector/test/browser_ruleview_edit-property_06.js rename : browser/devtools/styleinspector/test/browser_ruleview_edit-property_07.js => devtools/client/styleinspector/test/browser_ruleview_edit-property_07.js rename : browser/devtools/styleinspector/test/browser_ruleview_edit-selector-commit.js => devtools/client/styleinspector/test/browser_ruleview_edit-selector-commit.js rename : browser/devtools/styleinspector/test/browser_ruleview_edit-selector_01.js => devtools/client/styleinspector/test/browser_ruleview_edit-selector_01.js rename : browser/devtools/styleinspector/test/browser_ruleview_edit-selector_02.js => devtools/client/styleinspector/test/browser_ruleview_edit-selector_02.js rename : browser/devtools/styleinspector/test/browser_ruleview_edit-selector_03.js => devtools/client/styleinspector/test/browser_ruleview_edit-selector_03.js rename : browser/devtools/styleinspector/test/browser_ruleview_edit-selector_04.js => devtools/client/styleinspector/test/browser_ruleview_edit-selector_04.js rename : browser/devtools/styleinspector/test/browser_ruleview_edit-selector_05.js => devtools/client/styleinspector/test/browser_ruleview_edit-selector_05.js rename : browser/devtools/styleinspector/test/browser_ruleview_edit-selector_06.js => devtools/client/styleinspector/test/browser_ruleview_edit-selector_06.js rename : browser/devtools/styleinspector/test/browser_ruleview_editable-field-focus_01.js => devtools/client/styleinspector/test/browser_ruleview_editable-field-focus_01.js rename : browser/devtools/styleinspector/test/browser_ruleview_editable-field-focus_02.js => devtools/client/styleinspector/test/browser_ruleview_editable-field-focus_02.js rename : browser/devtools/styleinspector/test/browser_ruleview_eyedropper.js => devtools/client/styleinspector/test/browser_ruleview_eyedropper.js rename : browser/devtools/styleinspector/test/browser_ruleview_filtereditor-appears-on-swatch-click.js => devtools/client/styleinspector/test/browser_ruleview_filtereditor-appears-on-swatch-click.js rename : browser/devtools/styleinspector/test/browser_ruleview_filtereditor-commit-on-ENTER.js => devtools/client/styleinspector/test/browser_ruleview_filtereditor-commit-on-ENTER.js rename : browser/devtools/styleinspector/test/browser_ruleview_filtereditor-revert-on-ESC.js => devtools/client/styleinspector/test/browser_ruleview_filtereditor-revert-on-ESC.js rename : browser/devtools/styleinspector/test/browser_ruleview_inherited-properties_01.js => devtools/client/styleinspector/test/browser_ruleview_inherited-properties_01.js rename : browser/devtools/styleinspector/test/browser_ruleview_inherited-properties_02.js => devtools/client/styleinspector/test/browser_ruleview_inherited-properties_02.js rename : browser/devtools/styleinspector/test/browser_ruleview_inherited-properties_03.js => devtools/client/styleinspector/test/browser_ruleview_inherited-properties_03.js rename : browser/devtools/styleinspector/test/browser_ruleview_keybindings.js => devtools/client/styleinspector/test/browser_ruleview_keybindings.js rename : browser/devtools/styleinspector/test/browser_ruleview_keyframes-rule_01.js => devtools/client/styleinspector/test/browser_ruleview_keyframes-rule_01.js rename : browser/devtools/styleinspector/test/browser_ruleview_keyframes-rule_02.js => devtools/client/styleinspector/test/browser_ruleview_keyframes-rule_02.js rename : browser/devtools/styleinspector/test/browser_ruleview_livepreview.js => devtools/client/styleinspector/test/browser_ruleview_livepreview.js rename : browser/devtools/styleinspector/test/browser_ruleview_mark_overridden_01.js => devtools/client/styleinspector/test/browser_ruleview_mark_overridden_01.js rename : browser/devtools/styleinspector/test/browser_ruleview_mark_overridden_02.js => devtools/client/styleinspector/test/browser_ruleview_mark_overridden_02.js rename : browser/devtools/styleinspector/test/browser_ruleview_mark_overridden_03.js => devtools/client/styleinspector/test/browser_ruleview_mark_overridden_03.js rename : browser/devtools/styleinspector/test/browser_ruleview_mark_overridden_04.js => devtools/client/styleinspector/test/browser_ruleview_mark_overridden_04.js rename : browser/devtools/styleinspector/test/browser_ruleview_mark_overridden_05.js => devtools/client/styleinspector/test/browser_ruleview_mark_overridden_05.js rename : browser/devtools/styleinspector/test/browser_ruleview_mathml-element.js => devtools/client/styleinspector/test/browser_ruleview_mathml-element.js rename : browser/devtools/styleinspector/test/browser_ruleview_media-queries.js => devtools/client/styleinspector/test/browser_ruleview_media-queries.js rename : browser/devtools/styleinspector/test/browser_ruleview_multiple-properties-duplicates.js => devtools/client/styleinspector/test/browser_ruleview_multiple-properties-duplicates.js rename : browser/devtools/styleinspector/test/browser_ruleview_multiple-properties-priority.js => devtools/client/styleinspector/test/browser_ruleview_multiple-properties-priority.js rename : browser/devtools/styleinspector/test/browser_ruleview_multiple-properties-unfinished_01.js => devtools/client/styleinspector/test/browser_ruleview_multiple-properties-unfinished_01.js rename : browser/devtools/styleinspector/test/browser_ruleview_multiple-properties-unfinished_02.js => devtools/client/styleinspector/test/browser_ruleview_multiple-properties-unfinished_02.js rename : browser/devtools/styleinspector/test/browser_ruleview_multiple_properties_01.js => devtools/client/styleinspector/test/browser_ruleview_multiple_properties_01.js rename : browser/devtools/styleinspector/test/browser_ruleview_multiple_properties_02.js => devtools/client/styleinspector/test/browser_ruleview_multiple_properties_02.js rename : browser/devtools/styleinspector/test/browser_ruleview_original-source-link.js => devtools/client/styleinspector/test/browser_ruleview_original-source-link.js rename : browser/devtools/styleinspector/test/browser_ruleview_pseudo-element_01.js => devtools/client/styleinspector/test/browser_ruleview_pseudo-element_01.js rename : browser/devtools/styleinspector/test/browser_ruleview_pseudo-element_02.js => devtools/client/styleinspector/test/browser_ruleview_pseudo-element_02.js rename : browser/devtools/styleinspector/test/browser_ruleview_pseudo_lock_options.js => devtools/client/styleinspector/test/browser_ruleview_pseudo_lock_options.js rename : browser/devtools/styleinspector/test/browser_ruleview_refresh-on-attribute-change_01.js => devtools/client/styleinspector/test/browser_ruleview_refresh-on-attribute-change_01.js rename : browser/devtools/styleinspector/test/browser_ruleview_refresh-on-attribute-change_02.js => devtools/client/styleinspector/test/browser_ruleview_refresh-on-attribute-change_02.js rename : browser/devtools/styleinspector/test/browser_ruleview_refresh-on-style-change.js => devtools/client/styleinspector/test/browser_ruleview_refresh-on-style-change.js rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter-computed-list_01.js => devtools/client/styleinspector/test/browser_ruleview_search-filter-computed-list_01.js rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter-computed-list_02.js => devtools/client/styleinspector/test/browser_ruleview_search-filter-computed-list_02.js rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter-computed-list_03.js => devtools/client/styleinspector/test/browser_ruleview_search-filter-computed-list_03.js rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter-computed-list_04.js => devtools/client/styleinspector/test/browser_ruleview_search-filter-computed-list_04.js rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter-computed-list_expander.js => devtools/client/styleinspector/test/browser_ruleview_search-filter-computed-list_expander.js rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter-overridden-property.js => devtools/client/styleinspector/test/browser_ruleview_search-filter-overridden-property.js rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter_01.js => devtools/client/styleinspector/test/browser_ruleview_search-filter_01.js rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter_02.js => devtools/client/styleinspector/test/browser_ruleview_search-filter_02.js rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter_03.js => devtools/client/styleinspector/test/browser_ruleview_search-filter_03.js rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter_04.js => devtools/client/styleinspector/test/browser_ruleview_search-filter_04.js rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter_05.js => devtools/client/styleinspector/test/browser_ruleview_search-filter_05.js rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter_06.js => devtools/client/styleinspector/test/browser_ruleview_search-filter_06.js rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter_07.js => devtools/client/styleinspector/test/browser_ruleview_search-filter_07.js rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter_08.js => devtools/client/styleinspector/test/browser_ruleview_search-filter_08.js rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter_09.js => devtools/client/styleinspector/test/browser_ruleview_search-filter_09.js rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter_10.js => devtools/client/styleinspector/test/browser_ruleview_search-filter_10.js rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter_context-menu.js => devtools/client/styleinspector/test/browser_ruleview_search-filter_context-menu.js rename : browser/devtools/styleinspector/test/browser_ruleview_search-filter_escape-keypress.js => devtools/client/styleinspector/test/browser_ruleview_search-filter_escape-keypress.js rename : browser/devtools/styleinspector/test/browser_ruleview_select-and-copy-styles.js => devtools/client/styleinspector/test/browser_ruleview_select-and-copy-styles.js rename : browser/devtools/styleinspector/test/browser_ruleview_selector-highlighter_01.js => devtools/client/styleinspector/test/browser_ruleview_selector-highlighter_01.js rename : browser/devtools/styleinspector/test/browser_ruleview_selector-highlighter_02.js => devtools/client/styleinspector/test/browser_ruleview_selector-highlighter_02.js rename : browser/devtools/styleinspector/test/browser_ruleview_selector-highlighter_03.js => devtools/client/styleinspector/test/browser_ruleview_selector-highlighter_03.js rename : browser/devtools/styleinspector/test/browser_ruleview_selector_highlight.js => devtools/client/styleinspector/test/browser_ruleview_selector_highlight.js rename : browser/devtools/styleinspector/test/browser_ruleview_strict-search-filter-computed-list_01.js => devtools/client/styleinspector/test/browser_ruleview_strict-search-filter-computed-list_01.js rename : browser/devtools/styleinspector/test/browser_ruleview_strict-search-filter_01.js => devtools/client/styleinspector/test/browser_ruleview_strict-search-filter_01.js rename : browser/devtools/styleinspector/test/browser_ruleview_strict-search-filter_02.js => devtools/client/styleinspector/test/browser_ruleview_strict-search-filter_02.js rename : browser/devtools/styleinspector/test/browser_ruleview_strict-search-filter_03.js => devtools/client/styleinspector/test/browser_ruleview_strict-search-filter_03.js rename : browser/devtools/styleinspector/test/browser_ruleview_style-editor-link.js => devtools/client/styleinspector/test/browser_ruleview_style-editor-link.js rename : browser/devtools/styleinspector/test/browser_ruleview_urls-clickable.js => devtools/client/styleinspector/test/browser_ruleview_urls-clickable.js rename : browser/devtools/styleinspector/test/browser_ruleview_user-agent-styles-uneditable.js => devtools/client/styleinspector/test/browser_ruleview_user-agent-styles-uneditable.js rename : browser/devtools/styleinspector/test/browser_ruleview_user-agent-styles.js => devtools/client/styleinspector/test/browser_ruleview_user-agent-styles.js rename : browser/devtools/styleinspector/test/browser_ruleview_user-property-reset.js => devtools/client/styleinspector/test/browser_ruleview_user-property-reset.js rename : browser/devtools/styleinspector/test/browser_styleinspector_context-menu-copy-color_01.js => devtools/client/styleinspector/test/browser_styleinspector_context-menu-copy-color_01.js rename : browser/devtools/styleinspector/test/browser_styleinspector_context-menu-copy-color_02.js => devtools/client/styleinspector/test/browser_styleinspector_context-menu-copy-color_02.js rename : browser/devtools/styleinspector/test/browser_styleinspector_context-menu-copy-urls.js => devtools/client/styleinspector/test/browser_styleinspector_context-menu-copy-urls.js rename : browser/devtools/styleinspector/test/browser_styleinspector_csslogic-content-stylesheets.js => devtools/client/styleinspector/test/browser_styleinspector_csslogic-content-stylesheets.js rename : browser/devtools/styleinspector/test/browser_styleinspector_output-parser.js => devtools/client/styleinspector/test/browser_styleinspector_output-parser.js rename : browser/devtools/styleinspector/test/browser_styleinspector_refresh_when_active.js => devtools/client/styleinspector/test/browser_styleinspector_refresh_when_active.js rename : browser/devtools/styleinspector/test/browser_styleinspector_tooltip-background-image.js => devtools/client/styleinspector/test/browser_styleinspector_tooltip-background-image.js rename : browser/devtools/styleinspector/test/browser_styleinspector_tooltip-closes-on-new-selection.js => devtools/client/styleinspector/test/browser_styleinspector_tooltip-closes-on-new-selection.js rename : browser/devtools/styleinspector/test/browser_styleinspector_tooltip-longhand-fontfamily.js => devtools/client/styleinspector/test/browser_styleinspector_tooltip-longhand-fontfamily.js rename : browser/devtools/styleinspector/test/browser_styleinspector_tooltip-multiple-background-images.js => devtools/client/styleinspector/test/browser_styleinspector_tooltip-multiple-background-images.js rename : browser/devtools/styleinspector/test/browser_styleinspector_tooltip-shorthand-fontfamily.js => devtools/client/styleinspector/test/browser_styleinspector_tooltip-shorthand-fontfamily.js rename : browser/devtools/styleinspector/test/browser_styleinspector_tooltip-size.js => devtools/client/styleinspector/test/browser_styleinspector_tooltip-size.js rename : browser/devtools/styleinspector/test/browser_styleinspector_transform-highlighter-01.js => devtools/client/styleinspector/test/browser_styleinspector_transform-highlighter-01.js rename : browser/devtools/styleinspector/test/browser_styleinspector_transform-highlighter-02.js => devtools/client/styleinspector/test/browser_styleinspector_transform-highlighter-02.js rename : browser/devtools/styleinspector/test/browser_styleinspector_transform-highlighter-03.js => devtools/client/styleinspector/test/browser_styleinspector_transform-highlighter-03.js rename : browser/devtools/styleinspector/test/browser_styleinspector_transform-highlighter-04.js => devtools/client/styleinspector/test/browser_styleinspector_transform-highlighter-04.js rename : browser/devtools/styleinspector/test/doc_content_stylesheet.html => devtools/client/styleinspector/test/doc_content_stylesheet.html rename : browser/devtools/styleinspector/test/doc_content_stylesheet.xul => devtools/client/styleinspector/test/doc_content_stylesheet.xul rename : browser/devtools/styleinspector/test/doc_content_stylesheet_imported.css => devtools/client/styleinspector/test/doc_content_stylesheet_imported.css rename : browser/devtools/styleinspector/test/doc_content_stylesheet_imported2.css => devtools/client/styleinspector/test/doc_content_stylesheet_imported2.css rename : browser/devtools/styleinspector/test/doc_content_stylesheet_linked.css => devtools/client/styleinspector/test/doc_content_stylesheet_linked.css rename : browser/devtools/styleinspector/test/doc_content_stylesheet_script.css => devtools/client/styleinspector/test/doc_content_stylesheet_script.css rename : browser/devtools/styleinspector/test/doc_content_stylesheet_xul.css => devtools/client/styleinspector/test/doc_content_stylesheet_xul.css rename : browser/devtools/styleinspector/test/doc_copystyles.css => devtools/client/styleinspector/test/doc_copystyles.css rename : browser/devtools/styleinspector/test/doc_copystyles.html => devtools/client/styleinspector/test/doc_copystyles.html rename : browser/devtools/styleinspector/test/doc_custom.html => devtools/client/styleinspector/test/doc_custom.html rename : browser/devtools/styleinspector/test/doc_filter.html => devtools/client/styleinspector/test/doc_filter.html rename : browser/devtools/styleinspector/test/doc_frame_script.js => devtools/client/styleinspector/test/doc_frame_script.js rename : browser/devtools/styleinspector/test/doc_keyframeanimation.css => devtools/client/styleinspector/test/doc_keyframeanimation.css rename : browser/devtools/styleinspector/test/doc_keyframeanimation.html => devtools/client/styleinspector/test/doc_keyframeanimation.html rename : browser/devtools/styleinspector/test/doc_matched_selectors.html => devtools/client/styleinspector/test/doc_matched_selectors.html rename : browser/devtools/styleinspector/test/doc_media_queries.html => devtools/client/styleinspector/test/doc_media_queries.html rename : browser/devtools/styleinspector/test/doc_pseudoelement.html => devtools/client/styleinspector/test/doc_pseudoelement.html rename : browser/devtools/styleinspector/test/doc_sourcemaps.css => devtools/client/styleinspector/test/doc_sourcemaps.css rename : browser/devtools/styleinspector/test/doc_sourcemaps.css.map => devtools/client/styleinspector/test/doc_sourcemaps.css.map rename : browser/devtools/styleinspector/test/doc_sourcemaps.html => devtools/client/styleinspector/test/doc_sourcemaps.html rename : browser/devtools/styleinspector/test/doc_sourcemaps.scss => devtools/client/styleinspector/test/doc_sourcemaps.scss rename : browser/devtools/styleinspector/test/doc_style_editor_link.css => devtools/client/styleinspector/test/doc_style_editor_link.css rename : browser/devtools/styleinspector/test/doc_test_image.png => devtools/client/styleinspector/test/doc_test_image.png rename : browser/devtools/styleinspector/test/doc_urls_clickable.css => devtools/client/styleinspector/test/doc_urls_clickable.css rename : browser/devtools/styleinspector/test/doc_urls_clickable.html => devtools/client/styleinspector/test/doc_urls_clickable.html rename : browser/devtools/styleinspector/test/head.js => devtools/client/styleinspector/test/head.js rename : browser/devtools/styleinspector/test/unit/.eslintrc => devtools/client/styleinspector/test/unit/.eslintrc rename : browser/devtools/styleinspector/test/unit/test_parseDeclarations.js => devtools/client/styleinspector/test/unit/test_parseDeclarations.js rename : browser/devtools/styleinspector/test/unit/test_parsePseudoClassesAndAttributes.js => devtools/client/styleinspector/test/unit/test_parsePseudoClassesAndAttributes.js rename : browser/devtools/styleinspector/test/unit/test_parseSingleValue.js => devtools/client/styleinspector/test/unit/test_parseSingleValue.js rename : browser/devtools/styleinspector/test/unit/xpcshell.ini => devtools/client/styleinspector/test/unit/xpcshell.ini rename : browser/devtools/styleinspector/utils.js => devtools/client/styleinspector/utils.js rename : browser/devtools/tilt/TiltWorkerCrafter.js => devtools/client/tilt/TiltWorkerCrafter.js rename : browser/devtools/tilt/TiltWorkerPicker.js => devtools/client/tilt/TiltWorkerPicker.js rename : browser/devtools/tilt/moz.build => devtools/client/tilt/moz.build rename : browser/devtools/tilt/test/.eslintrc => devtools/client/tilt/test/.eslintrc rename : browser/devtools/tilt/test/browser.ini => devtools/client/tilt/test/browser.ini rename : browser/devtools/tilt/test/browser_tilt_01_lazy_getter.js => devtools/client/tilt/test/browser_tilt_01_lazy_getter.js rename : browser/devtools/tilt/test/browser_tilt_02_notifications-seq.js => devtools/client/tilt/test/browser_tilt_02_notifications-seq.js rename : browser/devtools/tilt/test/browser_tilt_02_notifications-tabs.js => devtools/client/tilt/test/browser_tilt_02_notifications-tabs.js rename : browser/devtools/tilt/test/browser_tilt_02_notifications.js => devtools/client/tilt/test/browser_tilt_02_notifications.js rename : browser/devtools/tilt/test/browser_tilt_03_tab_switch.js => devtools/client/tilt/test/browser_tilt_03_tab_switch.js rename : browser/devtools/tilt/test/browser_tilt_04_initialization.js => devtools/client/tilt/test/browser_tilt_04_initialization.js rename : browser/devtools/tilt/test/browser_tilt_05_destruction-esc.js => devtools/client/tilt/test/browser_tilt_05_destruction-esc.js rename : browser/devtools/tilt/test/browser_tilt_05_destruction-url.js => devtools/client/tilt/test/browser_tilt_05_destruction-url.js rename : browser/devtools/tilt/test/browser_tilt_05_destruction.js => devtools/client/tilt/test/browser_tilt_05_destruction.js rename : browser/devtools/tilt/test/browser_tilt_arcball-reset-typeahead.js => devtools/client/tilt/test/browser_tilt_arcball-reset-typeahead.js rename : browser/devtools/tilt/test/browser_tilt_arcball-reset.js => devtools/client/tilt/test/browser_tilt_arcball-reset.js rename : browser/devtools/tilt/test/browser_tilt_arcball.js => devtools/client/tilt/test/browser_tilt_arcball.js rename : browser/devtools/tilt/test/browser_tilt_controller.js => devtools/client/tilt/test/browser_tilt_controller.js rename : browser/devtools/tilt/test/browser_tilt_gl01.js => devtools/client/tilt/test/browser_tilt_gl01.js rename : browser/devtools/tilt/test/browser_tilt_gl02.js => devtools/client/tilt/test/browser_tilt_gl02.js rename : browser/devtools/tilt/test/browser_tilt_gl03.js => devtools/client/tilt/test/browser_tilt_gl03.js rename : browser/devtools/tilt/test/browser_tilt_gl04.js => devtools/client/tilt/test/browser_tilt_gl04.js rename : browser/devtools/tilt/test/browser_tilt_gl05.js => devtools/client/tilt/test/browser_tilt_gl05.js rename : browser/devtools/tilt/test/browser_tilt_gl06.js => devtools/client/tilt/test/browser_tilt_gl06.js rename : browser/devtools/tilt/test/browser_tilt_gl07.js => devtools/client/tilt/test/browser_tilt_gl07.js rename : browser/devtools/tilt/test/browser_tilt_gl08.js => devtools/client/tilt/test/browser_tilt_gl08.js rename : browser/devtools/tilt/test/browser_tilt_math01.js => devtools/client/tilt/test/browser_tilt_math01.js rename : browser/devtools/tilt/test/browser_tilt_math02.js => devtools/client/tilt/test/browser_tilt_math02.js rename : browser/devtools/tilt/test/browser_tilt_math03.js => devtools/client/tilt/test/browser_tilt_math03.js rename : browser/devtools/tilt/test/browser_tilt_math04.js => devtools/client/tilt/test/browser_tilt_math04.js rename : browser/devtools/tilt/test/browser_tilt_math05.js => devtools/client/tilt/test/browser_tilt_math05.js rename : browser/devtools/tilt/test/browser_tilt_math06.js => devtools/client/tilt/test/browser_tilt_math06.js rename : browser/devtools/tilt/test/browser_tilt_math07.js => devtools/client/tilt/test/browser_tilt_math07.js rename : browser/devtools/tilt/test/browser_tilt_picking.js => devtools/client/tilt/test/browser_tilt_picking.js rename : browser/devtools/tilt/test/browser_tilt_picking_delete.js => devtools/client/tilt/test/browser_tilt_picking_delete.js rename : browser/devtools/tilt/test/browser_tilt_picking_highlight01-offs.js => devtools/client/tilt/test/browser_tilt_picking_highlight01-offs.js rename : browser/devtools/tilt/test/browser_tilt_picking_highlight01.js => devtools/client/tilt/test/browser_tilt_picking_highlight01.js rename : browser/devtools/tilt/test/browser_tilt_picking_highlight02.js => devtools/client/tilt/test/browser_tilt_picking_highlight02.js rename : browser/devtools/tilt/test/browser_tilt_picking_highlight03.js => devtools/client/tilt/test/browser_tilt_picking_highlight03.js rename : browser/devtools/tilt/test/browser_tilt_picking_inspector.js => devtools/client/tilt/test/browser_tilt_picking_inspector.js rename : browser/devtools/tilt/test/browser_tilt_picking_miv.js => devtools/client/tilt/test/browser_tilt_picking_miv.js rename : browser/devtools/tilt/test/browser_tilt_utils01.js => devtools/client/tilt/test/browser_tilt_utils01.js rename : browser/devtools/tilt/test/browser_tilt_utils02.js => devtools/client/tilt/test/browser_tilt_utils02.js rename : browser/devtools/tilt/test/browser_tilt_utils03.js => devtools/client/tilt/test/browser_tilt_utils03.js rename : browser/devtools/tilt/test/browser_tilt_utils04.js => devtools/client/tilt/test/browser_tilt_utils04.js rename : browser/devtools/tilt/test/browser_tilt_utils05.js => devtools/client/tilt/test/browser_tilt_utils05.js rename : browser/devtools/tilt/test/browser_tilt_utils06.js => devtools/client/tilt/test/browser_tilt_utils06.js rename : browser/devtools/tilt/test/browser_tilt_utils07.js => devtools/client/tilt/test/browser_tilt_utils07.js rename : browser/devtools/tilt/test/browser_tilt_utils08.js => devtools/client/tilt/test/browser_tilt_utils08.js rename : browser/devtools/tilt/test/browser_tilt_visualizer.js => devtools/client/tilt/test/browser_tilt_visualizer.js rename : browser/devtools/tilt/test/browser_tilt_zoom.js => devtools/client/tilt/test/browser_tilt_zoom.js rename : browser/devtools/tilt/test/head.js => devtools/client/tilt/test/head.js rename : browser/devtools/tilt/tilt-commands.js => devtools/client/tilt/tilt-commands.js rename : browser/devtools/tilt/tilt-gl.js => devtools/client/tilt/tilt-gl.js rename : browser/devtools/tilt/tilt-math.js => devtools/client/tilt/tilt-math.js rename : browser/devtools/tilt/tilt-utils.js => devtools/client/tilt/tilt-utils.js rename : browser/devtools/tilt/tilt-visualizer-style.js => devtools/client/tilt/tilt-visualizer-style.js rename : browser/devtools/tilt/tilt-visualizer.js => devtools/client/tilt/tilt-visualizer.js rename : browser/devtools/tilt/tilt.js => devtools/client/tilt/tilt.js rename : browser/devtools/webaudioeditor/controller.js => devtools/client/webaudioeditor/controller.js rename : browser/devtools/webaudioeditor/includes.js => devtools/client/webaudioeditor/includes.js rename : browser/devtools/webaudioeditor/models.js => devtools/client/webaudioeditor/models.js rename : browser/devtools/webaudioeditor/moz.build => devtools/client/webaudioeditor/moz.build rename : browser/devtools/webaudioeditor/panel.js => devtools/client/webaudioeditor/panel.js rename : browser/devtools/webaudioeditor/test/.eslintrc => devtools/client/webaudioeditor/test/.eslintrc rename : browser/devtools/webaudioeditor/test/440hz_sine.ogg => devtools/client/webaudioeditor/test/440hz_sine.ogg rename : browser/devtools/webaudioeditor/test/browser.ini => devtools/client/webaudioeditor/test/browser.ini rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-add-automation-event.js => devtools/client/webaudioeditor/test/browser_audionode-actor-add-automation-event.js rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-bypass.js => devtools/client/webaudioeditor/test/browser_audionode-actor-bypass.js rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-bypassable.js => devtools/client/webaudioeditor/test/browser_audionode-actor-bypassable.js rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-connectnode-disconnect.js => devtools/client/webaudioeditor/test/browser_audionode-actor-connectnode-disconnect.js rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-connectparam.js => devtools/client/webaudioeditor/test/browser_audionode-actor-connectparam.js rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-get-automation-data-01.js => devtools/client/webaudioeditor/test/browser_audionode-actor-get-automation-data-01.js rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-get-automation-data-02.js => devtools/client/webaudioeditor/test/browser_audionode-actor-get-automation-data-02.js rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-get-automation-data-03.js => devtools/client/webaudioeditor/test/browser_audionode-actor-get-automation-data-03.js rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-get-param-flags.js => devtools/client/webaudioeditor/test/browser_audionode-actor-get-param-flags.js rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-get-params-01.js => devtools/client/webaudioeditor/test/browser_audionode-actor-get-params-01.js rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-get-params-02.js => devtools/client/webaudioeditor/test/browser_audionode-actor-get-params-02.js rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-get-set-param.js => devtools/client/webaudioeditor/test/browser_audionode-actor-get-set-param.js rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-source.js => devtools/client/webaudioeditor/test/browser_audionode-actor-source.js rename : browser/devtools/webaudioeditor/test/browser_audionode-actor-type.js => devtools/client/webaudioeditor/test/browser_audionode-actor-type.js rename : browser/devtools/webaudioeditor/test/browser_callwatcher-01.js => devtools/client/webaudioeditor/test/browser_callwatcher-01.js rename : browser/devtools/webaudioeditor/test/browser_callwatcher-02.js => devtools/client/webaudioeditor/test/browser_callwatcher-02.js rename : browser/devtools/webaudioeditor/test/browser_wa_automation-view-01.js => devtools/client/webaudioeditor/test/browser_wa_automation-view-01.js rename : browser/devtools/webaudioeditor/test/browser_wa_automation-view-02.js => devtools/client/webaudioeditor/test/browser_wa_automation-view-02.js rename : browser/devtools/webaudioeditor/test/browser_wa_controller-01.js => devtools/client/webaudioeditor/test/browser_wa_controller-01.js rename : browser/devtools/webaudioeditor/test/browser_wa_destroy-node-01.js => devtools/client/webaudioeditor/test/browser_wa_destroy-node-01.js rename : browser/devtools/webaudioeditor/test/browser_wa_first-run.js => devtools/client/webaudioeditor/test/browser_wa_first-run.js rename : browser/devtools/webaudioeditor/test/browser_wa_graph-click.js => devtools/client/webaudioeditor/test/browser_wa_graph-click.js rename : browser/devtools/webaudioeditor/test/browser_wa_graph-markers.js => devtools/client/webaudioeditor/test/browser_wa_graph-markers.js rename : browser/devtools/webaudioeditor/test/browser_wa_graph-render-01.js => devtools/client/webaudioeditor/test/browser_wa_graph-render-01.js rename : browser/devtools/webaudioeditor/test/browser_wa_graph-render-02.js => devtools/client/webaudioeditor/test/browser_wa_graph-render-02.js rename : browser/devtools/webaudioeditor/test/browser_wa_graph-render-03.js => devtools/client/webaudioeditor/test/browser_wa_graph-render-03.js rename : browser/devtools/webaudioeditor/test/browser_wa_graph-render-04.js => devtools/client/webaudioeditor/test/browser_wa_graph-render-04.js rename : browser/devtools/webaudioeditor/test/browser_wa_graph-render-05.js => devtools/client/webaudioeditor/test/browser_wa_graph-render-05.js rename : browser/devtools/webaudioeditor/test/browser_wa_graph-render-06.js => devtools/client/webaudioeditor/test/browser_wa_graph-render-06.js rename : browser/devtools/webaudioeditor/test/browser_wa_graph-selected.js => devtools/client/webaudioeditor/test/browser_wa_graph-selected.js rename : browser/devtools/webaudioeditor/test/browser_wa_graph-zoom.js => devtools/client/webaudioeditor/test/browser_wa_graph-zoom.js rename : browser/devtools/webaudioeditor/test/browser_wa_inspector-bypass-01.js => devtools/client/webaudioeditor/test/browser_wa_inspector-bypass-01.js rename : browser/devtools/webaudioeditor/test/browser_wa_inspector-toggle.js => devtools/client/webaudioeditor/test/browser_wa_inspector-toggle.js rename : browser/devtools/webaudioeditor/test/browser_wa_inspector-width.js => devtools/client/webaudioeditor/test/browser_wa_inspector-width.js rename : browser/devtools/webaudioeditor/test/browser_wa_inspector.js => devtools/client/webaudioeditor/test/browser_wa_inspector.js rename : browser/devtools/webaudioeditor/test/browser_wa_navigate.js => devtools/client/webaudioeditor/test/browser_wa_navigate.js rename : browser/devtools/webaudioeditor/test/browser_wa_properties-view-edit-01.js => devtools/client/webaudioeditor/test/browser_wa_properties-view-edit-01.js rename : browser/devtools/webaudioeditor/test/browser_wa_properties-view-edit-02.js => devtools/client/webaudioeditor/test/browser_wa_properties-view-edit-02.js rename : browser/devtools/webaudioeditor/test/browser_wa_properties-view-media-nodes.js => devtools/client/webaudioeditor/test/browser_wa_properties-view-media-nodes.js rename : browser/devtools/webaudioeditor/test/browser_wa_properties-view-params-objects.js => devtools/client/webaudioeditor/test/browser_wa_properties-view-params-objects.js rename : browser/devtools/webaudioeditor/test/browser_wa_properties-view-params.js => devtools/client/webaudioeditor/test/browser_wa_properties-view-params.js rename : browser/devtools/webaudioeditor/test/browser_wa_properties-view.js => devtools/client/webaudioeditor/test/browser_wa_properties-view.js rename : browser/devtools/webaudioeditor/test/browser_wa_reset-01.js => devtools/client/webaudioeditor/test/browser_wa_reset-01.js rename : browser/devtools/webaudioeditor/test/browser_wa_reset-02.js => devtools/client/webaudioeditor/test/browser_wa_reset-02.js rename : browser/devtools/webaudioeditor/test/browser_wa_reset-03.js => devtools/client/webaudioeditor/test/browser_wa_reset-03.js rename : browser/devtools/webaudioeditor/test/browser_wa_reset-04.js => devtools/client/webaudioeditor/test/browser_wa_reset-04.js rename : browser/devtools/webaudioeditor/test/browser_webaudio-actor-automation-event.js => devtools/client/webaudioeditor/test/browser_webaudio-actor-automation-event.js rename : browser/devtools/webaudioeditor/test/browser_webaudio-actor-connect-param.js => devtools/client/webaudioeditor/test/browser_webaudio-actor-connect-param.js rename : browser/devtools/webaudioeditor/test/browser_webaudio-actor-destroy-node.js => devtools/client/webaudioeditor/test/browser_webaudio-actor-destroy-node.js rename : browser/devtools/webaudioeditor/test/browser_webaudio-actor-simple.js => devtools/client/webaudioeditor/test/browser_webaudio-actor-simple.js rename : browser/devtools/webaudioeditor/test/doc_automation.html => devtools/client/webaudioeditor/test/doc_automation.html rename : browser/devtools/webaudioeditor/test/doc_buffer-and-array.html => devtools/client/webaudioeditor/test/doc_buffer-and-array.html rename : browser/devtools/webaudioeditor/test/doc_bug_1112378.html => devtools/client/webaudioeditor/test/doc_bug_1112378.html rename : browser/devtools/webaudioeditor/test/doc_bug_1125817.html => devtools/client/webaudioeditor/test/doc_bug_1125817.html rename : browser/devtools/webaudioeditor/test/doc_bug_1130901.html => devtools/client/webaudioeditor/test/doc_bug_1130901.html rename : browser/devtools/webaudioeditor/test/doc_bug_1141261.html => devtools/client/webaudioeditor/test/doc_bug_1141261.html rename : browser/devtools/webaudioeditor/test/doc_complex-context.html => devtools/client/webaudioeditor/test/doc_complex-context.html rename : browser/devtools/webaudioeditor/test/doc_connect-multi-param.html => devtools/client/webaudioeditor/test/doc_connect-multi-param.html rename : browser/devtools/webaudioeditor/test/doc_connect-param.html => devtools/client/webaudioeditor/test/doc_connect-param.html rename : browser/devtools/webaudioeditor/test/doc_destroy-nodes.html => devtools/client/webaudioeditor/test/doc_destroy-nodes.html rename : browser/devtools/webaudioeditor/test/doc_iframe-context.html => devtools/client/webaudioeditor/test/doc_iframe-context.html rename : browser/devtools/webaudioeditor/test/doc_media-node-creation.html => devtools/client/webaudioeditor/test/doc_media-node-creation.html rename : browser/devtools/webaudioeditor/test/doc_simple-context.html => devtools/client/webaudioeditor/test/doc_simple-context.html rename : browser/devtools/webaudioeditor/test/doc_simple-node-creation.html => devtools/client/webaudioeditor/test/doc_simple-node-creation.html rename : browser/devtools/webaudioeditor/test/head.js => devtools/client/webaudioeditor/test/head.js rename : browser/devtools/webaudioeditor/views/automation.js => devtools/client/webaudioeditor/views/automation.js rename : browser/devtools/webaudioeditor/views/context.js => devtools/client/webaudioeditor/views/context.js rename : browser/devtools/webaudioeditor/views/inspector.js => devtools/client/webaudioeditor/views/inspector.js rename : browser/devtools/webaudioeditor/views/properties.js => devtools/client/webaudioeditor/views/properties.js rename : browser/devtools/webaudioeditor/views/utils.js => devtools/client/webaudioeditor/views/utils.js rename : browser/devtools/webaudioeditor/webaudioeditor.xul => devtools/client/webaudioeditor/webaudioeditor.xul rename : browser/devtools/webconsole/console-commands.js => devtools/client/webconsole/console-commands.js rename : browser/devtools/webconsole/console-output.js => devtools/client/webconsole/console-output.js rename : browser/devtools/webconsole/hudservice.js => devtools/client/webconsole/hudservice.js rename : browser/devtools/webconsole/moz.build => devtools/client/webconsole/moz.build rename : browser/devtools/webconsole/panel.js => devtools/client/webconsole/panel.js rename : browser/devtools/webconsole/test/.eslintrc => devtools/client/webconsole/test/.eslintrc rename : browser/devtools/webconsole/test/browser.ini => devtools/client/webconsole/test/browser.ini rename : browser/devtools/webconsole/test/browser_bug1045902_console_csp_ignore_reflected_xss_message.js => devtools/client/webconsole/test/browser_bug1045902_console_csp_ignore_reflected_xss_message.js rename : browser/devtools/webconsole/test/browser_bug664688_sandbox_update_after_navigation.js => devtools/client/webconsole/test/browser_bug664688_sandbox_update_after_navigation.js rename : browser/devtools/webconsole/test/browser_bug_638949_copy_link_location.js => devtools/client/webconsole/test/browser_bug_638949_copy_link_location.js rename : browser/devtools/webconsole/test/browser_bug_862916_console_dir_and_filter_off.js => devtools/client/webconsole/test/browser_bug_862916_console_dir_and_filter_off.js rename : browser/devtools/webconsole/test/browser_bug_865288_repeat_different_objects.js => devtools/client/webconsole/test/browser_bug_865288_repeat_different_objects.js rename : browser/devtools/webconsole/test/browser_bug_865871_variables_view_close_on_esc_key.js => devtools/client/webconsole/test/browser_bug_865871_variables_view_close_on_esc_key.js rename : browser/devtools/webconsole/test/browser_bug_869003_inspect_cross_domain_object.js => devtools/client/webconsole/test/browser_bug_869003_inspect_cross_domain_object.js rename : browser/devtools/webconsole/test/browser_bug_871156_ctrlw_close_tab.js => devtools/client/webconsole/test/browser_bug_871156_ctrlw_close_tab.js rename : browser/devtools/webconsole/test/browser_cached_messages.js => devtools/client/webconsole/test/browser_cached_messages.js rename : browser/devtools/webconsole/test/browser_console.js => devtools/client/webconsole/test/browser_console.js rename : browser/devtools/webconsole/test/browser_console_addonsdk_loader_exception.js => devtools/client/webconsole/test/browser_console_addonsdk_loader_exception.js rename : browser/devtools/webconsole/test/browser_console_clear_on_reload.js => devtools/client/webconsole/test/browser_console_clear_on_reload.js rename : browser/devtools/webconsole/test/browser_console_click_focus.js => devtools/client/webconsole/test/browser_console_click_focus.js rename : browser/devtools/webconsole/test/browser_console_consolejsm_output.js => devtools/client/webconsole/test/browser_console_consolejsm_output.js rename : browser/devtools/webconsole/test/browser_console_copy_command.js => devtools/client/webconsole/test/browser_console_copy_command.js rename : browser/devtools/webconsole/test/browser_console_copy_entire_message_context_menu.js => devtools/client/webconsole/test/browser_console_copy_entire_message_context_menu.js rename : browser/devtools/webconsole/test/browser_console_dead_objects.js => devtools/client/webconsole/test/browser_console_dead_objects.js rename : browser/devtools/webconsole/test/browser_console_error_source_click.js => devtools/client/webconsole/test/browser_console_error_source_click.js rename : browser/devtools/webconsole/test/browser_console_filters.js => devtools/client/webconsole/test/browser_console_filters.js rename : browser/devtools/webconsole/test/browser_console_hide_jsterm_when_devtools_chrome_enabled_false.js => devtools/client/webconsole/test/browser_console_hide_jsterm_when_devtools_chrome_enabled_false.js rename : browser/devtools/webconsole/test/browser_console_history_persist.js => devtools/client/webconsole/test/browser_console_history_persist.js rename : browser/devtools/webconsole/test/browser_console_iframe_messages.js => devtools/client/webconsole/test/browser_console_iframe_messages.js rename : browser/devtools/webconsole/test/browser_console_keyboard_accessibility.js => devtools/client/webconsole/test/browser_console_keyboard_accessibility.js rename : browser/devtools/webconsole/test/browser_console_log_inspectable_object.js => devtools/client/webconsole/test/browser_console_log_inspectable_object.js rename : browser/devtools/webconsole/test/browser_console_native_getters.js => devtools/client/webconsole/test/browser_console_native_getters.js rename : browser/devtools/webconsole/test/browser_console_navigation_marker.js => devtools/client/webconsole/test/browser_console_navigation_marker.js rename : browser/devtools/webconsole/test/browser_console_nsiconsolemessage.js => devtools/client/webconsole/test/browser_console_nsiconsolemessage.js rename : browser/devtools/webconsole/test/browser_console_open_or_focus.js => devtools/client/webconsole/test/browser_console_open_or_focus.js rename : browser/devtools/webconsole/test/browser_console_optimized_out_vars.js => devtools/client/webconsole/test/browser_console_optimized_out_vars.js rename : browser/devtools/webconsole/test/browser_console_private_browsing.js => devtools/client/webconsole/test/browser_console_private_browsing.js rename : browser/devtools/webconsole/test/browser_console_server_logging.js => devtools/client/webconsole/test/browser_console_server_logging.js rename : browser/devtools/webconsole/test/browser_console_variables_view.js => devtools/client/webconsole/test/browser_console_variables_view.js rename : browser/devtools/webconsole/test/browser_console_variables_view_dom_nodes.js => devtools/client/webconsole/test/browser_console_variables_view_dom_nodes.js rename : browser/devtools/webconsole/test/browser_console_variables_view_dont_sort_non_sortable_classes_properties.js => devtools/client/webconsole/test/browser_console_variables_view_dont_sort_non_sortable_classes_properties.js rename : browser/devtools/webconsole/test/browser_console_variables_view_filter.js => devtools/client/webconsole/test/browser_console_variables_view_filter.js rename : browser/devtools/webconsole/test/browser_console_variables_view_highlighter.js => devtools/client/webconsole/test/browser_console_variables_view_highlighter.js rename : browser/devtools/webconsole/test/browser_console_variables_view_while_debugging.js => devtools/client/webconsole/test/browser_console_variables_view_while_debugging.js rename : browser/devtools/webconsole/test/browser_console_variables_view_while_debugging_and_inspecting.js => devtools/client/webconsole/test/browser_console_variables_view_while_debugging_and_inspecting.js rename : browser/devtools/webconsole/test/browser_eval_in_debugger_stackframe.js => devtools/client/webconsole/test/browser_eval_in_debugger_stackframe.js rename : browser/devtools/webconsole/test/browser_eval_in_debugger_stackframe2.js => devtools/client/webconsole/test/browser_eval_in_debugger_stackframe2.js rename : browser/devtools/webconsole/test/browser_jsterm_inspect.js => devtools/client/webconsole/test/browser_jsterm_inspect.js rename : browser/devtools/webconsole/test/browser_longstring_hang.js => devtools/client/webconsole/test/browser_longstring_hang.js rename : browser/devtools/webconsole/test/browser_netmonitor_shows_reqs_in_webconsole.js => devtools/client/webconsole/test/browser_netmonitor_shows_reqs_in_webconsole.js rename : browser/devtools/webconsole/test/browser_output_breaks_after_console_dir_uninspectable.js => devtools/client/webconsole/test/browser_output_breaks_after_console_dir_uninspectable.js rename : browser/devtools/webconsole/test/browser_output_longstring_expand.js => devtools/client/webconsole/test/browser_output_longstring_expand.js rename : browser/devtools/webconsole/test/browser_repeated_messages_accuracy.js => devtools/client/webconsole/test/browser_repeated_messages_accuracy.js rename : browser/devtools/webconsole/test/browser_result_format_as_string.js => devtools/client/webconsole/test/browser_result_format_as_string.js rename : browser/devtools/webconsole/test/browser_warn_user_about_replaced_api.js => devtools/client/webconsole/test/browser_warn_user_about_replaced_api.js rename : browser/devtools/webconsole/test/browser_webconsole_abbreviate_source_url.js => devtools/client/webconsole/test/browser_webconsole_abbreviate_source_url.js rename : browser/devtools/webconsole/test/browser_webconsole_allow_mixedcontent_securityerrors.js => devtools/client/webconsole/test/browser_webconsole_allow_mixedcontent_securityerrors.js rename : browser/devtools/webconsole/test/browser_webconsole_assert.js => devtools/client/webconsole/test/browser_webconsole_assert.js rename : browser/devtools/webconsole/test/browser_webconsole_autocomplete-properties-with-non-alphanumeric-names.js => devtools/client/webconsole/test/browser_webconsole_autocomplete-properties-with-non-alphanumeric-names.js rename : browser/devtools/webconsole/test/browser_webconsole_autocomplete_and_selfxss.js => devtools/client/webconsole/test/browser_webconsole_autocomplete_and_selfxss.js rename : browser/devtools/webconsole/test/browser_webconsole_autocomplete_crossdomain_iframe.js => devtools/client/webconsole/test/browser_webconsole_autocomplete_crossdomain_iframe.js rename : browser/devtools/webconsole/test/browser_webconsole_autocomplete_in_debugger_stackframe.js => devtools/client/webconsole/test/browser_webconsole_autocomplete_in_debugger_stackframe.js rename : browser/devtools/webconsole/test/browser_webconsole_autocomplete_popup_close_on_tab_switch.js => devtools/client/webconsole/test/browser_webconsole_autocomplete_popup_close_on_tab_switch.js rename : browser/devtools/webconsole/test/browser_webconsole_basic_net_logging.js => devtools/client/webconsole/test/browser_webconsole_basic_net_logging.js rename : browser/devtools/webconsole/test/browser_webconsole_block_mixedcontent_securityerrors.js => devtools/client/webconsole/test/browser_webconsole_block_mixedcontent_securityerrors.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_1006027_message_timestamps_incorrect.js => devtools/client/webconsole/test/browser_webconsole_bug_1006027_message_timestamps_incorrect.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_1010953_cspro.js => devtools/client/webconsole/test/browser_webconsole_bug_1010953_cspro.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_1050691_click_function_to_source.js => devtools/client/webconsole/test/browser_webconsole_bug_1050691_click_function_to_source.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_578437_page_reload.js => devtools/client/webconsole/test/browser_webconsole_bug_578437_page_reload.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_579412_input_focus.js => devtools/client/webconsole/test/browser_webconsole_bug_579412_input_focus.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_580001_closing_after_completion.js => devtools/client/webconsole/test/browser_webconsole_bug_580001_closing_after_completion.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_580030_errors_after_page_reload.js => devtools/client/webconsole/test/browser_webconsole_bug_580030_errors_after_page_reload.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_580454_timestamp_l10n.js => devtools/client/webconsole/test/browser_webconsole_bug_580454_timestamp_l10n.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_582201_duplicate_errors.js => devtools/client/webconsole/test/browser_webconsole_bug_582201_duplicate_errors.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_583816_No_input_and_Tab_key_pressed.js => devtools/client/webconsole/test/browser_webconsole_bug_583816_No_input_and_Tab_key_pressed.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_585237_line_limit.js => devtools/client/webconsole/test/browser_webconsole_bug_585237_line_limit.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_585956_console_trace.js => devtools/client/webconsole/test/browser_webconsole_bug_585956_console_trace.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_585991_autocomplete_keys.js => devtools/client/webconsole/test/browser_webconsole_bug_585991_autocomplete_keys.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_585991_autocomplete_popup.js => devtools/client/webconsole/test/browser_webconsole_bug_585991_autocomplete_popup.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_586388_select_all.js => devtools/client/webconsole/test/browser_webconsole_bug_586388_select_all.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_587617_output_copy.js => devtools/client/webconsole/test/browser_webconsole_bug_587617_output_copy.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_588342_document_focus.js => devtools/client/webconsole/test/browser_webconsole_bug_588342_document_focus.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_588730_text_node_insertion.js => devtools/client/webconsole/test/browser_webconsole_bug_588730_text_node_insertion.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_588967_input_expansion.js => devtools/client/webconsole/test/browser_webconsole_bug_588967_input_expansion.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_589162_css_filter.js => devtools/client/webconsole/test/browser_webconsole_bug_589162_css_filter.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_592442_closing_brackets.js => devtools/client/webconsole/test/browser_webconsole_bug_592442_closing_brackets.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_593003_iframe_wrong_hud.js => devtools/client/webconsole/test/browser_webconsole_bug_593003_iframe_wrong_hud.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_594497_history_arrow_keys.js => devtools/client/webconsole/test/browser_webconsole_bug_594497_history_arrow_keys.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_595223_file_uri.js => devtools/client/webconsole/test/browser_webconsole_bug_595223_file_uri.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_595350_multiple_windows_and_tabs.js => devtools/client/webconsole/test/browser_webconsole_bug_595350_multiple_windows_and_tabs.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_595934_message_categories.js => devtools/client/webconsole/test/browser_webconsole_bug_595934_message_categories.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_597103_deactivateHUDForContext_unfocused_window.js => devtools/client/webconsole/test/browser_webconsole_bug_597103_deactivateHUDForContext_unfocused_window.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_597136_external_script_errors.js => devtools/client/webconsole/test/browser_webconsole_bug_597136_external_script_errors.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_597136_network_requests_from_chrome.js => devtools/client/webconsole/test/browser_webconsole_bug_597136_network_requests_from_chrome.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_597460_filter_scroll.js => devtools/client/webconsole/test/browser_webconsole_bug_597460_filter_scroll.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_597756_reopen_closed_tab.js => devtools/client/webconsole/test/browser_webconsole_bug_597756_reopen_closed_tab.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_599725_response_headers.js => devtools/client/webconsole/test/browser_webconsole_bug_599725_response_headers.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_600183_charset.js => devtools/client/webconsole/test/browser_webconsole_bug_600183_charset.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_601177_log_levels.js => devtools/client/webconsole/test/browser_webconsole_bug_601177_log_levels.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_601352_scroll.js => devtools/client/webconsole/test/browser_webconsole_bug_601352_scroll.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_601667_filter_buttons.js => devtools/client/webconsole/test/browser_webconsole_bug_601667_filter_buttons.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_603750_websocket.js => devtools/client/webconsole/test/browser_webconsole_bug_603750_websocket.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_611795.js => devtools/client/webconsole/test/browser_webconsole_bug_611795.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_613013_console_api_iframe.js => devtools/client/webconsole/test/browser_webconsole_bug_613013_console_api_iframe.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_613280_jsterm_copy.js => devtools/client/webconsole/test/browser_webconsole_bug_613280_jsterm_copy.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_613642_maintain_scroll.js => devtools/client/webconsole/test/browser_webconsole_bug_613642_maintain_scroll.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_613642_prune_scroll.js => devtools/client/webconsole/test/browser_webconsole_bug_613642_prune_scroll.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_614793_jsterm_scroll.js => devtools/client/webconsole/test/browser_webconsole_bug_614793_jsterm_scroll.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_618078_network_exceptions.js => devtools/client/webconsole/test/browser_webconsole_bug_618078_network_exceptions.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_621644_jsterm_dollar.js => devtools/client/webconsole/test/browser_webconsole_bug_621644_jsterm_dollar.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_622303_persistent_filters.js => devtools/client/webconsole/test/browser_webconsole_bug_622303_persistent_filters.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_623749_ctrl_a_select_all_winnt.js => devtools/client/webconsole/test/browser_webconsole_bug_623749_ctrl_a_select_all_winnt.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_630733_response_redirect_headers.js => devtools/client/webconsole/test/browser_webconsole_bug_630733_response_redirect_headers.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_632275_getters_document_width.js => devtools/client/webconsole/test/browser_webconsole_bug_632275_getters_document_width.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_632347_iterators_generators.js => devtools/client/webconsole/test/browser_webconsole_bug_632347_iterators_generators.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_632817.js => devtools/client/webconsole/test/browser_webconsole_bug_632817.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_642108_pruneTest.js => devtools/client/webconsole/test/browser_webconsole_bug_642108_pruneTest.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_644419_log_limits.js => devtools/client/webconsole/test/browser_webconsole_bug_644419_log_limits.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_646025_console_file_location.js => devtools/client/webconsole/test/browser_webconsole_bug_646025_console_file_location.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_651501_document_body_autocomplete.js => devtools/client/webconsole/test/browser_webconsole_bug_651501_document_body_autocomplete.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_653531_highlighter_console_helper.js => devtools/client/webconsole/test/browser_webconsole_bug_653531_highlighter_console_helper.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_658368_time_methods.js => devtools/client/webconsole/test/browser_webconsole_bug_658368_time_methods.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_659907_console_dir.js => devtools/client/webconsole/test/browser_webconsole_bug_659907_console_dir.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_660806_history_nav.js => devtools/client/webconsole/test/browser_webconsole_bug_660806_history_nav.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_664131_console_group.js => devtools/client/webconsole/test/browser_webconsole_bug_664131_console_group.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_686937_autocomplete_JSTerm_helpers.js => devtools/client/webconsole/test/browser_webconsole_bug_686937_autocomplete_JSTerm_helpers.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_704295.js => devtools/client/webconsole/test/browser_webconsole_bug_704295.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_734061_No_input_change_and_Tab_key_pressed.js => devtools/client/webconsole/test/browser_webconsole_bug_734061_No_input_change_and_Tab_key_pressed.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_737873_mixedcontent.js => devtools/client/webconsole/test/browser_webconsole_bug_737873_mixedcontent.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_752559_ineffective_iframe_sandbox_warning.js => devtools/client/webconsole/test/browser_webconsole_bug_752559_ineffective_iframe_sandbox_warning.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_762593_insecure_passwords_about_blank_web_console_warning.js => devtools/client/webconsole/test/browser_webconsole_bug_762593_insecure_passwords_about_blank_web_console_warning.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_762593_insecure_passwords_web_console_warning.js => devtools/client/webconsole/test/browser_webconsole_bug_762593_insecure_passwords_web_console_warning.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_764572_output_open_url.js => devtools/client/webconsole/test/browser_webconsole_bug_764572_output_open_url.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_766001_JS_Console_in_Debugger.js => devtools/client/webconsole/test/browser_webconsole_bug_766001_JS_Console_in_Debugger.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_770099_violation.js => devtools/client/webconsole/test/browser_webconsole_bug_770099_violation.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_782653_CSS_links_in_Style_Editor.js => devtools/client/webconsole/test/browser_webconsole_bug_782653_CSS_links_in_Style_Editor.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_804845_ctrl_key_nav.js => devtools/client/webconsole/test/browser_webconsole_bug_804845_ctrl_key_nav.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_817834_add_edited_input_to_history.js => devtools/client/webconsole/test/browser_webconsole_bug_817834_add_edited_input_to_history.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_837351_securityerrors.js => devtools/client/webconsole/test/browser_webconsole_bug_837351_securityerrors.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_915141_toggle_response_logging_with_keyboard.js => devtools/client/webconsole/test/browser_webconsole_bug_915141_toggle_response_logging_with_keyboard.js rename : browser/devtools/webconsole/test/browser_webconsole_bug_922212_console_dirxml.js => devtools/client/webconsole/test/browser_webconsole_bug_922212_console_dirxml.js rename : browser/devtools/webconsole/test/browser_webconsole_cached_autocomplete.js => devtools/client/webconsole/test/browser_webconsole_cached_autocomplete.js rename : browser/devtools/webconsole/test/browser_webconsole_cd_iframe.js => devtools/client/webconsole/test/browser_webconsole_cd_iframe.js rename : browser/devtools/webconsole/test/browser_webconsole_certificate_messages.js => devtools/client/webconsole/test/browser_webconsole_certificate_messages.js rename : browser/devtools/webconsole/test/browser_webconsole_change_font_size.js => devtools/client/webconsole/test/browser_webconsole_change_font_size.js rename : browser/devtools/webconsole/test/browser_webconsole_chrome.js => devtools/client/webconsole/test/browser_webconsole_chrome.js rename : browser/devtools/webconsole/test/browser_webconsole_clickable_urls.js => devtools/client/webconsole/test/browser_webconsole_clickable_urls.js rename : browser/devtools/webconsole/test/browser_webconsole_closure_inspection.js => devtools/client/webconsole/test/browser_webconsole_closure_inspection.js rename : browser/devtools/webconsole/test/browser_webconsole_column_numbers.js => devtools/client/webconsole/test/browser_webconsole_column_numbers.js rename : browser/devtools/webconsole/test/browser_webconsole_completion.js => devtools/client/webconsole/test/browser_webconsole_completion.js rename : browser/devtools/webconsole/test/browser_webconsole_console_api_stackframe.js => devtools/client/webconsole/test/browser_webconsole_console_api_stackframe.js rename : browser/devtools/webconsole/test/browser_webconsole_console_custom_styles.js => devtools/client/webconsole/test/browser_webconsole_console_custom_styles.js rename : browser/devtools/webconsole/test/browser_webconsole_console_extras.js => devtools/client/webconsole/test/browser_webconsole_console_extras.js rename : browser/devtools/webconsole/test/browser_webconsole_console_logging_api.js => devtools/client/webconsole/test/browser_webconsole_console_logging_api.js rename : browser/devtools/webconsole/test/browser_webconsole_console_logging_workers_api.js => devtools/client/webconsole/test/browser_webconsole_console_logging_workers_api.js rename : browser/devtools/webconsole/test/browser_webconsole_console_trace_duplicates.js => devtools/client/webconsole/test/browser_webconsole_console_trace_duplicates.js rename : browser/devtools/webconsole/test/browser_webconsole_context_menu_open_in_var_view.js => devtools/client/webconsole/test/browser_webconsole_context_menu_open_in_var_view.js rename : browser/devtools/webconsole/test/browser_webconsole_count.js => devtools/client/webconsole/test/browser_webconsole_count.js rename : browser/devtools/webconsole/test/browser_webconsole_dont_navigate_on_doubleclick.js => devtools/client/webconsole/test/browser_webconsole_dont_navigate_on_doubleclick.js rename : browser/devtools/webconsole/test/browser_webconsole_exception_stackframe.js => devtools/client/webconsole/test/browser_webconsole_exception_stackframe.js rename : browser/devtools/webconsole/test/browser_webconsole_execution_scope.js => devtools/client/webconsole/test/browser_webconsole_execution_scope.js rename : browser/devtools/webconsole/test/browser_webconsole_expandable_timestamps.js => devtools/client/webconsole/test/browser_webconsole_expandable_timestamps.js rename : browser/devtools/webconsole/test/browser_webconsole_filter_buttons_contextmenu.js => devtools/client/webconsole/test/browser_webconsole_filter_buttons_contextmenu.js rename : browser/devtools/webconsole/test/browser_webconsole_for_of.js => devtools/client/webconsole/test/browser_webconsole_for_of.js rename : browser/devtools/webconsole/test/browser_webconsole_history.js => devtools/client/webconsole/test/browser_webconsole_history.js rename : browser/devtools/webconsole/test/browser_webconsole_hpkp_invalid-headers.js => devtools/client/webconsole/test/browser_webconsole_hpkp_invalid-headers.js rename : browser/devtools/webconsole/test/browser_webconsole_hsts_invalid-headers.js => devtools/client/webconsole/test/browser_webconsole_hsts_invalid-headers.js rename : browser/devtools/webconsole/test/browser_webconsole_input_field_focus_on_panel_select.js => devtools/client/webconsole/test/browser_webconsole_input_field_focus_on_panel_select.js rename : browser/devtools/webconsole/test/browser_webconsole_inspect-parsed-documents.js => devtools/client/webconsole/test/browser_webconsole_inspect-parsed-documents.js rename : browser/devtools/webconsole/test/browser_webconsole_js_input_expansion.js => devtools/client/webconsole/test/browser_webconsole_js_input_expansion.js rename : browser/devtools/webconsole/test/browser_webconsole_jsterm.js => devtools/client/webconsole/test/browser_webconsole_jsterm.js rename : browser/devtools/webconsole/test/browser_webconsole_live_filtering_of_message_types.js => devtools/client/webconsole/test/browser_webconsole_live_filtering_of_message_types.js rename : browser/devtools/webconsole/test/browser_webconsole_live_filtering_on_search_strings.js => devtools/client/webconsole/test/browser_webconsole_live_filtering_on_search_strings.js rename : browser/devtools/webconsole/test/browser_webconsole_log_file_filter.js => devtools/client/webconsole/test/browser_webconsole_log_file_filter.js rename : browser/devtools/webconsole/test/browser_webconsole_message_node_id.js => devtools/client/webconsole/test/browser_webconsole_message_node_id.js rename : browser/devtools/webconsole/test/browser_webconsole_netlogging.js => devtools/client/webconsole/test/browser_webconsole_netlogging.js rename : browser/devtools/webconsole/test/browser_webconsole_netlogging_reset_filter.js => devtools/client/webconsole/test/browser_webconsole_netlogging_reset_filter.js rename : browser/devtools/webconsole/test/browser_webconsole_notifications.js => devtools/client/webconsole/test/browser_webconsole_notifications.js rename : browser/devtools/webconsole/test/browser_webconsole_open-links-without-callback.js => devtools/client/webconsole/test/browser_webconsole_open-links-without-callback.js rename : browser/devtools/webconsole/test/browser_webconsole_output_01.js => devtools/client/webconsole/test/browser_webconsole_output_01.js rename : browser/devtools/webconsole/test/browser_webconsole_output_02.js => devtools/client/webconsole/test/browser_webconsole_output_02.js rename : browser/devtools/webconsole/test/browser_webconsole_output_03.js => devtools/client/webconsole/test/browser_webconsole_output_03.js rename : browser/devtools/webconsole/test/browser_webconsole_output_04.js => devtools/client/webconsole/test/browser_webconsole_output_04.js rename : browser/devtools/webconsole/test/browser_webconsole_output_05.js => devtools/client/webconsole/test/browser_webconsole_output_05.js rename : browser/devtools/webconsole/test/browser_webconsole_output_06.js => devtools/client/webconsole/test/browser_webconsole_output_06.js rename : browser/devtools/webconsole/test/browser_webconsole_output_copy_newlines.js => devtools/client/webconsole/test/browser_webconsole_output_copy_newlines.js rename : browser/devtools/webconsole/test/browser_webconsole_output_dom_elements_01.js => devtools/client/webconsole/test/browser_webconsole_output_dom_elements_01.js rename : browser/devtools/webconsole/test/browser_webconsole_output_dom_elements_02.js => devtools/client/webconsole/test/browser_webconsole_output_dom_elements_02.js rename : browser/devtools/webconsole/test/browser_webconsole_output_dom_elements_03.js => devtools/client/webconsole/test/browser_webconsole_output_dom_elements_03.js rename : browser/devtools/webconsole/test/browser_webconsole_output_dom_elements_04.js => devtools/client/webconsole/test/browser_webconsole_output_dom_elements_04.js rename : browser/devtools/webconsole/test/browser_webconsole_output_events.js => devtools/client/webconsole/test/browser_webconsole_output_events.js rename : browser/devtools/webconsole/test/browser_webconsole_output_order.js => devtools/client/webconsole/test/browser_webconsole_output_order.js rename : browser/devtools/webconsole/test/browser_webconsole_output_regexp.js => devtools/client/webconsole/test/browser_webconsole_output_regexp.js rename : browser/devtools/webconsole/test/browser_webconsole_output_table.js => devtools/client/webconsole/test/browser_webconsole_output_table.js rename : browser/devtools/webconsole/test/browser_webconsole_promise.js => devtools/client/webconsole/test/browser_webconsole_promise.js rename : browser/devtools/webconsole/test/browser_webconsole_property_provider.js => devtools/client/webconsole/test/browser_webconsole_property_provider.js rename : browser/devtools/webconsole/test/browser_webconsole_reflow.js => devtools/client/webconsole/test/browser_webconsole_reflow.js rename : browser/devtools/webconsole/test/browser_webconsole_scratchpad_panel_link.js => devtools/client/webconsole/test/browser_webconsole_scratchpad_panel_link.js rename : browser/devtools/webconsole/test/browser_webconsole_show_subresource_security_errors.js => devtools/client/webconsole/test/browser_webconsole_show_subresource_security_errors.js rename : browser/devtools/webconsole/test/browser_webconsole_shows_reqs_in_netmonitor.js => devtools/client/webconsole/test/browser_webconsole_shows_reqs_in_netmonitor.js rename : browser/devtools/webconsole/test/browser_webconsole_split.js => devtools/client/webconsole/test/browser_webconsole_split.js rename : browser/devtools/webconsole/test/browser_webconsole_split_escape_key.js => devtools/client/webconsole/test/browser_webconsole_split_escape_key.js rename : browser/devtools/webconsole/test/browser_webconsole_split_focus.js => devtools/client/webconsole/test/browser_webconsole_split_focus.js rename : browser/devtools/webconsole/test/browser_webconsole_split_persist.js => devtools/client/webconsole/test/browser_webconsole_split_persist.js rename : browser/devtools/webconsole/test/browser_webconsole_start_netmon_first.js => devtools/client/webconsole/test/browser_webconsole_start_netmon_first.js rename : browser/devtools/webconsole/test/browser_webconsole_trackingprotection_errors.js => devtools/client/webconsole/test/browser_webconsole_trackingprotection_errors.js rename : browser/devtools/webconsole/test/browser_webconsole_view_source.js => devtools/client/webconsole/test/browser_webconsole_view_source.js rename : browser/devtools/webconsole/test/head.js => devtools/client/webconsole/test/head.js rename : browser/devtools/webconsole/test/test-autocomplete-in-stackframe.html => devtools/client/webconsole/test/test-autocomplete-in-stackframe.html rename : browser/devtools/webconsole/test/test-bug-585956-console-trace.html => devtools/client/webconsole/test/test-bug-585956-console-trace.html rename : browser/devtools/webconsole/test/test-bug-593003-iframe-wrong-hud-iframe.html => devtools/client/webconsole/test/test-bug-593003-iframe-wrong-hud-iframe.html rename : browser/devtools/webconsole/test/test-bug-593003-iframe-wrong-hud.html => devtools/client/webconsole/test/test-bug-593003-iframe-wrong-hud.html rename : browser/devtools/webconsole/test/test-bug-595934-canvas-css.html => devtools/client/webconsole/test/test-bug-595934-canvas-css.html rename : browser/devtools/webconsole/test/test-bug-595934-canvas-css.js => devtools/client/webconsole/test/test-bug-595934-canvas-css.js rename : browser/devtools/webconsole/test/test-bug-595934-css-loader.css => devtools/client/webconsole/test/test-bug-595934-css-loader.css rename : browser/devtools/webconsole/test/test-bug-595934-css-loader.css^headers^ => devtools/client/webconsole/test/test-bug-595934-css-loader.css^headers^ rename : browser/devtools/webconsole/test/test-bug-595934-css-loader.html => devtools/client/webconsole/test/test-bug-595934-css-loader.html rename : browser/devtools/webconsole/test/test-bug-595934-css-parser.css => devtools/client/webconsole/test/test-bug-595934-css-parser.css rename : browser/devtools/webconsole/test/test-bug-595934-css-parser.html => devtools/client/webconsole/test/test-bug-595934-css-parser.html rename : browser/devtools/webconsole/test/test-bug-595934-empty-getelementbyid.html => devtools/client/webconsole/test/test-bug-595934-empty-getelementbyid.html rename : browser/devtools/webconsole/test/test-bug-595934-empty-getelementbyid.js => devtools/client/webconsole/test/test-bug-595934-empty-getelementbyid.js rename : browser/devtools/webconsole/test/test-bug-595934-html.html => devtools/client/webconsole/test/test-bug-595934-html.html rename : browser/devtools/webconsole/test/test-bug-595934-image.html => devtools/client/webconsole/test/test-bug-595934-image.html rename : browser/devtools/webconsole/test/test-bug-595934-image.jpg => devtools/client/webconsole/test/test-bug-595934-image.jpg rename : browser/devtools/webconsole/test/test-bug-595934-imagemap.html => devtools/client/webconsole/test/test-bug-595934-imagemap.html rename : browser/devtools/webconsole/test/test-bug-595934-malformedxml-external.html => devtools/client/webconsole/test/test-bug-595934-malformedxml-external.html rename : browser/devtools/webconsole/test/test-bug-595934-malformedxml-external.xml => devtools/client/webconsole/test/test-bug-595934-malformedxml-external.xml rename : browser/devtools/webconsole/test/test-bug-595934-malformedxml.xhtml => devtools/client/webconsole/test/test-bug-595934-malformedxml.xhtml rename : browser/devtools/webconsole/test/test-bug-595934-svg.xhtml => devtools/client/webconsole/test/test-bug-595934-svg.xhtml rename : browser/devtools/webconsole/test/test-bug-595934-workers.html => devtools/client/webconsole/test/test-bug-595934-workers.html rename : browser/devtools/webconsole/test/test-bug-595934-workers.js => devtools/client/webconsole/test/test-bug-595934-workers.js rename : browser/devtools/webconsole/test/test-bug-597136-external-script-errors.html => devtools/client/webconsole/test/test-bug-597136-external-script-errors.html rename : browser/devtools/webconsole/test/test-bug-597136-external-script-errors.js => devtools/client/webconsole/test/test-bug-597136-external-script-errors.js rename : browser/devtools/webconsole/test/test-bug-597756-reopen-closed-tab.html => devtools/client/webconsole/test/test-bug-597756-reopen-closed-tab.html rename : browser/devtools/webconsole/test/test-bug-599725-response-headers.sjs => devtools/client/webconsole/test/test-bug-599725-response-headers.sjs rename : browser/devtools/webconsole/test/test-bug-600183-charset.html => devtools/client/webconsole/test/test-bug-600183-charset.html rename : browser/devtools/webconsole/test/test-bug-600183-charset.html^headers^ => devtools/client/webconsole/test/test-bug-600183-charset.html^headers^ rename : browser/devtools/webconsole/test/test-bug-601177-log-levels.html => devtools/client/webconsole/test/test-bug-601177-log-levels.html rename : browser/devtools/webconsole/test/test-bug-601177-log-levels.js => devtools/client/webconsole/test/test-bug-601177-log-levels.js rename : browser/devtools/webconsole/test/test-bug-603750-websocket.html => devtools/client/webconsole/test/test-bug-603750-websocket.html rename : browser/devtools/webconsole/test/test-bug-603750-websocket.js => devtools/client/webconsole/test/test-bug-603750-websocket.js rename : browser/devtools/webconsole/test/test-bug-609872-cd-iframe-child.html => devtools/client/webconsole/test/test-bug-609872-cd-iframe-child.html rename : browser/devtools/webconsole/test/test-bug-609872-cd-iframe-parent.html => devtools/client/webconsole/test/test-bug-609872-cd-iframe-parent.html rename : browser/devtools/webconsole/test/test-bug-613013-console-api-iframe.html => devtools/client/webconsole/test/test-bug-613013-console-api-iframe.html rename : browser/devtools/webconsole/test/test-bug-618078-network-exceptions.html => devtools/client/webconsole/test/test-bug-618078-network-exceptions.html rename : browser/devtools/webconsole/test/test-bug-621644-jsterm-dollar.html => devtools/client/webconsole/test/test-bug-621644-jsterm-dollar.html rename : browser/devtools/webconsole/test/test-bug-630733-response-redirect-headers.sjs => devtools/client/webconsole/test/test-bug-630733-response-redirect-headers.sjs rename : browser/devtools/webconsole/test/test-bug-632275-getters.html => devtools/client/webconsole/test/test-bug-632275-getters.html rename : browser/devtools/webconsole/test/test-bug-632347-iterators-generators.html => devtools/client/webconsole/test/test-bug-632347-iterators-generators.html rename : browser/devtools/webconsole/test/test-bug-644419-log-limits.html => devtools/client/webconsole/test/test-bug-644419-log-limits.html rename : browser/devtools/webconsole/test/test-bug-646025-console-file-location.html => devtools/client/webconsole/test/test-bug-646025-console-file-location.html rename : browser/devtools/webconsole/test/test-bug-658368-time-methods.html => devtools/client/webconsole/test/test-bug-658368-time-methods.html rename : browser/devtools/webconsole/test/test-bug-737873-mixedcontent.html => devtools/client/webconsole/test/test-bug-737873-mixedcontent.html rename : browser/devtools/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning-inner.html => devtools/client/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning-inner.html rename : browser/devtools/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning-nested1.html => devtools/client/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning-nested1.html rename : browser/devtools/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning-nested2.html => devtools/client/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning-nested2.html rename : browser/devtools/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning0.html => devtools/client/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning0.html rename : browser/devtools/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning1.html => devtools/client/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning1.html rename : browser/devtools/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning2.html => devtools/client/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning2.html rename : browser/devtools/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning3.html => devtools/client/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning3.html rename : browser/devtools/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning4.html => devtools/client/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning4.html rename : browser/devtools/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning5.html => devtools/client/webconsole/test/test-bug-752559-ineffective-iframe-sandbox-warning5.html rename : browser/devtools/webconsole/test/test-bug-762593-insecure-passwords-about-blank-web-console-warning.html => devtools/client/webconsole/test/test-bug-762593-insecure-passwords-about-blank-web-console-warning.html rename : browser/devtools/webconsole/test/test-bug-762593-insecure-passwords-web-console-warning.html => devtools/client/webconsole/test/test-bug-762593-insecure-passwords-web-console-warning.html rename : browser/devtools/webconsole/test/test-bug-766001-console-log.js => devtools/client/webconsole/test/test-bug-766001-console-log.js rename : browser/devtools/webconsole/test/test-bug-766001-js-console-links.html => devtools/client/webconsole/test/test-bug-766001-js-console-links.html rename : browser/devtools/webconsole/test/test-bug-766001-js-errors.js => devtools/client/webconsole/test/test-bug-766001-js-errors.js rename : browser/devtools/webconsole/test/test-bug-782653-css-errors-1.css => devtools/client/webconsole/test/test-bug-782653-css-errors-1.css rename : browser/devtools/webconsole/test/test-bug-782653-css-errors-2.css => devtools/client/webconsole/test/test-bug-782653-css-errors-2.css rename : browser/devtools/webconsole/test/test-bug-782653-css-errors.html => devtools/client/webconsole/test/test-bug-782653-css-errors.html rename : browser/devtools/webconsole/test/test-bug-837351-security-errors.html => devtools/client/webconsole/test/test-bug-837351-security-errors.html rename : browser/devtools/webconsole/test/test-bug-859170-longstring-hang.html => devtools/client/webconsole/test/test-bug-859170-longstring-hang.html rename : browser/devtools/webconsole/test/test-bug-869003-iframe.html => devtools/client/webconsole/test/test-bug-869003-iframe.html rename : browser/devtools/webconsole/test/test-bug-869003-top-window.html => devtools/client/webconsole/test/test-bug-869003-top-window.html rename : browser/devtools/webconsole/test/test-bug-952277-highlight-nodes-in-vview.html => devtools/client/webconsole/test/test-bug-952277-highlight-nodes-in-vview.html rename : browser/devtools/webconsole/test/test-bug-989025-iframe-parent.html => devtools/client/webconsole/test/test-bug-989025-iframe-parent.html rename : browser/devtools/webconsole/test/test-bug_1050691_click_function_to_source.html => devtools/client/webconsole/test/test-bug_1050691_click_function_to_source.html rename : browser/devtools/webconsole/test/test-bug_1050691_click_function_to_source.js => devtools/client/webconsole/test/test-bug_1050691_click_function_to_source.js rename : browser/devtools/webconsole/test/test-bug_923281_console_log_filter.html => devtools/client/webconsole/test/test-bug_923281_console_log_filter.html rename : browser/devtools/webconsole/test/test-bug_923281_test1.js => devtools/client/webconsole/test/test-bug_923281_test1.js rename : browser/devtools/webconsole/test/test-bug_923281_test2.js => devtools/client/webconsole/test/test-bug_923281_test2.js rename : browser/devtools/webconsole/test/test-bug_939783_console_trace_duplicates.html => devtools/client/webconsole/test/test-bug_939783_console_trace_duplicates.html rename : browser/devtools/webconsole/test/test-certificate-messages.html => devtools/client/webconsole/test/test-certificate-messages.html rename : browser/devtools/webconsole/test/test-closure-optimized-out.html => devtools/client/webconsole/test/test-closure-optimized-out.html rename : browser/devtools/webconsole/test/test-closures.html => devtools/client/webconsole/test/test-closures.html rename : browser/devtools/webconsole/test/test-console-api-stackframe.html => devtools/client/webconsole/test/test-console-api-stackframe.html rename : browser/devtools/webconsole/test/test-console-assert.html => devtools/client/webconsole/test/test-console-assert.html rename : browser/devtools/webconsole/test/test-console-column.html => devtools/client/webconsole/test/test-console-column.html rename : browser/devtools/webconsole/test/test-console-count-external-file.js => devtools/client/webconsole/test/test-console-count-external-file.js rename : browser/devtools/webconsole/test/test-console-count.html => devtools/client/webconsole/test/test-console-count.html rename : browser/devtools/webconsole/test/test-console-extras.html => devtools/client/webconsole/test/test-console-extras.html rename : browser/devtools/webconsole/test/test-console-output-02.html => devtools/client/webconsole/test/test-console-output-02.html rename : browser/devtools/webconsole/test/test-console-output-03.html => devtools/client/webconsole/test/test-console-output-03.html rename : browser/devtools/webconsole/test/test-console-output-04.html => devtools/client/webconsole/test/test-console-output-04.html rename : browser/devtools/webconsole/test/test-console-output-dom-elements.html => devtools/client/webconsole/test/test-console-output-dom-elements.html rename : browser/devtools/webconsole/test/test-console-output-events.html => devtools/client/webconsole/test/test-console-output-events.html rename : browser/devtools/webconsole/test/test-console-output-regexp.html => devtools/client/webconsole/test/test-console-output-regexp.html rename : browser/devtools/webconsole/test/test-console-replaced-api.html => devtools/client/webconsole/test/test-console-replaced-api.html rename : browser/devtools/webconsole/test/test-console-server-logging.sjs => devtools/client/webconsole/test/test-console-server-logging.sjs rename : browser/devtools/webconsole/test/test-console-table.html => devtools/client/webconsole/test/test-console-table.html rename : browser/devtools/webconsole/test/test-console-workers.html => devtools/client/webconsole/test/test-console-workers.html rename : browser/devtools/webconsole/test/test-console.html => devtools/client/webconsole/test/test-console.html rename : browser/devtools/webconsole/test/test-consoleiframes.html => devtools/client/webconsole/test/test-consoleiframes.html rename : browser/devtools/webconsole/test/test-data.json => devtools/client/webconsole/test/test-data.json rename : browser/devtools/webconsole/test/test-data.json^headers^ => devtools/client/webconsole/test/test-data.json^headers^ rename : browser/devtools/webconsole/test/test-duplicate-error.html => devtools/client/webconsole/test/test-duplicate-error.html rename : browser/devtools/webconsole/test/test-encoding-ISO-8859-1.html => devtools/client/webconsole/test/test-encoding-ISO-8859-1.html rename : browser/devtools/webconsole/test/test-error.html => devtools/client/webconsole/test/test-error.html rename : browser/devtools/webconsole/test/test-eval-in-stackframe.html => devtools/client/webconsole/test/test-eval-in-stackframe.html rename : browser/devtools/webconsole/test/test-exception-stackframe.html => devtools/client/webconsole/test/test-exception-stackframe.html rename : browser/devtools/webconsole/test/test-file-location.js => devtools/client/webconsole/test/test-file-location.js rename : browser/devtools/webconsole/test/test-filter.html => devtools/client/webconsole/test/test-filter.html rename : browser/devtools/webconsole/test/test-for-of.html => devtools/client/webconsole/test/test-for-of.html rename : browser/devtools/webconsole/test/test-iframe-762593-insecure-form-action.html => devtools/client/webconsole/test/test-iframe-762593-insecure-form-action.html rename : browser/devtools/webconsole/test/test-iframe-762593-insecure-frame.html => devtools/client/webconsole/test/test-iframe-762593-insecure-frame.html rename : browser/devtools/webconsole/test/test-iframe1.html => devtools/client/webconsole/test/test-iframe1.html rename : browser/devtools/webconsole/test/test-iframe2.html => devtools/client/webconsole/test/test-iframe2.html rename : browser/devtools/webconsole/test/test-iframe3.html => devtools/client/webconsole/test/test-iframe3.html rename : browser/devtools/webconsole/test/test-image.png => devtools/client/webconsole/test/test-image.png rename : browser/devtools/webconsole/test/test-mixedcontent-securityerrors.html => devtools/client/webconsole/test/test-mixedcontent-securityerrors.html rename : browser/devtools/webconsole/test/test-mutation.html => devtools/client/webconsole/test/test-mutation.html rename : browser/devtools/webconsole/test/test-network-request.html => devtools/client/webconsole/test/test-network-request.html rename : browser/devtools/webconsole/test/test-network.html => devtools/client/webconsole/test/test-network.html rename : browser/devtools/webconsole/test/test-observe-http-ajax.html => devtools/client/webconsole/test/test-observe-http-ajax.html rename : browser/devtools/webconsole/test/test-own-console.html => devtools/client/webconsole/test/test-own-console.html rename : browser/devtools/webconsole/test/test-property-provider.html => devtools/client/webconsole/test/test-property-provider.html rename : browser/devtools/webconsole/test/test-repeated-messages.html => devtools/client/webconsole/test/test-repeated-messages.html rename : browser/devtools/webconsole/test/test-result-format-as-string.html => devtools/client/webconsole/test/test-result-format-as-string.html rename : browser/devtools/webconsole/test/test-trackingprotection-securityerrors.html => devtools/client/webconsole/test/test-trackingprotection-securityerrors.html rename : browser/devtools/webconsole/test/test-webconsole-error-observer.html => devtools/client/webconsole/test/test-webconsole-error-observer.html rename : browser/devtools/webconsole/test/test_bug1045902_console_csp_ignore_reflected_xss_message.html => devtools/client/webconsole/test/test_bug1045902_console_csp_ignore_reflected_xss_message.html rename : browser/devtools/webconsole/test/test_bug1045902_console_csp_ignore_reflected_xss_message.html^headers^ => devtools/client/webconsole/test/test_bug1045902_console_csp_ignore_reflected_xss_message.html^headers^ rename : browser/devtools/webconsole/test/test_bug1092055_shouldwarn.html => devtools/client/webconsole/test/test_bug1092055_shouldwarn.html rename : browser/devtools/webconsole/test/test_bug1092055_shouldwarn.js => devtools/client/webconsole/test/test_bug1092055_shouldwarn.js rename : browser/devtools/webconsole/test/test_bug1092055_shouldwarn.js^headers^ => devtools/client/webconsole/test/test_bug1092055_shouldwarn.js^headers^ rename : browser/devtools/webconsole/test/test_bug_1010953_cspro.html => devtools/client/webconsole/test/test_bug_1010953_cspro.html rename : browser/devtools/webconsole/test/test_bug_1010953_cspro.html^headers^ => devtools/client/webconsole/test/test_bug_1010953_cspro.html^headers^ rename : browser/devtools/webconsole/test/test_bug_770099_violation.html => devtools/client/webconsole/test/test_bug_770099_violation.html rename : browser/devtools/webconsole/test/test_bug_770099_violation.html^headers^ => devtools/client/webconsole/test/test_bug_770099_violation.html^headers^ rename : browser/devtools/webconsole/test/test_hpkp-invalid-headers.sjs => devtools/client/webconsole/test/test_hpkp-invalid-headers.sjs rename : browser/devtools/webconsole/test/test_hsts-invalid-headers.sjs => devtools/client/webconsole/test/test_hsts-invalid-headers.sjs rename : browser/devtools/webconsole/test/testscript.js => devtools/client/webconsole/test/testscript.js rename : browser/devtools/webconsole/webconsole.js => devtools/client/webconsole/webconsole.js rename : browser/devtools/webconsole/webconsole.xul => devtools/client/webconsole/webconsole.xul rename : browser/devtools/webide/components/moz.build => devtools/client/webide/components/moz.build rename : browser/devtools/webide/components/webideCli.js => devtools/client/webide/components/webideCli.js rename : browser/devtools/webide/components/webideComponents.manifest => devtools/client/webide/components/webideComponents.manifest rename : browser/devtools/webide/content/addons.js => devtools/client/webide/content/addons.js rename : browser/devtools/webide/content/addons.xhtml => devtools/client/webide/content/addons.xhtml rename : browser/devtools/webide/content/details.js => devtools/client/webide/content/details.js rename : browser/devtools/webide/content/details.xhtml => devtools/client/webide/content/details.xhtml rename : browser/devtools/webide/content/devicepreferences.js => devtools/client/webide/content/devicepreferences.js rename : browser/devtools/webide/content/devicepreferences.xhtml => devtools/client/webide/content/devicepreferences.xhtml rename : browser/devtools/webide/content/devicesettings.js => devtools/client/webide/content/devicesettings.js rename : browser/devtools/webide/content/devicesettings.xhtml => devtools/client/webide/content/devicesettings.xhtml rename : browser/devtools/webide/content/jar.mn => devtools/client/webide/content/jar.mn rename : browser/devtools/webide/content/logs.js => devtools/client/webide/content/logs.js rename : browser/devtools/webide/content/logs.xhtml => devtools/client/webide/content/logs.xhtml rename : browser/devtools/webide/content/monitor.js => devtools/client/webide/content/monitor.js rename : browser/devtools/webide/content/monitor.xhtml => devtools/client/webide/content/monitor.xhtml rename : browser/devtools/webide/content/moz.build => devtools/client/webide/content/moz.build rename : browser/devtools/webide/content/newapp.js => devtools/client/webide/content/newapp.js rename : browser/devtools/webide/content/newapp.xul => devtools/client/webide/content/newapp.xul rename : browser/devtools/webide/content/permissionstable.js => devtools/client/webide/content/permissionstable.js rename : browser/devtools/webide/content/permissionstable.xhtml => devtools/client/webide/content/permissionstable.xhtml rename : browser/devtools/webide/content/prefs.js => devtools/client/webide/content/prefs.js rename : browser/devtools/webide/content/prefs.xhtml => devtools/client/webide/content/prefs.xhtml rename : browser/devtools/webide/content/project-listing.js => devtools/client/webide/content/project-listing.js rename : browser/devtools/webide/content/project-listing.xhtml => devtools/client/webide/content/project-listing.xhtml rename : browser/devtools/webide/content/project-panel.js => devtools/client/webide/content/project-panel.js rename : browser/devtools/webide/content/runtime-listing.js => devtools/client/webide/content/runtime-listing.js rename : browser/devtools/webide/content/runtime-listing.xhtml => devtools/client/webide/content/runtime-listing.xhtml rename : browser/devtools/webide/content/runtime-panel.js => devtools/client/webide/content/runtime-panel.js rename : browser/devtools/webide/content/runtimedetails.js => devtools/client/webide/content/runtimedetails.js rename : browser/devtools/webide/content/runtimedetails.xhtml => devtools/client/webide/content/runtimedetails.xhtml rename : browser/devtools/webide/content/simulator.js => devtools/client/webide/content/simulator.js rename : browser/devtools/webide/content/simulator.xhtml => devtools/client/webide/content/simulator.xhtml rename : browser/devtools/webide/content/webide.js => devtools/client/webide/content/webide.js rename : browser/devtools/webide/content/webide.xul => devtools/client/webide/content/webide.xul rename : browser/devtools/webide/content/wifi-auth.js => devtools/client/webide/content/wifi-auth.js rename : browser/devtools/webide/content/wifi-auth.xhtml => devtools/client/webide/content/wifi-auth.xhtml rename : browser/devtools/webide/modules/addons.js => devtools/client/webide/modules/addons.js rename : browser/devtools/webide/modules/app-manager.js => devtools/client/webide/modules/app-manager.js rename : browser/devtools/webide/modules/build.js => devtools/client/webide/modules/build.js rename : browser/devtools/webide/modules/config-view.js => devtools/client/webide/modules/config-view.js rename : browser/devtools/webide/modules/project-list.js => devtools/client/webide/modules/project-list.js rename : browser/devtools/webide/modules/runtime-list.js => devtools/client/webide/modules/runtime-list.js rename : browser/devtools/webide/modules/runtimes.js => devtools/client/webide/modules/runtimes.js rename : browser/devtools/webide/modules/simulator-process.js => devtools/client/webide/modules/simulator-process.js rename : browser/devtools/webide/modules/simulators.js => devtools/client/webide/modules/simulators.js rename : browser/devtools/webide/modules/tab-store.js => devtools/client/webide/modules/tab-store.js rename : browser/devtools/webide/modules/utils.js => devtools/client/webide/modules/utils.js rename : browser/devtools/webide/moz.build => devtools/client/webide/moz.build rename : browser/devtools/webide/test/.eslintrc => devtools/client/webide/test/.eslintrc rename : browser/devtools/webide/test/addons/adbhelper-linux.xpi => devtools/client/webide/test/addons/adbhelper-linux.xpi rename : browser/devtools/webide/test/addons/adbhelper-linux64.xpi => devtools/client/webide/test/addons/adbhelper-linux64.xpi rename : browser/devtools/webide/test/addons/adbhelper-mac64.xpi => devtools/client/webide/test/addons/adbhelper-mac64.xpi rename : browser/devtools/webide/test/addons/adbhelper-win32.xpi => devtools/client/webide/test/addons/adbhelper-win32.xpi rename : browser/devtools/webide/test/addons/fxdt-adapters-linux32.xpi => devtools/client/webide/test/addons/fxdt-adapters-linux32.xpi rename : browser/devtools/webide/test/addons/fxdt-adapters-linux64.xpi => devtools/client/webide/test/addons/fxdt-adapters-linux64.xpi rename : browser/devtools/webide/test/addons/fxdt-adapters-mac64.xpi => devtools/client/webide/test/addons/fxdt-adapters-mac64.xpi rename : browser/devtools/webide/test/addons/fxdt-adapters-win32.xpi => devtools/client/webide/test/addons/fxdt-adapters-win32.xpi rename : browser/devtools/webide/test/addons/fxos_1_0_simulator-linux.xpi => devtools/client/webide/test/addons/fxos_1_0_simulator-linux.xpi rename : browser/devtools/webide/test/addons/fxos_1_0_simulator-linux64.xpi => devtools/client/webide/test/addons/fxos_1_0_simulator-linux64.xpi rename : browser/devtools/webide/test/addons/fxos_1_0_simulator-mac64.xpi => devtools/client/webide/test/addons/fxos_1_0_simulator-mac64.xpi rename : browser/devtools/webide/test/addons/fxos_1_0_simulator-win32.xpi => devtools/client/webide/test/addons/fxos_1_0_simulator-win32.xpi rename : browser/devtools/webide/test/addons/fxos_2_0_simulator-linux.xpi => devtools/client/webide/test/addons/fxos_2_0_simulator-linux.xpi rename : browser/devtools/webide/test/addons/fxos_2_0_simulator-linux64.xpi => devtools/client/webide/test/addons/fxos_2_0_simulator-linux64.xpi rename : browser/devtools/webide/test/addons/fxos_2_0_simulator-mac64.xpi => devtools/client/webide/test/addons/fxos_2_0_simulator-mac64.xpi rename : browser/devtools/webide/test/addons/fxos_2_0_simulator-win32.xpi => devtools/client/webide/test/addons/fxos_2_0_simulator-win32.xpi rename : browser/devtools/webide/test/addons/fxos_3_0_simulator-linux.xpi => devtools/client/webide/test/addons/fxos_3_0_simulator-linux.xpi rename : browser/devtools/webide/test/addons/fxos_3_0_simulator-linux64.xpi => devtools/client/webide/test/addons/fxos_3_0_simulator-linux64.xpi rename : browser/devtools/webide/test/addons/fxos_3_0_simulator-mac64.xpi => devtools/client/webide/test/addons/fxos_3_0_simulator-mac64.xpi rename : browser/devtools/webide/test/addons/fxos_3_0_simulator-win32.xpi => devtools/client/webide/test/addons/fxos_3_0_simulator-win32.xpi rename : browser/devtools/webide/test/addons/simulators.json => devtools/client/webide/test/addons/simulators.json rename : browser/devtools/webide/test/app.zip => devtools/client/webide/test/app.zip rename : browser/devtools/webide/test/app/index.html => devtools/client/webide/test/app/index.html rename : browser/devtools/webide/test/app/manifest.webapp => devtools/client/webide/test/app/manifest.webapp rename : browser/devtools/webide/test/browser.ini => devtools/client/webide/test/browser.ini rename : browser/devtools/webide/test/browser_tabs.js => devtools/client/webide/test/browser_tabs.js rename : browser/devtools/webide/test/browser_widget.js => devtools/client/webide/test/browser_widget.js rename : browser/devtools/webide/test/build_app1/package.json => devtools/client/webide/test/build_app1/package.json rename : browser/devtools/webide/test/build_app2/manifest.webapp => devtools/client/webide/test/build_app2/manifest.webapp rename : browser/devtools/webide/test/build_app2/package.json => devtools/client/webide/test/build_app2/package.json rename : browser/devtools/webide/test/build_app2/stage/empty-directory => devtools/client/webide/test/build_app2/stage/empty-directory rename : browser/devtools/webide/test/build_app_windows1/package.json => devtools/client/webide/test/build_app_windows1/package.json rename : browser/devtools/webide/test/build_app_windows2/manifest.webapp => devtools/client/webide/test/build_app_windows2/manifest.webapp rename : browser/devtools/webide/test/build_app_windows2/package.json => devtools/client/webide/test/build_app_windows2/package.json rename : browser/devtools/webide/test/build_app_windows2/stage/empty-directory => devtools/client/webide/test/build_app_windows2/stage/empty-directory rename : browser/devtools/webide/test/chrome.ini => devtools/client/webide/test/chrome.ini rename : browser/devtools/webide/test/device_front_shared.js => devtools/client/webide/test/device_front_shared.js rename : browser/devtools/webide/test/doc_tabs.html => devtools/client/webide/test/doc_tabs.html rename : browser/devtools/webide/test/head.js => devtools/client/webide/test/head.js rename : browser/devtools/webide/test/hosted_app.manifest => devtools/client/webide/test/hosted_app.manifest rename : browser/devtools/webide/test/sidebars/browser.ini => devtools/client/webide/test/sidebars/browser.ini rename : browser/devtools/webide/test/sidebars/browser_tabs.js => devtools/client/webide/test/sidebars/browser_tabs.js rename : browser/devtools/webide/test/sidebars/chrome.ini => devtools/client/webide/test/sidebars/chrome.ini rename : browser/devtools/webide/test/sidebars/test_addons.html => devtools/client/webide/test/sidebars/test_addons.html rename : browser/devtools/webide/test/sidebars/test_autoconnect_runtime.html => devtools/client/webide/test/sidebars/test_autoconnect_runtime.html rename : browser/devtools/webide/test/sidebars/test_autoselect_project.html => devtools/client/webide/test/sidebars/test_autoselect_project.html rename : browser/devtools/webide/test/sidebars/test_device_permissions.html => devtools/client/webide/test/sidebars/test_device_permissions.html rename : browser/devtools/webide/test/sidebars/test_device_preferences.html => devtools/client/webide/test/sidebars/test_device_preferences.html rename : browser/devtools/webide/test/sidebars/test_device_runtime.html => devtools/client/webide/test/sidebars/test_device_runtime.html rename : browser/devtools/webide/test/sidebars/test_device_settings.html => devtools/client/webide/test/sidebars/test_device_settings.html rename : browser/devtools/webide/test/sidebars/test_duplicate_import.html => devtools/client/webide/test/sidebars/test_duplicate_import.html rename : browser/devtools/webide/test/sidebars/test_fullscreenToolbox.html => devtools/client/webide/test/sidebars/test_fullscreenToolbox.html rename : browser/devtools/webide/test/sidebars/test_import.html => devtools/client/webide/test/sidebars/test_import.html rename : browser/devtools/webide/test/sidebars/test_manifestUpdate.html => devtools/client/webide/test/sidebars/test_manifestUpdate.html rename : browser/devtools/webide/test/sidebars/test_newapp.html => devtools/client/webide/test/sidebars/test_newapp.html rename : browser/devtools/webide/test/sidebars/test_runtime.html => devtools/client/webide/test/sidebars/test_runtime.html rename : browser/devtools/webide/test/sidebars/test_telemetry.html => devtools/client/webide/test/sidebars/test_telemetry.html rename : browser/devtools/webide/test/templates.json => devtools/client/webide/test/templates.json rename : browser/devtools/webide/test/test_addons.html => devtools/client/webide/test/test_addons.html rename : browser/devtools/webide/test/test_autoconnect_runtime.html => devtools/client/webide/test/test_autoconnect_runtime.html rename : browser/devtools/webide/test/test_autoselect_project.html => devtools/client/webide/test/test_autoselect_project.html rename : browser/devtools/webide/test/test_basic.html => devtools/client/webide/test/test_basic.html rename : browser/devtools/webide/test/test_build.html => devtools/client/webide/test/test_build.html rename : browser/devtools/webide/test/test_device_permissions.html => devtools/client/webide/test/test_device_permissions.html rename : browser/devtools/webide/test/test_device_preferences.html => devtools/client/webide/test/test_device_preferences.html rename : browser/devtools/webide/test/test_device_runtime.html => devtools/client/webide/test/test_device_runtime.html rename : browser/devtools/webide/test/test_device_settings.html => devtools/client/webide/test/test_device_settings.html rename : browser/devtools/webide/test/test_duplicate_import.html => devtools/client/webide/test/test_duplicate_import.html rename : browser/devtools/webide/test/test_fullscreenToolbox.html => devtools/client/webide/test/test_fullscreenToolbox.html rename : browser/devtools/webide/test/test_import.html => devtools/client/webide/test/test_import.html rename : browser/devtools/webide/test/test_manifestUpdate.html => devtools/client/webide/test/test_manifestUpdate.html rename : browser/devtools/webide/test/test_newapp.html => devtools/client/webide/test/test_newapp.html rename : browser/devtools/webide/test/test_runtime.html => devtools/client/webide/test/test_runtime.html rename : browser/devtools/webide/test/test_simulators.html => devtools/client/webide/test/test_simulators.html rename : browser/devtools/webide/test/test_telemetry.html => devtools/client/webide/test/test_telemetry.html rename : browser/devtools/webide/test/test_zoom.html => devtools/client/webide/test/test_zoom.html rename : browser/devtools/webide/themes/addons.css => devtools/client/webide/themes/addons.css rename : browser/devtools/webide/themes/config-view.css => devtools/client/webide/themes/config-view.css rename : browser/devtools/webide/themes/deck.css => devtools/client/webide/themes/deck.css rename : browser/devtools/webide/themes/details.css => devtools/client/webide/themes/details.css rename : browser/devtools/webide/themes/icons.png => devtools/client/webide/themes/icons.png rename : browser/devtools/webide/themes/jar.mn => devtools/client/webide/themes/jar.mn rename : browser/devtools/webide/themes/logs.css => devtools/client/webide/themes/logs.css rename : browser/devtools/webide/themes/monitor.css => devtools/client/webide/themes/monitor.css rename : browser/devtools/webide/themes/moz.build => devtools/client/webide/themes/moz.build rename : browser/devtools/webide/themes/newapp.css => devtools/client/webide/themes/newapp.css rename : browser/devtools/webide/themes/panel-listing.css => devtools/client/webide/themes/panel-listing.css rename : browser/devtools/webide/themes/permissionstable.css => devtools/client/webide/themes/permissionstable.css rename : browser/devtools/webide/themes/runtimedetails.css => devtools/client/webide/themes/runtimedetails.css rename : browser/devtools/webide/themes/simulator.css => devtools/client/webide/themes/simulator.css rename : browser/devtools/webide/themes/throbber.svg => devtools/client/webide/themes/throbber.svg rename : browser/devtools/webide/themes/webide.css => devtools/client/webide/themes/webide.css rename : browser/devtools/webide/themes/wifi-auth.css => devtools/client/webide/themes/wifi-auth.css rename : browser/devtools/webide/webide-prefs.js => devtools/client/webide/webide-prefs.js rename : toolkit/devtools/server/actors/actor-registry.js => devtools/server/actors/actor-registry.js rename : toolkit/devtools/server/actors/addon.js => devtools/server/actors/addon.js rename : toolkit/devtools/server/actors/animation.js => devtools/server/actors/animation.js rename : toolkit/devtools/server/actors/call-watcher.js => devtools/server/actors/call-watcher.js rename : toolkit/devtools/server/actors/canvas.js => devtools/server/actors/canvas.js rename : toolkit/devtools/server/actors/child-process.js => devtools/server/actors/child-process.js rename : toolkit/devtools/server/actors/childtab.js => devtools/server/actors/childtab.js rename : toolkit/devtools/server/actors/chrome.js => devtools/server/actors/chrome.js rename : toolkit/devtools/server/actors/common.js => devtools/server/actors/common.js rename : toolkit/devtools/server/actors/csscoverage.js => devtools/server/actors/csscoverage.js rename : toolkit/devtools/server/actors/device.js => devtools/server/actors/device.js rename : toolkit/devtools/server/actors/director-manager.js => devtools/server/actors/director-manager.js rename : toolkit/devtools/server/actors/director-registry.js => devtools/server/actors/director-registry.js rename : toolkit/devtools/server/actors/eventlooplag.js => devtools/server/actors/eventlooplag.js rename : toolkit/devtools/server/actors/framerate.js => devtools/server/actors/framerate.js rename : toolkit/devtools/server/actors/gcli.js => devtools/server/actors/gcli.js rename : toolkit/devtools/server/actors/highlighters.css => devtools/server/actors/highlighters.css rename : toolkit/devtools/server/actors/highlighters.js => devtools/server/actors/highlighters.js rename : toolkit/devtools/server/actors/highlighters/auto-refresh.js => devtools/server/actors/highlighters/auto-refresh.js rename : toolkit/devtools/server/actors/highlighters/box-model.js => devtools/server/actors/highlighters/box-model.js rename : toolkit/devtools/server/actors/highlighters/css-transform.js => devtools/server/actors/highlighters/css-transform.js rename : toolkit/devtools/server/actors/highlighters/geometry-editor.js => devtools/server/actors/highlighters/geometry-editor.js rename : toolkit/devtools/server/actors/highlighters/rect.js => devtools/server/actors/highlighters/rect.js rename : toolkit/devtools/server/actors/highlighters/rulers.js => devtools/server/actors/highlighters/rulers.js rename : toolkit/devtools/server/actors/highlighters/selector.js => devtools/server/actors/highlighters/selector.js rename : toolkit/devtools/server/actors/highlighters/simple-outline.js => devtools/server/actors/highlighters/simple-outline.js rename : toolkit/devtools/server/actors/highlighters/utils/markup.js => devtools/server/actors/highlighters/utils/markup.js rename : toolkit/devtools/server/actors/inspector.js => devtools/server/actors/inspector.js rename : toolkit/devtools/server/actors/layout.js => devtools/server/actors/layout.js rename : toolkit/devtools/server/actors/memory.js => devtools/server/actors/memory.js rename : toolkit/devtools/server/actors/memprof.js => devtools/server/actors/memprof.js rename : toolkit/devtools/server/actors/monitor.js => devtools/server/actors/monitor.js rename : toolkit/devtools/server/actors/object.js => devtools/server/actors/object.js rename : toolkit/devtools/server/actors/performance-entries.js => devtools/server/actors/performance-entries.js rename : toolkit/devtools/server/actors/performance-recording.js => devtools/server/actors/performance-recording.js rename : toolkit/devtools/server/actors/performance.js => devtools/server/actors/performance.js rename : toolkit/devtools/server/actors/preference.js => devtools/server/actors/preference.js rename : toolkit/devtools/server/actors/pretty-print-worker.js => devtools/server/actors/pretty-print-worker.js rename : toolkit/devtools/server/actors/profiler.js => devtools/server/actors/profiler.js rename : toolkit/devtools/server/actors/promises.js => devtools/server/actors/promises.js rename : toolkit/devtools/server/actors/root.js => devtools/server/actors/root.js rename : toolkit/devtools/server/actors/script.js => devtools/server/actors/script.js rename : toolkit/devtools/server/actors/settings.js => devtools/server/actors/settings.js rename : toolkit/devtools/server/actors/storage.js => devtools/server/actors/storage.js rename : toolkit/devtools/server/actors/string.js => devtools/server/actors/string.js rename : toolkit/devtools/server/actors/styleeditor.js => devtools/server/actors/styleeditor.js rename : toolkit/devtools/server/actors/styles.js => devtools/server/actors/styles.js rename : toolkit/devtools/server/actors/stylesheets.js => devtools/server/actors/stylesheets.js rename : toolkit/devtools/server/actors/timeline.js => devtools/server/actors/timeline.js rename : toolkit/devtools/server/actors/utils/ScriptStore.js => devtools/server/actors/utils/ScriptStore.js rename : toolkit/devtools/server/actors/utils/TabSources.js => devtools/server/actors/utils/TabSources.js rename : toolkit/devtools/server/actors/utils/actor-registry-utils.js => devtools/server/actors/utils/actor-registry-utils.js rename : toolkit/devtools/server/actors/utils/audionodes.json => devtools/server/actors/utils/audionodes.json rename : toolkit/devtools/server/actors/utils/automation-timeline.js => devtools/server/actors/utils/automation-timeline.js rename : toolkit/devtools/server/actors/utils/make-debugger.js => devtools/server/actors/utils/make-debugger.js rename : toolkit/devtools/server/actors/utils/map-uri-to-addon-id.js => devtools/server/actors/utils/map-uri-to-addon-id.js rename : toolkit/devtools/server/actors/utils/stack.js => devtools/server/actors/utils/stack.js rename : toolkit/devtools/server/actors/webapps.js => devtools/server/actors/webapps.js rename : toolkit/devtools/server/actors/webaudio.js => devtools/server/actors/webaudio.js rename : toolkit/devtools/server/actors/webbrowser.js => devtools/server/actors/webbrowser.js rename : toolkit/devtools/server/actors/webconsole.js => devtools/server/actors/webconsole.js rename : toolkit/devtools/server/actors/webgl.js => devtools/server/actors/webgl.js rename : toolkit/devtools/server/actors/worker.js => devtools/server/actors/worker.js rename : toolkit/devtools/server/child.js => devtools/server/child.js rename : toolkit/devtools/server/content-globals.js => devtools/server/content-globals.js rename : toolkit/devtools/server/content-server.jsm => devtools/server/content-server.jsm rename : toolkit/devtools/server/dbg-server.jsm => devtools/server/dbg-server.jsm rename : toolkit/devtools/server/docs/actor-e10s-handling.md => devtools/server/docs/actor-e10s-handling.md rename : toolkit/devtools/server/docs/actor-hierarchy.md => devtools/server/docs/actor-hierarchy.md rename : toolkit/devtools/server/docs/actor-registration.md => devtools/server/docs/actor-registration.md rename : toolkit/devtools/server/docs/protocol.js.md => devtools/server/docs/protocol.js.md rename : toolkit/devtools/server/main.js => devtools/server/main.js rename : toolkit/devtools/server/moz.build => devtools/server/moz.build rename : toolkit/devtools/server/nsIJSInspector.idl => devtools/server/nsIJSInspector.idl rename : toolkit/devtools/server/nsJSInspector.cpp => devtools/server/nsJSInspector.cpp rename : toolkit/devtools/server/nsJSInspector.h => devtools/server/nsJSInspector.h rename : toolkit/devtools/server/protocol.js => devtools/server/protocol.js rename : toolkit/devtools/server/tests/browser/.eslintrc => devtools/server/tests/browser/.eslintrc rename : toolkit/devtools/server/tests/browser/animation.html => devtools/server/tests/browser/animation.html rename : toolkit/devtools/server/tests/browser/browser.ini => devtools/server/tests/browser/browser.ini rename : toolkit/devtools/server/tests/browser/browser_animation_actors_01.js => devtools/server/tests/browser/browser_animation_actors_01.js rename : toolkit/devtools/server/tests/browser/browser_animation_actors_02.js => devtools/server/tests/browser/browser_animation_actors_02.js rename : toolkit/devtools/server/tests/browser/browser_animation_actors_03.js => devtools/server/tests/browser/browser_animation_actors_03.js rename : toolkit/devtools/server/tests/browser/browser_animation_actors_04.js => devtools/server/tests/browser/browser_animation_actors_04.js rename : toolkit/devtools/server/tests/browser/browser_animation_actors_06.js => devtools/server/tests/browser/browser_animation_actors_06.js rename : toolkit/devtools/server/tests/browser/browser_animation_actors_07.js => devtools/server/tests/browser/browser_animation_actors_07.js rename : toolkit/devtools/server/tests/browser/browser_animation_actors_08.js => devtools/server/tests/browser/browser_animation_actors_08.js rename : toolkit/devtools/server/tests/browser/browser_animation_actors_09.js => devtools/server/tests/browser/browser_animation_actors_09.js rename : toolkit/devtools/server/tests/browser/browser_animation_actors_10.js => devtools/server/tests/browser/browser_animation_actors_10.js rename : toolkit/devtools/server/tests/browser/browser_animation_actors_11.js => devtools/server/tests/browser/browser_animation_actors_11.js rename : toolkit/devtools/server/tests/browser/browser_animation_actors_12.js => devtools/server/tests/browser/browser_animation_actors_12.js rename : toolkit/devtools/server/tests/browser/browser_animation_actors_13.js => devtools/server/tests/browser/browser_animation_actors_13.js rename : toolkit/devtools/server/tests/browser/browser_animation_actors_14.js => devtools/server/tests/browser/browser_animation_actors_14.js rename : toolkit/devtools/server/tests/browser/browser_animation_actors_15.js => devtools/server/tests/browser/browser_animation_actors_15.js rename : toolkit/devtools/server/tests/browser/browser_animation_actors_16.js => devtools/server/tests/browser/browser_animation_actors_16.js rename : toolkit/devtools/server/tests/browser/browser_canvasframe_helper_01.js => devtools/server/tests/browser/browser_canvasframe_helper_01.js rename : toolkit/devtools/server/tests/browser/browser_canvasframe_helper_02.js => devtools/server/tests/browser/browser_canvasframe_helper_02.js rename : toolkit/devtools/server/tests/browser/browser_canvasframe_helper_03.js => devtools/server/tests/browser/browser_canvasframe_helper_03.js rename : toolkit/devtools/server/tests/browser/browser_canvasframe_helper_04.js => devtools/server/tests/browser/browser_canvasframe_helper_04.js rename : toolkit/devtools/server/tests/browser/browser_canvasframe_helper_05.js => devtools/server/tests/browser/browser_canvasframe_helper_05.js rename : toolkit/devtools/server/tests/browser/browser_canvasframe_helper_06.js => devtools/server/tests/browser/browser_canvasframe_helper_06.js rename : toolkit/devtools/server/tests/browser/browser_directorscript_actors.js => devtools/server/tests/browser/browser_directorscript_actors.js rename : toolkit/devtools/server/tests/browser/browser_directorscript_actors_error_events.js => devtools/server/tests/browser/browser_directorscript_actors_error_events.js rename : toolkit/devtools/server/tests/browser/browser_directorscript_actors_exports.js => devtools/server/tests/browser/browser_directorscript_actors_exports.js rename : toolkit/devtools/server/tests/browser/browser_markers-cycle-collection.js => devtools/server/tests/browser/browser_markers-cycle-collection.js rename : toolkit/devtools/server/tests/browser/browser_markers-gc.js => devtools/server/tests/browser/browser_markers-gc.js rename : toolkit/devtools/server/tests/browser/browser_markers-parse-html.js => devtools/server/tests/browser/browser_markers-parse-html.js rename : toolkit/devtools/server/tests/browser/browser_markers-styles.js => devtools/server/tests/browser/browser_markers-styles.js rename : toolkit/devtools/server/tests/browser/browser_markers-timestamp.js => devtools/server/tests/browser/browser_markers-timestamp.js rename : toolkit/devtools/server/tests/browser/browser_navigateEvents.js => devtools/server/tests/browser/browser_navigateEvents.js rename : toolkit/devtools/server/tests/browser/browser_perf-allocation-data.js => devtools/server/tests/browser/browser_perf-allocation-data.js rename : toolkit/devtools/server/tests/browser/browser_perf-legacy-front-01.js => devtools/server/tests/browser/browser_perf-legacy-front-01.js rename : toolkit/devtools/server/tests/browser/browser_perf-legacy-front-02.js => devtools/server/tests/browser/browser_perf-legacy-front-02.js rename : toolkit/devtools/server/tests/browser/browser_perf-legacy-front-03.js => devtools/server/tests/browser/browser_perf-legacy-front-03.js rename : toolkit/devtools/server/tests/browser/browser_perf-profiler-01.js => devtools/server/tests/browser/browser_perf-profiler-01.js rename : toolkit/devtools/server/tests/browser/browser_perf-profiler-02.js => devtools/server/tests/browser/browser_perf-profiler-02.js rename : toolkit/devtools/server/tests/browser/browser_perf-profiler-03.js => devtools/server/tests/browser/browser_perf-profiler-03.js rename : toolkit/devtools/server/tests/browser/browser_perf-realtime-markers.js => devtools/server/tests/browser/browser_perf-realtime-markers.js rename : toolkit/devtools/server/tests/browser/browser_perf-recording-actor-01.js => devtools/server/tests/browser/browser_perf-recording-actor-01.js rename : toolkit/devtools/server/tests/browser/browser_perf-recording-actor-02.js => devtools/server/tests/browser/browser_perf-recording-actor-02.js rename : toolkit/devtools/server/tests/browser/browser_perf-samples-01.js => devtools/server/tests/browser/browser_perf-samples-01.js rename : toolkit/devtools/server/tests/browser/browser_perf-samples-02.js => devtools/server/tests/browser/browser_perf-samples-02.js rename : toolkit/devtools/server/tests/browser/browser_storage_dynamic_windows.js => devtools/server/tests/browser/browser_storage_dynamic_windows.js rename : toolkit/devtools/server/tests/browser/browser_storage_listings.js => devtools/server/tests/browser/browser_storage_listings.js rename : toolkit/devtools/server/tests/browser/browser_storage_updates.js => devtools/server/tests/browser/browser_storage_updates.js rename : toolkit/devtools/server/tests/browser/browser_stylesheets_nested-iframes.js => devtools/server/tests/browser/browser_stylesheets_nested-iframes.js rename : toolkit/devtools/server/tests/browser/browser_timeline.js => devtools/server/tests/browser/browser_timeline.js rename : toolkit/devtools/server/tests/browser/browser_timeline_actors.js => devtools/server/tests/browser/browser_timeline_actors.js rename : toolkit/devtools/server/tests/browser/browser_timeline_iframes.js => devtools/server/tests/browser/browser_timeline_iframes.js rename : toolkit/devtools/server/tests/browser/director-script-target.html => devtools/server/tests/browser/director-script-target.html rename : toolkit/devtools/server/tests/browser/doc_allocations.html => devtools/server/tests/browser/doc_allocations.html rename : toolkit/devtools/server/tests/browser/doc_force_cc.html => devtools/server/tests/browser/doc_force_cc.html rename : toolkit/devtools/server/tests/browser/doc_force_gc.html => devtools/server/tests/browser/doc_force_gc.html rename : toolkit/devtools/server/tests/browser/doc_innerHTML.html => devtools/server/tests/browser/doc_innerHTML.html rename : toolkit/devtools/server/tests/browser/doc_perf.html => devtools/server/tests/browser/doc_perf.html rename : toolkit/devtools/server/tests/browser/head.js => devtools/server/tests/browser/head.js rename : toolkit/devtools/server/tests/browser/navigate-first.html => devtools/server/tests/browser/navigate-first.html rename : toolkit/devtools/server/tests/browser/navigate-second.html => devtools/server/tests/browser/navigate-second.html rename : toolkit/devtools/server/tests/browser/storage-dynamic-windows.html => devtools/server/tests/browser/storage-dynamic-windows.html rename : toolkit/devtools/server/tests/browser/storage-listings.html => devtools/server/tests/browser/storage-listings.html rename : toolkit/devtools/server/tests/browser/storage-secured-iframe.html => devtools/server/tests/browser/storage-secured-iframe.html rename : toolkit/devtools/server/tests/browser/storage-unsecured-iframe.html => devtools/server/tests/browser/storage-unsecured-iframe.html rename : toolkit/devtools/server/tests/browser/storage-updates.html => devtools/server/tests/browser/storage-updates.html rename : toolkit/devtools/server/tests/browser/stylesheets-nested-iframes.html => devtools/server/tests/browser/stylesheets-nested-iframes.html rename : toolkit/devtools/server/tests/browser/timeline-iframe-child.html => devtools/server/tests/browser/timeline-iframe-child.html rename : toolkit/devtools/server/tests/browser/timeline-iframe-parent.html => devtools/server/tests/browser/timeline-iframe-parent.html rename : toolkit/devtools/server/tests/mochitest/.eslintrc => devtools/server/tests/mochitest/.eslintrc rename : toolkit/devtools/server/tests/mochitest/Debugger.Source.prototype.element-2.js => devtools/server/tests/mochitest/Debugger.Source.prototype.element-2.js rename : toolkit/devtools/server/tests/mochitest/Debugger.Source.prototype.element.html => devtools/server/tests/mochitest/Debugger.Source.prototype.element.html rename : toolkit/devtools/server/tests/mochitest/Debugger.Source.prototype.element.js => devtools/server/tests/mochitest/Debugger.Source.prototype.element.js rename : toolkit/devtools/server/tests/mochitest/chrome.ini => devtools/server/tests/mochitest/chrome.ini rename : toolkit/devtools/server/tests/mochitest/director-helpers.js => devtools/server/tests/mochitest/director-helpers.js rename : toolkit/devtools/server/tests/mochitest/hello-actor.js => devtools/server/tests/mochitest/hello-actor.js rename : toolkit/devtools/server/tests/mochitest/inspector-delay-image-response.sjs => devtools/server/tests/mochitest/inspector-delay-image-response.sjs rename : toolkit/devtools/server/tests/mochitest/inspector-helpers.js => devtools/server/tests/mochitest/inspector-helpers.js rename : toolkit/devtools/server/tests/mochitest/inspector-styles-data.css => devtools/server/tests/mochitest/inspector-styles-data.css rename : toolkit/devtools/server/tests/mochitest/inspector-styles-data.html => devtools/server/tests/mochitest/inspector-styles-data.html rename : toolkit/devtools/server/tests/mochitest/inspector-traversal-data.html => devtools/server/tests/mochitest/inspector-traversal-data.html rename : toolkit/devtools/server/tests/mochitest/inspector_getImageData.html => devtools/server/tests/mochitest/inspector_getImageData.html rename : toolkit/devtools/server/tests/mochitest/large-image.jpg => devtools/server/tests/mochitest/large-image.jpg rename : toolkit/devtools/server/tests/mochitest/memory-helpers.js => devtools/server/tests/mochitest/memory-helpers.js rename : toolkit/devtools/server/tests/mochitest/memprof-helpers.js => devtools/server/tests/mochitest/memprof-helpers.js rename : toolkit/devtools/server/tests/mochitest/nonchrome_unsafeDereference.html => devtools/server/tests/mochitest/nonchrome_unsafeDereference.html rename : toolkit/devtools/server/tests/mochitest/setup-in-child.js => devtools/server/tests/mochitest/setup-in-child.js rename : toolkit/devtools/server/tests/mochitest/setup-in-parent.js => devtools/server/tests/mochitest/setup-in-parent.js rename : toolkit/devtools/server/tests/mochitest/small-image.gif => devtools/server/tests/mochitest/small-image.gif rename : toolkit/devtools/server/tests/mochitest/test_Debugger.Script.prototype.global.html => devtools/server/tests/mochitest/test_Debugger.Script.prototype.global.html rename : toolkit/devtools/server/tests/mochitest/test_Debugger.Source.prototype.element.html => devtools/server/tests/mochitest/test_Debugger.Source.prototype.element.html rename : toolkit/devtools/server/tests/mochitest/test_Debugger.Source.prototype.introductionScript.html => devtools/server/tests/mochitest/test_Debugger.Source.prototype.introductionScript.html rename : toolkit/devtools/server/tests/mochitest/test_Debugger.Source.prototype.introductionType.html => devtools/server/tests/mochitest/test_Debugger.Source.prototype.introductionType.html rename : toolkit/devtools/server/tests/mochitest/test_connectToChild.html => devtools/server/tests/mochitest/test_connectToChild.html rename : toolkit/devtools/server/tests/mochitest/test_connection-manager.html => devtools/server/tests/mochitest/test_connection-manager.html rename : toolkit/devtools/server/tests/mochitest/test_css-logic-inheritance.html => devtools/server/tests/mochitest/test_css-logic-inheritance.html rename : toolkit/devtools/server/tests/mochitest/test_css-logic-media-queries.html => devtools/server/tests/mochitest/test_css-logic-media-queries.html rename : toolkit/devtools/server/tests/mochitest/test_css-logic-specificity.html => devtools/server/tests/mochitest/test_css-logic-specificity.html rename : toolkit/devtools/server/tests/mochitest/test_css-logic.html => devtools/server/tests/mochitest/test_css-logic.html rename : toolkit/devtools/server/tests/mochitest/test_device.html => devtools/server/tests/mochitest/test_device.html rename : toolkit/devtools/server/tests/mochitest/test_director.html => devtools/server/tests/mochitest/test_director.html rename : toolkit/devtools/server/tests/mochitest/test_director_connectToChild.html => devtools/server/tests/mochitest/test_director_connectToChild.html rename : toolkit/devtools/server/tests/mochitest/test_executeInGlobal-outerized_this.html => devtools/server/tests/mochitest/test_executeInGlobal-outerized_this.html rename : toolkit/devtools/server/tests/mochitest/test_framerate_01.html => devtools/server/tests/mochitest/test_framerate_01.html rename : toolkit/devtools/server/tests/mochitest/test_framerate_02.html => devtools/server/tests/mochitest/test_framerate_02.html rename : toolkit/devtools/server/tests/mochitest/test_framerate_03.html => devtools/server/tests/mochitest/test_framerate_03.html rename : toolkit/devtools/server/tests/mochitest/test_framerate_04.html => devtools/server/tests/mochitest/test_framerate_04.html rename : toolkit/devtools/server/tests/mochitest/test_framerate_05.html => devtools/server/tests/mochitest/test_framerate_05.html rename : toolkit/devtools/server/tests/mochitest/test_framerate_06.html => devtools/server/tests/mochitest/test_framerate_06.html rename : toolkit/devtools/server/tests/mochitest/test_getProcess.html => devtools/server/tests/mochitest/test_getProcess.html rename : toolkit/devtools/server/tests/mochitest/test_inspector-anonymous.html => devtools/server/tests/mochitest/test_inspector-anonymous.html rename : toolkit/devtools/server/tests/mochitest/test_inspector-changeattrs.html => devtools/server/tests/mochitest/test_inspector-changeattrs.html rename : toolkit/devtools/server/tests/mochitest/test_inspector-changevalue.html => devtools/server/tests/mochitest/test_inspector-changevalue.html rename : toolkit/devtools/server/tests/mochitest/test_inspector-dead-nodes.html => devtools/server/tests/mochitest/test_inspector-dead-nodes.html rename : toolkit/devtools/server/tests/mochitest/test_inspector-hide.html => devtools/server/tests/mochitest/test_inspector-hide.html rename : toolkit/devtools/server/tests/mochitest/test_inspector-insert.html => devtools/server/tests/mochitest/test_inspector-insert.html rename : toolkit/devtools/server/tests/mochitest/test_inspector-mutations-attr.html => devtools/server/tests/mochitest/test_inspector-mutations-attr.html rename : toolkit/devtools/server/tests/mochitest/test_inspector-mutations-childlist.html => devtools/server/tests/mochitest/test_inspector-mutations-childlist.html rename : toolkit/devtools/server/tests/mochitest/test_inspector-mutations-frameload.html => devtools/server/tests/mochitest/test_inspector-mutations-frameload.html rename : toolkit/devtools/server/tests/mochitest/test_inspector-mutations-value.html => devtools/server/tests/mochitest/test_inspector-mutations-value.html rename : toolkit/devtools/server/tests/mochitest/test_inspector-pseudoclass-lock.html => devtools/server/tests/mochitest/test_inspector-pseudoclass-lock.html rename : toolkit/devtools/server/tests/mochitest/test_inspector-release.html => devtools/server/tests/mochitest/test_inspector-release.html rename : toolkit/devtools/server/tests/mochitest/test_inspector-reload.html => devtools/server/tests/mochitest/test_inspector-reload.html rename : toolkit/devtools/server/tests/mochitest/test_inspector-remove.html => devtools/server/tests/mochitest/test_inspector-remove.html rename : toolkit/devtools/server/tests/mochitest/test_inspector-resolve-url.html => devtools/server/tests/mochitest/test_inspector-resolve-url.html rename : toolkit/devtools/server/tests/mochitest/test_inspector-retain.html => devtools/server/tests/mochitest/test_inspector-retain.html rename : toolkit/devtools/server/tests/mochitest/test_inspector-scroll-into-view.html => devtools/server/tests/mochitest/test_inspector-scroll-into-view.html rename : toolkit/devtools/server/tests/mochitest/test_inspector-traversal.html => devtools/server/tests/mochitest/test_inspector-traversal.html rename : toolkit/devtools/server/tests/mochitest/test_inspector_getImageData-wait-for-load.html => devtools/server/tests/mochitest/test_inspector_getImageData-wait-for-load.html rename : toolkit/devtools/server/tests/mochitest/test_inspector_getImageData.html => devtools/server/tests/mochitest/test_inspector_getImageData.html rename : toolkit/devtools/server/tests/mochitest/test_inspector_getImageDataFromURL.html => devtools/server/tests/mochitest/test_inspector_getImageDataFromURL.html rename : toolkit/devtools/server/tests/mochitest/test_inspector_getNodeFromActor.html => devtools/server/tests/mochitest/test_inspector_getNodeFromActor.html rename : toolkit/devtools/server/tests/mochitest/test_makeGlobalObjectReference.html => devtools/server/tests/mochitest/test_makeGlobalObjectReference.html rename : toolkit/devtools/server/tests/mochitest/test_memory.html => devtools/server/tests/mochitest/test_memory.html rename : toolkit/devtools/server/tests/mochitest/test_memory_allocations_01.html => devtools/server/tests/mochitest/test_memory_allocations_01.html rename : toolkit/devtools/server/tests/mochitest/test_memory_allocations_02.html => devtools/server/tests/mochitest/test_memory_allocations_02.html rename : toolkit/devtools/server/tests/mochitest/test_memory_allocations_03.html => devtools/server/tests/mochitest/test_memory_allocations_03.html rename : toolkit/devtools/server/tests/mochitest/test_memory_allocations_04.html => devtools/server/tests/mochitest/test_memory_allocations_04.html rename : toolkit/devtools/server/tests/mochitest/test_memory_allocations_05.html => devtools/server/tests/mochitest/test_memory_allocations_05.html rename : toolkit/devtools/server/tests/mochitest/test_memory_allocations_06.html => devtools/server/tests/mochitest/test_memory_allocations_06.html rename : toolkit/devtools/server/tests/mochitest/test_memory_allocations_07.html => devtools/server/tests/mochitest/test_memory_allocations_07.html rename : toolkit/devtools/server/tests/mochitest/test_memory_attach_01.html => devtools/server/tests/mochitest/test_memory_attach_01.html rename : toolkit/devtools/server/tests/mochitest/test_memory_attach_02.html => devtools/server/tests/mochitest/test_memory_attach_02.html rename : toolkit/devtools/server/tests/mochitest/test_memory_census.html => devtools/server/tests/mochitest/test_memory_census.html rename : toolkit/devtools/server/tests/mochitest/test_memory_gc_01.html => devtools/server/tests/mochitest/test_memory_gc_01.html rename : toolkit/devtools/server/tests/mochitest/test_memory_gc_events.html => devtools/server/tests/mochitest/test_memory_gc_events.html rename : toolkit/devtools/server/tests/mochitest/test_memprof.html => devtools/server/tests/mochitest/test_memprof.html rename : toolkit/devtools/server/tests/mochitest/test_preference.html => devtools/server/tests/mochitest/test_preference.html rename : toolkit/devtools/server/tests/mochitest/test_registerActor.html => devtools/server/tests/mochitest/test_registerActor.html rename : toolkit/devtools/server/tests/mochitest/test_settings.html => devtools/server/tests/mochitest/test_settings.html rename : toolkit/devtools/server/tests/mochitest/test_setupInParentChild.html => devtools/server/tests/mochitest/test_setupInParentChild.html rename : toolkit/devtools/server/tests/mochitest/test_styles-applied.html => devtools/server/tests/mochitest/test_styles-applied.html rename : toolkit/devtools/server/tests/mochitest/test_styles-computed.html => devtools/server/tests/mochitest/test_styles-computed.html rename : toolkit/devtools/server/tests/mochitest/test_styles-layout.html => devtools/server/tests/mochitest/test_styles-layout.html rename : toolkit/devtools/server/tests/mochitest/test_styles-matched.html => devtools/server/tests/mochitest/test_styles-matched.html rename : toolkit/devtools/server/tests/mochitest/test_styles-modify.html => devtools/server/tests/mochitest/test_styles-modify.html rename : toolkit/devtools/server/tests/mochitest/test_styles-svg.html => devtools/server/tests/mochitest/test_styles-svg.html rename : toolkit/devtools/server/tests/mochitest/test_unsafeDereference.html => devtools/server/tests/mochitest/test_unsafeDereference.html rename : toolkit/devtools/server/tests/unit/.eslintrc => devtools/server/tests/unit/.eslintrc rename : toolkit/devtools/server/tests/unit/babel_and_browserify_script_with_source_map.js => devtools/server/tests/unit/babel_and_browserify_script_with_source_map.js rename : toolkit/devtools/server/tests/unit/head_dbg.js => devtools/server/tests/unit/head_dbg.js rename : toolkit/devtools/server/tests/unit/hello-actor.js => devtools/server/tests/unit/hello-actor.js rename : toolkit/devtools/server/tests/unit/post_init_global_actors.js => devtools/server/tests/unit/post_init_global_actors.js rename : toolkit/devtools/server/tests/unit/post_init_tab_actors.js => devtools/server/tests/unit/post_init_tab_actors.js rename : toolkit/devtools/server/tests/unit/pre_init_global_actors.js => devtools/server/tests/unit/pre_init_global_actors.js rename : toolkit/devtools/server/tests/unit/pre_init_tab_actors.js => devtools/server/tests/unit/pre_init_tab_actors.js rename : toolkit/devtools/server/tests/unit/registertestactors-01.js => devtools/server/tests/unit/registertestactors-01.js rename : toolkit/devtools/server/tests/unit/registertestactors-02.js => devtools/server/tests/unit/registertestactors-02.js rename : toolkit/devtools/server/tests/unit/registertestactors-03.js => devtools/server/tests/unit/registertestactors-03.js rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-column-in-gcd-script.js => devtools/server/tests/unit/setBreakpoint-on-column-in-gcd-script.js rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-column-with-no-offsets-at-end-of-line.js => devtools/server/tests/unit/setBreakpoint-on-column-with-no-offsets-at-end-of-line.js rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-column-with-no-offsets-at-end-of-script.js => devtools/server/tests/unit/setBreakpoint-on-column-with-no-offsets-at-end-of-script.js rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-column-with-no-offsets-in-gcd-script.js => devtools/server/tests/unit/setBreakpoint-on-column-with-no-offsets-in-gcd-script.js rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-column-with-no-offsets.js => devtools/server/tests/unit/setBreakpoint-on-column-with-no-offsets.js rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-column.js => devtools/server/tests/unit/setBreakpoint-on-column.js rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-line-in-gcd-script.js => devtools/server/tests/unit/setBreakpoint-on-line-in-gcd-script.js rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-line-with-multiple-offsets.js => devtools/server/tests/unit/setBreakpoint-on-line-with-multiple-offsets.js rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-line-with-multiple-statements.js => devtools/server/tests/unit/setBreakpoint-on-line-with-multiple-statements.js rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-line-with-no-offsets-at-end-of-script.js => devtools/server/tests/unit/setBreakpoint-on-line-with-no-offsets-at-end-of-script.js rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-line-with-no-offsets-in-gcd-script.js => devtools/server/tests/unit/setBreakpoint-on-line-with-no-offsets-in-gcd-script.js rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-line-with-no-offsets.js => devtools/server/tests/unit/setBreakpoint-on-line-with-no-offsets.js rename : toolkit/devtools/server/tests/unit/setBreakpoint-on-line.js => devtools/server/tests/unit/setBreakpoint-on-line.js rename : toolkit/devtools/server/tests/unit/source-map-data/sourcemapped.coffee => devtools/server/tests/unit/source-map-data/sourcemapped.coffee rename : toolkit/devtools/server/tests/unit/source-map-data/sourcemapped.map => devtools/server/tests/unit/source-map-data/sourcemapped.map rename : toolkit/devtools/server/tests/unit/sourcemapped.js => devtools/server/tests/unit/sourcemapped.js rename : toolkit/devtools/server/tests/unit/test_MemoryActor_saveHeapSnapshot_01.js => devtools/server/tests/unit/test_MemoryActor_saveHeapSnapshot_01.js rename : toolkit/devtools/server/tests/unit/test_MemoryActor_saveHeapSnapshot_02.js => devtools/server/tests/unit/test_MemoryActor_saveHeapSnapshot_02.js rename : toolkit/devtools/server/tests/unit/test_ScriptStore.js => devtools/server/tests/unit/test_ScriptStore.js rename : toolkit/devtools/server/tests/unit/test_actor-registry-actor.js => devtools/server/tests/unit/test_actor-registry-actor.js rename : toolkit/devtools/server/tests/unit/test_add_actors.js => devtools/server/tests/unit/test_add_actors.js rename : toolkit/devtools/server/tests/unit/test_attach.js => devtools/server/tests/unit/test_attach.js rename : toolkit/devtools/server/tests/unit/test_blackboxing-01.js => devtools/server/tests/unit/test_blackboxing-01.js rename : toolkit/devtools/server/tests/unit/test_blackboxing-02.js => devtools/server/tests/unit/test_blackboxing-02.js rename : toolkit/devtools/server/tests/unit/test_blackboxing-03.js => devtools/server/tests/unit/test_blackboxing-03.js rename : toolkit/devtools/server/tests/unit/test_blackboxing-04.js => devtools/server/tests/unit/test_blackboxing-04.js rename : toolkit/devtools/server/tests/unit/test_blackboxing-05.js => devtools/server/tests/unit/test_blackboxing-05.js rename : toolkit/devtools/server/tests/unit/test_blackboxing-06.js => devtools/server/tests/unit/test_blackboxing-06.js rename : toolkit/devtools/server/tests/unit/test_blackboxing-07.js => devtools/server/tests/unit/test_blackboxing-07.js rename : toolkit/devtools/server/tests/unit/test_breakpoint-01.js => devtools/server/tests/unit/test_breakpoint-01.js rename : toolkit/devtools/server/tests/unit/test_breakpoint-02.js => devtools/server/tests/unit/test_breakpoint-02.js rename : toolkit/devtools/server/tests/unit/test_breakpoint-03.js => devtools/server/tests/unit/test_breakpoint-03.js rename : toolkit/devtools/server/tests/unit/test_breakpoint-04.js => devtools/server/tests/unit/test_breakpoint-04.js rename : toolkit/devtools/server/tests/unit/test_breakpoint-05.js => devtools/server/tests/unit/test_breakpoint-05.js rename : toolkit/devtools/server/tests/unit/test_breakpoint-06.js => devtools/server/tests/unit/test_breakpoint-06.js rename : toolkit/devtools/server/tests/unit/test_breakpoint-07.js => devtools/server/tests/unit/test_breakpoint-07.js rename : toolkit/devtools/server/tests/unit/test_breakpoint-08.js => devtools/server/tests/unit/test_breakpoint-08.js rename : toolkit/devtools/server/tests/unit/test_breakpoint-09.js => devtools/server/tests/unit/test_breakpoint-09.js rename : toolkit/devtools/server/tests/unit/test_breakpoint-10.js => devtools/server/tests/unit/test_breakpoint-10.js rename : toolkit/devtools/server/tests/unit/test_breakpoint-11.js => devtools/server/tests/unit/test_breakpoint-11.js rename : toolkit/devtools/server/tests/unit/test_breakpoint-12.js => devtools/server/tests/unit/test_breakpoint-12.js rename : toolkit/devtools/server/tests/unit/test_breakpoint-13.js => devtools/server/tests/unit/test_breakpoint-13.js rename : toolkit/devtools/server/tests/unit/test_breakpoint-14.js => devtools/server/tests/unit/test_breakpoint-14.js rename : toolkit/devtools/server/tests/unit/test_breakpoint-15.js => devtools/server/tests/unit/test_breakpoint-15.js rename : toolkit/devtools/server/tests/unit/test_breakpoint-16.js => devtools/server/tests/unit/test_breakpoint-16.js rename : toolkit/devtools/server/tests/unit/test_breakpoint-17.js => devtools/server/tests/unit/test_breakpoint-17.js rename : toolkit/devtools/server/tests/unit/test_breakpoint-18.js => devtools/server/tests/unit/test_breakpoint-18.js rename : toolkit/devtools/server/tests/unit/test_breakpoint-19.js => devtools/server/tests/unit/test_breakpoint-19.js rename : toolkit/devtools/server/tests/unit/test_breakpoint-20.js => devtools/server/tests/unit/test_breakpoint-20.js rename : toolkit/devtools/server/tests/unit/test_breakpoint-21.js => devtools/server/tests/unit/test_breakpoint-21.js rename : toolkit/devtools/server/tests/unit/test_breakpoint-actor-map.js => devtools/server/tests/unit/test_breakpoint-actor-map.js rename : toolkit/devtools/server/tests/unit/test_client_request.js => devtools/server/tests/unit/test_client_request.js rename : toolkit/devtools/server/tests/unit/test_conditional_breakpoint-01.js => devtools/server/tests/unit/test_conditional_breakpoint-01.js rename : toolkit/devtools/server/tests/unit/test_conditional_breakpoint-02.js => devtools/server/tests/unit/test_conditional_breakpoint-02.js rename : toolkit/devtools/server/tests/unit/test_conditional_breakpoint-03.js => devtools/server/tests/unit/test_conditional_breakpoint-03.js rename : toolkit/devtools/server/tests/unit/test_dbgactor.js => devtools/server/tests/unit/test_dbgactor.js rename : toolkit/devtools/server/tests/unit/test_dbgclient_debuggerstatement.js => devtools/server/tests/unit/test_dbgclient_debuggerstatement.js rename : toolkit/devtools/server/tests/unit/test_dbgglobal.js => devtools/server/tests/unit/test_dbgglobal.js rename : toolkit/devtools/server/tests/unit/test_eval-01.js => devtools/server/tests/unit/test_eval-01.js rename : toolkit/devtools/server/tests/unit/test_eval-02.js => devtools/server/tests/unit/test_eval-02.js rename : toolkit/devtools/server/tests/unit/test_eval-03.js => devtools/server/tests/unit/test_eval-03.js rename : toolkit/devtools/server/tests/unit/test_eval-04.js => devtools/server/tests/unit/test_eval-04.js rename : toolkit/devtools/server/tests/unit/test_eval-05.js => devtools/server/tests/unit/test_eval-05.js rename : toolkit/devtools/server/tests/unit/test_eventlooplag_actor.js => devtools/server/tests/unit/test_eventlooplag_actor.js rename : toolkit/devtools/server/tests/unit/test_forwardingprefix.js => devtools/server/tests/unit/test_forwardingprefix.js rename : toolkit/devtools/server/tests/unit/test_frameactor-01.js => devtools/server/tests/unit/test_frameactor-01.js rename : toolkit/devtools/server/tests/unit/test_frameactor-02.js => devtools/server/tests/unit/test_frameactor-02.js rename : toolkit/devtools/server/tests/unit/test_frameactor-03.js => devtools/server/tests/unit/test_frameactor-03.js rename : toolkit/devtools/server/tests/unit/test_frameactor-04.js => devtools/server/tests/unit/test_frameactor-04.js rename : toolkit/devtools/server/tests/unit/test_frameactor-05.js => devtools/server/tests/unit/test_frameactor-05.js rename : toolkit/devtools/server/tests/unit/test_framearguments-01.js => devtools/server/tests/unit/test_framearguments-01.js rename : toolkit/devtools/server/tests/unit/test_framebindings-01.js => devtools/server/tests/unit/test_framebindings-01.js rename : toolkit/devtools/server/tests/unit/test_framebindings-02.js => devtools/server/tests/unit/test_framebindings-02.js rename : toolkit/devtools/server/tests/unit/test_framebindings-03.js => devtools/server/tests/unit/test_framebindings-03.js rename : toolkit/devtools/server/tests/unit/test_framebindings-04.js => devtools/server/tests/unit/test_framebindings-04.js rename : toolkit/devtools/server/tests/unit/test_framebindings-05.js => devtools/server/tests/unit/test_framebindings-05.js rename : toolkit/devtools/server/tests/unit/test_framebindings-06.js => devtools/server/tests/unit/test_framebindings-06.js rename : toolkit/devtools/server/tests/unit/test_framebindings-07.js => devtools/server/tests/unit/test_framebindings-07.js rename : toolkit/devtools/server/tests/unit/test_frameclient-01.js => devtools/server/tests/unit/test_frameclient-01.js rename : toolkit/devtools/server/tests/unit/test_frameclient-02.js => devtools/server/tests/unit/test_frameclient-02.js rename : toolkit/devtools/server/tests/unit/test_functiongrips-01.js => devtools/server/tests/unit/test_functiongrips-01.js rename : toolkit/devtools/server/tests/unit/test_get-executable-lines-source-map.js => devtools/server/tests/unit/test_get-executable-lines-source-map.js rename : toolkit/devtools/server/tests/unit/test_get-executable-lines.js => devtools/server/tests/unit/test_get-executable-lines.js rename : toolkit/devtools/server/tests/unit/test_getRuleText.js => devtools/server/tests/unit/test_getRuleText.js rename : toolkit/devtools/server/tests/unit/test_getTextAtLineColumn.js => devtools/server/tests/unit/test_getTextAtLineColumn.js rename : toolkit/devtools/server/tests/unit/test_getyoungestframe.js => devtools/server/tests/unit/test_getyoungestframe.js rename : toolkit/devtools/server/tests/unit/test_ignore_caught_exceptions.js => devtools/server/tests/unit/test_ignore_caught_exceptions.js rename : toolkit/devtools/server/tests/unit/test_interrupt.js => devtools/server/tests/unit/test_interrupt.js rename : toolkit/devtools/server/tests/unit/test_layout-reflows-observer.js => devtools/server/tests/unit/test_layout-reflows-observer.js rename : toolkit/devtools/server/tests/unit/test_listsources-01.js => devtools/server/tests/unit/test_listsources-01.js rename : toolkit/devtools/server/tests/unit/test_listsources-02.js => devtools/server/tests/unit/test_listsources-02.js rename : toolkit/devtools/server/tests/unit/test_listsources-03.js => devtools/server/tests/unit/test_listsources-03.js rename : toolkit/devtools/server/tests/unit/test_longstringactor.js => devtools/server/tests/unit/test_longstringactor.js rename : toolkit/devtools/server/tests/unit/test_longstringgrips-01.js => devtools/server/tests/unit/test_longstringgrips-01.js rename : toolkit/devtools/server/tests/unit/test_longstringgrips-02.js => devtools/server/tests/unit/test_longstringgrips-02.js rename : toolkit/devtools/server/tests/unit/test_memory_footprint.js => devtools/server/tests/unit/test_memory_footprint.js rename : toolkit/devtools/server/tests/unit/test_monitor_actor.js => devtools/server/tests/unit/test_monitor_actor.js rename : toolkit/devtools/server/tests/unit/test_nativewrappers.js => devtools/server/tests/unit/test_nativewrappers.js rename : toolkit/devtools/server/tests/unit/test_nesting-01.js => devtools/server/tests/unit/test_nesting-01.js rename : toolkit/devtools/server/tests/unit/test_nesting-02.js => devtools/server/tests/unit/test_nesting-02.js rename : toolkit/devtools/server/tests/unit/test_nesting-03.js => devtools/server/tests/unit/test_nesting-03.js rename : toolkit/devtools/server/tests/unit/test_new_source-01.js => devtools/server/tests/unit/test_new_source-01.js rename : toolkit/devtools/server/tests/unit/test_nodelistactor.js => devtools/server/tests/unit/test_nodelistactor.js rename : toolkit/devtools/server/tests/unit/test_nsjsinspector.js => devtools/server/tests/unit/test_nsjsinspector.js rename : toolkit/devtools/server/tests/unit/test_objectgrips-01.js => devtools/server/tests/unit/test_objectgrips-01.js rename : toolkit/devtools/server/tests/unit/test_objectgrips-02.js => devtools/server/tests/unit/test_objectgrips-02.js rename : toolkit/devtools/server/tests/unit/test_objectgrips-03.js => devtools/server/tests/unit/test_objectgrips-03.js rename : toolkit/devtools/server/tests/unit/test_objectgrips-04.js => devtools/server/tests/unit/test_objectgrips-04.js rename : toolkit/devtools/server/tests/unit/test_objectgrips-05.js => devtools/server/tests/unit/test_objectgrips-05.js rename : toolkit/devtools/server/tests/unit/test_objectgrips-06.js => devtools/server/tests/unit/test_objectgrips-06.js rename : toolkit/devtools/server/tests/unit/test_objectgrips-07.js => devtools/server/tests/unit/test_objectgrips-07.js rename : toolkit/devtools/server/tests/unit/test_objectgrips-08.js => devtools/server/tests/unit/test_objectgrips-08.js rename : toolkit/devtools/server/tests/unit/test_objectgrips-09.js => devtools/server/tests/unit/test_objectgrips-09.js rename : toolkit/devtools/server/tests/unit/test_objectgrips-10.js => devtools/server/tests/unit/test_objectgrips-10.js rename : toolkit/devtools/server/tests/unit/test_objectgrips-11.js => devtools/server/tests/unit/test_objectgrips-11.js rename : toolkit/devtools/server/tests/unit/test_objectgrips-12.js => devtools/server/tests/unit/test_objectgrips-12.js rename : toolkit/devtools/server/tests/unit/test_objectgrips-13.js => devtools/server/tests/unit/test_objectgrips-13.js rename : toolkit/devtools/server/tests/unit/test_pause_exceptions-01.js => devtools/server/tests/unit/test_pause_exceptions-01.js rename : toolkit/devtools/server/tests/unit/test_pause_exceptions-02.js => devtools/server/tests/unit/test_pause_exceptions-02.js rename : toolkit/devtools/server/tests/unit/test_pauselifetime-01.js => devtools/server/tests/unit/test_pauselifetime-01.js rename : toolkit/devtools/server/tests/unit/test_pauselifetime-02.js => devtools/server/tests/unit/test_pauselifetime-02.js rename : toolkit/devtools/server/tests/unit/test_pauselifetime-03.js => devtools/server/tests/unit/test_pauselifetime-03.js rename : toolkit/devtools/server/tests/unit/test_pauselifetime-04.js => devtools/server/tests/unit/test_pauselifetime-04.js rename : toolkit/devtools/server/tests/unit/test_profiler_activation-01.js => devtools/server/tests/unit/test_profiler_activation-01.js rename : toolkit/devtools/server/tests/unit/test_profiler_activation-02.js => devtools/server/tests/unit/test_profiler_activation-02.js rename : toolkit/devtools/server/tests/unit/test_profiler_bufferstatus.js => devtools/server/tests/unit/test_profiler_bufferstatus.js rename : toolkit/devtools/server/tests/unit/test_profiler_close.js => devtools/server/tests/unit/test_profiler_close.js rename : toolkit/devtools/server/tests/unit/test_profiler_data.js => devtools/server/tests/unit/test_profiler_data.js rename : toolkit/devtools/server/tests/unit/test_profiler_events-01.js => devtools/server/tests/unit/test_profiler_events-01.js rename : toolkit/devtools/server/tests/unit/test_profiler_events-02.js => devtools/server/tests/unit/test_profiler_events-02.js rename : toolkit/devtools/server/tests/unit/test_profiler_getbufferinfo.js => devtools/server/tests/unit/test_profiler_getbufferinfo.js rename : toolkit/devtools/server/tests/unit/test_profiler_getfeatures.js => devtools/server/tests/unit/test_profiler_getfeatures.js rename : toolkit/devtools/server/tests/unit/test_profiler_getsharedlibraryinformation.js => devtools/server/tests/unit/test_profiler_getsharedlibraryinformation.js rename : toolkit/devtools/server/tests/unit/test_promise_state-01.js => devtools/server/tests/unit/test_promise_state-01.js rename : toolkit/devtools/server/tests/unit/test_promise_state-02.js => devtools/server/tests/unit/test_promise_state-02.js rename : toolkit/devtools/server/tests/unit/test_promise_state-03.js => devtools/server/tests/unit/test_promise_state-03.js rename : toolkit/devtools/server/tests/unit/test_promises_actor_attach.js => devtools/server/tests/unit/test_promises_actor_attach.js rename : toolkit/devtools/server/tests/unit/test_promises_actor_exist.js => devtools/server/tests/unit/test_promises_actor_exist.js rename : toolkit/devtools/server/tests/unit/test_promises_actor_list_promises.js => devtools/server/tests/unit/test_promises_actor_list_promises.js rename : toolkit/devtools/server/tests/unit/test_promises_actor_onnewpromise.js => devtools/server/tests/unit/test_promises_actor_onnewpromise.js rename : toolkit/devtools/server/tests/unit/test_promises_actor_onpromisesettled.js => devtools/server/tests/unit/test_promises_actor_onpromisesettled.js rename : toolkit/devtools/server/tests/unit/test_promises_client_getdependentpromises.js => devtools/server/tests/unit/test_promises_client_getdependentpromises.js rename : toolkit/devtools/server/tests/unit/test_promises_object_creationtimestamp.js => devtools/server/tests/unit/test_promises_object_creationtimestamp.js rename : toolkit/devtools/server/tests/unit/test_promises_object_timetosettle-01.js => devtools/server/tests/unit/test_promises_object_timetosettle-01.js rename : toolkit/devtools/server/tests/unit/test_promises_object_timetosettle-02.js => devtools/server/tests/unit/test_promises_object_timetosettle-02.js rename : toolkit/devtools/server/tests/unit/test_protocolSpec.js => devtools/server/tests/unit/test_protocolSpec.js rename : toolkit/devtools/server/tests/unit/test_protocol_abort.js => devtools/server/tests/unit/test_protocol_abort.js rename : toolkit/devtools/server/tests/unit/test_protocol_async.js => devtools/server/tests/unit/test_protocol_async.js rename : toolkit/devtools/server/tests/unit/test_protocol_children.js => devtools/server/tests/unit/test_protocol_children.js rename : toolkit/devtools/server/tests/unit/test_protocol_formtype.js => devtools/server/tests/unit/test_protocol_formtype.js rename : toolkit/devtools/server/tests/unit/test_protocol_longstring.js => devtools/server/tests/unit/test_protocol_longstring.js rename : toolkit/devtools/server/tests/unit/test_protocol_simple.js => devtools/server/tests/unit/test_protocol_simple.js rename : toolkit/devtools/server/tests/unit/test_protocol_stack.js => devtools/server/tests/unit/test_protocol_stack.js rename : toolkit/devtools/server/tests/unit/test_protocol_unregister.js => devtools/server/tests/unit/test_protocol_unregister.js rename : toolkit/devtools/server/tests/unit/test_reattach-thread.js => devtools/server/tests/unit/test_reattach-thread.js rename : toolkit/devtools/server/tests/unit/test_registerClient.js => devtools/server/tests/unit/test_registerClient.js rename : toolkit/devtools/server/tests/unit/test_register_actor.js => devtools/server/tests/unit/test_register_actor.js rename : toolkit/devtools/server/tests/unit/test_requestTypes.js => devtools/server/tests/unit/test_requestTypes.js rename : toolkit/devtools/server/tests/unit/test_safe-getter.js => devtools/server/tests/unit/test_safe-getter.js rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-column-in-gcd-script.js => devtools/server/tests/unit/test_setBreakpoint-on-column-in-gcd-script.js rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-column-with-no-offests-in-gcd-script.js => devtools/server/tests/unit/test_setBreakpoint-on-column-with-no-offests-in-gcd-script.js rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-column-with-no-offsets-at-end-of-line.js => devtools/server/tests/unit/test_setBreakpoint-on-column-with-no-offsets-at-end-of-line.js rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-column-with-no-offsets-at-end-of-script.js => devtools/server/tests/unit/test_setBreakpoint-on-column-with-no-offsets-at-end-of-script.js rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-column-with-no-offsets-in-gcd-script.js => devtools/server/tests/unit/test_setBreakpoint-on-column-with-no-offsets-in-gcd-script.js rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-column-with-no-offsets.js => devtools/server/tests/unit/test_setBreakpoint-on-column-with-no-offsets.js rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-column.js => devtools/server/tests/unit/test_setBreakpoint-on-column.js rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-line-in-gcd-script.js => devtools/server/tests/unit/test_setBreakpoint-on-line-in-gcd-script.js rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-line-with-multiple-offsets.js => devtools/server/tests/unit/test_setBreakpoint-on-line-with-multiple-offsets.js rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-line-with-multiple-statements.js => devtools/server/tests/unit/test_setBreakpoint-on-line-with-multiple-statements.js rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-line-with-no-offets-in-gcd-script.js => devtools/server/tests/unit/test_setBreakpoint-on-line-with-no-offets-in-gcd-script.js rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-line-with-no-offsets-at-end-of-script.js => devtools/server/tests/unit/test_setBreakpoint-on-line-with-no-offsets-at-end-of-script.js rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-line-with-no-offsets-in-gcd-script.js => devtools/server/tests/unit/test_setBreakpoint-on-line-with-no-offsets-in-gcd-script.js rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-line-with-no-offsets.js => devtools/server/tests/unit/test_setBreakpoint-on-line-with-no-offsets.js rename : toolkit/devtools/server/tests/unit/test_setBreakpoint-on-line.js => devtools/server/tests/unit/test_setBreakpoint-on-line.js rename : toolkit/devtools/server/tests/unit/test_source-01.js => devtools/server/tests/unit/test_source-01.js rename : toolkit/devtools/server/tests/unit/test_sourcemaps-01.js => devtools/server/tests/unit/test_sourcemaps-01.js rename : toolkit/devtools/server/tests/unit/test_sourcemaps-02.js => devtools/server/tests/unit/test_sourcemaps-02.js rename : toolkit/devtools/server/tests/unit/test_sourcemaps-03.js => devtools/server/tests/unit/test_sourcemaps-03.js rename : toolkit/devtools/server/tests/unit/test_sourcemaps-04.js => devtools/server/tests/unit/test_sourcemaps-04.js rename : toolkit/devtools/server/tests/unit/test_sourcemaps-05.js => devtools/server/tests/unit/test_sourcemaps-05.js rename : toolkit/devtools/server/tests/unit/test_sourcemaps-06.js => devtools/server/tests/unit/test_sourcemaps-06.js rename : toolkit/devtools/server/tests/unit/test_sourcemaps-07.js => devtools/server/tests/unit/test_sourcemaps-07.js rename : toolkit/devtools/server/tests/unit/test_sourcemaps-08.js => devtools/server/tests/unit/test_sourcemaps-08.js rename : toolkit/devtools/server/tests/unit/test_sourcemaps-09.js => devtools/server/tests/unit/test_sourcemaps-09.js rename : toolkit/devtools/server/tests/unit/test_sourcemaps-10.js => devtools/server/tests/unit/test_sourcemaps-10.js rename : toolkit/devtools/server/tests/unit/test_sourcemaps-11.js => devtools/server/tests/unit/test_sourcemaps-11.js rename : toolkit/devtools/server/tests/unit/test_sourcemaps-12.js => devtools/server/tests/unit/test_sourcemaps-12.js rename : toolkit/devtools/server/tests/unit/test_sourcemaps-13.js => devtools/server/tests/unit/test_sourcemaps-13.js rename : toolkit/devtools/server/tests/unit/test_sourcemaps-16.js => devtools/server/tests/unit/test_sourcemaps-16.js rename : toolkit/devtools/server/tests/unit/test_stepping-01.js => devtools/server/tests/unit/test_stepping-01.js rename : toolkit/devtools/server/tests/unit/test_stepping-02.js => devtools/server/tests/unit/test_stepping-02.js rename : toolkit/devtools/server/tests/unit/test_stepping-03.js => devtools/server/tests/unit/test_stepping-03.js rename : toolkit/devtools/server/tests/unit/test_stepping-04.js => devtools/server/tests/unit/test_stepping-04.js rename : toolkit/devtools/server/tests/unit/test_stepping-05.js => devtools/server/tests/unit/test_stepping-05.js rename : toolkit/devtools/server/tests/unit/test_stepping-06.js => devtools/server/tests/unit/test_stepping-06.js rename : toolkit/devtools/server/tests/unit/test_symbols-01.js => devtools/server/tests/unit/test_symbols-01.js rename : toolkit/devtools/server/tests/unit/test_symbols-02.js => devtools/server/tests/unit/test_symbols-02.js rename : toolkit/devtools/server/tests/unit/test_threadlifetime-01.js => devtools/server/tests/unit/test_threadlifetime-01.js rename : toolkit/devtools/server/tests/unit/test_threadlifetime-02.js => devtools/server/tests/unit/test_threadlifetime-02.js rename : toolkit/devtools/server/tests/unit/test_threadlifetime-03.js => devtools/server/tests/unit/test_threadlifetime-03.js rename : toolkit/devtools/server/tests/unit/test_threadlifetime-04.js => devtools/server/tests/unit/test_threadlifetime-04.js rename : toolkit/devtools/server/tests/unit/test_threadlifetime-05.js => devtools/server/tests/unit/test_threadlifetime-05.js rename : toolkit/devtools/server/tests/unit/test_threadlifetime-06.js => devtools/server/tests/unit/test_threadlifetime-06.js rename : toolkit/devtools/server/tests/unit/test_unsafeDereference.js => devtools/server/tests/unit/test_unsafeDereference.js rename : toolkit/devtools/server/tests/unit/test_xpcshell_debugging.js => devtools/server/tests/unit/test_xpcshell_debugging.js rename : toolkit/devtools/server/tests/unit/testactors.js => devtools/server/tests/unit/testactors.js rename : toolkit/devtools/server/tests/unit/tracerlocations.js => devtools/server/tests/unit/tracerlocations.js rename : toolkit/devtools/server/tests/unit/xpcshell.ini => devtools/server/tests/unit/xpcshell.ini rename : toolkit/devtools/server/tests/unit/xpcshell_debugging_script.js => devtools/server/tests/unit/xpcshell_debugging_script.js rename : toolkit/devtools/server/worker.js => devtools/server/worker.js rename : toolkit/devtools/.eslintignore => devtools/shared/.eslintignore rename : toolkit/devtools/.eslintrc => devtools/shared/.eslintrc rename : toolkit/devtools/Console.jsm => devtools/shared/Console.jsm rename : toolkit/devtools/DevToolsUtils.js => devtools/shared/DevToolsUtils.js rename : toolkit/devtools/Loader.jsm => devtools/shared/Loader.jsm rename : toolkit/devtools/acorn/LICENSE => devtools/shared/acorn/LICENSE rename : toolkit/devtools/acorn/UPGRADING.md => devtools/shared/acorn/UPGRADING.md rename : toolkit/devtools/acorn/acorn.js => devtools/shared/acorn/acorn.js rename : toolkit/devtools/acorn/acorn_loose.js => devtools/shared/acorn/acorn_loose.js rename : toolkit/devtools/acorn/moz.build => devtools/shared/acorn/moz.build rename : toolkit/devtools/acorn/tests/unit/head_acorn.js => devtools/shared/acorn/tests/unit/head_acorn.js rename : toolkit/devtools/acorn/tests/unit/test_import_acorn.js => devtools/shared/acorn/tests/unit/test_import_acorn.js rename : toolkit/devtools/acorn/tests/unit/test_lenient_parser.js => devtools/shared/acorn/tests/unit/test_lenient_parser.js rename : toolkit/devtools/acorn/tests/unit/test_same_ast.js => devtools/shared/acorn/tests/unit/test_same_ast.js rename : toolkit/devtools/acorn/tests/unit/xpcshell.ini => devtools/shared/acorn/tests/unit/xpcshell.ini rename : toolkit/devtools/acorn/walk.js => devtools/shared/acorn/walk.js rename : toolkit/devtools/apps/Devices.jsm => devtools/shared/apps/Devices.jsm rename : toolkit/devtools/apps/Simulator.jsm => devtools/shared/apps/Simulator.jsm rename : toolkit/devtools/apps/app-actor-front.js => devtools/shared/apps/app-actor-front.js rename : toolkit/devtools/apps/moz.build => devtools/shared/apps/moz.build rename : toolkit/devtools/apps/tests/data/app-certified.zip => devtools/shared/apps/tests/data/app-certified.zip rename : toolkit/devtools/apps/tests/data/app-overload.zip => devtools/shared/apps/tests/data/app-overload.zip rename : toolkit/devtools/apps/tests/data/app-redirect.zip => devtools/shared/apps/tests/data/app-redirect.zip rename : toolkit/devtools/apps/tests/data/app-system.zip => devtools/shared/apps/tests/data/app-system.zip rename : toolkit/devtools/apps/tests/data/app-updated.zip => devtools/shared/apps/tests/data/app-updated.zip rename : toolkit/devtools/apps/tests/data/app.zip => devtools/shared/apps/tests/data/app.zip rename : toolkit/devtools/apps/tests/data/mochitest.ini => devtools/shared/apps/tests/data/mochitest.ini rename : toolkit/devtools/apps/tests/debugger-protocol-helper.js => devtools/shared/apps/tests/debugger-protocol-helper.js rename : toolkit/devtools/apps/tests/mochitest.ini => devtools/shared/apps/tests/mochitest.ini rename : toolkit/devtools/apps/tests/redirect.sjs => devtools/shared/apps/tests/redirect.sjs rename : toolkit/devtools/apps/tests/test_webapps_actor.html => devtools/shared/apps/tests/test_webapps_actor.html rename : toolkit/devtools/apps/tests/unit/data/app-engineering.zip => devtools/shared/apps/tests/unit/data/app-engineering.zip rename : toolkit/devtools/apps/tests/unit/data/app.zip => devtools/shared/apps/tests/unit/data/app.zip rename : toolkit/devtools/apps/tests/unit/head_apps.js => devtools/shared/apps/tests/unit/head_apps.js rename : toolkit/devtools/apps/tests/unit/tail_apps.js => devtools/shared/apps/tests/unit/tail_apps.js rename : toolkit/devtools/apps/tests/unit/test_webappsActor.js => devtools/shared/apps/tests/unit/test_webappsActor.js rename : toolkit/devtools/apps/tests/unit/xpcshell.ini => devtools/shared/apps/tests/unit/xpcshell.ini rename : toolkit/devtools/async-utils.js => devtools/shared/async-utils.js rename : toolkit/devtools/client/connection-manager.js => devtools/shared/client/connection-manager.js rename : toolkit/devtools/client/dbg-client.jsm => devtools/shared/client/dbg-client.jsm rename : toolkit/devtools/client/main.js => devtools/shared/client/main.js rename : toolkit/devtools/client/moz.build => devtools/shared/client/moz.build rename : toolkit/devtools/content-observer.js => devtools/shared/content-observer.js rename : toolkit/devtools/css-color.js => devtools/shared/css-color.js rename : toolkit/devtools/deprecated-sync-thenables.js => devtools/shared/deprecated-sync-thenables.js rename : toolkit/devtools/discovery/discovery.js => devtools/shared/discovery/discovery.js rename : toolkit/devtools/discovery/moz.build => devtools/shared/discovery/moz.build rename : toolkit/devtools/discovery/tests/unit/test_discovery.js => devtools/shared/discovery/tests/unit/test_discovery.js rename : toolkit/devtools/discovery/tests/unit/xpcshell.ini => devtools/shared/discovery/tests/unit/xpcshell.ini rename : toolkit/devtools/event-emitter.js => devtools/shared/event-emitter.js rename : toolkit/devtools/event-parsers.js => devtools/shared/event-parsers.js rename : toolkit/devtools/gcli/Templater.jsm => devtools/shared/gcli/Templater.jsm rename : toolkit/devtools/gcli/commands/addon.js => devtools/shared/gcli/commands/addon.js rename : toolkit/devtools/gcli/commands/appcache.js => devtools/shared/gcli/commands/appcache.js rename : toolkit/devtools/gcli/commands/calllog.js => devtools/shared/gcli/commands/calllog.js rename : toolkit/devtools/gcli/commands/cmd.js => devtools/shared/gcli/commands/cmd.js rename : toolkit/devtools/gcli/commands/cookie.js => devtools/shared/gcli/commands/cookie.js rename : toolkit/devtools/gcli/commands/csscoverage.js => devtools/shared/gcli/commands/csscoverage.js rename : toolkit/devtools/gcli/commands/folder.js => devtools/shared/gcli/commands/folder.js rename : toolkit/devtools/gcli/commands/highlight.js => devtools/shared/gcli/commands/highlight.js rename : toolkit/devtools/gcli/commands/index.js => devtools/shared/gcli/commands/index.js rename : toolkit/devtools/gcli/commands/inject.js => devtools/shared/gcli/commands/inject.js rename : toolkit/devtools/gcli/commands/jsb.js => devtools/shared/gcli/commands/jsb.js rename : toolkit/devtools/gcli/commands/listen.js => devtools/shared/gcli/commands/listen.js rename : toolkit/devtools/gcli/commands/media.js => devtools/shared/gcli/commands/media.js rename : toolkit/devtools/gcli/commands/pagemod.js => devtools/shared/gcli/commands/pagemod.js rename : toolkit/devtools/gcli/commands/paintflashing.js => devtools/shared/gcli/commands/paintflashing.js rename : toolkit/devtools/gcli/commands/restart.js => devtools/shared/gcli/commands/restart.js rename : toolkit/devtools/gcli/commands/rulers.js => devtools/shared/gcli/commands/rulers.js rename : toolkit/devtools/gcli/commands/screenshot.js => devtools/shared/gcli/commands/screenshot.js rename : toolkit/devtools/gcli/commands/security.js => devtools/shared/gcli/commands/security.js rename : toolkit/devtools/gcli/commands/tools.js => devtools/shared/gcli/commands/tools.js rename : toolkit/devtools/gcli/gcli.jsm => devtools/shared/gcli/gcli.jsm rename : toolkit/devtools/gcli/moz.build => devtools/shared/gcli/moz.build rename : toolkit/devtools/gcli/source/LICENSE => devtools/shared/gcli/source/LICENSE rename : toolkit/devtools/gcli/source/docs/design.md => devtools/shared/gcli/source/docs/design.md rename : toolkit/devtools/gcli/source/docs/developing-gcli.md => devtools/shared/gcli/source/docs/developing-gcli.md rename : toolkit/devtools/gcli/source/docs/index.md => devtools/shared/gcli/source/docs/index.md rename : toolkit/devtools/gcli/source/docs/running-tests.md => devtools/shared/gcli/source/docs/running-tests.md rename : toolkit/devtools/gcli/source/docs/writing-commands.md => devtools/shared/gcli/source/docs/writing-commands.md rename : toolkit/devtools/gcli/source/docs/writing-tests.md => devtools/shared/gcli/source/docs/writing-tests.md rename : toolkit/devtools/gcli/source/docs/writing-types.md => devtools/shared/gcli/source/docs/writing-types.md rename : toolkit/devtools/gcli/source/lib/gcli/cli.js => devtools/shared/gcli/source/lib/gcli/cli.js rename : toolkit/devtools/gcli/source/lib/gcli/commands/clear.js => devtools/shared/gcli/source/lib/gcli/commands/clear.js rename : toolkit/devtools/gcli/source/lib/gcli/commands/commands.js => devtools/shared/gcli/source/lib/gcli/commands/commands.js rename : toolkit/devtools/gcli/source/lib/gcli/commands/connect.js => devtools/shared/gcli/source/lib/gcli/commands/connect.js rename : toolkit/devtools/gcli/source/lib/gcli/commands/context.js => devtools/shared/gcli/source/lib/gcli/commands/context.js rename : toolkit/devtools/gcli/source/lib/gcli/commands/exec.js => devtools/shared/gcli/source/lib/gcli/commands/exec.js rename : toolkit/devtools/gcli/source/lib/gcli/commands/global.js => devtools/shared/gcli/source/lib/gcli/commands/global.js rename : toolkit/devtools/gcli/source/lib/gcli/commands/help.js => devtools/shared/gcli/source/lib/gcli/commands/help.js rename : toolkit/devtools/gcli/source/lib/gcli/commands/intro.js => devtools/shared/gcli/source/lib/gcli/commands/intro.js rename : toolkit/devtools/gcli/source/lib/gcli/commands/lang.js => devtools/shared/gcli/source/lib/gcli/commands/lang.js rename : toolkit/devtools/gcli/source/lib/gcli/commands/mocks.js => devtools/shared/gcli/source/lib/gcli/commands/mocks.js rename : toolkit/devtools/gcli/source/lib/gcli/commands/pref.js => devtools/shared/gcli/source/lib/gcli/commands/pref.js rename : toolkit/devtools/gcli/source/lib/gcli/commands/preflist.js => devtools/shared/gcli/source/lib/gcli/commands/preflist.js rename : toolkit/devtools/gcli/source/lib/gcli/commands/test.js => devtools/shared/gcli/source/lib/gcli/commands/test.js rename : toolkit/devtools/gcli/source/lib/gcli/connectors/connectors.js => devtools/shared/gcli/source/lib/gcli/connectors/connectors.js rename : toolkit/devtools/gcli/source/lib/gcli/converters/basic.js => devtools/shared/gcli/source/lib/gcli/converters/basic.js rename : toolkit/devtools/gcli/source/lib/gcli/converters/converters.js => devtools/shared/gcli/source/lib/gcli/converters/converters.js rename : toolkit/devtools/gcli/source/lib/gcli/converters/html.js => devtools/shared/gcli/source/lib/gcli/converters/html.js rename : toolkit/devtools/gcli/source/lib/gcli/converters/terminal.js => devtools/shared/gcli/source/lib/gcli/converters/terminal.js rename : toolkit/devtools/gcli/source/lib/gcli/fields/delegate.js => devtools/shared/gcli/source/lib/gcli/fields/delegate.js rename : toolkit/devtools/gcli/source/lib/gcli/fields/fields.js => devtools/shared/gcli/source/lib/gcli/fields/fields.js rename : toolkit/devtools/gcli/source/lib/gcli/fields/selection.js => devtools/shared/gcli/source/lib/gcli/fields/selection.js rename : toolkit/devtools/gcli/source/lib/gcli/index.js => devtools/shared/gcli/source/lib/gcli/index.js rename : toolkit/devtools/gcli/source/lib/gcli/l10n.js => devtools/shared/gcli/source/lib/gcli/l10n.js rename : toolkit/devtools/gcli/source/lib/gcli/languages/command.html => devtools/shared/gcli/source/lib/gcli/languages/command.html rename : toolkit/devtools/gcli/source/lib/gcli/languages/command.js => devtools/shared/gcli/source/lib/gcli/languages/command.js rename : toolkit/devtools/gcli/source/lib/gcli/languages/javascript.js => devtools/shared/gcli/source/lib/gcli/languages/javascript.js rename : toolkit/devtools/gcli/source/lib/gcli/languages/languages.js => devtools/shared/gcli/source/lib/gcli/languages/languages.js rename : toolkit/devtools/gcli/source/lib/gcli/mozui/completer.js => devtools/shared/gcli/source/lib/gcli/mozui/completer.js rename : toolkit/devtools/gcli/source/lib/gcli/mozui/inputter.js => devtools/shared/gcli/source/lib/gcli/mozui/inputter.js rename : toolkit/devtools/gcli/source/lib/gcli/mozui/tooltip.js => devtools/shared/gcli/source/lib/gcli/mozui/tooltip.js rename : toolkit/devtools/gcli/source/lib/gcli/settings.js => devtools/shared/gcli/source/lib/gcli/settings.js rename : toolkit/devtools/gcli/source/lib/gcli/system.js => devtools/shared/gcli/source/lib/gcli/system.js rename : toolkit/devtools/gcli/source/lib/gcli/types/array.js => devtools/shared/gcli/source/lib/gcli/types/array.js rename : toolkit/devtools/gcli/source/lib/gcli/types/boolean.js => devtools/shared/gcli/source/lib/gcli/types/boolean.js rename : toolkit/devtools/gcli/source/lib/gcli/types/command.js => devtools/shared/gcli/source/lib/gcli/types/command.js rename : toolkit/devtools/gcli/source/lib/gcli/types/date.js => devtools/shared/gcli/source/lib/gcli/types/date.js rename : toolkit/devtools/gcli/source/lib/gcli/types/delegate.js => devtools/shared/gcli/source/lib/gcli/types/delegate.js rename : toolkit/devtools/gcli/source/lib/gcli/types/file.js => devtools/shared/gcli/source/lib/gcli/types/file.js rename : toolkit/devtools/gcli/source/lib/gcli/types/fileparser.js => devtools/shared/gcli/source/lib/gcli/types/fileparser.js rename : toolkit/devtools/gcli/source/lib/gcli/types/javascript.js => devtools/shared/gcli/source/lib/gcli/types/javascript.js rename : toolkit/devtools/gcli/source/lib/gcli/types/node.js => devtools/shared/gcli/source/lib/gcli/types/node.js rename : toolkit/devtools/gcli/source/lib/gcli/types/number.js => devtools/shared/gcli/source/lib/gcli/types/number.js rename : toolkit/devtools/gcli/source/lib/gcli/types/resource.js => devtools/shared/gcli/source/lib/gcli/types/resource.js rename : toolkit/devtools/gcli/source/lib/gcli/types/selection.js => devtools/shared/gcli/source/lib/gcli/types/selection.js rename : toolkit/devtools/gcli/source/lib/gcli/types/setting.js => devtools/shared/gcli/source/lib/gcli/types/setting.js rename : toolkit/devtools/gcli/source/lib/gcli/types/string.js => devtools/shared/gcli/source/lib/gcli/types/string.js rename : toolkit/devtools/gcli/source/lib/gcli/types/types.js => devtools/shared/gcli/source/lib/gcli/types/types.js rename : toolkit/devtools/gcli/source/lib/gcli/types/union.js => devtools/shared/gcli/source/lib/gcli/types/union.js rename : toolkit/devtools/gcli/source/lib/gcli/types/url.js => devtools/shared/gcli/source/lib/gcli/types/url.js rename : toolkit/devtools/gcli/source/lib/gcli/ui/focus.js => devtools/shared/gcli/source/lib/gcli/ui/focus.js rename : toolkit/devtools/gcli/source/lib/gcli/ui/history.js => devtools/shared/gcli/source/lib/gcli/ui/history.js rename : toolkit/devtools/gcli/source/lib/gcli/ui/intro.js => devtools/shared/gcli/source/lib/gcli/ui/intro.js rename : toolkit/devtools/gcli/source/lib/gcli/ui/menu.css => devtools/shared/gcli/source/lib/gcli/ui/menu.css rename : toolkit/devtools/gcli/source/lib/gcli/ui/menu.html => devtools/shared/gcli/source/lib/gcli/ui/menu.html rename : toolkit/devtools/gcli/source/lib/gcli/ui/menu.js => devtools/shared/gcli/source/lib/gcli/ui/menu.js rename : toolkit/devtools/gcli/source/lib/gcli/ui/view.js => devtools/shared/gcli/source/lib/gcli/ui/view.js rename : toolkit/devtools/gcli/source/lib/gcli/util/domtemplate.js => devtools/shared/gcli/source/lib/gcli/util/domtemplate.js rename : toolkit/devtools/gcli/source/lib/gcli/util/fileparser.js => devtools/shared/gcli/source/lib/gcli/util/fileparser.js rename : toolkit/devtools/gcli/source/lib/gcli/util/filesystem.js => devtools/shared/gcli/source/lib/gcli/util/filesystem.js rename : toolkit/devtools/gcli/source/lib/gcli/util/host.js => devtools/shared/gcli/source/lib/gcli/util/host.js rename : toolkit/devtools/gcli/source/lib/gcli/util/l10n.js => devtools/shared/gcli/source/lib/gcli/util/l10n.js rename : toolkit/devtools/gcli/source/lib/gcli/util/legacy.js => devtools/shared/gcli/source/lib/gcli/util/legacy.js rename : toolkit/devtools/gcli/source/lib/gcli/util/prism.js => devtools/shared/gcli/source/lib/gcli/util/prism.js rename : toolkit/devtools/gcli/source/lib/gcli/util/spell.js => devtools/shared/gcli/source/lib/gcli/util/spell.js rename : toolkit/devtools/gcli/source/lib/gcli/util/util.js => devtools/shared/gcli/source/lib/gcli/util/util.js rename : toolkit/devtools/heapsnapshot/AutoMemMap.cpp => devtools/shared/heapsnapshot/AutoMemMap.cpp rename : toolkit/devtools/heapsnapshot/AutoMemMap.h => devtools/shared/heapsnapshot/AutoMemMap.h rename : toolkit/devtools/heapsnapshot/CoreDump.pb.cc => devtools/shared/heapsnapshot/CoreDump.pb.cc rename : toolkit/devtools/heapsnapshot/CoreDump.pb.h => devtools/shared/heapsnapshot/CoreDump.pb.h rename : toolkit/devtools/heapsnapshot/CoreDump.proto => devtools/shared/heapsnapshot/CoreDump.proto rename : toolkit/devtools/heapsnapshot/DeserializedNode.cpp => devtools/shared/heapsnapshot/DeserializedNode.cpp rename : toolkit/devtools/heapsnapshot/DeserializedNode.h => devtools/shared/heapsnapshot/DeserializedNode.h rename : toolkit/devtools/heapsnapshot/HeapAnalysesClient.js => devtools/shared/heapsnapshot/HeapAnalysesClient.js rename : toolkit/devtools/heapsnapshot/HeapAnalysesWorker.js => devtools/shared/heapsnapshot/HeapAnalysesWorker.js rename : toolkit/devtools/heapsnapshot/HeapSnapshot.cpp => devtools/shared/heapsnapshot/HeapSnapshot.cpp rename : toolkit/devtools/heapsnapshot/HeapSnapshot.h => devtools/shared/heapsnapshot/HeapSnapshot.h rename : toolkit/devtools/heapsnapshot/HeapSnapshotFileUtils.js => devtools/shared/heapsnapshot/HeapSnapshotFileUtils.js rename : toolkit/devtools/heapsnapshot/ZeroCopyNSIOutputStream.cpp => devtools/shared/heapsnapshot/ZeroCopyNSIOutputStream.cpp rename : toolkit/devtools/heapsnapshot/ZeroCopyNSIOutputStream.h => devtools/shared/heapsnapshot/ZeroCopyNSIOutputStream.h rename : toolkit/devtools/heapsnapshot/census-tree-node.js => devtools/shared/heapsnapshot/census-tree-node.js rename : toolkit/devtools/heapsnapshot/generate-core-dump-sources.sh => devtools/shared/heapsnapshot/generate-core-dump-sources.sh rename : toolkit/devtools/heapsnapshot/moz.build => devtools/shared/heapsnapshot/moz.build rename : toolkit/devtools/heapsnapshot/tests/gtest/DeserializedNodeUbiNodes.cpp => devtools/shared/heapsnapshot/tests/gtest/DeserializedNodeUbiNodes.cpp rename : toolkit/devtools/heapsnapshot/tests/gtest/DeserializedStackFrameUbiStackFrames.cpp => devtools/shared/heapsnapshot/tests/gtest/DeserializedStackFrameUbiStackFrames.cpp rename : toolkit/devtools/heapsnapshot/tests/gtest/DevTools.h => devtools/shared/heapsnapshot/tests/gtest/DevTools.h rename : toolkit/devtools/heapsnapshot/tests/gtest/DoesCrossZoneBoundaries.cpp => devtools/shared/heapsnapshot/tests/gtest/DoesCrossZoneBoundaries.cpp rename : toolkit/devtools/heapsnapshot/tests/gtest/DoesntCrossZoneBoundaries.cpp => devtools/shared/heapsnapshot/tests/gtest/DoesntCrossZoneBoundaries.cpp rename : toolkit/devtools/heapsnapshot/tests/gtest/SerializesEdgeNames.cpp => devtools/shared/heapsnapshot/tests/gtest/SerializesEdgeNames.cpp rename : toolkit/devtools/heapsnapshot/tests/gtest/SerializesEverythingInHeapGraphOnce.cpp => devtools/shared/heapsnapshot/tests/gtest/SerializesEverythingInHeapGraphOnce.cpp rename : toolkit/devtools/heapsnapshot/tests/gtest/SerializesTypeNames.cpp => devtools/shared/heapsnapshot/tests/gtest/SerializesTypeNames.cpp rename : toolkit/devtools/heapsnapshot/tests/gtest/UniqueStringHashPolicy.cpp => devtools/shared/heapsnapshot/tests/gtest/UniqueStringHashPolicy.cpp rename : toolkit/devtools/heapsnapshot/tests/gtest/moz.build => devtools/shared/heapsnapshot/tests/gtest/moz.build rename : toolkit/devtools/heapsnapshot/tests/mochitest/chrome.ini => devtools/shared/heapsnapshot/tests/mochitest/chrome.ini rename : toolkit/devtools/heapsnapshot/tests/mochitest/test_SaveHeapSnapshot.html => devtools/shared/heapsnapshot/tests/mochitest/test_SaveHeapSnapshot.html rename : toolkit/devtools/heapsnapshot/tests/unit/Census.jsm => devtools/shared/heapsnapshot/tests/unit/Census.jsm rename : toolkit/devtools/heapsnapshot/tests/unit/Match.jsm => devtools/shared/heapsnapshot/tests/unit/Match.jsm rename : toolkit/devtools/heapsnapshot/tests/unit/head_heapsnapshot.js => devtools/shared/heapsnapshot/tests/unit/head_heapsnapshot.js rename : toolkit/devtools/heapsnapshot/tests/unit/heap-snapshot-worker.js => devtools/shared/heapsnapshot/tests/unit/heap-snapshot-worker.js rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapAnalyses_readHeapSnapshot_01.js => devtools/shared/heapsnapshot/tests/unit/test_HeapAnalyses_readHeapSnapshot_01.js rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapAnalyses_takeCensus_01.js => devtools/shared/heapsnapshot/tests/unit/test_HeapAnalyses_takeCensus_01.js rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapAnalyses_takeCensus_02.js => devtools/shared/heapsnapshot/tests/unit/test_HeapAnalyses_takeCensus_02.js rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapAnalyses_takeCensus_03.js => devtools/shared/heapsnapshot/tests/unit/test_HeapAnalyses_takeCensus_03.js rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_01.js => devtools/shared/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_01.js rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_02.js => devtools/shared/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_02.js rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_03.js => devtools/shared/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_03.js rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_04.js => devtools/shared/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_04.js rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_05.js => devtools/shared/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_05.js rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_06.js => devtools/shared/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_06.js rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_07.js => devtools/shared/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_07.js rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_08.js => devtools/shared/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_08.js rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_09.js => devtools/shared/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_09.js rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_10.js => devtools/shared/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_10.js rename : toolkit/devtools/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_11.js => devtools/shared/heapsnapshot/tests/unit/test_HeapSnapshot_takeCensus_11.js rename : toolkit/devtools/heapsnapshot/tests/unit/test_ReadHeapSnapshot.js => devtools/shared/heapsnapshot/tests/unit/test_ReadHeapSnapshot.js rename : toolkit/devtools/heapsnapshot/tests/unit/test_ReadHeapSnapshot_with_allocations.js => devtools/shared/heapsnapshot/tests/unit/test_ReadHeapSnapshot_with_allocations.js rename : toolkit/devtools/heapsnapshot/tests/unit/test_ReadHeapSnapshot_worker.js => devtools/shared/heapsnapshot/tests/unit/test_ReadHeapSnapshot_worker.js rename : toolkit/devtools/heapsnapshot/tests/unit/test_SaveHeapSnapshot.js => devtools/shared/heapsnapshot/tests/unit/test_SaveHeapSnapshot.js rename : toolkit/devtools/heapsnapshot/tests/unit/test_census-tree-node-01.js => devtools/shared/heapsnapshot/tests/unit/test_census-tree-node-01.js rename : toolkit/devtools/heapsnapshot/tests/unit/test_census-tree-node-02.js => devtools/shared/heapsnapshot/tests/unit/test_census-tree-node-02.js rename : toolkit/devtools/heapsnapshot/tests/unit/test_census-tree-node-03.js => devtools/shared/heapsnapshot/tests/unit/test_census-tree-node-03.js rename : toolkit/devtools/heapsnapshot/tests/unit/xpcshell.ini => devtools/shared/heapsnapshot/tests/unit/xpcshell.ini rename : toolkit/devtools/jsbeautify/UPGRADING.md => devtools/shared/jsbeautify/UPGRADING.md rename : toolkit/devtools/jsbeautify/beautify.js => devtools/shared/jsbeautify/beautify.js rename : toolkit/devtools/jsbeautify/lib/sanitytest.js => devtools/shared/jsbeautify/lib/sanitytest.js rename : toolkit/devtools/jsbeautify/lib/urlencode_unpacker.js => devtools/shared/jsbeautify/lib/urlencode_unpacker.js rename : toolkit/devtools/jsbeautify/moz.build => devtools/shared/jsbeautify/moz.build rename : toolkit/devtools/jsbeautify/src/beautify-css.js => devtools/shared/jsbeautify/src/beautify-css.js rename : toolkit/devtools/jsbeautify/src/beautify-html.js => devtools/shared/jsbeautify/src/beautify-html.js rename : toolkit/devtools/jsbeautify/src/beautify-js.js => devtools/shared/jsbeautify/src/beautify-js.js rename : toolkit/devtools/jsbeautify/src/beautify-tests.js => devtools/shared/jsbeautify/src/beautify-tests.js rename : toolkit/devtools/jsbeautify/tests/unit/head_jsbeautify.js => devtools/shared/jsbeautify/tests/unit/head_jsbeautify.js rename : toolkit/devtools/jsbeautify/tests/unit/test.js => devtools/shared/jsbeautify/tests/unit/test.js rename : toolkit/devtools/jsbeautify/tests/unit/xpcshell.ini => devtools/shared/jsbeautify/tests/unit/xpcshell.ini rename : toolkit/devtools/layout/utils.js => devtools/shared/layout/utils.js rename : toolkit/devtools/moz.build => devtools/shared/moz.build rename : toolkit/devtools/output-parser.js => devtools/shared/output-parser.js rename : toolkit/devtools/path.js => devtools/shared/path.js rename : toolkit/devtools/performance/io.js => devtools/shared/performance/io.js rename : toolkit/devtools/performance/legacy/actors.js => devtools/shared/performance/legacy/actors.js rename : toolkit/devtools/performance/legacy/compatibility.js => devtools/shared/performance/legacy/compatibility.js rename : toolkit/devtools/performance/legacy/front.js => devtools/shared/performance/legacy/front.js rename : toolkit/devtools/performance/legacy/recording.js => devtools/shared/performance/legacy/recording.js rename : toolkit/devtools/performance/moz.build => devtools/shared/performance/moz.build rename : toolkit/devtools/performance/process-communication.js => devtools/shared/performance/process-communication.js rename : toolkit/devtools/performance/recorder.js => devtools/shared/performance/recorder.js rename : toolkit/devtools/performance/recording-common.js => devtools/shared/performance/recording-common.js rename : toolkit/devtools/performance/test/head.js => devtools/shared/performance/test/head.js rename : toolkit/devtools/performance/test/test_perf-utils-allocations-to-samples.js => devtools/shared/performance/test/test_perf-utils-allocations-to-samples.js rename : toolkit/devtools/performance/test/xpcshell.ini => devtools/shared/performance/test/xpcshell.ini rename : toolkit/devtools/performance/utils.js => devtools/shared/performance/utils.js rename : toolkit/devtools/pretty-fast/UPGRADING.md => devtools/shared/pretty-fast/UPGRADING.md rename : toolkit/devtools/pretty-fast/moz.build => devtools/shared/pretty-fast/moz.build rename : toolkit/devtools/pretty-fast/pretty-fast.js => devtools/shared/pretty-fast/pretty-fast.js rename : toolkit/devtools/pretty-fast/tests/unit/head_pretty-fast.js => devtools/shared/pretty-fast/tests/unit/head_pretty-fast.js rename : toolkit/devtools/pretty-fast/tests/unit/test.js => devtools/shared/pretty-fast/tests/unit/test.js rename : toolkit/devtools/pretty-fast/tests/unit/xpcshell.ini => devtools/shared/pretty-fast/tests/unit/xpcshell.ini rename : toolkit/devtools/qrcode/decoder/LICENSE => devtools/shared/qrcode/decoder/LICENSE rename : toolkit/devtools/qrcode/decoder/index.js => devtools/shared/qrcode/decoder/index.js rename : toolkit/devtools/qrcode/decoder/moz.build => devtools/shared/qrcode/decoder/moz.build rename : toolkit/devtools/qrcode/encoder/LICENSE => devtools/shared/qrcode/encoder/LICENSE rename : toolkit/devtools/qrcode/encoder/index.js => devtools/shared/qrcode/encoder/index.js rename : toolkit/devtools/qrcode/encoder/moz.build => devtools/shared/qrcode/encoder/moz.build rename : toolkit/devtools/qrcode/index.js => devtools/shared/qrcode/index.js rename : toolkit/devtools/qrcode/moz.build => devtools/shared/qrcode/moz.build rename : toolkit/devtools/qrcode/tests/mochitest/chrome.ini => devtools/shared/qrcode/tests/mochitest/chrome.ini rename : toolkit/devtools/qrcode/tests/mochitest/test_decode.html => devtools/shared/qrcode/tests/mochitest/test_decode.html rename : toolkit/devtools/qrcode/tests/unit/test_encode.js => devtools/shared/qrcode/tests/unit/test_encode.js rename : toolkit/devtools/qrcode/tests/unit/xpcshell.ini => devtools/shared/qrcode/tests/unit/xpcshell.ini rename : toolkit/devtools/security/LocalCertService.cpp => devtools/shared/security/LocalCertService.cpp rename : toolkit/devtools/security/LocalCertService.h => devtools/shared/security/LocalCertService.h rename : toolkit/devtools/security/auth.js => devtools/shared/security/auth.js rename : toolkit/devtools/security/cert.js => devtools/shared/security/cert.js rename : toolkit/devtools/security/docs/wifi.md => devtools/shared/security/docs/wifi.md rename : toolkit/devtools/security/moz.build => devtools/shared/security/moz.build rename : toolkit/devtools/security/nsILocalCertService.idl => devtools/shared/security/nsILocalCertService.idl rename : toolkit/devtools/security/prompt.js => devtools/shared/security/prompt.js rename : toolkit/devtools/security/socket.js => devtools/shared/security/socket.js rename : toolkit/devtools/security/tests/unit/head_dbg.js => devtools/shared/security/tests/unit/head_dbg.js rename : toolkit/devtools/security/tests/unit/test_cert.js => devtools/shared/security/tests/unit/test_cert.js rename : toolkit/devtools/security/tests/unit/test_encryption.js => devtools/shared/security/tests/unit/test_encryption.js rename : toolkit/devtools/security/tests/unit/test_oob_cert_auth.js => devtools/shared/security/tests/unit/test_oob_cert_auth.js rename : toolkit/devtools/security/tests/unit/testactors.js => devtools/shared/security/tests/unit/testactors.js rename : toolkit/devtools/security/tests/unit/xpcshell.ini => devtools/shared/security/tests/unit/xpcshell.ini rename : toolkit/devtools/shared/async-storage.js => devtools/shared/shared/async-storage.js rename : toolkit/devtools/shared/framerate.js => devtools/shared/shared/framerate.js rename : toolkit/devtools/shared/indentation.js => devtools/shared/shared/indentation.js rename : toolkit/devtools/shared/memory.js => devtools/shared/shared/memory.js rename : toolkit/devtools/shared/moz.build => devtools/shared/shared/moz.build rename : toolkit/devtools/shared/profiler.js => devtools/shared/shared/profiler.js rename : toolkit/devtools/shared/system.js => devtools/shared/shared/system.js rename : toolkit/devtools/shared/tests/browser/browser.ini => devtools/shared/shared/tests/browser/browser.ini rename : toolkit/devtools/shared/tests/browser/browser_async_storage.js => devtools/shared/shared/tests/browser/browser_async_storage.js rename : toolkit/devtools/shared/tests/browser/browser_worker-01.js => devtools/shared/shared/tests/browser/browser_worker-01.js rename : toolkit/devtools/shared/tests/browser/browser_worker-02.js => devtools/shared/shared/tests/browser/browser_worker-02.js rename : toolkit/devtools/shared/tests/browser/browser_worker-03.js => devtools/shared/shared/tests/browser/browser_worker-03.js rename : toolkit/devtools/shared/tests/unit/.eslintrc => devtools/shared/shared/tests/unit/.eslintrc rename : toolkit/devtools/shared/tests/unit/test_indentation.js => devtools/shared/shared/tests/unit/test_indentation.js rename : toolkit/devtools/shared/tests/unit/xpcshell.ini => devtools/shared/shared/tests/unit/xpcshell.ini rename : toolkit/devtools/shared/timeline.js => devtools/shared/shared/timeline.js rename : toolkit/devtools/shared/worker-helper.js => devtools/shared/shared/worker-helper.js rename : toolkit/devtools/shared/worker.js => devtools/shared/shared/worker.js rename : toolkit/devtools/sourcemap/UPGRADING.md => devtools/shared/sourcemap/UPGRADING.md rename : toolkit/devtools/sourcemap/moz.build => devtools/shared/sourcemap/moz.build rename : toolkit/devtools/sourcemap/source-map.js => devtools/shared/sourcemap/source-map.js rename : toolkit/devtools/sourcemap/tests/unit/head_sourcemap.js => devtools/shared/sourcemap/tests/unit/head_sourcemap.js rename : toolkit/devtools/sourcemap/tests/unit/test_api.js => devtools/shared/sourcemap/tests/unit/test_api.js rename : toolkit/devtools/sourcemap/tests/unit/test_array_set.js => devtools/shared/sourcemap/tests/unit/test_array_set.js rename : toolkit/devtools/sourcemap/tests/unit/test_base64.js => devtools/shared/sourcemap/tests/unit/test_base64.js rename : toolkit/devtools/sourcemap/tests/unit/test_base64_vlq.js => devtools/shared/sourcemap/tests/unit/test_base64_vlq.js rename : toolkit/devtools/sourcemap/tests/unit/test_binary_search.js => devtools/shared/sourcemap/tests/unit/test_binary_search.js rename : toolkit/devtools/sourcemap/tests/unit/test_dog_fooding.js => devtools/shared/sourcemap/tests/unit/test_dog_fooding.js rename : toolkit/devtools/sourcemap/tests/unit/test_quick_sort.js => devtools/shared/sourcemap/tests/unit/test_quick_sort.js rename : toolkit/devtools/sourcemap/tests/unit/test_source_map_consumer.js => devtools/shared/sourcemap/tests/unit/test_source_map_consumer.js rename : toolkit/devtools/sourcemap/tests/unit/test_source_map_generator.js => devtools/shared/sourcemap/tests/unit/test_source_map_generator.js rename : toolkit/devtools/sourcemap/tests/unit/test_source_node.js => devtools/shared/sourcemap/tests/unit/test_source_node.js rename : toolkit/devtools/sourcemap/tests/unit/test_util.js => devtools/shared/sourcemap/tests/unit/test_util.js rename : toolkit/devtools/sourcemap/tests/unit/xpcshell.ini => devtools/shared/sourcemap/tests/unit/xpcshell.ini rename : toolkit/devtools/styleinspector/css-logic.js => devtools/shared/styleinspector/css-logic.js rename : toolkit/devtools/styleinspector/moz.build => devtools/shared/styleinspector/moz.build rename : toolkit/devtools/tern/README => devtools/shared/tern/README rename : toolkit/devtools/tern/browser.js => devtools/shared/tern/browser.js rename : toolkit/devtools/tern/comment.js => devtools/shared/tern/comment.js rename : toolkit/devtools/tern/condense.js => devtools/shared/tern/condense.js rename : toolkit/devtools/tern/def.js => devtools/shared/tern/def.js rename : toolkit/devtools/tern/ecma5.js => devtools/shared/tern/ecma5.js rename : toolkit/devtools/tern/infer.js => devtools/shared/tern/infer.js rename : toolkit/devtools/tern/moz.build => devtools/shared/tern/moz.build rename : toolkit/devtools/tern/signal.js => devtools/shared/tern/signal.js rename : toolkit/devtools/tern/tern.js => devtools/shared/tern/tern.js rename : toolkit/devtools/tern/tests/unit/head_tern.js => devtools/shared/tern/tests/unit/head_tern.js rename : toolkit/devtools/tern/tests/unit/test_autocompletion.js => devtools/shared/tern/tests/unit/test_autocompletion.js rename : toolkit/devtools/tern/tests/unit/test_import_tern.js => devtools/shared/tern/tests/unit/test_import_tern.js rename : toolkit/devtools/tern/tests/unit/xpcshell.ini => devtools/shared/tern/tests/unit/xpcshell.ini rename : toolkit/devtools/tests/mochitest/chrome.ini => devtools/shared/tests/mochitest/chrome.ini rename : toolkit/devtools/tests/mochitest/test_devtools_extensions.html => devtools/shared/tests/mochitest/test_devtools_extensions.html rename : toolkit/devtools/tests/mochitest/test_eventemitter_basic.html => devtools/shared/tests/mochitest/test_eventemitter_basic.html rename : toolkit/devtools/tests/mochitest/test_loader_paths.html => devtools/shared/tests/mochitest/test_loader_paths.html rename : toolkit/devtools/tests/unit/.eslintrc => devtools/shared/tests/unit/.eslintrc rename : toolkit/devtools/tests/unit/exposeLoader.js => devtools/shared/tests/unit/exposeLoader.js rename : toolkit/devtools/tests/unit/head_devtools.js => devtools/shared/tests/unit/head_devtools.js rename : toolkit/devtools/tests/unit/test_async-utils.js => devtools/shared/tests/unit/test_async-utils.js rename : toolkit/devtools/tests/unit/test_consoleID.js => devtools/shared/tests/unit/test_consoleID.js rename : toolkit/devtools/tests/unit/test_cssColor.js => devtools/shared/tests/unit/test_cssColor.js rename : toolkit/devtools/tests/unit/test_defineLazyPrototypeGetter.js => devtools/shared/tests/unit/test_defineLazyPrototypeGetter.js rename : toolkit/devtools/tests/unit/test_fetch-chrome.js => devtools/shared/tests/unit/test_fetch-chrome.js rename : toolkit/devtools/tests/unit/test_fetch-file.js => devtools/shared/tests/unit/test_fetch-file.js rename : toolkit/devtools/tests/unit/test_fetch-http.js => devtools/shared/tests/unit/test_fetch-http.js rename : toolkit/devtools/tests/unit/test_fetch-resource.js => devtools/shared/tests/unit/test_fetch-resource.js rename : toolkit/devtools/tests/unit/test_independent_loaders.js => devtools/shared/tests/unit/test_independent_loaders.js rename : toolkit/devtools/tests/unit/test_invisible_loader.js => devtools/shared/tests/unit/test_invisible_loader.js rename : toolkit/devtools/tests/unit/test_prettifyCSS.js => devtools/shared/tests/unit/test_prettifyCSS.js rename : toolkit/devtools/tests/unit/test_require.js => devtools/shared/tests/unit/test_require.js rename : toolkit/devtools/tests/unit/test_require_lazy.js => devtools/shared/tests/unit/test_require_lazy.js rename : toolkit/devtools/tests/unit/test_safeErrorString.js => devtools/shared/tests/unit/test_safeErrorString.js rename : toolkit/devtools/tests/unit/test_stack.js => devtools/shared/tests/unit/test_stack.js rename : toolkit/devtools/tests/unit/xpcshell.ini => devtools/shared/tests/unit/xpcshell.ini rename : toolkit/devtools/touch/moz.build => devtools/shared/touch/moz.build rename : toolkit/devtools/touch/simulator-content.js => devtools/shared/touch/simulator-content.js rename : toolkit/devtools/touch/simulator.js => devtools/shared/touch/simulator.js rename : toolkit/devtools/transport/moz.build => devtools/shared/transport/moz.build rename : toolkit/devtools/transport/packets.js => devtools/shared/transport/packets.js rename : toolkit/devtools/transport/stream-utils.js => devtools/shared/transport/stream-utils.js rename : toolkit/devtools/transport/tests/unit/head_dbg.js => devtools/shared/transport/tests/unit/head_dbg.js rename : toolkit/devtools/transport/tests/unit/test_bulk_error.js => devtools/shared/transport/tests/unit/test_bulk_error.js rename : toolkit/devtools/transport/tests/unit/test_client_server_bulk.js => devtools/shared/transport/tests/unit/test_client_server_bulk.js rename : toolkit/devtools/transport/tests/unit/test_dbgsocket.js => devtools/shared/transport/tests/unit/test_dbgsocket.js rename : toolkit/devtools/transport/tests/unit/test_dbgsocket_connection_drop.js => devtools/shared/transport/tests/unit/test_dbgsocket_connection_drop.js rename : toolkit/devtools/transport/tests/unit/test_delimited_read.js => devtools/shared/transport/tests/unit/test_delimited_read.js rename : toolkit/devtools/transport/tests/unit/test_no_bulk.js => devtools/shared/transport/tests/unit/test_no_bulk.js rename : toolkit/devtools/transport/tests/unit/test_packet.js => devtools/shared/transport/tests/unit/test_packet.js rename : toolkit/devtools/transport/tests/unit/test_queue.js => devtools/shared/transport/tests/unit/test_queue.js rename : toolkit/devtools/transport/tests/unit/test_transport_bulk.js => devtools/shared/transport/tests/unit/test_transport_bulk.js rename : toolkit/devtools/transport/tests/unit/testactors-no-bulk.js => devtools/shared/transport/tests/unit/testactors-no-bulk.js rename : toolkit/devtools/transport/tests/unit/testactors.js => devtools/shared/transport/tests/unit/testactors.js rename : toolkit/devtools/transport/tests/unit/xpcshell.ini => devtools/shared/transport/tests/unit/xpcshell.ini rename : toolkit/devtools/transport/transport.js => devtools/shared/transport/transport.js rename : toolkit/devtools/webconsole/client.js => devtools/shared/webconsole/client.js rename : toolkit/devtools/webconsole/moz.build => devtools/shared/webconsole/moz.build rename : toolkit/devtools/webconsole/network-helper.js => devtools/shared/webconsole/network-helper.js rename : toolkit/devtools/webconsole/network-monitor.js => devtools/shared/webconsole/network-monitor.js rename : toolkit/devtools/webconsole/server-logger-monitor.js => devtools/shared/webconsole/server-logger-monitor.js rename : toolkit/devtools/webconsole/server-logger.js => devtools/shared/webconsole/server-logger.js rename : toolkit/devtools/webconsole/test/chrome.ini => devtools/shared/webconsole/test/chrome.ini rename : toolkit/devtools/webconsole/test/common.js => devtools/shared/webconsole/test/common.js rename : toolkit/devtools/webconsole/test/data.json => devtools/shared/webconsole/test/data.json rename : toolkit/devtools/webconsole/test/data.json^headers^ => devtools/shared/webconsole/test/data.json^headers^ rename : toolkit/devtools/webconsole/test/network_requests_iframe.html => devtools/shared/webconsole/test/network_requests_iframe.html rename : toolkit/devtools/webconsole/test/sandboxed_iframe.html => devtools/shared/webconsole/test/sandboxed_iframe.html rename : toolkit/devtools/webconsole/test/test_basics.html => devtools/shared/webconsole/test/test_basics.html rename : toolkit/devtools/webconsole/test/test_bug819670_getter_throws.html => devtools/shared/webconsole/test/test_bug819670_getter_throws.html rename : toolkit/devtools/webconsole/test/test_cached_messages.html => devtools/shared/webconsole/test/test_cached_messages.html rename : toolkit/devtools/webconsole/test/test_commands_other.html => devtools/shared/webconsole/test/test_commands_other.html rename : toolkit/devtools/webconsole/test/test_commands_registration.html => devtools/shared/webconsole/test/test_commands_registration.html rename : toolkit/devtools/webconsole/test/test_console_styling.html => devtools/shared/webconsole/test/test_console_styling.html rename : toolkit/devtools/webconsole/test/test_consoleapi.html => devtools/shared/webconsole/test/test_consoleapi.html rename : toolkit/devtools/webconsole/test/test_consoleapi_innerID.html => devtools/shared/webconsole/test/test_consoleapi_innerID.html rename : toolkit/devtools/webconsole/test/test_file_uri.html => devtools/shared/webconsole/test/test_file_uri.html rename : toolkit/devtools/webconsole/test/test_jsterm.html => devtools/shared/webconsole/test/test_jsterm.html rename : toolkit/devtools/webconsole/test/test_jsterm_cd_iframe.html => devtools/shared/webconsole/test/test_jsterm_cd_iframe.html rename : toolkit/devtools/webconsole/test/test_jsterm_last_result.html => devtools/shared/webconsole/test/test_jsterm_last_result.html rename : toolkit/devtools/webconsole/test/test_jsterm_queryselector.html => devtools/shared/webconsole/test/test_jsterm_queryselector.html rename : toolkit/devtools/webconsole/test/test_network_get.html => devtools/shared/webconsole/test/test_network_get.html rename : toolkit/devtools/webconsole/test/test_network_longstring.html => devtools/shared/webconsole/test/test_network_longstring.html rename : toolkit/devtools/webconsole/test/test_network_post.html => devtools/shared/webconsole/test/test_network_post.html rename : toolkit/devtools/webconsole/test/test_network_security-hpkp.html => devtools/shared/webconsole/test/test_network_security-hpkp.html rename : toolkit/devtools/webconsole/test/test_network_security-hsts.html => devtools/shared/webconsole/test/test_network_security-hsts.html rename : toolkit/devtools/webconsole/test/test_nsiconsolemessage.html => devtools/shared/webconsole/test/test_nsiconsolemessage.html rename : toolkit/devtools/webconsole/test/test_object_actor.html => devtools/shared/webconsole/test/test_object_actor.html rename : toolkit/devtools/webconsole/test/test_object_actor_native_getters.html => devtools/shared/webconsole/test/test_object_actor_native_getters.html rename : toolkit/devtools/webconsole/test/test_object_actor_native_getters_lenient_this.html => devtools/shared/webconsole/test/test_object_actor_native_getters_lenient_this.html rename : toolkit/devtools/webconsole/test/test_page_errors.html => devtools/shared/webconsole/test/test_page_errors.html rename : toolkit/devtools/webconsole/test/test_reflow.html => devtools/shared/webconsole/test/test_reflow.html rename : toolkit/devtools/webconsole/test/test_throw.html => devtools/shared/webconsole/test/test_throw.html rename : toolkit/devtools/webconsole/test/unit/test_js_property_provider.js => devtools/shared/webconsole/test/unit/test_js_property_provider.js rename : toolkit/devtools/webconsole/test/unit/test_network_helper.js => devtools/shared/webconsole/test/unit/test_network_helper.js rename : toolkit/devtools/webconsole/test/unit/test_security-info-certificate.js => devtools/shared/webconsole/test/unit/test_security-info-certificate.js rename : toolkit/devtools/webconsole/test/unit/test_security-info-parser.js => devtools/shared/webconsole/test/unit/test_security-info-parser.js rename : toolkit/devtools/webconsole/test/unit/test_security-info-protocol-version.js => devtools/shared/webconsole/test/unit/test_security-info-protocol-version.js rename : toolkit/devtools/webconsole/test/unit/test_security-info-state.js => devtools/shared/webconsole/test/unit/test_security-info-state.js rename : toolkit/devtools/webconsole/test/unit/test_security-info-static-hpkp.js => devtools/shared/webconsole/test/unit/test_security-info-static-hpkp.js rename : toolkit/devtools/webconsole/test/unit/test_security-info-weakness-reasons.js => devtools/shared/webconsole/test/unit/test_security-info-weakness-reasons.js rename : toolkit/devtools/webconsole/test/unit/xpcshell.ini => devtools/shared/webconsole/test/unit/xpcshell.ini rename : toolkit/devtools/webconsole/utils.js => devtools/shared/webconsole/utils.js rename : toolkit/devtools/worker-loader.js => devtools/shared/worker-loader.js extra : commitid : 32KtLPk4LG6 extra : rebase_source : 4627a07ebc461c0a795f9a84ebb45af4f5c18aba
3908 lines
No EOL
334 KiB
JavaScript
3908 lines
No EOL
334 KiB
JavaScript
function run_test() {
|
|
for (var k in SOURCE_MAP_TEST_MODULE) {
|
|
if (/^test/.test(k)) {
|
|
SOURCE_MAP_TEST_MODULE[k](assert);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
var SOURCE_MAP_TEST_MODULE =
|
|
/******/ (function(modules) { // webpackBootstrap
|
|
/******/ // The module cache
|
|
/******/ var installedModules = {};
|
|
/******/
|
|
/******/ // The require function
|
|
/******/ function __webpack_require__(moduleId) {
|
|
/******/
|
|
/******/ // Check if module is in cache
|
|
/******/ if(installedModules[moduleId])
|
|
/******/ return installedModules[moduleId].exports;
|
|
/******/
|
|
/******/ // Create a new module (and put it into the cache)
|
|
/******/ var module = installedModules[moduleId] = {
|
|
/******/ exports: {},
|
|
/******/ id: moduleId,
|
|
/******/ loaded: false
|
|
/******/ };
|
|
/******/
|
|
/******/ // Execute the module function
|
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
/******/
|
|
/******/ // Flag the module as loaded
|
|
/******/ module.loaded = true;
|
|
/******/
|
|
/******/ // Return the exports of the module
|
|
/******/ return module.exports;
|
|
/******/ }
|
|
/******/
|
|
/******/
|
|
/******/ // expose the modules object (__webpack_modules__)
|
|
/******/ __webpack_require__.m = modules;
|
|
/******/
|
|
/******/ // expose the module cache
|
|
/******/ __webpack_require__.c = installedModules;
|
|
/******/
|
|
/******/ // __webpack_public_path__
|
|
/******/ __webpack_require__.p = "";
|
|
/******/
|
|
/******/ // Load entry module and return exports
|
|
/******/ return __webpack_require__(0);
|
|
/******/ })
|
|
/************************************************************************/
|
|
/******/ ([
|
|
/* 0 */
|
|
/***/ function(module, exports, __webpack_require__) {
|
|
|
|
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
/*
|
|
* Copyright 2011 Mozilla Foundation and contributors
|
|
* Licensed under the New BSD license. See LICENSE or:
|
|
* http://opensource.org/licenses/BSD-3-Clause
|
|
*/
|
|
{
|
|
var util = __webpack_require__(1);
|
|
var SourceMapGenerator = __webpack_require__(3).SourceMapGenerator;
|
|
var SourceMapConsumer = __webpack_require__(8).SourceMapConsumer;
|
|
var SourceNode = __webpack_require__(11).SourceNode;
|
|
|
|
function forEachNewline(fn) {
|
|
return function (assert) {
|
|
['\n', '\r\n'].forEach(fn.bind(null, assert));
|
|
}
|
|
}
|
|
|
|
exports['test .add()'] = function (assert) {
|
|
var node = new SourceNode(null, null, null);
|
|
|
|
// Adding a string works.
|
|
node.add('function noop() {}');
|
|
|
|
// Adding another source node works.
|
|
node.add(new SourceNode(null, null, null));
|
|
|
|
// Adding an array works.
|
|
node.add(['function foo() {',
|
|
new SourceNode(null, null, null,
|
|
'return 10;'),
|
|
'}']);
|
|
|
|
// Adding other stuff doesn't.
|
|
assert.throws(function () {
|
|
node.add({});
|
|
});
|
|
assert.throws(function () {
|
|
node.add(function () {});
|
|
});
|
|
};
|
|
|
|
exports['test .prepend()'] = function (assert) {
|
|
var node = new SourceNode(null, null, null);
|
|
|
|
// Prepending a string works.
|
|
node.prepend('function noop() {}');
|
|
assert.equal(node.children[0], 'function noop() {}');
|
|
assert.equal(node.children.length, 1);
|
|
|
|
// Prepending another source node works.
|
|
node.prepend(new SourceNode(null, null, null));
|
|
assert.equal(node.children[0], '');
|
|
assert.equal(node.children[1], 'function noop() {}');
|
|
assert.equal(node.children.length, 2);
|
|
|
|
// Prepending an array works.
|
|
node.prepend(['function foo() {',
|
|
new SourceNode(null, null, null,
|
|
'return 10;'),
|
|
'}']);
|
|
assert.equal(node.children[0], 'function foo() {');
|
|
assert.equal(node.children[1], 'return 10;');
|
|
assert.equal(node.children[2], '}');
|
|
assert.equal(node.children[3], '');
|
|
assert.equal(node.children[4], 'function noop() {}');
|
|
assert.equal(node.children.length, 5);
|
|
|
|
// Prepending other stuff doesn't.
|
|
assert.throws(function () {
|
|
node.prepend({});
|
|
});
|
|
assert.throws(function () {
|
|
node.prepend(function () {});
|
|
});
|
|
};
|
|
|
|
exports['test .toString()'] = function (assert) {
|
|
assert.equal((new SourceNode(null, null, null,
|
|
['function foo() {',
|
|
new SourceNode(null, null, null, 'return 10;'),
|
|
'}'])).toString(),
|
|
'function foo() {return 10;}');
|
|
};
|
|
|
|
exports['test .join()'] = function (assert) {
|
|
assert.equal((new SourceNode(null, null, null,
|
|
['a', 'b', 'c', 'd'])).join(', ').toString(),
|
|
'a, b, c, d');
|
|
};
|
|
|
|
exports['test .walk()'] = function (assert) {
|
|
var node = new SourceNode(null, null, null,
|
|
['(function () {\n',
|
|
' ', new SourceNode(1, 0, 'a.js', ['someCall()']), ';\n',
|
|
' ', new SourceNode(2, 0, 'b.js', ['if (foo) bar()']), ';\n',
|
|
'}());']);
|
|
var expected = [
|
|
{ str: '(function () {\n', source: null, line: null, column: null },
|
|
{ str: ' ', source: null, line: null, column: null },
|
|
{ str: 'someCall()', source: 'a.js', line: 1, column: 0 },
|
|
{ str: ';\n', source: null, line: null, column: null },
|
|
{ str: ' ', source: null, line: null, column: null },
|
|
{ str: 'if (foo) bar()', source: 'b.js', line: 2, column: 0 },
|
|
{ str: ';\n', source: null, line: null, column: null },
|
|
{ str: '}());', source: null, line: null, column: null },
|
|
];
|
|
var i = 0;
|
|
node.walk(function (chunk, loc) {
|
|
assert.equal(expected[i].str, chunk);
|
|
assert.equal(expected[i].source, loc.source);
|
|
assert.equal(expected[i].line, loc.line);
|
|
assert.equal(expected[i].column, loc.column);
|
|
i++;
|
|
});
|
|
};
|
|
|
|
exports['test .replaceRight'] = function (assert) {
|
|
var node;
|
|
|
|
// Not nested
|
|
node = new SourceNode(null, null, null, 'hello world');
|
|
node.replaceRight(/world/, 'universe');
|
|
assert.equal(node.toString(), 'hello universe');
|
|
|
|
// Nested
|
|
node = new SourceNode(null, null, null,
|
|
[new SourceNode(null, null, null, 'hey sexy mama, '),
|
|
new SourceNode(null, null, null, 'want to kill all humans?')]);
|
|
node.replaceRight(/kill all humans/, 'watch Futurama');
|
|
assert.equal(node.toString(), 'hey sexy mama, want to watch Futurama?');
|
|
};
|
|
|
|
exports['test .toStringWithSourceMap()'] = forEachNewline(function (assert, nl) {
|
|
var node = new SourceNode(null, null, null,
|
|
['(function () {' + nl,
|
|
' ',
|
|
new SourceNode(1, 0, 'a.js', 'someCall', 'originalCall'),
|
|
new SourceNode(1, 8, 'a.js', '()'),
|
|
';' + nl,
|
|
' ', new SourceNode(2, 0, 'b.js', ['if (foo) bar()']), ';' + nl,
|
|
'}());']);
|
|
var result = node.toStringWithSourceMap({
|
|
file: 'foo.js'
|
|
});
|
|
|
|
assert.equal(result.code, [
|
|
'(function () {',
|
|
' someCall();',
|
|
' if (foo) bar();',
|
|
'}());'
|
|
].join(nl));
|
|
|
|
var map = result.map;
|
|
var mapWithoutOptions = node.toStringWithSourceMap().map;
|
|
|
|
assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
|
|
assert.ok(mapWithoutOptions instanceof SourceMapGenerator, 'mapWithoutOptions instanceof SourceMapGenerator');
|
|
assert.ok(!('file' in mapWithoutOptions));
|
|
mapWithoutOptions._file = 'foo.js';
|
|
util.assertEqualMaps(assert, map.toJSON(), mapWithoutOptions.toJSON());
|
|
|
|
map = new SourceMapConsumer(map.toString());
|
|
|
|
var actual;
|
|
|
|
actual = map.originalPositionFor({
|
|
line: 1,
|
|
column: 4
|
|
});
|
|
assert.equal(actual.source, null);
|
|
assert.equal(actual.line, null);
|
|
assert.equal(actual.column, null);
|
|
|
|
actual = map.originalPositionFor({
|
|
line: 2,
|
|
column: 2
|
|
});
|
|
assert.equal(actual.source, 'a.js');
|
|
assert.equal(actual.line, 1);
|
|
assert.equal(actual.column, 0);
|
|
assert.equal(actual.name, 'originalCall');
|
|
|
|
actual = map.originalPositionFor({
|
|
line: 3,
|
|
column: 2
|
|
});
|
|
assert.equal(actual.source, 'b.js');
|
|
assert.equal(actual.line, 2);
|
|
assert.equal(actual.column, 0);
|
|
|
|
actual = map.originalPositionFor({
|
|
line: 3,
|
|
column: 16
|
|
});
|
|
assert.equal(actual.source, null);
|
|
assert.equal(actual.line, null);
|
|
assert.equal(actual.column, null);
|
|
|
|
actual = map.originalPositionFor({
|
|
line: 4,
|
|
column: 2
|
|
});
|
|
assert.equal(actual.source, null);
|
|
assert.equal(actual.line, null);
|
|
assert.equal(actual.column, null);
|
|
});
|
|
|
|
exports['test .fromStringWithSourceMap()'] = forEachNewline(function (assert, nl) {
|
|
var testCode = util.testGeneratedCode.replace(/\n/g, nl);
|
|
var node = SourceNode.fromStringWithSourceMap(
|
|
testCode,
|
|
new SourceMapConsumer(util.testMap));
|
|
|
|
var result = node.toStringWithSourceMap({
|
|
file: 'min.js'
|
|
});
|
|
var map = result.map;
|
|
var code = result.code;
|
|
|
|
assert.equal(code, testCode);
|
|
assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
|
|
map = map.toJSON();
|
|
assert.equal(map.version, util.testMap.version);
|
|
assert.equal(map.file, util.testMap.file);
|
|
assert.equal(map.mappings, util.testMap.mappings);
|
|
});
|
|
|
|
exports['test .fromStringWithSourceMap() empty map'] = forEachNewline(function (assert, nl) {
|
|
var node = SourceNode.fromStringWithSourceMap(
|
|
util.testGeneratedCode.replace(/\n/g, nl),
|
|
new SourceMapConsumer(util.emptyMap));
|
|
var result = node.toStringWithSourceMap({
|
|
file: 'min.js'
|
|
});
|
|
var map = result.map;
|
|
var code = result.code;
|
|
|
|
assert.equal(code, util.testGeneratedCode.replace(/\n/g, nl));
|
|
assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
|
|
map = map.toJSON();
|
|
assert.equal(map.version, util.emptyMap.version);
|
|
assert.equal(map.file, util.emptyMap.file);
|
|
assert.equal(map.mappings.length, util.emptyMap.mappings.length);
|
|
assert.equal(map.mappings, util.emptyMap.mappings);
|
|
});
|
|
|
|
exports['test .fromStringWithSourceMap() complex version'] = forEachNewline(function (assert, nl) {
|
|
var input = new SourceNode(null, null, null, [
|
|
"(function() {" + nl,
|
|
" var Test = {};" + nl,
|
|
" ", new SourceNode(1, 0, "a.js", "Test.A = { value: 1234 };" + nl),
|
|
" ", new SourceNode(2, 0, "a.js", "Test.A.x = 'xyz';"), nl,
|
|
"}());" + nl,
|
|
"/* Generated Source */"]);
|
|
input = input.toStringWithSourceMap({
|
|
file: 'foo.js'
|
|
});
|
|
|
|
var node = SourceNode.fromStringWithSourceMap(
|
|
input.code,
|
|
new SourceMapConsumer(input.map.toString()));
|
|
|
|
var result = node.toStringWithSourceMap({
|
|
file: 'foo.js'
|
|
});
|
|
var map = result.map;
|
|
var code = result.code;
|
|
|
|
assert.equal(code, input.code);
|
|
assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
|
|
map = map.toJSON();
|
|
var inputMap = input.map.toJSON();
|
|
util.assertEqualMaps(assert, map, inputMap);
|
|
});
|
|
|
|
exports['test .fromStringWithSourceMap() third argument'] = function (assert) {
|
|
// Assume the following directory structure:
|
|
//
|
|
// http://foo.org/
|
|
// bar.coffee
|
|
// app/
|
|
// coffee/
|
|
// foo.coffee
|
|
// coffeeBundle.js # Made from {foo,bar,baz}.coffee
|
|
// maps/
|
|
// coffeeBundle.js.map
|
|
// js/
|
|
// foo.js
|
|
// public/
|
|
// app.js # Made from {foo,coffeeBundle}.js
|
|
// app.js.map
|
|
//
|
|
// http://www.example.com/
|
|
// baz.coffee
|
|
|
|
var coffeeBundle = new SourceNode(1, 0, 'foo.coffee', 'foo(coffee);\n');
|
|
coffeeBundle.setSourceContent('foo.coffee', 'foo coffee');
|
|
coffeeBundle.add(new SourceNode(2, 0, '/bar.coffee', 'bar(coffee);\n'));
|
|
coffeeBundle.add(new SourceNode(3, 0, 'http://www.example.com/baz.coffee', 'baz(coffee);'));
|
|
coffeeBundle = coffeeBundle.toStringWithSourceMap({
|
|
file: 'foo.js',
|
|
sourceRoot: '..'
|
|
});
|
|
|
|
var foo = new SourceNode(1, 0, 'foo.js', 'foo(js);');
|
|
|
|
var test = function(relativePath, expectedSources) {
|
|
var app = new SourceNode();
|
|
app.add(SourceNode.fromStringWithSourceMap(
|
|
coffeeBundle.code,
|
|
new SourceMapConsumer(coffeeBundle.map.toString()),
|
|
relativePath));
|
|
app.add(foo);
|
|
var i = 0;
|
|
app.walk(function (chunk, loc) {
|
|
assert.equal(loc.source, expectedSources[i]);
|
|
i++;
|
|
});
|
|
app.walkSourceContents(function (sourceFile, sourceContent) {
|
|
assert.equal(sourceFile, expectedSources[0]);
|
|
assert.equal(sourceContent, 'foo coffee');
|
|
})
|
|
};
|
|
|
|
test('../coffee/maps', [
|
|
'../coffee/foo.coffee',
|
|
'/bar.coffee',
|
|
'http://www.example.com/baz.coffee',
|
|
'foo.js'
|
|
]);
|
|
|
|
// If the third parameter is omitted or set to the current working
|
|
// directory we get incorrect source paths:
|
|
|
|
test(undefined, [
|
|
'../foo.coffee',
|
|
'/bar.coffee',
|
|
'http://www.example.com/baz.coffee',
|
|
'foo.js'
|
|
]);
|
|
|
|
test('', [
|
|
'../foo.coffee',
|
|
'/bar.coffee',
|
|
'http://www.example.com/baz.coffee',
|
|
'foo.js'
|
|
]);
|
|
|
|
test('.', [
|
|
'../foo.coffee',
|
|
'/bar.coffee',
|
|
'http://www.example.com/baz.coffee',
|
|
'foo.js'
|
|
]);
|
|
|
|
test('./', [
|
|
'../foo.coffee',
|
|
'/bar.coffee',
|
|
'http://www.example.com/baz.coffee',
|
|
'foo.js'
|
|
]);
|
|
};
|
|
|
|
exports['test .toStringWithSourceMap() merging duplicate mappings'] = forEachNewline(function (assert, nl) {
|
|
var input = new SourceNode(null, null, null, [
|
|
new SourceNode(1, 0, "a.js", "(function"),
|
|
new SourceNode(1, 0, "a.js", "() {" + nl),
|
|
" ",
|
|
new SourceNode(1, 0, "a.js", "var Test = "),
|
|
new SourceNode(1, 0, "b.js", "{};" + nl),
|
|
new SourceNode(2, 0, "b.js", "Test"),
|
|
new SourceNode(2, 0, "b.js", ".A", "A"),
|
|
new SourceNode(2, 20, "b.js", " = { value: ", "A"),
|
|
"1234",
|
|
new SourceNode(2, 40, "b.js", " };" + nl, "A"),
|
|
"}());" + nl,
|
|
"/* Generated Source */"
|
|
]);
|
|
input = input.toStringWithSourceMap({
|
|
file: 'foo.js'
|
|
});
|
|
|
|
assert.equal(input.code, [
|
|
"(function() {",
|
|
" var Test = {};",
|
|
"Test.A = { value: 1234 };",
|
|
"}());",
|
|
"/* Generated Source */"
|
|
].join(nl))
|
|
|
|
var correctMap = new SourceMapGenerator({
|
|
file: 'foo.js'
|
|
});
|
|
correctMap.addMapping({
|
|
generated: { line: 1, column: 0 },
|
|
source: 'a.js',
|
|
original: { line: 1, column: 0 }
|
|
});
|
|
// Here is no need for a empty mapping,
|
|
// because mappings ends at eol
|
|
correctMap.addMapping({
|
|
generated: { line: 2, column: 2 },
|
|
source: 'a.js',
|
|
original: { line: 1, column: 0 }
|
|
});
|
|
correctMap.addMapping({
|
|
generated: { line: 2, column: 13 },
|
|
source: 'b.js',
|
|
original: { line: 1, column: 0 }
|
|
});
|
|
correctMap.addMapping({
|
|
generated: { line: 3, column: 0 },
|
|
source: 'b.js',
|
|
original: { line: 2, column: 0 }
|
|
});
|
|
correctMap.addMapping({
|
|
generated: { line: 3, column: 4 },
|
|
source: 'b.js',
|
|
name: 'A',
|
|
original: { line: 2, column: 0 }
|
|
});
|
|
correctMap.addMapping({
|
|
generated: { line: 3, column: 6 },
|
|
source: 'b.js',
|
|
name: 'A',
|
|
original: { line: 2, column: 20 }
|
|
});
|
|
// This empty mapping is required,
|
|
// because there is a hole in the middle of the line
|
|
correctMap.addMapping({
|
|
generated: { line: 3, column: 18 }
|
|
});
|
|
correctMap.addMapping({
|
|
generated: { line: 3, column: 22 },
|
|
source: 'b.js',
|
|
name: 'A',
|
|
original: { line: 2, column: 40 }
|
|
});
|
|
// Here is no need for a empty mapping,
|
|
// because mappings ends at eol
|
|
|
|
var inputMap = input.map.toJSON();
|
|
correctMap = correctMap.toJSON();
|
|
util.assertEqualMaps(assert, inputMap, correctMap);
|
|
});
|
|
|
|
exports['test .toStringWithSourceMap() multi-line SourceNodes'] = forEachNewline(function (assert, nl) {
|
|
var input = new SourceNode(null, null, null, [
|
|
new SourceNode(1, 0, "a.js", "(function() {" + nl + "var nextLine = 1;" + nl + "anotherLine();" + nl),
|
|
new SourceNode(2, 2, "b.js", "Test.call(this, 123);" + nl),
|
|
new SourceNode(2, 2, "b.js", "this['stuff'] = 'v';" + nl),
|
|
new SourceNode(2, 2, "b.js", "anotherLine();" + nl),
|
|
"/*" + nl + "Generated" + nl + "Source" + nl + "*/" + nl,
|
|
new SourceNode(3, 4, "c.js", "anotherLine();" + nl),
|
|
"/*" + nl + "Generated" + nl + "Source" + nl + "*/"
|
|
]);
|
|
input = input.toStringWithSourceMap({
|
|
file: 'foo.js'
|
|
});
|
|
|
|
assert.equal(input.code, [
|
|
"(function() {",
|
|
"var nextLine = 1;",
|
|
"anotherLine();",
|
|
"Test.call(this, 123);",
|
|
"this['stuff'] = 'v';",
|
|
"anotherLine();",
|
|
"/*",
|
|
"Generated",
|
|
"Source",
|
|
"*/",
|
|
"anotherLine();",
|
|
"/*",
|
|
"Generated",
|
|
"Source",
|
|
"*/"
|
|
].join(nl));
|
|
|
|
var correctMap = new SourceMapGenerator({
|
|
file: 'foo.js'
|
|
});
|
|
correctMap.addMapping({
|
|
generated: { line: 1, column: 0 },
|
|
source: 'a.js',
|
|
original: { line: 1, column: 0 }
|
|
});
|
|
correctMap.addMapping({
|
|
generated: { line: 2, column: 0 },
|
|
source: 'a.js',
|
|
original: { line: 1, column: 0 }
|
|
});
|
|
correctMap.addMapping({
|
|
generated: { line: 3, column: 0 },
|
|
source: 'a.js',
|
|
original: { line: 1, column: 0 }
|
|
});
|
|
correctMap.addMapping({
|
|
generated: { line: 4, column: 0 },
|
|
source: 'b.js',
|
|
original: { line: 2, column: 2 }
|
|
});
|
|
correctMap.addMapping({
|
|
generated: { line: 5, column: 0 },
|
|
source: 'b.js',
|
|
original: { line: 2, column: 2 }
|
|
});
|
|
correctMap.addMapping({
|
|
generated: { line: 6, column: 0 },
|
|
source: 'b.js',
|
|
original: { line: 2, column: 2 }
|
|
});
|
|
correctMap.addMapping({
|
|
generated: { line: 11, column: 0 },
|
|
source: 'c.js',
|
|
original: { line: 3, column: 4 }
|
|
});
|
|
|
|
var inputMap = input.map.toJSON();
|
|
correctMap = correctMap.toJSON();
|
|
util.assertEqualMaps(assert, inputMap, correctMap);
|
|
});
|
|
|
|
exports['test .toStringWithSourceMap() with empty string'] = function (assert) {
|
|
var node = new SourceNode(1, 0, 'empty.js', '');
|
|
var result = node.toStringWithSourceMap();
|
|
assert.equal(result.code, '');
|
|
};
|
|
|
|
exports['test .toStringWithSourceMap() with consecutive newlines'] = forEachNewline(function (assert, nl) {
|
|
var input = new SourceNode(null, null, null, [
|
|
"/***/" + nl + nl,
|
|
new SourceNode(1, 0, "a.js", "'use strict';" + nl),
|
|
new SourceNode(2, 0, "a.js", "a();"),
|
|
]);
|
|
input = input.toStringWithSourceMap({
|
|
file: 'foo.js'
|
|
});
|
|
|
|
assert.equal(input.code, [
|
|
"/***/",
|
|
"",
|
|
"'use strict';",
|
|
"a();",
|
|
].join(nl));
|
|
|
|
var correctMap = new SourceMapGenerator({
|
|
file: 'foo.js'
|
|
});
|
|
correctMap.addMapping({
|
|
generated: { line: 3, column: 0 },
|
|
source: 'a.js',
|
|
original: { line: 1, column: 0 }
|
|
});
|
|
correctMap.addMapping({
|
|
generated: { line: 4, column: 0 },
|
|
source: 'a.js',
|
|
original: { line: 2, column: 0 }
|
|
});
|
|
|
|
var inputMap = input.map.toJSON();
|
|
correctMap = correctMap.toJSON();
|
|
util.assertEqualMaps(assert, inputMap, correctMap);
|
|
});
|
|
|
|
exports['test setSourceContent with toStringWithSourceMap'] = function (assert) {
|
|
var aNode = new SourceNode(1, 1, 'a.js', 'a');
|
|
aNode.setSourceContent('a.js', 'someContent');
|
|
var node = new SourceNode(null, null, null,
|
|
['(function () {\n',
|
|
' ', aNode,
|
|
' ', new SourceNode(1, 1, 'b.js', 'b'),
|
|
'}());']);
|
|
node.setSourceContent('b.js', 'otherContent');
|
|
var map = node.toStringWithSourceMap({
|
|
file: 'foo.js'
|
|
}).map;
|
|
|
|
assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
|
|
map = new SourceMapConsumer(map.toString());
|
|
|
|
assert.equal(map.sources.length, 2);
|
|
assert.equal(map.sources[0], 'a.js');
|
|
assert.equal(map.sources[1], 'b.js');
|
|
assert.equal(map.sourcesContent.length, 2);
|
|
assert.equal(map.sourcesContent[0], 'someContent');
|
|
assert.equal(map.sourcesContent[1], 'otherContent');
|
|
};
|
|
|
|
exports['test walkSourceContents'] = function (assert) {
|
|
var aNode = new SourceNode(1, 1, 'a.js', 'a');
|
|
aNode.setSourceContent('a.js', 'someContent');
|
|
var node = new SourceNode(null, null, null,
|
|
['(function () {\n',
|
|
' ', aNode,
|
|
' ', new SourceNode(1, 1, 'b.js', 'b'),
|
|
'}());']);
|
|
node.setSourceContent('b.js', 'otherContent');
|
|
var results = [];
|
|
node.walkSourceContents(function (sourceFile, sourceContent) {
|
|
results.push([sourceFile, sourceContent]);
|
|
});
|
|
assert.equal(results.length, 2);
|
|
assert.equal(results[0][0], 'a.js');
|
|
assert.equal(results[0][1], 'someContent');
|
|
assert.equal(results[1][0], 'b.js');
|
|
assert.equal(results[1][1], 'otherContent');
|
|
};
|
|
}
|
|
|
|
|
|
/***/ },
|
|
/* 1 */
|
|
/***/ function(module, exports, __webpack_require__) {
|
|
|
|
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
/*
|
|
* Copyright 2011 Mozilla Foundation and contributors
|
|
* Licensed under the New BSD license. See LICENSE or:
|
|
* http://opensource.org/licenses/BSD-3-Clause
|
|
*/
|
|
{
|
|
var util = __webpack_require__(2);
|
|
|
|
// This is a test mapping which maps functions from two different files
|
|
// (one.js and two.js) to a minified generated source.
|
|
//
|
|
// Here is one.js:
|
|
//
|
|
// ONE.foo = function (bar) {
|
|
// return baz(bar);
|
|
// };
|
|
//
|
|
// Here is two.js:
|
|
//
|
|
// TWO.inc = function (n) {
|
|
// return n + 1;
|
|
// };
|
|
//
|
|
// And here is the generated code (min.js):
|
|
//
|
|
// ONE.foo=function(a){return baz(a);};
|
|
// TWO.inc=function(a){return a+1;};
|
|
exports.testGeneratedCode = " ONE.foo=function(a){return baz(a);};\n"+
|
|
" TWO.inc=function(a){return a+1;};";
|
|
exports.testMap = {
|
|
version: 3,
|
|
file: 'min.js',
|
|
names: ['bar', 'baz', 'n'],
|
|
sources: ['one.js', 'two.js'],
|
|
sourceRoot: '/the/root',
|
|
mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
|
|
};
|
|
exports.testMapNoSourceRoot = {
|
|
version: 3,
|
|
file: 'min.js',
|
|
names: ['bar', 'baz', 'n'],
|
|
sources: ['one.js', 'two.js'],
|
|
mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
|
|
};
|
|
exports.testMapEmptySourceRoot = {
|
|
version: 3,
|
|
file: 'min.js',
|
|
names: ['bar', 'baz', 'n'],
|
|
sources: ['one.js', 'two.js'],
|
|
sourceRoot: '',
|
|
mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
|
|
};
|
|
// This mapping is identical to above, but uses the indexed format instead.
|
|
exports.indexedTestMap = {
|
|
version: 3,
|
|
file: 'min.js',
|
|
sections: [
|
|
{
|
|
offset: {
|
|
line: 0,
|
|
column: 0
|
|
},
|
|
map: {
|
|
version: 3,
|
|
sources: [
|
|
"one.js"
|
|
],
|
|
sourcesContent: [
|
|
' ONE.foo = function (bar) {\n' +
|
|
' return baz(bar);\n' +
|
|
' };',
|
|
],
|
|
names: [
|
|
"bar",
|
|
"baz"
|
|
],
|
|
mappings: "CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID",
|
|
file: "min.js",
|
|
sourceRoot: "/the/root"
|
|
}
|
|
},
|
|
{
|
|
offset: {
|
|
line: 1,
|
|
column: 0
|
|
},
|
|
map: {
|
|
version: 3,
|
|
sources: [
|
|
"two.js"
|
|
],
|
|
sourcesContent: [
|
|
' TWO.inc = function (n) {\n' +
|
|
' return n + 1;\n' +
|
|
' };'
|
|
],
|
|
names: [
|
|
"n"
|
|
],
|
|
mappings: "CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOA",
|
|
file: "min.js",
|
|
sourceRoot: "/the/root"
|
|
}
|
|
}
|
|
]
|
|
};
|
|
exports.indexedTestMapDifferentSourceRoots = {
|
|
version: 3,
|
|
file: 'min.js',
|
|
sections: [
|
|
{
|
|
offset: {
|
|
line: 0,
|
|
column: 0
|
|
},
|
|
map: {
|
|
version: 3,
|
|
sources: [
|
|
"one.js"
|
|
],
|
|
sourcesContent: [
|
|
' ONE.foo = function (bar) {\n' +
|
|
' return baz(bar);\n' +
|
|
' };',
|
|
],
|
|
names: [
|
|
"bar",
|
|
"baz"
|
|
],
|
|
mappings: "CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID",
|
|
file: "min.js",
|
|
sourceRoot: "/the/root"
|
|
}
|
|
},
|
|
{
|
|
offset: {
|
|
line: 1,
|
|
column: 0
|
|
},
|
|
map: {
|
|
version: 3,
|
|
sources: [
|
|
"two.js"
|
|
],
|
|
sourcesContent: [
|
|
' TWO.inc = function (n) {\n' +
|
|
' return n + 1;\n' +
|
|
' };'
|
|
],
|
|
names: [
|
|
"n"
|
|
],
|
|
mappings: "CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOA",
|
|
file: "min.js",
|
|
sourceRoot: "/different/root"
|
|
}
|
|
}
|
|
]
|
|
};
|
|
exports.testMapWithSourcesContent = {
|
|
version: 3,
|
|
file: 'min.js',
|
|
names: ['bar', 'baz', 'n'],
|
|
sources: ['one.js', 'two.js'],
|
|
sourcesContent: [
|
|
' ONE.foo = function (bar) {\n' +
|
|
' return baz(bar);\n' +
|
|
' };',
|
|
' TWO.inc = function (n) {\n' +
|
|
' return n + 1;\n' +
|
|
' };'
|
|
],
|
|
sourceRoot: '/the/root',
|
|
mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
|
|
};
|
|
exports.testMapRelativeSources = {
|
|
version: 3,
|
|
file: 'min.js',
|
|
names: ['bar', 'baz', 'n'],
|
|
sources: ['./one.js', './two.js'],
|
|
sourcesContent: [
|
|
' ONE.foo = function (bar) {\n' +
|
|
' return baz(bar);\n' +
|
|
' };',
|
|
' TWO.inc = function (n) {\n' +
|
|
' return n + 1;\n' +
|
|
' };'
|
|
],
|
|
sourceRoot: '/the/root',
|
|
mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
|
|
};
|
|
exports.emptyMap = {
|
|
version: 3,
|
|
file: 'min.js',
|
|
names: [],
|
|
sources: [],
|
|
mappings: ''
|
|
};
|
|
|
|
|
|
function assertMapping(generatedLine, generatedColumn, originalSource,
|
|
originalLine, originalColumn, name, bias, map, assert,
|
|
dontTestGenerated, dontTestOriginal) {
|
|
if (!dontTestOriginal) {
|
|
var origMapping = map.originalPositionFor({
|
|
line: generatedLine,
|
|
column: generatedColumn,
|
|
bias: bias
|
|
});
|
|
assert.equal(origMapping.name, name,
|
|
'Incorrect name, expected ' + JSON.stringify(name)
|
|
+ ', got ' + JSON.stringify(origMapping.name));
|
|
assert.equal(origMapping.line, originalLine,
|
|
'Incorrect line, expected ' + JSON.stringify(originalLine)
|
|
+ ', got ' + JSON.stringify(origMapping.line));
|
|
assert.equal(origMapping.column, originalColumn,
|
|
'Incorrect column, expected ' + JSON.stringify(originalColumn)
|
|
+ ', got ' + JSON.stringify(origMapping.column));
|
|
|
|
var expectedSource;
|
|
|
|
if (originalSource && map.sourceRoot && originalSource.indexOf(map.sourceRoot) === 0) {
|
|
expectedSource = originalSource;
|
|
} else if (originalSource) {
|
|
expectedSource = map.sourceRoot
|
|
? util.join(map.sourceRoot, originalSource)
|
|
: originalSource;
|
|
} else {
|
|
expectedSource = null;
|
|
}
|
|
|
|
assert.equal(origMapping.source, expectedSource,
|
|
'Incorrect source, expected ' + JSON.stringify(expectedSource)
|
|
+ ', got ' + JSON.stringify(origMapping.source));
|
|
}
|
|
|
|
if (!dontTestGenerated) {
|
|
var genMapping = map.generatedPositionFor({
|
|
source: originalSource,
|
|
line: originalLine,
|
|
column: originalColumn,
|
|
bias: bias
|
|
});
|
|
assert.equal(genMapping.line, generatedLine,
|
|
'Incorrect line, expected ' + JSON.stringify(generatedLine)
|
|
+ ', got ' + JSON.stringify(genMapping.line));
|
|
assert.equal(genMapping.column, generatedColumn,
|
|
'Incorrect column, expected ' + JSON.stringify(generatedColumn)
|
|
+ ', got ' + JSON.stringify(genMapping.column));
|
|
}
|
|
}
|
|
exports.assertMapping = assertMapping;
|
|
|
|
function assertEqualMaps(assert, actualMap, expectedMap) {
|
|
assert.equal(actualMap.version, expectedMap.version, "version mismatch");
|
|
assert.equal(actualMap.file, expectedMap.file, "file mismatch");
|
|
assert.equal(actualMap.names.length,
|
|
expectedMap.names.length,
|
|
"names length mismatch: " +
|
|
actualMap.names.join(", ") + " != " + expectedMap.names.join(", "));
|
|
for (var i = 0; i < actualMap.names.length; i++) {
|
|
assert.equal(actualMap.names[i],
|
|
expectedMap.names[i],
|
|
"names[" + i + "] mismatch: " +
|
|
actualMap.names.join(", ") + " != " + expectedMap.names.join(", "));
|
|
}
|
|
assert.equal(actualMap.sources.length,
|
|
expectedMap.sources.length,
|
|
"sources length mismatch: " +
|
|
actualMap.sources.join(", ") + " != " + expectedMap.sources.join(", "));
|
|
for (var i = 0; i < actualMap.sources.length; i++) {
|
|
assert.equal(actualMap.sources[i],
|
|
expectedMap.sources[i],
|
|
"sources[" + i + "] length mismatch: " +
|
|
actualMap.sources.join(", ") + " != " + expectedMap.sources.join(", "));
|
|
}
|
|
assert.equal(actualMap.sourceRoot,
|
|
expectedMap.sourceRoot,
|
|
"sourceRoot mismatch: " +
|
|
actualMap.sourceRoot + " != " + expectedMap.sourceRoot);
|
|
assert.equal(actualMap.mappings, expectedMap.mappings,
|
|
"mappings mismatch:\nActual: " + actualMap.mappings + "\nExpected: " + expectedMap.mappings);
|
|
if (actualMap.sourcesContent) {
|
|
assert.equal(actualMap.sourcesContent.length,
|
|
expectedMap.sourcesContent.length,
|
|
"sourcesContent length mismatch");
|
|
for (var i = 0; i < actualMap.sourcesContent.length; i++) {
|
|
assert.equal(actualMap.sourcesContent[i],
|
|
expectedMap.sourcesContent[i],
|
|
"sourcesContent[" + i + "] mismatch");
|
|
}
|
|
}
|
|
}
|
|
exports.assertEqualMaps = assertEqualMaps;
|
|
}
|
|
|
|
|
|
/***/ },
|
|
/* 2 */
|
|
/***/ function(module, exports) {
|
|
|
|
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
/*
|
|
* Copyright 2011 Mozilla Foundation and contributors
|
|
* Licensed under the New BSD license. See LICENSE or:
|
|
* http://opensource.org/licenses/BSD-3-Clause
|
|
*/
|
|
{
|
|
/**
|
|
* This is a helper function for getting values from parameter/options
|
|
* objects.
|
|
*
|
|
* @param args The object we are extracting values from
|
|
* @param name The name of the property we are getting.
|
|
* @param defaultValue An optional value to return if the property is missing
|
|
* from the object. If this is not specified and the property is missing, an
|
|
* error will be thrown.
|
|
*/
|
|
function getArg(aArgs, aName, aDefaultValue) {
|
|
if (aName in aArgs) {
|
|
return aArgs[aName];
|
|
} else if (arguments.length === 3) {
|
|
return aDefaultValue;
|
|
} else {
|
|
throw new Error('"' + aName + '" is a required argument.');
|
|
}
|
|
}
|
|
exports.getArg = getArg;
|
|
|
|
var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/;
|
|
var dataUrlRegexp = /^data:.+\,.+$/;
|
|
|
|
function urlParse(aUrl) {
|
|
var match = aUrl.match(urlRegexp);
|
|
if (!match) {
|
|
return null;
|
|
}
|
|
return {
|
|
scheme: match[1],
|
|
auth: match[2],
|
|
host: match[3],
|
|
port: match[4],
|
|
path: match[5]
|
|
};
|
|
}
|
|
exports.urlParse = urlParse;
|
|
|
|
function urlGenerate(aParsedUrl) {
|
|
var url = '';
|
|
if (aParsedUrl.scheme) {
|
|
url += aParsedUrl.scheme + ':';
|
|
}
|
|
url += '//';
|
|
if (aParsedUrl.auth) {
|
|
url += aParsedUrl.auth + '@';
|
|
}
|
|
if (aParsedUrl.host) {
|
|
url += aParsedUrl.host;
|
|
}
|
|
if (aParsedUrl.port) {
|
|
url += ":" + aParsedUrl.port
|
|
}
|
|
if (aParsedUrl.path) {
|
|
url += aParsedUrl.path;
|
|
}
|
|
return url;
|
|
}
|
|
exports.urlGenerate = urlGenerate;
|
|
|
|
/**
|
|
* Normalizes a path, or the path portion of a URL:
|
|
*
|
|
* - Replaces consequtive slashes with one slash.
|
|
* - Removes unnecessary '.' parts.
|
|
* - Removes unnecessary '<dir>/..' parts.
|
|
*
|
|
* Based on code in the Node.js 'path' core module.
|
|
*
|
|
* @param aPath The path or url to normalize.
|
|
*/
|
|
function normalize(aPath) {
|
|
var path = aPath;
|
|
var url = urlParse(aPath);
|
|
if (url) {
|
|
if (!url.path) {
|
|
return aPath;
|
|
}
|
|
path = url.path;
|
|
}
|
|
var isAbsolute = exports.isAbsolute(path);
|
|
|
|
var parts = path.split(/\/+/);
|
|
for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
|
|
part = parts[i];
|
|
if (part === '.') {
|
|
parts.splice(i, 1);
|
|
} else if (part === '..') {
|
|
up++;
|
|
} else if (up > 0) {
|
|
if (part === '') {
|
|
// The first part is blank if the path is absolute. Trying to go
|
|
// above the root is a no-op. Therefore we can remove all '..' parts
|
|
// directly after the root.
|
|
parts.splice(i + 1, up);
|
|
up = 0;
|
|
} else {
|
|
parts.splice(i, 2);
|
|
up--;
|
|
}
|
|
}
|
|
}
|
|
path = parts.join('/');
|
|
|
|
if (path === '') {
|
|
path = isAbsolute ? '/' : '.';
|
|
}
|
|
|
|
if (url) {
|
|
url.path = path;
|
|
return urlGenerate(url);
|
|
}
|
|
return path;
|
|
}
|
|
exports.normalize = normalize;
|
|
|
|
/**
|
|
* Joins two paths/URLs.
|
|
*
|
|
* @param aRoot The root path or URL.
|
|
* @param aPath The path or URL to be joined with the root.
|
|
*
|
|
* - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
|
|
* scheme-relative URL: Then the scheme of aRoot, if any, is prepended
|
|
* first.
|
|
* - Otherwise aPath is a path. If aRoot is a URL, then its path portion
|
|
* is updated with the result and aRoot is returned. Otherwise the result
|
|
* is returned.
|
|
* - If aPath is absolute, the result is aPath.
|
|
* - Otherwise the two paths are joined with a slash.
|
|
* - Joining for example 'http://' and 'www.example.com' is also supported.
|
|
*/
|
|
function join(aRoot, aPath) {
|
|
if (aRoot === "") {
|
|
aRoot = ".";
|
|
}
|
|
if (aPath === "") {
|
|
aPath = ".";
|
|
}
|
|
var aPathUrl = urlParse(aPath);
|
|
var aRootUrl = urlParse(aRoot);
|
|
if (aRootUrl) {
|
|
aRoot = aRootUrl.path || '/';
|
|
}
|
|
|
|
// `join(foo, '//www.example.org')`
|
|
if (aPathUrl && !aPathUrl.scheme) {
|
|
if (aRootUrl) {
|
|
aPathUrl.scheme = aRootUrl.scheme;
|
|
}
|
|
return urlGenerate(aPathUrl);
|
|
}
|
|
|
|
if (aPathUrl || aPath.match(dataUrlRegexp)) {
|
|
return aPath;
|
|
}
|
|
|
|
// `join('http://', 'www.example.com')`
|
|
if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
|
|
aRootUrl.host = aPath;
|
|
return urlGenerate(aRootUrl);
|
|
}
|
|
|
|
var joined = aPath.charAt(0) === '/'
|
|
? aPath
|
|
: normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
|
|
|
|
if (aRootUrl) {
|
|
aRootUrl.path = joined;
|
|
return urlGenerate(aRootUrl);
|
|
}
|
|
return joined;
|
|
}
|
|
exports.join = join;
|
|
|
|
exports.isAbsolute = function (aPath) {
|
|
return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);
|
|
};
|
|
|
|
/**
|
|
* Make a path relative to a URL or another path.
|
|
*
|
|
* @param aRoot The root path or URL.
|
|
* @param aPath The path or URL to be made relative to aRoot.
|
|
*/
|
|
function relative(aRoot, aPath) {
|
|
if (aRoot === "") {
|
|
aRoot = ".";
|
|
}
|
|
|
|
aRoot = aRoot.replace(/\/$/, '');
|
|
|
|
// It is possible for the path to be above the root. In this case, simply
|
|
// checking whether the root is a prefix of the path won't work. Instead, we
|
|
// need to remove components from the root one by one, until either we find
|
|
// a prefix that fits, or we run out of components to remove.
|
|
var level = 0;
|
|
while (aPath.indexOf(aRoot + '/') !== 0) {
|
|
var index = aRoot.lastIndexOf("/");
|
|
if (index < 0) {
|
|
return aPath;
|
|
}
|
|
|
|
// If the only part of the root that is left is the scheme (i.e. http://,
|
|
// file:///, etc.), one or more slashes (/), or simply nothing at all, we
|
|
// have exhausted all components, so the path is not relative to the root.
|
|
aRoot = aRoot.slice(0, index);
|
|
if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
|
|
return aPath;
|
|
}
|
|
|
|
++level;
|
|
}
|
|
|
|
// Make sure we add a "../" for each component we removed from the root.
|
|
return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
|
|
}
|
|
exports.relative = relative;
|
|
|
|
/**
|
|
* Because behavior goes wacky when you set `__proto__` on objects, we
|
|
* have to prefix all the strings in our set with an arbitrary character.
|
|
*
|
|
* See https://github.com/mozilla/source-map/pull/31 and
|
|
* https://github.com/mozilla/source-map/issues/30
|
|
*
|
|
* @param String aStr
|
|
*/
|
|
function toSetString(aStr) {
|
|
return '$' + aStr;
|
|
}
|
|
exports.toSetString = toSetString;
|
|
|
|
function fromSetString(aStr) {
|
|
return aStr.substr(1);
|
|
}
|
|
exports.fromSetString = fromSetString;
|
|
|
|
/**
|
|
* Comparator between two mappings where the original positions are compared.
|
|
*
|
|
* Optionally pass in `true` as `onlyCompareGenerated` to consider two
|
|
* mappings with the same original source/line/column, but different generated
|
|
* line and column the same. Useful when searching for a mapping with a
|
|
* stubbed out mapping.
|
|
*/
|
|
function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
|
|
var cmp = mappingA.source - mappingB.source;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
|
|
cmp = mappingA.originalLine - mappingB.originalLine;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
|
|
cmp = mappingA.originalColumn - mappingB.originalColumn;
|
|
if (cmp !== 0 || onlyCompareOriginal) {
|
|
return cmp;
|
|
}
|
|
|
|
cmp = mappingA.generatedColumn - mappingB.generatedColumn;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
|
|
cmp = mappingA.generatedLine - mappingB.generatedLine;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
|
|
return mappingA.name - mappingB.name;
|
|
}
|
|
exports.compareByOriginalPositions = compareByOriginalPositions;
|
|
|
|
/**
|
|
* Comparator between two mappings with deflated source and name indices where
|
|
* the generated positions are compared.
|
|
*
|
|
* Optionally pass in `true` as `onlyCompareGenerated` to consider two
|
|
* mappings with the same generated line and column, but different
|
|
* source/name/original line and column the same. Useful when searching for a
|
|
* mapping with a stubbed out mapping.
|
|
*/
|
|
function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
|
|
var cmp = mappingA.generatedLine - mappingB.generatedLine;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
|
|
cmp = mappingA.generatedColumn - mappingB.generatedColumn;
|
|
if (cmp !== 0 || onlyCompareGenerated) {
|
|
return cmp;
|
|
}
|
|
|
|
cmp = mappingA.source - mappingB.source;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
|
|
cmp = mappingA.originalLine - mappingB.originalLine;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
|
|
cmp = mappingA.originalColumn - mappingB.originalColumn;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
|
|
return mappingA.name - mappingB.name;
|
|
}
|
|
exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
|
|
|
|
function strcmp(aStr1, aStr2) {
|
|
if (aStr1 === aStr2) {
|
|
return 0;
|
|
}
|
|
|
|
if (aStr1 > aStr2) {
|
|
return 1;
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
/**
|
|
* Comparator between two mappings with inflated source and name strings where
|
|
* the generated positions are compared.
|
|
*/
|
|
function compareByGeneratedPositionsInflated(mappingA, mappingB) {
|
|
var cmp = mappingA.generatedLine - mappingB.generatedLine;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
|
|
cmp = mappingA.generatedColumn - mappingB.generatedColumn;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
|
|
cmp = strcmp(mappingA.source, mappingB.source);
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
|
|
cmp = mappingA.originalLine - mappingB.originalLine;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
|
|
cmp = mappingA.originalColumn - mappingB.originalColumn;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
|
|
return strcmp(mappingA.name, mappingB.name);
|
|
}
|
|
exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
|
|
}
|
|
|
|
|
|
/***/ },
|
|
/* 3 */
|
|
/***/ function(module, exports, __webpack_require__) {
|
|
|
|
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
/*
|
|
* Copyright 2011 Mozilla Foundation and contributors
|
|
* Licensed under the New BSD license. See LICENSE or:
|
|
* http://opensource.org/licenses/BSD-3-Clause
|
|
*/
|
|
{
|
|
var base64VLQ = __webpack_require__(4);
|
|
var util = __webpack_require__(2);
|
|
var ArraySet = __webpack_require__(6).ArraySet;
|
|
var MappingList = __webpack_require__(7).MappingList;
|
|
|
|
/**
|
|
* An instance of the SourceMapGenerator represents a source map which is
|
|
* being built incrementally. You may pass an object with the following
|
|
* properties:
|
|
*
|
|
* - file: The filename of the generated source.
|
|
* - sourceRoot: A root for all relative URLs in this source map.
|
|
*/
|
|
function SourceMapGenerator(aArgs) {
|
|
if (!aArgs) {
|
|
aArgs = {};
|
|
}
|
|
this._file = util.getArg(aArgs, 'file', null);
|
|
this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
|
|
this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
|
|
this._sources = new ArraySet();
|
|
this._names = new ArraySet();
|
|
this._mappings = new MappingList();
|
|
this._sourcesContents = null;
|
|
}
|
|
|
|
SourceMapGenerator.prototype._version = 3;
|
|
|
|
/**
|
|
* Creates a new SourceMapGenerator based on a SourceMapConsumer
|
|
*
|
|
* @param aSourceMapConsumer The SourceMap.
|
|
*/
|
|
SourceMapGenerator.fromSourceMap =
|
|
function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
|
|
var sourceRoot = aSourceMapConsumer.sourceRoot;
|
|
var generator = new SourceMapGenerator({
|
|
file: aSourceMapConsumer.file,
|
|
sourceRoot: sourceRoot
|
|
});
|
|
aSourceMapConsumer.eachMapping(function (mapping) {
|
|
var newMapping = {
|
|
generated: {
|
|
line: mapping.generatedLine,
|
|
column: mapping.generatedColumn
|
|
}
|
|
};
|
|
|
|
if (mapping.source != null) {
|
|
newMapping.source = mapping.source;
|
|
if (sourceRoot != null) {
|
|
newMapping.source = util.relative(sourceRoot, newMapping.source);
|
|
}
|
|
|
|
newMapping.original = {
|
|
line: mapping.originalLine,
|
|
column: mapping.originalColumn
|
|
};
|
|
|
|
if (mapping.name != null) {
|
|
newMapping.name = mapping.name;
|
|
}
|
|
}
|
|
|
|
generator.addMapping(newMapping);
|
|
});
|
|
aSourceMapConsumer.sources.forEach(function (sourceFile) {
|
|
var content = aSourceMapConsumer.sourceContentFor(sourceFile);
|
|
if (content != null) {
|
|
generator.setSourceContent(sourceFile, content);
|
|
}
|
|
});
|
|
return generator;
|
|
};
|
|
|
|
/**
|
|
* Add a single mapping from original source line and column to the generated
|
|
* source's line and column for this source map being created. The mapping
|
|
* object should have the following properties:
|
|
*
|
|
* - generated: An object with the generated line and column positions.
|
|
* - original: An object with the original line and column positions.
|
|
* - source: The original source file (relative to the sourceRoot).
|
|
* - name: An optional original token name for this mapping.
|
|
*/
|
|
SourceMapGenerator.prototype.addMapping =
|
|
function SourceMapGenerator_addMapping(aArgs) {
|
|
var generated = util.getArg(aArgs, 'generated');
|
|
var original = util.getArg(aArgs, 'original', null);
|
|
var source = util.getArg(aArgs, 'source', null);
|
|
var name = util.getArg(aArgs, 'name', null);
|
|
|
|
if (!this._skipValidation) {
|
|
this._validateMapping(generated, original, source, name);
|
|
}
|
|
|
|
if (source != null && !this._sources.has(source)) {
|
|
this._sources.add(source);
|
|
}
|
|
|
|
if (name != null && !this._names.has(name)) {
|
|
this._names.add(name);
|
|
}
|
|
|
|
this._mappings.add({
|
|
generatedLine: generated.line,
|
|
generatedColumn: generated.column,
|
|
originalLine: original != null && original.line,
|
|
originalColumn: original != null && original.column,
|
|
source: source,
|
|
name: name
|
|
});
|
|
};
|
|
|
|
/**
|
|
* Set the source content for a source file.
|
|
*/
|
|
SourceMapGenerator.prototype.setSourceContent =
|
|
function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
|
|
var source = aSourceFile;
|
|
if (this._sourceRoot != null) {
|
|
source = util.relative(this._sourceRoot, source);
|
|
}
|
|
|
|
if (aSourceContent != null) {
|
|
// Add the source content to the _sourcesContents map.
|
|
// Create a new _sourcesContents map if the property is null.
|
|
if (!this._sourcesContents) {
|
|
this._sourcesContents = {};
|
|
}
|
|
this._sourcesContents[util.toSetString(source)] = aSourceContent;
|
|
} else if (this._sourcesContents) {
|
|
// Remove the source file from the _sourcesContents map.
|
|
// If the _sourcesContents map is empty, set the property to null.
|
|
delete this._sourcesContents[util.toSetString(source)];
|
|
if (Object.keys(this._sourcesContents).length === 0) {
|
|
this._sourcesContents = null;
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Applies the mappings of a sub-source-map for a specific source file to the
|
|
* source map being generated. Each mapping to the supplied source file is
|
|
* rewritten using the supplied source map. Note: The resolution for the
|
|
* resulting mappings is the minimium of this map and the supplied map.
|
|
*
|
|
* @param aSourceMapConsumer The source map to be applied.
|
|
* @param aSourceFile Optional. The filename of the source file.
|
|
* If omitted, SourceMapConsumer's file property will be used.
|
|
* @param aSourceMapPath Optional. The dirname of the path to the source map
|
|
* to be applied. If relative, it is relative to the SourceMapConsumer.
|
|
* This parameter is needed when the two source maps aren't in the same
|
|
* directory, and the source map to be applied contains relative source
|
|
* paths. If so, those relative source paths need to be rewritten
|
|
* relative to the SourceMapGenerator.
|
|
*/
|
|
SourceMapGenerator.prototype.applySourceMap =
|
|
function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
|
|
var sourceFile = aSourceFile;
|
|
// If aSourceFile is omitted, we will use the file property of the SourceMap
|
|
if (aSourceFile == null) {
|
|
if (aSourceMapConsumer.file == null) {
|
|
throw new Error(
|
|
'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
|
|
'or the source map\'s "file" property. Both were omitted.'
|
|
);
|
|
}
|
|
sourceFile = aSourceMapConsumer.file;
|
|
}
|
|
var sourceRoot = this._sourceRoot;
|
|
// Make "sourceFile" relative if an absolute Url is passed.
|
|
if (sourceRoot != null) {
|
|
sourceFile = util.relative(sourceRoot, sourceFile);
|
|
}
|
|
// Applying the SourceMap can add and remove items from the sources and
|
|
// the names array.
|
|
var newSources = new ArraySet();
|
|
var newNames = new ArraySet();
|
|
|
|
// Find mappings for the "sourceFile"
|
|
this._mappings.unsortedForEach(function (mapping) {
|
|
if (mapping.source === sourceFile && mapping.originalLine != null) {
|
|
// Check if it can be mapped by the source map, then update the mapping.
|
|
var original = aSourceMapConsumer.originalPositionFor({
|
|
line: mapping.originalLine,
|
|
column: mapping.originalColumn
|
|
});
|
|
if (original.source != null) {
|
|
// Copy mapping
|
|
mapping.source = original.source;
|
|
if (aSourceMapPath != null) {
|
|
mapping.source = util.join(aSourceMapPath, mapping.source)
|
|
}
|
|
if (sourceRoot != null) {
|
|
mapping.source = util.relative(sourceRoot, mapping.source);
|
|
}
|
|
mapping.originalLine = original.line;
|
|
mapping.originalColumn = original.column;
|
|
if (original.name != null) {
|
|
mapping.name = original.name;
|
|
}
|
|
}
|
|
}
|
|
|
|
var source = mapping.source;
|
|
if (source != null && !newSources.has(source)) {
|
|
newSources.add(source);
|
|
}
|
|
|
|
var name = mapping.name;
|
|
if (name != null && !newNames.has(name)) {
|
|
newNames.add(name);
|
|
}
|
|
|
|
}, this);
|
|
this._sources = newSources;
|
|
this._names = newNames;
|
|
|
|
// Copy sourcesContents of applied map.
|
|
aSourceMapConsumer.sources.forEach(function (sourceFile) {
|
|
var content = aSourceMapConsumer.sourceContentFor(sourceFile);
|
|
if (content != null) {
|
|
if (aSourceMapPath != null) {
|
|
sourceFile = util.join(aSourceMapPath, sourceFile);
|
|
}
|
|
if (sourceRoot != null) {
|
|
sourceFile = util.relative(sourceRoot, sourceFile);
|
|
}
|
|
this.setSourceContent(sourceFile, content);
|
|
}
|
|
}, this);
|
|
};
|
|
|
|
/**
|
|
* A mapping can have one of the three levels of data:
|
|
*
|
|
* 1. Just the generated position.
|
|
* 2. The Generated position, original position, and original source.
|
|
* 3. Generated and original position, original source, as well as a name
|
|
* token.
|
|
*
|
|
* To maintain consistency, we validate that any new mapping being added falls
|
|
* in to one of these categories.
|
|
*/
|
|
SourceMapGenerator.prototype._validateMapping =
|
|
function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
|
|
aName) {
|
|
if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
|
|
&& aGenerated.line > 0 && aGenerated.column >= 0
|
|
&& !aOriginal && !aSource && !aName) {
|
|
// Case 1.
|
|
return;
|
|
}
|
|
else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
|
|
&& aOriginal && 'line' in aOriginal && 'column' in aOriginal
|
|
&& aGenerated.line > 0 && aGenerated.column >= 0
|
|
&& aOriginal.line > 0 && aOriginal.column >= 0
|
|
&& aSource) {
|
|
// Cases 2 and 3.
|
|
return;
|
|
}
|
|
else {
|
|
throw new Error('Invalid mapping: ' + JSON.stringify({
|
|
generated: aGenerated,
|
|
source: aSource,
|
|
original: aOriginal,
|
|
name: aName
|
|
}));
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Serialize the accumulated mappings in to the stream of base 64 VLQs
|
|
* specified by the source map format.
|
|
*/
|
|
SourceMapGenerator.prototype._serializeMappings =
|
|
function SourceMapGenerator_serializeMappings() {
|
|
var previousGeneratedColumn = 0;
|
|
var previousGeneratedLine = 1;
|
|
var previousOriginalColumn = 0;
|
|
var previousOriginalLine = 0;
|
|
var previousName = 0;
|
|
var previousSource = 0;
|
|
var result = '';
|
|
var mapping;
|
|
var nameIdx;
|
|
var sourceIdx;
|
|
|
|
var mappings = this._mappings.toArray();
|
|
for (var i = 0, len = mappings.length; i < len; i++) {
|
|
mapping = mappings[i];
|
|
|
|
if (mapping.generatedLine !== previousGeneratedLine) {
|
|
previousGeneratedColumn = 0;
|
|
while (mapping.generatedLine !== previousGeneratedLine) {
|
|
result += ';';
|
|
previousGeneratedLine++;
|
|
}
|
|
}
|
|
else {
|
|
if (i > 0) {
|
|
if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
|
|
continue;
|
|
}
|
|
result += ',';
|
|
}
|
|
}
|
|
|
|
result += base64VLQ.encode(mapping.generatedColumn
|
|
- previousGeneratedColumn);
|
|
previousGeneratedColumn = mapping.generatedColumn;
|
|
|
|
if (mapping.source != null) {
|
|
sourceIdx = this._sources.indexOf(mapping.source);
|
|
result += base64VLQ.encode(sourceIdx - previousSource);
|
|
previousSource = sourceIdx;
|
|
|
|
// lines are stored 0-based in SourceMap spec version 3
|
|
result += base64VLQ.encode(mapping.originalLine - 1
|
|
- previousOriginalLine);
|
|
previousOriginalLine = mapping.originalLine - 1;
|
|
|
|
result += base64VLQ.encode(mapping.originalColumn
|
|
- previousOriginalColumn);
|
|
previousOriginalColumn = mapping.originalColumn;
|
|
|
|
if (mapping.name != null) {
|
|
nameIdx = this._names.indexOf(mapping.name);
|
|
result += base64VLQ.encode(nameIdx - previousName);
|
|
previousName = nameIdx;
|
|
}
|
|
}
|
|
}
|
|
|
|
return result;
|
|
};
|
|
|
|
SourceMapGenerator.prototype._generateSourcesContent =
|
|
function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
|
|
return aSources.map(function (source) {
|
|
if (!this._sourcesContents) {
|
|
return null;
|
|
}
|
|
if (aSourceRoot != null) {
|
|
source = util.relative(aSourceRoot, source);
|
|
}
|
|
var key = util.toSetString(source);
|
|
return Object.prototype.hasOwnProperty.call(this._sourcesContents,
|
|
key)
|
|
? this._sourcesContents[key]
|
|
: null;
|
|
}, this);
|
|
};
|
|
|
|
/**
|
|
* Externalize the source map.
|
|
*/
|
|
SourceMapGenerator.prototype.toJSON =
|
|
function SourceMapGenerator_toJSON() {
|
|
var map = {
|
|
version: this._version,
|
|
sources: this._sources.toArray(),
|
|
names: this._names.toArray(),
|
|
mappings: this._serializeMappings()
|
|
};
|
|
if (this._file != null) {
|
|
map.file = this._file;
|
|
}
|
|
if (this._sourceRoot != null) {
|
|
map.sourceRoot = this._sourceRoot;
|
|
}
|
|
if (this._sourcesContents) {
|
|
map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
|
|
}
|
|
|
|
return map;
|
|
};
|
|
|
|
/**
|
|
* Render the source map being generated to a string.
|
|
*/
|
|
SourceMapGenerator.prototype.toString =
|
|
function SourceMapGenerator_toString() {
|
|
return JSON.stringify(this.toJSON());
|
|
};
|
|
|
|
exports.SourceMapGenerator = SourceMapGenerator;
|
|
}
|
|
|
|
|
|
/***/ },
|
|
/* 4 */
|
|
/***/ function(module, exports, __webpack_require__) {
|
|
|
|
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
/*
|
|
* Copyright 2011 Mozilla Foundation and contributors
|
|
* Licensed under the New BSD license. See LICENSE or:
|
|
* http://opensource.org/licenses/BSD-3-Clause
|
|
*
|
|
* Based on the Base 64 VLQ implementation in Closure Compiler:
|
|
* https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
|
|
*
|
|
* Copyright 2011 The Closure Compiler Authors. All rights reserved.
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are
|
|
* met:
|
|
*
|
|
* * Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* * Redistributions in binary form must reproduce the above
|
|
* copyright notice, this list of conditions and the following
|
|
* disclaimer in the documentation and/or other materials provided
|
|
* with the distribution.
|
|
* * Neither the name of Google Inc. nor the names of its
|
|
* contributors may be used to endorse or promote products derived
|
|
* from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
{
|
|
var base64 = __webpack_require__(5);
|
|
|
|
// A single base 64 digit can contain 6 bits of data. For the base 64 variable
|
|
// length quantities we use in the source map spec, the first bit is the sign,
|
|
// the next four bits are the actual value, and the 6th bit is the
|
|
// continuation bit. The continuation bit tells us whether there are more
|
|
// digits in this value following this digit.
|
|
//
|
|
// Continuation
|
|
// | Sign
|
|
// | |
|
|
// V V
|
|
// 101011
|
|
|
|
var VLQ_BASE_SHIFT = 5;
|
|
|
|
// binary: 100000
|
|
var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
|
|
|
|
// binary: 011111
|
|
var VLQ_BASE_MASK = VLQ_BASE - 1;
|
|
|
|
// binary: 100000
|
|
var VLQ_CONTINUATION_BIT = VLQ_BASE;
|
|
|
|
/**
|
|
* Converts from a two-complement value to a value where the sign bit is
|
|
* placed in the least significant bit. For example, as decimals:
|
|
* 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
|
|
* 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
|
|
*/
|
|
function toVLQSigned(aValue) {
|
|
return aValue < 0
|
|
? ((-aValue) << 1) + 1
|
|
: (aValue << 1) + 0;
|
|
}
|
|
|
|
/**
|
|
* Converts to a two-complement value from a value where the sign bit is
|
|
* placed in the least significant bit. For example, as decimals:
|
|
* 2 (10 binary) becomes 1, 3 (11 binary) becomes -1
|
|
* 4 (100 binary) becomes 2, 5 (101 binary) becomes -2
|
|
*/
|
|
function fromVLQSigned(aValue) {
|
|
var isNegative = (aValue & 1) === 1;
|
|
var shifted = aValue >> 1;
|
|
return isNegative
|
|
? -shifted
|
|
: shifted;
|
|
}
|
|
|
|
/**
|
|
* Returns the base 64 VLQ encoded value.
|
|
*/
|
|
exports.encode = function base64VLQ_encode(aValue) {
|
|
var encoded = "";
|
|
var digit;
|
|
|
|
var vlq = toVLQSigned(aValue);
|
|
|
|
do {
|
|
digit = vlq & VLQ_BASE_MASK;
|
|
vlq >>>= VLQ_BASE_SHIFT;
|
|
if (vlq > 0) {
|
|
// There are still more digits in this value, so we must make sure the
|
|
// continuation bit is marked.
|
|
digit |= VLQ_CONTINUATION_BIT;
|
|
}
|
|
encoded += base64.encode(digit);
|
|
} while (vlq > 0);
|
|
|
|
return encoded;
|
|
};
|
|
|
|
/**
|
|
* Decodes the next base 64 VLQ value from the given string and returns the
|
|
* value and the rest of the string via the out parameter.
|
|
*/
|
|
exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
|
|
var strLen = aStr.length;
|
|
var result = 0;
|
|
var shift = 0;
|
|
var continuation, digit;
|
|
|
|
do {
|
|
if (aIndex >= strLen) {
|
|
throw new Error("Expected more digits in base 64 VLQ value.");
|
|
}
|
|
|
|
digit = base64.decode(aStr.charCodeAt(aIndex++));
|
|
if (digit === -1) {
|
|
throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
|
|
}
|
|
|
|
continuation = !!(digit & VLQ_CONTINUATION_BIT);
|
|
digit &= VLQ_BASE_MASK;
|
|
result = result + (digit << shift);
|
|
shift += VLQ_BASE_SHIFT;
|
|
} while (continuation);
|
|
|
|
aOutParam.value = fromVLQSigned(result);
|
|
aOutParam.rest = aIndex;
|
|
};
|
|
}
|
|
|
|
|
|
/***/ },
|
|
/* 5 */
|
|
/***/ function(module, exports) {
|
|
|
|
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
/*
|
|
* Copyright 2011 Mozilla Foundation and contributors
|
|
* Licensed under the New BSD license. See LICENSE or:
|
|
* http://opensource.org/licenses/BSD-3-Clause
|
|
*/
|
|
{
|
|
var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
|
|
|
|
/**
|
|
* Encode an integer in the range of 0 to 63 to a single base 64 digit.
|
|
*/
|
|
exports.encode = function (number) {
|
|
if (0 <= number && number < intToCharMap.length) {
|
|
return intToCharMap[number];
|
|
}
|
|
throw new TypeError("Must be between 0 and 63: " + number);
|
|
};
|
|
|
|
/**
|
|
* Decode a single base 64 character code digit to an integer. Returns -1 on
|
|
* failure.
|
|
*/
|
|
exports.decode = function (charCode) {
|
|
var bigA = 65; // 'A'
|
|
var bigZ = 90; // 'Z'
|
|
|
|
var littleA = 97; // 'a'
|
|
var littleZ = 122; // 'z'
|
|
|
|
var zero = 48; // '0'
|
|
var nine = 57; // '9'
|
|
|
|
var plus = 43; // '+'
|
|
var slash = 47; // '/'
|
|
|
|
var littleOffset = 26;
|
|
var numberOffset = 52;
|
|
|
|
// 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
|
|
if (bigA <= charCode && charCode <= bigZ) {
|
|
return (charCode - bigA);
|
|
}
|
|
|
|
// 26 - 51: abcdefghijklmnopqrstuvwxyz
|
|
if (littleA <= charCode && charCode <= littleZ) {
|
|
return (charCode - littleA + littleOffset);
|
|
}
|
|
|
|
// 52 - 61: 0123456789
|
|
if (zero <= charCode && charCode <= nine) {
|
|
return (charCode - zero + numberOffset);
|
|
}
|
|
|
|
// 62: +
|
|
if (charCode == plus) {
|
|
return 62;
|
|
}
|
|
|
|
// 63: /
|
|
if (charCode == slash) {
|
|
return 63;
|
|
}
|
|
|
|
// Invalid base64 digit.
|
|
return -1;
|
|
};
|
|
}
|
|
|
|
|
|
/***/ },
|
|
/* 6 */
|
|
/***/ function(module, exports, __webpack_require__) {
|
|
|
|
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
/*
|
|
* Copyright 2011 Mozilla Foundation and contributors
|
|
* Licensed under the New BSD license. See LICENSE or:
|
|
* http://opensource.org/licenses/BSD-3-Clause
|
|
*/
|
|
{
|
|
var util = __webpack_require__(2);
|
|
|
|
/**
|
|
* A data structure which is a combination of an array and a set. Adding a new
|
|
* member is O(1), testing for membership is O(1), and finding the index of an
|
|
* element is O(1). Removing elements from the set is not supported. Only
|
|
* strings are supported for membership.
|
|
*/
|
|
function ArraySet() {
|
|
this._array = [];
|
|
this._set = {};
|
|
}
|
|
|
|
/**
|
|
* Static method for creating ArraySet instances from an existing array.
|
|
*/
|
|
ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
|
|
var set = new ArraySet();
|
|
for (var i = 0, len = aArray.length; i < len; i++) {
|
|
set.add(aArray[i], aAllowDuplicates);
|
|
}
|
|
return set;
|
|
};
|
|
|
|
/**
|
|
* Return how many unique items are in this ArraySet. If duplicates have been
|
|
* added, than those do not count towards the size.
|
|
*
|
|
* @returns Number
|
|
*/
|
|
ArraySet.prototype.size = function ArraySet_size() {
|
|
return Object.getOwnPropertyNames(this._set).length;
|
|
};
|
|
|
|
/**
|
|
* Add the given string to this set.
|
|
*
|
|
* @param String aStr
|
|
*/
|
|
ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
|
|
var sStr = util.toSetString(aStr);
|
|
var isDuplicate = this._set.hasOwnProperty(sStr);
|
|
var idx = this._array.length;
|
|
if (!isDuplicate || aAllowDuplicates) {
|
|
this._array.push(aStr);
|
|
}
|
|
if (!isDuplicate) {
|
|
this._set[sStr] = idx;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Is the given string a member of this set?
|
|
*
|
|
* @param String aStr
|
|
*/
|
|
ArraySet.prototype.has = function ArraySet_has(aStr) {
|
|
var sStr = util.toSetString(aStr);
|
|
return this._set.hasOwnProperty(sStr);
|
|
};
|
|
|
|
/**
|
|
* What is the index of the given string in the array?
|
|
*
|
|
* @param String aStr
|
|
*/
|
|
ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
|
|
var sStr = util.toSetString(aStr);
|
|
if (this._set.hasOwnProperty(sStr)) {
|
|
return this._set[sStr];
|
|
}
|
|
throw new Error('"' + aStr + '" is not in the set.');
|
|
};
|
|
|
|
/**
|
|
* What is the element at the given index?
|
|
*
|
|
* @param Number aIdx
|
|
*/
|
|
ArraySet.prototype.at = function ArraySet_at(aIdx) {
|
|
if (aIdx >= 0 && aIdx < this._array.length) {
|
|
return this._array[aIdx];
|
|
}
|
|
throw new Error('No element indexed by ' + aIdx);
|
|
};
|
|
|
|
/**
|
|
* Returns the array representation of this set (which has the proper indices
|
|
* indicated by indexOf). Note that this is a copy of the internal array used
|
|
* for storing the members so that no one can mess with internal state.
|
|
*/
|
|
ArraySet.prototype.toArray = function ArraySet_toArray() {
|
|
return this._array.slice();
|
|
};
|
|
|
|
exports.ArraySet = ArraySet;
|
|
}
|
|
|
|
|
|
/***/ },
|
|
/* 7 */
|
|
/***/ function(module, exports, __webpack_require__) {
|
|
|
|
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
/*
|
|
* Copyright 2014 Mozilla Foundation and contributors
|
|
* Licensed under the New BSD license. See LICENSE or:
|
|
* http://opensource.org/licenses/BSD-3-Clause
|
|
*/
|
|
{
|
|
var util = __webpack_require__(2);
|
|
|
|
/**
|
|
* Determine whether mappingB is after mappingA with respect to generated
|
|
* position.
|
|
*/
|
|
function generatedPositionAfter(mappingA, mappingB) {
|
|
// Optimized for most common case
|
|
var lineA = mappingA.generatedLine;
|
|
var lineB = mappingB.generatedLine;
|
|
var columnA = mappingA.generatedColumn;
|
|
var columnB = mappingB.generatedColumn;
|
|
return lineB > lineA || lineB == lineA && columnB >= columnA ||
|
|
util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
|
|
}
|
|
|
|
/**
|
|
* A data structure to provide a sorted view of accumulated mappings in a
|
|
* performance conscious manner. It trades a neglibable overhead in general
|
|
* case for a large speedup in case of mappings being added in order.
|
|
*/
|
|
function MappingList() {
|
|
this._array = [];
|
|
this._sorted = true;
|
|
// Serves as infimum
|
|
this._last = {generatedLine: -1, generatedColumn: 0};
|
|
}
|
|
|
|
/**
|
|
* Iterate through internal items. This method takes the same arguments that
|
|
* `Array.prototype.forEach` takes.
|
|
*
|
|
* NOTE: The order of the mappings is NOT guaranteed.
|
|
*/
|
|
MappingList.prototype.unsortedForEach =
|
|
function MappingList_forEach(aCallback, aThisArg) {
|
|
this._array.forEach(aCallback, aThisArg);
|
|
};
|
|
|
|
/**
|
|
* Add the given source mapping.
|
|
*
|
|
* @param Object aMapping
|
|
*/
|
|
MappingList.prototype.add = function MappingList_add(aMapping) {
|
|
if (generatedPositionAfter(this._last, aMapping)) {
|
|
this._last = aMapping;
|
|
this._array.push(aMapping);
|
|
} else {
|
|
this._sorted = false;
|
|
this._array.push(aMapping);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Returns the flat, sorted array of mappings. The mappings are sorted by
|
|
* generated position.
|
|
*
|
|
* WARNING: This method returns internal data without copying, for
|
|
* performance. The return value must NOT be mutated, and should be treated as
|
|
* an immutable borrow. If you want to take ownership, you must make your own
|
|
* copy.
|
|
*/
|
|
MappingList.prototype.toArray = function MappingList_toArray() {
|
|
if (!this._sorted) {
|
|
this._array.sort(util.compareByGeneratedPositionsInflated);
|
|
this._sorted = true;
|
|
}
|
|
return this._array;
|
|
};
|
|
|
|
exports.MappingList = MappingList;
|
|
}
|
|
|
|
|
|
/***/ },
|
|
/* 8 */
|
|
/***/ function(module, exports, __webpack_require__) {
|
|
|
|
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
/*
|
|
* Copyright 2011 Mozilla Foundation and contributors
|
|
* Licensed under the New BSD license. See LICENSE or:
|
|
* http://opensource.org/licenses/BSD-3-Clause
|
|
*/
|
|
{
|
|
var util = __webpack_require__(2);
|
|
var binarySearch = __webpack_require__(9);
|
|
var ArraySet = __webpack_require__(6).ArraySet;
|
|
var base64VLQ = __webpack_require__(4);
|
|
var quickSort = __webpack_require__(10).quickSort;
|
|
|
|
function SourceMapConsumer(aSourceMap) {
|
|
var sourceMap = aSourceMap;
|
|
if (typeof aSourceMap === 'string') {
|
|
sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
|
|
}
|
|
|
|
return sourceMap.sections != null
|
|
? new IndexedSourceMapConsumer(sourceMap)
|
|
: new BasicSourceMapConsumer(sourceMap);
|
|
}
|
|
|
|
SourceMapConsumer.fromSourceMap = function(aSourceMap) {
|
|
return BasicSourceMapConsumer.fromSourceMap(aSourceMap);
|
|
}
|
|
|
|
/**
|
|
* The version of the source mapping spec that we are consuming.
|
|
*/
|
|
SourceMapConsumer.prototype._version = 3;
|
|
|
|
// `__generatedMappings` and `__originalMappings` are arrays that hold the
|
|
// parsed mapping coordinates from the source map's "mappings" attribute. They
|
|
// are lazily instantiated, accessed via the `_generatedMappings` and
|
|
// `_originalMappings` getters respectively, and we only parse the mappings
|
|
// and create these arrays once queried for a source location. We jump through
|
|
// these hoops because there can be many thousands of mappings, and parsing
|
|
// them is expensive, so we only want to do it if we must.
|
|
//
|
|
// Each object in the arrays is of the form:
|
|
//
|
|
// {
|
|
// generatedLine: The line number in the generated code,
|
|
// generatedColumn: The column number in the generated code,
|
|
// source: The path to the original source file that generated this
|
|
// chunk of code,
|
|
// originalLine: The line number in the original source that
|
|
// corresponds to this chunk of generated code,
|
|
// originalColumn: The column number in the original source that
|
|
// corresponds to this chunk of generated code,
|
|
// name: The name of the original symbol which generated this chunk of
|
|
// code.
|
|
// }
|
|
//
|
|
// All properties except for `generatedLine` and `generatedColumn` can be
|
|
// `null`.
|
|
//
|
|
// `_generatedMappings` is ordered by the generated positions.
|
|
//
|
|
// `_originalMappings` is ordered by the original positions.
|
|
|
|
SourceMapConsumer.prototype.__generatedMappings = null;
|
|
Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
|
|
get: function () {
|
|
if (!this.__generatedMappings) {
|
|
this._parseMappings(this._mappings, this.sourceRoot);
|
|
}
|
|
|
|
return this.__generatedMappings;
|
|
}
|
|
});
|
|
|
|
SourceMapConsumer.prototype.__originalMappings = null;
|
|
Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
|
|
get: function () {
|
|
if (!this.__originalMappings) {
|
|
this._parseMappings(this._mappings, this.sourceRoot);
|
|
}
|
|
|
|
return this.__originalMappings;
|
|
}
|
|
});
|
|
|
|
SourceMapConsumer.prototype._charIsMappingSeparator =
|
|
function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
|
|
var c = aStr.charAt(index);
|
|
return c === ";" || c === ",";
|
|
};
|
|
|
|
/**
|
|
* Parse the mappings in a string in to a data structure which we can easily
|
|
* query (the ordered arrays in the `this.__generatedMappings` and
|
|
* `this.__originalMappings` properties).
|
|
*/
|
|
SourceMapConsumer.prototype._parseMappings =
|
|
function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
|
|
throw new Error("Subclasses must implement _parseMappings");
|
|
};
|
|
|
|
SourceMapConsumer.GENERATED_ORDER = 1;
|
|
SourceMapConsumer.ORIGINAL_ORDER = 2;
|
|
|
|
SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
|
|
SourceMapConsumer.LEAST_UPPER_BOUND = 2;
|
|
|
|
/**
|
|
* Iterate over each mapping between an original source/line/column and a
|
|
* generated line/column in this source map.
|
|
*
|
|
* @param Function aCallback
|
|
* The function that is called with each mapping.
|
|
* @param Object aContext
|
|
* Optional. If specified, this object will be the value of `this` every
|
|
* time that `aCallback` is called.
|
|
* @param aOrder
|
|
* Either `SourceMapConsumer.GENERATED_ORDER` or
|
|
* `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
|
|
* iterate over the mappings sorted by the generated file's line/column
|
|
* order or the original's source/line/column order, respectively. Defaults to
|
|
* `SourceMapConsumer.GENERATED_ORDER`.
|
|
*/
|
|
SourceMapConsumer.prototype.eachMapping =
|
|
function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
|
|
var context = aContext || null;
|
|
var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
|
|
|
|
var mappings;
|
|
switch (order) {
|
|
case SourceMapConsumer.GENERATED_ORDER:
|
|
mappings = this._generatedMappings;
|
|
break;
|
|
case SourceMapConsumer.ORIGINAL_ORDER:
|
|
mappings = this._originalMappings;
|
|
break;
|
|
default:
|
|
throw new Error("Unknown order of iteration.");
|
|
}
|
|
|
|
var sourceRoot = this.sourceRoot;
|
|
mappings.map(function (mapping) {
|
|
var source = mapping.source === null ? null : this._sources.at(mapping.source);
|
|
if (source != null && sourceRoot != null) {
|
|
source = util.join(sourceRoot, source);
|
|
}
|
|
return {
|
|
source: source,
|
|
generatedLine: mapping.generatedLine,
|
|
generatedColumn: mapping.generatedColumn,
|
|
originalLine: mapping.originalLine,
|
|
originalColumn: mapping.originalColumn,
|
|
name: mapping.name === null ? null : this._names.at(mapping.name)
|
|
};
|
|
}, this).forEach(aCallback, context);
|
|
};
|
|
|
|
/**
|
|
* Returns all generated line and column information for the original source,
|
|
* line, and column provided. If no column is provided, returns all mappings
|
|
* corresponding to a either the line we are searching for or the next
|
|
* closest line that has any mappings. Otherwise, returns all mappings
|
|
* corresponding to the given line and either the column we are searching for
|
|
* or the next closest column that has any offsets.
|
|
*
|
|
* The only argument is an object with the following properties:
|
|
*
|
|
* - source: The filename of the original source.
|
|
* - line: The line number in the original source.
|
|
* - column: Optional. the column number in the original source.
|
|
*
|
|
* and an array of objects is returned, each with the following properties:
|
|
*
|
|
* - line: The line number in the generated source, or null.
|
|
* - column: The column number in the generated source, or null.
|
|
*/
|
|
SourceMapConsumer.prototype.allGeneratedPositionsFor =
|
|
function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
|
|
var line = util.getArg(aArgs, 'line');
|
|
|
|
// When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
|
|
// returns the index of the closest mapping less than the needle. By
|
|
// setting needle.originalColumn to 0, we thus find the last mapping for
|
|
// the given line, provided such a mapping exists.
|
|
var needle = {
|
|
source: util.getArg(aArgs, 'source'),
|
|
originalLine: line,
|
|
originalColumn: util.getArg(aArgs, 'column', 0)
|
|
};
|
|
|
|
if (this.sourceRoot != null) {
|
|
needle.source = util.relative(this.sourceRoot, needle.source);
|
|
}
|
|
if (!this._sources.has(needle.source)) {
|
|
return [];
|
|
}
|
|
needle.source = this._sources.indexOf(needle.source);
|
|
|
|
var mappings = [];
|
|
|
|
var index = this._findMapping(needle,
|
|
this._originalMappings,
|
|
"originalLine",
|
|
"originalColumn",
|
|
util.compareByOriginalPositions,
|
|
binarySearch.LEAST_UPPER_BOUND);
|
|
if (index >= 0) {
|
|
var mapping = this._originalMappings[index];
|
|
|
|
if (aArgs.column === undefined) {
|
|
var originalLine = mapping.originalLine;
|
|
|
|
// Iterate until either we run out of mappings, or we run into
|
|
// a mapping for a different line than the one we found. Since
|
|
// mappings are sorted, this is guaranteed to find all mappings for
|
|
// the line we found.
|
|
while (mapping && mapping.originalLine === originalLine) {
|
|
mappings.push({
|
|
line: util.getArg(mapping, 'generatedLine', null),
|
|
column: util.getArg(mapping, 'generatedColumn', null),
|
|
lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
|
|
});
|
|
|
|
mapping = this._originalMappings[++index];
|
|
}
|
|
} else {
|
|
var originalColumn = mapping.originalColumn;
|
|
|
|
// Iterate until either we run out of mappings, or we run into
|
|
// a mapping for a different line than the one we were searching for.
|
|
// Since mappings are sorted, this is guaranteed to find all mappings for
|
|
// the line we are searching for.
|
|
while (mapping &&
|
|
mapping.originalLine === line &&
|
|
mapping.originalColumn == originalColumn) {
|
|
mappings.push({
|
|
line: util.getArg(mapping, 'generatedLine', null),
|
|
column: util.getArg(mapping, 'generatedColumn', null),
|
|
lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
|
|
});
|
|
|
|
mapping = this._originalMappings[++index];
|
|
}
|
|
}
|
|
}
|
|
|
|
return mappings;
|
|
};
|
|
|
|
exports.SourceMapConsumer = SourceMapConsumer;
|
|
|
|
/**
|
|
* A BasicSourceMapConsumer instance represents a parsed source map which we can
|
|
* query for information about the original file positions by giving it a file
|
|
* position in the generated source.
|
|
*
|
|
* The only parameter is the raw source map (either as a JSON string, or
|
|
* already parsed to an object). According to the spec, source maps have the
|
|
* following attributes:
|
|
*
|
|
* - version: Which version of the source map spec this map is following.
|
|
* - sources: An array of URLs to the original source files.
|
|
* - names: An array of identifiers which can be referrenced by individual mappings.
|
|
* - sourceRoot: Optional. The URL root from which all sources are relative.
|
|
* - sourcesContent: Optional. An array of contents of the original source files.
|
|
* - mappings: A string of base64 VLQs which contain the actual mappings.
|
|
* - file: Optional. The generated file this source map is associated with.
|
|
*
|
|
* Here is an example source map, taken from the source map spec[0]:
|
|
*
|
|
* {
|
|
* version : 3,
|
|
* file: "out.js",
|
|
* sourceRoot : "",
|
|
* sources: ["foo.js", "bar.js"],
|
|
* names: ["src", "maps", "are", "fun"],
|
|
* mappings: "AA,AB;;ABCDE;"
|
|
* }
|
|
*
|
|
* [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
|
|
*/
|
|
function BasicSourceMapConsumer(aSourceMap) {
|
|
var sourceMap = aSourceMap;
|
|
if (typeof aSourceMap === 'string') {
|
|
sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
|
|
}
|
|
|
|
var version = util.getArg(sourceMap, 'version');
|
|
var sources = util.getArg(sourceMap, 'sources');
|
|
// Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
|
|
// requires the array) to play nice here.
|
|
var names = util.getArg(sourceMap, 'names', []);
|
|
var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
|
|
var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
|
|
var mappings = util.getArg(sourceMap, 'mappings');
|
|
var file = util.getArg(sourceMap, 'file', null);
|
|
|
|
// Once again, Sass deviates from the spec and supplies the version as a
|
|
// string rather than a number, so we use loose equality checking here.
|
|
if (version != this._version) {
|
|
throw new Error('Unsupported version: ' + version);
|
|
}
|
|
|
|
sources = sources
|
|
// Some source maps produce relative source paths like "./foo.js" instead of
|
|
// "foo.js". Normalize these first so that future comparisons will succeed.
|
|
// See bugzil.la/1090768.
|
|
.map(util.normalize)
|
|
// Always ensure that absolute sources are internally stored relative to
|
|
// the source root, if the source root is absolute. Not doing this would
|
|
// be particularly problematic when the source root is a prefix of the
|
|
// source (valid, but why??). See github issue #199 and bugzil.la/1188982.
|
|
.map(function (source) {
|
|
return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
|
|
? util.relative(sourceRoot, source)
|
|
: source;
|
|
});
|
|
|
|
// Pass `true` below to allow duplicate names and sources. While source maps
|
|
// are intended to be compressed and deduplicated, the TypeScript compiler
|
|
// sometimes generates source maps with duplicates in them. See Github issue
|
|
// #72 and bugzil.la/889492.
|
|
this._names = ArraySet.fromArray(names, true);
|
|
this._sources = ArraySet.fromArray(sources, true);
|
|
|
|
this.sourceRoot = sourceRoot;
|
|
this.sourcesContent = sourcesContent;
|
|
this._mappings = mappings;
|
|
this.file = file;
|
|
}
|
|
|
|
BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
|
|
BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
|
|
|
|
/**
|
|
* Create a BasicSourceMapConsumer from a SourceMapGenerator.
|
|
*
|
|
* @param SourceMapGenerator aSourceMap
|
|
* The source map that will be consumed.
|
|
* @returns BasicSourceMapConsumer
|
|
*/
|
|
BasicSourceMapConsumer.fromSourceMap =
|
|
function SourceMapConsumer_fromSourceMap(aSourceMap) {
|
|
var smc = Object.create(BasicSourceMapConsumer.prototype);
|
|
|
|
var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
|
|
var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
|
|
smc.sourceRoot = aSourceMap._sourceRoot;
|
|
smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
|
|
smc.sourceRoot);
|
|
smc.file = aSourceMap._file;
|
|
|
|
// Because we are modifying the entries (by converting string sources and
|
|
// names to indices into the sources and names ArraySets), we have to make
|
|
// a copy of the entry or else bad things happen. Shared mutable state
|
|
// strikes again! See github issue #191.
|
|
|
|
var generatedMappings = aSourceMap._mappings.toArray().slice();
|
|
var destGeneratedMappings = smc.__generatedMappings = [];
|
|
var destOriginalMappings = smc.__originalMappings = [];
|
|
|
|
for (var i = 0, length = generatedMappings.length; i < length; i++) {
|
|
var srcMapping = generatedMappings[i];
|
|
var destMapping = new Mapping;
|
|
destMapping.generatedLine = srcMapping.generatedLine;
|
|
destMapping.generatedColumn = srcMapping.generatedColumn;
|
|
|
|
if (srcMapping.source) {
|
|
destMapping.source = sources.indexOf(srcMapping.source);
|
|
destMapping.originalLine = srcMapping.originalLine;
|
|
destMapping.originalColumn = srcMapping.originalColumn;
|
|
|
|
if (srcMapping.name) {
|
|
destMapping.name = names.indexOf(srcMapping.name);
|
|
}
|
|
|
|
destOriginalMappings.push(destMapping);
|
|
}
|
|
|
|
destGeneratedMappings.push(destMapping);
|
|
}
|
|
|
|
quickSort(smc.__originalMappings, util.compareByOriginalPositions);
|
|
|
|
return smc;
|
|
};
|
|
|
|
/**
|
|
* The version of the source mapping spec that we are consuming.
|
|
*/
|
|
BasicSourceMapConsumer.prototype._version = 3;
|
|
|
|
/**
|
|
* The list of original sources.
|
|
*/
|
|
Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
|
|
get: function () {
|
|
return this._sources.toArray().map(function (s) {
|
|
return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;
|
|
}, this);
|
|
}
|
|
});
|
|
|
|
/**
|
|
* Provide the JIT with a nice shape / hidden class.
|
|
*/
|
|
function Mapping() {
|
|
this.generatedLine = 0;
|
|
this.generatedColumn = 0;
|
|
this.source = null;
|
|
this.originalLine = null;
|
|
this.originalColumn = null;
|
|
this.name = null;
|
|
}
|
|
|
|
/**
|
|
* Parse the mappings in a string in to a data structure which we can easily
|
|
* query (the ordered arrays in the `this.__generatedMappings` and
|
|
* `this.__originalMappings` properties).
|
|
*/
|
|
BasicSourceMapConsumer.prototype._parseMappings =
|
|
function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
|
|
var generatedLine = 1;
|
|
var previousGeneratedColumn = 0;
|
|
var previousOriginalLine = 0;
|
|
var previousOriginalColumn = 0;
|
|
var previousSource = 0;
|
|
var previousName = 0;
|
|
var length = aStr.length;
|
|
var index = 0;
|
|
var cachedSegments = {};
|
|
var temp = {};
|
|
var originalMappings = [];
|
|
var generatedMappings = [];
|
|
var mapping, str, segment, end, value;
|
|
|
|
while (index < length) {
|
|
if (aStr.charAt(index) === ';') {
|
|
generatedLine++;
|
|
index++;
|
|
previousGeneratedColumn = 0;
|
|
}
|
|
else if (aStr.charAt(index) === ',') {
|
|
index++;
|
|
}
|
|
else {
|
|
mapping = new Mapping();
|
|
mapping.generatedLine = generatedLine;
|
|
|
|
// Because each offset is encoded relative to the previous one,
|
|
// many segments often have the same encoding. We can exploit this
|
|
// fact by caching the parsed variable length fields of each segment,
|
|
// allowing us to avoid a second parse if we encounter the same
|
|
// segment again.
|
|
for (end = index; end < length; end++) {
|
|
if (this._charIsMappingSeparator(aStr, end)) {
|
|
break;
|
|
}
|
|
}
|
|
str = aStr.slice(index, end);
|
|
|
|
segment = cachedSegments[str];
|
|
if (segment) {
|
|
index += str.length;
|
|
} else {
|
|
segment = [];
|
|
while (index < end) {
|
|
base64VLQ.decode(aStr, index, temp);
|
|
value = temp.value;
|
|
index = temp.rest;
|
|
segment.push(value);
|
|
}
|
|
|
|
if (segment.length === 2) {
|
|
throw new Error('Found a source, but no line and column');
|
|
}
|
|
|
|
if (segment.length === 3) {
|
|
throw new Error('Found a source and line, but no column');
|
|
}
|
|
|
|
cachedSegments[str] = segment;
|
|
}
|
|
|
|
// Generated column.
|
|
mapping.generatedColumn = previousGeneratedColumn + segment[0];
|
|
previousGeneratedColumn = mapping.generatedColumn;
|
|
|
|
if (segment.length > 1) {
|
|
// Original source.
|
|
mapping.source = previousSource + segment[1];
|
|
previousSource += segment[1];
|
|
|
|
// Original line.
|
|
mapping.originalLine = previousOriginalLine + segment[2];
|
|
previousOriginalLine = mapping.originalLine;
|
|
// Lines are stored 0-based
|
|
mapping.originalLine += 1;
|
|
|
|
// Original column.
|
|
mapping.originalColumn = previousOriginalColumn + segment[3];
|
|
previousOriginalColumn = mapping.originalColumn;
|
|
|
|
if (segment.length > 4) {
|
|
// Original name.
|
|
mapping.name = previousName + segment[4];
|
|
previousName += segment[4];
|
|
}
|
|
}
|
|
|
|
generatedMappings.push(mapping);
|
|
if (typeof mapping.originalLine === 'number') {
|
|
originalMappings.push(mapping);
|
|
}
|
|
}
|
|
}
|
|
|
|
quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);
|
|
this.__generatedMappings = generatedMappings;
|
|
|
|
quickSort(originalMappings, util.compareByOriginalPositions);
|
|
this.__originalMappings = originalMappings;
|
|
};
|
|
|
|
/**
|
|
* Find the mapping that best matches the hypothetical "needle" mapping that
|
|
* we are searching for in the given "haystack" of mappings.
|
|
*/
|
|
BasicSourceMapConsumer.prototype._findMapping =
|
|
function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
|
|
aColumnName, aComparator, aBias) {
|
|
// To return the position we are searching for, we must first find the
|
|
// mapping for the given position and then return the opposite position it
|
|
// points to. Because the mappings are sorted, we can use binary search to
|
|
// find the best mapping.
|
|
|
|
if (aNeedle[aLineName] <= 0) {
|
|
throw new TypeError('Line must be greater than or equal to 1, got '
|
|
+ aNeedle[aLineName]);
|
|
}
|
|
if (aNeedle[aColumnName] < 0) {
|
|
throw new TypeError('Column must be greater than or equal to 0, got '
|
|
+ aNeedle[aColumnName]);
|
|
}
|
|
|
|
return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
|
|
};
|
|
|
|
/**
|
|
* Compute the last column for each generated mapping. The last column is
|
|
* inclusive.
|
|
*/
|
|
BasicSourceMapConsumer.prototype.computeColumnSpans =
|
|
function SourceMapConsumer_computeColumnSpans() {
|
|
for (var index = 0; index < this._generatedMappings.length; ++index) {
|
|
var mapping = this._generatedMappings[index];
|
|
|
|
// Mappings do not contain a field for the last generated columnt. We
|
|
// can come up with an optimistic estimate, however, by assuming that
|
|
// mappings are contiguous (i.e. given two consecutive mappings, the
|
|
// first mapping ends where the second one starts).
|
|
if (index + 1 < this._generatedMappings.length) {
|
|
var nextMapping = this._generatedMappings[index + 1];
|
|
|
|
if (mapping.generatedLine === nextMapping.generatedLine) {
|
|
mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
// The last mapping for each line spans the entire line.
|
|
mapping.lastGeneratedColumn = Infinity;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Returns the original source, line, and column information for the generated
|
|
* source's line and column positions provided. The only argument is an object
|
|
* with the following properties:
|
|
*
|
|
* - line: The line number in the generated source.
|
|
* - column: The column number in the generated source.
|
|
* - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
|
|
* 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
|
|
* closest element that is smaller than or greater than the one we are
|
|
* searching for, respectively, if the exact element cannot be found.
|
|
* Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
|
|
*
|
|
* and an object is returned with the following properties:
|
|
*
|
|
* - source: The original source file, or null.
|
|
* - line: The line number in the original source, or null.
|
|
* - column: The column number in the original source, or null.
|
|
* - name: The original identifier, or null.
|
|
*/
|
|
BasicSourceMapConsumer.prototype.originalPositionFor =
|
|
function SourceMapConsumer_originalPositionFor(aArgs) {
|
|
var needle = {
|
|
generatedLine: util.getArg(aArgs, 'line'),
|
|
generatedColumn: util.getArg(aArgs, 'column')
|
|
};
|
|
|
|
var index = this._findMapping(
|
|
needle,
|
|
this._generatedMappings,
|
|
"generatedLine",
|
|
"generatedColumn",
|
|
util.compareByGeneratedPositionsDeflated,
|
|
util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
|
|
);
|
|
|
|
if (index >= 0) {
|
|
var mapping = this._generatedMappings[index];
|
|
|
|
if (mapping.generatedLine === needle.generatedLine) {
|
|
var source = util.getArg(mapping, 'source', null);
|
|
if (source !== null) {
|
|
source = this._sources.at(source);
|
|
if (this.sourceRoot != null) {
|
|
source = util.join(this.sourceRoot, source);
|
|
}
|
|
}
|
|
var name = util.getArg(mapping, 'name', null);
|
|
if (name !== null) {
|
|
name = this._names.at(name);
|
|
}
|
|
return {
|
|
source: source,
|
|
line: util.getArg(mapping, 'originalLine', null),
|
|
column: util.getArg(mapping, 'originalColumn', null),
|
|
name: name
|
|
};
|
|
}
|
|
}
|
|
|
|
return {
|
|
source: null,
|
|
line: null,
|
|
column: null,
|
|
name: null
|
|
};
|
|
};
|
|
|
|
/**
|
|
* Return true if we have the source content for every source in the source
|
|
* map, false otherwise.
|
|
*/
|
|
BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
|
|
function BasicSourceMapConsumer_hasContentsOfAllSources() {
|
|
if (!this.sourcesContent) {
|
|
return false;
|
|
}
|
|
return this.sourcesContent.length >= this._sources.size() &&
|
|
!this.sourcesContent.some(function (sc) { return sc == null; });
|
|
};
|
|
|
|
/**
|
|
* Returns the original source content. The only argument is the url of the
|
|
* original source file. Returns null if no original source content is
|
|
* availible.
|
|
*/
|
|
BasicSourceMapConsumer.prototype.sourceContentFor =
|
|
function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
|
|
if (!this.sourcesContent) {
|
|
return null;
|
|
}
|
|
|
|
if (this.sourceRoot != null) {
|
|
aSource = util.relative(this.sourceRoot, aSource);
|
|
}
|
|
|
|
if (this._sources.has(aSource)) {
|
|
return this.sourcesContent[this._sources.indexOf(aSource)];
|
|
}
|
|
|
|
var url;
|
|
if (this.sourceRoot != null
|
|
&& (url = util.urlParse(this.sourceRoot))) {
|
|
// XXX: file:// URIs and absolute paths lead to unexpected behavior for
|
|
// many users. We can help them out when they expect file:// URIs to
|
|
// behave like it would if they were running a local HTTP server. See
|
|
// https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
|
|
var fileUriAbsPath = aSource.replace(/^file:\/\//, "");
|
|
if (url.scheme == "file"
|
|
&& this._sources.has(fileUriAbsPath)) {
|
|
return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
|
|
}
|
|
|
|
if ((!url.path || url.path == "/")
|
|
&& this._sources.has("/" + aSource)) {
|
|
return this.sourcesContent[this._sources.indexOf("/" + aSource)];
|
|
}
|
|
}
|
|
|
|
// This function is used recursively from
|
|
// IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
|
|
// don't want to throw if we can't find the source - we just want to
|
|
// return null, so we provide a flag to exit gracefully.
|
|
if (nullOnMissing) {
|
|
return null;
|
|
}
|
|
else {
|
|
throw new Error('"' + aSource + '" is not in the SourceMap.');
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Returns the generated line and column information for the original source,
|
|
* line, and column positions provided. The only argument is an object with
|
|
* the following properties:
|
|
*
|
|
* - source: The filename of the original source.
|
|
* - line: The line number in the original source.
|
|
* - column: The column number in the original source.
|
|
* - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
|
|
* 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
|
|
* closest element that is smaller than or greater than the one we are
|
|
* searching for, respectively, if the exact element cannot be found.
|
|
* Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
|
|
*
|
|
* and an object is returned with the following properties:
|
|
*
|
|
* - line: The line number in the generated source, or null.
|
|
* - column: The column number in the generated source, or null.
|
|
*/
|
|
BasicSourceMapConsumer.prototype.generatedPositionFor =
|
|
function SourceMapConsumer_generatedPositionFor(aArgs) {
|
|
var source = util.getArg(aArgs, 'source');
|
|
if (this.sourceRoot != null) {
|
|
source = util.relative(this.sourceRoot, source);
|
|
}
|
|
if (!this._sources.has(source)) {
|
|
return {
|
|
line: null,
|
|
column: null,
|
|
lastColumn: null
|
|
};
|
|
}
|
|
source = this._sources.indexOf(source);
|
|
|
|
var needle = {
|
|
source: source,
|
|
originalLine: util.getArg(aArgs, 'line'),
|
|
originalColumn: util.getArg(aArgs, 'column')
|
|
};
|
|
|
|
var index = this._findMapping(
|
|
needle,
|
|
this._originalMappings,
|
|
"originalLine",
|
|
"originalColumn",
|
|
util.compareByOriginalPositions,
|
|
util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
|
|
);
|
|
|
|
if (index >= 0) {
|
|
var mapping = this._originalMappings[index];
|
|
|
|
if (mapping.source === needle.source) {
|
|
return {
|
|
line: util.getArg(mapping, 'generatedLine', null),
|
|
column: util.getArg(mapping, 'generatedColumn', null),
|
|
lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
|
|
};
|
|
}
|
|
}
|
|
|
|
return {
|
|
line: null,
|
|
column: null,
|
|
lastColumn: null
|
|
};
|
|
};
|
|
|
|
exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
|
|
|
|
/**
|
|
* An IndexedSourceMapConsumer instance represents a parsed source map which
|
|
* we can query for information. It differs from BasicSourceMapConsumer in
|
|
* that it takes "indexed" source maps (i.e. ones with a "sections" field) as
|
|
* input.
|
|
*
|
|
* The only parameter is a raw source map (either as a JSON string, or already
|
|
* parsed to an object). According to the spec for indexed source maps, they
|
|
* have the following attributes:
|
|
*
|
|
* - version: Which version of the source map spec this map is following.
|
|
* - file: Optional. The generated file this source map is associated with.
|
|
* - sections: A list of section definitions.
|
|
*
|
|
* Each value under the "sections" field has two fields:
|
|
* - offset: The offset into the original specified at which this section
|
|
* begins to apply, defined as an object with a "line" and "column"
|
|
* field.
|
|
* - map: A source map definition. This source map could also be indexed,
|
|
* but doesn't have to be.
|
|
*
|
|
* Instead of the "map" field, it's also possible to have a "url" field
|
|
* specifying a URL to retrieve a source map from, but that's currently
|
|
* unsupported.
|
|
*
|
|
* Here's an example source map, taken from the source map spec[0], but
|
|
* modified to omit a section which uses the "url" field.
|
|
*
|
|
* {
|
|
* version : 3,
|
|
* file: "app.js",
|
|
* sections: [{
|
|
* offset: {line:100, column:10},
|
|
* map: {
|
|
* version : 3,
|
|
* file: "section.js",
|
|
* sources: ["foo.js", "bar.js"],
|
|
* names: ["src", "maps", "are", "fun"],
|
|
* mappings: "AAAA,E;;ABCDE;"
|
|
* }
|
|
* }],
|
|
* }
|
|
*
|
|
* [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
|
|
*/
|
|
function IndexedSourceMapConsumer(aSourceMap) {
|
|
var sourceMap = aSourceMap;
|
|
if (typeof aSourceMap === 'string') {
|
|
sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
|
|
}
|
|
|
|
var version = util.getArg(sourceMap, 'version');
|
|
var sections = util.getArg(sourceMap, 'sections');
|
|
|
|
if (version != this._version) {
|
|
throw new Error('Unsupported version: ' + version);
|
|
}
|
|
|
|
this._sources = new ArraySet();
|
|
this._names = new ArraySet();
|
|
|
|
var lastOffset = {
|
|
line: -1,
|
|
column: 0
|
|
};
|
|
this._sections = sections.map(function (s) {
|
|
if (s.url) {
|
|
// The url field will require support for asynchronicity.
|
|
// See https://github.com/mozilla/source-map/issues/16
|
|
throw new Error('Support for url field in sections not implemented.');
|
|
}
|
|
var offset = util.getArg(s, 'offset');
|
|
var offsetLine = util.getArg(offset, 'line');
|
|
var offsetColumn = util.getArg(offset, 'column');
|
|
|
|
if (offsetLine < lastOffset.line ||
|
|
(offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
|
|
throw new Error('Section offsets must be ordered and non-overlapping.');
|
|
}
|
|
lastOffset = offset;
|
|
|
|
return {
|
|
generatedOffset: {
|
|
// The offset fields are 0-based, but we use 1-based indices when
|
|
// encoding/decoding from VLQ.
|
|
generatedLine: offsetLine + 1,
|
|
generatedColumn: offsetColumn + 1
|
|
},
|
|
consumer: new SourceMapConsumer(util.getArg(s, 'map'))
|
|
}
|
|
});
|
|
}
|
|
|
|
IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
|
|
IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
|
|
|
|
/**
|
|
* The version of the source mapping spec that we are consuming.
|
|
*/
|
|
IndexedSourceMapConsumer.prototype._version = 3;
|
|
|
|
/**
|
|
* The list of original sources.
|
|
*/
|
|
Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
|
|
get: function () {
|
|
var sources = [];
|
|
for (var i = 0; i < this._sections.length; i++) {
|
|
for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
|
|
sources.push(this._sections[i].consumer.sources[j]);
|
|
}
|
|
}
|
|
return sources;
|
|
}
|
|
});
|
|
|
|
/**
|
|
* Returns the original source, line, and column information for the generated
|
|
* source's line and column positions provided. The only argument is an object
|
|
* with the following properties:
|
|
*
|
|
* - line: The line number in the generated source.
|
|
* - column: The column number in the generated source.
|
|
*
|
|
* and an object is returned with the following properties:
|
|
*
|
|
* - source: The original source file, or null.
|
|
* - line: The line number in the original source, or null.
|
|
* - column: The column number in the original source, or null.
|
|
* - name: The original identifier, or null.
|
|
*/
|
|
IndexedSourceMapConsumer.prototype.originalPositionFor =
|
|
function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
|
|
var needle = {
|
|
generatedLine: util.getArg(aArgs, 'line'),
|
|
generatedColumn: util.getArg(aArgs, 'column')
|
|
};
|
|
|
|
// Find the section containing the generated position we're trying to map
|
|
// to an original position.
|
|
var sectionIndex = binarySearch.search(needle, this._sections,
|
|
function(needle, section) {
|
|
var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
|
|
if (cmp) {
|
|
return cmp;
|
|
}
|
|
|
|
return (needle.generatedColumn -
|
|
section.generatedOffset.generatedColumn);
|
|
});
|
|
var section = this._sections[sectionIndex];
|
|
|
|
if (!section) {
|
|
return {
|
|
source: null,
|
|
line: null,
|
|
column: null,
|
|
name: null
|
|
};
|
|
}
|
|
|
|
return section.consumer.originalPositionFor({
|
|
line: needle.generatedLine -
|
|
(section.generatedOffset.generatedLine - 1),
|
|
column: needle.generatedColumn -
|
|
(section.generatedOffset.generatedLine === needle.generatedLine
|
|
? section.generatedOffset.generatedColumn - 1
|
|
: 0),
|
|
bias: aArgs.bias
|
|
});
|
|
};
|
|
|
|
/**
|
|
* Return true if we have the source content for every source in the source
|
|
* map, false otherwise.
|
|
*/
|
|
IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
|
|
function IndexedSourceMapConsumer_hasContentsOfAllSources() {
|
|
return this._sections.every(function (s) {
|
|
return s.consumer.hasContentsOfAllSources();
|
|
});
|
|
};
|
|
|
|
/**
|
|
* Returns the original source content. The only argument is the url of the
|
|
* original source file. Returns null if no original source content is
|
|
* available.
|
|
*/
|
|
IndexedSourceMapConsumer.prototype.sourceContentFor =
|
|
function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
|
|
for (var i = 0; i < this._sections.length; i++) {
|
|
var section = this._sections[i];
|
|
|
|
var content = section.consumer.sourceContentFor(aSource, true);
|
|
if (content) {
|
|
return content;
|
|
}
|
|
}
|
|
if (nullOnMissing) {
|
|
return null;
|
|
}
|
|
else {
|
|
throw new Error('"' + aSource + '" is not in the SourceMap.');
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Returns the generated line and column information for the original source,
|
|
* line, and column positions provided. The only argument is an object with
|
|
* the following properties:
|
|
*
|
|
* - source: The filename of the original source.
|
|
* - line: The line number in the original source.
|
|
* - column: The column number in the original source.
|
|
*
|
|
* and an object is returned with the following properties:
|
|
*
|
|
* - line: The line number in the generated source, or null.
|
|
* - column: The column number in the generated source, or null.
|
|
*/
|
|
IndexedSourceMapConsumer.prototype.generatedPositionFor =
|
|
function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
|
|
for (var i = 0; i < this._sections.length; i++) {
|
|
var section = this._sections[i];
|
|
|
|
// Only consider this section if the requested source is in the list of
|
|
// sources of the consumer.
|
|
if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {
|
|
continue;
|
|
}
|
|
var generatedPosition = section.consumer.generatedPositionFor(aArgs);
|
|
if (generatedPosition) {
|
|
var ret = {
|
|
line: generatedPosition.line +
|
|
(section.generatedOffset.generatedLine - 1),
|
|
column: generatedPosition.column +
|
|
(section.generatedOffset.generatedLine === generatedPosition.line
|
|
? section.generatedOffset.generatedColumn - 1
|
|
: 0)
|
|
};
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
return {
|
|
line: null,
|
|
column: null
|
|
};
|
|
};
|
|
|
|
/**
|
|
* Parse the mappings in a string in to a data structure which we can easily
|
|
* query (the ordered arrays in the `this.__generatedMappings` and
|
|
* `this.__originalMappings` properties).
|
|
*/
|
|
IndexedSourceMapConsumer.prototype._parseMappings =
|
|
function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
|
|
this.__generatedMappings = [];
|
|
this.__originalMappings = [];
|
|
for (var i = 0; i < this._sections.length; i++) {
|
|
var section = this._sections[i];
|
|
var sectionMappings = section.consumer._generatedMappings;
|
|
for (var j = 0; j < sectionMappings.length; j++) {
|
|
var mapping = sectionMappings[i];
|
|
|
|
var source = section.consumer._sources.at(mapping.source);
|
|
if (section.consumer.sourceRoot !== null) {
|
|
source = util.join(section.consumer.sourceRoot, source);
|
|
}
|
|
this._sources.add(source);
|
|
source = this._sources.indexOf(source);
|
|
|
|
var name = section.consumer._names.at(mapping.name);
|
|
this._names.add(name);
|
|
name = this._names.indexOf(name);
|
|
|
|
// The mappings coming from the consumer for the section have
|
|
// generated positions relative to the start of the section, so we
|
|
// need to offset them to be relative to the start of the concatenated
|
|
// generated file.
|
|
var adjustedMapping = {
|
|
source: source,
|
|
generatedLine: mapping.generatedLine +
|
|
(section.generatedOffset.generatedLine - 1),
|
|
generatedColumn: mapping.column +
|
|
(section.generatedOffset.generatedLine === mapping.generatedLine)
|
|
? section.generatedOffset.generatedColumn - 1
|
|
: 0,
|
|
originalLine: mapping.originalLine,
|
|
originalColumn: mapping.originalColumn,
|
|
name: name
|
|
};
|
|
|
|
this.__generatedMappings.push(adjustedMapping);
|
|
if (typeof adjustedMapping.originalLine === 'number') {
|
|
this.__originalMappings.push(adjustedMapping);
|
|
}
|
|
}
|
|
}
|
|
|
|
quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
|
|
quickSort(this.__originalMappings, util.compareByOriginalPositions);
|
|
};
|
|
|
|
exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
|
|
}
|
|
|
|
|
|
/***/ },
|
|
/* 9 */
|
|
/***/ function(module, exports) {
|
|
|
|
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
/*
|
|
* Copyright 2011 Mozilla Foundation and contributors
|
|
* Licensed under the New BSD license. See LICENSE or:
|
|
* http://opensource.org/licenses/BSD-3-Clause
|
|
*/
|
|
{
|
|
exports.GREATEST_LOWER_BOUND = 1;
|
|
exports.LEAST_UPPER_BOUND = 2;
|
|
|
|
/**
|
|
* Recursive implementation of binary search.
|
|
*
|
|
* @param aLow Indices here and lower do not contain the needle.
|
|
* @param aHigh Indices here and higher do not contain the needle.
|
|
* @param aNeedle The element being searched for.
|
|
* @param aHaystack The non-empty array being searched.
|
|
* @param aCompare Function which takes two elements and returns -1, 0, or 1.
|
|
* @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
|
|
* 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
|
|
* closest element that is smaller than or greater than the one we are
|
|
* searching for, respectively, if the exact element cannot be found.
|
|
*/
|
|
function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
|
|
// This function terminates when one of the following is true:
|
|
//
|
|
// 1. We find the exact element we are looking for.
|
|
//
|
|
// 2. We did not find the exact element, but we can return the index of
|
|
// the next-closest element.
|
|
//
|
|
// 3. We did not find the exact element, and there is no next-closest
|
|
// element than the one we are searching for, so we return -1.
|
|
var mid = Math.floor((aHigh - aLow) / 2) + aLow;
|
|
var cmp = aCompare(aNeedle, aHaystack[mid], true);
|
|
if (cmp === 0) {
|
|
// Found the element we are looking for.
|
|
return mid;
|
|
}
|
|
else if (cmp > 0) {
|
|
// Our needle is greater than aHaystack[mid].
|
|
if (aHigh - mid > 1) {
|
|
// The element is in the upper half.
|
|
return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
|
|
}
|
|
|
|
// The exact needle element was not found in this haystack. Determine if
|
|
// we are in termination case (3) or (2) and return the appropriate thing.
|
|
if (aBias == exports.LEAST_UPPER_BOUND) {
|
|
return aHigh < aHaystack.length ? aHigh : -1;
|
|
} else {
|
|
return mid;
|
|
}
|
|
}
|
|
else {
|
|
// Our needle is less than aHaystack[mid].
|
|
if (mid - aLow > 1) {
|
|
// The element is in the lower half.
|
|
return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
|
|
}
|
|
|
|
// we are in termination case (3) or (2) and return the appropriate thing.
|
|
if (aBias == exports.LEAST_UPPER_BOUND) {
|
|
return mid;
|
|
} else {
|
|
return aLow < 0 ? -1 : aLow;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* This is an implementation of binary search which will always try and return
|
|
* the index of the closest element if there is no exact hit. This is because
|
|
* mappings between original and generated line/col pairs are single points,
|
|
* and there is an implicit region between each of them, so a miss just means
|
|
* that you aren't on the very start of a region.
|
|
*
|
|
* @param aNeedle The element you are looking for.
|
|
* @param aHaystack The array that is being searched.
|
|
* @param aCompare A function which takes the needle and an element in the
|
|
* array and returns -1, 0, or 1 depending on whether the needle is less
|
|
* than, equal to, or greater than the element, respectively.
|
|
* @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
|
|
* 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
|
|
* closest element that is smaller than or greater than the one we are
|
|
* searching for, respectively, if the exact element cannot be found.
|
|
* Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
|
|
*/
|
|
exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
|
|
if (aHaystack.length === 0) {
|
|
return -1;
|
|
}
|
|
|
|
var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
|
|
aCompare, aBias || exports.GREATEST_LOWER_BOUND);
|
|
if (index < 0) {
|
|
return -1;
|
|
}
|
|
|
|
// We have found either the exact element, or the next-closest element than
|
|
// the one we are searching for. However, there may be more than one such
|
|
// element. Make sure we always return the smallest of these.
|
|
while (index - 1 >= 0) {
|
|
if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
|
|
break;
|
|
}
|
|
--index;
|
|
}
|
|
|
|
return index;
|
|
};
|
|
}
|
|
|
|
|
|
/***/ },
|
|
/* 10 */
|
|
/***/ function(module, exports) {
|
|
|
|
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
/*
|
|
* Copyright 2011 Mozilla Foundation and contributors
|
|
* Licensed under the New BSD license. See LICENSE or:
|
|
* http://opensource.org/licenses/BSD-3-Clause
|
|
*/
|
|
{
|
|
// It turns out that some (most?) JavaScript engines don't self-host
|
|
// `Array.prototype.sort`. This makes sense because C++ will likely remain
|
|
// faster than JS when doing raw CPU-intensive sorting. However, when using a
|
|
// custom comparator function, calling back and forth between the VM's C++ and
|
|
// JIT'd JS is rather slow *and* loses JIT type information, resulting in
|
|
// worse generated code for the comparator function than would be optimal. In
|
|
// fact, when sorting with a comparator, these costs outweigh the benefits of
|
|
// sorting in C++. By using our own JS-implemented Quick Sort (below), we get
|
|
// a ~3500ms mean speed-up in `bench/bench.html`.
|
|
|
|
/**
|
|
* Swap the elements indexed by `x` and `y` in the array `ary`.
|
|
*
|
|
* @param {Array} ary
|
|
* The array.
|
|
* @param {Number} x
|
|
* The index of the first item.
|
|
* @param {Number} y
|
|
* The index of the second item.
|
|
*/
|
|
function swap(ary, x, y) {
|
|
var temp = ary[x];
|
|
ary[x] = ary[y];
|
|
ary[y] = temp;
|
|
}
|
|
|
|
/**
|
|
* Returns a random integer within the range `low .. high` inclusive.
|
|
*
|
|
* @param {Number} low
|
|
* The lower bound on the range.
|
|
* @param {Number} high
|
|
* The upper bound on the range.
|
|
*/
|
|
function randomIntInRange(low, high) {
|
|
return Math.round(low + (Math.random() * (high - low)));
|
|
}
|
|
|
|
/**
|
|
* The Quick Sort algorithm.
|
|
*
|
|
* @param {Array} ary
|
|
* An array to sort.
|
|
* @param {function} comparator
|
|
* Function to use to compare two items.
|
|
* @param {Number} p
|
|
* Start index of the array
|
|
* @param {Number} r
|
|
* End index of the array
|
|
*/
|
|
function doQuickSort(ary, comparator, p, r) {
|
|
// If our lower bound is less than our upper bound, we (1) partition the
|
|
// array into two pieces and (2) recurse on each half. If it is not, this is
|
|
// the empty array and our base case.
|
|
|
|
if (p < r) {
|
|
// (1) Partitioning.
|
|
//
|
|
// The partitioning chooses a pivot between `p` and `r` and moves all
|
|
// elements that are less than or equal to the pivot to the before it, and
|
|
// all the elements that are greater than it after it. The effect is that
|
|
// once partition is done, the pivot is in the exact place it will be when
|
|
// the array is put in sorted order, and it will not need to be moved
|
|
// again. This runs in O(n) time.
|
|
|
|
// Always choose a random pivot so that an input array which is reverse
|
|
// sorted does not cause O(n^2) running time.
|
|
var pivotIndex = randomIntInRange(p, r);
|
|
var i = p - 1;
|
|
|
|
swap(ary, pivotIndex, r);
|
|
var pivot = ary[r];
|
|
|
|
// Immediately after `j` is incremented in this loop, the following hold
|
|
// true:
|
|
//
|
|
// * Every element in `ary[p .. i]` is less than or equal to the pivot.
|
|
//
|
|
// * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
|
|
for (var j = p; j < r; j++) {
|
|
if (comparator(ary[j], pivot) <= 0) {
|
|
i += 1;
|
|
swap(ary, i, j);
|
|
}
|
|
}
|
|
|
|
swap(ary, i + 1, j);
|
|
var q = i + 1;
|
|
|
|
// (2) Recurse on each half.
|
|
|
|
doQuickSort(ary, comparator, p, q - 1);
|
|
doQuickSort(ary, comparator, q + 1, r);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sort the given array in-place with the given comparator function.
|
|
*
|
|
* @param {Array} ary
|
|
* An array to sort.
|
|
* @param {function} comparator
|
|
* Function to use to compare two items.
|
|
*/
|
|
exports.quickSort = function (ary, comparator) {
|
|
doQuickSort(ary, comparator, 0, ary.length - 1);
|
|
};
|
|
}
|
|
|
|
|
|
/***/ },
|
|
/* 11 */
|
|
/***/ function(module, exports, __webpack_require__) {
|
|
|
|
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
/*
|
|
* Copyright 2011 Mozilla Foundation and contributors
|
|
* Licensed under the New BSD license. See LICENSE or:
|
|
* http://opensource.org/licenses/BSD-3-Clause
|
|
*/
|
|
{
|
|
var SourceMapGenerator = __webpack_require__(3).SourceMapGenerator;
|
|
var util = __webpack_require__(2);
|
|
|
|
// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
|
|
// operating systems these days (capturing the result).
|
|
var REGEX_NEWLINE = /(\r?\n)/;
|
|
|
|
// Newline character code for charCodeAt() comparisons
|
|
var NEWLINE_CODE = 10;
|
|
|
|
// Private symbol for identifying `SourceNode`s when multiple versions of
|
|
// the source-map library are loaded. This MUST NOT CHANGE across
|
|
// versions!
|
|
var isSourceNode = "$$$isSourceNode$$$";
|
|
|
|
/**
|
|
* SourceNodes provide a way to abstract over interpolating/concatenating
|
|
* snippets of generated JavaScript source code while maintaining the line and
|
|
* column information associated with the original source code.
|
|
*
|
|
* @param aLine The original line number.
|
|
* @param aColumn The original column number.
|
|
* @param aSource The original source's filename.
|
|
* @param aChunks Optional. An array of strings which are snippets of
|
|
* generated JS, or other SourceNodes.
|
|
* @param aName The original identifier.
|
|
*/
|
|
function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
|
|
this.children = [];
|
|
this.sourceContents = {};
|
|
this.line = aLine == null ? null : aLine;
|
|
this.column = aColumn == null ? null : aColumn;
|
|
this.source = aSource == null ? null : aSource;
|
|
this.name = aName == null ? null : aName;
|
|
this[isSourceNode] = true;
|
|
if (aChunks != null) this.add(aChunks);
|
|
}
|
|
|
|
/**
|
|
* Creates a SourceNode from generated code and a SourceMapConsumer.
|
|
*
|
|
* @param aGeneratedCode The generated code
|
|
* @param aSourceMapConsumer The SourceMap for the generated code
|
|
* @param aRelativePath Optional. The path that relative sources in the
|
|
* SourceMapConsumer should be relative to.
|
|
*/
|
|
SourceNode.fromStringWithSourceMap =
|
|
function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
|
|
// The SourceNode we want to fill with the generated code
|
|
// and the SourceMap
|
|
var node = new SourceNode();
|
|
|
|
// All even indices of this array are one line of the generated code,
|
|
// while all odd indices are the newlines between two adjacent lines
|
|
// (since `REGEX_NEWLINE` captures its match).
|
|
// Processed fragments are removed from this array, by calling `shiftNextLine`.
|
|
var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
|
|
var shiftNextLine = function() {
|
|
var lineContents = remainingLines.shift();
|
|
// The last line of a file might not have a newline.
|
|
var newLine = remainingLines.shift() || "";
|
|
return lineContents + newLine;
|
|
};
|
|
|
|
// We need to remember the position of "remainingLines"
|
|
var lastGeneratedLine = 1, lastGeneratedColumn = 0;
|
|
|
|
// The generate SourceNodes we need a code range.
|
|
// To extract it current and last mapping is used.
|
|
// Here we store the last mapping.
|
|
var lastMapping = null;
|
|
|
|
aSourceMapConsumer.eachMapping(function (mapping) {
|
|
if (lastMapping !== null) {
|
|
// We add the code from "lastMapping" to "mapping":
|
|
// First check if there is a new line in between.
|
|
if (lastGeneratedLine < mapping.generatedLine) {
|
|
var code = "";
|
|
// Associate first line with "lastMapping"
|
|
addMappingWithCode(lastMapping, shiftNextLine());
|
|
lastGeneratedLine++;
|
|
lastGeneratedColumn = 0;
|
|
// The remaining code is added without mapping
|
|
} else {
|
|
// There is no new line in between.
|
|
// Associate the code between "lastGeneratedColumn" and
|
|
// "mapping.generatedColumn" with "lastMapping"
|
|
var nextLine = remainingLines[0];
|
|
var code = nextLine.substr(0, mapping.generatedColumn -
|
|
lastGeneratedColumn);
|
|
remainingLines[0] = nextLine.substr(mapping.generatedColumn -
|
|
lastGeneratedColumn);
|
|
lastGeneratedColumn = mapping.generatedColumn;
|
|
addMappingWithCode(lastMapping, code);
|
|
// No more remaining code, continue
|
|
lastMapping = mapping;
|
|
return;
|
|
}
|
|
}
|
|
// We add the generated code until the first mapping
|
|
// to the SourceNode without any mapping.
|
|
// Each line is added as separate string.
|
|
while (lastGeneratedLine < mapping.generatedLine) {
|
|
node.add(shiftNextLine());
|
|
lastGeneratedLine++;
|
|
}
|
|
if (lastGeneratedColumn < mapping.generatedColumn) {
|
|
var nextLine = remainingLines[0];
|
|
node.add(nextLine.substr(0, mapping.generatedColumn));
|
|
remainingLines[0] = nextLine.substr(mapping.generatedColumn);
|
|
lastGeneratedColumn = mapping.generatedColumn;
|
|
}
|
|
lastMapping = mapping;
|
|
}, this);
|
|
// We have processed all mappings.
|
|
if (remainingLines.length > 0) {
|
|
if (lastMapping) {
|
|
// Associate the remaining code in the current line with "lastMapping"
|
|
addMappingWithCode(lastMapping, shiftNextLine());
|
|
}
|
|
// and add the remaining lines without any mapping
|
|
node.add(remainingLines.join(""));
|
|
}
|
|
|
|
// Copy sourcesContent into SourceNode
|
|
aSourceMapConsumer.sources.forEach(function (sourceFile) {
|
|
var content = aSourceMapConsumer.sourceContentFor(sourceFile);
|
|
if (content != null) {
|
|
if (aRelativePath != null) {
|
|
sourceFile = util.join(aRelativePath, sourceFile);
|
|
}
|
|
node.setSourceContent(sourceFile, content);
|
|
}
|
|
});
|
|
|
|
return node;
|
|
|
|
function addMappingWithCode(mapping, code) {
|
|
if (mapping === null || mapping.source === undefined) {
|
|
node.add(code);
|
|
} else {
|
|
var source = aRelativePath
|
|
? util.join(aRelativePath, mapping.source)
|
|
: mapping.source;
|
|
node.add(new SourceNode(mapping.originalLine,
|
|
mapping.originalColumn,
|
|
source,
|
|
code,
|
|
mapping.name));
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Add a chunk of generated JS to this source node.
|
|
*
|
|
* @param aChunk A string snippet of generated JS code, another instance of
|
|
* SourceNode, or an array where each member is one of those things.
|
|
*/
|
|
SourceNode.prototype.add = function SourceNode_add(aChunk) {
|
|
if (Array.isArray(aChunk)) {
|
|
aChunk.forEach(function (chunk) {
|
|
this.add(chunk);
|
|
}, this);
|
|
}
|
|
else if (aChunk[isSourceNode] || typeof aChunk === "string") {
|
|
if (aChunk) {
|
|
this.children.push(aChunk);
|
|
}
|
|
}
|
|
else {
|
|
throw new TypeError(
|
|
"Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
|
|
);
|
|
}
|
|
return this;
|
|
};
|
|
|
|
/**
|
|
* Add a chunk of generated JS to the beginning of this source node.
|
|
*
|
|
* @param aChunk A string snippet of generated JS code, another instance of
|
|
* SourceNode, or an array where each member is one of those things.
|
|
*/
|
|
SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
|
|
if (Array.isArray(aChunk)) {
|
|
for (var i = aChunk.length-1; i >= 0; i--) {
|
|
this.prepend(aChunk[i]);
|
|
}
|
|
}
|
|
else if (aChunk[isSourceNode] || typeof aChunk === "string") {
|
|
this.children.unshift(aChunk);
|
|
}
|
|
else {
|
|
throw new TypeError(
|
|
"Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
|
|
);
|
|
}
|
|
return this;
|
|
};
|
|
|
|
/**
|
|
* Walk over the tree of JS snippets in this node and its children. The
|
|
* walking function is called once for each snippet of JS and is passed that
|
|
* snippet and the its original associated source's line/column location.
|
|
*
|
|
* @param aFn The traversal function.
|
|
*/
|
|
SourceNode.prototype.walk = function SourceNode_walk(aFn) {
|
|
var chunk;
|
|
for (var i = 0, len = this.children.length; i < len; i++) {
|
|
chunk = this.children[i];
|
|
if (chunk[isSourceNode]) {
|
|
chunk.walk(aFn);
|
|
}
|
|
else {
|
|
if (chunk !== '') {
|
|
aFn(chunk, { source: this.source,
|
|
line: this.line,
|
|
column: this.column,
|
|
name: this.name });
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
|
|
* each of `this.children`.
|
|
*
|
|
* @param aSep The separator.
|
|
*/
|
|
SourceNode.prototype.join = function SourceNode_join(aSep) {
|
|
var newChildren;
|
|
var i;
|
|
var len = this.children.length;
|
|
if (len > 0) {
|
|
newChildren = [];
|
|
for (i = 0; i < len-1; i++) {
|
|
newChildren.push(this.children[i]);
|
|
newChildren.push(aSep);
|
|
}
|
|
newChildren.push(this.children[i]);
|
|
this.children = newChildren;
|
|
}
|
|
return this;
|
|
};
|
|
|
|
/**
|
|
* Call String.prototype.replace on the very right-most source snippet. Useful
|
|
* for trimming whitespace from the end of a source node, etc.
|
|
*
|
|
* @param aPattern The pattern to replace.
|
|
* @param aReplacement The thing to replace the pattern with.
|
|
*/
|
|
SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
|
|
var lastChild = this.children[this.children.length - 1];
|
|
if (lastChild[isSourceNode]) {
|
|
lastChild.replaceRight(aPattern, aReplacement);
|
|
}
|
|
else if (typeof lastChild === 'string') {
|
|
this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
|
|
}
|
|
else {
|
|
this.children.push(''.replace(aPattern, aReplacement));
|
|
}
|
|
return this;
|
|
};
|
|
|
|
/**
|
|
* Set the source content for a source file. This will be added to the SourceMapGenerator
|
|
* in the sourcesContent field.
|
|
*
|
|
* @param aSourceFile The filename of the source file
|
|
* @param aSourceContent The content of the source file
|
|
*/
|
|
SourceNode.prototype.setSourceContent =
|
|
function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
|
|
this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
|
|
};
|
|
|
|
/**
|
|
* Walk over the tree of SourceNodes. The walking function is called for each
|
|
* source file content and is passed the filename and source content.
|
|
*
|
|
* @param aFn The traversal function.
|
|
*/
|
|
SourceNode.prototype.walkSourceContents =
|
|
function SourceNode_walkSourceContents(aFn) {
|
|
for (var i = 0, len = this.children.length; i < len; i++) {
|
|
if (this.children[i][isSourceNode]) {
|
|
this.children[i].walkSourceContents(aFn);
|
|
}
|
|
}
|
|
|
|
var sources = Object.keys(this.sourceContents);
|
|
for (var i = 0, len = sources.length; i < len; i++) {
|
|
aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Return the string representation of this source node. Walks over the tree
|
|
* and concatenates all the various snippets together to one string.
|
|
*/
|
|
SourceNode.prototype.toString = function SourceNode_toString() {
|
|
var str = "";
|
|
this.walk(function (chunk) {
|
|
str += chunk;
|
|
});
|
|
return str;
|
|
};
|
|
|
|
/**
|
|
* Returns the string representation of this source node along with a source
|
|
* map.
|
|
*/
|
|
SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
|
|
var generated = {
|
|
code: "",
|
|
line: 1,
|
|
column: 0
|
|
};
|
|
var map = new SourceMapGenerator(aArgs);
|
|
var sourceMappingActive = false;
|
|
var lastOriginalSource = null;
|
|
var lastOriginalLine = null;
|
|
var lastOriginalColumn = null;
|
|
var lastOriginalName = null;
|
|
this.walk(function (chunk, original) {
|
|
generated.code += chunk;
|
|
if (original.source !== null
|
|
&& original.line !== null
|
|
&& original.column !== null) {
|
|
if(lastOriginalSource !== original.source
|
|
|| lastOriginalLine !== original.line
|
|
|| lastOriginalColumn !== original.column
|
|
|| lastOriginalName !== original.name) {
|
|
map.addMapping({
|
|
source: original.source,
|
|
original: {
|
|
line: original.line,
|
|
column: original.column
|
|
},
|
|
generated: {
|
|
line: generated.line,
|
|
column: generated.column
|
|
},
|
|
name: original.name
|
|
});
|
|
}
|
|
lastOriginalSource = original.source;
|
|
lastOriginalLine = original.line;
|
|
lastOriginalColumn = original.column;
|
|
lastOriginalName = original.name;
|
|
sourceMappingActive = true;
|
|
} else if (sourceMappingActive) {
|
|
map.addMapping({
|
|
generated: {
|
|
line: generated.line,
|
|
column: generated.column
|
|
}
|
|
});
|
|
lastOriginalSource = null;
|
|
sourceMappingActive = false;
|
|
}
|
|
for (var idx = 0, length = chunk.length; idx < length; idx++) {
|
|
if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
|
|
generated.line++;
|
|
generated.column = 0;
|
|
// Mappings end at eol
|
|
if (idx + 1 === length) {
|
|
lastOriginalSource = null;
|
|
sourceMappingActive = false;
|
|
} else if (sourceMappingActive) {
|
|
map.addMapping({
|
|
source: original.source,
|
|
original: {
|
|
line: original.line,
|
|
column: original.column
|
|
},
|
|
generated: {
|
|
line: generated.line,
|
|
column: generated.column
|
|
},
|
|
name: original.name
|
|
});
|
|
}
|
|
} else {
|
|
generated.column++;
|
|
}
|
|
}
|
|
});
|
|
this.walkSourceContents(function (sourceFile, sourceContent) {
|
|
map.setSourceContent(sourceFile, sourceContent);
|
|
});
|
|
|
|
return { code: generated.code, map: map };
|
|
};
|
|
|
|
exports.SourceNode = SourceNode;
|
|
}
|
|
|
|
|
|
/***/ }
|
|
/******/ ]);
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgNWY2ODNjMjEwMTc4ZjE5OGUxOWMiLCJ3ZWJwYWNrOi8vLy4vdGVzdC90ZXN0LXNvdXJjZS1ub2RlLmpzIiwid2VicGFjazovLy8uL3Rlc3QvdXRpbC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvdXRpbC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvc291cmNlLW1hcC1nZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbGliL2Jhc2U2NC12bHEuanMiLCJ3ZWJwYWNrOi8vLy4vbGliL2Jhc2U2NC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYXJyYXktc2V0LmpzIiwid2VicGFjazovLy8uL2xpYi9tYXBwaW5nLWxpc3QuanMiLCJ3ZWJwYWNrOi8vLy4vbGliL3NvdXJjZS1tYXAtY29uc3VtZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbGliL2JpbmFyeS1zZWFyY2guanMiLCJ3ZWJwYWNrOi8vLy4vbGliL3F1aWNrLXNvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbGliL3NvdXJjZS1ub2RlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQWU7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7OztBQ3RDQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGlDQUFnQzs7QUFFaEM7QUFDQTs7QUFFQTtBQUNBLGdDQUErQjtBQUMvQjtBQUNBLHlDQUF3QztBQUN4QyxpQkFBZ0I7O0FBRWhCO0FBQ0E7QUFDQSxrQkFBaUI7QUFDakIsTUFBSztBQUNMO0FBQ0EsOEJBQTZCO0FBQzdCLE1BQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0EscUNBQW9DO0FBQ3BDLHVEQUFzRDtBQUN0RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1REFBc0Q7QUFDdEQ7O0FBRUE7QUFDQSxvQ0FBbUM7QUFDbkM7QUFDQSx5Q0FBd0M7QUFDeEMsaUJBQWdCO0FBQ2hCLHFEQUFvRDtBQUNwRCwrQ0FBOEM7QUFDOUMsc0NBQXFDO0FBQ3JDO0FBQ0EsdURBQXNEO0FBQ3REOztBQUVBO0FBQ0E7QUFDQSxzQkFBcUI7QUFDckIsTUFBSztBQUNMO0FBQ0Esa0NBQWlDO0FBQ2pDLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0Esb0RBQW1EO0FBQ25ELCtFQUE4RTtBQUM5RSxxQ0FBb0M7QUFDcEMsbUNBQWtDLFdBQVc7QUFDN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsK0NBQThDO0FBQzlDLHNGQUFxRjtBQUNyRiwwRkFBeUY7QUFDekYsa0NBQWlDLElBQUk7QUFDckM7QUFDQSxRQUFPLHFCQUFxQiwrQ0FBK0M7QUFDM0UsUUFBTyxvRUFBb0U7QUFDM0UsUUFBTyxvRUFBb0U7QUFDM0UsUUFBTyxRQUFRLDREQUE0RDtBQUMzRSxRQUFPLG9FQUFvRTtBQUMzRSxRQUFPLG9FQUFvRTtBQUMzRSxRQUFPLFFBQVEsNERBQTREO0FBQzNFLFFBQU8sUUFBUSxJQUFJLHdEQUF3RDtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLCtDQUE4QztBQUM5QztBQUNBO0FBQ0E7QUFDQSxvQ0FBbUM7QUFDbkMsMEZBQXlGO0FBQ3pGLGtDQUFpQyxJQUFJO0FBQ3JDO0FBQ0E7QUFDQSxNQUFLOztBQUVMO0FBQ0Esc0JBQXFCO0FBQ3JCLHFCQUFvQjtBQUNwQix5QkFBd0I7QUFDeEIsU0FBUSxJQUFJO0FBQ1o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRzs7QUFFSDtBQUNBO0FBQ0EscUJBQW9CO0FBQ3BCLDBCQUF5QjtBQUN6Qix1REFBc0QsZUFBZTtBQUNyRSw4REFBNkQ7QUFDN0QsV0FBVSxJQUFJO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsTUFBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMEMsWUFBWTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWlDLGlCQUFpQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3RUFBdUU7QUFDdkU7QUFDQSx1RUFBc0U7QUFDdEUsNkZBQTRGO0FBQzVGO0FBQ0E7QUFDQTtBQUNBLE1BQUs7O0FBRUwsdURBQXNEOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBd0M7QUFDeEM7QUFDQTtBQUNBLHdDQUF1QztBQUN2QztBQUNBO0FBQ0EsMENBQXlDO0FBQ3pDO0FBQ0EseUNBQXdDO0FBQ3hDLFNBQVEsSUFBSTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSzs7QUFFTDtBQUNBLHFCQUFvQjtBQUNwQix3QkFBdUI7QUFDdkIsa0JBQWlCLGVBQWU7QUFDaEMsU0FBUSxJQUFJO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0EsbUJBQWtCLHFCQUFxQjtBQUN2QztBQUNBLGtCQUFpQjtBQUNqQixNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsbUJBQWtCLHFCQUFxQjtBQUN2QztBQUNBLGtCQUFpQjtBQUNqQixNQUFLO0FBQ0w7QUFDQSxtQkFBa0Isc0JBQXNCO0FBQ3hDO0FBQ0Esa0JBQWlCO0FBQ2pCLE1BQUs7QUFDTDtBQUNBLG1CQUFrQixxQkFBcUI7QUFDdkM7QUFDQSxrQkFBaUI7QUFDakIsTUFBSztBQUNMO0FBQ0EsbUJBQWtCLHFCQUFxQjtBQUN2QztBQUNBO0FBQ0Esa0JBQWlCO0FBQ2pCLE1BQUs7QUFDTDtBQUNBLG1CQUFrQixxQkFBcUI7QUFDdkM7QUFDQTtBQUNBLGtCQUFpQjtBQUNqQixNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsbUJBQWtCO0FBQ2xCLE1BQUs7QUFDTDtBQUNBLG1CQUFrQixzQkFBc0I7QUFDeEM7QUFDQTtBQUNBLGtCQUFpQjtBQUNqQixNQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFHOztBQUVIO0FBQ0E7QUFDQSxrREFBaUQsMkJBQTJCLHdCQUF3QjtBQUNwRywwREFBeUQ7QUFDekQseURBQXdEO0FBQ3hELG1EQUFrRDtBQUNsRDtBQUNBLG1EQUFrRDtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7O0FBRUw7QUFDQSxxQkFBb0I7QUFDcEIseUJBQXdCO0FBQ3hCLHNCQUFxQjtBQUNyQiw2QkFBNEI7QUFDNUIsNEJBQTJCO0FBQzNCLHNCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQSxtQkFBa0IscUJBQXFCO0FBQ3ZDO0FBQ0Esa0JBQWlCO0FBQ2pCLE1BQUs7QUFDTDtBQUNBLG1CQUFrQixxQkFBcUI7QUFDdkM7QUFDQSxrQkFBaUI7QUFDakIsTUFBSztBQUNMO0FBQ0EsbUJBQWtCLHFCQUFxQjtBQUN2QztBQUNBLGtCQUFpQjtBQUNqQixNQUFLO0FBQ0w7QUFDQSxtQkFBa0IscUJBQXFCO0FBQ3ZDO0FBQ0Esa0JBQWlCO0FBQ2pCLE1BQUs7QUFDTDtBQUNBLG1CQUFrQixxQkFBcUI7QUFDdkM7QUFDQSxrQkFBaUI7QUFDakIsTUFBSztBQUNMO0FBQ0EsbUJBQWtCLHFCQUFxQjtBQUN2QztBQUNBLGtCQUFpQjtBQUNqQixNQUFLO0FBQ0w7QUFDQSxtQkFBa0Isc0JBQXNCO0FBQ3hDO0FBQ0Esa0JBQWlCO0FBQ2pCLE1BQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsSUFBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtEQUFpRDtBQUNqRCx5Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsTUFBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxxQkFBb0I7QUFDcEIsWUFBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQSxtQkFBa0IscUJBQXFCO0FBQ3ZDO0FBQ0Esa0JBQWlCO0FBQ2pCLE1BQUs7QUFDTDtBQUNBLG1CQUFrQixxQkFBcUI7QUFDdkM7QUFDQSxrQkFBaUI7QUFDakIsTUFBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxJQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQThDO0FBQzlDO0FBQ0E7QUFDQSxrQ0FBaUMsSUFBSTtBQUNyQztBQUNBO0FBQ0E7QUFDQSxNQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBOEM7QUFDOUM7QUFDQTtBQUNBLGtDQUFpQyxJQUFJO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDaG1CQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBMkI7QUFDM0IsNEJBQTJCO0FBQzNCLHFEQUFvRCxnQkFBZ0I7QUFDcEUscURBQW9ELGFBQWE7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXNEO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUFzRDtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUFzRDtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBd0M7QUFDeEMsaUNBQWdDO0FBQ2hDLGlCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXNDO0FBQ3RDLDhCQUE2QjtBQUM3QixpQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXdDO0FBQ3hDLGlDQUFnQztBQUNoQyxpQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUFzQztBQUN0Qyw4QkFBNkI7QUFDN0IsaUJBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBa0M7QUFDbEMsMkJBQTBCO0FBQzFCLFdBQVU7QUFDVixpQ0FBZ0M7QUFDaEMsd0JBQXVCO0FBQ3ZCLFdBQVU7QUFDVjtBQUNBO0FBQ0EsdURBQXNEO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQWtDO0FBQ2xDLDJCQUEwQjtBQUMxQixXQUFVO0FBQ1YsaUNBQWdDO0FBQ2hDLHdCQUF1QjtBQUN2QixXQUFVO0FBQ1Y7QUFDQTtBQUNBLHVEQUFzRDtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBbUIsNEJBQTRCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQiw4QkFBOEI7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXFCLHFDQUFxQztBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDdlNBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpREFBZ0QsUUFBUTtBQUN4RDtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNoWEEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZDQUE0QyxTQUFTO0FBQ3JEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7O0FDM1lBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUEyRDtBQUMzRCxxQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUM1SUEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFrQjtBQUNsQixtQkFBa0I7O0FBRWxCLHNCQUFxQjtBQUNyQix1QkFBc0I7O0FBRXRCLG1CQUFrQjtBQUNsQixtQkFBa0I7O0FBRWxCLG1CQUFrQjtBQUNsQixvQkFBbUI7O0FBRW5CO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNuRUEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXdDLFNBQVM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7QUN2R0EsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7QUMvRUEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlEQUF3RDtBQUN4RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLHNCQUFxQjtBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYTs7QUFFYjtBQUNBO0FBQ0EsVUFBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBNkIsTUFBTTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF3RDtBQUN4RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHlEQUF3RCxZQUFZO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBLElBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0NBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBMkIsY0FBYztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQXlCLHdDQUF3QztBQUNqRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWlELG1CQUFtQixFQUFFO0FBQ3RFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQixvQkFBb0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUErQixNQUFNO0FBQ3JDO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXdEO0FBQ3hEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFxQiwyQkFBMkI7QUFDaEQsd0JBQXVCLCtDQUErQztBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXFCLDJCQUEyQjtBQUNoRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBcUIsMkJBQTJCO0FBQ2hEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFxQiwyQkFBMkI7QUFDaEQ7QUFDQTtBQUNBLHdCQUF1Qiw0QkFBNEI7QUFDbkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7QUN6akNBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7Ozs7O0FDL0dBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWEsTUFBTTtBQUNuQjtBQUNBLGNBQWEsT0FBTztBQUNwQjtBQUNBLGNBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFhLE9BQU87QUFDcEI7QUFDQSxjQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFhLE1BQU07QUFDbkI7QUFDQSxjQUFhLFNBQVM7QUFDdEI7QUFDQSxjQUFhLE9BQU87QUFDcEI7QUFDQSxjQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFxQixPQUFPO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFhLE1BQU07QUFDbkI7QUFDQSxjQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDbEhBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPOztBQUVQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBbUMsUUFBUTtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBK0MsU0FBUztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBc0I7QUFDdEI7QUFDQTtBQUNBLHlDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBaUIsV0FBVztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWlELFNBQVM7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBMkMsU0FBUztBQUNwRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxjQUFhO0FBQ2I7QUFDQSxZQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsK0NBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsZ0JBQWU7QUFDZjtBQUNBLGNBQWE7QUFDYjtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBLE1BQUs7O0FBRUwsYUFBWTtBQUNaOztBQUVBO0FBQ0EiLCJmaWxlIjoidGVzdF9zb3VyY2Vfbm9kZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRleHBvcnRzOiB7fSxcbiBcdFx0XHRpZDogbW9kdWxlSWQsXG4gXHRcdFx0bG9hZGVkOiBmYWxzZVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjay9ib290c3RyYXAgNWY2ODNjMjEwMTc4ZjE5OGUxOWNcbiAqKi8iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG57XG4gIHZhciB1dGlsID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcbiAgdmFyIFNvdXJjZU1hcEdlbmVyYXRvciA9IHJlcXVpcmUoJy4uL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvcicpLlNvdXJjZU1hcEdlbmVyYXRvcjtcbiAgdmFyIFNvdXJjZU1hcENvbnN1bWVyID0gcmVxdWlyZSgnLi4vbGliL3NvdXJjZS1tYXAtY29uc3VtZXInKS5Tb3VyY2VNYXBDb25zdW1lcjtcbiAgdmFyIFNvdXJjZU5vZGUgPSByZXF1aXJlKCcuLi9saWIvc291cmNlLW5vZGUnKS5Tb3VyY2VOb2RlO1xuXG4gIGZ1bmN0aW9uIGZvckVhY2hOZXdsaW5lKGZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhc3NlcnQpIHtcbiAgICAgIFsnXFxuJywgJ1xcclxcbiddLmZvckVhY2goZm4uYmluZChudWxsLCBhc3NlcnQpKTtcbiAgICB9XG4gIH1cblxuICBleHBvcnRzWyd0ZXN0IC5hZGQoKSddID0gZnVuY3Rpb24gKGFzc2VydCkge1xuICAgIHZhciBub2RlID0gbmV3IFNvdXJjZU5vZGUobnVsbCwgbnVsbCwgbnVsbCk7XG5cbiAgICAvLyBBZGRpbmcgYSBzdHJpbmcgd29ya3MuXG4gICAgbm9kZS5hZGQoJ2Z1bmN0aW9uIG5vb3AoKSB7fScpO1xuXG4gICAgLy8gQWRkaW5nIGFub3RoZXIgc291cmNlIG5vZGUgd29ya3MuXG4gICAgbm9kZS5hZGQobmV3IFNvdXJjZU5vZGUobnVsbCwgbnVsbCwgbnVsbCkpO1xuXG4gICAgLy8gQWRkaW5nIGFuIGFycmF5IHdvcmtzLlxuICAgIG5vZGUuYWRkKFsnZnVuY3Rpb24gZm9vKCkgeycsXG4gICAgICAgICAgICAgIG5ldyBTb3VyY2VOb2RlKG51bGwsIG51bGwsIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXR1cm4gMTA7JyksXG4gICAgICAgICAgICAgICd9J10pO1xuXG4gICAgLy8gQWRkaW5nIG90aGVyIHN0dWZmIGRvZXNuJ3QuXG4gICAgYXNzZXJ0LnRocm93cyhmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmFkZCh7fSk7XG4gICAgfSk7XG4gICAgYXNzZXJ0LnRocm93cyhmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmFkZChmdW5jdGlvbiAoKSB7fSk7XG4gICAgfSk7XG4gIH07XG5cbiAgZXhwb3J0c1sndGVzdCAucHJlcGVuZCgpJ10gPSBmdW5jdGlvbiAoYXNzZXJ0KSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgU291cmNlTm9kZShudWxsLCBudWxsLCBudWxsKTtcblxuICAgIC8vIFByZXBlbmRpbmcgYSBzdHJpbmcgd29ya3MuXG4gICAgbm9kZS5wcmVwZW5kKCdmdW5jdGlvbiBub29wKCkge30nKTtcbiAgICBhc3NlcnQuZXF1YWwobm9kZS5jaGlsZHJlblswXSwgJ2Z1bmN0aW9uIG5vb3AoKSB7fScpO1xuICAgIGFzc2VydC5lcXVhbChub2RlLmNoaWxkcmVuLmxlbmd0aCwgMSk7XG5cbiAgICAvLyBQcmVwZW5kaW5nIGFub3RoZXIgc291cmNlIG5vZGUgd29ya3MuXG4gICAgbm9kZS5wcmVwZW5kKG5ldyBTb3VyY2VOb2RlKG51bGwsIG51bGwsIG51bGwpKTtcbiAgICBhc3NlcnQuZXF1YWwobm9kZS5jaGlsZHJlblswXSwgJycpO1xuICAgIGFzc2VydC5lcXVhbChub2RlLmNoaWxkcmVuWzFdLCAnZnVuY3Rpb24gbm9vcCgpIHt9Jyk7XG4gICAgYXNzZXJ0LmVxdWFsKG5vZGUuY2hpbGRyZW4ubGVuZ3RoLCAyKTtcblxuICAgIC8vIFByZXBlbmRpbmcgYW4gYXJyYXkgd29ya3MuXG4gICAgbm9kZS5wcmVwZW5kKFsnZnVuY3Rpb24gZm9vKCkgeycsXG4gICAgICAgICAgICAgIG5ldyBTb3VyY2VOb2RlKG51bGwsIG51bGwsIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXR1cm4gMTA7JyksXG4gICAgICAgICAgICAgICd9J10pO1xuICAgIGFzc2VydC5lcXVhbChub2RlLmNoaWxkcmVuWzBdLCAnZnVuY3Rpb24gZm9vKCkgeycpO1xuICAgIGFzc2VydC5lcXVhbChub2RlLmNoaWxkcmVuWzFdLCAncmV0dXJuIDEwOycpO1xuICAgIGFzc2VydC5lcXVhbChub2RlLmNoaWxkcmVuWzJdLCAnfScpO1xuICAgIGFzc2VydC5lcXVhbChub2RlLmNoaWxkcmVuWzNdLCAnJyk7XG4gICAgYXNzZXJ0LmVxdWFsKG5vZGUuY2hpbGRyZW5bNF0sICdmdW5jdGlvbiBub29wKCkge30nKTtcbiAgICBhc3NlcnQuZXF1YWwobm9kZS5jaGlsZHJlbi5sZW5ndGgsIDUpO1xuXG4gICAgLy8gUHJlcGVuZGluZyBvdGhlciBzdHVmZiBkb2Vzbid0LlxuICAgIGFzc2VydC50aHJvd3MoZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5wcmVwZW5kKHt9KTtcbiAgICB9KTtcbiAgICBhc3NlcnQudGhyb3dzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUucHJlcGVuZChmdW5jdGlvbiAoKSB7fSk7XG4gICAgfSk7XG4gIH07XG5cbiAgZXhwb3J0c1sndGVzdCAudG9TdHJpbmcoKSddID0gZnVuY3Rpb24gKGFzc2VydCkge1xuICAgIGFzc2VydC5lcXVhbCgobmV3IFNvdXJjZU5vZGUobnVsbCwgbnVsbCwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnZnVuY3Rpb24gZm9vKCkgeycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNvdXJjZU5vZGUobnVsbCwgbnVsbCwgbnVsbCwgJ3JldHVybiAxMDsnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSddKSkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvbygpIHtyZXR1cm4gMTA7fScpO1xuICB9O1xuXG4gIGV4cG9ydHNbJ3Rlc3QgLmpvaW4oKSddID0gZnVuY3Rpb24gKGFzc2VydCkge1xuICAgIGFzc2VydC5lcXVhbCgobmV3IFNvdXJjZU5vZGUobnVsbCwgbnVsbCwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnYScsICdiJywgJ2MnLCAnZCddKSkuam9pbignLCAnKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAnYSwgYiwgYywgZCcpO1xuICB9O1xuXG4gIGV4cG9ydHNbJ3Rlc3QgLndhbGsoKSddID0gZnVuY3Rpb24gKGFzc2VydCkge1xuICAgIHZhciBub2RlID0gbmV3IFNvdXJjZU5vZGUobnVsbCwgbnVsbCwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnKGZ1bmN0aW9uICgpIHtcXG4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICcsIG5ldyBTb3VyY2VOb2RlKDEsIDAsICdhLmpzJywgWydzb21lQ2FsbCgpJ10pLCAnO1xcbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgJywgbmV3IFNvdXJjZU5vZGUoMiwgMCwgJ2IuanMnLCBbJ2lmIChmb28pIGJhcigpJ10pLCAnO1xcbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30oKSk7J10pO1xuICAgIHZhciBleHBlY3RlZCA9IFtcbiAgICAgIHsgc3RyOiAnKGZ1bmN0aW9uICgpIHtcXG4nLCBzb3VyY2U6IG51bGwsICAgbGluZTogbnVsbCwgY29sdW1uOiBudWxsIH0sXG4gICAgICB7IHN0cjogJyAgJywgICAgICAgICAgICAgICBzb3VyY2U6IG51bGwsICAgbGluZTogbnVsbCwgY29sdW1uOiBudWxsIH0sXG4gICAgICB7IHN0cjogJ3NvbWVDYWxsKCknLCAgICAgICBzb3VyY2U6ICdhLmpzJywgbGluZTogMSwgICAgY29sdW1uOiAwICAgIH0sXG4gICAgICB7IHN0cjogJztcXG4nLCAgICAgICAgICAgICAgc291cmNlOiBudWxsLCAgIGxpbmU6IG51bGwsIGNvbHVtbjogbnVsbCB9LFxuICAgICAgeyBzdHI6ICcgICcsICAgICAgICAgICAgICAgc291cmNlOiBudWxsLCAgIGxpbmU6IG51bGwsIGNvbHVtbjogbnVsbCB9LFxuICAgICAgeyBzdHI6ICdpZiAoZm9vKSBiYXIoKScsICAgc291cmNlOiAnYi5qcycsIGxpbmU6IDIsICAgIGNvbHVtbjogMCAgICB9LFxuICAgICAgeyBzdHI6ICc7XFxuJywgICAgICAgICAgICAgIHNvdXJjZTogbnVsbCwgICBsaW5lOiBudWxsLCBjb2x1bW46IG51bGwgfSxcbiAgICAgIHsgc3RyOiAnfSgpKTsnLCAgICAgICAgICAgIHNvdXJjZTogbnVsbCwgICBsaW5lOiBudWxsLCBjb2x1bW46IG51bGwgfSxcbiAgICBdO1xuICAgIHZhciBpID0gMDtcbiAgICBub2RlLndhbGsoZnVuY3Rpb24gKGNodW5rLCBsb2MpIHtcbiAgICAgIGFzc2VydC5lcXVhbChleHBlY3RlZFtpXS5zdHIsIGNodW5rKTtcbiAgICAgIGFzc2VydC5lcXVhbChleHBlY3RlZFtpXS5zb3VyY2UsIGxvYy5zb3VyY2UpO1xuICAgICAgYXNzZXJ0LmVxdWFsKGV4cGVjdGVkW2ldLmxpbmUsIGxvYy5saW5lKTtcbiAgICAgIGFzc2VydC5lcXVhbChleHBlY3RlZFtpXS5jb2x1bW4sIGxvYy5jb2x1bW4pO1xuICAgICAgaSsrO1xuICAgIH0pO1xuICB9O1xuXG4gIGV4cG9ydHNbJ3Rlc3QgLnJlcGxhY2VSaWdodCddID0gZnVuY3Rpb24gKGFzc2VydCkge1xuICAgIHZhciBub2RlO1xuXG4gICAgLy8gTm90IG5lc3RlZFxuICAgIG5vZGUgPSBuZXcgU291cmNlTm9kZShudWxsLCBudWxsLCBudWxsLCAnaGVsbG8gd29ybGQnKTtcbiAgICBub2RlLnJlcGxhY2VSaWdodCgvd29ybGQvLCAndW5pdmVyc2UnKTtcbiAgICBhc3NlcnQuZXF1YWwobm9kZS50b1N0cmluZygpLCAnaGVsbG8gdW5pdmVyc2UnKTtcblxuICAgIC8vIE5lc3RlZFxuICAgIG5vZGUgPSBuZXcgU291cmNlTm9kZShudWxsLCBudWxsLCBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmV3IFNvdXJjZU5vZGUobnVsbCwgbnVsbCwgbnVsbCwgJ2hleSBzZXh5IG1hbWEsICcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNvdXJjZU5vZGUobnVsbCwgbnVsbCwgbnVsbCwgJ3dhbnQgdG8ga2lsbCBhbGwgaHVtYW5zPycpXSk7XG4gICAgbm9kZS5yZXBsYWNlUmlnaHQoL2tpbGwgYWxsIGh1bWFucy8sICd3YXRjaCBGdXR1cmFtYScpO1xuICAgIGFzc2VydC5lcXVhbChub2RlLnRvU3RyaW5nKCksICdoZXkgc2V4eSBtYW1hLCB3YW50IHRvIHdhdGNoIEZ1dHVyYW1hPycpO1xuICB9O1xuXG4gIGV4cG9ydHNbJ3Rlc3QgLnRvU3RyaW5nV2l0aFNvdXJjZU1hcCgpJ10gPSBmb3JFYWNoTmV3bGluZShmdW5jdGlvbiAoYXNzZXJ0LCBubCkge1xuICAgIHZhciBub2RlID0gbmV3IFNvdXJjZU5vZGUobnVsbCwgbnVsbCwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnKGZ1bmN0aW9uICgpIHsnICsgbmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTb3VyY2VOb2RlKDEsIDAsICdhLmpzJywgJ3NvbWVDYWxsJywgJ29yaWdpbmFsQ2FsbCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNvdXJjZU5vZGUoMSwgOCwgJ2EuanMnLCAnKCknKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc7JyArIG5sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICcsIG5ldyBTb3VyY2VOb2RlKDIsIDAsICdiLmpzJywgWydpZiAoZm9vKSBiYXIoKSddKSwgJzsnICsgbmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30oKSk7J10pO1xuICAgIHZhciByZXN1bHQgPSBub2RlLnRvU3RyaW5nV2l0aFNvdXJjZU1hcCh7XG4gICAgICBmaWxlOiAnZm9vLmpzJ1xuICAgIH0pO1xuXG4gICAgYXNzZXJ0LmVxdWFsKHJlc3VsdC5jb2RlLCBbXG4gICAgICAnKGZ1bmN0aW9uICgpIHsnLFxuICAgICAgJyAgc29tZUNhbGwoKTsnLFxuICAgICAgJyAgaWYgKGZvbykgYmFyKCk7JyxcbiAgICAgICd9KCkpOydcbiAgICBdLmpvaW4obmwpKTtcblxuICAgIHZhciBtYXAgPSByZXN1bHQubWFwO1xuICAgIHZhciBtYXBXaXRob3V0T3B0aW9ucyA9IG5vZGUudG9TdHJpbmdXaXRoU291cmNlTWFwKCkubWFwO1xuXG4gICAgYXNzZXJ0Lm9rKG1hcCBpbnN0YW5jZW9mIFNvdXJjZU1hcEdlbmVyYXRvciwgJ21hcCBpbnN0YW5jZW9mIFNvdXJjZU1hcEdlbmVyYXRvcicpO1xuICAgIGFzc2VydC5vayhtYXBXaXRob3V0T3B0aW9ucyBpbnN0YW5jZW9mIFNvdXJjZU1hcEdlbmVyYXRvciwgJ21hcFdpdGhvdXRPcHRpb25zIGluc3RhbmNlb2YgU291cmNlTWFwR2VuZXJhdG9yJyk7XG4gICAgYXNzZXJ0Lm9rKCEoJ2ZpbGUnIGluIG1hcFdpdGhvdXRPcHRpb25zKSk7XG4gICAgbWFwV2l0aG91dE9wdGlvbnMuX2ZpbGUgPSAnZm9vLmpzJztcbiAgICB1dGlsLmFzc2VydEVxdWFsTWFwcyhhc3NlcnQsIG1hcC50b0pTT04oKSwgbWFwV2l0aG91dE9wdGlvbnMudG9KU09OKCkpO1xuXG4gICAgbWFwID0gbmV3IFNvdXJjZU1hcENvbnN1bWVyKG1hcC50b1N0cmluZygpKTtcblxuICAgIHZhciBhY3R1YWw7XG5cbiAgICBhY3R1YWwgPSBtYXAub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICBsaW5lOiAxLFxuICAgICAgY29sdW1uOiA0XG4gICAgfSk7XG4gICAgYXNzZXJ0LmVxdWFsKGFjdHVhbC5zb3VyY2UsIG51bGwpO1xuICAgIGFzc2VydC5lcXVhbChhY3R1YWwubGluZSwgbnVsbCk7XG4gICAgYXNzZXJ0LmVxdWFsKGFjdHVhbC5jb2x1bW4sIG51bGwpO1xuXG4gICAgYWN0dWFsID0gbWFwLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgbGluZTogMixcbiAgICAgIGNvbHVtbjogMlxuICAgIH0pO1xuICAgIGFzc2VydC5lcXVhbChhY3R1YWwuc291cmNlLCAnYS5qcycpO1xuICAgIGFzc2VydC5lcXVhbChhY3R1YWwubGluZSwgMSk7XG4gICAgYXNzZXJ0LmVxdWFsKGFjdHVhbC5jb2x1bW4sIDApO1xuICAgIGFzc2VydC5lcXVhbChhY3R1YWwubmFtZSwgJ29yaWdpbmFsQ2FsbCcpO1xuXG4gICAgYWN0dWFsID0gbWFwLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgbGluZTogMyxcbiAgICAgIGNvbHVtbjogMlxuICAgIH0pO1xuICAgIGFzc2VydC5lcXVhbChhY3R1YWwuc291cmNlLCAnYi5qcycpO1xuICAgIGFzc2VydC5lcXVhbChhY3R1YWwubGluZSwgMik7XG4gICAgYXNzZXJ0LmVxdWFsKGFjdHVhbC5jb2x1bW4sIDApO1xuXG4gICAgYWN0dWFsID0gbWFwLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgbGluZTogMyxcbiAgICAgIGNvbHVtbjogMTZcbiAgICB9KTtcbiAgICBhc3NlcnQuZXF1YWwoYWN0dWFsLnNvdXJjZSwgbnVsbCk7XG4gICAgYXNzZXJ0LmVxdWFsKGFjdHVhbC5saW5lLCBudWxsKTtcbiAgICBhc3NlcnQuZXF1YWwoYWN0dWFsLmNvbHVtbiwgbnVsbCk7XG5cbiAgICBhY3R1YWwgPSBtYXAub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICBsaW5lOiA0LFxuICAgICAgY29sdW1uOiAyXG4gICAgfSk7XG4gICAgYXNzZXJ0LmVxdWFsKGFjdHVhbC5zb3VyY2UsIG51bGwpO1xuICAgIGFzc2VydC5lcXVhbChhY3R1YWwubGluZSwgbnVsbCk7XG4gICAgYXNzZXJ0LmVxdWFsKGFjdHVhbC5jb2x1bW4sIG51bGwpO1xuICB9KTtcblxuICBleHBvcnRzWyd0ZXN0IC5mcm9tU3RyaW5nV2l0aFNvdXJjZU1hcCgpJ10gPSBmb3JFYWNoTmV3bGluZShmdW5jdGlvbiAoYXNzZXJ0LCBubCkge1xuICAgIHZhciB0ZXN0Q29kZSA9IHV0aWwudGVzdEdlbmVyYXRlZENvZGUucmVwbGFjZSgvXFxuL2csIG5sKTtcbiAgICB2YXIgbm9kZSA9IFNvdXJjZU5vZGUuZnJvbVN0cmluZ1dpdGhTb3VyY2VNYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0Q29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTb3VyY2VNYXBDb25zdW1lcih1dGlsLnRlc3RNYXApKTtcblxuICAgIHZhciByZXN1bHQgPSBub2RlLnRvU3RyaW5nV2l0aFNvdXJjZU1hcCh7XG4gICAgICBmaWxlOiAnbWluLmpzJ1xuICAgIH0pO1xuICAgIHZhciBtYXAgPSByZXN1bHQubWFwO1xuICAgIHZhciBjb2RlID0gcmVzdWx0LmNvZGU7XG5cbiAgICBhc3NlcnQuZXF1YWwoY29kZSwgdGVzdENvZGUpO1xuICAgIGFzc2VydC5vayhtYXAgaW5zdGFuY2VvZiBTb3VyY2VNYXBHZW5lcmF0b3IsICdtYXAgaW5zdGFuY2VvZiBTb3VyY2VNYXBHZW5lcmF0b3InKTtcbiAgICBtYXAgPSBtYXAudG9KU09OKCk7XG4gICAgYXNzZXJ0LmVxdWFsKG1hcC52ZXJzaW9uLCB1dGlsLnRlc3RNYXAudmVyc2lvbik7XG4gICAgYXNzZXJ0LmVxdWFsKG1hcC5maWxlLCB1dGlsLnRlc3RNYXAuZmlsZSk7XG4gICAgYXNzZXJ0LmVxdWFsKG1hcC5tYXBwaW5ncywgdXRpbC50ZXN0TWFwLm1hcHBpbmdzKTtcbiAgfSk7XG5cbiAgZXhwb3J0c1sndGVzdCAuZnJvbVN0cmluZ1dpdGhTb3VyY2VNYXAoKSBlbXB0eSBtYXAnXSA9IGZvckVhY2hOZXdsaW5lKGZ1bmN0aW9uIChhc3NlcnQsIG5sKSB7XG4gICAgdmFyIG5vZGUgPSBTb3VyY2VOb2RlLmZyb21TdHJpbmdXaXRoU291cmNlTWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC50ZXN0R2VuZXJhdGVkQ29kZS5yZXBsYWNlKC9cXG4vZywgbmwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZW1wdHlNYXApKTtcbiAgICB2YXIgcmVzdWx0ID0gbm9kZS50b1N0cmluZ1dpdGhTb3VyY2VNYXAoe1xuICAgICAgZmlsZTogJ21pbi5qcydcbiAgICB9KTtcbiAgICB2YXIgbWFwID0gcmVzdWx0Lm1hcDtcbiAgICB2YXIgY29kZSA9IHJlc3VsdC5jb2RlO1xuXG4gICAgYXNzZXJ0LmVxdWFsKGNvZGUsIHV0aWwudGVzdEdlbmVyYXRlZENvZGUucmVwbGFjZSgvXFxuL2csIG5sKSk7XG4gICAgYXNzZXJ0Lm9rKG1hcCBpbnN0YW5jZW9mIFNvdXJjZU1hcEdlbmVyYXRvciwgJ21hcCBpbnN0YW5jZW9mIFNvdXJjZU1hcEdlbmVyYXRvcicpO1xuICAgIG1hcCA9IG1hcC50b0pTT04oKTtcbiAgICBhc3NlcnQuZXF1YWwobWFwLnZlcnNpb24sIHV0aWwuZW1wdHlNYXAudmVyc2lvbik7XG4gICAgYXNzZXJ0LmVxdWFsKG1hcC5maWxlLCB1dGlsLmVtcHR5TWFwLmZpbGUpO1xuICAgIGFzc2VydC5lcXVhbChtYXAubWFwcGluZ3MubGVuZ3RoLCB1dGlsLmVtcHR5TWFwLm1hcHBpbmdzLmxlbmd0aCk7XG4gICAgYXNzZXJ0LmVxdWFsKG1hcC5tYXBwaW5ncywgdXRpbC5lbXB0eU1hcC5tYXBwaW5ncyk7XG4gIH0pO1xuXG4gIGV4cG9ydHNbJ3Rlc3QgLmZyb21TdHJpbmdXaXRoU291cmNlTWFwKCkgY29tcGxleCB2ZXJzaW9uJ10gPSBmb3JFYWNoTmV3bGluZShmdW5jdGlvbiAoYXNzZXJ0LCBubCkge1xuICAgIHZhciBpbnB1dCA9IG5ldyBTb3VyY2VOb2RlKG51bGwsIG51bGwsIG51bGwsIFtcbiAgICAgIFwiKGZ1bmN0aW9uKCkge1wiICsgbmwsXG4gICAgICAgIFwiICB2YXIgVGVzdCA9IHt9O1wiICsgbmwsXG4gICAgICAgIFwiICBcIiwgbmV3IFNvdXJjZU5vZGUoMSwgMCwgXCJhLmpzXCIsIFwiVGVzdC5BID0geyB2YWx1ZTogMTIzNCB9O1wiICsgbmwpLFxuICAgICAgICBcIiAgXCIsIG5ldyBTb3VyY2VOb2RlKDIsIDAsIFwiYS5qc1wiLCBcIlRlc3QuQS54ID0gJ3h5eic7XCIpLCBubCxcbiAgICAgICAgXCJ9KCkpO1wiICsgbmwsXG4gICAgICAgIFwiLyogR2VuZXJhdGVkIFNvdXJjZSAqL1wiXSk7XG4gICAgaW5wdXQgPSBpbnB1dC50b1N0cmluZ1dpdGhTb3VyY2VNYXAoe1xuICAgICAgZmlsZTogJ2Zvby5qcydcbiAgICB9KTtcblxuICAgIHZhciBub2RlID0gU291cmNlTm9kZS5mcm9tU3RyaW5nV2l0aFNvdXJjZU1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LmNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU291cmNlTWFwQ29uc3VtZXIoaW5wdXQubWFwLnRvU3RyaW5nKCkpKTtcblxuICAgIHZhciByZXN1bHQgPSBub2RlLnRvU3RyaW5nV2l0aFNvdXJjZU1hcCh7XG4gICAgICBmaWxlOiAnZm9vLmpzJ1xuICAgIH0pO1xuICAgIHZhciBtYXAgPSByZXN1bHQubWFwO1xuICAgIHZhciBjb2RlID0gcmVzdWx0LmNvZGU7XG5cbiAgICBhc3NlcnQuZXF1YWwoY29kZSwgaW5wdXQuY29kZSk7XG4gICAgYXNzZXJ0Lm9rKG1hcCBpbnN0YW5jZW9mIFNvdXJjZU1hcEdlbmVyYXRvciwgJ21hcCBpbnN0YW5jZW9mIFNvdXJjZU1hcEdlbmVyYXRvcicpO1xuICAgIG1hcCA9IG1hcC50b0pTT04oKTtcbiAgICB2YXIgaW5wdXRNYXAgPSBpbnB1dC5tYXAudG9KU09OKCk7XG4gICAgdXRpbC5hc3NlcnRFcXVhbE1hcHMoYXNzZXJ0LCBtYXAsIGlucHV0TWFwKTtcbiAgfSk7XG5cbiAgZXhwb3J0c1sndGVzdCAuZnJvbVN0cmluZ1dpdGhTb3VyY2VNYXAoKSB0aGlyZCBhcmd1bWVudCddID0gZnVuY3Rpb24gKGFzc2VydCkge1xuICAgIC8vIEFzc3VtZSB0aGUgZm9sbG93aW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmU6XG4gICAgLy9cbiAgICAvLyBodHRwOi8vZm9vLm9yZy9cbiAgICAvLyAgIGJhci5jb2ZmZWVcbiAgICAvLyAgIGFwcC9cbiAgICAvLyAgICAgY29mZmVlL1xuICAgIC8vICAgICAgIGZvby5jb2ZmZWVcbiAgICAvLyAgICAgICBjb2ZmZWVCdW5kbGUuanMgIyBNYWRlIGZyb20ge2ZvbyxiYXIsYmF6fS5jb2ZmZWVcbiAgICAvLyAgICAgICBtYXBzL1xuICAgIC8vICAgICAgICAgY29mZmVlQnVuZGxlLmpzLm1hcFxuICAgIC8vICAgICBqcy9cbiAgICAvLyAgICAgICBmb28uanNcbiAgICAvLyAgICAgcHVibGljL1xuICAgIC8vICAgICAgIGFwcC5qcyAjIE1hZGUgZnJvbSB7Zm9vLGNvZmZlZUJ1bmRsZX0uanNcbiAgICAvLyAgICAgICBhcHAuanMubWFwXG4gICAgLy9cbiAgICAvLyBodHRwOi8vd3d3LmV4YW1wbGUuY29tL1xuICAgIC8vICAgYmF6LmNvZmZlZVxuXG4gICAgdmFyIGNvZmZlZUJ1bmRsZSA9IG5ldyBTb3VyY2VOb2RlKDEsIDAsICdmb28uY29mZmVlJywgJ2Zvbyhjb2ZmZWUpO1xcbicpO1xuICAgIGNvZmZlZUJ1bmRsZS5zZXRTb3VyY2VDb250ZW50KCdmb28uY29mZmVlJywgJ2ZvbyBjb2ZmZWUnKTtcbiAgICBjb2ZmZWVCdW5kbGUuYWRkKG5ldyBTb3VyY2VOb2RlKDIsIDAsICcvYmFyLmNvZmZlZScsICdiYXIoY29mZmVlKTtcXG4nKSk7XG4gICAgY29mZmVlQnVuZGxlLmFkZChuZXcgU291cmNlTm9kZSgzLCAwLCAnaHR0cDovL3d3dy5leGFtcGxlLmNvbS9iYXouY29mZmVlJywgJ2Jheihjb2ZmZWUpOycpKTtcbiAgICBjb2ZmZWVCdW5kbGUgPSBjb2ZmZWVCdW5kbGUudG9TdHJpbmdXaXRoU291cmNlTWFwKHtcbiAgICAgIGZpbGU6ICdmb28uanMnLFxuICAgICAgc291cmNlUm9vdDogJy4uJ1xuICAgIH0pO1xuXG4gICAgdmFyIGZvbyA9IG5ldyBTb3VyY2VOb2RlKDEsIDAsICdmb28uanMnLCAnZm9vKGpzKTsnKTtcblxuICAgIHZhciB0ZXN0ID0gZnVuY3Rpb24ocmVsYXRpdmVQYXRoLCBleHBlY3RlZFNvdXJjZXMpIHtcbiAgICAgIHZhciBhcHAgPSBuZXcgU291cmNlTm9kZSgpO1xuICAgICAgYXBwLmFkZChTb3VyY2VOb2RlLmZyb21TdHJpbmdXaXRoU291cmNlTWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2ZmZWVCdW5kbGUuY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNvdXJjZU1hcENvbnN1bWVyKGNvZmZlZUJ1bmRsZS5tYXAudG9TdHJpbmcoKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aCkpO1xuICAgICAgYXBwLmFkZChmb28pO1xuICAgICAgdmFyIGkgPSAwO1xuICAgICAgYXBwLndhbGsoZnVuY3Rpb24gKGNodW5rLCBsb2MpIHtcbiAgICAgICAgYXNzZXJ0LmVxdWFsKGxvYy5zb3VyY2UsIGV4cGVjdGVkU291cmNlc1tpXSk7XG4gICAgICAgIGkrKztcbiAgICAgIH0pO1xuICAgICAgYXBwLndhbGtTb3VyY2VDb250ZW50cyhmdW5jdGlvbiAoc291cmNlRmlsZSwgc291cmNlQ29udGVudCkge1xuICAgICAgICBhc3NlcnQuZXF1YWwoc291cmNlRmlsZSwgZXhwZWN0ZWRTb3VyY2VzWzBdKTtcbiAgICAgICAgYXNzZXJ0LmVxdWFsKHNvdXJjZUNvbnRlbnQsICdmb28gY29mZmVlJyk7XG4gICAgICB9KVxuICAgIH07XG5cbiAgICB0ZXN0KCcuLi9jb2ZmZWUvbWFwcycsIFtcbiAgICAgICcuLi9jb2ZmZWUvZm9vLmNvZmZlZScsXG4gICAgICAnL2Jhci5jb2ZmZWUnLFxuICAgICAgJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20vYmF6LmNvZmZlZScsXG4gICAgICAnZm9vLmpzJ1xuICAgIF0pO1xuXG4gICAgLy8gSWYgdGhlIHRoaXJkIHBhcmFtZXRlciBpcyBvbWl0dGVkIG9yIHNldCB0byB0aGUgY3VycmVudCB3b3JraW5nXG4gICAgLy8gZGlyZWN0b3J5IHdlIGdldCBpbmNvcnJlY3Qgc291cmNlIHBhdGhzOlxuXG4gICAgdGVzdCh1bmRlZmluZWQsIFtcbiAgICAgICcuLi9mb28uY29mZmVlJyxcbiAgICAgICcvYmFyLmNvZmZlZScsXG4gICAgICAnaHR0cDovL3d3dy5leGFtcGxlLmNvbS9iYXouY29mZmVlJyxcbiAgICAgICdmb28uanMnXG4gICAgXSk7XG5cbiAgICB0ZXN0KCcnLCBbXG4gICAgICAnLi4vZm9vLmNvZmZlZScsXG4gICAgICAnL2Jhci5jb2ZmZWUnLFxuICAgICAgJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20vYmF6LmNvZmZlZScsXG4gICAgICAnZm9vLmpzJ1xuICAgIF0pO1xuXG4gICAgdGVzdCgnLicsIFtcbiAgICAgICcuLi9mb28uY29mZmVlJyxcbiAgICAgICcvYmFyLmNvZmZlZScsXG4gICAgICAnaHR0cDovL3d3dy5leGFtcGxlLmNvbS9iYXouY29mZmVlJyxcbiAgICAgICdmb28uanMnXG4gICAgXSk7XG5cbiAgICB0ZXN0KCcuLycsIFtcbiAgICAgICcuLi9mb28uY29mZmVlJyxcbiAgICAgICcvYmFyLmNvZmZlZScsXG4gICAgICAnaHR0cDovL3d3dy5leGFtcGxlLmNvbS9iYXouY29mZmVlJyxcbiAgICAgICdmb28uanMnXG4gICAgXSk7XG4gIH07XG5cbiAgZXhwb3J0c1sndGVzdCAudG9TdHJpbmdXaXRoU291cmNlTWFwKCkgbWVyZ2luZyBkdXBsaWNhdGUgbWFwcGluZ3MnXSA9IGZvckVhY2hOZXdsaW5lKGZ1bmN0aW9uIChhc3NlcnQsIG5sKSB7XG4gICAgdmFyIGlucHV0ID0gbmV3IFNvdXJjZU5vZGUobnVsbCwgbnVsbCwgbnVsbCwgW1xuICAgICAgbmV3IFNvdXJjZU5vZGUoMSwgMCwgXCJhLmpzXCIsIFwiKGZ1bmN0aW9uXCIpLFxuICAgICAgbmV3IFNvdXJjZU5vZGUoMSwgMCwgXCJhLmpzXCIsIFwiKCkge1wiICsgbmwpLFxuICAgICAgXCIgIFwiLFxuICAgICAgbmV3IFNvdXJjZU5vZGUoMSwgMCwgXCJhLmpzXCIsIFwidmFyIFRlc3QgPSBcIiksXG4gICAgICBuZXcgU291cmNlTm9kZSgxLCAwLCBcImIuanNcIiwgXCJ7fTtcIiArIG5sKSxcbiAgICAgIG5ldyBTb3VyY2VOb2RlKDIsIDAsIFwiYi5qc1wiLCBcIlRlc3RcIiksXG4gICAgICBuZXcgU291cmNlTm9kZSgyLCAwLCBcImIuanNcIiwgXCIuQVwiLCBcIkFcIiksXG4gICAgICBuZXcgU291cmNlTm9kZSgyLCAyMCwgXCJiLmpzXCIsIFwiID0geyB2YWx1ZTogXCIsIFwiQVwiKSxcbiAgICAgIFwiMTIzNFwiLFxuICAgICAgbmV3IFNvdXJjZU5vZGUoMiwgNDAsIFwiYi5qc1wiLCBcIiB9O1wiICsgbmwsIFwiQVwiKSxcbiAgICAgIFwifSgpKTtcIiArIG5sLFxuICAgICAgXCIvKiBHZW5lcmF0ZWQgU291cmNlICovXCJcbiAgICBdKTtcbiAgICBpbnB1dCA9IGlucHV0LnRvU3RyaW5nV2l0aFNvdXJjZU1hcCh7XG4gICAgICBmaWxlOiAnZm9vLmpzJ1xuICAgIH0pO1xuXG4gICAgYXNzZXJ0LmVxdWFsKGlucHV0LmNvZGUsIFtcbiAgICAgIFwiKGZ1bmN0aW9uKCkge1wiLFxuICAgICAgXCIgIHZhciBUZXN0ID0ge307XCIsXG4gICAgICBcIlRlc3QuQSA9IHsgdmFsdWU6IDEyMzQgfTtcIixcbiAgICAgIFwifSgpKTtcIixcbiAgICAgIFwiLyogR2VuZXJhdGVkIFNvdXJjZSAqL1wiXG4gICAgXS5qb2luKG5sKSlcblxuICAgIHZhciBjb3JyZWN0TWFwID0gbmV3IFNvdXJjZU1hcEdlbmVyYXRvcih7XG4gICAgICBmaWxlOiAnZm9vLmpzJ1xuICAgIH0pO1xuICAgIGNvcnJlY3RNYXAuYWRkTWFwcGluZyh7XG4gICAgICBnZW5lcmF0ZWQ6IHsgbGluZTogMSwgY29sdW1uOiAwIH0sXG4gICAgICBzb3VyY2U6ICdhLmpzJyxcbiAgICAgIG9yaWdpbmFsOiB7IGxpbmU6IDEsIGNvbHVtbjogMCB9XG4gICAgfSk7XG4gICAgLy8gSGVyZSBpcyBubyBuZWVkIGZvciBhIGVtcHR5IG1hcHBpbmcsXG4gICAgLy8gYmVjYXVzZSBtYXBwaW5ncyBlbmRzIGF0IGVvbFxuICAgIGNvcnJlY3RNYXAuYWRkTWFwcGluZyh7XG4gICAgICBnZW5lcmF0ZWQ6IHsgbGluZTogMiwgY29sdW1uOiAyIH0sXG4gICAgICBzb3VyY2U6ICdhLmpzJyxcbiAgICAgIG9yaWdpbmFsOiB7IGxpbmU6IDEsIGNvbHVtbjogMCB9XG4gICAgfSk7XG4gICAgY29ycmVjdE1hcC5hZGRNYXBwaW5nKHtcbiAgICAgIGdlbmVyYXRlZDogeyBsaW5lOiAyLCBjb2x1bW46IDEzIH0sXG4gICAgICBzb3VyY2U6ICdiLmpzJyxcbiAgICAgIG9yaWdpbmFsOiB7IGxpbmU6IDEsIGNvbHVtbjogMCB9XG4gICAgfSk7XG4gICAgY29ycmVjdE1hcC5hZGRNYXBwaW5nKHtcbiAgICAgIGdlbmVyYXRlZDogeyBsaW5lOiAzLCBjb2x1bW46IDAgfSxcbiAgICAgIHNvdXJjZTogJ2IuanMnLFxuICAgICAgb3JpZ2luYWw6IHsgbGluZTogMiwgY29sdW1uOiAwIH1cbiAgICB9KTtcbiAgICBjb3JyZWN0TWFwLmFkZE1hcHBpbmcoe1xuICAgICAgZ2VuZXJhdGVkOiB7IGxpbmU6IDMsIGNvbHVtbjogNCB9LFxuICAgICAgc291cmNlOiAnYi5qcycsXG4gICAgICBuYW1lOiAnQScsXG4gICAgICBvcmlnaW5hbDogeyBsaW5lOiAyLCBjb2x1bW46IDAgfVxuICAgIH0pO1xuICAgIGNvcnJlY3RNYXAuYWRkTWFwcGluZyh7XG4gICAgICBnZW5lcmF0ZWQ6IHsgbGluZTogMywgY29sdW1uOiA2IH0sXG4gICAgICBzb3VyY2U6ICdiLmpzJyxcbiAgICAgIG5hbWU6ICdBJyxcbiAgICAgIG9yaWdpbmFsOiB7IGxpbmU6IDIsIGNvbHVtbjogMjAgfVxuICAgIH0pO1xuICAgIC8vIFRoaXMgZW1wdHkgbWFwcGluZyBpcyByZXF1aXJlZCxcbiAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIGEgaG9sZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBsaW5lXG4gICAgY29ycmVjdE1hcC5hZGRNYXBwaW5nKHtcbiAgICAgIGdlbmVyYXRlZDogeyBsaW5lOiAzLCBjb2x1bW46IDE4IH1cbiAgICB9KTtcbiAgICBjb3JyZWN0TWFwLmFkZE1hcHBpbmcoe1xuICAgICAgZ2VuZXJhdGVkOiB7IGxpbmU6IDMsIGNvbHVtbjogMjIgfSxcbiAgICAgIHNvdXJjZTogJ2IuanMnLFxuICAgICAgbmFtZTogJ0EnLFxuICAgICAgb3JpZ2luYWw6IHsgbGluZTogMiwgY29sdW1uOiA0MCB9XG4gICAgfSk7XG4gICAgLy8gSGVyZSBpcyBubyBuZWVkIGZvciBhIGVtcHR5IG1hcHBpbmcsXG4gICAgLy8gYmVjYXVzZSBtYXBwaW5ncyBlbmRzIGF0IGVvbFxuXG4gICAgdmFyIGlucHV0TWFwID0gaW5wdXQubWFwLnRvSlNPTigpO1xuICAgIGNvcnJlY3RNYXAgPSBjb3JyZWN0TWFwLnRvSlNPTigpO1xuICAgIHV0aWwuYXNzZXJ0RXF1YWxNYXBzKGFzc2VydCwgaW5wdXRNYXAsIGNvcnJlY3RNYXApO1xuICB9KTtcblxuICBleHBvcnRzWyd0ZXN0IC50b1N0cmluZ1dpdGhTb3VyY2VNYXAoKSBtdWx0aS1saW5lIFNvdXJjZU5vZGVzJ10gPSBmb3JFYWNoTmV3bGluZShmdW5jdGlvbiAoYXNzZXJ0LCBubCkge1xuICAgIHZhciBpbnB1dCA9IG5ldyBTb3VyY2VOb2RlKG51bGwsIG51bGwsIG51bGwsIFtcbiAgICAgIG5ldyBTb3VyY2VOb2RlKDEsIDAsIFwiYS5qc1wiLCBcIihmdW5jdGlvbigpIHtcIiArIG5sICsgXCJ2YXIgbmV4dExpbmUgPSAxO1wiICsgbmwgKyBcImFub3RoZXJMaW5lKCk7XCIgKyBubCksXG4gICAgICBuZXcgU291cmNlTm9kZSgyLCAyLCBcImIuanNcIiwgXCJUZXN0LmNhbGwodGhpcywgMTIzKTtcIiArIG5sKSxcbiAgICAgIG5ldyBTb3VyY2VOb2RlKDIsIDIsIFwiYi5qc1wiLCBcInRoaXNbJ3N0dWZmJ10gPSAndic7XCIgKyBubCksXG4gICAgICBuZXcgU291cmNlTm9kZSgyLCAyLCBcImIuanNcIiwgXCJhbm90aGVyTGluZSgpO1wiICsgbmwpLFxuICAgICAgXCIvKlwiICsgbmwgKyBcIkdlbmVyYXRlZFwiICsgbmwgKyBcIlNvdXJjZVwiICsgbmwgKyBcIiovXCIgKyBubCxcbiAgICAgIG5ldyBTb3VyY2VOb2RlKDMsIDQsIFwiYy5qc1wiLCBcImFub3RoZXJMaW5lKCk7XCIgKyBubCksXG4gICAgICBcIi8qXCIgKyBubCArIFwiR2VuZXJhdGVkXCIgKyBubCArIFwiU291cmNlXCIgKyBubCArIFwiKi9cIlxuICAgIF0pO1xuICAgIGlucHV0ID0gaW5wdXQudG9TdHJpbmdXaXRoU291cmNlTWFwKHtcbiAgICAgIGZpbGU6ICdmb28uanMnXG4gICAgfSk7XG5cbiAgICBhc3NlcnQuZXF1YWwoaW5wdXQuY29kZSwgW1xuICAgICAgXCIoZnVuY3Rpb24oKSB7XCIsXG4gICAgICBcInZhciBuZXh0TGluZSA9IDE7XCIsXG4gICAgICBcImFub3RoZXJMaW5lKCk7XCIsXG4gICAgICBcIlRlc3QuY2FsbCh0aGlzLCAxMjMpO1wiLFxuICAgICAgXCJ0aGlzWydzdHVmZiddID0gJ3YnO1wiLFxuICAgICAgXCJhbm90aGVyTGluZSgpO1wiLFxuICAgICAgXCIvKlwiLFxuICAgICAgXCJHZW5lcmF0ZWRcIixcbiAgICAgIFwiU291cmNlXCIsXG4gICAgICBcIiovXCIsXG4gICAgICBcImFub3RoZXJMaW5lKCk7XCIsXG4gICAgICBcIi8qXCIsXG4gICAgICBcIkdlbmVyYXRlZFwiLFxuICAgICAgXCJTb3VyY2VcIixcbiAgICAgIFwiKi9cIlxuICAgIF0uam9pbihubCkpO1xuXG4gICAgdmFyIGNvcnJlY3RNYXAgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKHtcbiAgICAgIGZpbGU6ICdmb28uanMnXG4gICAgfSk7XG4gICAgY29ycmVjdE1hcC5hZGRNYXBwaW5nKHtcbiAgICAgIGdlbmVyYXRlZDogeyBsaW5lOiAxLCBjb2x1bW46IDAgfSxcbiAgICAgIHNvdXJjZTogJ2EuanMnLFxuICAgICAgb3JpZ2luYWw6IHsgbGluZTogMSwgY29sdW1uOiAwIH1cbiAgICB9KTtcbiAgICBjb3JyZWN0TWFwLmFkZE1hcHBpbmcoe1xuICAgICAgZ2VuZXJhdGVkOiB7IGxpbmU6IDIsIGNvbHVtbjogMCB9LFxuICAgICAgc291cmNlOiAnYS5qcycsXG4gICAgICBvcmlnaW5hbDogeyBsaW5lOiAxLCBjb2x1bW46IDAgfVxuICAgIH0pO1xuICAgIGNvcnJlY3RNYXAuYWRkTWFwcGluZyh7XG4gICAgICBnZW5lcmF0ZWQ6IHsgbGluZTogMywgY29sdW1uOiAwIH0sXG4gICAgICBzb3VyY2U6ICdhLmpzJyxcbiAgICAgIG9yaWdpbmFsOiB7IGxpbmU6IDEsIGNvbHVtbjogMCB9XG4gICAgfSk7XG4gICAgY29ycmVjdE1hcC5hZGRNYXBwaW5nKHtcbiAgICAgIGdlbmVyYXRlZDogeyBsaW5lOiA0LCBjb2x1bW46IDAgfSxcbiAgICAgIHNvdXJjZTogJ2IuanMnLFxuICAgICAgb3JpZ2luYWw6IHsgbGluZTogMiwgY29sdW1uOiAyIH1cbiAgICB9KTtcbiAgICBjb3JyZWN0TWFwLmFkZE1hcHBpbmcoe1xuICAgICAgZ2VuZXJhdGVkOiB7IGxpbmU6IDUsIGNvbHVtbjogMCB9LFxuICAgICAgc291cmNlOiAnYi5qcycsXG4gICAgICBvcmlnaW5hbDogeyBsaW5lOiAyLCBjb2x1bW46IDIgfVxuICAgIH0pO1xuICAgIGNvcnJlY3RNYXAuYWRkTWFwcGluZyh7XG4gICAgICBnZW5lcmF0ZWQ6IHsgbGluZTogNiwgY29sdW1uOiAwIH0sXG4gICAgICBzb3VyY2U6ICdiLmpzJyxcbiAgICAgIG9yaWdpbmFsOiB7IGxpbmU6IDIsIGNvbHVtbjogMiB9XG4gICAgfSk7XG4gICAgY29ycmVjdE1hcC5hZGRNYXBwaW5nKHtcbiAgICAgIGdlbmVyYXRlZDogeyBsaW5lOiAxMSwgY29sdW1uOiAwIH0sXG4gICAgICBzb3VyY2U6ICdjLmpzJyxcbiAgICAgIG9yaWdpbmFsOiB7IGxpbmU6IDMsIGNvbHVtbjogNCB9XG4gICAgfSk7XG5cbiAgICB2YXIgaW5wdXRNYXAgPSBpbnB1dC5tYXAudG9KU09OKCk7XG4gICAgY29ycmVjdE1hcCA9IGNvcnJlY3RNYXAudG9KU09OKCk7XG4gICAgdXRpbC5hc3NlcnRFcXVhbE1hcHMoYXNzZXJ0LCBpbnB1dE1hcCwgY29ycmVjdE1hcCk7XG4gIH0pO1xuXG4gIGV4cG9ydHNbJ3Rlc3QgLnRvU3RyaW5nV2l0aFNvdXJjZU1hcCgpIHdpdGggZW1wdHkgc3RyaW5nJ10gPSBmdW5jdGlvbiAoYXNzZXJ0KSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgU291cmNlTm9kZSgxLCAwLCAnZW1wdHkuanMnLCAnJyk7XG4gICAgdmFyIHJlc3VsdCA9IG5vZGUudG9TdHJpbmdXaXRoU291cmNlTWFwKCk7XG4gICAgYXNzZXJ0LmVxdWFsKHJlc3VsdC5jb2RlLCAnJyk7XG4gIH07XG5cbiAgZXhwb3J0c1sndGVzdCAudG9TdHJpbmdXaXRoU291cmNlTWFwKCkgd2l0aCBjb25zZWN1dGl2ZSBuZXdsaW5lcyddID0gZm9yRWFjaE5ld2xpbmUoZnVuY3Rpb24gKGFzc2VydCwgbmwpIHtcbiAgICB2YXIgaW5wdXQgPSBuZXcgU291cmNlTm9kZShudWxsLCBudWxsLCBudWxsLCBbXG4gICAgICBcIi8qKiovXCIgKyBubCArIG5sLFxuICAgICAgbmV3IFNvdXJjZU5vZGUoMSwgMCwgXCJhLmpzXCIsIFwiJ3VzZSBzdHJpY3QnO1wiICsgbmwpLFxuICAgICAgbmV3IFNvdXJjZU5vZGUoMiwgMCwgXCJhLmpzXCIsIFwiYSgpO1wiKSxcbiAgICBdKTtcbiAgICBpbnB1dCA9IGlucHV0LnRvU3RyaW5nV2l0aFNvdXJjZU1hcCh7XG4gICAgICBmaWxlOiAnZm9vLmpzJ1xuICAgIH0pO1xuXG4gICAgYXNzZXJ0LmVxdWFsKGlucHV0LmNvZGUsIFtcbiAgICAgIFwiLyoqKi9cIixcbiAgICAgIFwiXCIsXG4gICAgICBcIid1c2Ugc3RyaWN0JztcIixcbiAgICAgIFwiYSgpO1wiLFxuICAgIF0uam9pbihubCkpO1xuXG4gICAgdmFyIGNvcnJlY3RNYXAgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKHtcbiAgICAgIGZpbGU6ICdmb28uanMnXG4gICAgfSk7XG4gICAgY29ycmVjdE1hcC5hZGRNYXBwaW5nKHtcbiAgICAgIGdlbmVyYXRlZDogeyBsaW5lOiAzLCBjb2x1bW46IDAgfSxcbiAgICAgIHNvdXJjZTogJ2EuanMnLFxuICAgICAgb3JpZ2luYWw6IHsgbGluZTogMSwgY29sdW1uOiAwIH1cbiAgICB9KTtcbiAgICBjb3JyZWN0TWFwLmFkZE1hcHBpbmcoe1xuICAgICAgZ2VuZXJhdGVkOiB7IGxpbmU6IDQsIGNvbHVtbjogMCB9LFxuICAgICAgc291cmNlOiAnYS5qcycsXG4gICAgICBvcmlnaW5hbDogeyBsaW5lOiAyLCBjb2x1bW46IDAgfVxuICAgIH0pO1xuXG4gICAgdmFyIGlucHV0TWFwID0gaW5wdXQubWFwLnRvSlNPTigpO1xuICAgIGNvcnJlY3RNYXAgPSBjb3JyZWN0TWFwLnRvSlNPTigpO1xuICAgIHV0aWwuYXNzZXJ0RXF1YWxNYXBzKGFzc2VydCwgaW5wdXRNYXAsIGNvcnJlY3RNYXApO1xuICB9KTtcblxuICBleHBvcnRzWyd0ZXN0IHNldFNvdXJjZUNvbnRlbnQgd2l0aCB0b1N0cmluZ1dpdGhTb3VyY2VNYXAnXSA9IGZ1bmN0aW9uIChhc3NlcnQpIHtcbiAgICB2YXIgYU5vZGUgPSBuZXcgU291cmNlTm9kZSgxLCAxLCAnYS5qcycsICdhJyk7XG4gICAgYU5vZGUuc2V0U291cmNlQ29udGVudCgnYS5qcycsICdzb21lQ29udGVudCcpO1xuICAgIHZhciBub2RlID0gbmV3IFNvdXJjZU5vZGUobnVsbCwgbnVsbCwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnKGZ1bmN0aW9uICgpIHtcXG4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICcsIGFOb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICcsIG5ldyBTb3VyY2VOb2RlKDEsIDEsICdiLmpzJywgJ2InKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSgpKTsnXSk7XG4gICAgbm9kZS5zZXRTb3VyY2VDb250ZW50KCdiLmpzJywgJ290aGVyQ29udGVudCcpO1xuICAgIHZhciBtYXAgPSBub2RlLnRvU3RyaW5nV2l0aFNvdXJjZU1hcCh7XG4gICAgICBmaWxlOiAnZm9vLmpzJ1xuICAgIH0pLm1hcDtcblxuICAgIGFzc2VydC5vayhtYXAgaW5zdGFuY2VvZiBTb3VyY2VNYXBHZW5lcmF0b3IsICdtYXAgaW5zdGFuY2VvZiBTb3VyY2VNYXBHZW5lcmF0b3InKTtcbiAgICBtYXAgPSBuZXcgU291cmNlTWFwQ29uc3VtZXIobWFwLnRvU3RyaW5nKCkpO1xuXG4gICAgYXNzZXJ0LmVxdWFsKG1hcC5zb3VyY2VzLmxlbmd0aCwgMik7XG4gICAgYXNzZXJ0LmVxdWFsKG1hcC5zb3VyY2VzWzBdLCAnYS5qcycpO1xuICAgIGFzc2VydC5lcXVhbChtYXAuc291cmNlc1sxXSwgJ2IuanMnKTtcbiAgICBhc3NlcnQuZXF1YWwobWFwLnNvdXJjZXNDb250ZW50Lmxlbmd0aCwgMik7XG4gICAgYXNzZXJ0LmVxdWFsKG1hcC5zb3VyY2VzQ29udGVudFswXSwgJ3NvbWVDb250ZW50Jyk7XG4gICAgYXNzZXJ0LmVxdWFsKG1hcC5zb3VyY2VzQ29udGVudFsxXSwgJ290aGVyQ29udGVudCcpO1xuICB9O1xuXG4gIGV4cG9ydHNbJ3Rlc3Qgd2Fsa1NvdXJjZUNvbnRlbnRzJ10gPSBmdW5jdGlvbiAoYXNzZXJ0KSB7XG4gICAgdmFyIGFOb2RlID0gbmV3IFNvdXJjZU5vZGUoMSwgMSwgJ2EuanMnLCAnYScpO1xuICAgIGFOb2RlLnNldFNvdXJjZUNvbnRlbnQoJ2EuanMnLCAnc29tZUNvbnRlbnQnKTtcbiAgICB2YXIgbm9kZSA9IG5ldyBTb3VyY2VOb2RlKG51bGwsIG51bGwsIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJyhmdW5jdGlvbiAoKSB7XFxuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAnLCBhTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAnLCBuZXcgU291cmNlTm9kZSgxLCAxLCAnYi5qcycsICdiJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30oKSk7J10pO1xuICAgIG5vZGUuc2V0U291cmNlQ29udGVudCgnYi5qcycsICdvdGhlckNvbnRlbnQnKTtcbiAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgIG5vZGUud2Fsa1NvdXJjZUNvbnRlbnRzKGZ1bmN0aW9uIChzb3VyY2VGaWxlLCBzb3VyY2VDb250ZW50KSB7XG4gICAgICByZXN1bHRzLnB1c2goW3NvdXJjZUZpbGUsIHNvdXJjZUNvbnRlbnRdKTtcbiAgICB9KTtcbiAgICBhc3NlcnQuZXF1YWwocmVzdWx0cy5sZW5ndGgsIDIpO1xuICAgIGFzc2VydC5lcXVhbChyZXN1bHRzWzBdWzBdLCAnYS5qcycpO1xuICAgIGFzc2VydC5lcXVhbChyZXN1bHRzWzBdWzFdLCAnc29tZUNvbnRlbnQnKTtcbiAgICBhc3NlcnQuZXF1YWwocmVzdWx0c1sxXVswXSwgJ2IuanMnKTtcbiAgICBhc3NlcnQuZXF1YWwocmVzdWx0c1sxXVsxXSwgJ290aGVyQ29udGVudCcpO1xuICB9O1xufVxuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL3Rlc3QvdGVzdC1zb3VyY2Utbm9kZS5qc1xuICoqIG1vZHVsZSBpZCA9IDBcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cbntcbiAgdmFyIHV0aWwgPSByZXF1aXJlKCcuLi9saWIvdXRpbCcpO1xuXG4gIC8vIFRoaXMgaXMgYSB0ZXN0IG1hcHBpbmcgd2hpY2ggbWFwcyBmdW5jdGlvbnMgZnJvbSB0d28gZGlmZmVyZW50IGZpbGVzXG4gIC8vIChvbmUuanMgYW5kIHR3by5qcykgdG8gYSBtaW5pZmllZCBnZW5lcmF0ZWQgc291cmNlLlxuICAvL1xuICAvLyBIZXJlIGlzIG9uZS5qczpcbiAgLy9cbiAgLy8gICBPTkUuZm9vID0gZnVuY3Rpb24gKGJhcikge1xuICAvLyAgICAgcmV0dXJuIGJheihiYXIpO1xuICAvLyAgIH07XG4gIC8vXG4gIC8vIEhlcmUgaXMgdHdvLmpzOlxuICAvL1xuICAvLyAgIFRXTy5pbmMgPSBmdW5jdGlvbiAobikge1xuICAvLyAgICAgcmV0dXJuIG4gKyAxO1xuICAvLyAgIH07XG4gIC8vXG4gIC8vIEFuZCBoZXJlIGlzIHRoZSBnZW5lcmF0ZWQgY29kZSAobWluLmpzKTpcbiAgLy9cbiAgLy8gICBPTkUuZm9vPWZ1bmN0aW9uKGEpe3JldHVybiBiYXooYSk7fTtcbiAgLy8gICBUV08uaW5jPWZ1bmN0aW9uKGEpe3JldHVybiBhKzE7fTtcbiAgZXhwb3J0cy50ZXN0R2VuZXJhdGVkQ29kZSA9IFwiIE9ORS5mb289ZnVuY3Rpb24oYSl7cmV0dXJuIGJheihhKTt9O1xcblwiK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgVFdPLmluYz1mdW5jdGlvbihhKXtyZXR1cm4gYSsxO307XCI7XG4gIGV4cG9ydHMudGVzdE1hcCA9IHtcbiAgICB2ZXJzaW9uOiAzLFxuICAgIGZpbGU6ICdtaW4uanMnLFxuICAgIG5hbWVzOiBbJ2JhcicsICdiYXonLCAnbiddLFxuICAgIHNvdXJjZXM6IFsnb25lLmpzJywgJ3R3by5qcyddLFxuICAgIHNvdXJjZVJvb3Q6ICcvdGhlL3Jvb3QnLFxuICAgIG1hcHBpbmdzOiAnQ0FBQyxJQUFJLElBQU0sU0FBVUEsR0FDbEIsT0FBT0MsSUFBSUQ7Q0NEYixJQUFJLElBQU0sU0FBVUUsR0FDbEIsT0FBT0EnXG4gIH07XG4gIGV4cG9ydHMudGVzdE1hcE5vU291cmNlUm9vdCA9IHtcbiAgICB2ZXJzaW9uOiAzLFxuICAgIGZpbGU6ICdtaW4uanMnLFxuICAgIG5hbWVzOiBbJ2JhcicsICdiYXonLCAnbiddLFxuICAgIHNvdXJjZXM6IFsnb25lLmpzJywgJ3R3by5qcyddLFxuICAgIG1hcHBpbmdzOiAnQ0FBQyxJQUFJLElBQU0sU0FBVUEsR0FDbEIsT0FBT0MsSUFBSUQ7Q0NEYixJQUFJLElBQU0sU0FBVUUsR0FDbEIsT0FBT0EnXG4gIH07XG4gIGV4cG9ydHMudGVzdE1hcEVtcHR5U291cmNlUm9vdCA9IHtcbiAgICB2ZXJzaW9uOiAzLFxuICAgIGZpbGU6ICdtaW4uanMnLFxuICAgIG5hbWVzOiBbJ2JhcicsICdiYXonLCAnbiddLFxuICAgIHNvdXJjZXM6IFsnb25lLmpzJywgJ3R3by5qcyddLFxuICAgIHNvdXJjZVJvb3Q6ICcnLFxuICAgIG1hcHBpbmdzOiAnQ0FBQyxJQUFJLElBQU0sU0FBVUEsR0FDbEIsT0FBT0MsSUFBSUQ7Q0NEYixJQUFJLElBQU0sU0FBVUUsR0FDbEIsT0FBT0EnXG4gIH07XG4gIC8vIFRoaXMgbWFwcGluZyBpcyBpZGVudGljYWwgdG8gYWJvdmUsIGJ1dCB1c2VzIHRoZSBpbmRleGVkIGZvcm1hdCBpbnN0ZWFkLlxuICBleHBvcnRzLmluZGV4ZWRUZXN0TWFwID0ge1xuICAgIHZlcnNpb246IDMsXG4gICAgZmlsZTogJ21pbi5qcycsXG4gICAgc2VjdGlvbnM6IFtcbiAgICAgIHtcbiAgICAgICAgb2Zmc2V0OiB7XG4gICAgICAgICAgbGluZTogMCxcbiAgICAgICAgICBjb2x1bW46IDBcbiAgICAgICAgfSxcbiAgICAgICAgbWFwOiB7XG4gICAgICAgICAgdmVyc2lvbjogMyxcbiAgICAgICAgICBzb3VyY2VzOiBbXG4gICAgICAgICAgICBcIm9uZS5qc1wiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBzb3VyY2VzQ29udGVudDogW1xuICAgICAgICAgICAgJyBPTkUuZm9vID0gZnVuY3Rpb24gKGJhcikge1xcbicgK1xuICAgICAgICAgICAgJyAgIHJldHVybiBiYXooYmFyKTtcXG4nICtcbiAgICAgICAgICAgICcgfTsnLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgbmFtZXM6IFtcbiAgICAgICAgICAgIFwiYmFyXCIsXG4gICAgICAgICAgICBcImJhelwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBtYXBwaW5nczogXCJDQUFDLElBQUksSUFBTSxTQUFVQSxHQUNsQixPQUFPQyxJQUFJRFwiLFxuICAgICAgICAgIGZpbGU6IFwibWluLmpzXCIsXG4gICAgICAgICAgc291cmNlUm9vdDogXCIvdGhlL3Jvb3RcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBvZmZzZXQ6IHtcbiAgICAgICAgICBsaW5lOiAxLFxuICAgICAgICAgIGNvbHVtbjogMFxuICAgICAgICB9LFxuICAgICAgICBtYXA6IHtcbiAgICAgICAgICB2ZXJzaW9uOiAzLFxuICAgICAgICAgIHNvdXJjZXM6IFtcbiAgICAgICAgICAgIFwidHdvLmpzXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIHNvdXJjZXNDb250ZW50OiBbXG4gICAgICAgICAgICAnIFRXTy5pbmMgPSBmdW5jdGlvbiAobikge1xcbicgK1xuICAgICAgICAgICAgJyAgIHJldHVybiBuICsgMTtcXG4nICtcbiAgICAgICAgICAgICcgfTsnXG4gICAgICAgICAgXSxcbiAgICAgICAgICBuYW1lczogW1xuICAgICAgICAgICAgXCJuXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIG1hcHBpbmdzOiBcIkNBQUMsSUFBSSxJQUFNLFNBQVVBLEdBQ2xCLE9BQU9BXCIsXG4gICAgICAgICAgZmlsZTogXCJtaW4uanNcIixcbiAgICAgICAgICBzb3VyY2VSb290OiBcIi90aGUvcm9vdFwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGV4cG9ydHMuaW5kZXhlZFRlc3RNYXBEaWZmZXJlbnRTb3VyY2VSb290cyA9IHtcbiAgICB2ZXJzaW9uOiAzLFxuICAgIGZpbGU6ICdtaW4uanMnLFxuICAgIHNlY3Rpb25zOiBbXG4gICAgICB7XG4gICAgICAgIG9mZnNldDoge1xuICAgICAgICAgIGxpbmU6IDAsXG4gICAgICAgICAgY29sdW1uOiAwXG4gICAgICAgIH0sXG4gICAgICAgIG1hcDoge1xuICAgICAgICAgIHZlcnNpb246IDMsXG4gICAgICAgICAgc291cmNlczogW1xuICAgICAgICAgICAgXCJvbmUuanNcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgc291cmNlc0NvbnRlbnQ6IFtcbiAgICAgICAgICAgICcgT05FLmZvbyA9IGZ1bmN0aW9uIChiYXIpIHtcXG4nICtcbiAgICAgICAgICAgICcgICByZXR1cm4gYmF6KGJhcik7XFxuJyArXG4gICAgICAgICAgICAnIH07JyxcbiAgICAgICAgICBdLFxuICAgICAgICAgIG5hbWVzOiBbXG4gICAgICAgICAgICBcImJhclwiLFxuICAgICAgICAgICAgXCJiYXpcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgbWFwcGluZ3M6IFwiQ0FBQyxJQUFJLElBQU0sU0FBVUEsR0FDbEIsT0FBT0MsSUFBSURcIixcbiAgICAgICAgICBmaWxlOiBcIm1pbi5qc1wiLFxuICAgICAgICAgIHNvdXJjZVJvb3Q6IFwiL3RoZS9yb290XCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgb2Zmc2V0OiB7XG4gICAgICAgICAgbGluZTogMSxcbiAgICAgICAgICBjb2x1bW46IDBcbiAgICAgICAgfSxcbiAgICAgICAgbWFwOiB7XG4gICAgICAgICAgdmVyc2lvbjogMyxcbiAgICAgICAgICBzb3VyY2VzOiBbXG4gICAgICAgICAgICBcInR3by5qc1wiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBzb3VyY2VzQ29udGVudDogW1xuICAgICAgICAgICAgJyBUV08uaW5jID0gZnVuY3Rpb24gKG4pIHtcXG4nICtcbiAgICAgICAgICAgICcgICByZXR1cm4gbiArIDE7XFxuJyArXG4gICAgICAgICAgICAnIH07J1xuICAgICAgICAgIF0sXG4gICAgICAgICAgbmFtZXM6IFtcbiAgICAgICAgICAgIFwiblwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBtYXBwaW5nczogXCJDQUFDLElBQUksSUFBTSxTQUFVQSxHQUNsQixPQUFPQVwiLFxuICAgICAgICAgIGZpbGU6IFwibWluLmpzXCIsXG4gICAgICAgICAgc291cmNlUm9vdDogXCIvZGlmZmVyZW50L3Jvb3RcIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xuICBleHBvcnRzLnRlc3RNYXBXaXRoU291cmNlc0NvbnRlbnQgPSB7XG4gICAgdmVyc2lvbjogMyxcbiAgICBmaWxlOiAnbWluLmpzJyxcbiAgICBuYW1lczogWydiYXInLCAnYmF6JywgJ24nXSxcbiAgICBzb3VyY2VzOiBbJ29uZS5qcycsICd0d28uanMnXSxcbiAgICBzb3VyY2VzQ29udGVudDogW1xuICAgICAgJyBPTkUuZm9vID0gZnVuY3Rpb24gKGJhcikge1xcbicgK1xuICAgICAgJyAgIHJldHVybiBiYXooYmFyKTtcXG4nICtcbiAgICAgICcgfTsnLFxuICAgICAgJyBUV08uaW5jID0gZnVuY3Rpb24gKG4pIHtcXG4nICtcbiAgICAgICcgICByZXR1cm4gbiArIDE7XFxuJyArXG4gICAgICAnIH07J1xuICAgIF0sXG4gICAgc291cmNlUm9vdDogJy90aGUvcm9vdCcsXG4gICAgbWFwcGluZ3M6ICdDQUFDLElBQUksSUFBTSxTQUFVQSxHQUNsQixPQUFPQyxJQUFJRDtDQ0RiLElBQUksSUFBTSxTQUFVRSxHQUNsQixPQUFPQSdcbiAgfTtcbiAgZXhwb3J0cy50ZXN0TWFwUmVsYXRpdmVTb3VyY2VzID0ge1xuICAgIHZlcnNpb246IDMsXG4gICAgZmlsZTogJ21pbi5qcycsXG4gICAgbmFtZXM6IFsnYmFyJywgJ2JheicsICduJ10sXG4gICAgc291cmNlczogWycuL29uZS5qcycsICcuL3R3by5qcyddLFxuICAgIHNvdXJjZXNDb250ZW50OiBbXG4gICAgICAnIE9ORS5mb28gPSBmdW5jdGlvbiAoYmFyKSB7XFxuJyArXG4gICAgICAnICAgcmV0dXJuIGJheihiYXIpO1xcbicgK1xuICAgICAgJyB9OycsXG4gICAgICAnIFRXTy5pbmMgPSBmdW5jdGlvbiAobikge1xcbicgK1xuICAgICAgJyAgIHJldHVybiBuICsgMTtcXG4nICtcbiAgICAgICcgfTsnXG4gICAgXSxcbiAgICBzb3VyY2VSb290OiAnL3RoZS9yb290JyxcbiAgICBtYXBwaW5nczogJ0NBQUMsSUFBSSxJQUFNLFNBQVVBLEdBQ2xCLE9BQU9DLElBQUlEO0NDRGIsSUFBSSxJQUFNLFNBQVVFLEdBQ2xCLE9BQU9BJ1xuICB9O1xuICBleHBvcnRzLmVtcHR5TWFwID0ge1xuICAgIHZlcnNpb246IDMsXG4gICAgZmlsZTogJ21pbi5qcycsXG4gICAgbmFtZXM6IFtdLFxuICAgIHNvdXJjZXM6IFtdLFxuICAgIG1hcHBpbmdzOiAnJ1xuICB9O1xuXG5cbiAgZnVuY3Rpb24gYXNzZXJ0TWFwcGluZyhnZW5lcmF0ZWRMaW5lLCBnZW5lcmF0ZWRDb2x1bW4sIG9yaWdpbmFsU291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsTGluZSwgb3JpZ2luYWxDb2x1bW4sIG5hbWUsIGJpYXMsIG1hcCwgYXNzZXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRUZXN0R2VuZXJhdGVkLCBkb250VGVzdE9yaWdpbmFsKSB7XG4gICAgaWYgKCFkb250VGVzdE9yaWdpbmFsKSB7XG4gICAgICB2YXIgb3JpZ01hcHBpbmcgPSBtYXAub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICAgIGxpbmU6IGdlbmVyYXRlZExpbmUsXG4gICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkQ29sdW1uLFxuICAgICAgICBiaWFzOiBiaWFzXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5lcXVhbChvcmlnTWFwcGluZy5uYW1lLCBuYW1lLFxuICAgICAgICAgICAgICAgICAgICdJbmNvcnJlY3QgbmFtZSwgZXhwZWN0ZWQgJyArIEpTT04uc3RyaW5naWZ5KG5hbWUpXG4gICAgICAgICAgICAgICAgICAgKyAnLCBnb3QgJyArIEpTT04uc3RyaW5naWZ5KG9yaWdNYXBwaW5nLm5hbWUpKTtcbiAgICAgIGFzc2VydC5lcXVhbChvcmlnTWFwcGluZy5saW5lLCBvcmlnaW5hbExpbmUsXG4gICAgICAgICAgICAgICAgICAgJ0luY29ycmVjdCBsaW5lLCBleHBlY3RlZCAnICsgSlNPTi5zdHJpbmdpZnkob3JpZ2luYWxMaW5lKVxuICAgICAgICAgICAgICAgICAgICsgJywgZ290ICcgKyBKU09OLnN0cmluZ2lmeShvcmlnTWFwcGluZy5saW5lKSk7XG4gICAgICBhc3NlcnQuZXF1YWwob3JpZ01hcHBpbmcuY29sdW1uLCBvcmlnaW5hbENvbHVtbixcbiAgICAgICAgICAgICAgICAgICAnSW5jb3JyZWN0IGNvbHVtbiwgZXhwZWN0ZWQgJyArIEpTT04uc3RyaW5naWZ5KG9yaWdpbmFsQ29sdW1uKVxuICAgICAgICAgICAgICAgICAgICsgJywgZ290ICcgKyBKU09OLnN0cmluZ2lmeShvcmlnTWFwcGluZy5jb2x1bW4pKTtcblxuICAgICAgdmFyIGV4cGVjdGVkU291cmNlO1xuXG4gICAgICBpZiAob3JpZ2luYWxTb3VyY2UgJiYgbWFwLnNvdXJjZVJvb3QgJiYgb3JpZ2luYWxTb3VyY2UuaW5kZXhPZihtYXAuc291cmNlUm9vdCkgPT09IDApIHtcbiAgICAgICAgZXhwZWN0ZWRTb3VyY2UgPSBvcmlnaW5hbFNvdXJjZTtcbiAgICAgIH0gZWxzZSBpZiAob3JpZ2luYWxTb3VyY2UpIHtcbiAgICAgICAgZXhwZWN0ZWRTb3VyY2UgPSBtYXAuc291cmNlUm9vdFxuICAgICAgICAgID8gdXRpbC5qb2luKG1hcC5zb3VyY2VSb290LCBvcmlnaW5hbFNvdXJjZSlcbiAgICAgICAgICA6IG9yaWdpbmFsU291cmNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhwZWN0ZWRTb3VyY2UgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBhc3NlcnQuZXF1YWwob3JpZ01hcHBpbmcuc291cmNlLCBleHBlY3RlZFNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAnSW5jb3JyZWN0IHNvdXJjZSwgZXhwZWN0ZWQgJyArIEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkU291cmNlKVxuICAgICAgICAgICAgICAgICAgICsgJywgZ290ICcgKyBKU09OLnN0cmluZ2lmeShvcmlnTWFwcGluZy5zb3VyY2UpKTtcbiAgICB9XG5cbiAgICBpZiAoIWRvbnRUZXN0R2VuZXJhdGVkKSB7XG4gICAgICB2YXIgZ2VuTWFwcGluZyA9IG1hcC5nZW5lcmF0ZWRQb3NpdGlvbkZvcih7XG4gICAgICAgIHNvdXJjZTogb3JpZ2luYWxTb3VyY2UsXG4gICAgICAgIGxpbmU6IG9yaWdpbmFsTGluZSxcbiAgICAgICAgY29sdW1uOiBvcmlnaW5hbENvbHVtbixcbiAgICAgICAgYmlhczogYmlhc1xuICAgICAgfSk7XG4gICAgICBhc3NlcnQuZXF1YWwoZ2VuTWFwcGluZy5saW5lLCBnZW5lcmF0ZWRMaW5lLFxuICAgICAgICAgICAgICAgICAgICdJbmNvcnJlY3QgbGluZSwgZXhwZWN0ZWQgJyArIEpTT04uc3RyaW5naWZ5KGdlbmVyYXRlZExpbmUpXG4gICAgICAgICAgICAgICAgICAgKyAnLCBnb3QgJyArIEpTT04uc3RyaW5naWZ5KGdlbk1hcHBpbmcubGluZSkpO1xuICAgICAgYXNzZXJ0LmVxdWFsKGdlbk1hcHBpbmcuY29sdW1uLCBnZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgJ0luY29ycmVjdCBjb2x1bW4sIGV4cGVjdGVkICcgKyBKU09OLnN0cmluZ2lmeShnZW5lcmF0ZWRDb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgKyAnLCBnb3QgJyArIEpTT04uc3RyaW5naWZ5KGdlbk1hcHBpbmcuY29sdW1uKSk7XG4gICAgfVxuICB9XG4gIGV4cG9ydHMuYXNzZXJ0TWFwcGluZyA9IGFzc2VydE1hcHBpbmc7XG5cbiAgZnVuY3Rpb24gYXNzZXJ0RXF1YWxNYXBzKGFzc2VydCwgYWN0dWFsTWFwLCBleHBlY3RlZE1hcCkge1xuICAgIGFzc2VydC5lcXVhbChhY3R1YWxNYXAudmVyc2lvbiwgZXhwZWN0ZWRNYXAudmVyc2lvbiwgXCJ2ZXJzaW9uIG1pc21hdGNoXCIpO1xuICAgIGFzc2VydC5lcXVhbChhY3R1YWxNYXAuZmlsZSwgZXhwZWN0ZWRNYXAuZmlsZSwgXCJmaWxlIG1pc21hdGNoXCIpO1xuICAgIGFzc2VydC5lcXVhbChhY3R1YWxNYXAubmFtZXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgICBleHBlY3RlZE1hcC5uYW1lcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgIFwibmFtZXMgbGVuZ3RoIG1pc21hdGNoOiBcIiArXG4gICAgICAgICAgICAgICAgICAgYWN0dWFsTWFwLm5hbWVzLmpvaW4oXCIsIFwiKSArIFwiICE9IFwiICsgZXhwZWN0ZWRNYXAubmFtZXMuam9pbihcIiwgXCIpKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFjdHVhbE1hcC5uYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgYXNzZXJ0LmVxdWFsKGFjdHVhbE1hcC5uYW1lc1tpXSxcbiAgICAgICAgICAgICAgICAgICBleHBlY3RlZE1hcC5uYW1lc1tpXSxcbiAgICAgICAgICAgICAgICAgICBcIm5hbWVzW1wiICsgaSArIFwiXSBtaXNtYXRjaDogXCIgK1xuICAgICAgICAgICAgICAgICAgICAgYWN0dWFsTWFwLm5hbWVzLmpvaW4oXCIsIFwiKSArIFwiICE9IFwiICsgZXhwZWN0ZWRNYXAubmFtZXMuam9pbihcIiwgXCIpKTtcbiAgICB9XG4gICAgYXNzZXJ0LmVxdWFsKGFjdHVhbE1hcC5zb3VyY2VzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgZXhwZWN0ZWRNYXAuc291cmNlcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgIFwic291cmNlcyBsZW5ndGggbWlzbWF0Y2g6IFwiICtcbiAgICAgICAgICAgICAgICAgICBhY3R1YWxNYXAuc291cmNlcy5qb2luKFwiLCBcIikgKyBcIiAhPSBcIiArIGV4cGVjdGVkTWFwLnNvdXJjZXMuam9pbihcIiwgXCIpKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFjdHVhbE1hcC5zb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhc3NlcnQuZXF1YWwoYWN0dWFsTWFwLnNvdXJjZXNbaV0sXG4gICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRNYXAuc291cmNlc1tpXSxcbiAgICAgICAgICAgICAgICAgICBcInNvdXJjZXNbXCIgKyBpICsgXCJdIGxlbmd0aCBtaXNtYXRjaDogXCIgK1xuICAgICAgICAgICAgICAgICAgIGFjdHVhbE1hcC5zb3VyY2VzLmpvaW4oXCIsIFwiKSArIFwiICE9IFwiICsgZXhwZWN0ZWRNYXAuc291cmNlcy5qb2luKFwiLCBcIikpO1xuICAgIH1cbiAgICBhc3NlcnQuZXF1YWwoYWN0dWFsTWFwLnNvdXJjZVJvb3QsXG4gICAgICAgICAgICAgICAgIGV4cGVjdGVkTWFwLnNvdXJjZVJvb3QsXG4gICAgICAgICAgICAgICAgIFwic291cmNlUm9vdCBtaXNtYXRjaDogXCIgK1xuICAgICAgICAgICAgICAgICAgIGFjdHVhbE1hcC5zb3VyY2VSb290ICsgXCIgIT0gXCIgKyBleHBlY3RlZE1hcC5zb3VyY2VSb290KTtcbiAgICBhc3NlcnQuZXF1YWwoYWN0dWFsTWFwLm1hcHBpbmdzLCBleHBlY3RlZE1hcC5tYXBwaW5ncyxcbiAgICAgICAgICAgICAgICAgXCJtYXBwaW5ncyBtaXNtYXRjaDpcXG5BY3R1YWw6ICAgXCIgKyBhY3R1YWxNYXAubWFwcGluZ3MgKyBcIlxcbkV4cGVjdGVkOiBcIiArIGV4cGVjdGVkTWFwLm1hcHBpbmdzKTtcbiAgICBpZiAoYWN0dWFsTWFwLnNvdXJjZXNDb250ZW50KSB7XG4gICAgICBhc3NlcnQuZXF1YWwoYWN0dWFsTWFwLnNvdXJjZXNDb250ZW50Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICBleHBlY3RlZE1hcC5zb3VyY2VzQ29udGVudC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgXCJzb3VyY2VzQ29udGVudCBsZW5ndGggbWlzbWF0Y2hcIik7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFjdHVhbE1hcC5zb3VyY2VzQ29udGVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICBhc3NlcnQuZXF1YWwoYWN0dWFsTWFwLnNvdXJjZXNDb250ZW50W2ldLFxuICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRNYXAuc291cmNlc0NvbnRlbnRbaV0sXG4gICAgICAgICAgICAgICAgICAgICBcInNvdXJjZXNDb250ZW50W1wiICsgaSArIFwiXSBtaXNtYXRjaFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZXhwb3J0cy5hc3NlcnRFcXVhbE1hcHMgPSBhc3NlcnRFcXVhbE1hcHM7XG59XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vdGVzdC91dGlsLmpzXG4gKiogbW9kdWxlIGlkID0gMVxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xue1xuICAvKipcbiAgICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgZ2V0dGluZyB2YWx1ZXMgZnJvbSBwYXJhbWV0ZXIvb3B0aW9uc1xuICAgKiBvYmplY3RzLlxuICAgKlxuICAgKiBAcGFyYW0gYXJncyBUaGUgb2JqZWN0IHdlIGFyZSBleHRyYWN0aW5nIHZhbHVlcyBmcm9tXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB3ZSBhcmUgZ2V0dGluZy5cbiAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBBbiBvcHRpb25hbCB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmdcbiAgICogZnJvbSB0aGUgb2JqZWN0LiBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQgYW5kIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nLCBhblxuICAgKiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAgICovXG4gIGZ1bmN0aW9uIGdldEFyZyhhQXJncywgYU5hbWUsIGFEZWZhdWx0VmFsdWUpIHtcbiAgICBpZiAoYU5hbWUgaW4gYUFyZ3MpIHtcbiAgICAgIHJldHVybiBhQXJnc1thTmFtZV07XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICByZXR1cm4gYURlZmF1bHRWYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhTmFtZSArICdcIiBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LicpO1xuICAgIH1cbiAgfVxuICBleHBvcnRzLmdldEFyZyA9IGdldEFyZztcblxuICB2YXIgdXJsUmVnZXhwID0gL14oPzooW1xcdytcXC0uXSspOik/XFwvXFwvKD86KFxcdys6XFx3KylAKT8oW1xcdy5dKikoPzo6KFxcZCspKT8oXFxTKikkLztcbiAgdmFyIGRhdGFVcmxSZWdleHAgPSAvXmRhdGE6LitcXCwuKyQvO1xuXG4gIGZ1bmN0aW9uIHVybFBhcnNlKGFVcmwpIHtcbiAgICB2YXIgbWF0Y2ggPSBhVXJsLm1hdGNoKHVybFJlZ2V4cCk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBzY2hlbWU6IG1hdGNoWzFdLFxuICAgICAgYXV0aDogbWF0Y2hbMl0sXG4gICAgICBob3N0OiBtYXRjaFszXSxcbiAgICAgIHBvcnQ6IG1hdGNoWzRdLFxuICAgICAgcGF0aDogbWF0Y2hbNV1cbiAgICB9O1xuICB9XG4gIGV4cG9ydHMudXJsUGFyc2UgPSB1cmxQYXJzZTtcblxuICBmdW5jdGlvbiB1cmxHZW5lcmF0ZShhUGFyc2VkVXJsKSB7XG4gICAgdmFyIHVybCA9ICcnO1xuICAgIGlmIChhUGFyc2VkVXJsLnNjaGVtZSkge1xuICAgICAgdXJsICs9IGFQYXJzZWRVcmwuc2NoZW1lICsgJzonO1xuICAgIH1cbiAgICB1cmwgKz0gJy8vJztcbiAgICBpZiAoYVBhcnNlZFVybC5hdXRoKSB7XG4gICAgICB1cmwgKz0gYVBhcnNlZFVybC5hdXRoICsgJ0AnO1xuICAgIH1cbiAgICBpZiAoYVBhcnNlZFVybC5ob3N0KSB7XG4gICAgICB1cmwgKz0gYVBhcnNlZFVybC5ob3N0O1xuICAgIH1cbiAgICBpZiAoYVBhcnNlZFVybC5wb3J0KSB7XG4gICAgICB1cmwgKz0gXCI6XCIgKyBhUGFyc2VkVXJsLnBvcnRcbiAgICB9XG4gICAgaWYgKGFQYXJzZWRVcmwucGF0aCkge1xuICAgICAgdXJsICs9IGFQYXJzZWRVcmwucGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBleHBvcnRzLnVybEdlbmVyYXRlID0gdXJsR2VuZXJhdGU7XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZXMgYSBwYXRoLCBvciB0aGUgcGF0aCBwb3J0aW9uIG9mIGEgVVJMOlxuICAgKlxuICAgKiAtIFJlcGxhY2VzIGNvbnNlcXV0aXZlIHNsYXNoZXMgd2l0aCBvbmUgc2xhc2guXG4gICAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnLicgcGFydHMuXG4gICAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnPGRpcj4vLi4nIHBhcnRzLlxuICAgKlxuICAgKiBCYXNlZCBvbiBjb2RlIGluIHRoZSBOb2RlLmpzICdwYXRoJyBjb3JlIG1vZHVsZS5cbiAgICpcbiAgICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIHVybCB0byBub3JtYWxpemUuXG4gICAqL1xuICBmdW5jdGlvbiBub3JtYWxpemUoYVBhdGgpIHtcbiAgICB2YXIgcGF0aCA9IGFQYXRoO1xuICAgIHZhciB1cmwgPSB1cmxQYXJzZShhUGF0aCk7XG4gICAgaWYgKHVybCkge1xuICAgICAgaWYgKCF1cmwucGF0aCkge1xuICAgICAgICByZXR1cm4gYVBhdGg7XG4gICAgICB9XG4gICAgICBwYXRoID0gdXJsLnBhdGg7XG4gICAgfVxuICAgIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpO1xuXG4gICAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgvXFwvKy8pO1xuICAgIGZvciAodmFyIHBhcnQsIHVwID0gMCwgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBwYXJ0ID0gcGFydHNbaV07XG4gICAgICBpZiAocGFydCA9PT0gJy4nKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgICB1cCsrO1xuICAgICAgfSBlbHNlIGlmICh1cCA+IDApIHtcbiAgICAgICAgaWYgKHBhcnQgPT09ICcnKSB7XG4gICAgICAgICAgLy8gVGhlIGZpcnN0IHBhcnQgaXMgYmxhbmsgaWYgdGhlIHBhdGggaXMgYWJzb2x1dGUuIFRyeWluZyB0byBnb1xuICAgICAgICAgIC8vIGFib3ZlIHRoZSByb290IGlzIGEgbm8tb3AuIFRoZXJlZm9yZSB3ZSBjYW4gcmVtb3ZlIGFsbCAnLi4nIHBhcnRzXG4gICAgICAgICAgLy8gZGlyZWN0bHkgYWZ0ZXIgdGhlIHJvb3QuXG4gICAgICAgICAgcGFydHMuc3BsaWNlKGkgKyAxLCB1cCk7XG4gICAgICAgICAgdXAgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcnRzLnNwbGljZShpLCAyKTtcbiAgICAgICAgICB1cC0tO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHBhdGggPSBwYXJ0cy5qb2luKCcvJyk7XG5cbiAgICBpZiAocGF0aCA9PT0gJycpIHtcbiAgICAgIHBhdGggPSBpc0Fic29sdXRlID8gJy8nIDogJy4nO1xuICAgIH1cblxuICAgIGlmICh1cmwpIHtcbiAgICAgIHVybC5wYXRoID0gcGF0aDtcbiAgICAgIHJldHVybiB1cmxHZW5lcmF0ZSh1cmwpO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aDtcbiAgfVxuICBleHBvcnRzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcblxuICAvKipcbiAgICogSm9pbnMgdHdvIHBhdGhzL1VSTHMuXG4gICAqXG4gICAqIEBwYXJhbSBhUm9vdCBUaGUgcm9vdCBwYXRoIG9yIFVSTC5cbiAgICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBqb2luZWQgd2l0aCB0aGUgcm9vdC5cbiAgICpcbiAgICogLSBJZiBhUGF0aCBpcyBhIFVSTCBvciBhIGRhdGEgVVJJLCBhUGF0aCBpcyByZXR1cm5lZCwgdW5sZXNzIGFQYXRoIGlzIGFcbiAgICogICBzY2hlbWUtcmVsYXRpdmUgVVJMOiBUaGVuIHRoZSBzY2hlbWUgb2YgYVJvb3QsIGlmIGFueSwgaXMgcHJlcGVuZGVkXG4gICAqICAgZmlyc3QuXG4gICAqIC0gT3RoZXJ3aXNlIGFQYXRoIGlzIGEgcGF0aC4gSWYgYVJvb3QgaXMgYSBVUkwsIHRoZW4gaXRzIHBhdGggcG9ydGlvblxuICAgKiAgIGlzIHVwZGF0ZWQgd2l0aCB0aGUgcmVzdWx0IGFuZCBhUm9vdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSByZXN1bHRcbiAgICogICBpcyByZXR1cm5lZC5cbiAgICogICAtIElmIGFQYXRoIGlzIGFic29sdXRlLCB0aGUgcmVzdWx0IGlzIGFQYXRoLlxuICAgKiAgIC0gT3RoZXJ3aXNlIHRoZSB0d28gcGF0aHMgYXJlIGpvaW5lZCB3aXRoIGEgc2xhc2guXG4gICAqIC0gSm9pbmluZyBmb3IgZXhhbXBsZSAnaHR0cDovLycgYW5kICd3d3cuZXhhbXBsZS5jb20nIGlzIGFsc28gc3VwcG9ydGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gam9pbihhUm9vdCwgYVBhdGgpIHtcbiAgICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICAgIGFSb290ID0gXCIuXCI7XG4gICAgfVxuICAgIGlmIChhUGF0aCA9PT0gXCJcIikge1xuICAgICAgYVBhdGggPSBcIi5cIjtcbiAgICB9XG4gICAgdmFyIGFQYXRoVXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICAgIHZhciBhUm9vdFVybCA9IHVybFBhcnNlKGFSb290KTtcbiAgICBpZiAoYVJvb3RVcmwpIHtcbiAgICAgIGFSb290ID0gYVJvb3RVcmwucGF0aCB8fCAnLyc7XG4gICAgfVxuXG4gICAgLy8gYGpvaW4oZm9vLCAnLy93d3cuZXhhbXBsZS5vcmcnKWBcbiAgICBpZiAoYVBhdGhVcmwgJiYgIWFQYXRoVXJsLnNjaGVtZSkge1xuICAgICAgaWYgKGFSb290VXJsKSB7XG4gICAgICAgIGFQYXRoVXJsLnNjaGVtZSA9IGFSb290VXJsLnNjaGVtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUGF0aFVybCk7XG4gICAgfVxuXG4gICAgaWYgKGFQYXRoVXJsIHx8IGFQYXRoLm1hdGNoKGRhdGFVcmxSZWdleHApKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuXG4gICAgLy8gYGpvaW4oJ2h0dHA6Ly8nLCAnd3d3LmV4YW1wbGUuY29tJylgXG4gICAgaWYgKGFSb290VXJsICYmICFhUm9vdFVybC5ob3N0ICYmICFhUm9vdFVybC5wYXRoKSB7XG4gICAgICBhUm9vdFVybC5ob3N0ID0gYVBhdGg7XG4gICAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVJvb3RVcmwpO1xuICAgIH1cblxuICAgIHZhciBqb2luZWQgPSBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgPyBhUGF0aFxuICAgICAgOiBub3JtYWxpemUoYVJvb3QucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyBhUGF0aCk7XG5cbiAgICBpZiAoYVJvb3RVcmwpIHtcbiAgICAgIGFSb290VXJsLnBhdGggPSBqb2luZWQ7XG4gICAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVJvb3RVcmwpO1xuICAgIH1cbiAgICByZXR1cm4gam9pbmVkO1xuICB9XG4gIGV4cG9ydHMuam9pbiA9IGpvaW47XG5cbiAgZXhwb3J0cy5pc0Fic29sdXRlID0gZnVuY3Rpb24gKGFQYXRoKSB7XG4gICAgcmV0dXJuIGFQYXRoLmNoYXJBdCgwKSA9PT0gJy8nIHx8ICEhYVBhdGgubWF0Y2godXJsUmVnZXhwKTtcbiAgfTtcblxuICAvKipcbiAgICogTWFrZSBhIHBhdGggcmVsYXRpdmUgdG8gYSBVUkwgb3IgYW5vdGhlciBwYXRoLlxuICAgKlxuICAgKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gICAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciBVUkwgdG8gYmUgbWFkZSByZWxhdGl2ZSB0byBhUm9vdC5cbiAgICovXG4gIGZ1bmN0aW9uIHJlbGF0aXZlKGFSb290LCBhUGF0aCkge1xuICAgIGlmIChhUm9vdCA9PT0gXCJcIikge1xuICAgICAgYVJvb3QgPSBcIi5cIjtcbiAgICB9XG5cbiAgICBhUm9vdCA9IGFSb290LnJlcGxhY2UoL1xcLyQvLCAnJyk7XG5cbiAgICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHBhdGggdG8gYmUgYWJvdmUgdGhlIHJvb3QuIEluIHRoaXMgY2FzZSwgc2ltcGx5XG4gICAgLy8gY2hlY2tpbmcgd2hldGhlciB0aGUgcm9vdCBpcyBhIHByZWZpeCBvZiB0aGUgcGF0aCB3b24ndCB3b3JrLiBJbnN0ZWFkLCB3ZVxuICAgIC8vIG5lZWQgdG8gcmVtb3ZlIGNvbXBvbmVudHMgZnJvbSB0aGUgcm9vdCBvbmUgYnkgb25lLCB1bnRpbCBlaXRoZXIgd2UgZmluZFxuICAgIC8vIGEgcHJlZml4IHRoYXQgZml0cywgb3Igd2UgcnVuIG91dCBvZiBjb21wb25lbnRzIHRvIHJlbW92ZS5cbiAgICB2YXIgbGV2ZWwgPSAwO1xuICAgIHdoaWxlIChhUGF0aC5pbmRleE9mKGFSb290ICsgJy8nKSAhPT0gMCkge1xuICAgICAgdmFyIGluZGV4ID0gYVJvb3QubGFzdEluZGV4T2YoXCIvXCIpO1xuICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICByZXR1cm4gYVBhdGg7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBvbmx5IHBhcnQgb2YgdGhlIHJvb3QgdGhhdCBpcyBsZWZ0IGlzIHRoZSBzY2hlbWUgKGkuZS4gaHR0cDovLyxcbiAgICAgIC8vIGZpbGU6Ly8vLCBldGMuKSwgb25lIG9yIG1vcmUgc2xhc2hlcyAoLyksIG9yIHNpbXBseSBub3RoaW5nIGF0IGFsbCwgd2VcbiAgICAgIC8vIGhhdmUgZXhoYXVzdGVkIGFsbCBjb21wb25lbnRzLCBzbyB0aGUgcGF0aCBpcyBub3QgcmVsYXRpdmUgdG8gdGhlIHJvb3QuXG4gICAgICBhUm9vdCA9IGFSb290LnNsaWNlKDAsIGluZGV4KTtcbiAgICAgIGlmIChhUm9vdC5tYXRjaCgvXihbXlxcL10rOlxcLyk/XFwvKiQvKSkge1xuICAgICAgICByZXR1cm4gYVBhdGg7XG4gICAgICB9XG5cbiAgICAgICsrbGV2ZWw7XG4gICAgfVxuXG4gICAgLy8gTWFrZSBzdXJlIHdlIGFkZCBhIFwiLi4vXCIgZm9yIGVhY2ggY29tcG9uZW50IHdlIHJlbW92ZWQgZnJvbSB0aGUgcm9vdC5cbiAgICByZXR1cm4gQXJyYXkobGV2ZWwgKyAxKS5qb2luKFwiLi4vXCIpICsgYVBhdGguc3Vic3RyKGFSb290Lmxlbmd0aCArIDEpO1xuICB9XG4gIGV4cG9ydHMucmVsYXRpdmUgPSByZWxhdGl2ZTtcblxuICAvKipcbiAgICogQmVjYXVzZSBiZWhhdmlvciBnb2VzIHdhY2t5IHdoZW4geW91IHNldCBgX19wcm90b19fYCBvbiBvYmplY3RzLCB3ZVxuICAgKiBoYXZlIHRvIHByZWZpeCBhbGwgdGhlIHN0cmluZ3MgaW4gb3VyIHNldCB3aXRoIGFuIGFyYml0cmFyeSBjaGFyYWN0ZXIuXG4gICAqXG4gICAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL3B1bGwvMzEgYW5kXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvaXNzdWVzLzMwXG4gICAqXG4gICAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICAgKi9cbiAgZnVuY3Rpb24gdG9TZXRTdHJpbmcoYVN0cikge1xuICAgIHJldHVybiAnJCcgKyBhU3RyO1xuICB9XG4gIGV4cG9ydHMudG9TZXRTdHJpbmcgPSB0b1NldFN0cmluZztcblxuICBmdW5jdGlvbiBmcm9tU2V0U3RyaW5nKGFTdHIpIHtcbiAgICByZXR1cm4gYVN0ci5zdWJzdHIoMSk7XG4gIH1cbiAgZXhwb3J0cy5mcm9tU2V0U3RyaW5nID0gZnJvbVNldFN0cmluZztcblxuICAvKipcbiAgICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aGVyZSB0aGUgb3JpZ2luYWwgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAgICpcbiAgICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICAgKiBtYXBwaW5ncyB3aXRoIHRoZSBzYW1lIG9yaWdpbmFsIHNvdXJjZS9saW5lL2NvbHVtbiwgYnV0IGRpZmZlcmVudCBnZW5lcmF0ZWRcbiAgICogbGluZSBhbmQgY29sdW1uIHRoZSBzYW1lLiBVc2VmdWwgd2hlbiBzZWFyY2hpbmcgZm9yIGEgbWFwcGluZyB3aXRoIGFcbiAgICogc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKG1hcHBpbmdBLCBtYXBwaW5nQiwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICAgIHZhciBjbXAgPSBtYXBwaW5nQS5zb3VyY2UgLSBtYXBwaW5nQi5zb3VyY2U7XG4gICAgaWYgKGNtcCAhPT0gMCkge1xuICAgICAgcmV0dXJuIGNtcDtcbiAgICB9XG5cbiAgICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gICAgaWYgKGNtcCAhPT0gMCkge1xuICAgICAgcmV0dXJuIGNtcDtcbiAgICB9XG5cbiAgICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbENvbHVtbiAtIG1hcHBpbmdCLm9yaWdpbmFsQ29sdW1uO1xuICAgIGlmIChjbXAgIT09IDAgfHwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICAgICAgcmV0dXJuIGNtcDtcbiAgICB9XG5cbiAgICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gICAgaWYgKGNtcCAhPT0gMCkge1xuICAgICAgcmV0dXJuIGNtcDtcbiAgICB9XG5cbiAgICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgICBpZiAoY21wICE9PSAwKSB7XG4gICAgICByZXR1cm4gY21wO1xuICAgIH1cblxuICAgIHJldHVybiBtYXBwaW5nQS5uYW1lIC0gbWFwcGluZ0IubmFtZTtcbiAgfVxuICBleHBvcnRzLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zID0gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnM7XG5cbiAgLyoqXG4gICAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2l0aCBkZWZsYXRlZCBzb3VyY2UgYW5kIG5hbWUgaW5kaWNlcyB3aGVyZVxuICAgKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gICAqXG4gICAqIE9wdGlvbmFsbHkgcGFzcyBpbiBgdHJ1ZWAgYXMgYG9ubHlDb21wYXJlR2VuZXJhdGVkYCB0byBjb25zaWRlciB0d29cbiAgICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uLCBidXQgZGlmZmVyZW50XG4gICAqIHNvdXJjZS9uYW1lL29yaWdpbmFsIGxpbmUgYW5kIGNvbHVtbiB0aGUgc2FtZS4gVXNlZnVsIHdoZW4gc2VhcmNoaW5nIGZvciBhXG4gICAqIG1hcHBpbmcgd2l0aCBhIHN0dWJiZWQgb3V0IG1hcHBpbmcuXG4gICAqL1xuICBmdW5jdGlvbiBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZChtYXBwaW5nQSwgbWFwcGluZ0IsIG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gICAgdmFyIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICAgIGlmIChjbXAgIT09IDApIHtcbiAgICAgIHJldHVybiBjbXA7XG4gICAgfVxuXG4gICAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICAgIGlmIChjbXAgIT09IDAgfHwgb25seUNvbXBhcmVHZW5lcmF0ZWQpIHtcbiAgICAgIHJldHVybiBjbXA7XG4gICAgfVxuXG4gICAgY21wID0gbWFwcGluZ0Euc291cmNlIC0gbWFwcGluZ0Iuc291cmNlO1xuICAgIGlmIChjbXAgIT09IDApIHtcbiAgICAgIHJldHVybiBjbXA7XG4gICAgfVxuXG4gICAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICAgIGlmIChjbXAgIT09IDApIHtcbiAgICAgIHJldHVybiBjbXA7XG4gICAgfVxuXG4gICAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgICBpZiAoY21wICE9PSAwKSB7XG4gICAgICByZXR1cm4gY21wO1xuICAgIH1cblxuICAgIHJldHVybiBtYXBwaW5nQS5uYW1lIC0gbWFwcGluZ0IubmFtZTtcbiAgfVxuICBleHBvcnRzLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkID0gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQ7XG5cbiAgZnVuY3Rpb24gc3RyY21wKGFTdHIxLCBhU3RyMikge1xuICAgIGlmIChhU3RyMSA9PT0gYVN0cjIpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGlmIChhU3RyMSA+IGFTdHIyKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGluZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBzdHJpbmdzIHdoZXJlXG4gICAqIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQikge1xuICAgIHZhciBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgICBpZiAoY21wICE9PSAwKSB7XG4gICAgICByZXR1cm4gY21wO1xuICAgIH1cblxuICAgIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgICBpZiAoY21wICE9PSAwKSB7XG4gICAgICByZXR1cm4gY21wO1xuICAgIH1cblxuICAgIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gICAgaWYgKGNtcCAhPT0gMCkge1xuICAgICAgcmV0dXJuIGNtcDtcbiAgICB9XG5cbiAgICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gICAgaWYgKGNtcCAhPT0gMCkge1xuICAgICAgcmV0dXJuIGNtcDtcbiAgICB9XG5cbiAgICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbENvbHVtbiAtIG1hcHBpbmdCLm9yaWdpbmFsQ29sdW1uO1xuICAgIGlmIChjbXAgIT09IDApIHtcbiAgICAgIHJldHVybiBjbXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbiAgfVxuICBleHBvcnRzLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkID0gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQ7XG59XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vbGliL3V0aWwuanNcbiAqKiBtb2R1bGUgaWQgPSAyXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG57XG4gIHZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbiAgdmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcbiAgdmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbiAgdmFyIE1hcHBpbmdMaXN0ID0gcmVxdWlyZSgnLi9tYXBwaW5nLWxpc3QnKS5NYXBwaW5nTGlzdDtcblxuICAvKipcbiAgICogQW4gaW5zdGFuY2Ugb2YgdGhlIFNvdXJjZU1hcEdlbmVyYXRvciByZXByZXNlbnRzIGEgc291cmNlIG1hcCB3aGljaCBpc1xuICAgKiBiZWluZyBidWlsdCBpbmNyZW1lbnRhbGx5LiBZb3UgbWF5IHBhc3MgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZ1xuICAgKiBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiAgIC0gZmlsZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICAgKiAgIC0gc291cmNlUm9vdDogQSByb290IGZvciBhbGwgcmVsYXRpdmUgVVJMcyBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gICAqL1xuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3IoYUFyZ3MpIHtcbiAgICBpZiAoIWFBcmdzKSB7XG4gICAgICBhQXJncyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLl9maWxlID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdmaWxlJywgbnVsbCk7XG4gICAgdGhpcy5fc291cmNlUm9vdCA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICAgIHRoaXMuX3NraXBWYWxpZGF0aW9uID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdza2lwVmFsaWRhdGlvbicsIGZhbHNlKTtcbiAgICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gICAgdGhpcy5fbmFtZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgICB0aGlzLl9tYXBwaW5ncyA9IG5ldyBNYXBwaW5nTGlzdCgpO1xuICAgIHRoaXMuX3NvdXJjZXNDb250ZW50cyA9IG51bGw7XG4gIH1cblxuICBTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLl92ZXJzaW9uID0gMztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBTb3VyY2VNYXBHZW5lcmF0b3IgYmFzZWQgb24gYSBTb3VyY2VNYXBDb25zdW1lclxuICAgKlxuICAgKiBAcGFyYW0gYVNvdXJjZU1hcENvbnN1bWVyIFRoZSBTb3VyY2VNYXAuXG4gICAqL1xuICBTb3VyY2VNYXBHZW5lcmF0b3IuZnJvbVNvdXJjZU1hcCA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX2Zyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcENvbnN1bWVyKSB7XG4gICAgICB2YXIgc291cmNlUm9vdCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VSb290O1xuICAgICAgdmFyIGdlbmVyYXRvciA9IG5ldyBTb3VyY2VNYXBHZW5lcmF0b3Ioe1xuICAgICAgICBmaWxlOiBhU291cmNlTWFwQ29uc3VtZXIuZmlsZSxcbiAgICAgICAgc291cmNlUm9vdDogc291cmNlUm9vdFxuICAgICAgfSk7XG4gICAgICBhU291cmNlTWFwQ29uc3VtZXIuZWFjaE1hcHBpbmcoZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICAgICAgdmFyIG5ld01hcHBpbmcgPSB7XG4gICAgICAgICAgZ2VuZXJhdGVkOiB7XG4gICAgICAgICAgICBsaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgICAgICBjb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSAhPSBudWxsKSB7XG4gICAgICAgICAgbmV3TWFwcGluZy5zb3VyY2UgPSBtYXBwaW5nLnNvdXJjZTtcbiAgICAgICAgICBpZiAoc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBuZXdNYXBwaW5nLnNvdXJjZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgbmV3TWFwcGluZy5zb3VyY2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld01hcHBpbmcub3JpZ2luYWwgPSB7XG4gICAgICAgICAgICBsaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICAgIGNvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtblxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAobWFwcGluZy5uYW1lICE9IG51bGwpIHtcbiAgICAgICAgICAgIG5ld01hcHBpbmcubmFtZSA9IG1hcHBpbmcubmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnZW5lcmF0b3IuYWRkTWFwcGluZyhuZXdNYXBwaW5nKTtcbiAgICAgIH0pO1xuICAgICAgYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlRmlsZSkge1xuICAgICAgICB2YXIgY29udGVudCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpO1xuICAgICAgICBpZiAoY29udGVudCAhPSBudWxsKSB7XG4gICAgICAgICAgZ2VuZXJhdG9yLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgYSBzaW5nbGUgbWFwcGluZyBmcm9tIG9yaWdpbmFsIHNvdXJjZSBsaW5lIGFuZCBjb2x1bW4gdG8gdGhlIGdlbmVyYXRlZFxuICAgKiBzb3VyY2UncyBsaW5lIGFuZCBjb2x1bW4gZm9yIHRoaXMgc291cmNlIG1hcCBiZWluZyBjcmVhdGVkLiBUaGUgbWFwcGluZ1xuICAgKiBvYmplY3Qgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiAgIC0gZ2VuZXJhdGVkOiBBbiBvYmplY3Qgd2l0aCB0aGUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMuXG4gICAqICAgLSBvcmlnaW5hbDogQW4gb2JqZWN0IHdpdGggdGhlIG9yaWdpbmFsIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMuXG4gICAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSAocmVsYXRpdmUgdG8gdGhlIHNvdXJjZVJvb3QpLlxuICAgKiAgIC0gbmFtZTogQW4gb3B0aW9uYWwgb3JpZ2luYWwgdG9rZW4gbmFtZSBmb3IgdGhpcyBtYXBwaW5nLlxuICAgKi9cbiAgU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hZGRNYXBwaW5nID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfYWRkTWFwcGluZyhhQXJncykge1xuICAgICAgdmFyIGdlbmVyYXRlZCA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnZ2VuZXJhdGVkJyk7XG4gICAgICB2YXIgb3JpZ2luYWwgPSB1dGlsLmdldEFyZyhhQXJncywgJ29yaWdpbmFsJywgbnVsbCk7XG4gICAgICB2YXIgc291cmNlID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnLCBudWxsKTtcbiAgICAgIHZhciBuYW1lID0gdXRpbC5nZXRBcmcoYUFyZ3MsICduYW1lJywgbnVsbCk7XG5cbiAgICAgIGlmICghdGhpcy5fc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVNYXBwaW5nKGdlbmVyYXRlZCwgb3JpZ2luYWwsIHNvdXJjZSwgbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzb3VyY2UgIT0gbnVsbCAmJiAhdGhpcy5fc291cmNlcy5oYXMoc291cmNlKSkge1xuICAgICAgICB0aGlzLl9zb3VyY2VzLmFkZChzb3VyY2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmFtZSAhPSBudWxsICYmICF0aGlzLl9uYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgICAgdGhpcy5fbmFtZXMuYWRkKG5hbWUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9tYXBwaW5ncy5hZGQoe1xuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBnZW5lcmF0ZWQuY29sdW1uLFxuICAgICAgICBvcmlnaW5hbExpbmU6IG9yaWdpbmFsICE9IG51bGwgJiYgb3JpZ2luYWwubGluZSxcbiAgICAgICAgb3JpZ2luYWxDb2x1bW46IG9yaWdpbmFsICE9IG51bGwgJiYgb3JpZ2luYWwuY29sdW1uLFxuICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgbmFtZTogbmFtZVxuICAgICAgfSk7XG4gICAgfTtcblxuICAvKipcbiAgICogU2V0IHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBzb3VyY2UgZmlsZS5cbiAgICovXG4gIFNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuc2V0U291cmNlQ29udGVudCA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3NldFNvdXJjZUNvbnRlbnQoYVNvdXJjZUZpbGUsIGFTb3VyY2VDb250ZW50KSB7XG4gICAgICB2YXIgc291cmNlID0gYVNvdXJjZUZpbGU7XG4gICAgICBpZiAodGhpcy5fc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgIHNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5fc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFTb3VyY2VDb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgLy8gQWRkIHRoZSBzb3VyY2UgY29udGVudCB0byB0aGUgX3NvdXJjZXNDb250ZW50cyBtYXAuXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBfc291cmNlc0NvbnRlbnRzIG1hcCBpZiB0aGUgcHJvcGVydHkgaXMgbnVsbC5cbiAgICAgICAgaWYgKCF0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgICAgICB0aGlzLl9zb3VyY2VzQ29udGVudHMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zb3VyY2VzQ29udGVudHNbdXRpbC50b1NldFN0cmluZyhzb3VyY2UpXSA9IGFTb3VyY2VDb250ZW50O1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBzb3VyY2UgZmlsZSBmcm9tIHRoZSBfc291cmNlc0NvbnRlbnRzIG1hcC5cbiAgICAgICAgLy8gSWYgdGhlIF9zb3VyY2VzQ29udGVudHMgbWFwIGlzIGVtcHR5LCBzZXQgdGhlIHByb3BlcnR5IHRvIG51bGwuXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zb3VyY2VzQ29udGVudHNbdXRpbC50b1NldFN0cmluZyhzb3VyY2UpXTtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX3NvdXJjZXNDb250ZW50cykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5fc291cmNlc0NvbnRlbnRzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIG1hcHBpbmdzIG9mIGEgc3ViLXNvdXJjZS1tYXAgZm9yIGEgc3BlY2lmaWMgc291cmNlIGZpbGUgdG8gdGhlXG4gICAqIHNvdXJjZSBtYXAgYmVpbmcgZ2VuZXJhdGVkLiBFYWNoIG1hcHBpbmcgdG8gdGhlIHN1cHBsaWVkIHNvdXJjZSBmaWxlIGlzXG4gICAqIHJld3JpdHRlbiB1c2luZyB0aGUgc3VwcGxpZWQgc291cmNlIG1hcC4gTm90ZTogVGhlIHJlc29sdXRpb24gZm9yIHRoZVxuICAgKiByZXN1bHRpbmcgbWFwcGluZ3MgaXMgdGhlIG1pbmltaXVtIG9mIHRoaXMgbWFwIGFuZCB0aGUgc3VwcGxpZWQgbWFwLlxuICAgKlxuICAgKiBAcGFyYW0gYVNvdXJjZU1hcENvbnN1bWVyIFRoZSBzb3VyY2UgbWFwIHRvIGJlIGFwcGxpZWQuXG4gICAqIEBwYXJhbSBhU291cmNlRmlsZSBPcHRpb25hbC4gVGhlIGZpbGVuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZS5cbiAgICogICAgICAgIElmIG9taXR0ZWQsIFNvdXJjZU1hcENvbnN1bWVyJ3MgZmlsZSBwcm9wZXJ0eSB3aWxsIGJlIHVzZWQuXG4gICAqIEBwYXJhbSBhU291cmNlTWFwUGF0aCBPcHRpb25hbC4gVGhlIGRpcm5hbWUgb2YgdGhlIHBhdGggdG8gdGhlIHNvdXJjZSBtYXBcbiAgICogICAgICAgIHRvIGJlIGFwcGxpZWQuIElmIHJlbGF0aXZlLCBpdCBpcyByZWxhdGl2ZSB0byB0aGUgU291cmNlTWFwQ29uc3VtZXIuXG4gICAqICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyBuZWVkZWQgd2hlbiB0aGUgdHdvIHNvdXJjZSBtYXBzIGFyZW4ndCBpbiB0aGUgc2FtZVxuICAgKiAgICAgICAgZGlyZWN0b3J5LCBhbmQgdGhlIHNvdXJjZSBtYXAgdG8gYmUgYXBwbGllZCBjb250YWlucyByZWxhdGl2ZSBzb3VyY2VcbiAgICogICAgICAgIHBhdGhzLiBJZiBzbywgdGhvc2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIG5lZWQgdG8gYmUgcmV3cml0dGVuXG4gICAqICAgICAgICByZWxhdGl2ZSB0byB0aGUgU291cmNlTWFwR2VuZXJhdG9yLlxuICAgKi9cbiAgU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hcHBseVNvdXJjZU1hcCA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX2FwcGx5U291cmNlTWFwKGFTb3VyY2VNYXBDb25zdW1lciwgYVNvdXJjZUZpbGUsIGFTb3VyY2VNYXBQYXRoKSB7XG4gICAgICB2YXIgc291cmNlRmlsZSA9IGFTb3VyY2VGaWxlO1xuICAgICAgLy8gSWYgYVNvdXJjZUZpbGUgaXMgb21pdHRlZCwgd2Ugd2lsbCB1c2UgdGhlIGZpbGUgcHJvcGVydHkgb2YgdGhlIFNvdXJjZU1hcFxuICAgICAgaWYgKGFTb3VyY2VGaWxlID09IG51bGwpIHtcbiAgICAgICAgaWYgKGFTb3VyY2VNYXBDb25zdW1lci5maWxlID09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hcHBseVNvdXJjZU1hcCByZXF1aXJlcyBlaXRoZXIgYW4gZXhwbGljaXQgc291cmNlIGZpbGUsICcgK1xuICAgICAgICAgICAgJ29yIHRoZSBzb3VyY2UgbWFwXFwncyBcImZpbGVcIiBwcm9wZXJ0eS4gQm90aCB3ZXJlIG9taXR0ZWQuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgc291cmNlRmlsZSA9IGFTb3VyY2VNYXBDb25zdW1lci5maWxlO1xuICAgICAgfVxuICAgICAgdmFyIHNvdXJjZVJvb3QgPSB0aGlzLl9zb3VyY2VSb290O1xuICAgICAgLy8gTWFrZSBcInNvdXJjZUZpbGVcIiByZWxhdGl2ZSBpZiBhbiBhYnNvbHV0ZSBVcmwgaXMgcGFzc2VkLlxuICAgICAgaWYgKHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2VGaWxlID0gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBzb3VyY2VGaWxlKTtcbiAgICAgIH1cbiAgICAgIC8vIEFwcGx5aW5nIHRoZSBTb3VyY2VNYXAgY2FuIGFkZCBhbmQgcmVtb3ZlIGl0ZW1zIGZyb20gdGhlIHNvdXJjZXMgYW5kXG4gICAgICAvLyB0aGUgbmFtZXMgYXJyYXkuXG4gICAgICB2YXIgbmV3U291cmNlcyA9IG5ldyBBcnJheVNldCgpO1xuICAgICAgdmFyIG5ld05hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgICAgIC8vIEZpbmQgbWFwcGluZ3MgZm9yIHRoZSBcInNvdXJjZUZpbGVcIlxuICAgICAgdGhpcy5fbWFwcGluZ3MudW5zb3J0ZWRGb3JFYWNoKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSA9PT0gc291cmNlRmlsZSAmJiBtYXBwaW5nLm9yaWdpbmFsTGluZSAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgaXQgY2FuIGJlIG1hcHBlZCBieSB0aGUgc291cmNlIG1hcCwgdGhlbiB1cGRhdGUgdGhlIG1hcHBpbmcuXG4gICAgICAgICAgdmFyIG9yaWdpbmFsID0gYVNvdXJjZU1hcENvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgICAgICAgbGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgICBjb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW5cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAob3JpZ2luYWwuc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIENvcHkgbWFwcGluZ1xuICAgICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSBvcmlnaW5hbC5zb3VyY2U7XG4gICAgICAgICAgICBpZiAoYVNvdXJjZU1hcFBhdGggIT0gbnVsbCkge1xuICAgICAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IHV0aWwuam9pbihhU291cmNlTWFwUGF0aCwgbWFwcGluZy5zb3VyY2UpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBtYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSA9IG9yaWdpbmFsLmxpbmU7XG4gICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gb3JpZ2luYWwuY29sdW1uO1xuICAgICAgICAgICAgaWYgKG9yaWdpbmFsLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBtYXBwaW5nLm5hbWUgPSBvcmlnaW5hbC5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzb3VyY2UgPSBtYXBwaW5nLnNvdXJjZTtcbiAgICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmICFuZXdTb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICAgICAgbmV3U291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBuYW1lID0gbWFwcGluZy5uYW1lO1xuICAgICAgICBpZiAobmFtZSAhPSBudWxsICYmICFuZXdOYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgICAgICBuZXdOYW1lcy5hZGQobmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgfSwgdGhpcyk7XG4gICAgICB0aGlzLl9zb3VyY2VzID0gbmV3U291cmNlcztcbiAgICAgIHRoaXMuX25hbWVzID0gbmV3TmFtZXM7XG5cbiAgICAgIC8vIENvcHkgc291cmNlc0NvbnRlbnRzIG9mIGFwcGxpZWQgbWFwLlxuICAgICAgYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlRmlsZSkge1xuICAgICAgICB2YXIgY29udGVudCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpO1xuICAgICAgICBpZiAoY29udGVudCAhPSBudWxsKSB7XG4gICAgICAgICAgaWYgKGFTb3VyY2VNYXBQYXRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNvdXJjZUZpbGUgPSB1dGlsLmpvaW4oYVNvdXJjZU1hcFBhdGgsIHNvdXJjZUZpbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2VGaWxlID0gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBzb3VyY2VGaWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZXRTb3VyY2VDb250ZW50KHNvdXJjZUZpbGUsIGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICB9LCB0aGlzKTtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBBIG1hcHBpbmcgY2FuIGhhdmUgb25lIG9mIHRoZSB0aHJlZSBsZXZlbHMgb2YgZGF0YTpcbiAgICpcbiAgICogICAxLiBKdXN0IHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24uXG4gICAqICAgMi4gVGhlIEdlbmVyYXRlZCBwb3NpdGlvbiwgb3JpZ2luYWwgcG9zaXRpb24sIGFuZCBvcmlnaW5hbCBzb3VyY2UuXG4gICAqICAgMy4gR2VuZXJhdGVkIGFuZCBvcmlnaW5hbCBwb3NpdGlvbiwgb3JpZ2luYWwgc291cmNlLCBhcyB3ZWxsIGFzIGEgbmFtZVxuICAgKiAgICAgIHRva2VuLlxuICAgKlxuICAgKiBUbyBtYWludGFpbiBjb25zaXN0ZW5jeSwgd2UgdmFsaWRhdGUgdGhhdCBhbnkgbmV3IG1hcHBpbmcgYmVpbmcgYWRkZWQgZmFsbHNcbiAgICogaW4gdG8gb25lIG9mIHRoZXNlIGNhdGVnb3JpZXMuXG4gICAqL1xuICBTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLl92YWxpZGF0ZU1hcHBpbmcgPVxuICAgIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl92YWxpZGF0ZU1hcHBpbmcoYUdlbmVyYXRlZCwgYU9yaWdpbmFsLCBhU291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU5hbWUpIHtcbiAgICAgIGlmIChhR2VuZXJhdGVkICYmICdsaW5lJyBpbiBhR2VuZXJhdGVkICYmICdjb2x1bW4nIGluIGFHZW5lcmF0ZWRcbiAgICAgICAgICAmJiBhR2VuZXJhdGVkLmxpbmUgPiAwICYmIGFHZW5lcmF0ZWQuY29sdW1uID49IDBcbiAgICAgICAgICAmJiAhYU9yaWdpbmFsICYmICFhU291cmNlICYmICFhTmFtZSkge1xuICAgICAgICAvLyBDYXNlIDEuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGFHZW5lcmF0ZWQgJiYgJ2xpbmUnIGluIGFHZW5lcmF0ZWQgJiYgJ2NvbHVtbicgaW4gYUdlbmVyYXRlZFxuICAgICAgICAgICAgICAgJiYgYU9yaWdpbmFsICYmICdsaW5lJyBpbiBhT3JpZ2luYWwgJiYgJ2NvbHVtbicgaW4gYU9yaWdpbmFsXG4gICAgICAgICAgICAgICAmJiBhR2VuZXJhdGVkLmxpbmUgPiAwICYmIGFHZW5lcmF0ZWQuY29sdW1uID49IDBcbiAgICAgICAgICAgICAgICYmIGFPcmlnaW5hbC5saW5lID4gMCAmJiBhT3JpZ2luYWwuY29sdW1uID49IDBcbiAgICAgICAgICAgICAgICYmIGFTb3VyY2UpIHtcbiAgICAgICAgLy8gQ2FzZXMgMiBhbmQgMy5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtYXBwaW5nOiAnICsgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGdlbmVyYXRlZDogYUdlbmVyYXRlZCxcbiAgICAgICAgICBzb3VyY2U6IGFTb3VyY2UsXG4gICAgICAgICAgb3JpZ2luYWw6IGFPcmlnaW5hbCxcbiAgICAgICAgICBuYW1lOiBhTmFtZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfTtcblxuICAvKipcbiAgICogU2VyaWFsaXplIHRoZSBhY2N1bXVsYXRlZCBtYXBwaW5ncyBpbiB0byB0aGUgc3RyZWFtIG9mIGJhc2UgNjQgVkxRc1xuICAgKiBzcGVjaWZpZWQgYnkgdGhlIHNvdXJjZSBtYXAgZm9ybWF0LlxuICAgKi9cbiAgU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fc2VyaWFsaXplTWFwcGluZ3MgPVxuICAgIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9zZXJpYWxpemVNYXBwaW5ncygpIHtcbiAgICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICB2YXIgcHJldmlvdXNHZW5lcmF0ZWRMaW5lID0gMTtcbiAgICAgIHZhciBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gMDtcbiAgICAgIHZhciBwcmV2aW91c09yaWdpbmFsTGluZSA9IDA7XG4gICAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICAgIHZhciBwcmV2aW91c1NvdXJjZSA9IDA7XG4gICAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgICB2YXIgbWFwcGluZztcbiAgICAgIHZhciBuYW1lSWR4O1xuICAgICAgdmFyIHNvdXJjZUlkeDtcblxuICAgICAgdmFyIG1hcHBpbmdzID0gdGhpcy5fbWFwcGluZ3MudG9BcnJheSgpO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG1hcHBpbmdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIG1hcHBpbmcgPSBtYXBwaW5nc1tpXTtcblxuICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lICE9PSBwcmV2aW91c0dlbmVyYXRlZExpbmUpIHtcbiAgICAgICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICAgICAgd2hpbGUgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSAhPT0gcHJldmlvdXNHZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJzsnO1xuICAgICAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgaWYgKCF1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmcsIG1hcHBpbmdzW2kgLSAxXSkpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQgKz0gJywnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdCArPSBiYXNlNjRWTFEuZW5jb2RlKG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuXG4gICAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSAhPSBudWxsKSB7XG4gICAgICAgICAgc291cmNlSWR4ID0gdGhpcy5fc291cmNlcy5pbmRleE9mKG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgICByZXN1bHQgKz0gYmFzZTY0VkxRLmVuY29kZShzb3VyY2VJZHggLSBwcmV2aW91c1NvdXJjZSk7XG4gICAgICAgICAgcHJldmlvdXNTb3VyY2UgPSBzb3VyY2VJZHg7XG5cbiAgICAgICAgICAvLyBsaW5lcyBhcmUgc3RvcmVkIDAtYmFzZWQgaW4gU291cmNlTWFwIHNwZWMgdmVyc2lvbiAzXG4gICAgICAgICAgcmVzdWx0ICs9IGJhc2U2NFZMUS5lbmNvZGUobWFwcGluZy5vcmlnaW5hbExpbmUgLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c09yaWdpbmFsTGluZSk7XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbExpbmUgPSBtYXBwaW5nLm9yaWdpbmFsTGluZSAtIDE7XG5cbiAgICAgICAgICByZXN1bHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLm9yaWdpbmFsQ29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c09yaWdpbmFsQ29sdW1uKTtcbiAgICAgICAgICBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICAgIGlmIChtYXBwaW5nLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgbmFtZUlkeCA9IHRoaXMuX25hbWVzLmluZGV4T2YobWFwcGluZy5uYW1lKTtcbiAgICAgICAgICAgIHJlc3VsdCArPSBiYXNlNjRWTFEuZW5jb2RlKG5hbWVJZHggLSBwcmV2aW91c05hbWUpO1xuICAgICAgICAgICAgcHJldmlvdXNOYW1lID0gbmFtZUlkeDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gIFNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQgPVxuICAgIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KGFTb3VyY2VzLCBhU291cmNlUm9vdCkge1xuICAgICAgcmV0dXJuIGFTb3VyY2VzLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIGlmICghdGhpcy5fc291cmNlc0NvbnRlbnRzKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFTb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKGFTb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXkgPSB1dGlsLnRvU2V0U3RyaW5nKHNvdXJjZSk7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fc291cmNlc0NvbnRlbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSlcbiAgICAgICAgICA/IHRoaXMuX3NvdXJjZXNDb250ZW50c1trZXldXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfTtcblxuICAvKipcbiAgICogRXh0ZXJuYWxpemUgdGhlIHNvdXJjZSBtYXAuXG4gICAqL1xuICBTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLnRvSlNPTiA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3RvSlNPTigpIHtcbiAgICAgIHZhciBtYXAgPSB7XG4gICAgICAgIHZlcnNpb246IHRoaXMuX3ZlcnNpb24sXG4gICAgICAgIHNvdXJjZXM6IHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgICBuYW1lczogdGhpcy5fbmFtZXMudG9BcnJheSgpLFxuICAgICAgICBtYXBwaW5nczogdGhpcy5fc2VyaWFsaXplTWFwcGluZ3MoKVxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLl9maWxlICE9IG51bGwpIHtcbiAgICAgICAgbWFwLmZpbGUgPSB0aGlzLl9maWxlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX3NvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBtYXAuc291cmNlUm9vdCA9IHRoaXMuX3NvdXJjZVJvb3Q7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fc291cmNlc0NvbnRlbnRzKSB7XG4gICAgICAgIG1hcC5zb3VyY2VzQ29udGVudCA9IHRoaXMuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQobWFwLnNvdXJjZXMsIG1hcC5zb3VyY2VSb290KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1hcDtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIHNvdXJjZSBtYXAgYmVpbmcgZ2VuZXJhdGVkIHRvIGEgc3RyaW5nLlxuICAgKi9cbiAgU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS50b1N0cmluZyA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3RvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9KU09OKCkpO1xuICAgIH07XG5cbiAgZXhwb3J0cy5Tb3VyY2VNYXBHZW5lcmF0b3IgPSBTb3VyY2VNYXBHZW5lcmF0b3I7XG59XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vbGliL3NvdXJjZS1tYXAtZ2VuZXJhdG9yLmpzXG4gKiogbW9kdWxlIGlkID0gM1xuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqXG4gKiBCYXNlZCBvbiB0aGUgQmFzZSA2NCBWTFEgaW1wbGVtZW50YXRpb24gaW4gQ2xvc3VyZSBDb21waWxlcjpcbiAqIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2xvc3VyZS1jb21waWxlci9zb3VyY2UvYnJvd3NlL3RydW5rL3NyYy9jb20vZ29vZ2xlL2RlYnVnZ2luZy9zb3VyY2VtYXAvQmFzZTY0VkxRLmphdmFcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMSBUaGUgQ2xvc3VyZSBDb21waWxlciBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlXG4gKiBtZXQ6XG4gKlxuICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmVcbiAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXG4gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcbiAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZFxuICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcbiAqIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxuICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcbiAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLFxuICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxuICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXG4gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTllcbiAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxuICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xue1xuICB2YXIgYmFzZTY0ID0gcmVxdWlyZSgnLi9iYXNlNjQnKTtcblxuICAvLyBBIHNpbmdsZSBiYXNlIDY0IGRpZ2l0IGNhbiBjb250YWluIDYgYml0cyBvZiBkYXRhLiBGb3IgdGhlIGJhc2UgNjQgdmFyaWFibGVcbiAgLy8gbGVuZ3RoIHF1YW50aXRpZXMgd2UgdXNlIGluIHRoZSBzb3VyY2UgbWFwIHNwZWMsIHRoZSBmaXJzdCBiaXQgaXMgdGhlIHNpZ24sXG4gIC8vIHRoZSBuZXh0IGZvdXIgYml0cyBhcmUgdGhlIGFjdHVhbCB2YWx1ZSwgYW5kIHRoZSA2dGggYml0IGlzIHRoZVxuICAvLyBjb250aW51YXRpb24gYml0LiBUaGUgY29udGludWF0aW9uIGJpdCB0ZWxscyB1cyB3aGV0aGVyIHRoZXJlIGFyZSBtb3JlXG4gIC8vIGRpZ2l0cyBpbiB0aGlzIHZhbHVlIGZvbGxvd2luZyB0aGlzIGRpZ2l0LlxuICAvL1xuICAvLyAgIENvbnRpbnVhdGlvblxuICAvLyAgIHwgICAgU2lnblxuICAvLyAgIHwgICAgfFxuICAvLyAgIFYgICAgVlxuICAvLyAgIDEwMTAxMVxuXG4gIHZhciBWTFFfQkFTRV9TSElGVCA9IDU7XG5cbiAgLy8gYmluYXJ5OiAxMDAwMDBcbiAgdmFyIFZMUV9CQVNFID0gMSA8PCBWTFFfQkFTRV9TSElGVDtcblxuICAvLyBiaW5hcnk6IDAxMTExMVxuICB2YXIgVkxRX0JBU0VfTUFTSyA9IFZMUV9CQVNFIC0gMTtcblxuICAvLyBiaW5hcnk6IDEwMDAwMFxuICB2YXIgVkxRX0NPTlRJTlVBVElPTl9CSVQgPSBWTFFfQkFTRTtcblxuICAvKipcbiAgICogQ29udmVydHMgZnJvbSBhIHR3by1jb21wbGVtZW50IHZhbHVlIHRvIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gICAqIHBsYWNlZCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0LiAgRm9yIGV4YW1wbGUsIGFzIGRlY2ltYWxzOlxuICAgKiAgIDEgYmVjb21lcyAyICgxMCBiaW5hcnkpLCAtMSBiZWNvbWVzIDMgKDExIGJpbmFyeSlcbiAgICogICAyIGJlY29tZXMgNCAoMTAwIGJpbmFyeSksIC0yIGJlY29tZXMgNSAoMTAxIGJpbmFyeSlcbiAgICovXG4gIGZ1bmN0aW9uIHRvVkxRU2lnbmVkKGFWYWx1ZSkge1xuICAgIHJldHVybiBhVmFsdWUgPCAwXG4gICAgICA/ICgoLWFWYWx1ZSkgPDwgMSkgKyAxXG4gICAgICA6IChhVmFsdWUgPDwgMSkgKyAwO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRvIGEgdHdvLWNvbXBsZW1lbnQgdmFsdWUgZnJvbSBhIHZhbHVlIHdoZXJlIHRoZSBzaWduIGJpdCBpc1xuICAgKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAgICogICAyICgxMCBiaW5hcnkpIGJlY29tZXMgMSwgMyAoMTEgYmluYXJ5KSBiZWNvbWVzIC0xXG4gICAqICAgNCAoMTAwIGJpbmFyeSkgYmVjb21lcyAyLCA1ICgxMDEgYmluYXJ5KSBiZWNvbWVzIC0yXG4gICAqL1xuICBmdW5jdGlvbiBmcm9tVkxRU2lnbmVkKGFWYWx1ZSkge1xuICAgIHZhciBpc05lZ2F0aXZlID0gKGFWYWx1ZSAmIDEpID09PSAxO1xuICAgIHZhciBzaGlmdGVkID0gYVZhbHVlID4+IDE7XG4gICAgcmV0dXJuIGlzTmVnYXRpdmVcbiAgICAgID8gLXNoaWZ0ZWRcbiAgICAgIDogc2hpZnRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBiYXNlIDY0IFZMUSBlbmNvZGVkIHZhbHVlLlxuICAgKi9cbiAgZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZW5jb2RlKGFWYWx1ZSkge1xuICAgIHZhciBlbmNvZGVkID0gXCJcIjtcbiAgICB2YXIgZGlnaXQ7XG5cbiAgICB2YXIgdmxxID0gdG9WTFFTaWduZWQoYVZhbHVlKTtcblxuICAgIGRvIHtcbiAgICAgIGRpZ2l0ID0gdmxxICYgVkxRX0JBU0VfTUFTSztcbiAgICAgIHZscSA+Pj49IFZMUV9CQVNFX1NISUZUO1xuICAgICAgaWYgKHZscSA+IDApIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIHN0aWxsIG1vcmUgZGlnaXRzIGluIHRoaXMgdmFsdWUsIHNvIHdlIG11c3QgbWFrZSBzdXJlIHRoZVxuICAgICAgICAvLyBjb250aW51YXRpb24gYml0IGlzIG1hcmtlZC5cbiAgICAgICAgZGlnaXQgfD0gVkxRX0NPTlRJTlVBVElPTl9CSVQ7XG4gICAgICB9XG4gICAgICBlbmNvZGVkICs9IGJhc2U2NC5lbmNvZGUoZGlnaXQpO1xuICAgIH0gd2hpbGUgKHZscSA+IDApO1xuXG4gICAgcmV0dXJuIGVuY29kZWQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIERlY29kZXMgdGhlIG5leHQgYmFzZSA2NCBWTFEgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gc3RyaW5nIGFuZCByZXR1cm5zIHRoZVxuICAgKiB2YWx1ZSBhbmQgdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyB2aWEgdGhlIG91dCBwYXJhbWV0ZXIuXG4gICAqL1xuICBleHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9kZWNvZGUoYVN0ciwgYUluZGV4LCBhT3V0UGFyYW0pIHtcbiAgICB2YXIgc3RyTGVuID0gYVN0ci5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IDA7XG4gICAgdmFyIHNoaWZ0ID0gMDtcbiAgICB2YXIgY29udGludWF0aW9uLCBkaWdpdDtcblxuICAgIGRvIHtcbiAgICAgIGlmIChhSW5kZXggPj0gc3RyTGVuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG1vcmUgZGlnaXRzIGluIGJhc2UgNjQgVkxRIHZhbHVlLlwiKTtcbiAgICAgIH1cblxuICAgICAgZGlnaXQgPSBiYXNlNjQuZGVjb2RlKGFTdHIuY2hhckNvZGVBdChhSW5kZXgrKykpO1xuICAgICAgaWYgKGRpZ2l0ID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBkaWdpdDogXCIgKyBhU3RyLmNoYXJBdChhSW5kZXggLSAxKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVhdGlvbiA9ICEhKGRpZ2l0ICYgVkxRX0NPTlRJTlVBVElPTl9CSVQpO1xuICAgICAgZGlnaXQgJj0gVkxRX0JBU0VfTUFTSztcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCArIChkaWdpdCA8PCBzaGlmdCk7XG4gICAgICBzaGlmdCArPSBWTFFfQkFTRV9TSElGVDtcbiAgICB9IHdoaWxlIChjb250aW51YXRpb24pO1xuXG4gICAgYU91dFBhcmFtLnZhbHVlID0gZnJvbVZMUVNpZ25lZChyZXN1bHQpO1xuICAgIGFPdXRQYXJhbS5yZXN0ID0gYUluZGV4O1xuICB9O1xufVxuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2xpYi9iYXNlNjQtdmxxLmpzXG4gKiogbW9kdWxlIGlkID0gNFxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xue1xuICB2YXIgaW50VG9DaGFyTWFwID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLnNwbGl0KCcnKTtcblxuICAvKipcbiAgICogRW5jb2RlIGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIG9mIDAgdG8gNjMgdG8gYSBzaW5nbGUgYmFzZSA2NCBkaWdpdC5cbiAgICovXG4gIGV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gKG51bWJlcikge1xuICAgIGlmICgwIDw9IG51bWJlciAmJiBudW1iZXIgPCBpbnRUb0NoYXJNYXAubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gaW50VG9DaGFyTWFwW251bWJlcl07XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNdXN0IGJlIGJldHdlZW4gMCBhbmQgNjM6IFwiICsgbnVtYmVyKTtcbiAgfTtcblxuICAvKipcbiAgICogRGVjb2RlIGEgc2luZ2xlIGJhc2UgNjQgY2hhcmFjdGVyIGNvZGUgZGlnaXQgdG8gYW4gaW50ZWdlci4gUmV0dXJucyAtMSBvblxuICAgKiBmYWlsdXJlLlxuICAgKi9cbiAgZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiAoY2hhckNvZGUpIHtcbiAgICB2YXIgYmlnQSA9IDY1OyAgICAgLy8gJ0EnXG4gICAgdmFyIGJpZ1ogPSA5MDsgICAgIC8vICdaJ1xuXG4gICAgdmFyIGxpdHRsZUEgPSA5NzsgIC8vICdhJ1xuICAgIHZhciBsaXR0bGVaID0gMTIyOyAvLyAneidcblxuICAgIHZhciB6ZXJvID0gNDg7ICAgICAvLyAnMCdcbiAgICB2YXIgbmluZSA9IDU3OyAgICAgLy8gJzknXG5cbiAgICB2YXIgcGx1cyA9IDQzOyAgICAgLy8gJysnXG4gICAgdmFyIHNsYXNoID0gNDc7ICAgIC8vICcvJ1xuXG4gICAgdmFyIGxpdHRsZU9mZnNldCA9IDI2O1xuICAgIHZhciBudW1iZXJPZmZzZXQgPSA1MjtcblxuICAgIC8vIDAgLSAyNTogQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcbiAgICBpZiAoYmlnQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBiaWdaKSB7XG4gICAgICByZXR1cm4gKGNoYXJDb2RlIC0gYmlnQSk7XG4gICAgfVxuXG4gICAgLy8gMjYgLSA1MTogYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcbiAgICBpZiAobGl0dGxlQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBsaXR0bGVaKSB7XG4gICAgICByZXR1cm4gKGNoYXJDb2RlIC0gbGl0dGxlQSArIGxpdHRsZU9mZnNldCk7XG4gICAgfVxuXG4gICAgLy8gNTIgLSA2MTogMDEyMzQ1Njc4OVxuICAgIGlmICh6ZXJvIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IG5pbmUpIHtcbiAgICAgIHJldHVybiAoY2hhckNvZGUgLSB6ZXJvICsgbnVtYmVyT2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyA2MjogK1xuICAgIGlmIChjaGFyQ29kZSA9PSBwbHVzKSB7XG4gICAgICByZXR1cm4gNjI7XG4gICAgfVxuXG4gICAgLy8gNjM6IC9cbiAgICBpZiAoY2hhckNvZGUgPT0gc2xhc2gpIHtcbiAgICAgIHJldHVybiA2MztcbiAgICB9XG5cbiAgICAvLyBJbnZhbGlkIGJhc2U2NCBkaWdpdC5cbiAgICByZXR1cm4gLTE7XG4gIH07XG59XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vbGliL2Jhc2U2NC5qc1xuICoqIG1vZHVsZSBpZCA9IDVcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cbntcbiAgdmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuICAvKipcbiAgICogQSBkYXRhIHN0cnVjdHVyZSB3aGljaCBpcyBhIGNvbWJpbmF0aW9uIG9mIGFuIGFycmF5IGFuZCBhIHNldC4gQWRkaW5nIGEgbmV3XG4gICAqIG1lbWJlciBpcyBPKDEpLCB0ZXN0aW5nIGZvciBtZW1iZXJzaGlwIGlzIE8oMSksIGFuZCBmaW5kaW5nIHRoZSBpbmRleCBvZiBhblxuICAgKiBlbGVtZW50IGlzIE8oMSkuIFJlbW92aW5nIGVsZW1lbnRzIGZyb20gdGhlIHNldCBpcyBub3Qgc3VwcG9ydGVkLiBPbmx5XG4gICAqIHN0cmluZ3MgYXJlIHN1cHBvcnRlZCBmb3IgbWVtYmVyc2hpcC5cbiAgICovXG4gIGZ1bmN0aW9uIEFycmF5U2V0KCkge1xuICAgIHRoaXMuX2FycmF5ID0gW107XG4gICAgdGhpcy5fc2V0ID0ge307XG4gIH1cblxuICAvKipcbiAgICogU3RhdGljIG1ldGhvZCBmb3IgY3JlYXRpbmcgQXJyYXlTZXQgaW5zdGFuY2VzIGZyb20gYW4gZXhpc3RpbmcgYXJyYXkuXG4gICAqL1xuICBBcnJheVNldC5mcm9tQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF9mcm9tQXJyYXkoYUFycmF5LCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgdmFyIHNldCA9IG5ldyBBcnJheVNldCgpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhQXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHNldC5hZGQoYUFycmF5W2ldLCBhQWxsb3dEdXBsaWNhdGVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHNldDtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJuIGhvdyBtYW55IHVuaXF1ZSBpdGVtcyBhcmUgaW4gdGhpcyBBcnJheVNldC4gSWYgZHVwbGljYXRlcyBoYXZlIGJlZW5cbiAgICogYWRkZWQsIHRoYW4gdGhvc2UgZG8gbm90IGNvdW50IHRvd2FyZHMgdGhlIHNpemUuXG4gICAqXG4gICAqIEByZXR1cm5zIE51bWJlclxuICAgKi9cbiAgQXJyYXlTZXQucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiBBcnJheVNldF9zaXplKCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLl9zZXQpLmxlbmd0aDtcbiAgfTtcblxuICAvKipcbiAgICogQWRkIHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhpcyBzZXQuXG4gICAqXG4gICAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICAgKi9cbiAgQXJyYXlTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIEFycmF5U2V0X2FkZChhU3RyLCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICAgIHZhciBpc0R1cGxpY2F0ZSA9IHRoaXMuX3NldC5oYXNPd25Qcm9wZXJ0eShzU3RyKTtcbiAgICB2YXIgaWR4ID0gdGhpcy5fYXJyYXkubGVuZ3RoO1xuICAgIGlmICghaXNEdXBsaWNhdGUgfHwgYUFsbG93RHVwbGljYXRlcykge1xuICAgICAgdGhpcy5fYXJyYXkucHVzaChhU3RyKTtcbiAgICB9XG4gICAgaWYgKCFpc0R1cGxpY2F0ZSkge1xuICAgICAgdGhpcy5fc2V0W3NTdHJdID0gaWR4O1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogSXMgdGhlIGdpdmVuIHN0cmluZyBhIG1lbWJlciBvZiB0aGlzIHNldD9cbiAgICpcbiAgICogQHBhcmFtIFN0cmluZyBhU3RyXG4gICAqL1xuICBBcnJheVNldC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gQXJyYXlTZXRfaGFzKGFTdHIpIHtcbiAgICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gICAgcmV0dXJuIHRoaXMuX3NldC5oYXNPd25Qcm9wZXJ0eShzU3RyKTtcbiAgfTtcblxuICAvKipcbiAgICogV2hhdCBpcyB0aGUgaW5kZXggb2YgdGhlIGdpdmVuIHN0cmluZyBpbiB0aGUgYXJyYXk/XG4gICAqXG4gICAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICAgKi9cbiAgQXJyYXlTZXQucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBBcnJheVNldF9pbmRleE9mKGFTdHIpIHtcbiAgICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gICAgaWYgKHRoaXMuX3NldC5oYXNPd25Qcm9wZXJ0eShzU3RyKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NldFtzU3RyXTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU3RyICsgJ1wiIGlzIG5vdCBpbiB0aGUgc2V0LicpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBXaGF0IGlzIHRoZSBlbGVtZW50IGF0IHRoZSBnaXZlbiBpbmRleD9cbiAgICpcbiAgICogQHBhcmFtIE51bWJlciBhSWR4XG4gICAqL1xuICBBcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBBcnJheVNldF9hdChhSWR4KSB7XG4gICAgaWYgKGFJZHggPj0gMCAmJiBhSWR4IDwgdGhpcy5fYXJyYXkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYXJyYXlbYUlkeF07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignTm8gZWxlbWVudCBpbmRleGVkIGJ5ICcgKyBhSWR4KTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXJyYXkgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzZXQgKHdoaWNoIGhhcyB0aGUgcHJvcGVyIGluZGljZXNcbiAgICogaW5kaWNhdGVkIGJ5IGluZGV4T2YpLiBOb3RlIHRoYXQgdGhpcyBpcyBhIGNvcHkgb2YgdGhlIGludGVybmFsIGFycmF5IHVzZWRcbiAgICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1lc3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS5cbiAgICovXG4gIEFycmF5U2V0LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfdG9BcnJheSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKTtcbiAgfTtcblxuICBleHBvcnRzLkFycmF5U2V0ID0gQXJyYXlTZXQ7XG59XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vbGliL2FycmF5LXNldC5qc1xuICoqIG1vZHVsZSBpZCA9IDZcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxNCBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cbntcbiAgdmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgbWFwcGluZ0IgaXMgYWZ0ZXIgbWFwcGluZ0Egd2l0aCByZXNwZWN0IHRvIGdlbmVyYXRlZFxuICAgKiBwb3NpdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIGdlbmVyYXRlZFBvc2l0aW9uQWZ0ZXIobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gICAgLy8gT3B0aW1pemVkIGZvciBtb3N0IGNvbW1vbiBjYXNlXG4gICAgdmFyIGxpbmVBID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZTtcbiAgICB2YXIgbGluZUIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICAgIHZhciBjb2x1bW5BID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uO1xuICAgIHZhciBjb2x1bW5CID0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICAgIHJldHVybiBsaW5lQiA+IGxpbmVBIHx8IGxpbmVCID09IGxpbmVBICYmIGNvbHVtbkIgPj0gY29sdW1uQSB8fFxuICAgICAgICAgICB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQikgPD0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGRhdGEgc3RydWN0dXJlIHRvIHByb3ZpZGUgYSBzb3J0ZWQgdmlldyBvZiBhY2N1bXVsYXRlZCBtYXBwaW5ncyBpbiBhXG4gICAqIHBlcmZvcm1hbmNlIGNvbnNjaW91cyBtYW5uZXIuIEl0IHRyYWRlcyBhIG5lZ2xpYmFibGUgb3ZlcmhlYWQgaW4gZ2VuZXJhbFxuICAgKiBjYXNlIGZvciBhIGxhcmdlIHNwZWVkdXAgaW4gY2FzZSBvZiBtYXBwaW5ncyBiZWluZyBhZGRlZCBpbiBvcmRlci5cbiAgICovXG4gIGZ1bmN0aW9uIE1hcHBpbmdMaXN0KCkge1xuICAgIHRoaXMuX2FycmF5ID0gW107XG4gICAgdGhpcy5fc29ydGVkID0gdHJ1ZTtcbiAgICAvLyBTZXJ2ZXMgYXMgaW5maW11bVxuICAgIHRoaXMuX2xhc3QgPSB7Z2VuZXJhdGVkTGluZTogLTEsIGdlbmVyYXRlZENvbHVtbjogMH07XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSB0aHJvdWdoIGludGVybmFsIGl0ZW1zLiBUaGlzIG1ldGhvZCB0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgdGhhdFxuICAgKiBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIHRha2VzLlxuICAgKlxuICAgKiBOT1RFOiBUaGUgb3JkZXIgb2YgdGhlIG1hcHBpbmdzIGlzIE5PVCBndWFyYW50ZWVkLlxuICAgKi9cbiAgTWFwcGluZ0xpc3QucHJvdG90eXBlLnVuc29ydGVkRm9yRWFjaCA9XG4gICAgZnVuY3Rpb24gTWFwcGluZ0xpc3RfZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKSB7XG4gICAgICB0aGlzLl9hcnJheS5mb3JFYWNoKGFDYWxsYmFjaywgYVRoaXNBcmcpO1xuICAgIH07XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgZ2l2ZW4gc291cmNlIG1hcHBpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBPYmplY3QgYU1hcHBpbmdcbiAgICovXG4gIE1hcHBpbmdMaXN0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBNYXBwaW5nTGlzdF9hZGQoYU1hcHBpbmcpIHtcbiAgICBpZiAoZ2VuZXJhdGVkUG9zaXRpb25BZnRlcih0aGlzLl9sYXN0LCBhTWFwcGluZykpIHtcbiAgICAgIHRoaXMuX2xhc3QgPSBhTWFwcGluZztcbiAgICAgIHRoaXMuX2FycmF5LnB1c2goYU1hcHBpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zb3J0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2FycmF5LnB1c2goYU1hcHBpbmcpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZmxhdCwgc29ydGVkIGFycmF5IG9mIG1hcHBpbmdzLiBUaGUgbWFwcGluZ3MgYXJlIHNvcnRlZCBieVxuICAgKiBnZW5lcmF0ZWQgcG9zaXRpb24uXG4gICAqXG4gICAqIFdBUk5JTkc6IFRoaXMgbWV0aG9kIHJldHVybnMgaW50ZXJuYWwgZGF0YSB3aXRob3V0IGNvcHlpbmcsIGZvclxuICAgKiBwZXJmb3JtYW5jZS4gVGhlIHJldHVybiB2YWx1ZSBtdXN0IE5PVCBiZSBtdXRhdGVkLCBhbmQgc2hvdWxkIGJlIHRyZWF0ZWQgYXNcbiAgICogYW4gaW1tdXRhYmxlIGJvcnJvdy4gSWYgeW91IHdhbnQgdG8gdGFrZSBvd25lcnNoaXAsIHlvdSBtdXN0IG1ha2UgeW91ciBvd25cbiAgICogY29weS5cbiAgICovXG4gIE1hcHBpbmdMaXN0LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gTWFwcGluZ0xpc3RfdG9BcnJheSgpIHtcbiAgICBpZiAoIXRoaXMuX3NvcnRlZCkge1xuICAgICAgdGhpcy5fYXJyYXkuc29ydCh1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKTtcbiAgICAgIHRoaXMuX3NvcnRlZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9hcnJheTtcbiAgfTtcblxuICBleHBvcnRzLk1hcHBpbmdMaXN0ID0gTWFwcGluZ0xpc3Q7XG59XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vbGliL21hcHBpbmctbGlzdC5qc1xuICoqIG1vZHVsZSBpZCA9IDdcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cbntcbiAgdmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcbiAgdmFyIGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpO1xuICB2YXIgQXJyYXlTZXQgPSByZXF1aXJlKCcuL2FycmF5LXNldCcpLkFycmF5U2V0O1xuICB2YXIgYmFzZTY0VkxRID0gcmVxdWlyZSgnLi9iYXNlNjQtdmxxJyk7XG4gIHZhciBxdWlja1NvcnQgPSByZXF1aXJlKCcuL3F1aWNrLXNvcnQnKS5xdWlja1NvcnQ7XG5cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICAgIHZhciBzb3VyY2VNYXAgPSBhU291cmNlTWFwO1xuICAgIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvdXJjZU1hcC5zZWN0aW9ucyAhPSBudWxsXG4gICAgICA/IG5ldyBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwKVxuICAgICAgOiBuZXcgQmFzaWNTb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXApO1xuICB9XG5cbiAgU291cmNlTWFwQ29uc3VtZXIuZnJvbVNvdXJjZU1hcCA9IGZ1bmN0aW9uKGFTb3VyY2VNYXApIHtcbiAgICByZXR1cm4gQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwKGFTb3VyY2VNYXApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAgICovXG4gIFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbiAgLy8gYF9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZCBgX19vcmlnaW5hbE1hcHBpbmdzYCBhcmUgYXJyYXlzIHRoYXQgaG9sZCB0aGVcbiAgLy8gcGFyc2VkIG1hcHBpbmcgY29vcmRpbmF0ZXMgZnJvbSB0aGUgc291cmNlIG1hcCdzIFwibWFwcGluZ3NcIiBhdHRyaWJ1dGUuIFRoZXlcbiAgLy8gYXJlIGxhemlseSBpbnN0YW50aWF0ZWQsIGFjY2Vzc2VkIHZpYSB0aGUgYF9nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gIC8vIGBfb3JpZ2luYWxNYXBwaW5nc2AgZ2V0dGVycyByZXNwZWN0aXZlbHksIGFuZCB3ZSBvbmx5IHBhcnNlIHRoZSBtYXBwaW5nc1xuICAvLyBhbmQgY3JlYXRlIHRoZXNlIGFycmF5cyBvbmNlIHF1ZXJpZWQgZm9yIGEgc291cmNlIGxvY2F0aW9uLiBXZSBqdW1wIHRocm91Z2hcbiAgLy8gdGhlc2UgaG9vcHMgYmVjYXVzZSB0aGVyZSBjYW4gYmUgbWFueSB0aG91c2FuZHMgb2YgbWFwcGluZ3MsIGFuZCBwYXJzaW5nXG4gIC8vIHRoZW0gaXMgZXhwZW5zaXZlLCBzbyB3ZSBvbmx5IHdhbnQgdG8gZG8gaXQgaWYgd2UgbXVzdC5cbiAgLy9cbiAgLy8gRWFjaCBvYmplY3QgaW4gdGhlIGFycmF5cyBpcyBvZiB0aGUgZm9ybTpcbiAgLy9cbiAgLy8gICAgIHtcbiAgLy8gICAgICAgZ2VuZXJhdGVkTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbiAgLy8gICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4gIC8vICAgICAgIHNvdXJjZTogVGhlIHBhdGggdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoYXQgZ2VuZXJhdGVkIHRoaXNcbiAgLy8gICAgICAgICAgICAgICBjaHVuayBvZiBjb2RlLFxuICAvLyAgICAgICBvcmlnaW5hbExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlIHRoYXRcbiAgLy8gICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuICAvLyAgICAgICBvcmlnaW5hbENvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSB0aGF0XG4gIC8vICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuICAvLyAgICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgc3ltYm9sIHdoaWNoIGdlbmVyYXRlZCB0aGlzIGNodW5rIG9mXG4gIC8vICAgICAgICAgICAgIGNvZGUuXG4gIC8vICAgICB9XG4gIC8vXG4gIC8vIEFsbCBwcm9wZXJ0aWVzIGV4Y2VwdCBmb3IgYGdlbmVyYXRlZExpbmVgIGFuZCBgZ2VuZXJhdGVkQ29sdW1uYCBjYW4gYmVcbiAgLy8gYG51bGxgLlxuICAvL1xuICAvLyBgX2dlbmVyYXRlZE1hcHBpbmdzYCBpcyBvcmRlcmVkIGJ5IHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zLlxuICAvL1xuICAvLyBgX29yaWdpbmFsTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucy5cblxuICBTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IG51bGw7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdfZ2VuZXJhdGVkTWFwcGluZ3MnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncykge1xuICAgICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzO1xuICAgIH1cbiAgfSk7XG5cbiAgU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG51bGw7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdfb3JpZ2luYWxNYXBwaW5ncycsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MpIHtcbiAgICAgICAgdGhpcy5fcGFyc2VNYXBwaW5ncyh0aGlzLl9tYXBwaW5ncywgdGhpcy5zb3VyY2VSb290KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzO1xuICAgIH1cbiAgfSk7XG5cbiAgU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGluZGV4KSB7XG4gICAgICB2YXIgYyA9IGFTdHIuY2hhckF0KGluZGV4KTtcbiAgICAgIHJldHVybiBjID09PSBcIjtcIiB8fCBjID09PSBcIixcIjtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gICAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICAgKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICAgKi9cbiAgU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IF9wYXJzZU1hcHBpbmdzXCIpO1xuICAgIH07XG5cbiAgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSID0gMTtcbiAgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVIgPSAyO1xuXG4gIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EID0gMTtcbiAgU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4gIC8qKlxuICAgKiBJdGVyYXRlIG92ZXIgZWFjaCBtYXBwaW5nIGJldHdlZW4gYW4gb3JpZ2luYWwgc291cmNlL2xpbmUvY29sdW1uIGFuZCBhXG4gICAqIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gICAqXG4gICAqIEBwYXJhbSBGdW5jdGlvbiBhQ2FsbGJhY2tcbiAgICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2ggbWFwcGluZy5cbiAgICogQHBhcmFtIE9iamVjdCBhQ29udGV4dFxuICAgKiAgICAgICAgT3B0aW9uYWwuIElmIHNwZWNpZmllZCwgdGhpcyBvYmplY3Qgd2lsbCBiZSB0aGUgdmFsdWUgb2YgYHRoaXNgIGV2ZXJ5XG4gICAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLlxuICAgKiBAcGFyYW0gYU9yZGVyXG4gICAqICAgICAgICBFaXRoZXIgYFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUmAgb3JcbiAgICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvXG4gICAqICAgICAgICBpdGVyYXRlIG92ZXIgdGhlIG1hcHBpbmdzIHNvcnRlZCBieSB0aGUgZ2VuZXJhdGVkIGZpbGUncyBsaW5lL2NvbHVtblxuICAgKiAgICAgICAgb3JkZXIgb3IgdGhlIG9yaWdpbmFsJ3Mgc291cmNlL2xpbmUvY29sdW1uIG9yZGVyLCByZXNwZWN0aXZlbHkuIERlZmF1bHRzIHRvXG4gICAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC5cbiAgICovXG4gIFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5lYWNoTWFwcGluZyA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7XG4gICAgICB2YXIgY29udGV4dCA9IGFDb250ZXh0IHx8IG51bGw7XG4gICAgICB2YXIgb3JkZXIgPSBhT3JkZXIgfHwgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSO1xuXG4gICAgICB2YXIgbWFwcGluZ3M7XG4gICAgICBzd2l0Y2ggKG9yZGVyKSB7XG4gICAgICBjYXNlIFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUjpcbiAgICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSOlxuICAgICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uXCIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgc291cmNlUm9vdCA9IHRoaXMuc291cmNlUm9vdDtcbiAgICAgIG1hcHBpbmdzLm1hcChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgICB2YXIgc291cmNlID0gbWFwcGluZy5zb3VyY2UgPT09IG51bGwgPyBudWxsIDogdGhpcy5fc291cmNlcy5hdChtYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGlmIChzb3VyY2UgIT0gbnVsbCAmJiBzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgIGdlbmVyYXRlZExpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSxcbiAgICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uLFxuICAgICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgb3JpZ2luYWxDb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW4sXG4gICAgICAgICAgbmFtZTogbWFwcGluZy5uYW1lID09PSBudWxsID8gbnVsbCA6IHRoaXMuX25hbWVzLmF0KG1hcHBpbmcubmFtZSlcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMpLmZvckVhY2goYUNhbGxiYWNrLCBjb250ZXh0KTtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICAgKiBsaW5lLCBhbmQgY29sdW1uIHByb3ZpZGVkLiBJZiBubyBjb2x1bW4gaXMgcHJvdmlkZWQsIHJldHVybnMgYWxsIG1hcHBpbmdzXG4gICAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlaXRoZXIgdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3Igb3IgdGhlIG5leHRcbiAgICogY2xvc2VzdCBsaW5lIHRoYXQgaGFzIGFueSBtYXBwaW5ncy4gT3RoZXJ3aXNlLCByZXR1cm5zIGFsbCBtYXBwaW5nc1xuICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBsaW5lIGFuZCBlaXRoZXIgdGhlIGNvbHVtbiB3ZSBhcmUgc2VhcmNoaW5nIGZvclxuICAgKiBvciB0aGUgbmV4dCBjbG9zZXN0IGNvbHVtbiB0aGF0IGhhcyBhbnkgb2Zmc2V0cy5cbiAgICpcbiAgICogVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAgICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICAgKiAgIC0gY29sdW1uOiBPcHRpb25hbC4gdGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAgICpcbiAgICogYW5kIGFuIGFycmF5IG9mIG9iamVjdHMgaXMgcmV0dXJuZWQsIGVhY2ggd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAqXG4gICAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gICAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICAgKi9cbiAgU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmFsbEdlbmVyYXRlZFBvc2l0aW9uc0ZvciA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yKGFBcmdzKSB7XG4gICAgICB2YXIgbGluZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpO1xuXG4gICAgICAvLyBXaGVuIHRoZXJlIGlzIG5vIGV4YWN0IG1hdGNoLCBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmdcbiAgICAgIC8vIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IG1hcHBpbmcgbGVzcyB0aGFuIHRoZSBuZWVkbGUuIEJ5XG4gICAgICAvLyBzZXR0aW5nIG5lZWRsZS5vcmlnaW5hbENvbHVtbiB0byAwLCB3ZSB0aHVzIGZpbmQgdGhlIGxhc3QgbWFwcGluZyBmb3JcbiAgICAgIC8vIHRoZSBnaXZlbiBsaW5lLCBwcm92aWRlZCBzdWNoIGEgbWFwcGluZyBleGlzdHMuXG4gICAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgICBzb3VyY2U6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyksXG4gICAgICAgIG9yaWdpbmFsTGluZTogbGluZSxcbiAgICAgICAgb3JpZ2luYWxDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJywgMClcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBuZWVkbGUuc291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIG5lZWRsZS5zb3VyY2UpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhuZWVkbGUuc291cmNlKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBuZWVkbGUuc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKG5lZWRsZS5zb3VyY2UpO1xuXG4gICAgICB2YXIgbWFwcGluZ3MgPSBbXTtcblxuICAgICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcobmVlZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EKTtcbiAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgICAgaWYgKGFBcmdzLmNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIG9yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuXG4gICAgICAgICAgLy8gSXRlcmF0ZSB1bnRpbCBlaXRoZXIgd2UgcnVuIG91dCBvZiBtYXBwaW5ncywgb3Igd2UgcnVuIGludG9cbiAgICAgICAgICAvLyBhIG1hcHBpbmcgZm9yIGEgZGlmZmVyZW50IGxpbmUgdGhhbiB0aGUgb25lIHdlIGZvdW5kLiBTaW5jZVxuICAgICAgICAgIC8vIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgICAvLyB0aGUgbGluZSB3ZSBmb3VuZC5cbiAgICAgICAgICB3aGlsZSAobWFwcGluZyAmJiBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gb3JpZ2luYWxMaW5lKSB7XG4gICAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZExpbmUnLCBudWxsKSxcbiAgICAgICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2luZGV4XTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIG9yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgICAgLy8gYSBtYXBwaW5nIGZvciBhIGRpZmZlcmVudCBsaW5lIHRoYW4gdGhlIG9uZSB3ZSB3ZXJlIHNlYXJjaGluZyBmb3IuXG4gICAgICAgICAgLy8gU2luY2UgbWFwcGluZ3MgYXJlIHNvcnRlZCwgdGhpcyBpcyBndWFyYW50ZWVkIHRvIGZpbmQgYWxsIG1hcHBpbmdzIGZvclxuICAgICAgICAgIC8vIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICAgIHdoaWxlIChtYXBwaW5nICYmXG4gICAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBsaW5lICYmXG4gICAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPT0gb3JpZ2luYWxDb2x1bW4pIHtcbiAgICAgICAgICAgIG1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgICAgbGFzdENvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2xhc3RHZW5lcmF0ZWRDb2x1bW4nLCBudWxsKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWFwcGluZ3M7XG4gICAgfTtcblxuICBleHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbiAgLyoqXG4gICAqIEEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2ggd2UgY2FuXG4gICAqIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZmlsZSBwb3NpdGlvbnMgYnkgZ2l2aW5nIGl0IGEgZmlsZVxuICAgKiBwb3NpdGlvbiBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAgICpcbiAgICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIHRoZSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yXG4gICAqIGFscmVhZHkgcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYywgc291cmNlIG1hcHMgaGF2ZSB0aGVcbiAgICogZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gICAqXG4gICAqICAgLSB2ZXJzaW9uOiBXaGljaCB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwIHNwZWMgdGhpcyBtYXAgaXMgZm9sbG93aW5nLlxuICAgKiAgIC0gc291cmNlczogQW4gYXJyYXkgb2YgVVJMcyB0byB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICAgKiAgIC0gbmFtZXM6IEFuIGFycmF5IG9mIGlkZW50aWZpZXJzIHdoaWNoIGNhbiBiZSByZWZlcnJlbmNlZCBieSBpbmRpdmlkdWFsIG1hcHBpbmdzLlxuICAgKiAgIC0gc291cmNlUm9vdDogT3B0aW9uYWwuIFRoZSBVUkwgcm9vdCBmcm9tIHdoaWNoIGFsbCBzb3VyY2VzIGFyZSByZWxhdGl2ZS5cbiAgICogICAtIHNvdXJjZXNDb250ZW50OiBPcHRpb25hbC4gQW4gYXJyYXkgb2YgY29udGVudHMgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcy5cbiAgICogICAtIG1hcHBpbmdzOiBBIHN0cmluZyBvZiBiYXNlNjQgVkxRcyB3aGljaCBjb250YWluIHRoZSBhY3R1YWwgbWFwcGluZ3MuXG4gICAqICAgLSBmaWxlOiBPcHRpb25hbC4gVGhlIGdlbmVyYXRlZCBmaWxlIHRoaXMgc291cmNlIG1hcCBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAqXG4gICAqIEhlcmUgaXMgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF06XG4gICAqXG4gICAqICAgICB7XG4gICAqICAgICAgIHZlcnNpb24gOiAzLFxuICAgKiAgICAgICBmaWxlOiBcIm91dC5qc1wiLFxuICAgKiAgICAgICBzb3VyY2VSb290IDogXCJcIixcbiAgICogICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICAgKiAgICAgICBuYW1lczogW1wic3JjXCIsIFwibWFwc1wiLCBcImFyZVwiLCBcImZ1blwiXSxcbiAgICogICAgICAgbWFwcGluZ3M6IFwiQUEsQUI7O0FCQ0RFO1wiXG4gICAqICAgICB9XG4gICAqXG4gICAqIFswXTogaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xVTFSR0FlaFF3UnlwVVRvdkYxS1JscGlPRnplMGItXzJnYzZmQUgwS1kway9lZGl0P3BsaT0xI1xuICAgKi9cbiAgZnVuY3Rpb24gQmFzaWNTb3VyY2VNYXBDb25zdW1lcihhU291cmNlTWFwKSB7XG4gICAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gICAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgICAgc291cmNlTWFwID0gSlNPTi5wYXJzZShhU291cmNlTWFwLnJlcGxhY2UoL15cXClcXF1cXH0nLywgJycpKTtcbiAgICB9XG5cbiAgICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgICB2YXIgc291cmNlcyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZXMnKTtcbiAgICAvLyBTYXNzIDMuMyBsZWF2ZXMgb3V0IHRoZSAnbmFtZXMnIGFycmF5LCBzbyB3ZSBkZXZpYXRlIGZyb20gdGhlIHNwZWMgKHdoaWNoXG4gICAgLy8gcmVxdWlyZXMgdGhlIGFycmF5KSB0byBwbGF5IG5pY2UgaGVyZS5cbiAgICB2YXIgbmFtZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICduYW1lcycsIFtdKTtcbiAgICB2YXIgc291cmNlUm9vdCA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZVJvb3QnLCBudWxsKTtcbiAgICB2YXIgc291cmNlc0NvbnRlbnQgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzQ29udGVudCcsIG51bGwpO1xuICAgIHZhciBtYXBwaW5ncyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ21hcHBpbmdzJyk7XG4gICAgdmFyIGZpbGUgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdmaWxlJywgbnVsbCk7XG5cbiAgICAvLyBPbmNlIGFnYWluLCBTYXNzIGRldmlhdGVzIGZyb20gdGhlIHNwZWMgYW5kIHN1cHBsaWVzIHRoZSB2ZXJzaW9uIGFzIGFcbiAgICAvLyBzdHJpbmcgcmF0aGVyIHRoYW4gYSBudW1iZXIsIHNvIHdlIHVzZSBsb29zZSBlcXVhbGl0eSBjaGVja2luZyBoZXJlLlxuICAgIGlmICh2ZXJzaW9uICE9IHRoaXMuX3ZlcnNpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICAgIH1cblxuICAgIHNvdXJjZXMgPSBzb3VyY2VzXG4gICAgICAvLyBTb21lIHNvdXJjZSBtYXBzIHByb2R1Y2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIGxpa2UgXCIuL2Zvby5qc1wiIGluc3RlYWQgb2ZcbiAgICAgIC8vIFwiZm9vLmpzXCIuICBOb3JtYWxpemUgdGhlc2UgZmlyc3Qgc28gdGhhdCBmdXR1cmUgY29tcGFyaXNvbnMgd2lsbCBzdWNjZWVkLlxuICAgICAgLy8gU2VlIGJ1Z3ppbC5sYS8xMDkwNzY4LlxuICAgICAgLm1hcCh1dGlsLm5vcm1hbGl6ZSlcbiAgICAgIC8vIEFsd2F5cyBlbnN1cmUgdGhhdCBhYnNvbHV0ZSBzb3VyY2VzIGFyZSBpbnRlcm5hbGx5IHN0b3JlZCByZWxhdGl2ZSB0b1xuICAgICAgLy8gdGhlIHNvdXJjZSByb290LCBpZiB0aGUgc291cmNlIHJvb3QgaXMgYWJzb2x1dGUuIE5vdCBkb2luZyB0aGlzIHdvdWxkXG4gICAgICAvLyBiZSBwYXJ0aWN1bGFybHkgcHJvYmxlbWF0aWMgd2hlbiB0aGUgc291cmNlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlXG4gICAgICAvLyBzb3VyY2UgKHZhbGlkLCBidXQgd2h5Pz8pLiBTZWUgZ2l0aHViIGlzc3VlICMxOTkgYW5kIGJ1Z3ppbC5sYS8xMTg4OTgyLlxuICAgICAgLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2VSb290ICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2VSb290KSAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlKVxuICAgICAgICAgID8gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBzb3VyY2UpXG4gICAgICAgICAgOiBzb3VyY2U7XG4gICAgICB9KTtcblxuICAgIC8vIFBhc3MgYHRydWVgIGJlbG93IHRvIGFsbG93IGR1cGxpY2F0ZSBuYW1lcyBhbmQgc291cmNlcy4gV2hpbGUgc291cmNlIG1hcHNcbiAgICAvLyBhcmUgaW50ZW5kZWQgdG8gYmUgY29tcHJlc3NlZCBhbmQgZGVkdXBsaWNhdGVkLCB0aGUgVHlwZVNjcmlwdCBjb21waWxlclxuICAgIC8vIHNvbWV0aW1lcyBnZW5lcmF0ZXMgc291cmNlIG1hcHMgd2l0aCBkdXBsaWNhdGVzIGluIHRoZW0uIFNlZSBHaXRodWIgaXNzdWVcbiAgICAvLyAjNzIgYW5kIGJ1Z3ppbC5sYS84ODk0OTIuXG4gICAgdGhpcy5fbmFtZXMgPSBBcnJheVNldC5mcm9tQXJyYXkobmFtZXMsIHRydWUpO1xuICAgIHRoaXMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoc291cmNlcywgdHJ1ZSk7XG5cbiAgICB0aGlzLnNvdXJjZVJvb3QgPSBzb3VyY2VSb290O1xuICAgIHRoaXMuc291cmNlc0NvbnRlbnQgPSBzb3VyY2VzQ29udGVudDtcbiAgICB0aGlzLl9tYXBwaW5ncyA9IG1hcHBpbmdzO1xuICAgIHRoaXMuZmlsZSA9IGZpbGU7XG4gIH1cblxuICBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbiAgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuY29uc3VtZXIgPSBTb3VyY2VNYXBDb25zdW1lcjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBmcm9tIGEgU291cmNlTWFwR2VuZXJhdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gU291cmNlTWFwR2VuZXJhdG9yIGFTb3VyY2VNYXBcbiAgICogICAgICAgIFRoZSBzb3VyY2UgbWFwIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbiAgICogQHJldHVybnMgQmFzaWNTb3VyY2VNYXBDb25zdW1lclxuICAgKi9cbiAgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9mcm9tU291cmNlTWFwKGFTb3VyY2VNYXApIHtcbiAgICAgIHZhciBzbWMgPSBPYmplY3QuY3JlYXRlKEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcblxuICAgICAgdmFyIG5hbWVzID0gc21jLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9uYW1lcy50b0FycmF5KCksIHRydWUpO1xuICAgICAgdmFyIHNvdXJjZXMgPSBzbWMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoYVNvdXJjZU1hcC5fc291cmNlcy50b0FycmF5KCksIHRydWUpO1xuICAgICAgc21jLnNvdXJjZVJvb3QgPSBhU291cmNlTWFwLl9zb3VyY2VSb290O1xuICAgICAgc21jLnNvdXJjZXNDb250ZW50ID0gYVNvdXJjZU1hcC5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChzbWMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWMuc291cmNlUm9vdCk7XG4gICAgICBzbWMuZmlsZSA9IGFTb3VyY2VNYXAuX2ZpbGU7XG5cbiAgICAgIC8vIEJlY2F1c2Ugd2UgYXJlIG1vZGlmeWluZyB0aGUgZW50cmllcyAoYnkgY29udmVydGluZyBzdHJpbmcgc291cmNlcyBhbmRcbiAgICAgIC8vIG5hbWVzIHRvIGluZGljZXMgaW50byB0aGUgc291cmNlcyBhbmQgbmFtZXMgQXJyYXlTZXRzKSwgd2UgaGF2ZSB0byBtYWtlXG4gICAgICAvLyBhIGNvcHkgb2YgdGhlIGVudHJ5IG9yIGVsc2UgYmFkIHRoaW5ncyBoYXBwZW4uIFNoYXJlZCBtdXRhYmxlIHN0YXRlXG4gICAgICAvLyBzdHJpa2VzIGFnYWluISBTZWUgZ2l0aHViIGlzc3VlICMxOTEuXG5cbiAgICAgIHZhciBnZW5lcmF0ZWRNYXBwaW5ncyA9IGFTb3VyY2VNYXAuX21hcHBpbmdzLnRvQXJyYXkoKS5zbGljZSgpO1xuICAgICAgdmFyIGRlc3RHZW5lcmF0ZWRNYXBwaW5ncyA9IHNtYy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgICB2YXIgZGVzdE9yaWdpbmFsTWFwcGluZ3MgPSBzbWMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc3JjTWFwcGluZyA9IGdlbmVyYXRlZE1hcHBpbmdzW2ldO1xuICAgICAgICB2YXIgZGVzdE1hcHBpbmcgPSBuZXcgTWFwcGluZztcbiAgICAgICAgZGVzdE1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9IHNyY01hcHBpbmcuZ2VuZXJhdGVkTGluZTtcbiAgICAgICAgZGVzdE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uID0gc3JjTWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG5cbiAgICAgICAgaWYgKHNyY01hcHBpbmcuc291cmNlKSB7XG4gICAgICAgICAgZGVzdE1hcHBpbmcuc291cmNlID0gc291cmNlcy5pbmRleE9mKHNyY01hcHBpbmcuc291cmNlKTtcbiAgICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbExpbmUgPSBzcmNNYXBwaW5nLm9yaWdpbmFsTGluZTtcbiAgICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHNyY01hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgICBpZiAoc3JjTWFwcGluZy5uYW1lKSB7XG4gICAgICAgICAgICBkZXN0TWFwcGluZy5uYW1lID0gbmFtZXMuaW5kZXhPZihzcmNNYXBwaW5nLm5hbWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRlc3RPcmlnaW5hbE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVzdEdlbmVyYXRlZE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgICAgfVxuXG4gICAgICBxdWlja1NvcnQoc21jLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG5cbiAgICAgIHJldHVybiBzbWM7XG4gICAgfTtcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICAgKi9cbiAgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBvcmlnaW5hbCBzb3VyY2VzLlxuICAgKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VzLnRvQXJyYXkoKS5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlUm9vdCAhPSBudWxsID8gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgcykgOiBzO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogUHJvdmlkZSB0aGUgSklUIHdpdGggYSBuaWNlIHNoYXBlIC8gaGlkZGVuIGNsYXNzLlxuICAgKi9cbiAgZnVuY3Rpb24gTWFwcGluZygpIHtcbiAgICB0aGlzLmdlbmVyYXRlZExpbmUgPSAwO1xuICAgIHRoaXMuZ2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG4gICAgdGhpcy5vcmlnaW5hbExpbmUgPSBudWxsO1xuICAgIHRoaXMub3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICAgIHRoaXMubmFtZSA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICAgKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAgICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAgICovXG4gIEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgICB2YXIgZ2VuZXJhdGVkTGluZSA9IDE7XG4gICAgICB2YXIgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICAgIHZhciBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gMDtcbiAgICAgIHZhciBwcmV2aW91c1NvdXJjZSA9IDA7XG4gICAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICAgIHZhciBsZW5ndGggPSBhU3RyLmxlbmd0aDtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgY2FjaGVkU2VnbWVudHMgPSB7fTtcbiAgICAgIHZhciB0ZW1wID0ge307XG4gICAgICB2YXIgb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuICAgICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgICB2YXIgbWFwcGluZywgc3RyLCBzZWdtZW50LCBlbmQsIHZhbHVlO1xuXG4gICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJzsnKSB7XG4gICAgICAgICAgZ2VuZXJhdGVkTGluZSsrO1xuICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJywnKSB7XG4gICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBtYXBwaW5nID0gbmV3IE1hcHBpbmcoKTtcbiAgICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBnZW5lcmF0ZWRMaW5lO1xuXG4gICAgICAgICAgLy8gQmVjYXVzZSBlYWNoIG9mZnNldCBpcyBlbmNvZGVkIHJlbGF0aXZlIHRvIHRoZSBwcmV2aW91cyBvbmUsXG4gICAgICAgICAgLy8gbWFueSBzZWdtZW50cyBvZnRlbiBoYXZlIHRoZSBzYW1lIGVuY29kaW5nLiBXZSBjYW4gZXhwbG9pdCB0aGlzXG4gICAgICAgICAgLy8gZmFjdCBieSBjYWNoaW5nIHRoZSBwYXJzZWQgdmFyaWFibGUgbGVuZ3RoIGZpZWxkcyBvZiBlYWNoIHNlZ21lbnQsXG4gICAgICAgICAgLy8gYWxsb3dpbmcgdXMgdG8gYXZvaWQgYSBzZWNvbmQgcGFyc2UgaWYgd2UgZW5jb3VudGVyIHRoZSBzYW1lXG4gICAgICAgICAgLy8gc2VnbWVudCBhZ2Fpbi5cbiAgICAgICAgICBmb3IgKGVuZCA9IGluZGV4OyBlbmQgPCBsZW5ndGg7IGVuZCsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2hhcklzTWFwcGluZ1NlcGFyYXRvcihhU3RyLCBlbmQpKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBzdHIgPSBhU3RyLnNsaWNlKGluZGV4LCBlbmQpO1xuXG4gICAgICAgICAgc2VnbWVudCA9IGNhY2hlZFNlZ21lbnRzW3N0cl07XG4gICAgICAgICAgaWYgKHNlZ21lbnQpIHtcbiAgICAgICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGg7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlZ21lbnQgPSBbXTtcbiAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGVuZCkge1xuICAgICAgICAgICAgICBiYXNlNjRWTFEuZGVjb2RlKGFTdHIsIGluZGV4LCB0ZW1wKTtcbiAgICAgICAgICAgICAgdmFsdWUgPSB0ZW1wLnZhbHVlO1xuICAgICAgICAgICAgICBpbmRleCA9IHRlbXAucmVzdDtcbiAgICAgICAgICAgICAgc2VnbWVudC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgYSBzb3VyY2UsIGJ1dCBubyBsaW5lIGFuZCBjb2x1bW4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgYSBzb3VyY2UgYW5kIGxpbmUsIGJ1dCBubyBjb2x1bW4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FjaGVkU2VnbWVudHNbc3RyXSA9IHNlZ21lbnQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gR2VuZXJhdGVkIGNvbHVtbi5cbiAgICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uICsgc2VnbWVudFswXTtcbiAgICAgICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgLy8gT3JpZ2luYWwgc291cmNlLlxuICAgICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSBwcmV2aW91c1NvdXJjZSArIHNlZ21lbnRbMV07XG4gICAgICAgICAgICBwcmV2aW91c1NvdXJjZSArPSBzZWdtZW50WzFdO1xuXG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBsaW5lLlxuICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPSBwcmV2aW91c09yaWdpbmFsTGluZSArIHNlZ21lbnRbMl07XG4gICAgICAgICAgICBwcmV2aW91c09yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICAgICAgLy8gTGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkXG4gICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSArPSAxO1xuXG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBjb2x1bW4uXG4gICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gcHJldmlvdXNPcmlnaW5hbENvbHVtbiArIHNlZ21lbnRbM107XG4gICAgICAgICAgICBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID4gNCkge1xuICAgICAgICAgICAgICAvLyBPcmlnaW5hbCBuYW1lLlxuICAgICAgICAgICAgICBtYXBwaW5nLm5hbWUgPSBwcmV2aW91c05hbWUgKyBzZWdtZW50WzRdO1xuICAgICAgICAgICAgICBwcmV2aW91c05hbWUgKz0gc2VnbWVudFs0XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBnZW5lcmF0ZWRNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICAgIGlmICh0eXBlb2YgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBvcmlnaW5hbE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHF1aWNrU29ydChnZW5lcmF0ZWRNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCk7XG4gICAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBnZW5lcmF0ZWRNYXBwaW5ncztcblxuICAgICAgcXVpY2tTb3J0KG9yaWdpbmFsTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpO1xuICAgICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MgPSBvcmlnaW5hbE1hcHBpbmdzO1xuICAgIH07XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIG1hcHBpbmcgdGhhdCBiZXN0IG1hdGNoZXMgdGhlIGh5cG90aGV0aWNhbCBcIm5lZWRsZVwiIG1hcHBpbmcgdGhhdFxuICAgKiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBpbiB0aGUgZ2l2ZW4gXCJoYXlzdGFja1wiIG9mIG1hcHBpbmdzLlxuICAgKi9cbiAgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9maW5kTWFwcGluZyhhTmVlZGxlLCBhTWFwcGluZ3MsIGFMaW5lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQ29sdW1uTmFtZSwgYUNvbXBhcmF0b3IsIGFCaWFzKSB7XG4gICAgICAvLyBUbyByZXR1cm4gdGhlIHBvc2l0aW9uIHdlIGFyZSBzZWFyY2hpbmcgZm9yLCB3ZSBtdXN0IGZpcnN0IGZpbmQgdGhlXG4gICAgICAvLyBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHRoZW4gcmV0dXJuIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBpdFxuICAgICAgLy8gcG9pbnRzIHRvLiBCZWNhdXNlIHRoZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB3ZSBjYW4gdXNlIGJpbmFyeSBzZWFyY2ggdG9cbiAgICAgIC8vIGZpbmQgdGhlIGJlc3QgbWFwcGluZy5cblxuICAgICAgaWYgKGFOZWVkbGVbYUxpbmVOYW1lXSA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0xpbmUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMSwgZ290ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGFOZWVkbGVbYUxpbmVOYW1lXSk7XG4gICAgICB9XG4gICAgICBpZiAoYU5lZWRsZVthQ29sdW1uTmFtZV0gPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvbHVtbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwLCBnb3QgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthQ29sdW1uTmFtZV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYmluYXJ5U2VhcmNoLnNlYXJjaChhTmVlZGxlLCBhTWFwcGluZ3MsIGFDb21wYXJhdG9yLCBhQmlhcyk7XG4gICAgfTtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgbGFzdCBjb2x1bW4gZm9yIGVhY2ggZ2VuZXJhdGVkIG1hcHBpbmcuIFRoZSBsYXN0IGNvbHVtbiBpc1xuICAgKiBpbmNsdXNpdmUuXG4gICAqL1xuICBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb21wdXRlQ29sdW1uU3BhbnMgPVxuICAgIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXB1dGVDb2x1bW5TcGFucygpIHtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGg7ICsraW5kZXgpIHtcbiAgICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgICAgLy8gTWFwcGluZ3MgZG8gbm90IGNvbnRhaW4gYSBmaWVsZCBmb3IgdGhlIGxhc3QgZ2VuZXJhdGVkIGNvbHVtbnQuIFdlXG4gICAgICAgIC8vIGNhbiBjb21lIHVwIHdpdGggYW4gb3B0aW1pc3RpYyBlc3RpbWF0ZSwgaG93ZXZlciwgYnkgYXNzdW1pbmcgdGhhdFxuICAgICAgICAvLyBtYXBwaW5ncyBhcmUgY29udGlndW91cyAoaS5lLiBnaXZlbiB0d28gY29uc2VjdXRpdmUgbWFwcGluZ3MsIHRoZVxuICAgICAgICAvLyBmaXJzdCBtYXBwaW5nIGVuZHMgd2hlcmUgdGhlIHNlY29uZCBvbmUgc3RhcnRzKS5cbiAgICAgICAgaWYgKGluZGV4ICsgMSA8IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aCkge1xuICAgICAgICAgIHZhciBuZXh0TWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4ICsgMV07XG5cbiAgICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgICBtYXBwaW5nLmxhc3RHZW5lcmF0ZWRDb2x1bW4gPSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gLSAxO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIGxhc3QgbWFwcGluZyBmb3IgZWFjaCBsaW5lIHNwYW5zIHRoZSBlbnRpcmUgbGluZS5cbiAgICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gSW5maW5pdHk7XG4gICAgICB9XG4gICAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlLCBsaW5lLCBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgZ2VuZXJhdGVkXG4gICAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICAgKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICpcbiAgICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAgICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gICAqICAgLSBiaWFzOiBFaXRoZXIgJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICAgKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICAgKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICAgKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gICAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICAgKlxuICAgKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gICAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAgICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAgICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICAgKi9cbiAgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvciA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgICAgfTtcblxuICAgICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcoXG4gICAgICAgIG5lZWRsZSxcbiAgICAgICAgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MsXG4gICAgICAgIFwiZ2VuZXJhdGVkTGluZVwiLFxuICAgICAgICBcImdlbmVyYXRlZENvbHVtblwiLFxuICAgICAgICB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkLFxuICAgICAgICB1dGlsLmdldEFyZyhhQXJncywgJ2JpYXMnLCBTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORClcbiAgICAgICk7XG5cbiAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdzb3VyY2UnLCBudWxsKTtcbiAgICAgICAgICBpZiAoc291cmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmF0KHNvdXJjZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgc291cmNlID0gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIG5hbWUgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbmFtZScsIG51bGwpO1xuICAgICAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgICBuYW1lID0gdGhpcy5fbmFtZXMuYXQobmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdvcmlnaW5hbExpbmUnLCBudWxsKSxcbiAgICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3VyY2U6IG51bGwsXG4gICAgICAgIGxpbmU6IG51bGwsXG4gICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgbmFtZTogbnVsbFxuICAgICAgfTtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBoYXZlIHRoZSBzb3VyY2UgY29udGVudCBmb3IgZXZlcnkgc291cmNlIGluIHRoZSBzb3VyY2VcbiAgICogbWFwLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gICAgZnVuY3Rpb24gQmFzaWNTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5sZW5ndGggPj0gdGhpcy5fc291cmNlcy5zaXplKCkgJiZcbiAgICAgICAgIXRoaXMuc291cmNlc0NvbnRlbnQuc29tZShmdW5jdGlvbiAoc2MpIHsgcmV0dXJuIHNjID09IG51bGw7IH0pO1xuICAgIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50LiBUaGUgb25seSBhcmd1bWVudCBpcyB0aGUgdXJsIG9mIHRoZVxuICAgKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gICAqIGF2YWlsaWJsZS5cbiAgICovXG4gIEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IgPVxuICAgIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgICAgaWYgKCF0aGlzLnNvdXJjZXNDb250ZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgYVNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LCBhU291cmNlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3NvdXJjZXMuaGFzKGFTb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihhU291cmNlKV07XG4gICAgICB9XG5cbiAgICAgIHZhciB1cmw7XG4gICAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGxcbiAgICAgICAgICAmJiAodXJsID0gdXRpbC51cmxQYXJzZSh0aGlzLnNvdXJjZVJvb3QpKSkge1xuICAgICAgICAvLyBYWFg6IGZpbGU6Ly8gVVJJcyBhbmQgYWJzb2x1dGUgcGF0aHMgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGZvclxuICAgICAgICAvLyBtYW55IHVzZXJzLiBXZSBjYW4gaGVscCB0aGVtIG91dCB3aGVuIHRoZXkgZXhwZWN0IGZpbGU6Ly8gVVJJcyB0b1xuICAgICAgICAvLyBiZWhhdmUgbGlrZSBpdCB3b3VsZCBpZiB0aGV5IHdlcmUgcnVubmluZyBhIGxvY2FsIEhUVFAgc2VydmVyLiBTZWVcbiAgICAgICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg1NTk3LlxuICAgICAgICB2YXIgZmlsZVVyaUFic1BhdGggPSBhU291cmNlLnJlcGxhY2UoL15maWxlOlxcL1xcLy8sIFwiXCIpO1xuICAgICAgICBpZiAodXJsLnNjaGVtZSA9PSBcImZpbGVcIlxuICAgICAgICAgICAgJiYgdGhpcy5fc291cmNlcy5oYXMoZmlsZVVyaUFic1BhdGgpKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGZpbGVVcmlBYnNQYXRoKV1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoIXVybC5wYXRoIHx8IHVybC5wYXRoID09IFwiL1wiKVxuICAgICAgICAgICAgJiYgdGhpcy5fc291cmNlcy5oYXMoXCIvXCIgKyBhU291cmNlKSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihcIi9cIiArIGFTb3VyY2UpXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgZnJvbVxuICAgICAgLy8gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yLiBJbiB0aGF0IGNhc2UsIHdlXG4gICAgICAvLyBkb24ndCB3YW50IHRvIHRocm93IGlmIHdlIGNhbid0IGZpbmQgdGhlIHNvdXJjZSAtIHdlIGp1c3Qgd2FudCB0b1xuICAgICAgLy8gcmV0dXJuIG51bGwsIHNvIHdlIHByb3ZpZGUgYSBmbGFnIHRvIGV4aXQgZ3JhY2VmdWxseS5cbiAgICAgIGlmIChudWxsT25NaXNzaW5nKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYVNvdXJjZSArICdcIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICAgKiBsaW5lLCBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGhcbiAgICogdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAgICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICAgKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICAgKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAgICogICAgICdTb3VyY2VNYXBDb25zdW1lci5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAgICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAgICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICAgKiAgICAgRGVmYXVsdHMgdG8gJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAgICpcbiAgICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICpcbiAgICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAgICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gICAqL1xuICBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpO1xuICAgICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgIHNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgICAgbGFzdENvbHVtbjogbnVsbFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBvcmlnaW5hbExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgICAgfTtcblxuICAgICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcoXG4gICAgICAgIG5lZWRsZSxcbiAgICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgICAgXCJvcmlnaW5hbENvbHVtblwiLFxuICAgICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgICB1dGlsLmdldEFyZyhhQXJncywgJ2JpYXMnLCBTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORClcbiAgICAgICk7XG5cbiAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgICAgaWYgKG1hcHBpbmcuc291cmNlID09PSBuZWVkbGUuc291cmNlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxpbmU6IG51bGwsXG4gICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgbGFzdENvbHVtbjogbnVsbFxuICAgICAgfTtcbiAgICB9O1xuXG4gIGV4cG9ydHMuQmFzaWNTb3VyY2VNYXBDb25zdW1lciA9IEJhc2ljU291cmNlTWFwQ29uc3VtZXI7XG5cbiAgLyoqXG4gICAqIEFuIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2hcbiAgICogd2UgY2FuIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbi4gSXQgZGlmZmVycyBmcm9tIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgaW5cbiAgICogdGhhdCBpdCB0YWtlcyBcImluZGV4ZWRcIiBzb3VyY2UgbWFwcyAoaS5lLiBvbmVzIHdpdGggYSBcInNlY3Rpb25zXCIgZmllbGQpIGFzXG4gICAqIGlucHV0LlxuICAgKlxuICAgKiBUaGUgb25seSBwYXJhbWV0ZXIgaXMgYSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yIGFscmVhZHlcbiAgICogcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYyBmb3IgaW5kZXhlZCBzb3VyY2UgbWFwcywgdGhleVxuICAgKiBoYXZlIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAgICpcbiAgICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gICAqICAgLSBmaWxlOiBPcHRpb25hbC4gVGhlIGdlbmVyYXRlZCBmaWxlIHRoaXMgc291cmNlIG1hcCBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAqICAgLSBzZWN0aW9uczogQSBsaXN0IG9mIHNlY3Rpb24gZGVmaW5pdGlvbnMuXG4gICAqXG4gICAqIEVhY2ggdmFsdWUgdW5kZXIgdGhlIFwic2VjdGlvbnNcIiBmaWVsZCBoYXMgdHdvIGZpZWxkczpcbiAgICogICAtIG9mZnNldDogVGhlIG9mZnNldCBpbnRvIHRoZSBvcmlnaW5hbCBzcGVjaWZpZWQgYXQgd2hpY2ggdGhpcyBzZWN0aW9uXG4gICAqICAgICAgIGJlZ2lucyB0byBhcHBseSwgZGVmaW5lZCBhcyBhbiBvYmplY3Qgd2l0aCBhIFwibGluZVwiIGFuZCBcImNvbHVtblwiXG4gICAqICAgICAgIGZpZWxkLlxuICAgKiAgIC0gbWFwOiBBIHNvdXJjZSBtYXAgZGVmaW5pdGlvbi4gVGhpcyBzb3VyY2UgbWFwIGNvdWxkIGFsc28gYmUgaW5kZXhlZCxcbiAgICogICAgICAgYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbiAgICpcbiAgICogSW5zdGVhZCBvZiB0aGUgXCJtYXBcIiBmaWVsZCwgaXQncyBhbHNvIHBvc3NpYmxlIHRvIGhhdmUgYSBcInVybFwiIGZpZWxkXG4gICAqIHNwZWNpZnlpbmcgYSBVUkwgdG8gcmV0cmlldmUgYSBzb3VyY2UgbWFwIGZyb20sIGJ1dCB0aGF0J3MgY3VycmVudGx5XG4gICAqIHVuc3VwcG9ydGVkLlxuICAgKlxuICAgKiBIZXJlJ3MgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF0sIGJ1dFxuICAgKiBtb2RpZmllZCB0byBvbWl0IGEgc2VjdGlvbiB3aGljaCB1c2VzIHRoZSBcInVybFwiIGZpZWxkLlxuICAgKlxuICAgKiAge1xuICAgKiAgICB2ZXJzaW9uIDogMyxcbiAgICogICAgZmlsZTogXCJhcHAuanNcIixcbiAgICogICAgc2VjdGlvbnM6IFt7XG4gICAqICAgICAgb2Zmc2V0OiB7bGluZToxMDAsIGNvbHVtbjoxMH0sXG4gICAqICAgICAgbWFwOiB7XG4gICAqICAgICAgICB2ZXJzaW9uIDogMyxcbiAgICogICAgICAgIGZpbGU6IFwic2VjdGlvbi5qc1wiLFxuICAgKiAgICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICAgKiAgICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gICAqICAgICAgICBtYXBwaW5nczogXCJBQUFBLEU7O0FCQ0RFO1wiXG4gICAqICAgICAgfVxuICAgKiAgICB9XSxcbiAgICogIH1cbiAgICpcbiAgICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQjaGVhZGluZz1oLjUzNWVzM3hlcHJndFxuICAgKi9cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgICBpZiAodHlwZW9mIGFTb3VyY2VNYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICAgIH1cblxuICAgIHZhciB2ZXJzaW9uID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAndmVyc2lvbicpO1xuICAgIHZhciBzZWN0aW9ucyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NlY3Rpb25zJyk7XG5cbiAgICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHZlcnNpb246ICcgKyB2ZXJzaW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gICAgdGhpcy5fbmFtZXMgPSBuZXcgQXJyYXlTZXQoKTtcblxuICAgIHZhciBsYXN0T2Zmc2V0ID0ge1xuICAgICAgbGluZTogLTEsXG4gICAgICBjb2x1bW46IDBcbiAgICB9O1xuICAgIHRoaXMuX3NlY3Rpb25zID0gc2VjdGlvbnMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICBpZiAocy51cmwpIHtcbiAgICAgICAgLy8gVGhlIHVybCBmaWVsZCB3aWxsIHJlcXVpcmUgc3VwcG9ydCBmb3IgYXN5bmNocm9uaWNpdHkuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8xNlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1cHBvcnQgZm9yIHVybCBmaWVsZCBpbiBzZWN0aW9ucyBub3QgaW1wbGVtZW50ZWQuJyk7XG4gICAgICB9XG4gICAgICB2YXIgb2Zmc2V0ID0gdXRpbC5nZXRBcmcocywgJ29mZnNldCcpO1xuICAgICAgdmFyIG9mZnNldExpbmUgPSB1dGlsLmdldEFyZyhvZmZzZXQsICdsaW5lJyk7XG4gICAgICB2YXIgb2Zmc2V0Q29sdW1uID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnY29sdW1uJyk7XG5cbiAgICAgIGlmIChvZmZzZXRMaW5lIDwgbGFzdE9mZnNldC5saW5lIHx8XG4gICAgICAgICAgKG9mZnNldExpbmUgPT09IGxhc3RPZmZzZXQubGluZSAmJiBvZmZzZXRDb2x1bW4gPCBsYXN0T2Zmc2V0LmNvbHVtbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZWN0aW9uIG9mZnNldHMgbXVzdCBiZSBvcmRlcmVkIGFuZCBub24tb3ZlcmxhcHBpbmcuJyk7XG4gICAgICB9XG4gICAgICBsYXN0T2Zmc2V0ID0gb2Zmc2V0O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBnZW5lcmF0ZWRPZmZzZXQ6IHtcbiAgICAgICAgICAvLyBUaGUgb2Zmc2V0IGZpZWxkcyBhcmUgMC1iYXNlZCwgYnV0IHdlIHVzZSAxLWJhc2VkIGluZGljZXMgd2hlblxuICAgICAgICAgIC8vIGVuY29kaW5nL2RlY29kaW5nIGZyb20gVkxRLlxuICAgICAgICAgIGdlbmVyYXRlZExpbmU6IG9mZnNldExpbmUgKyAxLFxuICAgICAgICAgIGdlbmVyYXRlZENvbHVtbjogb2Zmc2V0Q29sdW1uICsgMVxuICAgICAgICB9LFxuICAgICAgICBjb25zdW1lcjogbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZ2V0QXJnKHMsICdtYXAnKSlcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG4gIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTb3VyY2VNYXBDb25zdW1lcjtcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICAgKi9cbiAgSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIG9yaWdpbmFsIHNvdXJjZXMuXG4gICAqL1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ3NvdXJjZXMnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3NlY3Rpb25zW2ldLmNvbnN1bWVyLnNvdXJjZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBzb3VyY2VzLnB1c2godGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlc1tqXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzb3VyY2VzO1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICAgKiBzb3VyY2UncyBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3RcbiAgICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAqXG4gICAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gICAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICAgKlxuICAgKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gICAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAgICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAgICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICAgKi9cbiAgSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgICAgfTtcblxuICAgICAgLy8gRmluZCB0aGUgc2VjdGlvbiBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24gd2UncmUgdHJ5aW5nIHRvIG1hcFxuICAgICAgLy8gdG8gYW4gb3JpZ2luYWwgcG9zaXRpb24uXG4gICAgICB2YXIgc2VjdGlvbkluZGV4ID0gYmluYXJ5U2VhcmNoLnNlYXJjaChuZWVkbGUsIHRoaXMuX3NlY3Rpb25zLFxuICAgICAgICBmdW5jdGlvbihuZWVkbGUsIHNlY3Rpb24pIHtcbiAgICAgICAgICB2YXIgY21wID0gbmVlZGxlLmdlbmVyYXRlZExpbmUgLSBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lO1xuICAgICAgICAgIGlmIChjbXApIHtcbiAgICAgICAgICAgIHJldHVybiBjbXA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIChuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAgICAgICAgIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbik7XG4gICAgICAgIH0pO1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tzZWN0aW9uSW5kZXhdO1xuXG4gICAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzb3VyY2U6IG51bGwsXG4gICAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgICAgbmFtZTogbnVsbFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2VjdGlvbi5jb25zdW1lci5vcmlnaW5hbFBvc2l0aW9uRm9yKHtcbiAgICAgICAgbGluZTogbmVlZGxlLmdlbmVyYXRlZExpbmUgLVxuICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgIGNvbHVtbjogbmVlZGxlLmdlbmVyYXRlZENvbHVtbiAtXG4gICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICAgID8gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uIC0gMVxuICAgICAgICAgICA6IDApLFxuICAgICAgICBiaWFzOiBhQXJncy5iaWFzXG4gICAgICB9KTtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBoYXZlIHRoZSBzb3VyY2UgY29udGVudCBmb3IgZXZlcnkgc291cmNlIGluIHRoZSBzb3VyY2VcbiAgICogbWFwLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzID1cbiAgICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnMuZXZlcnkoZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgcmV0dXJuIHMuY29uc3VtZXIuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50LiBUaGUgb25seSBhcmd1bWVudCBpcyB0aGUgdXJsIG9mIHRoZVxuICAgKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gICAqIGF2YWlsYWJsZS5cbiAgICovXG4gIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gICAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICAgIHZhciBjb250ZW50ID0gc2VjdGlvbi5jb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIHRydWUpO1xuICAgICAgICBpZiAoY29udGVudCkge1xuICAgICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTb3VyY2UgKyAnXCIgaXMgbm90IGluIHRoZSBTb3VyY2VNYXAuJyk7XG4gICAgICB9XG4gICAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAgICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gICAqIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICpcbiAgICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gICAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAgICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAgICpcbiAgICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICpcbiAgICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAgICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gICAqL1xuICBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgICAvLyBPbmx5IGNvbnNpZGVyIHRoaXMgc2VjdGlvbiBpZiB0aGUgcmVxdWVzdGVkIHNvdXJjZSBpcyBpbiB0aGUgbGlzdCBvZlxuICAgICAgICAvLyBzb3VyY2VzIG9mIHRoZSBjb25zdW1lci5cbiAgICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlcy5pbmRleE9mKHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJykpID09PSAtMSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBnZW5lcmF0ZWRQb3NpdGlvbiA9IHNlY3Rpb24uY29uc3VtZXIuZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpO1xuICAgICAgICBpZiAoZ2VuZXJhdGVkUG9zaXRpb24pIHtcbiAgICAgICAgICB2YXIgcmV0ID0ge1xuICAgICAgICAgICAgbGluZTogZ2VuZXJhdGVkUG9zaXRpb24ubGluZSArXG4gICAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZFBvc2l0aW9uLmNvbHVtbiArXG4gICAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lXG4gICAgICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgICAgIDogMClcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsXG4gICAgICB9O1xuICAgIH07XG5cbiAgLyoqXG4gICAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAgICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gICAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gICAqL1xuICBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuICAgICAgICB2YXIgc2VjdGlvbk1hcHBpbmdzID0gc2VjdGlvbi5jb25zdW1lci5fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VjdGlvbk1hcHBpbmdzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgdmFyIG1hcHBpbmcgPSBzZWN0aW9uTWFwcGluZ3NbaV07XG5cbiAgICAgICAgICB2YXIgc291cmNlID0gc2VjdGlvbi5jb25zdW1lci5fc291cmNlcy5hdChtYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc291cmNlID0gdXRpbC5qb2luKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcblxuICAgICAgICAgIHZhciBuYW1lID0gc2VjdGlvbi5jb25zdW1lci5fbmFtZXMuYXQobWFwcGluZy5uYW1lKTtcbiAgICAgICAgICB0aGlzLl9uYW1lcy5hZGQobmFtZSk7XG4gICAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG5cbiAgICAgICAgICAvLyBUaGUgbWFwcGluZ3MgY29taW5nIGZyb20gdGhlIGNvbnN1bWVyIGZvciB0aGUgc2VjdGlvbiBoYXZlXG4gICAgICAgICAgLy8gZ2VuZXJhdGVkIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY3Rpb24sIHNvIHdlXG4gICAgICAgICAgLy8gbmVlZCB0byBvZmZzZXQgdGhlbSB0byBiZSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGNvbmNhdGVuYXRlZFxuICAgICAgICAgIC8vIGdlbmVyYXRlZCBmaWxlLlxuICAgICAgICAgIHZhciBhZGp1c3RlZE1hcHBpbmcgPSB7XG4gICAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICAgIGdlbmVyYXRlZExpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSArXG4gICAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG1hcHBpbmcuY29sdW1uICtcbiAgICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSlcbiAgICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgICBpZiAodHlwZW9mIGFkanVzdGVkTWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncy5wdXNoKGFkanVzdGVkTWFwcGluZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHF1aWNrU29ydCh0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgICAgcXVpY2tTb3J0KHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgICB9O1xuXG4gIGV4cG9ydHMuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyID0gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyO1xufVxuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyLmpzXG4gKiogbW9kdWxlIGlkID0gOFxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xue1xuICBleHBvcnRzLkdSRUFURVNUX0xPV0VSX0JPVU5EID0gMTtcbiAgZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCA9IDI7XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZSBpbXBsZW1lbnRhdGlvbiBvZiBiaW5hcnkgc2VhcmNoLlxuICAgKlxuICAgKiBAcGFyYW0gYUxvdyBJbmRpY2VzIGhlcmUgYW5kIGxvd2VyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gICAqIEBwYXJhbSBhSGlnaCBJbmRpY2VzIGhlcmUgYW5kIGhpZ2hlciBkbyBub3QgY29udGFpbiB0aGUgbmVlZGxlLlxuICAgKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCBiZWluZyBzZWFyY2hlZCBmb3IuXG4gICAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIG5vbi1lbXB0eSBhcnJheSBiZWluZyBzZWFyY2hlZC5cbiAgICogQHBhcmFtIGFDb21wYXJlIEZ1bmN0aW9uIHdoaWNoIHRha2VzIHR3byBlbGVtZW50cyBhbmQgcmV0dXJucyAtMSwgMCwgb3IgMS5cbiAgICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICAgKiAgICAgJ2JpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAgICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAgICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVjdXJzaXZlU2VhcmNoKGFMb3csIGFIaWdoLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcykge1xuICAgIC8vIFRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gICAgLy9cbiAgICAvLyAgIDEuIFdlIGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQgd2UgYXJlIGxvb2tpbmcgZm9yLlxuICAgIC8vXG4gICAgLy8gICAyLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGJ1dCB3ZSBjYW4gcmV0dXJuIHRoZSBpbmRleCBvZlxuICAgIC8vICAgICAgdGhlIG5leHQtY2xvc2VzdCBlbGVtZW50LlxuICAgIC8vXG4gICAgLy8gICAzLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGFuZCB0aGVyZSBpcyBubyBuZXh0LWNsb3Nlc3RcbiAgICAvLyAgICAgIGVsZW1lbnQgdGhhbiB0aGUgb25lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLCBzbyB3ZSByZXR1cm4gLTEuXG4gICAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGFIaWdoIC0gYUxvdykgLyAyKSArIGFMb3c7XG4gICAgdmFyIGNtcCA9IGFDb21wYXJlKGFOZWVkbGUsIGFIYXlzdGFja1ttaWRdLCB0cnVlKTtcbiAgICBpZiAoY21wID09PSAwKSB7XG4gICAgICAvLyBGb3VuZCB0aGUgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gICAgICByZXR1cm4gbWlkO1xuICAgIH1cbiAgICBlbHNlIGlmIChjbXAgPiAwKSB7XG4gICAgICAvLyBPdXIgbmVlZGxlIGlzIGdyZWF0ZXIgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICAgIGlmIChhSGlnaCAtIG1pZCA+IDEpIHtcbiAgICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIHVwcGVyIGhhbGYuXG4gICAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2gobWlkLCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGUgZXhhY3QgbmVlZGxlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZCBpbiB0aGlzIGhheXN0YWNrLiBEZXRlcm1pbmUgaWZcbiAgICAgIC8vIHdlIGFyZSBpbiB0ZXJtaW5hdGlvbiBjYXNlICgzKSBvciAoMikgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgdGhpbmcuXG4gICAgICBpZiAoYUJpYXMgPT0gZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCkge1xuICAgICAgICByZXR1cm4gYUhpZ2ggPCBhSGF5c3RhY2subGVuZ3RoID8gYUhpZ2ggOiAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBtaWQ7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy8gT3VyIG5lZWRsZSBpcyBsZXNzIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgICBpZiAobWlkIC0gYUxvdyA+IDEpIHtcbiAgICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIGxvd2VyIGhhbGYuXG4gICAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2goYUxvdywgbWlkLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIHdlIGFyZSBpbiB0ZXJtaW5hdGlvbiBjYXNlICgzKSBvciAoMikgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgdGhpbmcuXG4gICAgICBpZiAoYUJpYXMgPT0gZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCkge1xuICAgICAgICByZXR1cm4gbWlkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFMb3cgPCAwID8gLTEgOiBhTG93O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2ggd2hpY2ggd2lsbCBhbHdheXMgdHJ5IGFuZCByZXR1cm5cbiAgICogdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IGVsZW1lbnQgaWYgdGhlcmUgaXMgbm8gZXhhY3QgaGl0LiBUaGlzIGlzIGJlY2F1c2VcbiAgICogbWFwcGluZ3MgYmV0d2VlbiBvcmlnaW5hbCBhbmQgZ2VuZXJhdGVkIGxpbmUvY29sIHBhaXJzIGFyZSBzaW5nbGUgcG9pbnRzLFxuICAgKiBhbmQgdGhlcmUgaXMgYW4gaW1wbGljaXQgcmVnaW9uIGJldHdlZW4gZWFjaCBvZiB0aGVtLCBzbyBhIG1pc3MganVzdCBtZWFuc1xuICAgKiB0aGF0IHlvdSBhcmVuJ3Qgb24gdGhlIHZlcnkgc3RhcnQgb2YgYSByZWdpb24uXG4gICAqXG4gICAqIEBwYXJhbSBhTmVlZGxlIFRoZSBlbGVtZW50IHlvdSBhcmUgbG9va2luZyBmb3IuXG4gICAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIGFycmF5IHRoYXQgaXMgYmVpbmcgc2VhcmNoZWQuXG4gICAqIEBwYXJhbSBhQ29tcGFyZSBBIGZ1bmN0aW9uIHdoaWNoIHRha2VzIHRoZSBuZWVkbGUgYW5kIGFuIGVsZW1lbnQgaW4gdGhlXG4gICAqICAgICBhcnJheSBhbmQgcmV0dXJucyAtMSwgMCwgb3IgMSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgbmVlZGxlIGlzIGxlc3NcbiAgICogICAgIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gdGhlIGVsZW1lbnQsIHJlc3BlY3RpdmVseS5cbiAgICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICAgKiAgICAgJ2JpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAgICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAgICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICAgKiAgICAgRGVmYXVsdHMgdG8gJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gICAqL1xuICBleHBvcnRzLnNlYXJjaCA9IGZ1bmN0aW9uIHNlYXJjaChhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcykge1xuICAgIGlmIChhSGF5c3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4ID0gcmVjdXJzaXZlU2VhcmNoKC0xLCBhSGF5c3RhY2subGVuZ3RoLCBhTmVlZGxlLCBhSGF5c3RhY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb21wYXJlLCBhQmlhcyB8fCBleHBvcnRzLkdSRUFURVNUX0xPV0VSX0JPVU5EKTtcbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgLy8gV2UgaGF2ZSBmb3VuZCBlaXRoZXIgdGhlIGV4YWN0IGVsZW1lbnQsIG9yIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudCB0aGFuXG4gICAgLy8gdGhlIG9uZSB3ZSBhcmUgc2VhcmNoaW5nIGZvci4gSG93ZXZlciwgdGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgc3VjaFxuICAgIC8vIGVsZW1lbnQuIE1ha2Ugc3VyZSB3ZSBhbHdheXMgcmV0dXJuIHRoZSBzbWFsbGVzdCBvZiB0aGVzZS5cbiAgICB3aGlsZSAoaW5kZXggLSAxID49IDApIHtcbiAgICAgIGlmIChhQ29tcGFyZShhSGF5c3RhY2tbaW5kZXhdLCBhSGF5c3RhY2tbaW5kZXggLSAxXSwgdHJ1ZSkgIT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAtLWluZGV4O1xuICAgIH1cblxuICAgIHJldHVybiBpbmRleDtcbiAgfTtcbn1cblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9saWIvYmluYXJ5LXNlYXJjaC5qc1xuICoqIG1vZHVsZSBpZCA9IDlcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cbntcbiAgLy8gSXQgdHVybnMgb3V0IHRoYXQgc29tZSAobW9zdD8pIEphdmFTY3JpcHQgZW5naW5lcyBkb24ndCBzZWxmLWhvc3RcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5zb3J0YC4gVGhpcyBtYWtlcyBzZW5zZSBiZWNhdXNlIEMrKyB3aWxsIGxpa2VseSByZW1haW5cbiAgLy8gZmFzdGVyIHRoYW4gSlMgd2hlbiBkb2luZyByYXcgQ1BVLWludGVuc2l2ZSBzb3J0aW5nLiBIb3dldmVyLCB3aGVuIHVzaW5nIGFcbiAgLy8gY3VzdG9tIGNvbXBhcmF0b3IgZnVuY3Rpb24sIGNhbGxpbmcgYmFjayBhbmQgZm9ydGggYmV0d2VlbiB0aGUgVk0ncyBDKysgYW5kXG4gIC8vIEpJVCdkIEpTIGlzIHJhdGhlciBzbG93ICphbmQqIGxvc2VzIEpJVCB0eXBlIGluZm9ybWF0aW9uLCByZXN1bHRpbmcgaW5cbiAgLy8gd29yc2UgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRoYW4gd291bGQgYmUgb3B0aW1hbC4gSW5cbiAgLy8gZmFjdCwgd2hlbiBzb3J0aW5nIHdpdGggYSBjb21wYXJhdG9yLCB0aGVzZSBjb3N0cyBvdXR3ZWlnaCB0aGUgYmVuZWZpdHMgb2ZcbiAgLy8gc29ydGluZyBpbiBDKysuIEJ5IHVzaW5nIG91ciBvd24gSlMtaW1wbGVtZW50ZWQgUXVpY2sgU29ydCAoYmVsb3cpLCB3ZSBnZXRcbiAgLy8gYSB+MzUwMG1zIG1lYW4gc3BlZWQtdXAgaW4gYGJlbmNoL2JlbmNoLmh0bWxgLlxuXG4gIC8qKlxuICAgKiBTd2FwIHRoZSBlbGVtZW50cyBpbmRleGVkIGJ5IGB4YCBhbmQgYHlgIGluIHRoZSBhcnJheSBgYXJ5YC5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gYXJ5XG4gICAqICAgICAgICBUaGUgYXJyYXkuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gICAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IGl0ZW0uXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB5XG4gICAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNlY29uZCBpdGVtLlxuICAgKi9cbiAgZnVuY3Rpb24gc3dhcChhcnksIHgsIHkpIHtcbiAgICB2YXIgdGVtcCA9IGFyeVt4XTtcbiAgICBhcnlbeF0gPSBhcnlbeV07XG4gICAgYXJ5W3ldID0gdGVtcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmFuZG9tIGludGVnZXIgd2l0aGluIHRoZSByYW5nZSBgbG93IC4uIGhpZ2hgIGluY2x1c2l2ZS5cbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGxvd1xuICAgKiAgICAgICAgVGhlIGxvd2VyIGJvdW5kIG9uIHRoZSByYW5nZS5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcbiAgICogICAgICAgIFRoZSB1cHBlciBib3VuZCBvbiB0aGUgcmFuZ2UuXG4gICAqL1xuICBmdW5jdGlvbiByYW5kb21JbnRJblJhbmdlKGxvdywgaGlnaCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKGxvdyArIChNYXRoLnJhbmRvbSgpICogKGhpZ2ggLSBsb3cpKSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIFF1aWNrIFNvcnQgYWxnb3JpdGhtLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAgICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbXBhcmF0b3JcbiAgICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IHBcbiAgICogICAgICAgIFN0YXJ0IGluZGV4IG9mIHRoZSBhcnJheVxuICAgKiBAcGFyYW0ge051bWJlcn0gclxuICAgKiAgICAgICAgRW5kIGluZGV4IG9mIHRoZSBhcnJheVxuICAgKi9cbiAgZnVuY3Rpb24gZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCByKSB7XG4gICAgLy8gSWYgb3VyIGxvd2VyIGJvdW5kIGlzIGxlc3MgdGhhbiBvdXIgdXBwZXIgYm91bmQsIHdlICgxKSBwYXJ0aXRpb24gdGhlXG4gICAgLy8gYXJyYXkgaW50byB0d28gcGllY2VzIGFuZCAoMikgcmVjdXJzZSBvbiBlYWNoIGhhbGYuIElmIGl0IGlzIG5vdCwgdGhpcyBpc1xuICAgIC8vIHRoZSBlbXB0eSBhcnJheSBhbmQgb3VyIGJhc2UgY2FzZS5cblxuICAgIGlmIChwIDwgcikge1xuICAgICAgLy8gKDEpIFBhcnRpdGlvbmluZy5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUgcGFydGl0aW9uaW5nIGNob29zZXMgYSBwaXZvdCBiZXR3ZWVuIGBwYCBhbmQgYHJgIGFuZCBtb3ZlcyBhbGxcbiAgICAgIC8vIGVsZW1lbnRzIHRoYXQgYXJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgcGl2b3QgdG8gdGhlIGJlZm9yZSBpdCwgYW5kXG4gICAgICAvLyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBpdCBhZnRlciBpdC4gVGhlIGVmZmVjdCBpcyB0aGF0XG4gICAgICAvLyBvbmNlIHBhcnRpdGlvbiBpcyBkb25lLCB0aGUgcGl2b3QgaXMgaW4gdGhlIGV4YWN0IHBsYWNlIGl0IHdpbGwgYmUgd2hlblxuICAgICAgLy8gdGhlIGFycmF5IGlzIHB1dCBpbiBzb3J0ZWQgb3JkZXIsIGFuZCBpdCB3aWxsIG5vdCBuZWVkIHRvIGJlIG1vdmVkXG4gICAgICAvLyBhZ2Fpbi4gVGhpcyBydW5zIGluIE8obikgdGltZS5cblxuICAgICAgLy8gQWx3YXlzIGNob29zZSBhIHJhbmRvbSBwaXZvdCBzbyB0aGF0IGFuIGlucHV0IGFycmF5IHdoaWNoIGlzIHJldmVyc2VcbiAgICAgIC8vIHNvcnRlZCBkb2VzIG5vdCBjYXVzZSBPKG5eMikgcnVubmluZyB0aW1lLlxuICAgICAgdmFyIHBpdm90SW5kZXggPSByYW5kb21JbnRJblJhbmdlKHAsIHIpO1xuICAgICAgdmFyIGkgPSBwIC0gMTtcblxuICAgICAgc3dhcChhcnksIHBpdm90SW5kZXgsIHIpO1xuICAgICAgdmFyIHBpdm90ID0gYXJ5W3JdO1xuXG4gICAgICAvLyBJbW1lZGlhdGVseSBhZnRlciBgamAgaXMgaW5jcmVtZW50ZWQgaW4gdGhpcyBsb29wLCB0aGUgZm9sbG93aW5nIGhvbGRcbiAgICAgIC8vIHRydWU6XG4gICAgICAvL1xuICAgICAgLy8gICAqIEV2ZXJ5IGVsZW1lbnQgaW4gYGFyeVtwIC4uIGldYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHBpdm90LlxuICAgICAgLy9cbiAgICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbaSsxIC4uIGotMV1gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcGl2b3QuXG4gICAgICBmb3IgKHZhciBqID0gcDsgaiA8IHI7IGorKykge1xuICAgICAgICBpZiAoY29tcGFyYXRvcihhcnlbal0sIHBpdm90KSA8PSAwKSB7XG4gICAgICAgICAgaSArPSAxO1xuICAgICAgICAgIHN3YXAoYXJ5LCBpLCBqKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzd2FwKGFyeSwgaSArIDEsIGopO1xuICAgICAgdmFyIHEgPSBpICsgMTtcblxuICAgICAgLy8gKDIpIFJlY3Vyc2Ugb24gZWFjaCBoYWxmLlxuXG4gICAgICBkb1F1aWNrU29ydChhcnksIGNvbXBhcmF0b3IsIHAsIHEgLSAxKTtcbiAgICAgIGRvUXVpY2tTb3J0KGFyeSwgY29tcGFyYXRvciwgcSArIDEsIHIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTb3J0IHRoZSBnaXZlbiBhcnJheSBpbi1wbGFjZSB3aXRoIHRoZSBnaXZlbiBjb21wYXJhdG9yIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAgICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbXBhcmF0b3JcbiAgICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAgICovXG4gIGV4cG9ydHMucXVpY2tTb3J0ID0gZnVuY3Rpb24gKGFyeSwgY29tcGFyYXRvcikge1xuICAgIGRvUXVpY2tTb3J0KGFyeSwgY29tcGFyYXRvciwgMCwgYXJ5Lmxlbmd0aCAtIDEpO1xuICB9O1xufVxuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2xpYi9xdWljay1zb3J0LmpzXG4gKiogbW9kdWxlIGlkID0gMTBcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cbntcbiAgdmFyIFNvdXJjZU1hcEdlbmVyYXRvciA9IHJlcXVpcmUoJy4vc291cmNlLW1hcC1nZW5lcmF0b3InKS5Tb3VyY2VNYXBHZW5lcmF0b3I7XG4gIHZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbiAgLy8gTWF0Y2hlcyBhIFdpbmRvd3Mtc3R5bGUgYFxcclxcbmAgbmV3bGluZSBvciBhIGBcXG5gIG5ld2xpbmUgdXNlZCBieSBhbGwgb3RoZXJcbiAgLy8gb3BlcmF0aW5nIHN5c3RlbXMgdGhlc2UgZGF5cyAoY2FwdHVyaW5nIHRoZSByZXN1bHQpLlxuICB2YXIgUkVHRVhfTkVXTElORSA9IC8oXFxyP1xcbikvO1xuXG4gIC8vIE5ld2xpbmUgY2hhcmFjdGVyIGNvZGUgZm9yIGNoYXJDb2RlQXQoKSBjb21wYXJpc29uc1xuICB2YXIgTkVXTElORV9DT0RFID0gMTA7XG5cbiAgLy8gUHJpdmF0ZSBzeW1ib2wgZm9yIGlkZW50aWZ5aW5nIGBTb3VyY2VOb2RlYHMgd2hlbiBtdWx0aXBsZSB2ZXJzaW9ucyBvZlxuICAvLyB0aGUgc291cmNlLW1hcCBsaWJyYXJ5IGFyZSBsb2FkZWQuIFRoaXMgTVVTVCBOT1QgQ0hBTkdFIGFjcm9zc1xuICAvLyB2ZXJzaW9ucyFcbiAgdmFyIGlzU291cmNlTm9kZSA9IFwiJCQkaXNTb3VyY2VOb2RlJCQkXCI7XG5cbiAgLyoqXG4gICAqIFNvdXJjZU5vZGVzIHByb3ZpZGUgYSB3YXkgdG8gYWJzdHJhY3Qgb3ZlciBpbnRlcnBvbGF0aW5nL2NvbmNhdGVuYXRpbmdcbiAgICogc25pcHBldHMgb2YgZ2VuZXJhdGVkIEphdmFTY3JpcHQgc291cmNlIGNvZGUgd2hpbGUgbWFpbnRhaW5pbmcgdGhlIGxpbmUgYW5kXG4gICAqIGNvbHVtbiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0gYUxpbmUgVGhlIG9yaWdpbmFsIGxpbmUgbnVtYmVyLlxuICAgKiBAcGFyYW0gYUNvbHVtbiBUaGUgb3JpZ2luYWwgY29sdW1uIG51bWJlci5cbiAgICogQHBhcmFtIGFTb3VyY2UgVGhlIG9yaWdpbmFsIHNvdXJjZSdzIGZpbGVuYW1lLlxuICAgKiBAcGFyYW0gYUNodW5rcyBPcHRpb25hbC4gQW4gYXJyYXkgb2Ygc3RyaW5ncyB3aGljaCBhcmUgc25pcHBldHMgb2ZcbiAgICogICAgICAgIGdlbmVyYXRlZCBKUywgb3Igb3RoZXIgU291cmNlTm9kZXMuXG4gICAqIEBwYXJhbSBhTmFtZSBUaGUgb3JpZ2luYWwgaWRlbnRpZmllci5cbiAgICovXG4gIGZ1bmN0aW9uIFNvdXJjZU5vZGUoYUxpbmUsIGFDb2x1bW4sIGFTb3VyY2UsIGFDaHVua3MsIGFOYW1lKSB7XG4gICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgIHRoaXMuc291cmNlQ29udGVudHMgPSB7fTtcbiAgICB0aGlzLmxpbmUgPSBhTGluZSA9PSBudWxsID8gbnVsbCA6IGFMaW5lO1xuICAgIHRoaXMuY29sdW1uID0gYUNvbHVtbiA9PSBudWxsID8gbnVsbCA6IGFDb2x1bW47XG4gICAgdGhpcy5zb3VyY2UgPSBhU291cmNlID09IG51bGwgPyBudWxsIDogYVNvdXJjZTtcbiAgICB0aGlzLm5hbWUgPSBhTmFtZSA9PSBudWxsID8gbnVsbCA6IGFOYW1lO1xuICAgIHRoaXNbaXNTb3VyY2VOb2RlXSA9IHRydWU7XG4gICAgaWYgKGFDaHVua3MgIT0gbnVsbCkgdGhpcy5hZGQoYUNodW5rcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFNvdXJjZU5vZGUgZnJvbSBnZW5lcmF0ZWQgY29kZSBhbmQgYSBTb3VyY2VNYXBDb25zdW1lci5cbiAgICpcbiAgICogQHBhcmFtIGFHZW5lcmF0ZWRDb2RlIFRoZSBnZW5lcmF0ZWQgY29kZVxuICAgKiBAcGFyYW0gYVNvdXJjZU1hcENvbnN1bWVyIFRoZSBTb3VyY2VNYXAgZm9yIHRoZSBnZW5lcmF0ZWQgY29kZVxuICAgKiBAcGFyYW0gYVJlbGF0aXZlUGF0aCBPcHRpb25hbC4gVGhlIHBhdGggdGhhdCByZWxhdGl2ZSBzb3VyY2VzIGluIHRoZVxuICAgKiAgICAgICAgU291cmNlTWFwQ29uc3VtZXIgc2hvdWxkIGJlIHJlbGF0aXZlIHRvLlxuICAgKi9cbiAgU291cmNlTm9kZS5mcm9tU3RyaW5nV2l0aFNvdXJjZU1hcCA9XG4gICAgZnVuY3Rpb24gU291cmNlTm9kZV9mcm9tU3RyaW5nV2l0aFNvdXJjZU1hcChhR2VuZXJhdGVkQ29kZSwgYVNvdXJjZU1hcENvbnN1bWVyLCBhUmVsYXRpdmVQYXRoKSB7XG4gICAgICAvLyBUaGUgU291cmNlTm9kZSB3ZSB3YW50IHRvIGZpbGwgd2l0aCB0aGUgZ2VuZXJhdGVkIGNvZGVcbiAgICAgIC8vIGFuZCB0aGUgU291cmNlTWFwXG4gICAgICB2YXIgbm9kZSA9IG5ldyBTb3VyY2VOb2RlKCk7XG5cbiAgICAgIC8vIEFsbCBldmVuIGluZGljZXMgb2YgdGhpcyBhcnJheSBhcmUgb25lIGxpbmUgb2YgdGhlIGdlbmVyYXRlZCBjb2RlLFxuICAgICAgLy8gd2hpbGUgYWxsIG9kZCBpbmRpY2VzIGFyZSB0aGUgbmV3bGluZXMgYmV0d2VlbiB0d28gYWRqYWNlbnQgbGluZXNcbiAgICAgIC8vIChzaW5jZSBgUkVHRVhfTkVXTElORWAgY2FwdHVyZXMgaXRzIG1hdGNoKS5cbiAgICAgIC8vIFByb2Nlc3NlZCBmcmFnbWVudHMgYXJlIHJlbW92ZWQgZnJvbSB0aGlzIGFycmF5LCBieSBjYWxsaW5nIGBzaGlmdE5leHRMaW5lYC5cbiAgICAgIHZhciByZW1haW5pbmdMaW5lcyA9IGFHZW5lcmF0ZWRDb2RlLnNwbGl0KFJFR0VYX05FV0xJTkUpO1xuICAgICAgdmFyIHNoaWZ0TmV4dExpbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGxpbmVDb250ZW50cyA9IHJlbWFpbmluZ0xpbmVzLnNoaWZ0KCk7XG4gICAgICAgIC8vIFRoZSBsYXN0IGxpbmUgb2YgYSBmaWxlIG1pZ2h0IG5vdCBoYXZlIGEgbmV3bGluZS5cbiAgICAgICAgdmFyIG5ld0xpbmUgPSByZW1haW5pbmdMaW5lcy5zaGlmdCgpIHx8IFwiXCI7XG4gICAgICAgIHJldHVybiBsaW5lQ29udGVudHMgKyBuZXdMaW5lO1xuICAgICAgfTtcblxuICAgICAgLy8gV2UgbmVlZCB0byByZW1lbWJlciB0aGUgcG9zaXRpb24gb2YgXCJyZW1haW5pbmdMaW5lc1wiXG4gICAgICB2YXIgbGFzdEdlbmVyYXRlZExpbmUgPSAxLCBsYXN0R2VuZXJhdGVkQ29sdW1uID0gMDtcblxuICAgICAgLy8gVGhlIGdlbmVyYXRlIFNvdXJjZU5vZGVzIHdlIG5lZWQgYSBjb2RlIHJhbmdlLlxuICAgICAgLy8gVG8gZXh0cmFjdCBpdCBjdXJyZW50IGFuZCBsYXN0IG1hcHBpbmcgaXMgdXNlZC5cbiAgICAgIC8vIEhlcmUgd2Ugc3RvcmUgdGhlIGxhc3QgbWFwcGluZy5cbiAgICAgIHZhciBsYXN0TWFwcGluZyA9IG51bGw7XG5cbiAgICAgIGFTb3VyY2VNYXBDb25zdW1lci5lYWNoTWFwcGluZyhmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgICBpZiAobGFzdE1hcHBpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBhZGQgdGhlIGNvZGUgZnJvbSBcImxhc3RNYXBwaW5nXCIgdG8gXCJtYXBwaW5nXCI6XG4gICAgICAgICAgLy8gRmlyc3QgY2hlY2sgaWYgdGhlcmUgaXMgYSBuZXcgbGluZSBpbiBiZXR3ZWVuLlxuICAgICAgICAgIGlmIChsYXN0R2VuZXJhdGVkTGluZSA8IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgICAgdmFyIGNvZGUgPSBcIlwiO1xuICAgICAgICAgICAgLy8gQXNzb2NpYXRlIGZpcnN0IGxpbmUgd2l0aCBcImxhc3RNYXBwaW5nXCJcbiAgICAgICAgICAgIGFkZE1hcHBpbmdXaXRoQ29kZShsYXN0TWFwcGluZywgc2hpZnROZXh0TGluZSgpKTtcbiAgICAgICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICAgICAgICAgIC8vIFRoZSByZW1haW5pbmcgY29kZSBpcyBhZGRlZCB3aXRob3V0IG1hcHBpbmdcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm8gbmV3IGxpbmUgaW4gYmV0d2Vlbi5cbiAgICAgICAgICAgIC8vIEFzc29jaWF0ZSB0aGUgY29kZSBiZXR3ZWVuIFwibGFzdEdlbmVyYXRlZENvbHVtblwiIGFuZFxuICAgICAgICAgICAgLy8gXCJtYXBwaW5nLmdlbmVyYXRlZENvbHVtblwiIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgICB2YXIgbmV4dExpbmUgPSByZW1haW5pbmdMaW5lc1swXTtcbiAgICAgICAgICAgIHZhciBjb2RlID0gbmV4dExpbmUuc3Vic3RyKDAsIG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RHZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICAgICAgcmVtYWluaW5nTGluZXNbMF0gPSBuZXh0TGluZS5zdWJzdHIobWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEdlbmVyYXRlZENvbHVtbik7XG4gICAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICAgICAgICBhZGRNYXBwaW5nV2l0aENvZGUobGFzdE1hcHBpbmcsIGNvZGUpO1xuICAgICAgICAgICAgLy8gTm8gbW9yZSByZW1haW5pbmcgY29kZSwgY29udGludWVcbiAgICAgICAgICAgIGxhc3RNYXBwaW5nID0gbWFwcGluZztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2UgYWRkIHRoZSBnZW5lcmF0ZWQgY29kZSB1bnRpbCB0aGUgZmlyc3QgbWFwcGluZ1xuICAgICAgICAvLyB0byB0aGUgU291cmNlTm9kZSB3aXRob3V0IGFueSBtYXBwaW5nLlxuICAgICAgICAvLyBFYWNoIGxpbmUgaXMgYWRkZWQgYXMgc2VwYXJhdGUgc3RyaW5nLlxuICAgICAgICB3aGlsZSAobGFzdEdlbmVyYXRlZExpbmUgPCBtYXBwaW5nLmdlbmVyYXRlZExpbmUpIHtcbiAgICAgICAgICBub2RlLmFkZChzaGlmdE5leHRMaW5lKCkpO1xuICAgICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhc3RHZW5lcmF0ZWRDb2x1bW4gPCBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbikge1xuICAgICAgICAgIHZhciBuZXh0TGluZSA9IHJlbWFpbmluZ0xpbmVzWzBdO1xuICAgICAgICAgIG5vZGUuYWRkKG5leHRMaW5lLnN1YnN0cigwLCBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbikpO1xuICAgICAgICAgIHJlbWFpbmluZ0xpbmVzWzBdID0gbmV4dExpbmUuc3Vic3RyKG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICAgIH1cbiAgICAgICAgbGFzdE1hcHBpbmcgPSBtYXBwaW5nO1xuICAgICAgfSwgdGhpcyk7XG4gICAgICAvLyBXZSBoYXZlIHByb2Nlc3NlZCBhbGwgbWFwcGluZ3MuXG4gICAgICBpZiAocmVtYWluaW5nTGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAobGFzdE1hcHBpbmcpIHtcbiAgICAgICAgICAvLyBBc3NvY2lhdGUgdGhlIHJlbWFpbmluZyBjb2RlIGluIHRoZSBjdXJyZW50IGxpbmUgd2l0aCBcImxhc3RNYXBwaW5nXCJcbiAgICAgICAgICBhZGRNYXBwaW5nV2l0aENvZGUobGFzdE1hcHBpbmcsIHNoaWZ0TmV4dExpbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYW5kIGFkZCB0aGUgcmVtYWluaW5nIGxpbmVzIHdpdGhvdXQgYW55IG1hcHBpbmdcbiAgICAgICAgbm9kZS5hZGQocmVtYWluaW5nTGluZXMuam9pbihcIlwiKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIENvcHkgc291cmNlc0NvbnRlbnQgaW50byBTb3VyY2VOb2RlXG4gICAgICBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2VGaWxlKSB7XG4gICAgICAgIHZhciBjb250ZW50ID0gYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3Ioc291cmNlRmlsZSk7XG4gICAgICAgIGlmIChjb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgICBpZiAoYVJlbGF0aXZlUGF0aCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2VGaWxlID0gdXRpbC5qb2luKGFSZWxhdGl2ZVBhdGgsIHNvdXJjZUZpbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBub2RlLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbm9kZTtcblxuICAgICAgZnVuY3Rpb24gYWRkTWFwcGluZ1dpdGhDb2RlKG1hcHBpbmcsIGNvZGUpIHtcbiAgICAgICAgaWYgKG1hcHBpbmcgPT09IG51bGwgfHwgbWFwcGluZy5zb3VyY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG5vZGUuYWRkKGNvZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBzb3VyY2UgPSBhUmVsYXRpdmVQYXRoXG4gICAgICAgICAgICA/IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBtYXBwaW5nLnNvdXJjZSlcbiAgICAgICAgICAgIDogbWFwcGluZy5zb3VyY2U7XG4gICAgICAgICAgbm9kZS5hZGQobmV3IFNvdXJjZU5vZGUobWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm5hbWUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgLyoqXG4gICAqIEFkZCBhIGNodW5rIG9mIGdlbmVyYXRlZCBKUyB0byB0aGlzIHNvdXJjZSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0gYUNodW5rIEEgc3RyaW5nIHNuaXBwZXQgb2YgZ2VuZXJhdGVkIEpTIGNvZGUsIGFub3RoZXIgaW5zdGFuY2Ugb2ZcbiAgICogICAgICAgIFNvdXJjZU5vZGUsIG9yIGFuIGFycmF5IHdoZXJlIGVhY2ggbWVtYmVyIGlzIG9uZSBvZiB0aG9zZSB0aGluZ3MuXG4gICAqL1xuICBTb3VyY2VOb2RlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBTb3VyY2VOb2RlX2FkZChhQ2h1bmspIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhQ2h1bmspKSB7XG4gICAgICBhQ2h1bmsuZm9yRWFjaChmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgICAgdGhpcy5hZGQoY2h1bmspO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGFDaHVua1tpc1NvdXJjZU5vZGVdIHx8IHR5cGVvZiBhQ2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGlmIChhQ2h1bmspIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGFDaHVuayk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgXCJFeHBlY3RlZCBhIFNvdXJjZU5vZGUsIHN0cmluZywgb3IgYW4gYXJyYXkgb2YgU291cmNlTm9kZXMgYW5kIHN0cmluZ3MuIEdvdCBcIiArIGFDaHVua1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZCBhIGNodW5rIG9mIGdlbmVyYXRlZCBKUyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgc291cmNlIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSBhQ2h1bmsgQSBzdHJpbmcgc25pcHBldCBvZiBnZW5lcmF0ZWQgSlMgY29kZSwgYW5vdGhlciBpbnN0YW5jZSBvZlxuICAgKiAgICAgICAgU291cmNlTm9kZSwgb3IgYW4gYXJyYXkgd2hlcmUgZWFjaCBtZW1iZXIgaXMgb25lIG9mIHRob3NlIHRoaW5ncy5cbiAgICovXG4gIFNvdXJjZU5vZGUucHJvdG90eXBlLnByZXBlbmQgPSBmdW5jdGlvbiBTb3VyY2VOb2RlX3ByZXBlbmQoYUNodW5rKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYUNodW5rKSkge1xuICAgICAgZm9yICh2YXIgaSA9IGFDaHVuay5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdGhpcy5wcmVwZW5kKGFDaHVua1tpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGFDaHVua1tpc1NvdXJjZU5vZGVdIHx8IHR5cGVvZiBhQ2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuY2hpbGRyZW4udW5zaGlmdChhQ2h1bmspO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRXhwZWN0ZWQgYSBTb3VyY2VOb2RlLCBzdHJpbmcsIG9yIGFuIGFycmF5IG9mIFNvdXJjZU5vZGVzIGFuZCBzdHJpbmdzLiBHb3QgXCIgKyBhQ2h1bmtcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBXYWxrIG92ZXIgdGhlIHRyZWUgb2YgSlMgc25pcHBldHMgaW4gdGhpcyBub2RlIGFuZCBpdHMgY2hpbGRyZW4uIFRoZVxuICAgKiB3YWxraW5nIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGZvciBlYWNoIHNuaXBwZXQgb2YgSlMgYW5kIGlzIHBhc3NlZCB0aGF0XG4gICAqIHNuaXBwZXQgYW5kIHRoZSBpdHMgb3JpZ2luYWwgYXNzb2NpYXRlZCBzb3VyY2UncyBsaW5lL2NvbHVtbiBsb2NhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGFGbiBUaGUgdHJhdmVyc2FsIGZ1bmN0aW9uLlxuICAgKi9cbiAgU291cmNlTm9kZS5wcm90b3R5cGUud2FsayA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfd2FsayhhRm4pIHtcbiAgICB2YXIgY2h1bms7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNodW5rID0gdGhpcy5jaGlsZHJlbltpXTtcbiAgICAgIGlmIChjaHVua1tpc1NvdXJjZU5vZGVdKSB7XG4gICAgICAgIGNodW5rLndhbGsoYUZuKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoY2h1bmsgIT09ICcnKSB7XG4gICAgICAgICAgYUZuKGNodW5rLCB7IHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMubGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLmNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBMaWtlIGBTdHJpbmcucHJvdG90eXBlLmpvaW5gIGV4Y2VwdCBmb3IgU291cmNlTm9kZXMuIEluc2VydHMgYGFTdHJgIGJldHdlZW5cbiAgICogZWFjaCBvZiBgdGhpcy5jaGlsZHJlbmAuXG4gICAqXG4gICAqIEBwYXJhbSBhU2VwIFRoZSBzZXBhcmF0b3IuXG4gICAqL1xuICBTb3VyY2VOb2RlLnByb3RvdHlwZS5qb2luID0gZnVuY3Rpb24gU291cmNlTm9kZV9qb2luKGFTZXApIHtcbiAgICB2YXIgbmV3Q2hpbGRyZW47XG4gICAgdmFyIGk7XG4gICAgdmFyIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGlmIChsZW4gPiAwKSB7XG4gICAgICBuZXdDaGlsZHJlbiA9IFtdO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGxlbi0xOyBpKyspIHtcbiAgICAgICAgbmV3Q2hpbGRyZW4ucHVzaCh0aGlzLmNoaWxkcmVuW2ldKTtcbiAgICAgICAgbmV3Q2hpbGRyZW4ucHVzaChhU2VwKTtcbiAgICAgIH1cbiAgICAgIG5ld0NoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlbltpXSk7XG4gICAgICB0aGlzLmNoaWxkcmVuID0gbmV3Q2hpbGRyZW47XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDYWxsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSBvbiB0aGUgdmVyeSByaWdodC1tb3N0IHNvdXJjZSBzbmlwcGV0LiBVc2VmdWxcbiAgICogZm9yIHRyaW1taW5nIHdoaXRlc3BhY2UgZnJvbSB0aGUgZW5kIG9mIGEgc291cmNlIG5vZGUsIGV0Yy5cbiAgICpcbiAgICogQHBhcmFtIGFQYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIHJlcGxhY2UuXG4gICAqIEBwYXJhbSBhUmVwbGFjZW1lbnQgVGhlIHRoaW5nIHRvIHJlcGxhY2UgdGhlIHBhdHRlcm4gd2l0aC5cbiAgICovXG4gIFNvdXJjZU5vZGUucHJvdG90eXBlLnJlcGxhY2VSaWdodCA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfcmVwbGFjZVJpZ2h0KGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgbGFzdENoaWxkID0gdGhpcy5jaGlsZHJlblt0aGlzLmNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuICAgIGlmIChsYXN0Q2hpbGRbaXNTb3VyY2VOb2RlXSkge1xuICAgICAgbGFzdENoaWxkLnJlcGxhY2VSaWdodChhUGF0dGVybiwgYVJlcGxhY2VtZW50KTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGxhc3RDaGlsZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXSA9IGxhc3RDaGlsZC5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaCgnJy5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGEgc291cmNlIGZpbGUuIFRoaXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgU291cmNlTWFwR2VuZXJhdG9yXG4gICAqIGluIHRoZSBzb3VyY2VzQ29udGVudCBmaWVsZC5cbiAgICpcbiAgICogQHBhcmFtIGFTb3VyY2VGaWxlIFRoZSBmaWxlbmFtZSBvZiB0aGUgc291cmNlIGZpbGVcbiAgICogQHBhcmFtIGFTb3VyY2VDb250ZW50IFRoZSBjb250ZW50IG9mIHRoZSBzb3VyY2UgZmlsZVxuICAgKi9cbiAgU291cmNlTm9kZS5wcm90b3R5cGUuc2V0U291cmNlQ29udGVudCA9XG4gICAgZnVuY3Rpb24gU291cmNlTm9kZV9zZXRTb3VyY2VDb250ZW50KGFTb3VyY2VGaWxlLCBhU291cmNlQ29udGVudCkge1xuICAgICAgdGhpcy5zb3VyY2VDb250ZW50c1t1dGlsLnRvU2V0U3RyaW5nKGFTb3VyY2VGaWxlKV0gPSBhU291cmNlQ29udGVudDtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBXYWxrIG92ZXIgdGhlIHRyZWUgb2YgU291cmNlTm9kZXMuIFRoZSB3YWxraW5nIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgZWFjaFxuICAgKiBzb3VyY2UgZmlsZSBjb250ZW50IGFuZCBpcyBwYXNzZWQgdGhlIGZpbGVuYW1lIGFuZCBzb3VyY2UgY29udGVudC5cbiAgICpcbiAgICogQHBhcmFtIGFGbiBUaGUgdHJhdmVyc2FsIGZ1bmN0aW9uLlxuICAgKi9cbiAgU291cmNlTm9kZS5wcm90b3R5cGUud2Fsa1NvdXJjZUNvbnRlbnRzID1cbiAgICBmdW5jdGlvbiBTb3VyY2VOb2RlX3dhbGtTb3VyY2VDb250ZW50cyhhRm4pIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldW2lzU291cmNlTm9kZV0pIHtcbiAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLndhbGtTb3VyY2VDb250ZW50cyhhRm4pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBzb3VyY2VzID0gT2JqZWN0LmtleXModGhpcy5zb3VyY2VDb250ZW50cyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gc291cmNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBhRm4odXRpbC5mcm9tU2V0U3RyaW5nKHNvdXJjZXNbaV0pLCB0aGlzLnNvdXJjZUNvbnRlbnRzW3NvdXJjZXNbaV1dKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNvdXJjZSBub2RlLiBXYWxrcyBvdmVyIHRoZSB0cmVlXG4gICAqIGFuZCBjb25jYXRlbmF0ZXMgYWxsIHRoZSB2YXJpb3VzIHNuaXBwZXRzIHRvZ2V0aGVyIHRvIG9uZSBzdHJpbmcuXG4gICAqL1xuICBTb3VyY2VOb2RlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfdG9TdHJpbmcoKSB7XG4gICAgdmFyIHN0ciA9IFwiXCI7XG4gICAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgc3RyICs9IGNodW5rO1xuICAgIH0pO1xuICAgIHJldHVybiBzdHI7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNvdXJjZSBub2RlIGFsb25nIHdpdGggYSBzb3VyY2VcbiAgICogbWFwLlxuICAgKi9cbiAgU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmdXaXRoU291cmNlTWFwID0gZnVuY3Rpb24gU291cmNlTm9kZV90b1N0cmluZ1dpdGhTb3VyY2VNYXAoYUFyZ3MpIHtcbiAgICB2YXIgZ2VuZXJhdGVkID0ge1xuICAgICAgY29kZTogXCJcIixcbiAgICAgIGxpbmU6IDEsXG4gICAgICBjb2x1bW46IDBcbiAgICB9O1xuICAgIHZhciBtYXAgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKGFBcmdzKTtcbiAgICB2YXIgc291cmNlTWFwcGluZ0FjdGl2ZSA9IGZhbHNlO1xuICAgIHZhciBsYXN0T3JpZ2luYWxTb3VyY2UgPSBudWxsO1xuICAgIHZhciBsYXN0T3JpZ2luYWxMaW5lID0gbnVsbDtcbiAgICB2YXIgbGFzdE9yaWdpbmFsQ29sdW1uID0gbnVsbDtcbiAgICB2YXIgbGFzdE9yaWdpbmFsTmFtZSA9IG51bGw7XG4gICAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaywgb3JpZ2luYWwpIHtcbiAgICAgIGdlbmVyYXRlZC5jb2RlICs9IGNodW5rO1xuICAgICAgaWYgKG9yaWdpbmFsLnNvdXJjZSAhPT0gbnVsbFxuICAgICAgICAgICYmIG9yaWdpbmFsLmxpbmUgIT09IG51bGxcbiAgICAgICAgICAmJiBvcmlnaW5hbC5jb2x1bW4gIT09IG51bGwpIHtcbiAgICAgICAgaWYobGFzdE9yaWdpbmFsU291cmNlICE9PSBvcmlnaW5hbC5zb3VyY2VcbiAgICAgICAgICAgfHwgbGFzdE9yaWdpbmFsTGluZSAhPT0gb3JpZ2luYWwubGluZVxuICAgICAgICAgICB8fCBsYXN0T3JpZ2luYWxDb2x1bW4gIT09IG9yaWdpbmFsLmNvbHVtblxuICAgICAgICAgICB8fCBsYXN0T3JpZ2luYWxOYW1lICE9PSBvcmlnaW5hbC5uYW1lKSB7XG4gICAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgICAgc291cmNlOiBvcmlnaW5hbC5zb3VyY2UsXG4gICAgICAgICAgICBvcmlnaW5hbDoge1xuICAgICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgICBjb2x1bW46IG9yaWdpbmFsLmNvbHVtblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWQuY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZTogb3JpZ2luYWwubmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG9yaWdpbmFsLnNvdXJjZTtcbiAgICAgICAgbGFzdE9yaWdpbmFsTGluZSA9IG9yaWdpbmFsLmxpbmU7XG4gICAgICAgIGxhc3RPcmlnaW5hbENvbHVtbiA9IG9yaWdpbmFsLmNvbHVtbjtcbiAgICAgICAgbGFzdE9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsLm5hbWU7XG4gICAgICAgIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICAgIG1hcC5hZGRNYXBwaW5nKHtcbiAgICAgICAgICBnZW5lcmF0ZWQ6IHtcbiAgICAgICAgICAgIGxpbmU6IGdlbmVyYXRlZC5saW5lLFxuICAgICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWQuY29sdW1uXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbGFzdE9yaWdpbmFsU291cmNlID0gbnVsbDtcbiAgICAgICAgc291cmNlTWFwcGluZ0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaWR4ID0gMCwgbGVuZ3RoID0gY2h1bmsubGVuZ3RoOyBpZHggPCBsZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgIGlmIChjaHVuay5jaGFyQ29kZUF0KGlkeCkgPT09IE5FV0xJTkVfQ09ERSkge1xuICAgICAgICAgIGdlbmVyYXRlZC5saW5lKys7XG4gICAgICAgICAgZ2VuZXJhdGVkLmNvbHVtbiA9IDA7XG4gICAgICAgICAgLy8gTWFwcGluZ3MgZW5kIGF0IGVvbFxuICAgICAgICAgIGlmIChpZHggKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAgIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2VNYXBwaW5nQWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICAgICAgICBtYXAuYWRkTWFwcGluZyh7XG4gICAgICAgICAgICAgIHNvdXJjZTogb3JpZ2luYWwuc291cmNlLFxuICAgICAgICAgICAgICBvcmlnaW5hbDoge1xuICAgICAgICAgICAgICAgIGxpbmU6IG9yaWdpbmFsLmxpbmUsXG4gICAgICAgICAgICAgICAgY29sdW1uOiBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZ2VuZXJhdGVkOiB7XG4gICAgICAgICAgICAgICAgbGluZTogZ2VuZXJhdGVkLmxpbmUsXG4gICAgICAgICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWQuY29sdW1uXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG5hbWU6IG9yaWdpbmFsLm5hbWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBnZW5lcmF0ZWQuY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLndhbGtTb3VyY2VDb250ZW50cyhmdW5jdGlvbiAoc291cmNlRmlsZSwgc291cmNlQ29udGVudCkge1xuICAgICAgbWFwLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgc291cmNlQ29udGVudCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4geyBjb2RlOiBnZW5lcmF0ZWQuY29kZSwgbWFwOiBtYXAgfTtcbiAgfTtcblxuICBleHBvcnRzLlNvdXJjZU5vZGUgPSBTb3VyY2VOb2RlO1xufVxuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2xpYi9zb3VyY2Utbm9kZS5qc1xuICoqIG1vZHVsZSBpZCA9IDExXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9
|